oidc-client-rx
Version:
ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications
48 lines (47 loc) • 1.72 kB
JavaScript
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 };