CINXE.COM

GitHub - FirebaseExtended/reactfire: Hooks, Context Providers, and Components that make it easy to interact with Firebase.

<!DOCTYPE html> <html lang="en"> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://github.com/FirebaseExtended/reactfire","20201001182340","https://web.archive.org/","web","/_static/", "1601576620"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://github.githubassets.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://avatars0.githubusercontent.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://avatars1.githubusercontent.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://avatars2.githubusercontent.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://avatars3.githubusercontent.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://github-cloud.s3.amazonaws.com/"> <link rel="dns-prefetch" href="https://web.archive.org/web/20201001182340/https://user-images.githubusercontent.com/"> <link crossorigin="anonymous" media="all" integrity="" rel="stylesheet" href="https://web.archive.org/web/20201001182340cs_/https://github.githubassets.com/assets/frameworks-7a4157da0ecf60819a0dba26682caaae.css"/> <link crossorigin="anonymous" media="all" integrity="" rel="stylesheet" href="https://web.archive.org/web/20201001182340cs_/https://github.githubassets.com/assets/site-9d5cd490bbe2e8ae29d653e956c10626.css"/> <link crossorigin="anonymous" media="all" integrity="" rel="stylesheet" href="https://web.archive.org/web/20201001182340cs_/https://github.githubassets.com/assets/github-a344dbcb284296bddb89524a98059720.css"/> <meta name="viewport" content="width=device-width"> <title>GitHub - FirebaseExtended/reactfire: Hooks, Context Providers, and Components that make it easy to interact with Firebase.</title> <meta name="description" content="Hooks, Context Providers, and Components that make it easy to interact with Firebase. - FirebaseExtended/reactfire"> <link rel="search" type="application/opensearchdescription+xml" href="/web/20201001182340/https://github.com/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905"> <meta name="twitter:image:src" content="https://avatars1.githubusercontent.com/u/42357678?s=400&amp;v=4"/><meta name="twitter:site" content="@github"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="FirebaseExtended/reactfire"/><meta name="twitter:description" content="Hooks, Context Providers, and Components that make it easy to interact with Firebase. - FirebaseExtended/reactfire"/> <meta property="og:image" content="https://web.archive.org/web/20201001182340im_/https://avatars1.githubusercontent.com/u/42357678?s=400&amp;v=4"/><meta property="og:site_name" content="GitHub"/><meta property="og:type" content="object"/><meta property="og:title" content="FirebaseExtended/reactfire"/><meta property="og:url" content="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire"/><meta property="og:description" content="Hooks, Context Providers, and Components that make it easy to interact with Firebase. - FirebaseExtended/reactfire"/> <link rel="assets" href="https://github.githubassets.com/"> <meta name="request-id" content="CF79:582E:14717A:225C01:5F761EAC" data-pjax-transient="true"/><meta name="html-safe-nonce" content="3da38651221b294ed84d1cdf6788f2d023f450be" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDRjc5OjU4MkU6MTQ3MTdBOjIyNUMwMTo1Rjc2MUVBQyIsInZpc2l0b3JfaWQiOiI3Nzg4NzY0MTE1ODk4ODY3MzcyIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="1e879378b5d2a00d03b29bf6d8f4f7b5bfb8d377b96f477e99340b390ec3879a" data-pjax-transient="true"/><meta name="cookie-consent-required" content="false" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:19245530" data-pjax-transient> <meta name="github-keyboard-shortcuts" content="repository" data-pjax-transient="true"/> <meta name="selected-link" value="repo_source" data-pjax-transient> <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY"> <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> <meta name="octolytics-host" content="collector.githubapp.com"/><meta name="octolytics-app-id" content="github"/><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event"/><meta name="octolytics-dimension-ga_id" content="" class="js-octo-ga-id"/> <meta name="analytics-location" content="/<user-name>/<repo-name>" data-pjax-transient="true"/> <meta name="google-analytics" content="UA-3769691-2"> <meta class="js-ga-set" name="dimension10" content="Responsive" data-pjax-transient> <meta class="js-ga-set" name="dimension1" content="Logged Out"> <meta name="hostname" content="github.com"> <meta name="user-login" content=""> <meta name="expected-hostname" content="github.com"> <meta name="enabled-features" content="MARKETPLACE_PENDING_INSTALLATIONS"> <meta http-equiv="x-pjax-version" content="a2ec36e5bedbdfbb24d4a9eefe6e0f543e2f8b3a8c41d99d0f30f56b12e26459"> <link href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits/master.atom" rel="alternate" title="Recent Commits to reactfire:master" type="application/atom+xml"> <meta name="go-import" content="github.com/FirebaseExtended/reactfire git https://github.com/FirebaseExtended/reactfire.git"> <meta name="octolytics-dimension-user_id" content="42357678"/><meta name="octolytics-dimension-user_login" content="FirebaseExtended"/><meta name="octolytics-dimension-repository_id" content="19245530"/><meta name="octolytics-dimension-repository_nwo" content="FirebaseExtended/reactfire"/><meta name="octolytics-dimension-repository_public" content="true"/><meta name="octolytics-dimension-repository_is_fork" content="false"/><meta name="octolytics-dimension-repository_network_root_id" content="19245530"/><meta name="octolytics-dimension-repository_network_root_nwo" content="FirebaseExtended/reactfire"/><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false"/> <link rel="canonical" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire" data-pjax-transient> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://web.archive.org/web/20201001182340im_/https://github.githubassets.com/pinned-octocat.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://web.archive.org/web/20201001182340im_/https://github.githubassets.com/favicons/favicon.svg"> <meta name="theme-color" content="#1e2327"> <link rel="manifest" href="/web/20201001182340/https://github.com/manifest.json" crossorigin="use-credentials"> </head> <body class="logged-out env-production page-responsive"> <div class="position-relative js-header-wrapper "> <a href="#start-of-content" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a> <span class="progress-pjax-loader width-full js-pjax-loader-bar Progress position-fixed"> <span style="background-color: #79b8ff;width: 0%;" class="Progress-item progress-pjax-loader-bar "></span> </span> <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner"> <div class="container-xl d-lg-flex flex-items-center p-responsive"> <div class="d-flex flex-justify-between flex-items-center"> <a class="mr-4" href="https://web.archive.org/web/20201001182340/https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> <svg height="32" class="octicon octicon-mark-github text-white" viewbox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> </a> <div class="d-lg-none css-truncate css-truncate-target width-fit p-2"> </div> <div class="d-flex flex-items-center"> <a href="/web/20201001182340/https://github.com/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&amp;source=header-repo" class="d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="89cb3b4b2ce46c6c0c4d922d1930b7f0b6c3c8dfadb4f9c07d25ed65acc3245e" data-ga-click="Sign up, click to sign up for account, ref_page:/<user-name>/<repo-name>;ref_cta:Sign up;ref_loc:header logged out"> Sign&nbsp;up </a> <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false"> <svg height="24" class="octicon octicon-three-bars text-white" viewbox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path></svg> </button> </div> </div> <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto"> <div class="d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3"> <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false"> <svg height="24" class="octicon octicon-x text-gray" viewbox="0 0 24 24" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M5.72 5.72a.75.75 0 011.06 0L12 10.94l5.22-5.22a.75.75 0 111.06 1.06L13.06 12l5.22 5.22a.75.75 0 11-1.06 1.06L12 13.06l-5.22 5.22a.75.75 0 01-1.06-1.06L10.94 12 5.72 6.78a.75.75 0 010-1.06z"></path></svg> </button> </div> <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> <details class="HeaderMenu-details details-overlay details-reset width-full"> <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> Why GitHub? <svg x="0px" y="0px" viewbox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> <path d="M1,1l6.2,6L13,1"></path> </svg> </summary> <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> <a href="/web/20201001182340/https://github.com/features" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a> <ul class="list-style-none f5 pb-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/code-review/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code review">Code review</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/project-management/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Project management">Project management</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/integrations" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Integrations">Integrations</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/actions" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Actions">Actions</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/packages" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Packages">Packages</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features/security" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Security">Security</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features#team-management" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Team management">Team management</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/features#hosting" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code hosting">Hosting</a></li> <li class="edge-item-fix hide-xl"><a href="/web/20201001182340/https://github.com/mobile" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Mobile">Mobile</a></li> </ul> <ul class="list-style-none mb-0 border-lg-top pt-lg-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/security" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Security">Security <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li> </ul> </div> </details> </li> <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> <a href="/web/20201001182340/https://github.com/team" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Team">Team</a> </li> <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> <a href="/web/20201001182340/https://github.com/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a> </li> <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> <details class="HeaderMenu-details details-overlay details-reset width-full"> <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> Explore <svg x="0px" y="0px" viewbox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> <path d="M1,1l6.2,6L13,1"></path> </svg> </summary> <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> <ul class="list-style-none mb-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/explore" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li> </ul> <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn &amp; contribute</h4> <ul class="list-style-none mb-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/topics" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Topics">Topics</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/collections" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Collections">Collections</a></li> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/trending" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Trending">Trending</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://lab.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://opensource.guide/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides</a></li> </ul> <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4> <ul class="list-style-none mb-0"> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://github.com/events" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Events">Events</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://github.community/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Community forum">Community forum</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://education.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://stars.github.com/" class="py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Stars Program">GitHub Stars program</a></li> </ul> </div> </details> </li> <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3"> <a href="/web/20201001182340/https://github.com/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a> </li> <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center "> <details class="HeaderMenu-details details-overlay details-reset width-full"> <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block"> Pricing <svg x="0px" y="0px" viewbox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative"> <path d="M1,1l6.2,6L13,1"></path> </svg> </summary> <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4"> <a href="/web/20201001182340/https://github.com/pricing" class="pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a> <ul class="list-style-none mb-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans</a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales</a></li> </ul> <ul class="list-style-none mb-0 border-lg-top pt-lg-3"> <li class="edge-item-fix"><a href="/web/20201001182340/https://github.com/nonprofit" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Nonprofits">Nonprofit <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li> <li class="edge-item-fix"><a href="https://web.archive.org/web/20201001182340/https://education.github.com/" class="py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li> </ul> </div> </details> </li> </ul> </nav> <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left"> <div class="d-lg-flex mb-3 mb-lg-0"> <div class="header-search header-search-current js-header-search-current flex-auto js-site-search position-relative flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to js-header-search-current-jump-to" role="combobox" aria-owns="jump-to-results" aria-label="Search or jump to" aria-haspopup="listbox" aria-expanded="false"> <div class="position-relative"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="19245530" data-scoped-search-url="/FirebaseExtended/reactfire/search" data-unscoped-search-url="/search" action="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/search" accept-charset="UTF-8" method="get"> <label class="form-control input-sm header-search-wrapper p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center"> <input type="text" class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable" data-hotkey="s,/" name="q" value="" placeholder="Search" data-unscoped-placeholder="Search GitHub" data-scoped-placeholder="Search" autocapitalize="off" aria-autocomplete="list" aria-controls="jump-to-results" aria-label="Search" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" spellcheck="false" autocomplete="off"> <input type="hidden" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" value="5tC2vZHmBm+Wyx6+LBhLjJugx3fm/yqWh+Xj2G+l8FnmzeGdDX9iax/pSRswH1SpZT+5B98vfyaO1R+a4tbVog=="/> <input type="hidden" class="js-site-search-type-field" name="type"> <img src="https://web.archive.org/web/20201001182340im_/https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash"> <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container"> <ul class="d-none js-jump-to-suggestions-template-container"> <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option"> <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href=""> <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> </div> <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="/web/20201001182340im_/https://github.com/FirebaseExtended/reactfire" width="28" height="28"> <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> </div> <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search"> <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> In this repository </span> <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> All GitHub </span> <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> </div> <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> Jump to <span class="d-inline-block ml-1 v-align-middle">↵</span> </div> </a> </li> </ul> <ul class="d-none js-jump-to-no-results-template-container"> <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2"> <span class="text-gray">No suggested jump to results</span> </li> </ul> <ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container"> <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option"> <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href=""> <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> </div> <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="/web/20201001182340im_/https://github.com/FirebaseExtended/reactfire" width="28" height="28"> <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> </div> <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search"> <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> In this repository </span> <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> All GitHub </span> <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> </div> <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> Jump to <span class="d-inline-block ml-1 v-align-middle">↵</span> </div> </a> </li> <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option"> <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href=""> <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg> <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewbox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> </div> <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="/web/20201001182340im_/https://github.com/FirebaseExtended/reactfire" width="28" height="28"> <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> </div> <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search"> <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> In this repository </span> <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> All GitHub </span> <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> </div> <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> Jump to <span class="d-inline-block ml-1 v-align-middle">↵</span> </div> </a> </li> </ul> </div> </label> </form> </div> </div> </div> <a href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire" class="HeaderMenu-link no-underline mr-3" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2389498d320e41d6220cece16a03101537b707e9aa46cbebe573e23e7867de8c" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in"> Sign&nbsp;in </a> <a href="/web/20201001182340/https://github.com/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&amp;source=header-repo&amp;source_repo=FirebaseExtended%2Freactfire" class="HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2389498d320e41d6220cece16a03101537b707e9aa46cbebe573e23e7867de8c" data-ga-click="Sign up, click to sign up for account, ref_page:/<user-name>/<repo-name>;ref_cta:Sign up;ref_loc:header logged out"> Sign&nbsp;up </a> </div> </div> </div> </header> </div> <div id="start-of-content" class="show-on-focus"></div> <div data-pjax-replace id="js-flash-container"> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div class=" px-2"> <button class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg class="octicon octicon-x" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> </button> <div>{{ message }}</div> </div> </div> </template> </div> <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled> <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" data-pjax-container> <div class="bg-gray-light pt-3 hide-full-screen mb-5"> <div class="d-flex mb-3 px-3 px-md-4 px-lg-5"> <div class="flex-auto min-width-0 width-fit mr-3"> <h1 class=" d-flex flex-wrap flex-items-center break-word f3 text-normal"> <svg class="octicon octicon-repo text-gray mr-2" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/FirebaseExtended/hovercard" href="/web/20201001182340/https://github.com/FirebaseExtended">FirebaseExtended</a> </span> <span class="mx-1 flex-self-stretch">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#js-repo-pjax-container" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire">reactfire</a> </strong> </h1> </div> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a class="tooltipped tooltipped-s btn btn-sm btn-with-count" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6ed6325d4ca83ec474d52ca52df8fa170ea9c01e4ae9ba9ad8f079a9f5834218" href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire"> <svg height="16" class="octicon octicon-eye" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path></svg> Watch </a> <a class="social-count" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/watchers" aria-label="103 users are watching this repository"> 103 </a> </li> <li> <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:19245530,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="03fba5395493e3de7c33272c3b011a90efd4fba55427fd7dbea7ccb0a19a9b67" href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire"> <svg vertical_align="text_bottom" height="16" class="octicon octicon-star v-align-text-bottom" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg> Star </a> <a class="social-count js-social-count" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/stargazers" aria-label="2144 users starred this repository"> 2.1k </a> </li> <li> <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:19245530,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="4b6dbe3860c09d0b70afce91bd49963f1716ecfde42a73c6f40093141fbdea77" href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire"> <svg class="octicon octicon-repo-forked" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg> Fork </a> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/network/members" class="social-count" aria-label="299 users forked this repository"> 299 </a> </li> </ul> </div> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3"> Hooks, Context Providers, and Components that make it easy to interact with Firebase. </p> <div class="mb-2 d-flex flex-items-center"> <svg mr="2" classes="flex-shrink-0" height="16" class="octicon octicon-link flex-shrink-0 mr-2" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://firebaseopensource.com/projects/firebaseextended/reactfire/" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="https://web.archive.org/web/20201001182340/https://firebaseopensource.com/projects/firebaseextended/reactfire/">firebaseopensource.com/projects/firebaseextended/reactfire/</a> </span> </div> <div class="mb-2"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/LICENSE" class="muted-link"> <svg mr="1" height="16" class="octicon octicon-law mr-1" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.75.75a.75.75 0 00-1.5 0V2h-.984c-.305 0-.604.08-.869.23l-1.288.737A.25.25 0 013.984 3H1.75a.75.75 0 000 1.5h.428L.066 9.192a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.514 3.514 0 00.686.45A4.492 4.492 0 003 11c.88 0 1.556-.22 2.023-.454a3.515 3.515 0 00.686-.45l.045-.04.016-.015.006-.006.002-.002.001-.002L5.25 9.5l.53.53a.75.75 0 00.154-.838L3.822 4.5h.162c.305 0 .604-.08.869-.23l1.289-.737a.25.25 0 01.124-.033h.984V13h-2.5a.75.75 0 000 1.5h6.5a.75.75 0 000-1.5h-2.5V3.5h.984a.25.25 0 01.124.033l1.29.736c.264.152.563.231.868.231h.162l-2.112 4.692a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.517 3.517 0 00.686.45A4.492 4.492 0 0013 11c.88 0 1.556-.22 2.023-.454a3.512 3.512 0 00.686-.45l.045-.04.01-.01.006-.005.006-.006.002-.002.001-.002-.529-.531.53.53a.75.75 0 00.154-.838L13.823 4.5h.427a.75.75 0 000-1.5h-2.234a.25.25 0 01-.124-.033l-1.29-.736A1.75 1.75 0 009.735 2H8.75V.75zM1.695 9.227c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327l-1.305 2.9zm10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327l-1.305 2.9z"></path></svg> MIT License </a> </div> <div class="mb-3"> <a class="link-gray no-underline mr-3" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/stargazers"> <svg mr="1" height="16" class="octicon octicon-star mr-1" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg> <span class="text-bold">2.1k</span> stars </a> <a class="link-gray no-underline" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/network/members"> <svg mr="1" height="16" class="octicon octicon-repo-forked mr-1" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg> <span class="text-bold">299</span> forks </a> </div> <div class="d-flex"> <div class="flex-1 mr-2"> <a class="btn btn-sm btn-block tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:19245530,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="03fba5395493e3de7c33272c3b011a90efd4fba55427fd7dbea7ccb0a19a9b67" href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire"> <svg vertical_align="text_bottom" height="16" class="octicon octicon-star v-align-text-bottom" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg> Star </a> </div> <div class="flex-1"> <a class="tooltipped tooltipped-s btn btn-sm btn-block" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6ed6325d4ca83ec474d52ca52df8fa170ea9c01e4ae9ba9ad8f079a9f5834218" href="/web/20201001182340/https://github.com/login?return_to=%2FFirebaseExtended%2Freactfire"> <svg height="16" class="octicon octicon-eye" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path></svg> Watch </a> </div> </div> </div> <nav aria-label="Repository" data-pjax="#js-repo-pjax-container" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5 bg-gray-light"> <ul class="UnderlineNav-body list-style-none "> <li class="d-flex"> <a class="js-selected-navigation-item selected UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="code-tab" data-hotkey="g c" data-ga-click="Repository, Navigation click, Code tab" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /FirebaseExtended/reactfire" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg> <span data-content="Code">Code</span> <span title="Not available" class="Counter "></span> </a> </li> <li class="d-flex"> <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="issues-tab" data-hotkey="g i" data-ga-click="Repository, Navigation click, Issues tab" data-selected-links="repo_issues repo_labels repo_milestones /FirebaseExtended/reactfire/issues" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path></svg> <span data-content="Issues">Issues</span> <span title="36" class="Counter ">36</span> </a> </li> <li class="d-flex"> <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="pull-requests-tab" data-hotkey="g p" data-ga-click="Repository, Navigation click, Pull requests tab" data-selected-links="repo_pulls checks /FirebaseExtended/reactfire/pulls" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pulls"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path></svg> <span data-content="Pull requests">Pull requests</span> <span title="9" class="Counter ">9</span> </a> </li> <li class="d-flex"> <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="actions-tab" data-hotkey="g a" data-ga-click="Repository, Navigation click, Actions tab" data-selected-links="repo_actions /FirebaseExtended/reactfire/actions" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/actions"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg> <span data-content="Actions">Actions</span> <span title="Not available" class="Counter "></span> </a> </li> <li class="d-flex"> <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="security-tab" data-hotkey="g s" data-ga-click="Repository, Navigation click, Security tab" data-selected-links="security overview alerts policy token_scanning code_scanning /FirebaseExtended/reactfire/security" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/security"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path></svg> <span data-content="Security">Security</span> <include-fragment src="/FirebaseExtended/reactfire/security/overall-count" accept="text/fragment+html"></include-fragment> </a> </li> <li class="d-flex"> <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="insights-tab" data-ga-click="Repository, Navigation click, Insights tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people /FirebaseExtended/reactfire/pulse" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pulse"> <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path></svg> <span data-content="Insights">Insights</span> <span title="Not available" class="Counter "></span> </a> </li> </ul> <div class="position-absolute right-0 pr-3 pr-md-4 pr-lg-5 js-responsive-underlinenav-overflow" style="visibility:hidden;"> <details class="details-overlay details-reset position-relative"> <summary role="button"> <div class="UnderlineNav-item mr-0 border-0"> <svg class="octicon octicon-kebab-horizontal" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg> <span class="sr-only">More</span> </div> </summary> <div> <details-menu role="menu" class="dropdown-menu dropdown-menu-sw "> <ul> <li data-menu-item="code-tab" hidden> <a role="menuitem" class="js-selected-navigation-item selected dropdown-item" aria-current="page" data-selected-links=" /FirebaseExtended/reactfire" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire"> Code </a> </li> <li data-menu-item="issues-tab" hidden> <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /FirebaseExtended/reactfire/issues" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues"> Issues </a> </li> <li data-menu-item="pull-requests-tab" hidden> <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /FirebaseExtended/reactfire/pulls" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pulls"> Pull requests </a> </li> <li data-menu-item="actions-tab" hidden> <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /FirebaseExtended/reactfire/actions" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/actions"> Actions </a> </li> <li data-menu-item="security-tab" hidden> <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /FirebaseExtended/reactfire/security" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/security"> Security </a> </li> <li data-menu-item="insights-tab" hidden> <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /FirebaseExtended/reactfire/pulse" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pulse"> Insights </a> </li> </ul> </details-menu> </div></details> </div> </nav> </div> <div class="container-xl clearfix new-discussion-timeline px-3 px-md-4 px-lg-5"> <div class="repository-content "> <div class="d-none d-lg-block mt-6 mr-3 Popover top-0 right-0 box-shadow-medium col-3"> </div> <signup-prompt class="signup-prompt-bg rounded-1" data-prompt="signup" hidden> <div class="signup-prompt p-4 text-center mb-4 rounded-1"> <div class="position-relative"> <button type="button" class="position-absolute top-0 right-0 btn-link link-gray" data-action="click:signup-prompt#dismiss" data-ga-click="(Logged out) Sign up prompt, clicked Dismiss, text:dismiss"> Dismiss </button> <h3 class="pt-2">Join GitHub today</h3> <p class="col-6 mx-auto">GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.</p> <a class="btn btn-primary" data-ga-click="(Logged out) Sign up prompt, clicked Sign up, text:sign-up" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;files signup prompt&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2e40909af733f700cfc7bc087ac327f7c0b8684f562dbf610319ff6a5f04a210" href="/web/20201001182340/https://github.com/join?source=prompt-code&amp;source_repo=FirebaseExtended%2Freactfire">Sign up</a> </div> </div> </signup-prompt> <div class="gutter-condensed gutter-lg flex-column flex-md-row d-flex"> <div class="flex-shrink-0 col-12 col-md-9 mb-4 mb-md-0"> <div class="file-navigation mb-3 d-flex flex-items-start"> <div class="position-relative"> <details class="details-reset details-overlay mr-0 mb-0 " id="branch-select-menu"> <summary class="btn css-truncate" data-hotkey="w" title="Switch branches or tags"> <svg text="gray" height="16" class="octicon octicon-git-branch text-gray" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path></svg> <span class="css-truncate-target" data-menu-button>master</span> <span class="dropdown-caret"></span> </summary> <details-menu class="SelectMenu SelectMenu--hasFilter" src="/FirebaseExtended/reactfire/refs/master?source_action=disambiguate&amp;source_controller=files" preload> <div class="SelectMenu-modal"> <include-fragment class="SelectMenu-loading" aria-label="Menu is loading"> <svg class="octicon octicon-octoface anim-pulse" height="32" viewbox="0 0 24 24" version="1.1" width="32" aria-hidden="true"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 01.48-.5h5a.47.47 0 01.48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"></path><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 00-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0012 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 00-2.265-.866 1.725 1.725 0 00-2.141 1.196 23.645 23.645 0 00-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 00-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"></path></svg> </include-fragment> </div> </details-menu> </details> </div> <div class="flex-self-center ml-3 flex-self-stretch d-none d-lg-flex flex-items-center lh-condensed-ultra"> <a data-pjax href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/branches" class="link-gray-dark no-underline"> <svg text="gray" height="16" class="octicon octicon-git-branch text-gray" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path></svg> <strong>6</strong> <span class="text-gray-light">branches</span> </a> <a data-pjax href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tags" class="ml-3 link-gray-dark no-underline"> <svg text="gray" height="16" class="octicon octicon-tag text-gray" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"></path></svg> <strong>26</strong> <span class="text-gray-light">tags</span> </a> </div> <div class="flex-auto"></div> <a class="btn ml-2" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="221f65facec9bb6a574e2413d6b883e433d23cb013b9cda7493bcaf001d7056b" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" data-pjax="true" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/find/master"> Go to file </a> <span class="d-none d-md-flex ml-2"> <get-repo> <details class="position-relative details-overlay details-reset" data-action="toggle:get-repo#onDetailsToggle"> <summary class="btn btn-primary" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;repository_id&quot;:19245530,&quot;target&quot;:&quot;CLONE_OR_DOWNLOAD_BUTTON&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2e1f547897435fbc68861cf986da5f1046ce1918d839e68016b02cf010d9c226"> <svg class="octicon octicon-download mr-1" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path></svg> Code <span class="dropdown-caret"></span> </summary> <div class="position-relative"> <div class="dropdown-menu dropdown-menu-sw p-0" style="top:6px;width:352px;"> <div data-target="get-repo.modal"> <div class="border-bottom p-3"> <a class="muted-link float-right tooltipped tooltipped-s" href="https://web.archive.org/web/20201001182340/https://docs.github.com/articles/which-remote-url-should-i-use" target="_blank" aria-label="Which remote URL should I use?"> <svg class="octicon octicon-question" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zM6.92 6.085c.081-.16.19-.299.34-.398.145-.097.371-.187.74-.187.28 0 .553.087.738.225A.613.613 0 019 6.25c0 .177-.04.264-.077.318a.956.956 0 01-.277.245c-.076.051-.158.1-.258.161l-.007.004a7.728 7.728 0 00-.313.195 2.416 2.416 0 00-.692.661.75.75 0 001.248.832.956.956 0 01.276-.245 6.3 6.3 0 01.26-.16l.006-.004c.093-.057.204-.123.313-.195.222-.149.487-.355.692-.662.214-.32.329-.702.329-1.15 0-.76-.36-1.348-.863-1.725A2.76 2.76 0 008 4c-.631 0-1.155.16-1.572.438-.413.276-.68.638-.849.977a.75.75 0 101.342.67z"></path></svg> </a> <div class="text-bold"> <svg class="octicon octicon-terminal mr-3" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"></path></svg> Clone </div> <tab-container> <div class="UnderlineNav my-2 box-shadow-none"> <div class="UnderlineNav-body" role="tablist"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-remote="true" action="/web/20201001182340/https://github.com/users/set_protocol?protocol_type=clone" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="i9eKba40nu1D1cX5n4hRDyMbvcw+bFCATOORqq8ior2utTAyD7qXb/J0S9mrtZ2dXWvWUqj7f/MjNhnahS2jcg=="/> <button name="protocol_selector" type="submit" role="tab" class="UnderlineNav-item lh-default f6 py-0 px-0 mr-2 position-relative" aria-selected="true" value="http" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;USE_HTTPS&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="7dcbac1170bd14abab238ebda22a427a24d5a1b1222827fa46d95cb2b4526eb5"> HTTPS </button> <button name="protocol_selector" type="submit" role="tab" class="UnderlineNav-item lh-default f6 py-0 px-0 mr-2 position-relative" value="gh_cli" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;USE_GH_CLI&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="4436d416cf90ba6eb115570062f8a5c3d3503f4018d8de4f6a45f15ec05e58cb"> GitHub CLI </button></form> </div> </div> <div role="tabpanel"> <div class="input-group"> <input type="text" class="form-control input-monospace input-sm bg-gray-light" data-autoselect value="https://github.com/FirebaseExtended/reactfire.git" aria-label="https://github.com/FirebaseExtended/reactfire.git" readonly> <div class="input-group-button"> <clipboard-copy value="https://github.com/FirebaseExtended/reactfire.git" aria-label="Copy to clipboard" class="btn btn-sm" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;COPY_URL&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="dbd1f737fc1280604acecbdd4e7367888c84d0f3e1960c37a90b6ff17de78deb"><svg class="octicon octicon-clippy" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"></path></svg></clipboard-copy> </div> </div> <p class="mt-2 mb-0 f6 text-gray"> Use Git or checkout with SVN using the web URL. </p> </div> <div role="tabpanel" hidden> <div class="input-group"> <input type="text" class="form-control input-monospace input-sm bg-gray-light" data-autoselect value="gh repo clone FirebaseExtended/reactfire" aria-label="gh repo clone FirebaseExtended/reactfire" readonly> <div class="input-group-button"> <clipboard-copy value="gh repo clone FirebaseExtended/reactfire" aria-label="Copy to clipboard" class="btn btn-sm" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;COPY_URL&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="dbd1f737fc1280604acecbdd4e7367888c84d0f3e1960c37a90b6ff17de78deb"><svg class="octicon octicon-clippy" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"></path></svg></clipboard-copy> </div> </div> <p class="mt-2 mb-0 f6 text-gray"> Work fast with our official CLI. <a href="https://web.archive.org/web/20201001182340/https://cli.github.com/" target="_blank">Learn more</a>. </p> </div> </tab-container> </div> <ul class="list-style-none"> <li data-platforms="windows,mac" class="Box-row Box-row--hover-gray p-0 rounded-0 mt-0 js-remove-unless-platform"> <a class="d-flex flex-items-center text-gray-dark text-bold no-underline p-3" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;OPEN_IN_DESKTOP&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2e13b2ef3bbaff8465af99c56423f314ef0e488373624d221fe2cd50829f1e16" data-action="click:get-repo#showDownloadMessage" href="https://web.archive.org/web/20201001182340/https://desktop.github.com/"> <svg class="octicon octicon-desktop-download mr-3" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.75 5V.75a.75.75 0 00-1.5 0V5H5.104a.25.25 0 00-.177.427l2.896 2.896a.25.25 0 00.354 0l2.896-2.896A.25.25 0 0010.896 5H8.75zM1.5 2.75a.25.25 0 01.25-.25h3a.75.75 0 000-1.5h-3A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1h-3a.75.75 0 000 1.5h3a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"></path></svg> Open with GitHub Desktop </a> </li> <li class="Box-row Box-row--hover-gray p-0"> <a class="d-flex flex-items-center text-gray-dark text-bold no-underline p-3" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;clone_or_download.click&quot;,&quot;payload&quot;:{&quot;feature_clicked&quot;:&quot;DOWNLOAD_ZIP&quot;,&quot;git_repository_type&quot;:&quot;REPOSITORY&quot;,&quot;repository_id&quot;:19245530,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="ef223f34ec87f658a028e4d50660306d36b34d2d2b8b7b14ca5c65c1e75fbfd6" data-ga-click="Repository, download zip, location:repo overview" data-open-app="link" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/archive/master.zip"> <svg class="octicon octicon-file-zip mr-3" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.5 1.75a.25.25 0 01.25-.25h3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h2.086a.25.25 0 01.177.073l2.914 2.914a.25.25 0 01.073.177v8.586a.25.25 0 01-.25.25h-.5a.75.75 0 000 1.5h.5A1.75 1.75 0 0014 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 009.336 0H3.75A1.75 1.75 0 002 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 10.752-1.298.25.25 0 01-.126-.217V1.75zM8.75 3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM6 5.25a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5A.75.75 0 016 5.25zm2 1.5A.75.75 0 018.75 6h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 6.75zm-1.25.75a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM8 9.75A.75.75 0 018.75 9h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 9.75zm-.75.75a1.75 1.75 0 00-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75v-3a1.75 1.75 0 00-1.75-1.75h-.5zM7 12.25a.25.25 0 01.25-.25h.5a.25.25 0 01.25.25v2.25H7v-2.25z"></path></svg> Download ZIP </a> </li> </ul> </div> <div class="p-3" data-targets="get-repo.platforms" data-platform="mac" hidden> <h4 class="lh-condensed mb-3">Launching GitHub Desktop<span class="AnimatedEllipsis"></span></h4> <p class="text-gray">If nothing happens, <a href="https://web.archive.org/web/20201001182340/https://desktop.github.com/">download GitHub Desktop</a> and try again.</p> <button type="button" class="btn-link" data-action="click:get-repo#onDetailsToggle">Go back</button> </div> <div class="p-3" data-targets="get-repo.platforms" data-platform="windows" hidden> <h4 class="lh-condensed mb-3">Launching GitHub Desktop<span class="AnimatedEllipsis"></span></h4> <p class="text-gray">If nothing happens, <a href="https://web.archive.org/web/20201001182340/https://desktop.github.com/">download GitHub Desktop</a> and try again.</p> <button type="button" class="btn-link" data-action="click:get-repo#onDetailsToggle">Go back</button> </div> <div class="p-3" data-targets="get-repo.platforms" data-platform="xcode" hidden> <h4 class="lh-condensed mb-3">Launching Xcode<span class="AnimatedEllipsis"></span></h4> <p class="text-gray">If nothing happens, <a href="https://web.archive.org/web/20201001182340/https://developer.apple.com/xcode/">download Xcode</a> and try again.</p> <button type="button" class="btn-link" data-action="click:get-repo#onDetailsToggle">Go back</button> </div> <div class="p-3" data-targets="get-repo.platforms" data-platform="visual-studio" hidden> <h4 class="lh-condensed mb-3">Launching Visual Studio<span class="AnimatedEllipsis"></span></h4> <p class="text-gray">If nothing happens, <a href="https://web.archive.org/web/20201001182340/https://visualstudio.github.com/">download the GitHub extension for Visual Studio</a> and try again.</p> <button type="button" class="btn-link" data-action="click:get-repo#onDetailsToggle">Go back</button> </div> </div> </div> </details> </get-repo> </span> </div> <div class="Box mb-3"> <div class="Box-header Box-header--blue position-relative"> <h2 class="sr-only">Latest commit</h2> <div class="js-details-container Details d-flex rounded-top-1 flex-items-center flex-wrap" data-issue-and-pr-hovercards-enabled> <div class="flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1 hx_avatar_stack_commit"> <div class="AvatarStack flex-self-start "> <div class="AvatarStack-body" aria-label="samtstern"> <a class="avatar avatar-user" data-skip-pjax="true" data-hovercard-type="user" data-hovercard-url="/users/samtstern/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" style="width:24px;height:24px;" href="/web/20201001182340/https://github.com/samtstern"> <img height="24" width="24" alt="@samtstern" src="https://web.archive.org/web/20201001182340im_/https://avatars2.githubusercontent.com/u/8466666?s=60&amp;u=e73da6a49cfa7250763b8dabab6ab15afb72407b&amp;v=4" class=" avatar-user"/> </a> </div> </div> </div> <div class="flex-1 d-flex flex-items-center ml-3 min-width-0"> <div class="css-truncate css-truncate-overflow text-gray"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits?author=samtstern" class="commit-author user-mention" title="View all commits by samtstern">samtstern</a> <span class="d-none d-sm-inline"> <a data-pjax="true" title="Add disclaimer (#272)" class="link-gray-dark" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">Add disclaimer (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="673604454" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/272" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/272/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/272">#272</a><a data-pjax="true" title="Add disclaimer (#272)" class="link-gray-dark" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">)</a> </span> </div> <span class="hidden-text-expander ml-2 d-inline-block d-inline-block d-lg-none"> <button type="button" class="hx_bg-black-fade-15 text-gray-dark ellipsis-expander js-details-target" aria-expanded="false">&hellip;</button> </span> <div class="d-flex flex-auto flex-justify-end ml-3 flex-items-baseline"> <include-fragment accept="text/fragment+html" src="/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b/rollup?direction=e" class="d-inline"></include-fragment> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b" class="f6 link-gray text-mono ml-2 d-none d-lg-inline" data-pjax>1a065b4</a> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b" class="link-gray ml-2" data-pjax> <relative-time datetime="2020-09-30T19:14:06Z" class="no-wrap">Oct 1, 2020</relative-time> </a> </div> </div> <div class="pl-0 pl-md-5 flex-order-1 width-full Details-content--hidden"> <div class="mt-2"> <a data-pjax="true" class="link-gray-dark text-bold" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">Add disclaimer (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="673604454" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/272" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/272/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/272">#272</a><a data-pjax="true" class="link-gray-dark text-bold" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">)</a> </div> <div class="d-flex flex-items-center"> <span class="text-gray-dark text-mono d-lg-none hx_bg-black-fade-15 px-1 rounded-1 text-small mt-2">1a065b4</span> </div> </div> <div class="flex-shrink-0"> <h2 class="sr-only">Git stats</h2> <ul class="list-style-none d-flex"> <li class="ml-0 ml-md-3"> <a data-pjax href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits/master" class="pl-3 pr-3 py-3 p-md-0 mt-n3 mb-n3 mr-n3 m-md-0 link-gray-dark no-underline no-wrap"> <svg text="gray" height="16" class="octicon octicon-history text-gray" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path></svg> <span class="d-none d-sm-inline"> <strong>433</strong> <span aria-label="Commits on master" class="text-gray d-none d-lg-inline">commits</span> </span> </a> </li> </ul> </div> </div> </div> <h2 id="files" class="sr-only">Files</h2> <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/1a065b4a4790260f666e644bc416b63547ae0d8b">Permalink</a> <div class="include-fragment-error flash flash-error flash-full py-2"> <svg height="16" class="octicon octicon-alert" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg> Failed to load latest commit information. </div> <div class="js-details-container Details"> <div role="grid" aria-labelledby="files" class="Details-content--hidden-not-important js-navigation-container js-active-navigation-container d-md-block" data-pjax> <div class="sr-only" role="row"> <div role="columnheader">Type</div> <div role="columnheader">Name</div> <div role="columnheader" class="d-none d-md-block">Latest commit message</div> <div role="columnheader">Commit time</div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="blue-3" aria-label="Directory" height="16" class="octicon octicon-file-directory color-blue-3" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".github" id="01777e4a9846fea5f3fcc8fe40d44680-f97f2dd5b23ff9b41be6061090253e35ccc2517f" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/master/.github">.github</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="correct contributing file (#198)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/fb1c51691bf188ac4894f6bbce1b1d7c84e60211">correct contributing file (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="550507473" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/198" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/198/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/198">#198</a><a data-pjax="true" title="correct contributing file (#198)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/fb1c51691bf188ac4894f6bbce1b1d7c84e60211">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-01-16T00:39:53Z" class="no-wrap">Jan 16, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="blue-3" aria-label="Directory" height="16" class="octicon octicon-file-directory color-blue-3" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="docs" id="e3e2a9bfd88566b05001b02a3f51d286-08905e301ff0c7f43c5a94b8660a300ba9772de2" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/master/docs">docs</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Quickstart: Add SuspenseWithPerf import (#244) * Update import step to add SuspenseWithPerf * Added review comment: Use function component term * Corrected import terminology" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/2b6f8e882bdaae3541a351e984db784a668c9a65">Quickstart: Add SuspenseWithPerf import (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="592622471" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/244" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/244/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/244">#244</a><a data-pjax="true" title="Quickstart: Add SuspenseWithPerf import (#244) * Update import step to add SuspenseWithPerf * Added review comment: Use function component term * Corrected import terminology" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/2b6f8e882bdaae3541a351e984db784a668c9a65">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-04-02T18:21:29Z" class="no-wrap">Apr 2, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="blue-3" aria-label="Directory" height="16" class="octicon octicon-file-directory color-blue-3" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="reactfire" id="6122352dcf58188d9da7f78056b3c9af-091f4e77448c0e9758ef748430f1ac75233f38c6" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/master/reactfire">reactfire</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Merge pull request #254 from FirebaseExtended/de-register-version Add version number as an export" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/21b6702f36ac6e06a29e74585278d0e3a10d36cc">Merge pull request</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="612175554" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/254" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/254/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/254">#254</a> <a data-pjax="true" title="Merge pull request #254 from FirebaseExtended/de-register-version Add version number as an export" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/21b6702f36ac6e06a29e74585278d0e3a10d36cc">from FirebaseExtended/de-register-version</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-05-20T21:54:32Z" class="no-wrap">May 20, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="blue-3" aria-label="Directory" height="16" class="octicon octicon-file-directory color-blue-3" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="sample" id="5e8ff9bf55ba3508199d22e984129be6-20403b0bc2aff5274ecc879153151fd0d3570da0" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/master/sample">sample</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Update preload methods in sample" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/b55017d55f22669ef392303302df7031eb83f001">Update preload methods in sample</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-05-04T18:34:54Z" class="no-wrap">May 4, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".all-contributorsrc" id="c47fb5a6d4fde805d2706fc934e8d354-b89f2cf215eae4cb07f9b2953304112809f5c8fb" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.all-contributorsrc">.all-contributorsrc</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="docs: add jhuleatt as a contributor (#242) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: Jeff <jhuleatt@gmail.com>" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/b82b58a8146eb044321244005f9d0eeeaf2be9e1">docs: add jhuleatt as a contributor (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="591341393" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/242" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/242/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/242">#242</a><a data-pjax="true" title="docs: add jhuleatt as a contributor (#242) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: Jeff <jhuleatt@gmail.com>" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/b82b58a8146eb044321244005f9d0eeeaf2be9e1">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-04-17T17:17:10Z" class="no-wrap">Apr 17, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".dockerignore" id="f7c5b4068637e2def526f9bbc7200c4e-f5ed71615634d139dae614e572dbff0f3a03abc6" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.dockerignore">.dockerignore</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Don't build twice on CI and don't ignore the jest setup file" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/80b9431ceb7e584f70a52940085f24a5a5b667bd">Don't build twice on CI and don't ignore the jest setup file</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-03-11T21:59:35Z" class="no-wrap">Mar 11, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".gitignore" id="a084b794bc0759e7a6b77810e01874f2-b93f28f680e6098c58ad6a3a1167fa3e189a5e49" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.gitignore">.gitignore</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Refactor on the core observable engine (#210) Refactoring `useObservable` and `preloadObservable` to be more suspense friendly. The core idea here is that our &quot;observable&quot; should expose a promise that resolves on first emission (which can be thrown for suspense), a synchronous means of getting the latest value (to pass into `useState`), and a shared subscription for use thereafter (for `useEffect`). As a matter of optimization they will keep their cache around for only a present amount of time (30 seconds by default) unless they are subscribed to (`useEffect`); in which case the cache will remain until the component is unloaded. This should be enough time to prevent suspense from thrashing. To encapsulate this behavior this we've implemented our own `Subject`. Other changes in this PR: * Ensure that the observable cache has to be keyed very specifically taking into account the firebase app, options, etc. * Make sure no cache keys overlap on tests &amp; different exports * We're using more typescript in the tests, build them as part of the main build step since jest wasn't playing nice * There's still some meh types kicking around here, should take as an AI * Errors are thrown again until the cache timeout elapses, put down a TODO for now * `FirebaseAppProvider` now throws if the provided config does not match the existing instance options, rather than simply returning the default * `FirebaseAppProvider` now takes an `appName` property allowing you to have more than one app" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/121f5e15f97dd1b66495e1487e8a097f92aeb8a3">Refactor on the core observable engine (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="561496743" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/210" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/210/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/210">#210</a><a data-pjax="true" title="Refactor on the core observable engine (#210) Refactoring `useObservable` and `preloadObservable` to be more suspense friendly. The core idea here is that our &quot;observable&quot; should expose a promise that resolves on first emission (which can be thrown for suspense), a synchronous means of getting the latest value (to pass into `useState`), and a shared subscription for use thereafter (for `useEffect`). As a matter of optimization they will keep their cache around for only a present amount of time (30 seconds by default) unless they are subscribed to (`useEffect`); in which case the cache will remain until the component is unloaded. This should be enough time to prevent suspense from thrashing. To encapsulate this behavior this we've implemented our own `Subject`. Other changes in this PR: * Ensure that the observable cache has to be keyed very specifically taking into account the firebase app, options, etc. * Make sure no cache keys overlap on tests &amp; different exports * We're using more typescript in the tests, build them as part of the main build step since jest wasn't playing nice * There's still some meh types kicking around here, should take as an AI * Errors are thrown again until the cache timeout elapses, put down a TODO for now * `FirebaseAppProvider` now throws if the provided config does not match the existing instance options, rather than simply returning the default * `FirebaseAppProvider` now takes an `appName` property allowing you to have more than one app" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/121f5e15f97dd1b66495e1487e8a097f92aeb8a3">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-02-12T20:59:03Z" class="no-wrap">Feb 12, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".nvmrc" id="ae9eba3500703eaba1d5b8e13832d955-e72d9a243b5ac5d6783ee3f4a65fe16fb388ccea" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.nvmrc">.nvmrc</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Get everything working" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/473760cdef6a1bb7c5ed8b36a5ec5a07b90a693b">Get everything working</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2019-10-10T02:46:39Z" class="no-wrap">Oct 10, 2019</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".prettierrc" id="f2e285fb35cc9694564cb6d2af099ad2-78b95bfbaf1be9517cf3b73f9d10a97e22fb1766" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.prettierrc">.prettierrc</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="New preload API &amp; larger column width (#219)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/8a54d42d9e07cc767edf24b9189e570a1eeaeb47">New preload API &amp; larger column width (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="570940257" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/219" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/219/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/219">#219</a><a data-pjax="true" title="New preload API &amp; larger column width (#219)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/8a54d42d9e07cc767edf24b9189e570a1eeaeb47">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-02-26T07:19:56Z" class="no-wrap">Feb 26, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title=".travis.yml" id="354f30a63fb0907d4ad57269548329e3-aa5e22c2f4514b44953c1bdfaf41b504e1cb4abd" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/.travis.yml">.travis.yml</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Don't build twice on CI and don't ignore the jest setup file" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/80b9431ceb7e584f70a52940085f24a5a5b667bd">Don't build twice on CI and don't ignore the jest setup file</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-03-11T21:59:35Z" class="no-wrap">Mar 11, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="Dockerfile" id="3254677a7917c6c01f55212f86c57fbf-20e5c7d2961d49d416d078b706aae5d2ce662a5a" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/Dockerfile">Dockerfile</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Don't build twice on CI and don't ignore the jest setup file" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/80b9431ceb7e584f70a52940085f24a5a5b667bd">Don't build twice on CI and don't ignore the jest setup file</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-03-11T21:59:35Z" class="no-wrap">Mar 11, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="LICENSE" id="9879d6db96fd29134fc802214163b95a-e2d638cbb8e464dc54ebf6b4c58d2bd3acc0977a" itemprop="license" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/LICENSE">LICENSE</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Updated license to 2016" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/df2e9998efa8e3fc0291c2387c8266ab61a3f409">Updated license to 2016</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2016-03-10T19:58:09Z" class="no-wrap">Mar 10, 2016</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="README.md" id="04c6e90faac2675aa89e2176d2eec7d8-f78c5a122eccf5c3599b67ed38ab2ebf760f9cdd" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/README.md">README.md</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Add disclaimer (#272)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">Add disclaimer (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="673604454" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/272" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/272/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/272">#272</a><a data-pjax="true" title="Add disclaimer (#272)" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/1a065b4a4790260f666e644bc416b63547ae0d8b">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-09-30T19:14:06Z" class="no-wrap">Sep 30, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="cloudbuild.yaml" id="e5fc65747fb9417968a3295dc1ac5111-4d41b8258bfbfb791d870ca5355c6d949a5aea68" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/cloudbuild.yaml">cloudbuild.yaml</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Bump the timeout on Cloud Build" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/64d26c04adf5427637f32323a4b52f7033532f02">Bump the timeout on Cloud Build</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-02-13T00:20:54Z" class="no-wrap">Feb 13, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="package.json" id="b9cfc7f2cdf78a7f4b91a753d10865a2-954654058387ba25e40edae64fc2de7ec04c2713" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/package.json">package.json</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="implement all-contributors spec (#240) https://allcontributors.org/docs/en/overview" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/d4d44764717e4f97f9285c08ea8788dc580a9c90">implement all-contributors spec (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="591300500" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/240" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/240/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/240">#240</a><a data-pjax="true" title="implement all-contributors spec (#240) https://allcontributors.org/docs/en/overview" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/d4d44764717e4f97f9285c08ea8788dc580a9c90">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-03-31T17:53:48Z" class="no-wrap">Mar 31, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="publish.sh" id="157a0216d5bc6a0d61437c119091c8c5-9865046790defcfffc84869f2d419250cbbbae1f" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/publish.sh">publish.sh</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Now that we're GA don't publish RCs on latest" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/5487096955aa411fb2cac6b17513d09143aadb90">Now that we're GA don't publish RCs on latest</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-02-27T00:15:40Z" class="no-wrap">Feb 27, 2020</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="test.sh" id="1b531c5e405e0bc95890d52cf2f2f5b5-13ddefafc1ec6c3e6b02a8c8c38d445cd41ac102" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/test.sh">test.sh</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="Merge with firebaseprivate (#150) * add a Firestore emulator test * more work on Firestore emulator tests * automatically start and stop emulator * move testing libs to devdependencies * fix scripts * fix SuspenseWithPerf bug * Cloud Build POC * Fix * fix gitignore to exclude pub dir * update rxfire and make tests exit * uncomment publish stuff * fix build (not publishing) * add missing build step" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/43a972407fc00e322e8c29c17ba2d99892f49a22">Merge with firebaseprivate (</a><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="504774266" data-permission-text="Title is private" data-url="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/FirebaseExtended/reactfire/pull/150/hovercard" href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/pull/150">#150</a><a data-pjax="true" title="Merge with firebaseprivate (#150) * add a Firestore emulator test * more work on Firestore emulator tests * automatically start and stop emulator * move testing libs to devdependencies * fix scripts * fix SuspenseWithPerf bug * Cloud Build POC * Fix * fix gitignore to exclude pub dir * update rxfire and make tests exit * uncomment publish stuff * fix build (not publishing) * add missing build step" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/43a972407fc00e322e8c29c17ba2d99892f49a22">)</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2019-10-11T18:55:12Z" class="no-wrap">Oct 11, 2019</time-ago> </div> </div> <div role="row" class="Box-row Box-row--focus-gray py-2 d-flex position-relative js-navigation-item "> <div role="gridcell" class="mr-3 flex-shrink-0" style="width: 16px;"> <svg color="gray-light" aria-label="File" height="16" class="octicon octicon-file text-gray-light" viewbox="0 0 16 16" version="1.1" width="16" role="img"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg> </div> <div role="rowheader" class="flex-auto min-width-0 col-md-2 mr-3"> <span class="css-truncate css-truncate-target d-block width-fit"><a class="js-navigation-open link-gray-dark" title="yarn.lock" id="8ee2343978836a779dc9f8d6b794c3b2-ecf045e3eeaf52c580186445dd32052be84c5ae5" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/yarn.lock">yarn.lock</a></span> </div> <div role="gridcell" class="flex-auto min-width-0 d-none d-md-block col-5 mr-3 commit-message"> <span class="css-truncate css-truncate-target d-block width-fit"> <a data-pjax="true" title="update yarn lockfile" class="link-gray" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commit/7527c0d7bbae48d80574eec298eb5d7fbb2d4ee8">update yarn lockfile</a> </span> </div> <div role="gridcell" class="text-gray-light text-right" style="width:100px;"> <time-ago datetime="2020-05-19T23:33:22Z" class="no-wrap">May 19, 2020</time-ago> </div> </div> </div> <div class="Details-content--shown Box-footer d-md-none p-0"> <button type="button" class="d-block btn-link js-details-target width-full px-3 py-2" aria-expanded="false"> View code </button> </div> </div> </div> <div id="readme" class="Box md js-code-block-container Box--responsive"> <div class="Box-header d-flex flex-items-center flex-justify-between bg-white border-bottom-0"> <h2 class="Box-title pr-3"> README.md </h2> </div> <div class="Popover anim-scale-in js-tagsearch-popover" hidden data-tagsearch-url="/FirebaseExtended/reactfire/find-definition" data-tagsearch-ref="master" data-tagsearch-path="README.md" data-tagsearch-lang="Markdown" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.click_on_symbol&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;click_on_symbol&quot;,&quot;repository_id&quot;:19245530,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;Markdown&quot;,&quot;originating_url&quot;:&quot;https://github.com/FirebaseExtended/reactfire&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="7443016d9418c7c86c25025b1cc12da5b02016e5c4d23fbe1ae4df508aba3c91"> <div class="Popover-message Popover-message--large Popover-message--top-left TagsearchPopover mt-1 mb-4 mx-auto Box box-shadow-large"> <div class="TagsearchPopover-content js-tagsearch-popover-content overflow-auto" style="will-change:transform;"> </div> </div> </div> <div class="Box-body px-5 pb-5"> <article class="markdown-body entry-content container-lg" itemprop="text"><h1><a id="user-content-reactfire" class="anchor" aria-hidden="true" href="#reactfire"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>ReactFire</h1> <p><a href="#contributors-"><img src="https://web.archive.org/web/20201001182340im_/https://camo.githubusercontent.com/5accfd193468f1ae11f72c104809e8e3125646e2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f616c6c5f636f6e7472696275746f72732d312d6f72616e67652e7376673f7374796c653d666c61742d737175617265" alt="All Contributors" data-canonical-src="https://web.archive.org/web/20201001182340/https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square" style="max-width:100%;"></a></p> <p>Hooks, Context Providers, and Components that make it easy to interact with Firebase.</p> <p><g-emoji class="g-emoji" alias="warning" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/26a0.png">⚠️</g-emoji> <strong>Status: Experimental</strong>. The API is intended to be stable, but ReactFire is meant for React Concurrent Mode, which is only available in <a href="https://web.archive.org/web/20201001182340/https://reactjs.org/docs/concurrent-mode-adoption.html#installation" rel="nofollow">experimental React builds</a>.</p> <h2><a id="user-content-what-is-reactfire" class="anchor" aria-hidden="true" href="#what-is-reactfire"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>What is ReactFire?</h2> <ul> <li><strong>Easy realtime updates for your function components</strong> - Hooks like <code>useUser</code>and <code>useFirestoreCollection</code> let you easily subscribe to auth state, realtime data, and all other Firebase SDK events. Plus, they automatically unsubscribe when your component unmounts.</li> <li><strong>Loading states handled by <code>&lt;Suspense&gt;</code></strong> - ReactFire's hooks throw promises that Suspense can catch. No more <code>isLoaded ?...</code> - let React <a href="https://web.archive.org/web/20201001182340/https://reactjs.org/docs/concurrent-mode-suspense.html" rel="nofollow">handle it for you</a>.</li> <li><strong>Faster initial page load times</strong> - Load only the code you need, when you need it, with <code>useFirestore</code>, <code>useAuth</code>, <code>useRemoteConfig</code>, and more.</li> <li><strong>Convenient components for common use cases</strong> - Only want to render a component if a user is signed in? Wrap it in <code>&lt;AuthCheck /&gt;</code>. Need to automatically instrument your <code>Suspense</code> load times with <a href="https://web.archive.org/web/20201001182340/https://firebase.google.com/docs/perf-mon" rel="nofollow">RUM</a>? Use <code>&lt;SuspenseWithPerf /&gt;</code>.</li> </ul> <h2><a id="user-content-install" class="anchor" aria-hidden="true" href="#install"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>Install</h2> <div class="highlight highlight-source-shell"><pre><span class="pl-c"><span class="pl-c">#</span> npm</span> npm install --save reactfire firebase <span class="pl-c"><span class="pl-c">#</span> or</span> <span class="pl-c"><span class="pl-c">#</span> yarn</span> yarn add reactfire firebase</pre></div> <p>Depending on your targeted platforms you may need to install polyfills. The most commonly needed will be <a href="https://web.archive.org/web/20201001182340/https://caniuse.com/#search=globalThis" rel="nofollow">globalThis</a> and <a href="https://web.archive.org/web/20201001182340/https://caniuse.com/#search=Proxy" rel="nofollow">Proxy</a>.</p> <h2><a id="user-content-docs" class="anchor" aria-hidden="true" href="#docs"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>Docs</h2> <ul> <li><a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/docs/quickstart.md"><strong>Quickstart</strong></a></li> <li><a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/docs/use.md"><strong>Common Use Cases</strong></a></li> <li><a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/docs/reference.md"><strong>API Reference</strong></a></li> </ul> <h2><a id="user-content-example-use" class="anchor" aria-hidden="true" href="#example-use"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>Example use</h2> <p>Check out the <a href="https://web.archive.org/web/20201001182340/https://stackblitz.com/fork/reactfire-sample" rel="nofollow">live version on StackBlitz</a>!</p> <div class="highlight highlight-source-js-jsx"><pre><span class="pl-k">import</span> <span class="pl-smi">React</span>, { <span class="pl-smi">Component</span> } <span class="pl-k">from</span> <span class="pl-s"><span class="pl-pds">'</span>react<span class="pl-pds">'</span></span>; <span class="pl-k">import</span> { <span class="pl-smi">createRoot</span> } <span class="pl-k">from</span> <span class="pl-s"><span class="pl-pds">'</span>react-dom<span class="pl-pds">'</span></span>; <span class="pl-k">import</span> { <span class="pl-smi">FirebaseAppProvider</span>, <span class="pl-smi">useFirestoreDocData</span>, <span class="pl-smi">useFirestore</span>, <span class="pl-smi">SuspenseWithPerf</span> } <span class="pl-k">from</span> <span class="pl-s"><span class="pl-pds">'</span>reactfire<span class="pl-pds">'</span></span>; <span class="pl-k">const</span> <span class="pl-smi">firebaseConfig</span> <span class="pl-k">=</span> { <span class="pl-c"><span class="pl-c">/*</span> Add your config from the Firebase Console <span class="pl-c">*/</span></span> }; <span class="pl-k">function</span> <span class="pl-en">Burrito</span>() { <span class="pl-c"><span class="pl-c">//</span> lazy load the Firestore SDK</span> <span class="pl-c"><span class="pl-c">//</span> and create a ref</span> <span class="pl-k">const</span> <span class="pl-smi">burritoRef</span> <span class="pl-k">=</span> <span class="pl-en">useFirestore</span>() <span class="pl-k">.</span><span class="pl-en">collection</span>(<span class="pl-s"><span class="pl-pds">'</span>tryreactfire<span class="pl-pds">'</span></span>) <span class="pl-k">.</span><span class="pl-en">doc</span>(<span class="pl-s"><span class="pl-pds">'</span>burrito<span class="pl-pds">'</span></span>); <span class="pl-c"><span class="pl-c">//</span> subscribe to the doc. just one line!</span> <span class="pl-c"><span class="pl-c">//</span> throws a Promise for Suspense to catch,</span> <span class="pl-c"><span class="pl-c">//</span> and then streams live updates</span> <span class="pl-k">const</span> <span class="pl-smi">burrito</span> <span class="pl-k">=</span> <span class="pl-en">useFirestoreDocData</span>(<span class="pl-smi">burritoRef</span>); <span class="pl-k">return</span> &lt;<span class="pl-ent">p</span>&gt;The burrito is <span class="pl-pse">{</span><span class="pl-smi"><span class="pl-smi">burrito</span></span><span class="pl-k">.</span><span class="pl-smi">yummy</span> <span class="pl-k">?</span> <span class="pl-s"><span class="pl-pds">'</span>good<span class="pl-pds">'</span></span> <span class="pl-k">:</span> <span class="pl-s"><span class="pl-pds">'</span>bad<span class="pl-pds">'</span></span><span class="pl-pse">}</span>!&lt;/<span class="pl-ent">p</span>&gt;; } <span class="pl-k">function</span> <span class="pl-en">App</span>() { <span class="pl-k">return</span> ( &lt;<span class="pl-ent">FirebaseAppProvider</span> <span class="pl-e">firebaseConfig</span><span class="pl-k">=</span><span class="pl-pse">{</span><span class="pl-smi">firebaseConfig</span><span class="pl-pse">}</span>&gt; &lt;<span class="pl-ent">h1</span>&gt;🌯&lt;/<span class="pl-ent">h1</span>&gt; &lt;<span class="pl-ent">SuspenseWithPerf</span> <span class="pl-e">fallback</span><span class="pl-k">=</span><span class="pl-pse">{</span>&lt;<span class="pl-ent">p</span>&gt;loading burrito status...&lt;/<span class="pl-ent">p</span>&gt;<span class="pl-pse">}</span> <span class="pl-e">traceId</span><span class="pl-k">=</span><span class="pl-pse">{</span><span class="pl-s"><span class="pl-pds">'</span>load-burrito-status<span class="pl-pds">'</span></span><span class="pl-pse">}</span>&gt; &lt;<span class="pl-ent">Burrito</span> /&gt; &lt;/<span class="pl-ent">SuspenseWithPerf</span>&gt; &lt;/<span class="pl-ent">FirebaseAppProvider</span>&gt; ); } <span class="pl-c"><span class="pl-c">//</span> Enable Concurrent Mode</span> <span class="pl-c"><span class="pl-c">//</span> https://reactjs.org/docs/concurrent-mode-adoption.html#enabling-concurrent-mode</span> <span class="pl-en">createRoot</span>(<span class="pl-c1">document</span><span class="pl-k">.</span><span class="pl-en">getElementById</span>(<span class="pl-s"><span class="pl-pds">'</span>root<span class="pl-pds">'</span></span>))<span class="pl-k">.</span><span class="pl-en">render</span>(&lt;<span class="pl-ent">App</span> /&gt;);</pre></div> <hr> <blockquote> <p>If you're looking for docs for the <em>deprecated</em> ReactFire v1 (the one that uses mixins), click <a href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/tree/v1.0.0">here</a></p> </blockquote> <h2><a id="user-content-status" class="anchor" aria-hidden="true" href="#status"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>Status</h2> <p><a target="_blank" rel="noopener noreferrer" href="https://web.archive.org/web/20201001182340/https://camo.githubusercontent.com/1ecf4b0d5ea01ac862c8bfb951aa880ecf824cb3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374617475732d4578706572696d656e74616c2d626c7565"><img src="https://web.archive.org/web/20201001182340im_/https://camo.githubusercontent.com/1ecf4b0d5ea01ac862c8bfb951aa880ecf824cb3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374617475732d4578706572696d656e74616c2d626c7565" alt="Status: Experimental" data-canonical-src="https://web.archive.org/web/20201001182340/https://img.shields.io/badge/Status-Experimental-blue" style="max-width:100%;"></a></p> <p>This repository is maintained by Googlers but is not a supported Firebase product. Issues here are answered by maintainers and other community members on GitHub on a best-effort basis.</p> <h2><a id="user-content-contributors-" class="anchor" aria-hidden="true" href="#contributors-"><svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>Contributors <g-emoji class="g-emoji" alias="sparkles" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/2728.png">✨</g-emoji></h2> <p>Thanks goes to these wonderful people (<a href="https://web.archive.org/web/20201001182340/https://allcontributors.org/docs/en/emoji-key" rel="nofollow">emoji key</a>):</p> <table> <tbody><tr> <td align="center"><a href="https://web.archive.org/web/20201001182340/http://www.dfweb.no/" rel="nofollow"><img src="https://web.archive.org/web/20201001182340im_/https://avatars1.githubusercontent.com/u/45217974?v=4" width="100px;" alt="" style="max-width:100%;"><br><sub><b>w3bdesign</b></sub></a><br><a href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits?author=w3bdesign" title="Code"><g-emoji class="g-emoji" alias="computer" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png">💻</g-emoji></a></td> <td align="center"><a href="https://web.archive.org/web/20201001182340/http://prue.io/" rel="nofollow"><img src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/2992224?v=4" width="100px;" alt="" style="max-width:100%;"><br><sub><b>Scott Prue</b></sub></a><br><a href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits?author=prescottprue" title="Code"><g-emoji class="g-emoji" alias="computer" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png">💻</g-emoji></a></td> <td align="center"><a href="https://web.archive.org/web/20201001182340/http://git.io/jhuleatt" rel="nofollow"><img src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/3759507?v=4" width="100px;" alt="" style="max-width:100%;"><br><sub><b>Jeff</b></sub></a><br><a href="https://web.archive.org/web/20201001182340/https://github.com/FirebaseExtended/reactfire/commits?author=jhuleatt" title="Code"><g-emoji class="g-emoji" alias="computer" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png">💻</g-emoji></a></td> </tr> </tbody></table> <p>This project follows the <a href="https://web.archive.org/web/20201001182340/https://github.com/all-contributors/all-contributors">all-contributors</a> specification. Contributions of any kind welcome!</p> </article> </div> </div> </div> <div class="flex-shrink-0 col-12 col-md-3"> <div class="BorderGrid BorderGrid--spacious" data-pjax> <div class="BorderGrid-row hide-sm hide-md"> <div class="BorderGrid-cell"> <h2 class="mb-3 h4">About</h2> <p class="f4 mt-3"> Hooks, Context Providers, and Components that make it easy to interact with Firebase. </p> <div class="mt-3 d-flex flex-items-center"> <svg mr="2" classes="flex-shrink-0" height="16" class="octicon octicon-link flex-shrink-0 mr-2" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://firebaseopensource.com/projects/firebaseextended/reactfire/" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="https://web.archive.org/web/20201001182340/https://firebaseopensource.com/projects/firebaseextended/reactfire/">firebaseopensource.com/projects/firebaseextended/reactfire/</a> </span> </div> <h3 class="sr-only">Topics</h3> <div class="mt-3"> <div class="f6"> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:firebase" href="/web/20201001182340/https://github.com/topics/firebase" title="Topic: firebase" class="topic-tag topic-tag-link "> firebase </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:react" href="/web/20201001182340/https://github.com/topics/react" title="Topic: react" class="topic-tag topic-tag-link "> react </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:react-hooks" href="/web/20201001182340/https://github.com/topics/react-hooks" title="Topic: react-hooks" class="topic-tag topic-tag-link "> react-hooks </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:react-suspense" href="/web/20201001182340/https://github.com/topics/react-suspense" title="Topic: react-suspense" class="topic-tag topic-tag-link "> react-suspense </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:realtime-database" href="/web/20201001182340/https://github.com/topics/realtime-database" title="Topic: realtime-database" class="topic-tag topic-tag-link "> realtime-database </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:firestore" href="/web/20201001182340/https://github.com/topics/firestore" title="Topic: firestore" class="topic-tag topic-tag-link "> firestore </a> <a data-ga-click="Topic, repository page" data-octo-click="topic_click" data-octo-dimensions="topic:firebase-js-sdk" href="/web/20201001182340/https://github.com/topics/firebase-js-sdk" title="Topic: firebase-js-sdk" class="topic-tag topic-tag-link "> firebase-js-sdk </a> </div> </div> <h3 class="sr-only">Resources</h3> <div class="mt-3"> <a class="muted-link" href="#readme"> <svg mr="2" height="16" class="octicon octicon-book mr-2" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"></path></svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-3"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/blob/master/LICENSE" class="muted-link"> <svg mr="2" height="16" class="octicon octicon-law mr-2" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.75.75a.75.75 0 00-1.5 0V2h-.984c-.305 0-.604.08-.869.23l-1.288.737A.25.25 0 013.984 3H1.75a.75.75 0 000 1.5h.428L.066 9.192a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.514 3.514 0 00.686.45A4.492 4.492 0 003 11c.88 0 1.556-.22 2.023-.454a3.515 3.515 0 00.686-.45l.045-.04.016-.015.006-.006.002-.002.001-.002L5.25 9.5l.53.53a.75.75 0 00.154-.838L3.822 4.5h.162c.305 0 .604-.08.869-.23l1.289-.737a.25.25 0 01.124-.033h.984V13h-2.5a.75.75 0 000 1.5h6.5a.75.75 0 000-1.5h-2.5V3.5h.984a.25.25 0 01.124.033l1.29.736c.264.152.563.231.868.231h.162l-2.112 4.692a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.517 3.517 0 00.686.45A4.492 4.492 0 0013 11c.88 0 1.556-.22 2.023-.454a3.512 3.512 0 00.686-.45l.045-.04.01-.01.006-.005.006-.006.002-.002.001-.002-.529-.531.53.53a.75.75 0 00.154-.838L13.823 4.5h.427a.75.75 0 000-1.5h-2.234a.25.25 0 01-.124-.033l-1.29-.736A1.75 1.75 0 009.735 2H8.75V.75zM1.695 9.227c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327l-1.305 2.9zm10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327l-1.305 2.9z"></path></svg> MIT License </a> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/releases" class="link-gray-dark no-underline "> Releases <span title="26" class="Counter ">26</span> </a></h2> <a class="link-gray-dark d-flex no-underline" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/releases/tag/v2.0.4"> <svg mt="1" classes="flex-shrink-0" color="green" height="16" class="octicon octicon-tag flex-shrink-0 mt-1 text-green" viewbox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"></path></svg> <div class="ml-2 min-width-0"> <div class="d-flex"> <span class="css-truncate css-truncate-target text-bold mr-2" style="max-width: none;">v2.0.4</span> <span title="Label: Latest" class="Label Label--green flex-shrink-0"> Latest </span> </div> <div class="text-small text-gray"><relative-time datetime="2020-09-30T19:12:27Z" class="no-wrap">Sep 30, 2020</relative-time></div> </div> </a> <div class="mt-3"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/releases" class="text-small"> + 25 releases </a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/web/20201001182340/https://github.com/orgs/FirebaseExtended/packages?repo_name=reactfire" class="link-gray-dark no-underline "> Packages <span title="0" hidden="hidden" class="Counter ">0</span> </a></h2> <div class="text-small"> No packages published <br> </div> </div> </div> <div class="BorderGrid-row" hidden> <div class="BorderGrid-cell"> <include-fragment src="/FirebaseExtended/reactfire/used_by_list" accept="text/fragment+html"> </include-fragment> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/graphs/contributors" class="link-gray-dark no-underline "> Contributors <span title="37" class="Counter ">37</span> </a></h2> <ul class="list-style-none d-flex flex-wrap mb-n2"> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/jhuleatt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/jhuleatt"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars3.githubusercontent.com/u/3759507?s=64&amp;v=4" width="32" height="32" alt="@jhuleatt"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/jamesdaniels/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/jamesdaniels"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars1.githubusercontent.com/u/44975?s=64&amp;v=4" width="32" height="32" alt="@jamesdaniels"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/davideast/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/davideast"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars3.githubusercontent.com/u/4570265?s=64&amp;v=4" width="32" height="32" alt="@davideast"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/firebase-ops/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/firebase-ops"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/3211871?s=64&amp;v=4" width="32" height="32" alt="@firebase-ops"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/nicolasgarnier/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/nicolasgarnier"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/3766663?s=64&amp;v=4" width="32" height="32" alt="@nicolasgarnier"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/mimming/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/mimming"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/271974?s=64&amp;v=4" width="32" height="32" alt="@mimming"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/puf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/puf"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars0.githubusercontent.com/u/913631?s=64&amp;v=4" width="32" height="32" alt="@puf"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/insin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/insin"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars1.githubusercontent.com/u/226692?s=64&amp;v=4" width="32" height="32" alt="@insin"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/jaylandro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/jaylandro"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars2.githubusercontent.com/u/6473103?s=64&amp;v=4" width="32" height="32" alt="@jaylandro"/> </a> </li> <li class="mb-2 mr-2"> <a class="" data-hovercard-type="user" data-hovercard-url="/users/ramyathulasingam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/web/20201001182340/https://github.com/ramyathulasingam"> <img class="d-block avatar-user" src="https://web.archive.org/web/20201001182340im_/https://avatars3.githubusercontent.com/u/2490518?s=64&amp;v=4" width="32" height="32" alt="@ramyathulasingam"/> </a> </li> </ul> <div class="mt-3"> <a href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/graphs/contributors" class="text-small"> + 26 contributors </a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Languages</h2> <div class="mb-2"> <span class="Progress "> <span itemprop="keywords" aria-label="TypeScript 96.2" style="background-color: #2b7489;width: 96.2%;" class="Progress-item "></span> <span itemprop="keywords" aria-label="JavaScript 1.7" style="background-color: #f1e05a;width: 1.7%;" class="Progress-item "></span> <span itemprop="keywords" aria-label="Dockerfile 1.1" style="background-color: #384d54;width: 1.1%;" class="Progress-item "></span> <span itemprop="keywords" aria-label="Shell 1.0" style="background-color: #89e051;width: 1.0%;" class="Progress-item "></span> </span></div> <ul class="list-style-none"> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap link-gray no-underline text-small mr-3" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/search?l=typescript" data-ga-click="Repository, language stats search click, location:repo overview"> <svg class="octicon octicon-dot-fill mr-2" style="color:#2b7489;" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg> <span class="text-gray-dark text-bold mr-1">TypeScript</span> <span>96.2%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap link-gray no-underline text-small mr-3" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/search?l=javascript" data-ga-click="Repository, language stats search click, location:repo overview"> <svg class="octicon octicon-dot-fill mr-2" style="color:#f1e05a;" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg> <span class="text-gray-dark text-bold mr-1">JavaScript</span> <span>1.7%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap link-gray no-underline text-small mr-3" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/search?l=dockerfile" data-ga-click="Repository, language stats search click, location:repo overview"> <svg class="octicon octicon-dot-fill mr-2" style="color:#384d54;" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg> <span class="text-gray-dark text-bold mr-1">Dockerfile</span> <span>1.1%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap link-gray no-underline text-small mr-3" href="/web/20201001182340/https://github.com/FirebaseExtended/reactfire/search?l=shell" data-ga-click="Repository, language stats search click, location:repo overview"> <svg class="octicon octicon-dot-fill mr-2" style="color:#89e051;" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg> <span class="text-gray-dark text-bold mr-1">Shell</span> <span>1.0%</span> </a> </li> </ul> </div> </div> </div> </div></div> </div> </div> </main> </div> </div> <div class="footer container-xl width-full p-responsive" role="contentinfo"> <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light "> <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0"> <li class="mr-3 mr-lg-0">&copy; 2020 GitHub, Inc.</li> <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to terms, text:terms" href="https://web.archive.org/web/20201001182340/https://github.com/site/terms">Terms</a></li> <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://web.archive.org/web/20201001182340/https://github.com/site/privacy">Privacy</a></li> <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://web.archive.org/web/20201001182340/https://github.com/security">Security</a></li> <li class="mr-3 mr-lg-0"><a href="https://web.archive.org/web/20201001182340/https://githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> <li><a data-ga-click="Footer, go to help, text:help" href="https://web.archive.org/web/20201001182340/https://docs.github.com/">Help</a></li> </ul> <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mx-lg-4" href="https://web.archive.org/web/20201001182340/https://github.com/"> <svg height="24" class="octicon octicon-mark-github" viewbox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> </a> <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0"> <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to contact, text:contact" href="https://web.archive.org/web/20201001182340/https://github.com/contact">Contact GitHub</a></li> <li class="mr-3 mr-lg-0"><a href="https://web.archive.org/web/20201001182340/https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li> <li class="mr-3 mr-lg-0"><a href="https://web.archive.org/web/20201001182340/https://docs.github.com/" data-ga-click="Footer, go to api, text:api">API</a></li> <li class="mr-3 mr-lg-0"><a href="https://web.archive.org/web/20201001182340/https://services.github.com/" data-ga-click="Footer, go to training, text:training">Training</a></li> <li class="mr-3 mr-lg-0"><a href="https://web.archive.org/web/20201001182340/https://github.blog/" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> <li><a data-ga-click="Footer, go to about, text:about" href="https://web.archive.org/web/20201001182340/https://github.com/about">About</a></li> </ul> </div> <div class="d-flex flex-justify-center pb-6"> <span class="f6 text-gray-light"></span> </div> </div> <div id="ajax-error-message" class="ajax-error-message flash flash-error"> <svg class="octicon octicon-alert" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg class="octicon octicon-x" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> </button> You can’t perform that action at this time. </div> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" id="js-conditional-compat" data-src="https://github.githubassets.com/assets/compat-bootstrap-6e7ff7ac.js"></script> <script crossorigin="anonymous" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/environment-bootstrap-0b18da31.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/vendor-c04fb4c4.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/frameworks-18ca5a71.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/behaviors-bootstrap-b31e722d.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./contributions-spider-graph.js" data-src="https://github.githubassets.com/assets/contributions-spider-graph-f2149c97.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./drag-drop.js" data-src="https://github.githubassets.com/assets/drag-drop-b4eca50c.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./jump-to.js" data-src="https://github.githubassets.com/assets/jump-to-30d79f18.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./profile-pins-element.js" data-src="https://github.githubassets.com/assets/profile-pins-element-7ae95942.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./randomColor.js" data-src="https://github.githubassets.com/assets/randomColor-7ea70620.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./sortable-behavior.js" data-src="https://github.githubassets.com/assets/sortable-behavior-ca8207ee.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./tweetsodium.js" data-src="https://github.githubassets.com/assets/tweetsodium-87cedcd0.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" data-module-id="./user-status-submit.js" data-src="https://github.githubassets.com/assets/user-status-submit-07ed9df3.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/repositories-bootstrap-c10d023b.js"></script> <script crossorigin="anonymous" async="async" integrity="" type="application/javascript" src="https://web.archive.org/web/20201001182340js_/https://github.githubassets.com/assets/github-bootstrap-a8c657e0.js"></script> <div class="js-stale-session-flash flash flash-warn flash-banner" hidden> <svg class="octicon octicon-alert" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg class="octicon octicon-x" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;"> </div> </div> </body> </html> <!-- FILE ARCHIVED ON 18:23:40 Oct 01, 2020 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 22:15:40 Dec 04, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.856 exclusion.robots: 0.048 exclusion.robots.policy: 0.03 esindex: 0.013 cdx.remote: 28.974 LoadShardBlock: 1624.241 (3) PetaboxLoader3.datanode: 1603.204 (5) PetaboxLoader3.resolve: 3208.239 (2) load_resource: 3263.63 loaddict: 42.013 -->

Pages: 1 2 3 4 5 6 7 8 9 10