@spartacus/core
Version:
Spartacus - the core framework
61 lines • 7.39 kB
JavaScript
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { ExternalRoutesGuard } from './external-routes.guard';
import * as i0 from "@angular/core";
import * as i1 from "./external-routes-config";
import * as i2 from "../services/url-matcher.service";
/**
* Service that helps redirecting to different storefront systems for configured URLs
*/
export class ExternalRoutesService {
constructor(config, urlMatcherService, injector) {
this.config = config;
this.urlMatcherService = urlMatcherService;
this.injector = injector;
}
get internalUrlPatterns() {
return ((this.config && this.config.routing && this.config.routing.internal) || []);
}
/**
* Prepends routes (to the Router.config) that are responsible for redirecting to a different storefront system
*/
addRoutes() {
const router = this.injector.get(Router);
const newRoutes = this.getRoutes();
if (newRoutes.length) {
router.resetConfig([...newRoutes, ...router.config]);
}
}
/**
* Returns routes that are responsible for redirection to different storefront systems
*/
getRoutes() {
if (!this.internalUrlPatterns.length) {
return [];
}
const routes = [];
routes.push({
pathMatch: 'full',
matcher: this.getUrlMatcher(),
canActivate: [ExternalRoutesGuard],
component: {},
});
return routes;
}
/**
* Returns the URL matcher for the external route
*/
getUrlMatcher() {
const matcher = this.urlMatcherService.getFromGlob(this.internalUrlPatterns);
return this.urlMatcherService.getOpposite(matcher); // the external route should be activated only when it's NOT an internal route
}
}
ExternalRoutesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ExternalRoutesService, deps: [{ token: i1.ExternalRoutesConfig }, { token: i2.UrlMatcherService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
ExternalRoutesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ExternalRoutesService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ExternalRoutesService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.ExternalRoutesConfig }, { type: i2.UrlMatcherService }, { type: i0.Injector }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtcm91dGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9yb3V0aW5nL2V4dGVybmFsLXJvdXRlcy9leHRlcm5hbC1yb3V0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQXNCLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFFOUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQ1ksTUFBNEIsRUFDNUIsaUJBQW9DLEVBQ3BDLFFBQWtCO1FBRmxCLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUMzQixDQUFDO0lBRUosSUFBYyxtQkFBbUI7UUFDL0IsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQzNFLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNwQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLFNBQVM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7WUFDcEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztRQUUxQixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsU0FBUyxFQUFFLE1BQU07WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDN0IsV0FBVyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEMsU0FBUyxFQUFFLEVBQVM7U0FDckIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sYUFBYTtRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQ3pCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4RUFBOEU7SUFDcEksQ0FBQzs7a0hBbkRVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlcywgVXJsTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVcmxNYXRjaGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VybC1tYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXh0ZXJuYWxSb3V0ZXNDb25maWcgfSBmcm9tICcuL2V4dGVybmFsLXJvdXRlcy1jb25maWcnO1xuaW1wb3J0IHsgRXh0ZXJuYWxSb3V0ZXNHdWFyZCB9IGZyb20gJy4vZXh0ZXJuYWwtcm91dGVzLmd1YXJkJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgaGVscHMgcmVkaXJlY3RpbmcgdG8gZGlmZmVyZW50IHN0b3JlZnJvbnQgc3lzdGVtcyBmb3IgY29uZmlndXJlZCBVUkxzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFeHRlcm5hbFJvdXRlc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBFeHRlcm5hbFJvdXRlc0NvbmZpZyxcbiAgICBwcm90ZWN0ZWQgdXJsTWF0Y2hlclNlcnZpY2U6IFVybE1hdGNoZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIHByb3RlY3RlZCBnZXQgaW50ZXJuYWxVcmxQYXR0ZXJucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5yb3V0aW5nICYmIHRoaXMuY29uZmlnLnJvdXRpbmcuaW50ZXJuYWwpIHx8IFtdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwZW5kcyByb3V0ZXMgKHRvIHRoZSBSb3V0ZXIuY29uZmlnKSB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgcmVkaXJlY3RpbmcgdG8gYSBkaWZmZXJlbnQgc3RvcmVmcm9udCBzeXN0ZW1cbiAgICovXG4gIGFkZFJvdXRlcygpOiB2b2lkIHtcbiAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgY29uc3QgbmV3Um91dGVzID0gdGhpcy5nZXRSb3V0ZXMoKTtcbiAgICBpZiAobmV3Um91dGVzLmxlbmd0aCkge1xuICAgICAgcm91dGVyLnJlc2V0Q29uZmlnKFsuLi5uZXdSb3V0ZXMsIC4uLnJvdXRlci5jb25maWddKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByb3V0ZXMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlZGlyZWN0aW9uIHRvIGRpZmZlcmVudCBzdG9yZWZyb250IHN5c3RlbXNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRSb3V0ZXMoKTogUm91dGVzIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxVcmxQYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxuICAgICAgbWF0Y2hlcjogdGhpcy5nZXRVcmxNYXRjaGVyKCksXG4gICAgICBjYW5BY3RpdmF0ZTogW0V4dGVybmFsUm91dGVzR3VhcmRdLFxuICAgICAgY29tcG9uZW50OiB7fSBhcyBhbnksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm91dGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFVSTCBtYXRjaGVyIGZvciB0aGUgZXh0ZXJuYWwgcm91dGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXRVcmxNYXRjaGVyKCk6IFVybE1hdGNoZXIge1xuICAgIGNvbnN0IG1hdGNoZXIgPSB0aGlzLnVybE1hdGNoZXJTZXJ2aWNlLmdldEZyb21HbG9iKFxuICAgICAgdGhpcy5pbnRlcm5hbFVybFBhdHRlcm5zXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy51cmxNYXRjaGVyU2VydmljZS5nZXRPcHBvc2l0ZShtYXRjaGVyKTsgLy8gdGhlIGV4dGVybmFsIHJvdXRlIHNob3VsZCBiZSBhY3RpdmF0ZWQgb25seSB3aGVuIGl0J3MgTk9UIGFuIGludGVybmFsIHJvdXRlXG4gIH1cbn1cbiJdfQ==