UNPKG

ngx-bit

Version:

A flexible NG-ZORRO helper library

156 lines 17.1 kB
import { Injectable } from '@angular/core'; import { NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router'; import { Subject } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { StorageMap } from '@ngx-pwa/local-storage'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@ngx-pwa/local-storage/public-api"; export class BitRouterService { constructor(router, storage) { this.router = router; this.storage = storage; /** * 被激活的导航 * Activated navigation */ this.navActive = []; /** * 允许返回 * Allow back */ this.back = false; /** * Title */ this.title = null; /** * SubTitle */ this.subTitle = null; /** * default breadcrumb Root */ this.breadcrumbRoot = 0; /** * Header actions */ this.actions = []; /** * Status */ this.changed = new Subject(); } /** * 初始化平行路由 * Initialize parallel routing */ setup() { if (this.events$) { return; } if (this.router.url !== '/') { this.match(this.router, this.router.url); } this.events$ = this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe((event) => { if (event.url !== '/') { this.match(this.router, event.url); } else { this.clearBreadcrumb(); } }); } /** * 设置平行路由数据,同步导航与页头 * Set parallel routing data, synchronize navigation and page header */ setData(data) { this.storage.set('resource', data.resource).subscribe(_ => _); this.storage.set('router', data.router).subscribe(_ => _); } /** * 取消平行路由逻辑 * Cancel parallel routing logic */ uninstall() { if (this.events$) { this.events$.unsubscribe(); } } match(router, url) { const primary = router.parseUrl(url).root.children[PRIMARY_OUTLET]; const segments = primary.segments; this.storage.get('router').pipe(map((data) => { if (data) { for (let i = 0; i < segments.length; i++) { const key = segments.slice(0, i + 1).map(v => v.path).join('/'); if (data.hasOwnProperty(key)) { return key; } } } return null; })).subscribe(maybeKey => { if (!maybeKey) { router.navigate(['/empty']); this.clearBreadcrumb(); } else { this.dynamicBreadcrumb(maybeKey); } }); } dynamicBreadcrumb(key) { this.storage.get('resource').subscribe((data) => { const queue = []; const breadcrumb = []; const navActive = []; if (data.hasOwnProperty(key)) { const node = data[key]; const name = JSON.parse(node.name); this.title = name; navActive.unshift(node.key); breadcrumb.unshift({ name, key: node.key, router: node.router }); if (node.parent !== this.breadcrumbRoot) { queue.push(node.parent); } } while (queue.length !== this.breadcrumbRoot) { const parentKey = queue.pop(); if (data.hasOwnProperty(parentKey)) { const next = data[parentKey]; navActive.unshift(next.key); breadcrumb.unshift({ name: JSON.parse(next.name), key: next.key, router: next.router }); if (next.parent !== this.breadcrumbRoot) { queue.push(next.parent); } } } this.navActive = navActive; this.breadcrumb = breadcrumb; }); } clearBreadcrumb() { this.navActive = []; this.breadcrumb = []; this.title = null; } } BitRouterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function BitRouterService_Factory() { return new BitRouterService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.StorageMap)); }, token: BitRouterService, providedIn: "root" }); BitRouterService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; BitRouterService.ctorParameters = () => [ { type: Router }, { type: StorageMap } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpdC9yb3V0ZXIvYml0LXJvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFHcEQsTUFBTSxPQUFPLGdCQUFnQjtJQXlEM0IsWUFDVSxNQUFjLEVBQ2QsT0FBbUI7UUFEbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQVk7UUExRDdCOzs7V0FHRztRQUNILGNBQVMsR0FBVSxFQUFFLENBQUM7UUFDdEI7OztXQUdHO1FBQ0gsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiOztXQUVHO1FBQ0gsVUFBSyxHQUFRLElBQUksQ0FBQztRQUNsQjs7V0FFRztRQUNILGFBQVEsR0FBUSxJQUFJLENBQUM7UUFDckI7O1dBRUc7UUFDSCxtQkFBYyxHQUFRLENBQUMsQ0FBQztRQWF4Qjs7V0FFRztRQUNILFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBU2pDOztXQUVHO1FBQ0gsWUFBTyxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBV3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FDeEMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN6QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxJQUFnQjtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNoQixJQUFJLElBQUksRUFBRTtnQkFDUixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDNUIsT0FBTyxHQUFHLENBQUM7cUJBQ1o7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sVUFBVSxHQUF1QixFQUFFLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixVQUFVLENBQUMsT0FBTyxDQUFDO29CQUNqQixJQUFJO29CQUNKLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3BCLENBQUMsQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3pCO2FBQ0Y7WUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUU5QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLFVBQVUsQ0FBQyxPQUFPLENBQUM7d0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQzNCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRzt3QkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07cUJBQ3BCLENBQUMsQ0FBQztvQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3pCO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Ozs7WUE5S0YsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBTk0sTUFBTTtZQUlyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUFJJTUFSWV9PVVRMRVQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYk9wdGlvbiwgUm91dGVyRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlTWFwIH0gZnJvbSAnQG5neC1wd2EvbG9jYWwtc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQml0Um91dGVyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICog6KKr5r+A5rS755qE5a+86IiqXHJcbiAgICogQWN0aXZhdGVkIG5hdmlnYXRpb25cclxuICAgKi9cclxuICBuYXZBY3RpdmU6IGFueVtdID0gW107XHJcbiAgLyoqXHJcbiAgICog5YWB6K646L+U5ZueXHJcbiAgICogQWxsb3cgYmFja1xyXG4gICAqL1xyXG4gIGJhY2sgPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBUaXRsZVxyXG4gICAqL1xyXG4gIHRpdGxlOiBhbnkgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFN1YlRpdGxlXHJcbiAgICovXHJcbiAgc3ViVGl0bGU6IGFueSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBicmVhZGNydW1iIFJvb3RcclxuICAgKi9cclxuICBicmVhZGNydW1iUm9vdDogYW55ID0gMDtcclxuICAvKipcclxuICAgKiBCcmVhZGNydW1iIGFycmF5XHJcbiAgICovXHJcbiAgYnJlYWRjcnVtYjogQnJlYWRjcnVtYk9wdGlvbltdO1xyXG4gIC8qKlxyXG4gICAqIEhlYWRlciBiYW5uZXJcclxuICAgKi9cclxuICBiYW5uZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogSGVhZGVyIGJhbm5lclxyXG4gICAqL1xyXG4gIHRhZ3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogSGVhZGVyIGFjdGlvbnNcclxuICAgKi9cclxuICBhY3Rpb25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcclxuICAvKipcclxuICAgKiBIZWFkZXIgYmFubmVyXHJcbiAgICovXHJcbiAgY29udGVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvKipcclxuICAgKiBIZWFkZXIgYmFubmVyXHJcbiAgICovXHJcbiAgZm9vdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIFN0YXR1c1xyXG4gICAqL1xyXG4gIGNoYW5nZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuZ3VsYXIgcm91dGVkIGV2ZW50IHN1YnNjcmlwdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXZlbnRzJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VNYXBcclxuICApIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMluW5s+ihjOi3r+eUsVxyXG4gICAqIEluaXRpYWxpemUgcGFyYWxsZWwgcm91dGluZ1xyXG4gICAqL1xyXG4gIHNldHVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXZlbnRzJCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSAnLycpIHtcclxuICAgICAgdGhpcy5tYXRjaCh0aGlzLnJvdXRlciwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRzJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICAgICkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC51cmwgIT09ICcvJykge1xyXG4gICAgICAgIHRoaXMubWF0Y2godGhpcy5yb3V0ZXIsIGV2ZW50LnVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckJyZWFkY3J1bWIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7lubPooYzot6/nlLHmlbDmja7vvIzlkIzmraXlr7zoiKrkuI7pobXlpLRcclxuICAgKiBTZXQgcGFyYWxsZWwgcm91dGluZyBkYXRhLCBzeW5jaHJvbml6ZSBuYXZpZ2F0aW9uIGFuZCBwYWdlIGhlYWRlclxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YTogUm91dGVyRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yYWdlLnNldCgncmVzb3VyY2UnLCBkYXRhLnJlc291cmNlKS5zdWJzY3JpYmUoXyA9PiBfKTtcclxuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JvdXRlcicsIGRhdGEucm91dGVyKS5zdWJzY3JpYmUoXyA9PiBfKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWPlua2iOW5s+ihjOi3r+eUsemAu+i+kVxyXG4gICAqIENhbmNlbCBwYXJhbGxlbCByb3V0aW5nIGxvZ2ljXHJcbiAgICovXHJcbiAgdW5pbnN0YWxsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXZlbnRzJCkge1xyXG4gICAgICB0aGlzLmV2ZW50cyQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWF0Y2gocm91dGVyOiBSb3V0ZXIsIHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gcm91dGVyLnBhcnNlVXJsKHVybCkucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IHByaW1hcnkuc2VnbWVudHM7XHJcbiAgICB0aGlzLnN0b3JhZ2UuZ2V0KCdyb3V0ZXInKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlZ21lbnRzLnNsaWNlKDAsIGkgKyAxKS5tYXAodiA9PiB2LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZShtYXliZUtleSA9PiB7XHJcbiAgICAgIGlmICghbWF5YmVLZXkpIHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvZW1wdHknXSk7XHJcbiAgICAgICAgdGhpcy5jbGVhckJyZWFkY3J1bWIoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNCcmVhZGNydW1iKG1heWJlS2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGR5bmFtaWNCcmVhZGNydW1iKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JhZ2UuZ2V0KCdyZXNvdXJjZScpLnN1YnNjcmliZSgoZGF0YTogb2JqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHF1ZXVlID0gW107XHJcbiAgICAgIGNvbnN0IGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJPcHRpb25bXSA9IFtdO1xyXG4gICAgICBjb25zdCBuYXZBY3RpdmUgPSBbXTtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IEpTT04ucGFyc2Uobm9kZS5uYW1lKTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gbmFtZTtcclxuICAgICAgICBuYXZBY3RpdmUudW5zaGlmdChub2RlLmtleSk7XHJcbiAgICAgICAgYnJlYWRjcnVtYi51bnNoaWZ0KHtcclxuICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICBrZXk6IG5vZGUua2V5LFxyXG4gICAgICAgICAgcm91dGVyOiBub2RlLnJvdXRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gdGhpcy5icmVhZGNydW1iUm9vdCkge1xyXG4gICAgICAgICAgcXVldWUucHVzaChub2RlLnBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT09IHRoaXMuYnJlYWRjcnVtYlJvb3QpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBxdWV1ZS5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSkge1xyXG4gICAgICAgICAgY29uc3QgbmV4dCA9IGRhdGFbcGFyZW50S2V5XTtcclxuICAgICAgICAgIG5hdkFjdGl2ZS51bnNoaWZ0KG5leHQua2V5KTtcclxuICAgICAgICAgIGJyZWFkY3J1bWIudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIG5hbWU6IEpTT04ucGFyc2UobmV4dC5uYW1lKSxcclxuICAgICAgICAgICAga2V5OiBuZXh0LmtleSxcclxuICAgICAgICAgICAgcm91dGVyOiBuZXh0LnJvdXRlclxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobmV4dC5wYXJlbnQgIT09IHRoaXMuYnJlYWRjcnVtYlJvb3QpIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChuZXh0LnBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gbmF2QWN0aXZlO1xyXG4gICAgICB0aGlzLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQnJlYWRjcnVtYigpOiB2b2lkIHtcclxuICAgIHRoaXMubmF2QWN0aXZlID0gW107XHJcbiAgICB0aGlzLmJyZWFkY3J1bWIgPSBbXTtcclxuICAgIHRoaXMudGl0bGUgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=