var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Updux_subduxes, _Updux_memoInitialState, _Updux_memoBuildReducer, _Updux_memoBuildSelectors, _Updux_memoBuildEffects, _Updux_memoBuildReactions, _Updux_actions, _Updux_defaultMutation, _Updux_effects, _Updux_reactions, _Updux_mutations, _Updux_inheritedReducer, _Updux_selectors; import * as rtk from '@reduxjs/toolkit'; const { configureStore, } = rtk; import baseMoize from 'moize/mjs/index.mjs'; import { buildInitialState } from './initialState.js'; import { buildActions } from './actions.js'; import { D } from '@mobily/ts-belt'; import { buildReducer } from './reducer.js'; import { buildSelectors } from './selectors.js'; import { buildEffectsMiddleware, buildEffects, augmentMiddlewareApi } from './effects.js'; import { augmentGetState, augmentDispatch } from './createStore.js'; import { buildReactions } from './reactions.js'; const moize = (func) => baseMoize(func, { maxSize: 1 }); /** * @description main Updux class */ export default class Updux { constructor(duxConfig) { var _a, _b, _c; this.duxConfig = duxConfig; /** @internal */ _Updux_subduxes.set(this, void 0); /** @internal */ _Updux_memoInitialState.set(this, moize(buildInitialState)); /** @internal */ _Updux_memoBuildReducer.set(this, moize(buildReducer)); /** @internal */ _Updux_memoBuildSelectors.set(this, moize(buildSelectors)); /** @internal */ _Updux_memoBuildEffects.set(this, moize(buildEffects)); /** @internal */ _Updux_memoBuildReactions.set(this, moize(buildReactions)); /** @internal */ _Updux_actions.set(this, {}); /** @internal */ _Updux_defaultMutation.set(this, void 0); /** @internal */ _Updux_effects.set(this, []); /** @internal */ _Updux_reactions.set(this, []); /** @internal */ _Updux_mutations.set(this, []); /** @internal */ _Updux_inheritedReducer.set(this, void 0); /** @internal */ _Updux_selectors.set(this, {}); if (duxConfig.subduxes) __classPrivateFieldSet(this, _Updux_subduxes, D.map(duxConfig.subduxes, (s) => s instanceof Updux ? s : new Updux(s)), "f"); __classPrivateFieldSet(this, _Updux_inheritedReducer, duxConfig.reducer, "f"); __classPrivateFieldSet(this, _Updux_effects, (_a = duxConfig.effects) !== null && _a !== void 0 ? _a : [], "f"); __classPrivateFieldSet(this, _Updux_reactions, (_b = duxConfig.reactions) !== null && _b !== void 0 ? _b : [], "f"); __classPrivateFieldSet(this, _Updux_actions, buildActions(duxConfig.actions, __classPrivateFieldGet(this, _Updux_subduxes, "f")), "f"); __classPrivateFieldSet(this, _Updux_selectors, (_c = duxConfig.selectors) !== null && _c !== void 0 ? _c : {}, "f"); } /** * @description Initial state of the dux. */ get initialState() { return __classPrivateFieldGet(this, _Updux_memoInitialState, "f").call(this, this.duxConfig.initialState, __classPrivateFieldGet(this, _Updux_subduxes, "f")); } get subduxes() { return __classPrivateFieldGet(this, _Updux_subduxes, "f"); } get actions() { return __classPrivateFieldGet(this, _Updux_actions, "f"); } createStore(options = {}) { const preloadedState = options.preloadedState; const effects = buildEffectsMiddleware(this.effects, this.actions, this.selectors); let middleware = (gdm) => gdm().concat(effects); const store = configureStore({ preloadedState, reducer: this.reducer, middleware, }); store.dispatch = augmentDispatch(store.dispatch, this.actions); store.getState = augmentGetState(store.getState, this.selectors); store.actions = this.actions; store.selectors = this.selectors; for (const reaction of this.reactions) { let unsub; const r = reaction(store); unsub = store.subscribe(() => r(unsub)); } return store; } addAction(action) { const { type } = action; if (!__classPrivateFieldGet(this, _Updux_actions, "f")[type]) { __classPrivateFieldSet(this, _Updux_actions, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _Updux_actions, "f")), { [type]: action }), "f"); return; } if (__classPrivateFieldGet(this, _Updux_actions, "f")[type] !== action) throw new Error(`redefining action ${type}`); } addSelector(name, selector) { __classPrivateFieldSet(this, _Updux_selectors, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _Updux_selectors, "f")), { [name]: selector }), "f"); return this; } addMutation(actionCreator, mutation, terminal = false) { var _a; if (typeof actionCreator === 'string') { if (!this.actions[actionCreator]) throw new Error(`action ${actionCreator} not found`); actionCreator = this.actions[actionCreator]; } else { this.addAction(actionCreator); } __classPrivateFieldSet(this, _Updux_mutations, __classPrivateFieldGet(this, _Updux_mutations, "f").concat({ terminal, matcher: (_a = actionCreator.match) !== null && _a !== void 0 ? _a : actionCreator, mutation, }), "f"); return this; } setDefaultMutation(mutation, terminal = false) { __classPrivateFieldSet(this, _Updux_defaultMutation, { terminal, mutation }, "f"); return this; } get reducer() { return __classPrivateFieldGet(this, _Updux_memoBuildReducer, "f").call(this, this.initialState, __classPrivateFieldGet(this, _Updux_mutations, "f"), __classPrivateFieldGet(this, _Updux_defaultMutation, "f"), __classPrivateFieldGet(this, _Updux_subduxes, "f"), __classPrivateFieldGet(this, _Updux_inheritedReducer, "f")); } get selectors() { return __classPrivateFieldGet(this, _Updux_memoBuildSelectors, "f").call(this, __classPrivateFieldGet(this, _Updux_selectors, "f"), __classPrivateFieldGet(this, _Updux_subduxes, "f")); } addEffect(...args) { let effect; if (args.length === 1) { effect = args[0]; } else { let [actionCreator, originalEffect] = args; if (typeof actionCreator === 'string') { if (this.actions[actionCreator]) { actionCreator = this.actions[actionCreator]; } else { throw new Error(`action '${actionCreator}' is unknown`); } } if (!this.actions[actionCreator.type]) this.addAction(actionCreator); const test = actionCreator.hasOwnProperty('match') ? actionCreator.match : actionCreator; effect = (api) => (next) => { const e = originalEffect(api)(next); return (action) => { const func = test(action) ? e : next; return func(action); }; }; } __classPrivateFieldSet(this, _Updux_effects, __classPrivateFieldGet(this, _Updux_effects, "f").concat(effect), "f"); return this; } get effects() { return __classPrivateFieldGet(this, _Updux_memoBuildEffects, "f").call(this, __classPrivateFieldGet(this, _Updux_effects, "f"), __classPrivateFieldGet(this, _Updux_subduxes, "f")); } get upreducer() { return (action) => (state) => this.reducer(state, action); } addReaction(reaction) { let previous; const memoized = (api) => { api = augmentMiddlewareApi(api, this.actions, this.selectors); const r = reaction(api); const rMemoized = (localState, unsub) => { let p = previous; previous = localState; r(localState, p, unsub); }; return (unsub) => rMemoized(api.getState(), unsub); }; __classPrivateFieldSet(this, _Updux_reactions, __classPrivateFieldGet(this, _Updux_reactions, "f").concat(memoized), "f"); return this; } get reactions() { return __classPrivateFieldGet(this, _Updux_memoBuildReactions, "f").call(this, __classPrivateFieldGet(this, _Updux_reactions, "f"), __classPrivateFieldGet(this, _Updux_subduxes, "f")); } get defaultMutation() { return __classPrivateFieldGet(this, _Updux_defaultMutation, "f"); } /** * @description Returns an object holding the Updux reducer and all its * paraphernalia. */ get asDux() { return { initialState: this.initialState, actions: this.actions, effects: this.effects, reactions: this.reactions, reducer: this.reducer, }; } } _Updux_subduxes = new WeakMap(), _Updux_memoInitialState = new WeakMap(), _Updux_memoBuildReducer = new WeakMap(), _Updux_memoBuildSelectors = new WeakMap(), _Updux_memoBuildEffects = new WeakMap(), _Updux_memoBuildReactions = new WeakMap(), _Updux_actions = new WeakMap(), _Updux_defaultMutation = new WeakMap(), _Updux_effects = new WeakMap(), _Updux_reactions = new WeakMap(), _Updux_mutations = new WeakMap(), _Updux_inheritedReducer = new WeakMap(), _Updux_selectors = new WeakMap();