diff --git a/src/Link.js b/src/Link.js index cb7653f..4727077 100644 --- a/src/Link.js +++ b/src/Link.js @@ -80,7 +80,7 @@ export function tryFixUrl(fragment) { const validAttempts = []; for (const attempt of [...new Set(attempts)]) { - const link = Link.parse(attempt); + const link = Link.parseFragment(attempt); if (link) { validAttempts.push({ url: attempt, link }); } @@ -98,11 +98,20 @@ export class Link { ); } - static parse(fragment) { + static parseIdentifier(identifier) { + return Link._parse(identifier); + } + + static parseFragment(fragment) { if (!fragment) { return null; } let [linkStr, queryParamsStr] = fragment.split("?"); + if (!linkStr.startsWith("#/")) { + return null; + } + linkStr = linkStr.substr(2); + const [identifier, eventId] = linkStr.split("/"); let viaServers = []; let clientId = null; @@ -121,14 +130,13 @@ export class Link { } webInstances = getWebInstanceMap(queryParams); } + return Link._parse(identifier, eventId, clientId, viaServers, webInstances); + } - if (!linkStr.startsWith("#/")) { + static _parse(identifier, eventId = undefined, clientId = null, viaServers = [], webInstances = {}) { + if (!identifier) { return null; } - linkStr = linkStr.substr(2); - - const [identifier, eventId] = linkStr.split("/"); - let matches; matches = USERID_PATTERN.exec(identifier); if (matches) { diff --git a/src/RootViewModel.js b/src/RootViewModel.js index 39f6733..05a8cd8 100644 --- a/src/RootViewModel.js +++ b/src/RootViewModel.js @@ -76,7 +76,7 @@ export class RootViewModel extends ViewModel { } else if (hash === "" || hash === "#" || hash === "#/") { this._updateChildVMs(null, oldLink); this.createLinkViewModel = new CreateLinkViewModel(this.childOptions()); - } else if (newLink = Link.parse(hash)) { + } else if (newLink = Link.parseFragment(hash)) { this._updateChildVMs(newLink, oldLink); } else { this._updateChildVMs(null, oldLink); diff --git a/src/create/CreateLinkViewModel.js b/src/create/CreateLinkViewModel.js index 50aa880..80b5d0c 100644 --- a/src/create/CreateLinkViewModel.js +++ b/src/create/CreateLinkViewModel.js @@ -30,7 +30,7 @@ export class CreateLinkViewModel extends ViewModel { } async createLink(identifier) { - this._link = Link.parse(identifier); + this._link = Link.parseIdentifier(identifier); if (this._link) { this.openLink("#" + this._link.toFragment()); }