UNPKG

@spartacus/core

Version:

Spartacus - the core framework

57 lines 7.49 kB
import { Injectable } from '@angular/core'; import { PRIMARY_OUTLET } from '@angular/router'; import { isParam } from './path-utils'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; export class UrlParsingService { constructor(router) { this.router = router; } getPrimarySegments(url) { const urlTree = this.router.parseUrl(url); return this._getPrimarySegmentsFromUrlTree(urlTree.root); } _getPrimarySegmentsFromUrlTree(tree) { const segments = tree.segments.map((s) => s.path); const childrenSegments = tree.children[PRIMARY_OUTLET] ? this._getPrimarySegmentsFromUrlTree(tree.children[PRIMARY_OUTLET]) : []; return segments.concat(childrenSegments); } /** * Tells whether the given url matches the given path. * * @param urlSegments string or array of url segments. When it's a string, the preceding * site-context params are ignored (i.e. '/electronics-spa/en/USD/...') * * @param pathSegments string or array of path segments. Dynamic params are allowed in the * path shape, i.e. `/url/:param1/with/:param2`. */ matchPath(urlSegments, pathSegments) { urlSegments = Array.isArray(urlSegments) ? urlSegments : this.getPrimarySegments(urlSegments); pathSegments = Array.isArray(pathSegments) ? pathSegments : this.getPrimarySegments(pathSegments); if (urlSegments.length !== pathSegments.length) { return false; } for (let i = 0; i < pathSegments.length; i++) { const pathSeg = pathSegments[i]; const urlSeg = urlSegments[i]; // compare only static segments: if (!isParam(pathSeg) && pathSeg !== urlSeg) { return false; } } return true; } } UrlParsingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UrlParsingService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); UrlParsingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UrlParsingService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UrlParsingService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.Router }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXBhcnNpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3JvdXRpbmcvY29uZmlndXJhYmxlLXJvdXRlcy91cmwtdHJhbnNsYXRpb24vdXJsLXBhcnNpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBR3ZDLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDLGtCQUFrQixDQUFDLEdBQVc7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxJQUFxQjtRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDcEQsQ0FBQyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTLENBQ1AsV0FBOEIsRUFDOUIsWUFBK0I7UUFFL0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6QyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDeEMsQ0FBQyxDQUFDLFlBQVk7WUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTFDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQzlDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlCLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7OEdBbkRVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBREosTUFBTTsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBSSU1BUllfT1VUTEVULCBSb3V0ZXIsIFVybFNlZ21lbnRHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpc1BhcmFtIH0gZnJvbSAnLi9wYXRoLXV0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVcmxQYXJzaW5nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgZ2V0UHJpbWFyeVNlZ21lbnRzKHVybDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh1cmwpO1xuICAgIHJldHVybiB0aGlzLl9nZXRQcmltYXJ5U2VnbWVudHNGcm9tVXJsVHJlZSh1cmxUcmVlLnJvb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UHJpbWFyeVNlZ21lbnRzRnJvbVVybFRyZWUodHJlZTogVXJsU2VnbWVudEdyb3VwKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdHJlZS5zZWdtZW50cy5tYXAoKHMpID0+IHMucGF0aCk7XG4gICAgY29uc3QgY2hpbGRyZW5TZWdtZW50cyA9IHRyZWUuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdXG4gICAgICA/IHRoaXMuX2dldFByaW1hcnlTZWdtZW50c0Zyb21VcmxUcmVlKHRyZWUuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdKVxuICAgICAgOiBbXTtcbiAgICByZXR1cm4gc2VnbWVudHMuY29uY2F0KGNoaWxkcmVuU2VnbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHdoZXRoZXIgdGhlIGdpdmVuIHVybCBtYXRjaGVzIHRoZSBnaXZlbiBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gdXJsU2VnbWVudHMgICBzdHJpbmcgb3IgYXJyYXkgb2YgdXJsIHNlZ21lbnRzLiBXaGVuIGl0J3MgYSBzdHJpbmcsIHRoZSBwcmVjZWRpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgc2l0ZS1jb250ZXh0IHBhcmFtcyBhcmUgaWdub3JlZCAoaS5lLiAnL2VsZWN0cm9uaWNzLXNwYS9lbi9VU0QvLi4uJylcbiAgICpcbiAgICogQHBhcmFtIHBhdGhTZWdtZW50cyAgc3RyaW5nIG9yIGFycmF5IG9mIHBhdGggc2VnbWVudHMuIER5bmFtaWMgcGFyYW1zIGFyZSBhbGxvd2VkIGluIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICBwYXRoIHNoYXBlLCBpLmUuIGAvdXJsLzpwYXJhbTEvd2l0aC86cGFyYW0yYC5cbiAgICovXG4gIG1hdGNoUGF0aChcbiAgICB1cmxTZWdtZW50czogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgcGF0aFNlZ21lbnRzOiBzdHJpbmcgfCBzdHJpbmdbXVxuICApOiBib29sZWFuIHtcbiAgICB1cmxTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkodXJsU2VnbWVudHMpXG4gICAgICA/IHVybFNlZ21lbnRzXG4gICAgICA6IHRoaXMuZ2V0UHJpbWFyeVNlZ21lbnRzKHVybFNlZ21lbnRzKTtcblxuICAgIHBhdGhTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkocGF0aFNlZ21lbnRzKVxuICAgICAgPyBwYXRoU2VnbWVudHNcbiAgICAgIDogdGhpcy5nZXRQcmltYXJ5U2VnbWVudHMocGF0aFNlZ21lbnRzKTtcblxuICAgIGlmICh1cmxTZWdtZW50cy5sZW5ndGggIT09IHBhdGhTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGF0aFNlZyA9IHBhdGhTZWdtZW50c1tpXTtcbiAgICAgIGNvbnN0IHVybFNlZyA9IHVybFNlZ21lbnRzW2ldO1xuXG4gICAgICAvLyBjb21wYXJlIG9ubHkgc3RhdGljIHNlZ21lbnRzOlxuICAgICAgaWYgKCFpc1BhcmFtKHBhdGhTZWcpICYmIHBhdGhTZWcgIT09IHVybFNlZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=