René's URL Explorer Experiment


Title: fix: fix memory leak on SSR by ValentinFunk · Pull Request #2243 · angular/angularfire · GitHub

Open Graph Title: fix: fix memory leak on SSR by ValentinFunk · Pull Request #2243 · angular/angularfire

X Title: fix: fix memory leak on SSR by ValentinFunk · Pull Request #2243 · angular/angularfire

Description: Checklist Issue number for this PR: TBD Docs included?: no - API did not change Test units included?: yes In a clean directory, yarn install, yarn test run successfully? Yes + manual testing in larger app (mainly auth/database) Description This is bug fix to fix an issue where running SSR with Angularfire would cause a memory leak, preventing the Application Module from being collected. The leak was caused by a) subscriptions leaking in the implementation of keepUnstableUntilFirst (https://github.com/angular/angularfire/blob/master/src/core/angularfire2.ts#L19, https://github.com/angular/angularfire/blob/master/src/core/angularfire2.ts#L54) b) References to the subscriber kept around in the noop function Explanation of the fix and approach When investigating this I found that to solve the leak a lot of "null" setting and more hacks on the code were required. I decided to try and improve the hack (https://github.com/angular/angularfire/blob/master/src/core/angularfire2.ts#L13) by makeing it a bit more idiomatic. To make universal work correctly the following is needed: Make sure that firebase library calls are done outside the Angular Zone. Otherwise the zone doesn't stabilize due to keepalive timers and websockets that are firebase opens. When in SSR, make sure that the angular Zone is blocked by a macrotask until the observable emits an item, completes or errors. This makes sure that SSR pages don't finish rendering prematurely, before data has arrived from firebase. 1) Firebase library calls done outside the Angular Zone The code was slightly refactored to allow passing an optional Scheduler as parameter to the library factory methods. This allows to easily specify the scheduler used for emissions of items from e.g. fromRef. This is in line with the RxJS api (e,g. fromPromise(promise, scheduler?). By using subscribeOn combined with a Scheduler that schedules work outside of the Angular Zone, the behavior can easily be achieved. An implementation of such a scheduler has been added as "ZoneScheduler". Related Tests: https://github.com/Kamshak/angularfire/blob/5a9550c993bc4ecf512c3ed5a4a2c25390d47009/src/database/observable/fromRef.spec.ts#L59 https://github.com/Kamshak/angularfire/blob/5a9550c993bc4ecf512c3ed5a4a2c25390d47009/src/database/observable/fromRef.spec.ts#L44 2) Preventing Zone from stabilizing until first item is emitted In order to solve the memory leak and make it difficult to accidentally introduce a new one, the approach is to use pipeable operators where possible, this reduces the complexity needed to manage subscriptions split functionality into small, independent units (Scheduler, operator, operator factory) The gist is this: return function keepUnstableUntilFirst(obs$: Observable): Observable { const inCorrectZones$ = obs$.pipe( // Run the observable creation outside the angular zone subscribeOn(schedulers.outsideAngular), // Run operators inside the angular zone (e.g. side effects via tap()) observeOn(schedulers.insideAngular) ); if (isPlatformServer(platformId)) { return inCorrectZones$.pipe( blockUntilFirst(schedulers.ngZone) ); } else { return inCorrectZones$; } } Full, commented implementation: https://github.com/angular/angularfire/blob/5a9550c993bc4ecf512c3ed5a4a2c25390d47009/src/core/angularfire2.ts These remaining changes from the second commit are only chore work/refactoring to make sure the Schedulers are available where needed. Testing Comprehensive testing was added to verify the functionality at each level (the intended behavior hasn't changed from the description in the PR). Most notably keepUnstableUntilFirstFactory now has a test that verfies that it creates a macrotask until the first emission, and removes it after. ZoneScheduler ✔ should schedule all tasks asynchronously ✔ should execute the scheduled work inside the specified zone ✔ should execute nested scheduled work inside the specified zone keepUnstableUntilFirstFactory ✔ should subscribe outside angular and observe inside angular (server) ✔ should subscribe outside angular and observe inside angular (browser) ✔ should block until first emission on server platform ✔ should not block on client platform fromRef ✔ should take a scheduler ✔ should schedule completed and error correctly Updated universal-test app In the third commit the universal-test app was updated to Angular 6 to make it work with @angular/fire again. The package.json command has been updated as well, however I did not add it to the travis file (not sure if you would like it tested on CI). No functional changes, testing works again and renders a html file. NPM version bumped to 5.2.4* Just a heads up - this was mainly for manual testing with yarn pack - suggesting a patch or minor bump. Also done in 2nd commit.

Open Graph Description: Checklist Issue number for this PR: TBD Docs included?: no - API did not change Test units included?: yes In a clean directory, yarn install, yarn test run successfully? Yes + manual testing in la...

X Description: Checklist Issue number for this PR: TBD Docs included?: no - API did not change Test units included?: yes In a clean directory, yarn install, yarn test run successfully? Yes + manual testing in la...

Opengraph URL: https://github.com/angular/angularfire/pull/2243

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:b16db39d-9311-6dfd-7a59-69ae3ea19335
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id836E:3665C1:A33355:DA4A55:6A5B4D72
html-safe-nonce0913468e8eb614de37b8ae8855ef64e05fec94f4647623b0938e13b8beb0cc9f
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MzZFOjM2NjVDMTpBMzMzNTU6REE0QTU1OjZBNUI0RDcyIiwidmlzaXRvcl9pZCI6IjYyODAyNzY4NDYxNTc5NzQ4OTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac75f2fd911705f19f6cdcc05a3ea5ff57773efed201132905bc309efdae95a3ff
hovercard-subject-tagpull_request:340320240
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/angular/angularfire/pull/2243/files
twitter:imagehttps://avatars.githubusercontent.com/u/337968?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/337968?s=400&v=4
og:image:altChecklist Issue number for this PR: TBD Docs included?: no - API did not change Test units included?: yes In a clean directory, yarn install, yarn test run successfully? Yes + manual testing in la...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/angular/angularfire git https://github.com/angular/angularfire.git
octolytics-dimension-user_id139426
octolytics-dimension-user_loginangular
octolytics-dimension-repository_id49453413
octolytics-dimension-repository_nwoangular/angularfire
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id49453413
octolytics-dimension-repository_network_root_nwoangular/angularfire
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release9c975978430e9ad293956f2bbdaf153b1bd84a99
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/angular/angularfire/pull/2243/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fangular%2Fangularfire%2Fpull%2F2243%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fangular%2Fangularfire%2Fpull%2F2243%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=angular%2Fangularfire
Reloadhttps://github.com/angular/angularfire/pull/2243/files
Reloadhttps://github.com/angular/angularfire/pull/2243/files
Reloadhttps://github.com/angular/angularfire/pull/2243/files
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
angular https://github.com/angular
angularfirehttps://github.com/angular/angularfire
Notifications https://github.com/login?return_to=%2Fangular%2Fangularfire
Fork 2.2k https://github.com/login?return_to=%2Fangular%2Fangularfire
Star 7.8k https://github.com/login?return_to=%2Fangular%2Fangularfire
Code https://github.com/angular/angularfire
Issues 294 https://github.com/angular/angularfire/issues
Pull requests 21 https://github.com/angular/angularfire/pulls
Discussions https://github.com/angular/angularfire/discussions
Actions https://github.com/angular/angularfire/actions
Projects https://github.com/angular/angularfire/projects
Security and quality 0 https://github.com/angular/angularfire/security
Insights https://github.com/angular/angularfire/pulse
Code https://github.com/angular/angularfire
Issues https://github.com/angular/angularfire/issues
Pull requests https://github.com/angular/angularfire/pulls
Discussions https://github.com/angular/angularfire/discussions
Actions https://github.com/angular/angularfire/actions
Projects https://github.com/angular/angularfire/projects
Security and quality https://github.com/angular/angularfire/security
Insights https://github.com/angular/angularfire/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fangular%2Fangularfire%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fangular%2Fangularfire%2Fissues%2Fnew%2Fchoose
jamesdanielshttps://github.com/jamesdaniels
angular:ssr_workinghttps://github.com/angular/angularfire/tree/ssr_working
ValentinFunk:masterhttps://github.com/ValentinFunk/angularfire/tree/master
Conversation 21 https://github.com/angular/angularfire/pull/2243
Commits 10 https://github.com/angular/angularfire/pull/2243/commits
Checks 0 https://github.com/angular/angularfire/pull/2243/checks
Files changed https://github.com/angular/angularfire/pull/2243/files
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
fix: fix memory leak on SSR https://github.com/angular/angularfire/pull/2243/files#top
Show all changes 10 commits https://github.com/angular/angularfire/pull/2243/files
441f9b0 chore: allow passsing Scheduler to fromRef Nov 13, 2019 https://github.com/angular/angularfire/pull/2243/commits/441f9b0bb0815896b1ea4c474b21e9eb9881f1c9
5a9550c fix: fix memory leak in SSR Nov 13, 2019 https://github.com/angular/angularfire/pull/2243/commits/5a9550c993bc4ecf512c3ed5a4a2c25390d47009
47f1490 fix(universal-test): bring back universal-test app Nov 13, 2019 https://github.com/angular/angularfire/pull/2243/commits/47f1490099a4cbc6c6e5a3b01500123fae5984d5
ae2d800 fix: use macrotask Nov 14, 2019 https://github.com/angular/angularfire/pull/2243/commits/ae2d8003477a242dd5aabdab54cbf9803f3824a5
cffb209 fix: schedule completed and error notifications in the specified sche… Nov 24, 2019 https://github.com/angular/angularfire/pull/2243/commits/cffb209521b70d9a033bc0a986a7b1a4301a5710
90e3f9f chore: update misleading comment ValentinFunk Nov 26, 2019 https://github.com/angular/angularfire/pull/2243/commits/90e3f9f8f9a108b8ec66b2e4e5413933c97b58ea
a63b20c fix(typings): don't type ZoneScheduler.delegate to support old TS ver… Nov 26, 2019 https://github.com/angular/angularfire/pull/2243/commits/a63b20cd8135ce012f3aeadadd23e33c2542a3fc
9c9658c fix(keepUnstableUntilFirst): multicast only after rescheduling Dec 19, 2019 https://github.com/angular/angularfire/pull/2243/commits/9c9658cf190b74a45be9f59571a9e7f7d77733aa
ec16f2c fix(keepUnstableUntilFirst): schedule emissions inside of angular syn… Dec 19, 2019 https://github.com/angular/angularfire/pull/2243/commits/ec16f2cf5d07eb8ce5006ea4d7908dce0ecb77df
38e6f51 Merge branch 'master' into master jamesdaniels Jan 21, 2020 https://github.com/angular/angularfire/pull/2243/commits/38e6f51f7cd798dc16612cee22bf5e901436418c
Clear filters https://github.com/angular/angularfire/pull/2243/files
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
karma.conf.js https://github.com/angular/angularfire/pull/2243/files#diff-25bdb46a5428d318648ec9eb46a99c0268d8c96b672c46e2247a685bc3e384fb
package.json https://github.com/angular/angularfire/pull/2243/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519
auth.ts https://github.com/angular/angularfire/pull/2243/files#diff-26c98c2ffc5924a448f8384c10793435c826bb2783eff1d4f866784c95575be5
angularfire2.spec.ts https://github.com/angular/angularfire/pull/2243/files#diff-e0f7d4812129bc9e3a5575aee4e352a7a4cf1b733d05f23cfce7b4bc8da5b5f3
angularfire2.ts https://github.com/angular/angularfire/pull/2243/files#diff-2ce7227e9f2284851cb129eee23823d15c9eb813f633cf608e58644946fb95f5
firebase_list_factory.ts https://github.com/angular/angularfire/pull/2243/files#diff-e9723691fb37397533a46c260462eff33267988366465c9f6b8ec845df890c71
firebase_object_factory.ts https://github.com/angular/angularfire/pull/2243/files#diff-f94dcf8d44ca72e04ca55ee708ef7b92e03ef998a715c48a78afc1df90bb9a24
database.ts https://github.com/angular/angularfire/pull/2243/files#diff-6a5dc78be6bd854c429272a3618b932b42f80f59f5ba96e66e5c57cfdb373ac6
audit-trail.ts https://github.com/angular/angularfire/pull/2243/files#diff-8af22babb5a5793bc6381c97ffe1e17cd47c209f60536771f2bc52aa5da8fe87
changes.ts https://github.com/angular/angularfire/pull/2243/files#diff-943ca9ce46f15e23e496973524c5377933d0510df038ba1d0fcafac98a1f0ffc
create-reference.ts https://github.com/angular/angularfire/pull/2243/files#diff-95a62ccf9c6b7489ab39d1321edd176a0cf45b0fd564fdf3aaa5056b741a1812
snapshot-changes.ts https://github.com/angular/angularfire/pull/2243/files#diff-5e0a6606c40e758048c997c26ce4bf2a59b95d287325bf7c4cac18e1d3a9abe5
state-changes.ts https://github.com/angular/angularfire/pull/2243/files#diff-4a468f99c452b5cfdd6422eaf454c80f8aca58e196c64a8068466746a403eb1d
create-reference.ts https://github.com/angular/angularfire/pull/2243/files#diff-cba8919508d275d775beea2efd753a947f0fd30b3764dad2eb3ce80abe7b7ef1
snapshot-changes.ts https://github.com/angular/angularfire/pull/2243/files#diff-69e9eae0870e048931f9b1eef71fa234ae52b6018cc8683ee94b413fbaeb22a6
fromRef.spec.ts https://github.com/angular/angularfire/pull/2243/files#diff-00a0874bb3d98f2742b322d61316c8cc3f2b194d90f963fa5f18dc1be479682d
fromRef.ts https://github.com/angular/angularfire/pull/2243/files#diff-4f44da112bcda1e96261baf93fc7bb1b5c9a8b5b41aa980a1f4c8d2fd68ddd71
collection-group.ts https://github.com/angular/angularfire/pull/2243/files#diff-57f0ec648f52475313b99b87977142362d382f424e71d07210ef93b7e03263c8
changes.ts https://github.com/angular/angularfire/pull/2243/files#diff-38ad6a462c0d062045c1fd115defdc7eaadd196595ed8a16673ad680ef1a8d25
collection.ts https://github.com/angular/angularfire/pull/2243/files#diff-11509f952612f494bbae477b8da773ebbaf3eb5aef5702197d51b047416ea336
document.ts https://github.com/angular/angularfire/pull/2243/files#diff-0b25f6a40bdd6b1eef959115246f63cfd9e70247db027465a76465d31000876c
firestore.ts https://github.com/angular/angularfire/pull/2243/files#diff-ec64a9183f7464ddaec4f2be81cba3363b7357b6ef5e0f6426cca34d96b74e63
fromRef.ts https://github.com/angular/angularfire/pull/2243/files#diff-c002ab3029ecf12025b3cac6fd07fcd2268f52313890ff6861bb365eb64ec4f4
functions.ts https://github.com/angular/angularfire/pull/2243/files#diff-9bc8cd3cdc95031da5169382ca070d5714a3fb7b70dac54d55d718fae15e3954
messaging.ts https://github.com/angular/angularfire/pull/2243/files#diff-52075c4001f12262ff3842494a3fad6d61870ad2f207074865a732dd7673bdc2
ref.ts https://github.com/angular/angularfire/pull/2243/files#diff-ada97e2e27f41636c89d284cd5f77b9bb1c1dd41ed10de4d9eab85264582867a
storage.ts https://github.com/angular/angularfire/pull/2243/files#diff-0c35bbf7139461c1a7f14a041877ce83458e0f9a84892478ddeb8177ef2048b2
.angular-cli.json https://github.com/angular/angularfire/pull/2243/files#diff-dce3d11851463eb00d3049bec3baef10b23d80a4c3c235a90fc969b5a4e2e6cf
angular.json https://github.com/angular/angularfire/pull/2243/files#diff-29559140bec909da55521ddd7188512b54f165b5cee52eabcad400487dbc241f
package.json https://github.com/angular/angularfire/pull/2243/files#diff-74fa9909f38eaf88f3eaf51b47b532f7c2d523629119ae211f40bcb96a7c889c
prerender.js https://github.com/angular/angularfire/pull/2243/files#diff-c4084eb3a4a04c343b9bd4c090bf1ae6d8a28427ab63d0a259a54be029e8b4ad
app.module.ts https://github.com/angular/angularfire/pull/2243/files#diff-d334b89959350f7fee54274a9bcc921a5cd766189889da209df41549e8761fd4
environment.prod.ts https://github.com/angular/angularfire/pull/2243/files#diff-13fba2974b475d776d3ec0bf983a714fa94843a475fafade64a2c8ab4bbe89f6
environment.ts https://github.com/angular/angularfire/pull/2243/files#diff-e359f745c253d1b24dd9261723da99c2641047ef643e2f1ad4039a7f60ab9794
tsconfig.json https://github.com/angular/angularfire/pull/2243/files#diff-c096e092fd603e9184b66880503997d9a3ab1185a017a343a59bdd5284c8fa60
yarn.lock https://github.com/angular/angularfire/pull/2243/files#diff-88597d737034942c082bb2a1bbbd7c58ce6047dd8faea473a892e3f67dc97be1
karma.conf.jshttps://github.com/angular/angularfire/pull/2243/files#diff-25bdb46a5428d318648ec9eb46a99c0268d8c96b672c46e2247a685bc3e384fb
View file https://github.com/ValentinFunk/angularfire/blob/38e6f51f7cd798dc16612cee22bf5e901436418c/karma.conf.js
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/angular/angularfire/pull/2243/{{ revealButtonHref }}
https://github.com/angular/angularfire/pull/2243/files#diff-25bdb46a5428d318648ec9eb46a99c0268d8c96b672c46e2247a685bc3e384fb
https://github.com/angular/angularfire/pull/2243/files#diff-25bdb46a5428d318648ec9eb46a99c0268d8c96b672c46e2247a685bc3e384fb
package.jsonhttps://github.com/angular/angularfire/pull/2243/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519
View file https://github.com/ValentinFunk/angularfire/blob/38e6f51f7cd798dc16612cee22bf5e901436418c/package.json
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/angular/angularfire/pull/2243/{{ revealButtonHref }}
https://github.com/angular/angularfire/pull/2243/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519
https://github.com/angular/angularfire/pull/2243/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519
src/auth/auth.tshttps://github.com/angular/angularfire/pull/2243/files#diff-26c98c2ffc5924a448f8384c10793435c826bb2783eff1d4f866784c95575be5
View file https://github.com/ValentinFunk/angularfire/blob/38e6f51f7cd798dc16612cee22bf5e901436418c/src/auth/auth.ts
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/angular/angularfire/pull/2243/{{ revealButtonHref }}
https://github.com/angular/angularfire/pull/2243/files#diff-26c98c2ffc5924a448f8384c10793435c826bb2783eff1d4f866784c95575be5
https://github.com/angular/angularfire/pull/2243/files#diff-26c98c2ffc5924a448f8384c10793435c826bb2783eff1d4f866784c95575be5
https://github.com/angular/angularfire/pull/2243/files#diff-26c98c2ffc5924a448f8384c10793435c826bb2783eff1d4f866784c95575be5
src/core/angularfire2.spec.tshttps://github.com/angular/angularfire/pull/2243/files#diff-e0f7d4812129bc9e3a5575aee4e352a7a4cf1b733d05f23cfce7b4bc8da5b5f3
View file https://github.com/ValentinFunk/angularfire/blob/38e6f51f7cd798dc16612cee22bf5e901436418c/src/core/angularfire2.spec.ts
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/angular/angularfire/pull/2243/{{ revealButtonHref }}
jamesdanielshttps://github.com/jamesdaniels
Dec 4, 2019https://github.com/angular/angularfire/pull/2243/files#r354002675
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
jamesdanielshttps://github.com/jamesdaniels
Dec 4, 2019https://github.com/angular/angularfire/pull/2243/files#r354003358
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
https://github.com/angular/angularfire/pull/2243/files#diff-e0f7d4812129bc9e3a5575aee4e352a7a4cf1b733d05f23cfce7b4bc8da5b5f3
https://github.com/angular/angularfire/pull/2243/files#diff-e0f7d4812129bc9e3a5575aee4e352a7a4cf1b733d05f23cfce7b4bc8da5b5f3
https://github.com/angular/angularfire/pull/2243/files#diff-e0f7d4812129bc9e3a5575aee4e352a7a4cf1b733d05f23cfce7b4bc8da5b5f3
Please reload this pagehttps://github.com/angular/angularfire/pull/2243/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.