clean-state
Advanced tools
Comparing version 1.1.4 to 2.0.0
@@ -31,2 +31,3 @@ module.exports = { | ||
'@typescript-eslint/no-var-requires': 0, | ||
'@typescript-eslint/explicit-module-boundary-types': 0, | ||
}, | ||
@@ -33,0 +34,0 @@ parserOptions: { |
@@ -1,81 +0,52 @@ | ||
var __assign = (this && this.__assign) || function () { | ||
__assign = Object.assign || function(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
import { useEffect, useCallback, useState } from 'react'; | ||
import Container from './container'; | ||
var bootstrap = function (modules) { | ||
var container = new Container(modules); | ||
var dispatch = function (nameAndMethod, payload) { | ||
var _a = nameAndMethod.split('/'), namespace = _a[0], methodName = _a[1]; | ||
var combineModule = container.getModule(namespace); | ||
var _b = combineModule[namespace], state = _b.state, reducers = _b.reducers, effects = _b.effects; | ||
var rootState = container.getRootState(); | ||
if (effects[methodName]) { | ||
return effects[methodName]({ state: state, payload: payload, rootState: rootState, dispatch: dispatch }); | ||
} | ||
return t; | ||
else if (reducers[methodName]) { | ||
var newState = reducers[methodName]({ | ||
state: state, | ||
rootState: rootState, | ||
payload: payload, | ||
dispatch: dispatch, | ||
}); | ||
container.setState(namespace, newState); | ||
} | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
import { useState, useCallback, useRef, useMemo } from 'react'; | ||
import { getInitialState, extractFns } from './helper'; | ||
/** | ||
* 启动项目 | ||
* 挂载 modules 对象集合 | ||
* 生成 state 和 dispatch | ||
* @param modules 模型对象集合 | ||
*/ | ||
function bootstrap(modules) { | ||
var initialState = getInitialState(modules); | ||
// 钩子函数,代理状态处理 | ||
function useHook(_initialState) { | ||
var _a = useState(_initialState), rootState = _a[0], setRootState = _a[1]; | ||
var ref = useRef(rootState); | ||
var dispatch = useCallback(function (type, payload) { | ||
try { | ||
var _a = type.split('.'), moduleName_1 = _a[0], moduleFun = _a[1]; | ||
var module_1 = modules[moduleName_1]; | ||
// 当 module 不存在 | ||
if (!module_1) { | ||
console.error(moduleName_1 + " is not registry in store"); | ||
return; | ||
} | ||
var _b = module_1.reducers, reducers = _b === void 0 ? {} : _b, _c = module_1.effects, effects = _c === void 0 ? {} : _c; | ||
var effect = effects[moduleFun]; | ||
var reducer_1 = reducers[moduleFun]; | ||
// 副作用优先执行 | ||
if (effect) { | ||
effect.bind(module_1); | ||
return effect({ payload: payload, rootState: ref.current, dispatch: dispatch }); | ||
} | ||
// 处理reducer | ||
if (reducer_1) { | ||
reducer_1.bind(module_1); | ||
setRootState(function (prevState) { | ||
var _a; | ||
var moduleState = prevState[moduleName_1]; | ||
var newState = reducer_1(payload, moduleState); | ||
// immutable 形式替换数据 | ||
var compound = __assign(__assign({}, prevState), (_a = {}, _a[moduleName_1] = newState, _a)); | ||
Object.assign(ref.current, compound); | ||
return compound; | ||
}); | ||
} | ||
} | ||
catch (err) { | ||
console.error(type + " run error: " + err.stack); | ||
return Promise.reject(err); | ||
} | ||
}, []); | ||
useMemo(function () { | ||
var keys = Object.keys(modules); | ||
var map = {}; | ||
// 注入每个 module 的effects和reducers | ||
// 方便 dispath.module.fn 形式调用 | ||
keys.forEach(function (key) { | ||
var _a = modules[key], _b = _a.effects, effects = _b === void 0 ? {} : _b, _c = _a.reducers, reducers = _c === void 0 ? {} : _c; | ||
var rFns = extractFns(key, dispatch)(reducers); | ||
var eFns = extractFns(key, dispatch)(effects); | ||
map[key] = __assign(__assign({}, rFns), eFns); | ||
Object.assign(modules[key], map[key]); | ||
var injectFns = function (reducersOrEffects) { | ||
Object.keys(reducersOrEffects).forEach(function (key) { | ||
if (!dispatch[key]) | ||
dispatch[key] = {}; | ||
var reducers = rootReducers[key]; | ||
var fns = {}; | ||
Object.keys(reducers).forEach(function (fnKey) { | ||
fns[fnKey] = function (payload) { | ||
return dispatch(key + "/" + fnKey, payload); | ||
}; | ||
}); | ||
Object.assign(dispatch, map); | ||
}, [dispatch]); | ||
var innerDispatch = dispatch; | ||
return { state: rootState, dispatch: innerDispatch }; | ||
Object.assign(dispatch[key], fns); | ||
}); | ||
}; | ||
function useModule(namespace) { | ||
var _a = useState({}), setState = _a[1]; | ||
var setStateProxy = useCallback(function () { return setState({}); }, [setState]); | ||
useEffect(function () { | ||
container.addListener(namespace, setStateProxy); | ||
return function () { return container.removeListener(namespace, setStateProxy); }; | ||
}, [namespace, setStateProxy]); | ||
return container.getState(namespace); | ||
} | ||
return { initialState: initialState, useHook: useHook }; | ||
} | ||
var rootReducers = container.getRootReducers(); | ||
var rootEffects = container.getRootEffects(); | ||
injectFns(rootReducers); | ||
injectFns(rootEffects); | ||
return { useModule: useModule, dispatch: dispatch }; | ||
}; | ||
export default bootstrap; |
@@ -1,34 +0,15 @@ | ||
var __assign = (this && this.__assign) || function () { | ||
__assign = Object.assign || function(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
// 按照命名空间展平 modules 获取初始状态 | ||
export var getInitialState = function (modules) { | ||
var entries = Object.entries(modules); | ||
var initialState = {}; | ||
entries.forEach(function (_a) { | ||
var key = _a[0], module = _a[1]; | ||
var state = module.state; | ||
initialState[key] = state; // 暂存 state | ||
export function splitPropertyAndMethod(modules) { | ||
var rootState = {}; | ||
var rootReducers = {}; | ||
var rootEffects = {}; | ||
Object.keys(modules).forEach(function (key) { | ||
var module = modules[key]; | ||
rootState[key] = {}; | ||
rootReducers[key] = {}; | ||
rootEffects[key] = {}; | ||
Object.assign(rootState[key], module.state); | ||
Object.assign(rootReducers[key], module.reducers); | ||
Object.assign(rootEffects[key], module.effects); | ||
}); | ||
return initialState; | ||
}; | ||
// 提取 reducers 和 effects 方法 | ||
export var extractFns = function (namespace, next) { return function (fns) { | ||
if (fns === void 0) { fns = {}; } | ||
return Object.keys(fns).reduce(function (result, fnKey) { | ||
var _a; | ||
var fn = function (payload) { | ||
var type = namespace + "." + fnKey; | ||
return next(type, payload); | ||
}; | ||
return __assign(__assign({}, result), (_a = {}, _a[fnKey] = fn, _a)); | ||
}, {}); | ||
}; }; | ||
return { rootState: rootState, rootReducers: rootReducers, rootEffects: rootEffects }; | ||
} |
@@ -1,4 +0,3 @@ | ||
import { createContainer } from './core'; | ||
import bootstrap from './bootstrap'; | ||
export { default as mixin } from './mixin'; | ||
export { default as bootstrap } from './bootstrap'; | ||
export default createContainer; | ||
export default bootstrap; |
@@ -1,2 +0,1 @@ | ||
// 对模块混入公共属性和方法 | ||
var mixin = function (common, modules) { | ||
@@ -9,9 +8,6 @@ var keys = Object.keys(modules); | ||
module.effects = module.effects || {}; | ||
// state 混入 | ||
if (common.state) | ||
Object.assign(module.state, common.state); | ||
// reducer 混入 | ||
if (common.reducers) | ||
Object.assign(module.reducers, common.reducers); | ||
// effects 混入 | ||
if (common.effects) | ||
@@ -18,0 +14,0 @@ Object.assign(module.effects, common.effects); |
{ | ||
"name": "clean-state", | ||
"version": "1.1.4", | ||
"version": "2.0.0", | ||
"description": "", | ||
"main": "lib/index.js", | ||
"type": "lib/index.d.ts", | ||
"type": "index.d.ts", | ||
"scripts": { | ||
"build": "tsc", | ||
"dev": "tsc --watch", | ||
"lint": "eslint ./src --fix --ext js,ts,tsx" | ||
@@ -19,2 +20,5 @@ }, | ||
"@babel/core": "^7.12.9", | ||
"@types/react": "^17.0.0", | ||
"eventemitter3": "^4.0.7", | ||
"immer": "^8.0.0", | ||
"react": "^17.0.1" | ||
@@ -21,0 +25,0 @@ }, |
@@ -7,3 +7,3 @@ { | ||
"jsx": "preserve", | ||
"declaration": true, | ||
"declaration": false, | ||
"pretty": true, | ||
@@ -15,2 +15,3 @@ "allowJs": true, | ||
"strict": true, | ||
"removeComments": true, | ||
"esModuleInterop": true, | ||
@@ -17,0 +18,0 @@ "noUnusedLocals": true, |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
15718
5
13
299
1
+ Added@types/react@^17.0.0
+ Addedeventemitter3@^4.0.7
+ Addedimmer@^8.0.0
+ Added@types/prop-types@15.7.14(transitive)
+ Added@types/react@17.0.83(transitive)
+ Added@types/scheduler@0.16.8(transitive)
+ Addedcsstype@3.1.3(transitive)
+ Addedeventemitter3@4.0.7(transitive)
+ Addedimmer@8.0.4(transitive)