From ce93b7ecddfc22cf55ab30f62b1adcce8e019898 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 7 Aug 2019 10:56:46 -0700 Subject: [PATCH 1/7] treat `ns=` query param as the namespace name if it is present --- packages/database/src/core/RepoManager.ts | 2 +- .../database/src/core/util/libs/parser.ts | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/database/src/core/RepoManager.ts b/packages/database/src/core/RepoManager.ts index a9366c76a65..ab9bd5a8521 100644 --- a/packages/database/src/core/RepoManager.ts +++ b/packages/database/src/core/RepoManager.ts @@ -19,7 +19,7 @@ import { FirebaseApp } from '@firebase/app-types'; import { safeGet } from '@firebase/util'; import { Repo } from './Repo'; import { fatal } from './util/util'; -import { parseRepoInfo, parseURL } from './util/libs/parser'; +import { parseRepoInfo, parseDatabaseURL } from './util/libs/parser'; import { validateUrl } from './util/validation'; import './Repo_transaction'; import { Database } from '../api/Database'; diff --git a/packages/database/src/core/util/libs/parser.ts b/packages/database/src/core/util/libs/parser.ts index c4d06c50b77..1d1a4f734a9 100644 --- a/packages/database/src/core/util/libs/parser.ts +++ b/packages/database/src/core/util/libs/parser.ts @@ -69,8 +69,8 @@ function decodeQuery(queryString: string): { [key: string]: string } { export const parseRepoInfo = function( dataURL: string ): { repoInfo: RepoInfo; path: Path } { - const parsedUrl = parseURL(dataURL), - namespace = parsedUrl.subdomain; + const parsedUrl = parseDatabaseURL(dataURL), + namespace = parsedUrl.namespace; if (parsedUrl.domain === 'firebase') { fatal( @@ -110,9 +110,9 @@ export const parseRepoInfo = function( /** * * @param {!string} dataURL - * @return {{host: string, port: number, domain: string, subdomain: string, secure: boolean, scheme: string, pathString: string}} + * @return {{host: string, port: number, domain: string, subdomain: string, secure: boolean, scheme: string, pathString: string, namespace: string}} */ -export const parseURL = function( +export const parseDatabaseURL = function( dataURL: string ): { host: string; @@ -122,12 +122,14 @@ export const parseURL = function( secure: boolean; scheme: string; pathString: string; + namespace: string; } { // Default to empty strings in the event of a malformed string. let host = '', domain = '', subdomain = '', - pathString = ''; + pathString = '', + namespace = ''; // Always default to SSL, unless otherwise specified. let secure = true, @@ -175,14 +177,16 @@ export const parseURL = function( // Normalize namespaces to lowercase to share storage / connection. domain = parts[1]; subdomain = parts[0].toLowerCase(); + // We interpret the subdomain of a 3 component URL as the namespace name. + namespace = subdomain; } else if (parts.length === 2) { domain = parts[0]; } else if (parts[0].slice(0, colonInd).toLowerCase() === 'localhost') { domain = 'localhost'; } - // Support `ns` query param if subdomain not already set - if (subdomain === '' && 'ns' in queryParams) { - subdomain = queryParams['ns']; + // Always treat the value of the `ns` as the namespace name if it is present. + if ('ns' in queryParams) { + namespace = queryParams['ns']; } } @@ -193,6 +197,7 @@ export const parseURL = function( subdomain, secure, scheme, - pathString + pathString, + namespace, }; }; From 80954227c2d6b5f2a807aa35c6577275c8c43580 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 7 Aug 2019 10:57:37 -0700 Subject: [PATCH 2/7] [AUTOMATED]: Prettier Code Styling --- packages/database/src/core/util/libs/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/core/util/libs/parser.ts b/packages/database/src/core/util/libs/parser.ts index 1d1a4f734a9..293084620c5 100644 --- a/packages/database/src/core/util/libs/parser.ts +++ b/packages/database/src/core/util/libs/parser.ts @@ -198,6 +198,6 @@ export const parseDatabaseURL = function( secure, scheme, pathString, - namespace, + namespace }; }; From bcde6d1c394fea1513910a6019987101a4572471 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 7 Aug 2019 18:11:21 -0700 Subject: [PATCH 3/7] record ns queryparam override in RepoInfo class --- packages/database/src/core/RepoInfo.ts | 5 +++-- packages/database/src/core/util/libs/parser.ts | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index 2b682c192ae..27527dd5380 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -42,7 +42,8 @@ export class RepoInfo { public secure: boolean, public namespace: string, public webSocketOnly: boolean, - public persistenceKey: string = '' + public persistenceKey: string = '', + private withQueryParam: boolean = false ) { this.host = host.toLowerCase(); this.domain = this.host.substr(this.host.indexOf('.') + 1); @@ -50,7 +51,7 @@ export class RepoInfo { } needsQueryParam(): boolean { - return this.host !== this.internalHost || this.isCustomHost(); + return this.host !== this.internalHost || this.isCustomHost() || this.withQueryParam; } isCacheableHost(): boolean { diff --git a/packages/database/src/core/util/libs/parser.ts b/packages/database/src/core/util/libs/parser.ts index 293084620c5..56d1524b9b1 100644 --- a/packages/database/src/core/util/libs/parser.ts +++ b/packages/database/src/core/util/libs/parser.ts @@ -101,7 +101,9 @@ export const parseRepoInfo = function( parsedUrl.host, parsedUrl.secure, namespace, - webSocketOnly + webSocketOnly, + '', + parsedUrl.namespace != parsedUrl.subdomain, ), path: new Path(parsedUrl.pathString) }; From d770ce376ecfca023b5d83176eeee0d0a118d42c Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 7 Aug 2019 18:12:00 -0700 Subject: [PATCH 4/7] [AUTOMATED]: Prettier Code Styling --- packages/database/src/core/RepoInfo.ts | 6 +++++- packages/database/src/core/util/libs/parser.ts | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index 27527dd5380..b8b5f339a13 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -51,7 +51,11 @@ export class RepoInfo { } needsQueryParam(): boolean { - return this.host !== this.internalHost || this.isCustomHost() || this.withQueryParam; + return ( + this.host !== this.internalHost || + this.isCustomHost() || + this.withQueryParam + ); } isCacheableHost(): boolean { diff --git a/packages/database/src/core/util/libs/parser.ts b/packages/database/src/core/util/libs/parser.ts index 56d1524b9b1..e0d5c7837a8 100644 --- a/packages/database/src/core/util/libs/parser.ts +++ b/packages/database/src/core/util/libs/parser.ts @@ -103,7 +103,7 @@ export const parseRepoInfo = function( namespace, webSocketOnly, '', - parsedUrl.namespace != parsedUrl.subdomain, + parsedUrl.namespace != parsedUrl.subdomain ), path: new Path(parsedUrl.pathString) }; From 4be253c0443f59dce79c0a4114b5f4a124ce6c06 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Wed, 7 Aug 2019 18:16:41 -0700 Subject: [PATCH 5/7] update database test suite --- packages/database/test/database.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/database/test/database.test.ts b/packages/database/test/database.test.ts index 94b9faab123..48b2e87f0cd 100644 --- a/packages/database/test/database.test.ts +++ b/packages/database/test/database.test.ts @@ -81,10 +81,10 @@ describe('Database Tests', function() { expect(db.ref().toString()).to.equal('http://localhost:80/'); }); - it('Only reads ns query param when subdomain not set', function() { + it('Reads ns query param even when subdomain is set', function() { var db = defaultApp.database('http://bar.firebaseio.com?ns=foo'); expect(db).to.be.ok; - expect(db.repo_.repoInfo_.namespace).to.equal('bar'); + expect(db.repo_.repoInfo_.namespace).to.equal('foo'); expect(db.ref().toString()).to.equal('https://bar.firebaseio.com/'); }); From 9ea606d73c4f9a7899241cced3cbbc7a496a9a73 Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Aug 2019 10:27:16 -0700 Subject: [PATCH 6/7] more descriptive RepoInfo member name --- packages/database/src/core/RepoInfo.ts | 4 ++-- packages/database/src/core/util/libs/parser.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index b8b5f339a13..ba0fe4ca17d 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -43,7 +43,7 @@ export class RepoInfo { public namespace: string, public webSocketOnly: boolean, public persistenceKey: string = '', - private withQueryParam: boolean = false + public includeNamespaceInQueryParams: boolean = false ) { this.host = host.toLowerCase(); this.domain = this.host.substr(this.host.indexOf('.') + 1); @@ -54,7 +54,7 @@ export class RepoInfo { return ( this.host !== this.internalHost || this.isCustomHost() || - this.withQueryParam + this.includeNamespaceInQueryParams ); } diff --git a/packages/database/src/core/util/libs/parser.ts b/packages/database/src/core/util/libs/parser.ts index e0d5c7837a8..8ac50bfd28d 100644 --- a/packages/database/src/core/util/libs/parser.ts +++ b/packages/database/src/core/util/libs/parser.ts @@ -102,8 +102,8 @@ export const parseRepoInfo = function( parsedUrl.secure, namespace, webSocketOnly, - '', - parsedUrl.namespace != parsedUrl.subdomain + /*persistenceKey=*/ '', + /*includeNamespaceInQueryParams=*/ namespace != parsedUrl.subdomain ), path: new Path(parsedUrl.pathString) }; From 8f9243205191d25a1535d65778f1e374fb61b46d Mon Sep 17 00:00:00 2001 From: Jan Wyszynski Date: Fri, 9 Aug 2019 16:30:05 -0700 Subject: [PATCH 7/7] Add to changelog --- packages/database/CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/database/CHANGELOG.md b/packages/database/CHANGELOG.md index 493860793d5..07e3fe276b5 100644 --- a/packages/database/CHANGELOG.md +++ b/packages/database/CHANGELOG.md @@ -1,9 +1,11 @@ # Unreleased - [fixed] Fixed an issue that caused `.info/serverTimeOffset` events not to fire (#2043). +- [changed] Treat `ns` url query parameter as the default Realtime Database + namespace name. # 6.3.4 - [fixed] Fixed an issue where multi-byte UTF-8 characters would not be written correctly when using `firebase.js` or `firebase-database.js` (#2035). # 6.0.0 -- [changed] Improved consistency between the type annotations for `Query.on`/`Reference.on`, - `Query.off`/`Reference.off` and `Query.once`/`Reference.once` (#1188, #1204). \ No newline at end of file +- [changed] Improved consistency between the type annotations for `Query.on`/`Reference.on`, + `Query.off`/`Reference.off` and `Query.once`/`Reference.once` (#1188, #1204).