UNPKG

11 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.modern.js","sources":["../src/logger.js","../src/index.js"],"sourcesContent":["/**\r\n * Created on 1399/9/18 (2020/12/8).\r\n * @author {@link https://mirismaili.github.io S. Mahdi Mir-Ismaili}\r\n */\r\n\r\nexport const defaultLogger = (state, action, newState = null) => {\r\n\tconsole.group(\r\n\t\t'%c%s %c%s %c%s %s', 'font-weight:normal;color:#888', 'action',\r\n\t\t'color:#222', action.type,\r\n\t\t'font-weight:normal;color:#888', '@', new Date().toLocaleTimeString(),\r\n\t)\r\n\t// console.groupCollapsed('%c%s', 'font-weight:bold;color:#9E9E9E', 'prev-state')\r\n\t// console.log('%c%s', 'font-weight:bold;color:#9E9E9E', JSON.stringify(state, null, '\\t'))\r\n\t// console.groupEnd()\r\n\r\n\tconsole.log('%c%s\\t%o', 'font-weight:bold;color:#9E9E9E', 'prev-state', state)\r\n\r\n\tconsole.log('%c%s\\t', 'font-weight:bold;color:#03A9E4', 'action', action)\r\n\r\n\tconsole.log('%c%s\\t%o', 'font-weight:bold;color:#4CAF50', 'new-state',\r\n\t\tnewState === state ? 'PREV-STATE' : newState ?? 'NO-TRANSFORM')\r\n\r\n\t// console.groupCollapsed('%c%s', 'font-weight:bold;color:#4CAF50', 'new-state')\r\n\t// console.log('%c%s', 'font-weight:bold;color:#4CAF50', JSON.stringify(newState, null, '\\t'))\r\n\t// console.groupEnd()\r\n\tconsole.groupEnd()\r\n}\r\n","import deepEqual from '@rahazad/deep-equal'\nimport {graphReducer} from '@rahazad/graph-reducer'\nimport React, {useContext, useEffect, useReducer} from 'react'\nimport {defaultLogger} from './logger'\n\n/**\n * Created on 1399/9/7 (2020/11/27).\n * @author {@link https://mirismaili.github.io S. Mahdi Mir-Ismaili}\n */\n\nconst stateManager = {} // will be initialized\n\nconst StoreProvider = React.memo(({children}) => {\n\tconst {\n\t\trootReducer,\n\t\tdefaultInitialState,\n\t\tinitializer,\n\t\tpayloadCreators,\n\t\tAppContext,\n\t} = stateManager\n\n\tconst [state, dispatch] = useReducer(\n\t\trootReducer,\n\t\tdefaultInitialState,\n\t\tinitializer,\n\t)\n\n\tconst popStateListener = ({state}) => dispatch({\n\t\ttype: 'POP-', // will be completed\n\t\tstate, // special action with full `state` instead of `payload`\n\t})\n\n\tuseEffect(() => {\n\t\twindow.addEventListener('popstate', popStateListener)\n\t\treturn () => window.removeEventListener('popstate', popStateListener)\n\t}, [])\n\n\tconst dp = Object.fromEntries(Object.entries(payloadCreators).map(\n\t\t([type, payloadCreator]) => ([\n\t\t\ttype,\n\t\t\t(...args) => dispatch({\n\t\t\t\ttype,\n\t\t\t\tpayload: payloadCreator(...args),\n\t\t\t}),\n\t\t]),\n\t))\n\n\treturn (\n\t\t<AppContext.Provider value={{state, dp, dispatch}}>\n\t\t\t{children}\n\t\t</AppContext.Provider>\n\t)\n})\n\nconst useStore = () => useContext(stateManager.AppContext)\n\n// noinspection JSUnusedGlobalSymbols\nexport const roudexInitializer = (\n\tinitialState,\n\tpayloadCreators,\n\tcreatePayloadFromUrl,\n\tcreatePathFromState,\n\t{\n\t\tlogger = process.env.NODE_ENV === 'production' ? null : defaultLogger,\n\t} = {},\n) => {\n\tif ('_serial' in initialState)\n\t\tthrow new Error(\n\t\t\t'The `_serial` property in `initialState` is managed automatically.\\n' +\n\t\t\t`You shouldn't provide it.\\ninitialState:\\n${initialState}`,\n\t\t)\n\tstateManager.defaultInitialState = initialState\n\tinitialState._serial = 0\n\n\tstateManager.AppContext = React.createContext({\n\t\tstate: {},\n\t\tdp: {},\n\t\tdispatch: null,\n\t})\n\n\tstateManager.payloadCreators = payloadCreators\n\n\tstateManager.rootReducer = (state, action) => {\n\t\tif (action.state) {\n\t\t\tif (action.payload)\n\t\t\t\tconsole.warn('The action provides both `payload` and `state`!\\n' +\n\t\t\t\t\t'Provided `payload` will be ignored.\\naction:\\n', action)\n\n\t\t\tconst newState = action.state\n\n\t\t\taction.type += newState._serial > state._serial ? 'FWD' : 'BACK'\n\n\t\t\tlogger?.(state, action, newState)\n\t\t\treturn newState\n\t\t}\n\n\t\tif (action.url) {\n\t\t\tif (action.payload)\n\t\t\t\tconsole.warn('The action provides both `payload` and `url`!\\n' +\n\t\t\t\t\t'Provided `payload` will be ignored and overridden.\\naction:\\n', action)\n\t\t\taction.payload = createPayloadFromUrl(action.url)\n\t\t}\n\t\tconst {payload} = action\n\n\t\tif (!payload) {\n\t\t\tconsole.warn('No payload detected (directly or indirectly)!', {action})\n\t\t\treturn state\n\t\t}\n\n\t\tconst {noTransform, newState} = graphReducer(state, payload)\n\n\t\tconst url0 = window.location.href\n\t\tconst newUrl = new URL(url0).origin + createPathFromState(newState)\n\n\t\tif (noTransform) {\n\t\t\tif (newUrl === url0 && deepEqual(window.history.state, state))\n\t\t\t\tlogger?.(state, action)\n\t\t\telse {\n\t\t\t\tlogger?.(state, action, state)\n\t\t\t\twindow.history.replaceState(state, '', newUrl)\n\t\t\t}\n\t\t\treturn state\n\t\t}\n\n\t\tnewState._serial++\n\t\tlogger?.(state, action, newState)\n\n\t\tconst replaceOrPushState = action.url || newUrl === url0 ? 'replaceState' : 'pushState'\n\n\t\twindow.history[replaceOrPushState](newState, '', newUrl)\n\n\t\treturn newState\n\t}\n\n\tstateManager.initializer = defaultInitialState =>\n\t\tstateManager.rootReducer(window.history.state ?? defaultInitialState, {\n\t\t\ttype: 'INIT',\n\t\t\turl: window.location.href,\n\t\t})\n\n\tconst {\n\t\trootReducer,\n\t\tdefaultInitialState,\n\t} = stateManager\n\n\treturn {\n\t\tStoreProvider,\n\t\tuseStore,\n\t\trootReducer,\n\t\tdefaultInitialState,\n\t}\n}\n"],"names":["defaultLogger","state","action","newState","console","group","type","Date","toLocaleTimeString","log","groupEnd","stateManager","StoreProvider","React","memo","children","rootReducer","defaultInitialState","initializer","payloadCreators","AppContext","useReducer","dispatch","popStateListener","useEffect","window","addEventListener","removeEventListener","dp","Object","fromEntries","entries","map","payloadCreator","payload","useStore","useContext","roudexInitializer","initialState","createPayloadFromUrl","createPathFromState","logger","process","env","NODE_ENV","Error","_serial","createContext","warn","url","graphReducer","noTransform","url0","location","href","newUrl","URL","origin","deepEqual","history","replaceState","replaceOrPushState"],"mappings":"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"}
\No newline at end of file