{"_attachments":{},"_id":"stop-runaway-react-effects","_rev":"728727-61f25f2552dca90f621ac9ef","author":{"name":"Kent C. Dodds","email":"me@kentcdodds.com","url":"https://kentcdodds.com/"},"description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","dist-tags":{"latest":"2.0.0"},"license":"MIT","maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"name":"stop-runaway-react-effects","readme":"<div align=\"center\">\n<h1>stop-runaway-react-effects 🏃</h1>\n\n<p>Catches situations when a react use(Layout)Effect runs repeatedly in rapid\nsuccession</p>\n\n</div>\n\n<hr />\n\n[![Build Status][build-badge]][build]\n[![Code Coverage][coverage-badge]][coverage]\n[![version][version-badge]][package] [![downloads][downloads-badge]][npmtrends]\n[![MIT License][license-badge]][license]\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors)\n[![PRs Welcome][prs-badge]][prs] [![Code of Conduct][coc-badge]][coc]\n\n## The problem\n\nReact's [`useEffect`](https://reactjs.org/docs/hooks-reference.html#useeffect)\nand\n[`useLayoutEffect`](https://reactjs.org/docs/hooks-reference.html#uselayouteffect)\nhooks accept a \"dependencies array\" argument which indicates to React that you\nwant the callback to be called when those values change between renders. This\nprevents a LOT of bugs, but it presents a new problem.\n\nIf your `use(Layout)Effect` hook sets state (which it very often does), this\nwill trigger a re-render which could potentially cause the effect to be run\nagain, which can lead to an infinite loop. The end result here is that the\neffect callback is called repeatedly and that can cause lots of issues depending\non what that effect callback does (for example, you could get rate-limited by an\nAPI you're hitting).\n\n> Yes, I'm aware that it's unfortunate that we have this problem at all with\n> React. No, I don't think that hooks are worse than classes because of this.\n> No, I'm afraid that this probably can't/shouldn't be built-into React because\n> sometimes your effect just runs a lot and that's intentional. But most of the\n> time it's not intentional so this tool is here to help you know when it's\n> happening so you can fix it.\n\n## This solution\n\nThis is a **development-time only** tool which will help you avoid running into\nthis issue. It wraps `React.useEffect` and `React.useLayoutEffect` to provide\ntracking of the effect callback to determine whether it's called a certain\nnumber of times in a certain amount of time. For example. If your effect\ncallback is called 60 times in one second, then it's possible that we have a\n\"runaway effect\".\n\nWhen a runaway effect is detected, `stop-runaway-react-effects` will log as much\ninfo to the console as it knows about the effect callback and its dependencies\n(as well as some recommendations of what to do about it) and then throw an error\nto stop the infinite loop.\n\n## Table of Contents\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [API](#api)\n- [Inspiration](#inspiration)\n- [Other Solutions](#other-solutions)\n- [Contributors](#contributors)\n- [LICENSE](#license)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n## Installation\n\nThis module is distributed via [npm][npm] which is bundled with [node][node] and\nshould be installed as one of your project's `dependencies`:\n\n```\nnpm install --save stop-runaway-react-effects\n```\n\n## Usage\n\n```javascript\n// src/bootstrap.js\nimport {hijackEffects} from 'stop-runaway-react-effects'\n\nif (process.env.NODE_ENV === 'development') {\n  hijackEffects()\n}\n\n// src/index.js\nimport './bootstrap'\nimport React, {useEffect} from 'react'\n```\n\nIf you're using a modern bundler (like webpack, parcel, or rollup) with modern\nproduction techniques, then that code will all get stripped away in production.\n\nIf you'd like to avoid the extra file, an even easier way to do this is to use\nthe `hijack` utility module:\n\n```javascript\n// src/index.js\nimport 'stop-runaway-react-effects/hijack'\n// This is better because it will ensure that the effects are wrapped before you\n// import them (like if you're doing named imports):\nimport React, {useEffect} from 'react'\n```\n\n### API\n\nYou can customize the `callCount` and `timeLimit` by passing them as options:\n\n```javascript\n// as of this writing, this is the default, but the default could change as\n// we fine-tune what's more appropriate for this\nhijackEffects({callCount: 60, timeLimit: 1000})\n```\n\nYou can also wrap one but not the other React effect hook:\n\n```javascript\nimport {hijackEffectHook} from 'stop-runaway-react-effects'\n\nif (process.env.NODE_ENV === 'development') {\n  hijackEffectHook('useLayoutEffect', {callCount: 60, timeLimit: 1000})\n}\n```\n\nHere are some examples of code and output:\n\n```javascript\nfunction RunawayNoDeps() {\n  const [, forceUpdate] = React.useState()\n  React.useEffect(() => {\n    // hi, I'm just an innocent React effect callback\n    // like the ones you write every day.\n    // ... except I'm a runaway!!! 🏃\n    setTimeout(() => {\n      forceUpdate({})\n    })\n  })\n  return null\n}\n```\n\nThat code will produce this:\n\n![no deps](https://raw.githubusercontent.com/kentcdodds/stop-runaway-react-effects/master/other/no-deps.png)\n\n[![Edit React Codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/react-codesandbox-jf2nk?fontsize=14)\n\n---\n\n```javascript\nfunction RunawayChangingDeps() {\n  const [, forceUpdate] = React.useState()\n  const iNeverChange = 'I am primitive!'\n  const iChangeAllTheTime = {\n    iAmAn: 'object',\n    andIAm: 'initialized in render',\n    soI: 'need to be memoized',\n  }\n  React.useEffect(() => {\n    // hi, I'm just an innocent React effect callback\n    // like the ones you write every day.\n    // ... except I'm a runaway!!! 🏃\n    setTimeout(() => {\n      forceUpdate({})\n    })\n  }, [iNeverChange, iChangeAllTheTime])\n  return null\n}\n```\n\nThat code will produce this:\n\n![changing-deps](https://raw.githubusercontent.com/kentcdodds/stop-runaway-react-effects/master/other/changing-deps.png)\n\n[![Edit React Codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/react-codesandbox-xd8m9?fontsize=14)\n\n## Inspiration\n\nAs an [instructor](https://kentcdodds.com) I give a lot of\n[react workshop](https://kentcdodds.com/workshops) and I know that when people\nare learning React hooks, this is a huge pitfall for them. I also bump into this\nissue myself. So\n[one day I decided to do something about it](https://twitter.com/kentcdodds/status/1125876615177629696)\nand now it's packaged up here.\n\n## Other Solutions\n\nI'm not aware of any, if you are please [make a pull request][prs] and add it\nhere!\n\n## Contributors\n\nThanks goes to these people ([emoji key][emojis]):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://kentcdodds.com\"><img src=\"https://avatars.githubusercontent.com/u/1500684?v=3\" width=\"100px;\" alt=\"Kent C. Dodds\"/><br /><sub><b>Kent C. Dodds</b></sub></a><br /><a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=kentcdodds\" title=\"Code\">💻</a> <a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=kentcdodds\" title=\"Documentation\">📖</a> <a href=\"#infra-kentcdodds\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=kentcdodds\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/foray1010\"><img src=\"https://avatars3.githubusercontent.com/u/3212221?v=4\" width=\"100px;\" alt=\"Alex Young\"/><br /><sub><b>Alex Young</b></sub></a><br /><a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=foray1010\" title=\"Documentation\">📖</a> <a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=foray1010\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://www.davidosomething.com/\"><img src=\"https://avatars3.githubusercontent.com/u/609213?v=4\" width=\"100px;\" alt=\"David O'Trakoun\"/><br /><sub><b>David O'Trakoun</b></sub></a><br /><a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=davidosomething\" title=\"Documentation\">📖</a></td>\n    <td align=\"center\"><a href=\"https://stackshare.io/jdorfman/decisions\"><img src=\"https://avatars1.githubusercontent.com/u/398230?v=4\" width=\"100px;\" alt=\"Justin Dorfman\"/><br /><sub><b>Justin Dorfman</b></sub></a><br /><a href=\"#fundingFinding-jdorfman\" title=\"Funding Finding\">🔍</a></td>\n    <td align=\"center\"><a href=\"https://olliesports.com\"><img src=\"https://avatars2.githubusercontent.com/u/2257337?v=4\" width=\"100px;\" alt=\"Scott Ashton\"/><br /><sub><b>Scott Ashton</b></sub></a><br /><a href=\"https://github.com/kentcdodds/stop-runaway-react-effects/commits?author=scottmas\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors][all-contributors] specification.\nContributions of any kind welcome!\n\n## LICENSE\n\nMIT\n\n[npm]: https://www.npmjs.com/\n[node]: https://nodejs.org\n[build-badge]:\n  https://img.shields.io/travis/kentcdodds/stop-runaway-react-effects.svg?style=flat-square\n[build]: https://travis-ci.org/kentcdodds/stop-runaway-react-effects\n[coverage-badge]:\n  https://img.shields.io/codecov/c/github/kentcdodds/stop-runaway-react-effects.svg?style=flat-square\n[coverage]: https://codecov.io/github/kentcdodds/stop-runaway-react-effects\n[version-badge]:\n  https://img.shields.io/npm/v/stop-runaway-react-effects.svg?style=flat-square\n[package]: https://www.npmjs.com/package/stop-runaway-react-effects\n[downloads-badge]:\n  https://img.shields.io/npm/dm/stop-runaway-react-effects.svg?style=flat-square\n[npmtrends]: http://www.npmtrends.com/stop-runaway-react-effects\n[license-badge]:\n  https://img.shields.io/npm/l/stop-runaway-react-effects.svg?style=flat-square\n[license]:\n  https://github.com/kentcdodds/stop-runaway-react-effects/blob/master/LICENSE\n[prs-badge]:\n  https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\n[prs]: http://makeapullrequest.com\n[donate-badge]:\n  https://img.shields.io/badge/$-support-green.svg?style=flat-square\n[coc-badge]:\n  https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square\n[coc]:\n  https://github.com/kentcdodds/stop-runaway-react-effects/blob/master/other/CODE_OF_CONDUCT.md\n[emojis]: https://github.com/kentcdodds/all-contributors#emoji-key\n[all-contributors]: https://github.com/kentcdodds/all-contributors\n","time":{"created":"2022-01-27T09:00:21.505Z","modified":"2022-01-27T09:00:23.262Z","1.2.1":"2019-11-09T14:08:36.548Z","2.0.0":"2020-03-23T17:38:32.626Z","1.0.0":"2019-05-14T23:39:04.112Z","1.1.0":"2019-05-15T17:06:54.117Z","1.1.1":"2019-05-15T17:15:43.354Z","1.2.0":"2019-05-16T15:28:14.975Z"},"versions":{"1.2.1":{"name":"stop-runaway-react-effects","version":"1.2.1","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","typings":"typings/index.d.ts","scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"kent@doddsfamily.us","url":"http://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.4.4"},"devDependencies":{"kcd-scripts":"^1.4.0","react":"^16.8.6","react-dom":"^16.8.6","react-testing-library":"^7.0.0"},"husky":{"hooks":{"pre-commit":"kcd-scripts pre-commit"}},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"c0428e47bc6db88bae00ef1b7530a76df4c8b4d2","_id":"stop-runaway-react-effects@1.2.1","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-56AK/rkH+/Y1ZUF+QYsl/7Z/caSnF46RmkbF6AemYWue2tZpAlOOj+VdcLdhFGo5Vg7ajDP2Lqq+3UhbdWQRmQ==","shasum":"ffc9df565021c69cd2c04171e7f0e4a6c7eb2b21","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-1.2.1.tgz","fileCount":12,"unpackedSize":41233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxshkCRA9TVsSAnZWagAA1EsQAIbM6uDm9Fdb6Bbzh146\n8GMWdotwAzg+QmTPJ78oM6jTPx8kfwKx3OIeFcWl+QmFFQH+UajKaPKeBk7j\nD0OIELUQVVGTqWxbld2654EJzDGz2A6fUCzvZhAz1Uk/L2AUW9qvjTw2Ge3Q\nMlsyTQlFd7kDyXOQRKCSYCnCADd4W0sGhbwlnM+KVgPmj2WykZkmnGz9BF91\n+pyE4mcvbmiLN/dgsQXnIlenmaHxVREfwiqDzps2VsyqqKa7GKR2ItLMwX3X\ngKtR2R+Z2a8/sXhpXuKq47PJvD4N1vXs/6RmHRMdM13E9hl8kv3K04HObAFZ\n2mrxWn9U4yyMMjsKPjVQXBkCFFm3pjQFJJ1zpODBgRHZvCjz5oKZQt3/1KTh\nB9fI4gYO9MyUxYu6OsovN/n6Ry/x5XgTKJINh8jXnqwNIl5G6xfzX2/B2934\nwmU9K2ev1EP6D3WAmtXY5681oN/wykqkqf1mQYSHCUULTKEzsjmRvvh8WkgQ\nT/kd+CKct72qQz1vFio6lWAAW0NeDVYrEJoGo05HD2bqH1G7AZ/BkPcm2qdV\nb6Q1qLNcRK6OEUqEriQdH0ymQ8L5/XIvhl7m1dg7ukcrnwKK5BcUiq034n++\nF6/5HLj7mQ1iDmSeRsh3FDje9Oh/1wQ69kVNIJ3DbrjsJwwxu+kRXlGFREc4\nFrmf\r\n=qRvy\r\n-----END PGP SIGNATURE-----\r\n","size":10116},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"me@kentcdodds.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_1.2.1_1573308516367_0.8267118149978907"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:23.069Z"},"2.0.0":{"name":"stop-runaway-react-effects","version":"2.0.0","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","typings":"typings/index.d.ts","scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"me@kentcdodds.com","url":"https://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.9.2"},"devDependencies":{"@testing-library/react":"^10.0.1","kcd-scripts":"^5.6.0","react":"^16.8.6","react-dom":"^16.13.1"},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"46dc463984d7bd0ecd1767674903038abd744c42","_id":"stop-runaway-react-effects@2.0.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-XFuYgkLwrtga4Py71q7uELwuxBw4fReD32nlYBv+mII12NXPYkLJvSonKjNYE2XHTqG22yWCBSl4w9pBNBZiBg==","shasum":"20853514af01c837ef6e22bfd220268f20713761","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-2.0.0.tgz","fileCount":12,"unpackedSize":41028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeePQZCRA9TVsSAnZWagAA4XoP/12tM/071t/wygJ0EsiL\n605aRn4UYAVDnvvtPy03Ivj4EPhZJb46xysGqAJMp0qI1ElDIX8zi4+q6Rs7\n9CMaqo85H1Hc/wcvlYb7NaHB1h8nDDsbcGpulM/TdT8/f6fm2ZzFgbj/4Sgg\nG9Y7LMA+i8VCstDjC2rXFLXqRAAZqZUnARZY5WJL/StzE55xPbsc/qzBcI0c\n7WWIh6DUp3vHp3Lc7mgcL5reo2YUrqxmz4GfL3fy8DvhwM+mj9Dar1MvUT+i\nwoVMmjE/gQ98eit6QjGkItS32a+05o+yOYTXh8Z0/MjKTRP3/wiaxU3gLE3e\nkci7Y/L6jkEUvT4s92P14qwVgm6dCAyTQiSBdHU162facv48+wzT1aDDILEq\nOL1hedyQNN21BmnVgvLxegNBuMOuJ1y6EtNmH2ggthllQ0JjiCG7CK0lI97k\nr1ho3G2TvTfdpVeyLSXONoDjTlLu9WFVbSzvwZkA7iGg6MI09zljpP07Falz\nb0fxI/qJbBJFu9xUgTdBCpCxwCq1jcFHR3pgAnlw1cy9Dxh0agLk07PqSCyW\nJwrJcBW/I0ID5U2FgKGKsws73K0nzqF3Vs00RgSk4craIBNUI5Fj3mwX4EdB\nKeSeOWYsD00DqMXgiTntXFazJOHlLfjQJN7OmOFdj25Mt3nQqodoJ+MWb78G\n+xCh\r\n=C0WW\r\n-----END PGP SIGNATURE-----\r\n","size":10051},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"me@kentcdodds.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_2.0.0_1584985112485_0.47364976844079854"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:23.160Z"},"1.0.0":{"name":"stop-runaway-react-effects","version":"1.0.0","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","browser":"dist/stop-runaway-react-effects.umd.js","engines":{"node":">=10","npm":">=6","yarn":">=1"},"scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"kent@doddsfamily.us","url":"http://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.4.4"},"devDependencies":{"kcd-scripts":"^1.4.0","react":"^16.8.6","react-dom":"^16.8.6","react-testing-library":"^7.0.0"},"husky":{"hooks":{"pre-commit":"kcd-scripts pre-commit"}},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"74788a262bc309a8b7aaee9815d142ad0c473335","_id":"stop-runaway-react-effects@1.0.0","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-z/Bs04ghKqOIG802iNJHV37q1RU9q/9yzd4FgqYD8fncvVZjSaIH3uXkcsk92of9s8cYs3jd2rmBFOjixu7Tjg==","shasum":"25a165d7dfd3ebe7675aecdde840790cf9ee738c","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-1.0.0.tgz","fileCount":10,"unpackedSize":38282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc21GYCRA9TVsSAnZWagAAUhAQAJZNP4lVvRrjQz6NF9Vt\n7gG89VN39fleGQPQpNlUF0Si1KJdLsf7+0izm+C82Pye57GU0OpMUjFwB91y\nYMTcLXLh0u7AUyyXOc+le3DaiqWfs3Iz6yIrXDLdfRaHQXzFEpQRZ+y1um3Q\nhAisDfDIVZCqSZVshlwvUAaF+Ov9eig518Ect0QQICbqb5rUYZL5kFBTnlse\n4bLutUJVhbQC1iZcWWyWhmWgyBCwv75yAiIZCmXO9cJy5129FFVkF7hKe9Um\n4BOGRSZiVieU4YAHrktwFoYKva1X8R/THTDjcFk0YObcC3wdAlUfotEGi4f6\nI1FFY3Co82Rzkk4VaLNM8KxstScvX6Z19HU08pKyT3Xs3xTGLjwgZjKCjoky\nckvhmdlHI4GF5OWpKD5hXtRchW8caN8sLJhePNqTnUbN1F9kMniFYYmx5TtT\nx5j2lxmOzeESq1/wOBqe9FfyXEF38XjOIjwPTPs0VAJI1NKDP2yrL9RSJ+L+\nQ1Y3Mj5L3sctdB2x4BqGdaOuNA/XORtmOGwZhjOl1LFq0hWTRDhsyc5c58RH\nbvVhLvR6itmF1RMU83C2cVyy9X0Jypq/Zd/8c2gKX4oXETzuoqJ4ntckIqdh\numJ8WsV1pOxgjHQJJVI4A+Sv68TXV6E8OkkGkSZJ0Hnad4/MXxNeLkQBfJPH\nRMjD\r\n=HJAu\r\n-----END PGP SIGNATURE-----\r\n","size":9227},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"kent@doddsfamily.us"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_1.0.0_1557877143933_0.5162451892933935"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:20.294Z"},"1.1.0":{"name":"stop-runaway-react-effects","version":"1.1.0","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","browser":"dist/stop-runaway-react-effects.umd.js","engines":{"node":">=10","npm":">=6","yarn":">=1"},"scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"kent@doddsfamily.us","url":"http://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.4.4"},"devDependencies":{"kcd-scripts":"^1.4.0","react":"^16.8.6","react-dom":"^16.8.6","react-testing-library":"^7.0.0"},"husky":{"hooks":{"pre-commit":"kcd-scripts pre-commit"}},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"09734e1b615a2177c7236c09c50b77ba727b40e3","_id":"stop-runaway-react-effects@1.1.0","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-70VlZ+pLnAqlCSNvd6rFhQOxlbadoKnQUaL5qjfyehgtB7s3qZdqP1aBa2b9iAYKdJEkxz0kjz/KDCx7fq9/pw==","shasum":"dc042328408b7e390fa4dc58faa0097ef6b1a033","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-1.1.0.tgz","fileCount":10,"unpackedSize":39002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3EcuCRA9TVsSAnZWagAA1oUP/RMOon1C7kBh1BzZz1NX\nRRTYkG8Hwtw4aOc7PO/d7/pk2X73Jj7OMyS2AYHqe+1/eRyUDZRAJW/AOY/f\ngPCKzhfcIDJDQYaEttltrT0ZhDk6RlTRrxeoVJrPbXMd6Y1efZ6GamqWM0Lh\nbt1xSgyv7Wj4gE4hor16M3tBWxwpDsl4RPqN2C1ag9yFUM7kDkUImVFgvijo\nEWy/zkLE4GlFO/agMK8CuqEvJt2V3NbqzNDieZvXLuaR7UeUZptvnhuS5wvM\nsl1syS1jCbNsGm60cyWg8aKulxTe6YrnTJM08/cndTII4WO+8yWm5W/GcYjz\n3WaO1mFLS3bmxcR+pFhpBEj+JwwV5O9IeK5anB1b+SqiKON/kJI8Rz5ezlb+\n1jpBewi3M33CIqc7E9iSV+kbssraMosfZGxSM54yaryaZHgY3cOAgU3DJfYs\nfxvAQxhiO0Msp7mWkP61didD62acl4JCFIoZpObAtK5FpeHeHi/hKIzKTQUL\noogRtaR1cowMWhF8w/nbl9OOoijPrfpPiK7j+ZF0Csim8BD+cC/ZbI/lqSep\np0TR/k34Ema6kjcwMroDhtKzhIN6YURU9iO4XMAeAKy61xOvS10FQMMGTgna\nxPwPJd8kMK+5IE3Xkvynw7iXENVNrCxi4uir0+Rd3VM/InF3bx/lowhY5kjr\nBsiT\r\n=B1/y\r\n-----END PGP SIGNATURE-----\r\n","size":9420},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"kent@doddsfamily.us"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_1.1.0_1557940013953_0.16390552536140057"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:21.219Z"},"1.1.1":{"name":"stop-runaway-react-effects","version":"1.1.1","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","browser":"dist/stop-runaway-react-effects.umd.js","engines":{"node":">=10","npm":">=6","yarn":">=1"},"scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"kent@doddsfamily.us","url":"http://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.4.4"},"devDependencies":{"kcd-scripts":"^1.4.0","react":"^16.8.6","react-dom":"^16.8.6","react-testing-library":"^7.0.0"},"husky":{"hooks":{"pre-commit":"kcd-scripts pre-commit"}},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"1a3d1d027d8ec55faadaa788119733d9bf460ef0","_id":"stop-runaway-react-effects@1.1.1","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YaoesxHLcVEAfwnR+fV7qXGSyVOWvKNCD1CfGfz02AMZJdOOfvuywbJrZJYdynBOJNo0O8wNnHV70ILZ/qHzsw==","shasum":"7646c4f13a31b336fd02859958c848f3f048eaed","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-1.1.1.tgz","fileCount":11,"unpackedSize":39836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3Ek/CRA9TVsSAnZWagAA2W0P/jUCCGdpB4cVRaqxL806\nTlCW2AlNx2oF+Zlzbp7tg0HE8B4G7+Ua8O892RpHeQdMqQGMMnrABflLspi5\nwayzzTeDUBq0DqmOdLlu06/cc45m35clm6/abLAd8pIoez1CJ7eIJHO1jkVB\nzC+ApSITzs2C3HCdYFMr1GpXO4jnUZfSoROUq3fSeK72z9nFf8vj3LIti8Ot\nDWC/xiNaUXMVah5icYvcS1E6UFZkVxNVOxNIDBWkm4sK3J7CvZq3C0L9wq4a\nzW+29bLfOuDuZMBESD5wZdTr3efKDkPxUcBQlFeBWw3dXNQeK5usTxh3uETS\ntGEt/q7A84Xuq42Mgp7vvhPAz53tKfwn7kiT50+mopRjmh5klVKmg0bx6ndU\nuV34DZc8cjhNyX+JvIeEGfuAniA22wR7f7fbJhlTSPHQ8qZHPHSHZ9RSV6w1\n8VsGUTlwHf0gpwHOF02FFAaSxSZTlklklguGVoWa7Kpwjx8DyVmqQUXkvd76\ncToMUVhy610QDhz2MHtDDFWmjpDR/ws5Ucz3nuNiAZCdivro/aw/7e8kTFI2\n3bG9C7m4Uln1lXOqXX9I5175Zgn7UH+/u9I4GgdiriDe6zLErBYqsqJs0KNm\n9pjr1zl66QkAefs0vHnR69/LLrurivddfoUrOBfmlS0LZFcFobWEs28CCk+p\nnc7L\r\n=5d99\r\n-----END PGP SIGNATURE-----\r\n","size":9738},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"kent@doddsfamily.us"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_1.1.1_1557940543097_0.044832498601566906"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:22.092Z"},"1.2.0":{"name":"stop-runaway-react-effects","version":"1.2.0","description":"Catches situations when a react use(Layout)Effect runs repeatedly in rapid succession","main":"dist/stop-runaway-react-effects.cjs.js","module":"dist/stop-runaway-react-effects.esm.js","typings":"typings/index.d.ts","engines":{"node":">=10","npm":">=6","yarn":">=1"},"scripts":{"build":"kcd-scripts build --bundle","lint":"kcd-scripts lint","test":"kcd-scripts test","test:update":"npm test -- --updateSnapshot --coverage","validate":"kcd-scripts validate","setup":"npm install && npm run validate -s"},"keywords":[],"author":{"name":"Kent C. Dodds","email":"kent@doddsfamily.us","url":"http://kentcdodds.com/"},"license":"MIT","peerDependencies":{"react":">=16.8.x"},"dependencies":{"@babel/runtime":"^7.4.4"},"devDependencies":{"kcd-scripts":"^1.4.0","react":"^16.8.6","react-dom":"^16.8.6","react-testing-library":"^7.0.0"},"husky":{"hooks":{"pre-commit":"kcd-scripts pre-commit"}},"eslintConfig":{"extends":"./node_modules/kcd-scripts/eslint.js","rules":{"no-console":"off"}},"repository":{"type":"git","url":"git+https://github.com/kentcdodds/stop-runaway-react-effects.git"},"bugs":{"url":"https://github.com/kentcdodds/stop-runaway-react-effects/issues"},"homepage":"https://github.com/kentcdodds/stop-runaway-react-effects#readme","gitHead":"4231188274ea2bfd9e47023fb0a4463391b65b66","_id":"stop-runaway-react-effects@1.2.0","_nodeVersion":"12.2.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VKBB01YXuiNbUzftBZsHoJyY+6c4UTNRDNcVypZwKIOD0o9DiGM4C8KnLKXO6J5/DJoFqcjYbQxYJ+xZIDbdPQ==","shasum":"795a00dfdd16e69185f501f2ad7d70b9f0d55709","tarball":"https://registry.npmmirror.com/stop-runaway-react-effects/-/stop-runaway-react-effects-1.2.0.tgz","fileCount":12,"unpackedSize":40521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3YGPCRA9TVsSAnZWagAAw00P/0Tttf4BUDonJ7SGJRH1\n5wLBs2UKsadPT/BiOzrYdVvRdrVw9dIfGMNQTcaTNqXzGOMi3tTkec9rmizz\nhXA111uS9F9c/ov8dwh5FxzZp0ykRX+XLxrA7k+Y9jthy5XWZLVftDdpuR+K\nr7O70CKKlbCrrpo8Hwn+kYZxwKNJEVgUpDVw8arbR/0o6P8Neq5iUn+rGJrA\nzij2Hkwhmw9Oa89ol5qHJ/I4PXninNuSs5GABOUPjyR+KQV/ttxdtiwgYWTN\nqxtlUppQdizG4q/Q6ci9ypTkHmgQk8Vx1g06TPPRjXKikV2Ty3wC1yX/neIF\n9dubXYLDtO62+vKu2GM+lfhM+mWAOSKvSmb90SSzfCNVqnH+kedf11pCUpR+\nPpza5fJSoMoXFAY+3QBuaonb49+f1vueXOpRSfQjR2s7PbwW26De+qD05N+k\n19MwDAUjLgrGfcybE7lWWnYhJ08nRlfXD67v3CSLMkpBplPdEH8bXzoiM62J\nbpMoU9P9FFo7isdEN9NWCZyaOsR0K/SIoWmWJSePdFE6aglWUIfhqrS/Hhfw\nM5GvEZokkspTecUScu9WfjF/+1axo1TSty/+aDJUhNw5LrsUSZ8YxTWAbh7t\nGTcJ09TWO4FogYQ8M8QnlCPH6D3HXzELRc/ipf8SeukeyGWX7eHGwBZIfPqa\nR8k7\r\n=K0eA\r\n-----END PGP SIGNATURE-----\r\n","size":9902},"maintainers":[{"name":"kentcdodds","email":"kent@doddsfamily.us"}],"_npmUser":{"name":"kentcdodds","email":"kent@doddsfamily.us"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stop-runaway-react-effects_1.2.0_1558020494830_0.46919028960012876"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-24T18:09:22.974Z"}},"_source_registry_name":"default"}