{"_id":"@aimwhy/immer","_rev":"1-9f29dca59f96d22a9d3dbc186dad069c","name":"@aimwhy/immer","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@aimwhy/immer","version":"0.1.0","description":"immer","homepage":"https://github.com/AimWhy/immer#readme","type":"module","keywords":[],"repository":{"type":"git","url":"git+https://github.com/AimWhy/immer.git"},"bugs":{"url":"https://github.com/AimWhy/immer/issues"},"license":"MIT","author":{"name":"aimWhy"},"funding":"https://github.com/AimWhy/immer","engines":{"node":">= 16"},"main":"dist/immer.module.js","module":"dist/immer.module.js","types":"dist/immer.module.d.ts","sideEffects":false,"dependencies":{"core-js":"^3.26.0"},"devDependencies":{"@babel/eslint-parser":"^7.19.1","@babel/plugin-syntax-import-assertions":"^7.20.0","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-image":"^3.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-replace":"^5.0.1","cross-env":"^7.0.3","del-cli":"^5.0.0","eslint":"^8.26.0","eslint-plugin-jsdoc":"^39.6.2","rollup":"^3.2.5","rollup-plugin-bundle-size":"^1.0.3","rollup-plugin-string":"^3.0.0","terser":"^5.15.1","typescript":"^4.8.4"},"scripts":{"build":"npm run lint && rollup -c --silent","dist":" npm run build && mkdir dist && cp -fR build/*.* dist/ && npm run types","lint":"eslint src/** rollup.config.mjs","prepublishOnly":"npm run clean && npm run dist","clean":"del-cli --force build dist docs","types":"tsc src/index.js --declaration --allowJs --emitDeclarationOnly --outfile dist/immer.module.d.ts"},"gitHead":"1f7759e04bf955f20ed8c8e7a874d863c09d6f12","_id":"@aimwhy/immer@0.1.0","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-th7LFW+7zl2Ooh+4z9p2lym79HY8TeBPwPw6EwQSoJI0tp1DCxbonMCTjYm+V6W7vmEffnrVBzBvqJt+O++xIw==","shasum":"c12240f91871eb135461f61797d0d15822563cd7","tarball":"https://registry.npmjs.org/@aimwhy/immer/-/immer-0.1.0.tgz","fileCount":10,"unpackedSize":11559,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbMmxowjks2GXf1CNVmNKRYqnQJbrNPkIDwe2o08zTLAiEAyKhtdWxYN3qraCUrSk3HS8orEClrpnsuhXTktrLEjog="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZ7GxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmobzA//Q4Ioo/SWIDlMJQ2XxGisj3YX3jT7Ctc/i4eAAsRJNrdBoA7/\r\nQEWwuVAOId0WFrvZXg5ekFXp8nzXPF5wmQJKj6VRYRlcXAykJ3yeb8rb1ZuT\r\nKncYvanLpzHY1pNqeFVeL37WyYPySD4TkPeqI4xp/HY4/QyOZzeatAOzp/0Y\r\n5xzeSODbydtXubJHZXRsi4noC6dvgPpXkKErF5mhJJe6dEl/kKxlFLKT1o0K\r\nc4rOKTUTGGZ3lUc3jfKUGaov0nxVtYKGESG4TPchkNsJ79sLpct6mAsrk+NW\r\nM7nPA9XKTkieqmgnspckNQcfASnZsoRVHk32vywEm8kZRkdPi76o1Kz2aynB\r\noTY5B5yDxyLZD98HHnP7H6AOQr/oqo8Oo0r9annDGjbC/9wFL9e67O5CKdNt\r\n1o4gRDzq2dbV4kcOrLzq+uIocF9TcHusShxxOhiD0uUQbE2EA4vI2l5EWTpO\r\nr0CO42YMBaVykh3etqqthHoY2KQBOembhPkAq8BGSTTJTqKrHco1ljlGE9aa\r\nMZx+OBDEhAWr7lJT2R85PIMpcriUSqxEbVrX/B+doNGMhVYVOXA8GGXehueX\r\noDGWR+5zK+lLkfX5DlMPTSlIYcpIrrQSRzDIupC1WKBC11eMb+CDfsfhXQMb\r\nfsFiAWMb/+t2g7tfsx5nGATLNB2djYCGF5k=\r\n=149m\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"aimwhy","email":"aimwhy@qq.com"},"directories":{},"maintainers":[{"name":"aimwhy","email":"aimwhy@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/immer_0.1.0_1667740081685_0.411172855791925"},"_hasShrinkwrap":false},"0.1.1":{"name":"@aimwhy/immer","version":"0.1.1","description":"immer","homepage":"https://github.com/AimWhy/immer#readme","type":"module","keywords":["immer","Immutable","aimwhy","small","fast"],"repository":{"type":"git","url":"git+https://github.com/AimWhy/immer.git"},"bugs":{"url":"https://github.com/AimWhy/immer/issues"},"license":"MIT","author":{"name":"aimWhy"},"funding":"https://github.com/AimWhy/immer","engines":{"node":">= 16"},"main":"dist/immer.module.js","module":"dist/immer.module.js","types":"dist/immer.module.d.ts","sideEffects":false,"dependencies":{"core-js":"^3.26.0"},"devDependencies":{"@babel/eslint-parser":"^7.19.1","@babel/plugin-syntax-import-assertions":"^7.20.0","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-image":"^3.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-replace":"^5.0.1","cross-env":"^7.0.3","del-cli":"^5.0.0","eslint":"^8.26.0","eslint-plugin-jsdoc":"^39.6.2","rollup":"^3.2.5","rollup-plugin-bundle-size":"^1.0.3","rollup-plugin-string":"^3.0.0","terser":"^5.15.1","typescript":"^4.8.4"},"scripts":{"build":"npm run lint && rollup -c --silent","dist":" npm run build && mkdir dist && cp -fR build/*.* dist/ && npm run types","lint":"eslint src/** rollup.config.mjs","prepublishOnly":"npm run clean && npm run dist","clean":"del-cli --force build dist docs","types":"tsc src/index.js --declaration --allowJs --emitDeclarationOnly --outfile dist/immer.module.d.ts"},"gitHead":"42ec034e54a91a71f6ff6debf46e6121e2db1fa8","_id":"@aimwhy/immer@0.1.1","_nodeVersion":"16.15.1","_npmVersion":"8.11.0","dist":{"integrity":"sha512-CB3cM/CFpJ79INb93D48QvS6hu9Bx6QrKA0v0qNuv3ErR5fbGXirzsCUG2PMwP8v18ngcuRjlSa2va1Jh8AzGQ==","shasum":"f8b50f794ef5676cf1a05d47f254de12560c5737","tarball":"https://registry.npmjs.org/@aimwhy/immer/-/immer-0.1.1.tgz","fileCount":10,"unpackedSize":11754,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFDWvUIPHlVhzwH9h4FFYd8cuejeUqICJ8egoBnFJfPiAiBnhuC4rZBF9THEJgoOECevWPpnM2rSCO4G/CZLQVwfGA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZ7Q7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmopmQ//RkisxLwcSovuqJMGZ6NeXjpl0gaLFu7Yj8PIM8JkzdlTOjWD\r\nYKwXoYGNFj5yD1jUJ/LCzdKEiEm0cDh3WYLPiDm4ZGHtxeT7+aONewzF7Gh+\r\nJ545oX3d/MqV8Pen7Q7uDXYLaKc2ft+zv4OMd4+zgD/28FLtNLri3GgTjzco\r\nvE6mqfcahhx8BqTA+zMGpzaKB+7bvoB5SxIa9g51foo7AiY/nhnTMliV4Qk/\r\nuOO95pzJ+AcVn2HLxzeCLFzFWxeZ8H/r1XZkzVWc1nvRV7NbcsrnTQr6GT6E\r\n1dScGvQhBCPyZCFiWfwYdzeQDPWe2C8SaZbMJCBoLm9SpDat8Wz4hHiygQa5\r\nq2YX+DPP9cWY10VGfqYo0Je9QGq1oIaulxKy2pKkYGPLIIUAhDEUrAmtj6FV\r\nZX4UhmFp6jdNdRLbjb1ZR3agkCQh68LwN0e6yL7PYkCzdsVHe1lwp6mQmhqX\r\nq7KqgABlWqUGFHkd7gSzMF4pXdR3j4Ysk4VhfI4NhxH9xO5++2ckZ+npxixJ\r\n29CTQrl9KkRXA+nKQKwg7ErKl5HNlxCv8NcC6jUwHxkjXy1xPbzMGCWUTotY\r\n2saBKjk1ixq1J+yszS9Sl1ZeU/yc705AW1x3A8U+KBJb7NIfHM/3X37PdzrK\r\noZZs+kYW5tDL9M9Vo7p+9eKV2Nx0Rnaqekw=\r\n=DMgv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"aimwhy","email":"aimwhy@qq.com"},"directories":{},"maintainers":[{"name":"aimwhy","email":"aimwhy@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/immer_0.1.1_1667740730821_0.967713370742918"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-06T13:08:01.621Z","0.1.0":"2022-11-06T13:08:01.849Z","modified":"2022-11-06T13:18:51.081Z","0.1.1":"2022-11-06T13:18:51.005Z"},"maintainers":[{"name":"aimwhy","email":"aimwhy@qq.com"}],"description":"immer","homepage":"https://github.com/AimWhy/immer#readme","keywords":["immer","Immutable","aimwhy","small","fast"],"repository":{"type":"git","url":"git+https://github.com/AimWhy/immer.git"},"author":{"name":"aimWhy"},"bugs":{"url":"https://github.com/AimWhy/immer/issues"},"license":"MIT","readme":"## 自己实现一个 immer, 满足常规项目要求、代码精简提升效率、源码 66 行\n\nimmer 包暴露了一个完成所有工作的默认函数。\n\n`produce(currentState, recipe: (draftState) => void): nextState`\n\n`produce` 需要一个 `baseState`，以及一个可用于对传入的 `draft` 进行所有所需更改的 `recipe`。\n\n在 `recipe` 中，常规的数据操作都可以用在 `draft` 对象上，包括属性字段分配、删除操作和修改数组，如 push、pop、splice、 delete 等。\n\n\n## 例子\n\n```javascript\nimport produce from \"@aimwhy/immer\"\n\nconst baseState = [\n\t{\n\t\ttitle: \"Learn TypeScript\",\n\t\tdone: true\n\t},\n\t{\n\t\ttitle: \"Try Immer\",\n\t\tdone: false\n\t}\n]\n\nconst nextState = produce(baseState, draftState => {\n\tdraftState.push({title: \"Tweet about it\"})\n\tdraftState[1].done = true\n})\n```\n\n`nextState` 对象仅是对 `baseState` 中所有修改链上的引用进行新的生成。\n注意: `baseState` 的数据也变了，但修改链上引用可能没有变。\n\n\n```javascript\nbaseState.length === 3   // ✔️\n\nnextState.length === 3   // ✔️\n\nbaseState !== nextState  // ✔️\n\nnextState[0] === baseState[0]  // ✔️\n\nnextState[1] !== baseState[1]  // ✔️\n```\n\n## 性能对比\n\n可自行尝试、有惊喜~奥","readmeFilename":"README.md"}