{"_id":"76","_rev":"9-4c40d5a9558115a87dde86190d28eaac","name":"76","dist-tags":{"latest":"0.0.4"},"versions":{"1.0.0":{"name":"76","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 0"},"author":"","license":"ISC","_id":"76@1.0.0","_shasum":"91e4530e308b6ddfb428f31a9219b67f501fa346","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.2","_npmUser":{"name":"atool","email":"i@atool.org"},"dist":{"shasum":"91e4530e308b6ddfb428f31a9219b67f501fa346","tarball":"https://registry.npmjs.org/76/-/76-1.0.0.tgz","integrity":"sha512-M1afK37sqiTs6C4eEDCBq7s/ru91QEYaEsV43HARCh0lDDMoaxxiSuWS+A8ugyuaSrIbfOPbgqEJl3DnyX/q1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpT7FislO/LUAJLeqK/mSXeJLyZ4V02BkX5jHuSXM35AiEAqZAxExADsuGkQisPxEeUYd+s0pranVviWJR9MUPkJ0o="}]},"maintainers":[{"name":"atool","email":"i@atool.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/76-1.0.0.tgz_1496195256565_0.5016979449428618"},"directories":{}},"0.0.1":{"name":"76","version":"0.0.1","description":"Lightweight wrapper of React + Router + Redux-saga for SPA development.","main":"lib/index.js","scripts":{"clean":"rimraf ./lib && rimraf ./coverage","lint":"eslint ./src && eslint ./demo","jest":"cross-env NODE_ENV=test jest","test":"npm run lint && npm run jest","babel":"cross-env NODE_ENV=production babel src -d lib","build":"npm run clean && npm run test && npm run babel","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"hustcc"},"jest":{"setupFiles":["<rootDir>/__tests__/setup.js"],"testRegex":"(/__tests__/.*(test|spec))\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js","json"],"moduleNameMapper":{"^.+\\.(css|less)$":"<rootDir>/__tests__/.jestignore.js"},"transform":{"^.+\\.js?$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!**/vendor/**"],"moduleDirectories":["node_modules","src"]},"license":"ISC","devDependencies":{"babel-cli":"^6.26.0","babel-eslint":"^8.0.1","babel-jest":"^21.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-export-extensions":"^6.22.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","coveralls":"^3.0.0","cross-env":"^5.1.0","enzyme":"^3.1.0","eslint":"^4.9.0","eslint-config-airbnb":"^16.1.0","eslint-config-airbnb-base":"^12.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.4.0","jest":"^21.2.1","jsdom":"^11.3.0","react":"^16.0.0","react-dom":"^16.0.0","rimraf":"^2.6.2"},"dependencies":{"immutability-helper-x":"^1.0.5","react-redux":"^5.0.6","redux":"^3.7.2","redux-saga":"^0.16.0"},"peerDependencies":{"react":">=0.13.2 || ^0.14 || ^15.0.0 || >=16.0.0-alpha.1 <17.0.0"},"gitHead":"a75064cfdf2f08a7dfbba54404059603b0b19645","_id":"76@0.0.1","_npmVersion":"5.4.2","_nodeVersion":"8.7.0","_npmUser":{"name":"atool","email":"i@atool.org"},"dist":{"integrity":"sha512-4+oUb2Li2iiJB5pq65Cm5Nh4cEJnx9lKBw4qgW9LAmVvS3nI7Vm5Radmbj++JEcESslinXzQo48ESIqzWt1UQA==","shasum":"fb036e3f745c0324077decd518949319a68f6f72","tarball":"https://registry.npmjs.org/76/-/76-0.0.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB782dRdObUsdDiuVqfVPjG9CWVf5rDfCSrj6wJM4TyJAiBaYu1dLklkujoeAdcHJm9OvqCz+HJefQhWMYoN3GGjcw=="}]},"maintainers":[{"name":"atool","email":"i@atool.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/76-0.0.1.tgz_1512478657041_0.029100105864927173"},"directories":{}},"0.0.2":{"name":"76","version":"0.0.2","description":"Lightweight wrapper of React + Router + Redux-saga for SPA development.","main":"lib/index.js","files":["lib"],"scripts":{"clean":"rimraf ./lib && rimraf ./coverage","lint":"eslint ./src && eslint ./demo","jest":"cross-env NODE_ENV=test jest","test":"npm run lint && npm run jest","babel":"cross-env NODE_ENV=production babel src -d lib","dev":"cross-env NODE_ENV=development babel src --watch -d lib","build":"npm run clean && npm run test && npm run babel","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"hustcc"},"jest":{"setupFiles":["<rootDir>/__tests__/setup.js"],"testRegex":"(/__tests__/.*(test|spec))\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js","json"],"moduleNameMapper":{"^.+\\.(css|less)$":"<rootDir>/__tests__/.jestignore.js"},"transform":{"^.+\\.js?$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!**/vendor/**"],"moduleDirectories":["node_modules","src"]},"license":"ISC","devDependencies":{"babel-cli":"^6.26.0","babel-eslint":"^8.0.1","babel-jest":"^21.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-export-extensions":"^6.22.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","coveralls":"^3.0.0","cross-env":"^5.1.0","enzyme":"^3.1.0","eslint":"^4.9.0","eslint-config-airbnb":"^16.1.0","eslint-config-airbnb-base":"^12.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.4.0","jest":"^21.2.1","jsdom":"^11.3.0","react":"^16.0.0","react-dom":"^16.0.0","rimraf":"^2.6.2"},"dependencies":{"immutability-helper-x":"^1.0.5","react-redux":"^5.0.6","redux":"^3.7.2","redux-saga":"^0.16.0"},"peerDependencies":{"react":">=0.13.2 || ^0.14 || ^15.0.0 || >=16.0.0-alpha.1 <17.0.0"},"gitHead":"4fff0d2f5b1eb7c2c78a115a81cc2336b6b34669","_id":"76@0.0.2","_npmVersion":"5.4.2","_nodeVersion":"8.7.0","_npmUser":{"name":"atool","email":"i@atool.org"},"dist":{"integrity":"sha512-g8hea+1E68Giaq1DIe+KXhGjkfD00Mw5ssP3oVgrj8sL+kVNSWIBGX3ffYDfiF5gk5ds1spBDiIU+SRnlWIQmg==","shasum":"294a399558b4bdc4d7605dac35be06f487b1f6f4","tarball":"https://registry.npmjs.org/76/-/76-0.0.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuZypWrXx4IIZ5KM6KfMI16ShSds7qOskR/z34mYIBdAIhAJzDCiZ0gfZKNnvweRhKsQyKpC8Qo1pz469G9XfGgfS9"}]},"maintainers":[{"name":"atool","email":"i@atool.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/76-0.0.2.tgz_1513229470053_0.9890662690158933"},"directories":{}},"0.0.3":{"name":"76","version":"0.0.3","description":"Lightweight wrapper of React + Router + Redux-saga for SPA development.","main":"lib/index.js","files":["lib"],"scripts":{"clean":"rimraf ./lib && rimraf ./coverage","lint":"eslint ./src && eslint ./demo","jest":"cross-env NODE_ENV=test jest","test":"npm run lint && npm run jest","babel":"cross-env NODE_ENV=production babel src -d lib","dev":"cross-env NODE_ENV=development babel src --watch -d lib","build":"npm run clean && npm run test && npm run babel","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"hustcc"},"jest":{"setupFiles":["<rootDir>/__tests__/setup.js"],"testRegex":"(/__tests__/.*(test|spec))\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js","json"],"moduleNameMapper":{"^.+\\.(css|less)$":"<rootDir>/__tests__/.jestignore.js"},"transform":{"^.+\\.js?$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!**/vendor/**"],"moduleDirectories":["node_modules","src"]},"license":"ISC","devDependencies":{"babel-cli":"^6.26.0","babel-eslint":"^8.0.1","babel-jest":"^21.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-export-extensions":"^6.22.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","coveralls":"^3.0.0","cross-env":"^5.1.0","enzyme":"^3.1.0","eslint":"^4.9.0","eslint-config-airbnb":"^16.1.0","eslint-config-airbnb-base":"^12.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.4.0","jest":"^21.2.1","jsdom":"^11.3.0","react":"^16.0.0","react-dom":"^16.0.0","rimraf":"^2.6.2"},"dependencies":{"immutability-helper-x":"^1.0.5","react-redux":"^5.0.6","redux":"^3.7.2","redux-saga":"^0.16.0"},"peerDependencies":{"react":">=0.13.2 || ^0.14 || ^15.0.0 || >=16.0.0-alpha.1 <17.0.0"},"gitHead":"4ebe31d5c80f18b61071edf3fe0bf0f143cd67fa","_id":"76@0.0.3","_npmVersion":"5.4.2","_nodeVersion":"8.7.0","_npmUser":{"name":"atool","email":"i@atool.org"},"dist":{"integrity":"sha512-Tljh0LIvW1rGy/oc+apsp7sjrjTkY0jczro0ZRza8zK8i0PpFp9zDC7sVTImmObDBrvHqRCtFqxShYkaSqZYBw==","shasum":"8d0325af40ef9f688a4400adc9084970692f4a9d","tarball":"https://registry.npmjs.org/76/-/76-0.0.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnLzUrT8EtHKBuz8sCC9LZxkhNFO1vRswgxyq+o7p/iQIgJmuiM7IYjAyVf+lyGzswmM7iOp5QeyCdkw6JYaTuKaI="}]},"maintainers":[{"name":"atool","email":"i@atool.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/76-0.0.3.tgz_1513432952414_0.20159497833810747"},"directories":{}},"0.0.4":{"name":"76","version":"0.0.4","description":"Lightweight wrapper of React + Router + Redux-saga for SPA development.","main":"lib/index.js","files":["lib"],"scripts":{"clean":"rimraf ./lib && rimraf ./coverage","lint":"eslint ./src && eslint ./demo","jest":"cross-env NODE_ENV=test jest","test":"npm run lint && npm run jest","babel":"cross-env NODE_ENV=production babel src -d lib","dev":"cross-env NODE_ENV=development babel src --watch -d lib","build":"npm run clean && npm run test && npm run babel","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"hustcc"},"jest":{"setupFiles":["<rootDir>/__tests__/setup.js"],"testRegex":"(/__tests__/.*(test|spec))\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js","json"],"moduleNameMapper":{"^.+\\.(css|less)$":"<rootDir>/__tests__/.jestignore.js"},"transform":{"^.+\\.js?$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**/*.{js,jsx}","!**/node_modules/**","!**/vendor/**"],"moduleDirectories":["node_modules","src"]},"license":"ISC","devDependencies":{"babel-cli":"^6.26.0","babel-eslint":"^8.0.1","babel-jest":"^21.2.0","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-export-extensions":"^6.22.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","coveralls":"^3.0.0","cross-env":"^5.1.0","enzyme":"^3.1.0","eslint":"^4.9.0","eslint-config-airbnb":"^16.1.0","eslint-config-airbnb-base":"^12.1.0","eslint-plugin-import":"^2.8.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.4.0","jest":"^21.2.1","jsdom":"^11.3.0","react":"^16.0.0","react-dom":"^16.0.0","rimraf":"^2.6.2"},"dependencies":{"immutability-helper-x":"^1.0.5","react-redux":"^5.0.6","redux":"^3.7.2","redux-saga":"^0.16.0"},"peerDependencies":{"react":">=0.13.2 || ^0.14 || ^15.0.0 || >=16.0.0-alpha.1 <17.0.0"},"gitHead":"8ec3f28c19a99fe745861453f70d8f1fcb3bf62e","_id":"76@0.0.4","_npmVersion":"5.4.2","_nodeVersion":"8.7.0","_npmUser":{"name":"atool","email":"i@atool.org"},"dist":{"integrity":"sha512-90t6fiaQB83asjEV7nKFbFEAVhlnvJWaGhvjG/bAN3Ck67VrFxTYUWfxhnHaqQuTu9rNwX8WjpVQY3+9NC6lcQ==","shasum":"2366ad166d410e2aef9c8c699a03ec8091672fe7","tarball":"https://registry.npmjs.org/76/-/76-0.0.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHwm/kFAZFinch7XqB0BMfuB6YX+x543sZ0lTvOTTo/ICIQCqgYX90s5RbiTJM7PLyYRdvWQGcaUZeLpgfGBSgQ+C8g=="}]},"maintainers":[{"name":"atool","email":"i@atool.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/76-0.0.4.tgz_1514878185689_0.25280880904756486"},"directories":{}}},"readme":"# 76\n\n> Lightweight (300 lines) wrapper of React + Redux + Router + saga for SPA development.\n\n[![Ver](https://img.shields.io/npm/v/76.svg)](https://www.npmjs.com/package/76) [![Build Status](https://travis-ci.org/hustcc/76.svg?branch=master)](https://travis-ci.org/hustcc/76) [![Coverage Status](https://coveralls.io/repos/github/hustcc/76/badge.svg?branch=master)](https://coveralls.io/github/hustcc/76) [![npm download](https://img.shields.io/npm/dm/76.svg)](https://www.npmjs.com/package/76)\n\n\n## Install\n\n> npm i -S 76\n\n\n## Usage\n\n```js\nimport { Application, Module } from '76';\n\nconst app = new Application('test-app');\n\nconst module = new Module('user-list', {\n  initialState,\n  selectors,\n  reducers,\n  watchers,\n});\n\napp.addModule(module);\n\napp.setRouter(router);\n\napp.start('#web-container', () => { console.log('app start success!'); })\n```\n\nHow to write `initialState`, `selectors`, `reducers`, `watchers` of module?\n\n - `initialState`\n\n`initialState` is the initial state of module, used to initial store of redux. It is a pure object.\n\n```js\nconst initialState = {\n  domain: {\n    users: [],\n  },\n  ui: {\n    loading: false,\n  },\n};\n```\n\n - `selectors`\n\n`selectors` is used to select the data of module state.\n\n```js\nconst selectors = {\n  getUserList: state => state.domain.users\n};\n```\n\n - `reducers`\n\n`reducers` is a pure function transform old state to new state.\n\n```js\nconst reducers = {\n  addUser: (state, user) => {\n    // use immutable-helper\n    return update(state, {\n      domain: {\n        users: {\n          $push: [user],\n        },\n      },\n    });\n  },\n  ...\n};\n```\n\n - `watchers`\n\n`watchers` is the redux action with side-effect, see document of redux-saga.\n\n```js\nconst watchers = [{\n  take: 'takeEvery',\n  actions: 'addUserAsync',\n  generator: function*(selectors, actions, { payload }) {\n    // do something with effects.\n  },\n}];\n```\n\n\n## TODO\n\n - Project website developed by 76.\n\n\n\n## License\n\nISC@[hustcc](https://github.com/hustcc).\n","maintainers":[{"name":"atool","email":"i@atool.org"}],"time":{"modified":"2022-06-12T14:08:31.133Z","created":"2017-05-31T01:47:36.648Z","1.0.0":"2017-05-31T01:47:36.648Z","0.0.1":"2017-12-05T12:57:37.105Z","0.0.2":"2017-12-14T05:31:10.111Z","0.0.3":"2017-12-16T14:02:32.553Z","0.0.4":"2018-01-02T07:29:45.866Z"},"license":"ISC","readmeFilename":"README.md","description":"Lightweight wrapper of React + Router + Redux-saga for SPA development.","author":{"name":"hustcc"},"users":{"atool":true,"johniexu":true}}