UNPKG

oidc-client-rx

Version:

ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications

48 lines (47 loc) 1.72 kB
import { inject } from "injection-js"; import { DOCUMENT } from "../dom/index.js"; class AbstractRouter { } const ROUTER_ABS_PATH_PATTERN = /^\//; class VanillaLocationRouter extends AbstractRouter { get location() { const location = this.document.defaultView?.window?.location; if (!location) throw new Error("current document do not support Location API"); return location; } navigateByUrl(url) { this.location.href = ROUTER_ABS_PATH_PATTERN.test(url) ? url : `/${url}`; } getCurrentNavigation() { return { extractedUrl: `${this.location.pathname}${this.location.search}${this.location.hash}` }; } constructor(...args){ super(...args), this.document = inject(DOCUMENT); } } class VanillaHistoryRouter extends AbstractRouter { get history() { const history = this.document.defaultView?.window?.history; if (!history) throw new Error("current document do not support History API"); return history; } get location() { const location = this.document.defaultView?.window?.location; if (!location) throw new Error("current document do not support Location API"); return location; } navigateByUrl(url) { this.history.pushState({}, "", ROUTER_ABS_PATH_PATTERN.test(url) ? url : `/${url}`); } getCurrentNavigation() { return { extractedUrl: `${this.location.pathname}${this.location.search}${this.location.hash}` }; } constructor(...args){ super(...args), this.document = inject(DOCUMENT); } } export { AbstractRouter, ROUTER_ABS_PATH_PATTERN, VanillaHistoryRouter, VanillaLocationRouter };