@modern-js-reduck/plugin-immutable
Advanced tools
Comparing version 1.0.1 to 1.0.2
@@ -1,7 +0,4 @@ | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } | ||
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
/* eslint-disable @typescript-eslint/restrict-plus-operands */ | ||
import { model, createStore } from '@modern-js-reduck/store'; | ||
@@ -19,3 +16,3 @@ import immerPlugin from '..'; | ||
pureAdd(state) { | ||
return _objectSpread(_objectSpread({}, state), {}, { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
@@ -27,5 +24,29 @@ }); | ||
}); | ||
const count2 = model('count2').define({ | ||
state: { | ||
value: 1 | ||
}, | ||
computed: { | ||
addOne: state => state.value + 1, | ||
sum: [count, (state, state2) => state.value + state2.value] | ||
}, | ||
actions: { | ||
add(state) { | ||
state.value += 1; | ||
}, | ||
pureAdd(state) { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
}); | ||
} | ||
} | ||
}); | ||
describe('test immer', () => { | ||
const store = createStore({ | ||
plugins: [immerPlugin] | ||
let store; | ||
beforeEach(() => { | ||
store = createStore({ | ||
plugins: [immerPlugin] | ||
}); | ||
}); | ||
@@ -35,3 +56,3 @@ test('mutable state state in action should work', () => { | ||
let stateUpdated = false; | ||
const unsubribe = subscribe(() => { | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
@@ -43,3 +64,3 @@ value: 2 | ||
actions.add(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
@@ -50,5 +71,5 @@ }); | ||
let stateUpdated = false; | ||
const unsubribe = subscribe(() => { | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
value: 3 | ||
value: 2 | ||
}); | ||
@@ -58,5 +79,24 @@ stateUpdated = true; | ||
actions.pureAdd(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
}); | ||
}); | ||
test('computed properties should work', () => { | ||
const [, count1Actions] = store.use(count); | ||
const [, count2Actions, subscribe] = store.use(count2); | ||
count2Actions.pureAdd(); | ||
const [count2State] = store.use(count2); | ||
expect(count2State.addOne).toEqual(3); | ||
expect(count2State.sum).toEqual(3); | ||
let stateUpdated = false; | ||
const unsubscribe = subscribe(() => { | ||
stateUpdated = true; | ||
}); | ||
count1Actions.add(); | ||
const [updateCount2State] = store.use(count2); | ||
expect(stateUpdated).toBe(true); | ||
expect(updateCount2State.addOne).toEqual(3); | ||
expect(updateCount2State.sum).toEqual(4); | ||
unsubscribe(); | ||
}); | ||
}); | ||
/* eslint-enable @typescript-eslint/restrict-plus-operands */ |
import { createPlugin } from '@modern-js-reduck/store'; | ||
import { produce } from 'immer'; | ||
import { produce, enableES5, enableMapSet, setAutoFreeze } from 'immer'; | ||
enableES5(); | ||
enableMapSet(); | ||
setAutoFreeze(false); | ||
export default createPlugin(() => ({ | ||
@@ -4,0 +7,0 @@ beforeReducer(reducer) { |
@@ -1,19 +0,31 @@ | ||
"use strict"; | ||
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
var _store = require("@modern-js-reduck/store"); | ||
/* eslint-disable @typescript-eslint/restrict-plus-operands */ | ||
import { model, createStore } from '@modern-js-reduck/store'; | ||
import immerPlugin from '..'; | ||
const count = model('count').define({ | ||
state: { | ||
value: 1 | ||
}, | ||
actions: { | ||
add(state) { | ||
state.value += 1; | ||
}, | ||
var _ = _interopRequireDefault(require("..")); | ||
pureAdd(state) { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
}); | ||
} | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
const count = (0, _store.model)('count').define({ | ||
} | ||
}); | ||
const count2 = model('count2').define({ | ||
state: { | ||
value: 1 | ||
}, | ||
computed: { | ||
addOne: state => state.value + 1, | ||
sum: [count, (state, state2) => state.value + state2.value] | ||
}, | ||
actions: { | ||
@@ -25,3 +37,3 @@ add(state) { | ||
pureAdd(state) { | ||
return _objectSpread(_objectSpread({}, state), {}, { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
@@ -34,4 +46,7 @@ }); | ||
describe('test immer', () => { | ||
const store = (0, _store.createStore)({ | ||
plugins: [_.default] | ||
let store; | ||
beforeEach(() => { | ||
store = createStore({ | ||
plugins: [immerPlugin] | ||
}); | ||
}); | ||
@@ -41,3 +56,3 @@ test('mutable state state in action should work', () => { | ||
let stateUpdated = false; | ||
const unsubribe = subscribe(() => { | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
@@ -49,3 +64,3 @@ value: 2 | ||
actions.add(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
@@ -56,5 +71,5 @@ }); | ||
let stateUpdated = false; | ||
const unsubribe = subscribe(() => { | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
value: 3 | ||
value: 2 | ||
}); | ||
@@ -64,5 +79,24 @@ stateUpdated = true; | ||
actions.pureAdd(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
}); | ||
}); | ||
test('computed properties should work', () => { | ||
const [, count1Actions] = store.use(count); | ||
const [, count2Actions, subscribe] = store.use(count2); | ||
count2Actions.pureAdd(); | ||
const [count2State] = store.use(count2); | ||
expect(count2State.addOne).toEqual(3); | ||
expect(count2State.sum).toEqual(3); | ||
let stateUpdated = false; | ||
const unsubscribe = subscribe(() => { | ||
stateUpdated = true; | ||
}); | ||
count1Actions.add(); | ||
const [updateCount2State] = store.use(count2); | ||
expect(stateUpdated).toBe(true); | ||
expect(updateCount2State.addOne).toEqual(3); | ||
expect(updateCount2State.sum).toEqual(4); | ||
unsubscribe(); | ||
}); | ||
}); | ||
/* eslint-enable @typescript-eslint/restrict-plus-operands */ |
@@ -1,19 +0,11 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _store = require("@modern-js-reduck/store"); | ||
var _immer = require("immer"); | ||
var _default = (0, _store.createPlugin)(() => ({ | ||
import { createPlugin } from '@modern-js-reduck/store'; | ||
import { produce, enableES5, enableMapSet, setAutoFreeze } from 'immer'; | ||
enableES5(); | ||
enableMapSet(); | ||
setAutoFreeze(false); | ||
export default createPlugin(() => ({ | ||
beforeReducer(reducer) { | ||
return (state, payload) => (0, _immer.produce)(state, draft => reducer(draft, payload)); | ||
return (state, payload) => produce(state, draft => reducer(draft, payload)); | ||
} | ||
})); | ||
exports.default = _default; | ||
})); |
@@ -1,22 +0,7 @@ | ||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } | ||
import _extends from "@babel/runtime/helpers/esm/extends"; | ||
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | ||
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } | ||
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } | ||
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } | ||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
/* eslint-disable @typescript-eslint/restrict-plus-operands */ | ||
import { model, createStore } from '@modern-js-reduck/store'; | ||
import immerPlugin from '..'; | ||
var count = model('count').define({ | ||
const count = model('count').define({ | ||
state: { | ||
@@ -26,24 +11,46 @@ value: 1 | ||
actions: { | ||
add: function add(state) { | ||
add(state) { | ||
state.value += 1; | ||
}, | ||
pureAdd: function pureAdd(state) { | ||
return _objectSpread(_objectSpread({}, state), {}, { | ||
pureAdd(state) { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
}); | ||
} | ||
} | ||
}); | ||
describe('test immer', function () { | ||
var store = createStore({ | ||
plugins: [immerPlugin] | ||
const count2 = model('count2').define({ | ||
state: { | ||
value: 1 | ||
}, | ||
computed: { | ||
addOne: state => state.value + 1, | ||
sum: [count, (state, state2) => state.value + state2.value] | ||
}, | ||
actions: { | ||
add(state) { | ||
state.value += 1; | ||
}, | ||
pureAdd(state) { | ||
return _extends({}, state, { | ||
value: state.value + 1 | ||
}); | ||
} | ||
} | ||
}); | ||
describe('test immer', () => { | ||
let store; | ||
beforeEach(() => { | ||
store = createStore({ | ||
plugins: [immerPlugin] | ||
}); | ||
}); | ||
test('mutable state state in action should work', function () { | ||
var _store$use = store.use(count), | ||
_store$use2 = _slicedToArray(_store$use, 3), | ||
actions = _store$use2[1], | ||
subscribe = _store$use2[2]; | ||
var stateUpdated = false; | ||
var unsubribe = subscribe(function () { | ||
test('mutable state state in action should work', () => { | ||
const [, actions, subscribe] = store.use(count); | ||
let stateUpdated = false; | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
@@ -55,15 +62,11 @@ value: 2 | ||
actions.add(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
}); | ||
test('pure action should work', function () { | ||
var _store$use3 = store.use(count), | ||
_store$use4 = _slicedToArray(_store$use3, 3), | ||
actions = _store$use4[1], | ||
subscribe = _store$use4[2]; | ||
var stateUpdated = false; | ||
var unsubribe = subscribe(function () { | ||
test('pure action should work', () => { | ||
const [, actions, subscribe] = store.use(count); | ||
let stateUpdated = false; | ||
const unsubscribe = subscribe(() => { | ||
expect(store.use(count)[0]).toEqual({ | ||
value: 3 | ||
value: 2 | ||
}); | ||
@@ -73,5 +76,24 @@ stateUpdated = true; | ||
actions.pureAdd(); | ||
unsubribe(); | ||
unsubscribe(); | ||
expect(stateUpdated).toBe(true); | ||
}); | ||
}); | ||
test('computed properties should work', () => { | ||
const [, count1Actions] = store.use(count); | ||
const [, count2Actions, subscribe] = store.use(count2); | ||
count2Actions.pureAdd(); | ||
const [count2State] = store.use(count2); | ||
expect(count2State.addOne).toEqual(3); | ||
expect(count2State.sum).toEqual(3); | ||
let stateUpdated = false; | ||
const unsubscribe = subscribe(() => { | ||
stateUpdated = true; | ||
}); | ||
count1Actions.add(); | ||
const [updateCount2State] = store.use(count2); | ||
expect(stateUpdated).toBe(true); | ||
expect(updateCount2State.addOne).toEqual(3); | ||
expect(updateCount2State.sum).toEqual(4); | ||
unsubscribe(); | ||
}); | ||
}); | ||
/* eslint-enable @typescript-eslint/restrict-plus-operands */ |
import { createPlugin } from '@modern-js-reduck/store'; | ||
import { produce } from 'immer'; | ||
export default createPlugin(function () { | ||
return { | ||
beforeReducer: function beforeReducer(reducer) { | ||
return function (state, payload) { | ||
return produce(state, function (draft) { | ||
return reducer(draft, payload); | ||
}); | ||
}; | ||
} | ||
}; | ||
}); | ||
import { produce, enableES5, enableMapSet, setAutoFreeze } from 'immer'; | ||
enableES5(); | ||
enableMapSet(); | ||
setAutoFreeze(false); | ||
export default createPlugin(() => ({ | ||
beforeReducer(reducer) { | ||
return (state, payload) => produce(state, draft => reducer(draft, payload)); | ||
} | ||
})); |
121
package.json
{ | ||
"name": "@modern-js-reduck/plugin-immutable", | ||
"version": "1.0.1", | ||
"jsnext:source": "./src/index.ts", | ||
"types": "./dist/types/index.d.ts", | ||
"main": "./dist/js/node/index.js", | ||
"module": "./dist/js/treeshaking/index.js", | ||
"jsnext:modern": "./dist/js/modern/index.js", | ||
"description": "The meta-framework suite designed from scratch for frontend-focused modern web development.", | ||
"homepage": "https://modernjs.dev", | ||
"bugs": "https://github.com/modern-js-dev/reduck/issues", | ||
"license": "MIT", | ||
"keywords": [ | ||
"react", | ||
"framework", | ||
"modern", | ||
"modern.js", | ||
"state", | ||
"reduck" | ||
], | ||
"exports": { | ||
".": { | ||
"node": { | ||
"import": "./dist/js/modern/index.js", | ||
"require": "./dist/js/node/index.js" | ||
}, | ||
"default": "./dist/js/treeshaking/index.js" | ||
} | ||
}, | ||
"dependencies": { | ||
"@babel/runtime": "^7", | ||
"immer": "^9.0.5" | ||
}, | ||
"devDependencies": { | ||
"@modern-js/module-tools": "latest", | ||
"@modern-js/plugin-testing": "latest", | ||
"@modern-js-reduck/store": "^1.0.1", | ||
"@types/jest": "^26", | ||
"@types/node": "^14", | ||
"@types/react": "^17", | ||
"@types/react-dom": "^17", | ||
"typescript": "^4" | ||
}, | ||
"modernSettings": {}, | ||
"sideEffects": false, | ||
"peerDependencies": { | ||
"@modern-js-reduck/store": "^1.0.1" | ||
}, | ||
"publishConfig": { | ||
"registry": "https://registry.npmjs.org/", | ||
"access": "public" | ||
}, | ||
"repository": { | ||
"url": "https://github.com/modern-js-dev/reduck/packages/plugins/immer" | ||
}, | ||
"scripts": { | ||
"new": "modern new", | ||
"build": "modern build", | ||
"test": "modern test" | ||
} | ||
} | ||
"name": "@modern-js-reduck/plugin-immutable", | ||
"version": "1.0.2", | ||
"files": [ | ||
"dist" | ||
], | ||
"jsnext:source": "./src/index.ts", | ||
"types": "./dist/types/index.d.ts", | ||
"main": "./dist/js/node/index.js", | ||
"module": "./dist/js/treeshaking/index.js", | ||
"jsnext:modern": "./dist/js/modern/index.js", | ||
"description": "The meta-framework suite designed from scratch for frontend-focused modern web development.", | ||
"homepage": "https://modernjs.dev", | ||
"bugs": "https://github.com/modern-js-dev/reduck/issues", | ||
"license": "MIT", | ||
"keywords": [ | ||
"react", | ||
"framework", | ||
"modern", | ||
"modern.js", | ||
"state", | ||
"reduck" | ||
], | ||
"exports": { | ||
".": { | ||
"node": { | ||
"import": "./dist/js/modern/index.js", | ||
"require": "./dist/js/node/index.js" | ||
}, | ||
"default": "./dist/js/treeshaking/index.js" | ||
} | ||
}, | ||
"dependencies": { | ||
"@babel/runtime": "^7", | ||
"immer": "^9.0.5" | ||
}, | ||
"devDependencies": { | ||
"@modern-js-reduck/store": "^1.0.5", | ||
"@modern-js/module-tools": "^1.7.1", | ||
"@modern-js/plugin-testing": "^1.6.0", | ||
"@types/jest": "^27.5.1", | ||
"@types/node": "^14", | ||
"@types/react": "^17", | ||
"@types/react-dom": "^17", | ||
"typescript": "^4" | ||
}, | ||
"modernSettings": {}, | ||
"sideEffects": false, | ||
"peerDependencies": { | ||
"@modern-js-reduck/store": "^1.0.5" | ||
}, | ||
"publishConfig": { | ||
"registry": "https://registry.npmjs.org/", | ||
"access": "public" | ||
}, | ||
"repository": "modern-js-dev/reduck", | ||
"scripts": { | ||
"new": "modern new", | ||
"build": "modern build", | ||
"test": "modern test" | ||
} | ||
} |
@@ -20,6 +20,3 @@ | ||
- 介绍 Modern.js (即将上线) | ||
- [迈入现代 Web 开发](https://zhuanlan.zhihu.com/p/386607009) | ||
- [现代 Web 开发者问卷调查报告](https://zhuanlan.zhihu.com/p/403206195) | ||
- [字节跳动是如何落地微前端的](https://mp.weixin.qq.com/s/L9wbfNG5fTXF5bx7dcgj4Q) | ||
- [Modern.js: Hello, World!](https://zhuanlan.zhihu.com/p/426707646) | ||
@@ -34,2 +31,2 @@ ## Getting Started | ||
- [Contributing Guide](/CONTRIBUTING.md) | ||
- [Contributing Guide](/CONTRIBUTING.md) |
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
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
300
12545
11
31
2