New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

clean-state

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

clean-state - npm Package Compare versions

Comparing version 1.1.4 to 2.0.0

index.d.ts

1

.eslintrc.js

@@ -31,2 +31,3 @@ module.exports = {

'@typescript-eslint/no-var-requires': 0,
'@typescript-eslint/explicit-module-boundary-types': 0,
},

@@ -33,0 +34,0 @@ parserOptions: {

123

lib/bootstrap.js

@@ -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,

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc