{"_id":"@artifact-project/easystate","_rev":"2-bfed622068ba9c0ffc17155bc1749953","name":"@artifact-project/easystate","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@artifact-project/easystate","version":"0.1.0","author":{"name":"RubaXa","email":"trash@rubaxa.org"},"description":"EasyState for your application","scripts":{"test":"jest","start":"npm test","ts-build":"tsc","ts-build-clean":"rimraf ./src/**/*.{d.ts,js,js.map}","prepublishOnly":"npm test && npm run ts-build","postpublish":"npm run ts-build-clean"},"peerDependencies":{"@types/react":">=16.8.0","@types/react-dom":">=16.8.0","react":">=16.8.0","react-dom":">=16.8.0"},"dependencies":{},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^12.7.8","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","jest":"^24.9.0","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"3.0.0","ts-jest":"^24.1.0","typescript":"^3.6.3"},"jest":{"transform":{"^.+\\.tsx?$":"ts-jest"},"testRegex":"\\.tests\\.tsx?$","transformIgnorePatterns":["/node_modules/"],"setupFiles":[],"moduleFileExtensions":["ts","tsx","js","json"]},"gitHead":"1a075330ae015664791a1a029d823b5490be115d","_id":"@artifact-project/easystate@0.1.0","_nodeVersion":"11.1.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-xOkei08tKvrHyeGkrc+fQC10TblKVkjaDP00Ug9gNsTI2gQe3b54F27V/JH8TcVJbTC5FJimet8lO2QbGw1WBQ==","shasum":"3a5e0e2118ca0baee02b6036f7b352168e79a336","tarball":"https://registry.npmjs.org/@artifact-project/easystate/-/easystate-0.1.0.tgz","fileCount":12,"unpackedSize":23416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3V5MCRA9TVsSAnZWagAA0L0P/0/qX8I391Z8i/pAQ5fZ\nZnOVG2VUy4Y5C32Ea11SJ59Yl/6xmMR75xK20UcoA6q63UdwL146B0n4sLsE\nSbk2eHKEbgGLRjw4gdSb+x9F1E9jrUZrsTxz9ErhXOMF1n62OKd/grXwgMpL\naVnyitKFExxIyChK8EfaDJPi5lWst6Rn7THr+pNZAjEY34hbvLDhzVw7A/Ys\nWDfPVO3jW5njJfosVpY0FCbSZtRm1WaTQNvdGBvDcT6eNtZF+yEQkslaGAsz\nqDDCOov8FOyYuZUFwN9WMW1xhr3G7JRiURXAvVH7ufmZS7IBE9RcUYkDl6wW\nZy6wexAURMPnRYw7kAh6SWSfgnyN0M9LUzZg0gtqtKZLneq81MX26JtvojOG\np4fqTQzYUqm4W7Bm175GBtXVLWzPcOfnDvM9MgrFQ5qComY1TDnSXxVmBuim\n4VKodjr/fFJhXNizcJVJ1V9dW4vdq0ZlEro/eR0qkG5tR8NjTNccRJ6IIYCF\nVTEJmUSsq9714pdiBKlOmhx+zhuo3Ho8EhL2Zq863infaZTLFvCyAQC8PAyT\nEFMQ2QayGsfhi5/74BLWqIQsetGoIlTSAzQbbRn+b5N5f/n2M/9THFpfj9CX\nzrN1SGJpafuuzwUXafO8zt8/WJYXMiNlp5Hp+4FZdTqaBvJJwEYx9sHA6yKB\nWNHi\r\n=KvOv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBf/BOZZ9BuJ6N/2tl8kl3Pzb5/tGpJN9CGqkXccR2jgIhAPYbTIttOQR+QPJsgnOyUSkATpIq+ECCD0Onwe1FCUsC"}]},"maintainers":[{"name":"rubaxa","email":"ibnRubaXa@gmail.com"}],"_npmUser":{"name":"rubaxa","email":"ibnRubaXa@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/easystate_0.1.0_1574788684031_0.5508634435206525"},"_hasShrinkwrap":false},"0.1.1":{"name":"@artifact-project/easystate","version":"0.1.1","author":{"name":"RubaXa","email":"trash@rubaxa.org"},"description":"EasyState for your application","scripts":{"test":"jest","start":"npm test","ts-build":"tsc","ts-build-clean":"rimraf ./*.{d.ts,js,js.map} && rimraf ./src/**/*.{d.ts,js,js.map}","prepublishOnly":"npm test && npm run ts-build","postpublish":"npm run ts-build-clean"},"peerDependencies":{"@types/react":">=16.8.0","@types/react-dom":">=16.8.0","react":">=16.8.0","react-dom":">=16.8.0"},"dependencies":{},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^12.7.8","@types/react":"^16.9.11","@types/react-dom":"^16.9.4","jest":"^24.9.0","react":"^16.11.0","react-dom":"^16.11.0","rimraf":"3.0.0","ts-jest":"^24.1.0","typescript":"^3.6.3"},"jest":{"transform":{"^.+\\.tsx?$":"ts-jest"},"testRegex":"\\.tests\\.tsx?$","transformIgnorePatterns":["/node_modules/"],"setupFiles":[],"moduleFileExtensions":["ts","tsx","js","json"]},"gitHead":"58f62e753132c3d7fa2fff3a2d965ba27197ca46","_id":"@artifact-project/easystate@0.1.1","_nodeVersion":"11.1.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-Yq187v5pn4f3Xre1nDHA+kb7lFWIA3Qc8IhY5j2KhUF+Da8J+mo3jmdifN8+R29mYwx1WyDs+uTayj7gIPhfXw==","shasum":"a5976958760a51fefbf05974554e91d623e82fe5","tarball":"https://registry.npmjs.org/@artifact-project/easystate/-/easystate-0.1.1.tgz","fileCount":45,"unpackedSize":75508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3V8uCRA9TVsSAnZWagAASNUP/13ucE1ekFBg3e3vuZAz\n3fv7ELq1AukpVpSQWgKwuaRKNJ+xW7iojzv3fBLx4BaPa2eK3ldKgBOfDCI6\n0KA/U6nJgrkKX85gqmrdV2si4rASnodrDFLwr8am3rFhxTfYjqyKi9xQxBNk\n1+NGn0HJ5ksj7nAc96d9W1ymI2YU6glmErgP4ZcRNc+vVNPPnncYNWv9lS9K\nCodcaORYuA/LzDKnAJpB0TvWFAJMngN0Fsh02piGSEfdxx/P5UN/zS94Xg1u\nAoq+bIutPy1jNSOOax2h2xBUv3SR7lL3dQT0x5pbALfb1QF8Zjvmr4We6pSW\nIDf81hVj+rsm4cdFG073aTpmMzkYqYCFb/sHk+KCdfv9HRwAsFigi6fTzBQb\nAz7ZYMDmhIf45yca60vySG7UrhAzSIoJ26CBHvwTxT4Pyn9s/Fn2HdjukiqY\nFDOJZ1tOqT6m2PB1+xbwc3+PZfqBvIMj0fZDsufThNva07QUY06G94zBSft9\npzUzvyvlbKI9qH8nXkNZQgnEUC6kUmfx78qlSWwZRDoSbNclrx8KIBir2v/g\nXE09QMxI3XhjzsmMYLxSb+OFyIYVWLPzHMAYQ1v2hJato08mCCbCh3sdN2+8\nqCqSC59H9vOzFU9TixrbgXLbYOdLBJGgIl6mp6LHyRuR7rAr7ukandyCTQZ/\nunBT\r\n=phho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBWKP4xQcsym/qHgDcEtLCOWRDGq3UIB7GNxfbQ36THsAiEA0d7yXhBuG07vBeBchykUDOCwwJ25b1ROKFXNcLTRh/M="}]},"maintainers":[{"name":"rubaxa","email":"ibnRubaXa@gmail.com"}],"_npmUser":{"name":"rubaxa","email":"ibnRubaXa@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/easystate_0.1.1_1574788910169_0.3070304668096535"},"_hasShrinkwrap":false}},"time":{"created":"2019-11-26T17:18:03.879Z","0.1.0":"2019-11-26T17:18:04.193Z","modified":"2022-04-04T15:38:37.042Z","0.1.1":"2019-11-26T17:21:50.384Z"},"maintainers":[{"name":"rubaxa","email":"ibnRubaXa@gmail.com"}],"description":"EasyState for your application","author":{"name":"RubaXa","email":"trash@rubaxa.org"},"readme":"EasyState\n---------\nОй, всё, да, это очередное хрен знает что ;] нужно просто чтобы было и не спорьте!\n\n```sh\nnpm i --save easystate\n```\n\n### Usage\n\n```tsx\nimport { createEasyState } from 'easystate';\nimport { EasyComponent } from 'easystate/react';\n\nconst appState = createEasyState({\n\tcounter: {\n\t\tvalue: 0,\n\t},\n});\n\nfunction Counter(props: {value: number}) {\n\treturn <span>{props.value}</span>;\n}\n\n<div>\n\t<EasyComponent is={Counter} state={appState} mapToProps={(s) => s.counter} />\n\t<button onClick={() => { appState.counter.value += 1; }}>+</button>\n</div>\n\n<EasyScope\n\tactive={ false }\n\tstate={ appState }\n\tview={ ... }\n\tcontroller={ ... }\n/>\n\n<EasyScope.Manager\n\tstate={ appState }\n\tinitialActiveScope={ appState.step }\n\tonActivateScopeChange={ (state) => { appState.step = state; } }\n>\n\t<EasyScope\n\t\tname=\"login\"\n\t\tview={ ... }\n\t\tcontroller={ ... }\n\t\tfallback={ <Loading/> }\n\t/>\n</EasyScope.Manager>\n```\n\n\n```tsx\nconst appState = createEasyState({\n\tusers: {\n\t\tlist: createEasyStateAsync([] as User),\n\t\t/*{\n\t\t\tstate: User[], // данные\n\t\t\tready: boolean, // готово к использованию\n\t\t\texpired: boolean, // данные устарели\n\t\t\tinteractive: boolean, // готово, но с данными идет какая работа\n\t\t\terror: Error | null,\n\t\t}*/\n\t},\n});\n\nconst fetchUsers = createEasyFetch('users.list', async (users: User[], offset: number, limit: number) => {\n\tconst json = await easy.get('api/v1/users/list', {offset, limit});\n\treturn json.body.list;\n});\n\nconst removeUser = createEasyMutation('users.list.remove', async (users: User[], user: User) => {\n\tusers.state = easyDelete(users.state, user);\n\tawait easy.post('api/v1/users/remove', {id: user.id});\n});\n\n\nfunction List(props) {\n\tconst {\n\t\toffset,\n\t\tlimit,\n\t\tusers, // appState.users.list\n\t} = props;\n\tconst users = fetchUsers(users, offset, limit);\n\n\tif (!users.ready) {\n\t\treturn <EasyFetchStatus\n\t\t\tvalue={users}\n\t\t\tloading={Loading}\n\t\t\terror={Err}\n\t\t/>;\n\t}\n\n\treturn <>\n\t\t{users.interactive && <Spinner title=\"Синхронизация\"/>}\n\n\t\t<ul>{users.state.map(item\n\t\t\t<li\n\t\t\t\tkey={ item.id }\n\t\t\t\tonClick={ () => removeUser(users, item) }\n\t\t\t>\n\t\t\t\t{item.value}\n\t\t\t</li>\n\t\t)}</ul>\n\t</>;\n}\n```","readmeFilename":"README.md"}