{"_id":"@astrocoders/regenerator","_rev":"5-6472da55e888458e67d80166614b8ec9","name":"@astrocoders/regenerator","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@astrocoders/regenerator","version":"1.0.0","description":"Compose HOCs imperatively like async/await. No callback hell!","main":"lib/index.js","module":"es/index.js","scripts":{"build":"nwb build-react-component","clean":"nwb clean-module && nwb clean-demo","prepublishOnly":"npm run build","start":"nwb serve-react-demo","test":"nwb test-react","test:coverage":"nwb test-react --coverage","test:watch":"nwb test-react --server","deploy":"gh-pages -d demo/dist"},"dependencies":{"immutagen":"^1.0.7"},"peerDependencies":{"react":"16.x"},"devDependencies":{"formik":"^1.1.2","gh-pages":"^1.2.0","nwb":"0.23.x","react":"^16.4.2","react-dom":"^16.4.2"},"author":{"name":"Astrocoders"},"homepage":"https://github.com/Astrocoders/regenerator","license":"MIT","repository":{"type":"git","url":""},"keywords":["react-component","hocs","render-props","compose"],"_id":"@astrocoders/regenerator@1.0.0","dist":{"shasum":"ac95887edb257ffd8d394ad062dbd875d195a5c7","tarball":"https://registry.npmjs.org/@astrocoders/regenerator/-/regenerator-1.0.0.tgz","integrity":"sha512-/5eMLBIwbcZSWWCNpmwOAev+ib24WLelPNP8qBJa6I35l/vsNOY4ojsb4i19wW+Bcpd3rCcs0uiL8PTzJnbb5Q==","fileCount":7,"unpackedSize":4686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj1GOCRA9TVsSAnZWagAAI7AP/2IuGEKMroXXO5dCVnBN\nz4kPh8yV7olcD7gi/EC4otA6+pBZKUTqucnaIWbMcxo2EBunjhUekHV6/poe\nMJF6J1uaXetAiZNn2wG9tHQDUuXAI4NzI472n0PbuJXwrrkDB4SCj37zwTgJ\nUPUKNCCkrMD9tu5S6DXoclvu12DUO75QvQ28H8kPCvxaCUOaDxOvgVCVTw2H\nbh+rNfxa72xfFSmEgxSDPSdIiCTMT7BW3U0VQIxKMBUqdTare4l86Zd7K1l8\nvpSxtuFyPT82SNGquCpVq5NseM71XGbstk4t+OXeaw4CZDIeJ9fCTZsXy+ug\n3bj8E8LnVQx48s3AmMhJOjWAnVBWFFESKFtjNIyfdk4gPrDB5q08qYYdKP9I\n/VbM/mOBz4FWGheC9haJS7jBm6AcrAT7tmPxYWKUtMNmMXyzLiJyJqEmcRBJ\ngVeVnvbE27s3q34u6of3h4Pu4AqMmgiRD4e7cLePc3JJe5B2E041aLqFtmwU\nHU81mID3IHxJnw+ZtW6ios+/TMFGhnTOaoq4zdxvYwOcrEE/tAS4F0CCkFZA\nOV9Y2Hlwqm4eSI9EzzMqFR2l7+JZZiiRnIFMMJdWJOUUOxaJh0locKGwYIkg\nhGYsbBUw7rRg2q1MwzfTO82lwv1KiGGkWIBeGdx6AcUs9gB0ZIfgj8w7Y7TG\nPw5f\r\n=eyUB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjxersLIwqZzqeqARoORYfC1T9sHVoyRpg+WboKXXNiAiAnP2BQyPDiNVGCJ4MxMBvTN/csM6zEXE9YUu9SnQtr7Q=="}]},"maintainers":[{"name":"gabrielrubens","email":"grsabreu@gmail.com"},{"name":"georgelima","email":"georgelima11@hotmail.com"},{"name":"guilhermedecampo","email":"guilherme.decampo@astrocoders.com"},{"name":"medson10","email":"medsonoliveira@outlook.com.br"}],"_npmUser":{"name":"gabrielrubens","email":"grsabreu@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/regenerator_1.0.0_1536119182187_0.17329858004529508"},"_hasShrinkwrap":false}},"time":{"created":"2018-09-05T03:46:22.066Z","1.0.0":"2018-09-05T03:46:22.320Z","modified":"2022-04-04T15:54:38.806Z"},"maintainers":[{"email":"gameplayteam12@gmail.com","name":"luizmoratelli"},{"email":"yuri.fabris@gmail.com","name":"yurijean"},{"email":"lucassilvabesen@gmail.com","name":"lucasbesen"},{"email":"eliabesajunior@gmail.com","name":"eliabejr"},{"email":"medsonoliveira@outlook.com.br","name":"medson10"},{"email":"grsabreu@gmail.com","name":"gabrielrubens"},{"email":"georgelima11@hotmail.com","name":"georgelima"},{"email":"guilherme.decampo@astrocoders.com","name":"guilhermedecampo"}],"description":"Compose HOCs imperatively like async/await. No callback hell!","homepage":"https://github.com/Astrocoders/regenerator","keywords":["react-component","hocs","render-props","compose"],"repository":{"type":"git","url":""},"author":{"name":"Astrocoders"},"license":"MIT","readme":"# regenerator\n\n[![npm package][npm-badge]][npm]\n\nCompose HOCs imperatively like async/await. No callback hell!\n\n[Live demo](http://astrocoders.com/regenerator)\n[Source of demo](https://github.com/Astrocoders/regenerator/blob/master/demo/src/index.js#L42)\n\n[npm-badge]: https://img.shields.io/npm/v/npm-package.png?style=flat-square\n[npm]: https://www.npmjs.org/package/npm-package\n\n## Why\nRender props are amazing to make provide more functionality to your component. But once you need to \nstack a bunch of them you get what recalls a lot the callback hell.\n\n```js\n<Query>\n  {({ data }) =>\n    <Mutation>\n      {({ mutate, reuslt })=>\n        <Form>\n        etc\n        </Form>\n      }\n    </Mutation>\n  }\n</Query>\n```\n\n## How\n\nWait, we just mentioned \"callback hell\". So what if we had a function that would allow us to have a kind of sugar for continuation-passing-style? Or async/await feels.\n\nAnd that's exactly what regenerator is, it just takes care of the callbacks for you.\nThe whole code is roughly this:\n\n```js\nimport immutagen from 'immutagen'\n\nexport default component => props => {\n  const generator = immutagen(component);\n  const compose = context => {\n    const value = context.value;\n    return typeof value === \"function\"\n      ? value({\n          ...props,\n          children: values => compose(context.next(values))\n        })\n      : value;\n  };\n\n  return compose(generator(props));\n};\n```\n\n## How is this different from Suspense?\n\nSuspense only allows you to evalulate a promise once. It does not allow you to trigger a re-render for a state update.\nAnd with regenerator you can even use Formik, Apollo optimistic, React Powerplug and Smalldots tooling and etc!\n\n## Contributing\n\n### Steps to get it running\n\nInstall the deps\n```\nyarn install\n```\n\nBoot the demo\n```\nyarn start\n```\n\n### Things missing that we would like a little help\n\n- [ ] Tests\n- [ ] TypeScript support\n","readmeFilename":"README.md"}