@unipin/angular-applet 18.6.8 → 18.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/graphql/generated.mjs +570 -0
- package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +78 -0
- package/esm2022/lib/components/approval/form/approval-form.component.mjs +128 -0
- package/esm2022/lib/components/approval/index.mjs +3 -0
- package/esm2022/lib/components/approval/list/approval-list.component.mjs +113 -0
- package/esm2022/lib/components/approval/services/approval.service.mjs +46 -0
- package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +123 -0
- package/esm2022/lib/components/audit/index.mjs +3 -0
- package/esm2022/lib/components/audit/list/audit-list.component.mjs +81 -0
- package/esm2022/lib/components/audit/service/audit.service.mjs +49 -0
- package/esm2022/lib/components/audit/types/audit-detail-form.type.mjs +2 -0
- package/esm2022/lib/components/buttons/group/btn-group.component.mjs +45 -0
- package/esm2022/lib/components/buttons/group/interfaces/btn-group-config.interface.mjs +2 -0
- package/esm2022/lib/components/buttons/index.mjs +3 -0
- package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +48 -0
- package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +54 -0
- package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +23 -0
- package/esm2022/lib/components/containers/column-container/column-container.component.mjs +79 -0
- package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +23 -0
- package/esm2022/lib/components/containers/index.mjs +6 -0
- package/esm2022/lib/components/containers/list-container/index.mjs +3 -0
- package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +2 -0
- package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +58 -0
- package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +57 -0
- package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +40 -0
- package/esm2022/lib/components/filter/filter.component.mjs +121 -0
- package/esm2022/lib/components/filter/index.mjs +2 -0
- package/esm2022/lib/components/filter/interfaces/filter-config.interface.mjs +2 -0
- package/esm2022/lib/components/filter/interfaces/filter-field.interface.mjs +2 -0
- package/esm2022/lib/components/filter/interfaces/filter-search-event.interface.mjs +2 -0
- package/esm2022/lib/components/forms/country-input/form-country-input.component.mjs +122 -0
- package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +157 -0
- package/esm2022/lib/components/forms/date/form-date.component.mjs +109 -0
- package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +49 -0
- package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +68 -0
- package/esm2022/lib/components/forms/index.mjs +11 -0
- package/esm2022/lib/components/forms/input/form-input.component.mjs +94 -0
- package/esm2022/lib/components/forms/number/form-number.component.mjs +97 -0
- package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +38 -0
- package/esm2022/lib/components/forms/password/form-password.component.mjs +100 -0
- package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +132 -0
- package/esm2022/lib/components/forms/select/form-select.component.mjs +116 -0
- package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +88 -0
- package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +109 -0
- package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +107 -0
- package/esm2022/lib/components/grids/index.mjs +4 -0
- package/esm2022/lib/components/grids/interfaces/grid-config.interface.mjs +2 -0
- package/esm2022/lib/components/grids/services/grid.service.mjs +25 -0
- package/esm2022/lib/components/index.mjs +9 -0
- package/esm2022/lib/components/infinite-scroll/directive/infinite-scroll.directive.mjs +43 -0
- package/esm2022/lib/components/infinite-scroll/index.mjs +3 -0
- package/esm2022/lib/components/infinite-scroll/infinite-scroll.component.mjs +36 -0
- package/esm2022/lib/components/tabs/index.mjs +3 -0
- package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +37 -0
- package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +47 -0
- package/esm2022/lib/guards/auth/auth.guard.mjs +10 -0
- package/esm2022/lib/guards/index.mjs +2 -0
- package/esm2022/lib/interceptors/header/header.interceptor.mjs +20 -0
- package/esm2022/lib/interceptors/index.mjs +3 -0
- package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +45 -0
- package/esm2022/lib/interfaces/index.mjs +2 -0
- package/esm2022/lib/interfaces/user/user.interface.mjs +2 -0
- package/esm2022/lib/modules/index.mjs +3 -0
- package/esm2022/lib/modules/micro-frontend/index.mjs +2 -0
- package/esm2022/lib/modules/micro-frontend/utils/mf-bootstrap.util.mjs +55 -0
- package/esm2022/lib/modules/micro-frontend/utils/mf-global-state.util.mjs +14 -0
- package/esm2022/lib/modules/permission/directive/permission.directive.mjs +41 -0
- package/esm2022/lib/modules/permission/guards/permission.guard.mjs +26 -0
- package/esm2022/lib/modules/permission/index.mjs +7 -0
- package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +15 -0
- package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +52 -0
- package/esm2022/lib/modules/permission/permission.module.mjs +20 -0
- package/esm2022/lib/modules/permission/services/permission.service.mjs +47 -0
- package/esm2022/lib/resolvers/auth/auth.resolver.mjs +87 -0
- package/esm2022/lib/resolvers/index.mjs +2 -0
- package/esm2022/lib/services/auth/auth.service.mjs +145 -0
- package/esm2022/lib/services/country/country.service.mjs +43 -0
- package/esm2022/lib/services/currency/currency.service.mjs +40 -0
- package/esm2022/lib/services/index.mjs +5 -0
- package/esm2022/lib/services/profile/profile.service.mjs +71 -0
- package/esm2022/lib/utils/contrast-color-generator/contrast-color-generator.util.mjs +16 -0
- package/esm2022/lib/utils/form-error-message/form-error-message.util.mjs +21 -0
- package/esm2022/lib/utils/format-capitalize/format-capitalize.util.mjs +18 -0
- package/esm2022/lib/utils/index.mjs +4 -0
- package/esm2022/public-api.mjs +10 -0
- package/esm2022/unipin-angular-applet.mjs +2 -0
- package/fesm2022/unipin-angular-applet.mjs +156 -155
- package/fesm2022/unipin-angular-applet.mjs.map +1 -1
- package/lib/components/index.d.ts +1 -1
- package/lib/components/tabs/index.d.ts +2 -3
- package/package.json +4 -2
- package/public-api.d.ts +1 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, contentChildren, output } from '@angular/core';
|
|
2
|
+
import { IonicModule } from '@ionic/angular';
|
|
3
|
+
import { TabContentComponent } from '../tab-content/tab-content.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/router";
|
|
6
|
+
import * as i2 from "@ionic/angular";
|
|
7
|
+
export class TabGroupComponent {
|
|
8
|
+
constructor(router, activeRoute) {
|
|
9
|
+
this.router = router;
|
|
10
|
+
this.activeRoute = activeRoute;
|
|
11
|
+
this.onChange = output();
|
|
12
|
+
this.changed = output();
|
|
13
|
+
this.content = contentChildren(TabContentComponent);
|
|
14
|
+
}
|
|
15
|
+
ngAfterContentInit() {
|
|
16
|
+
const f = this.activeRoute.snapshot.fragment;
|
|
17
|
+
this.changeTab(f, this.content().findIndex(({ fragment }) => fragment === f));
|
|
18
|
+
}
|
|
19
|
+
changeTab(f, i) {
|
|
20
|
+
this.changed.emit({ fragment: f, index: i });
|
|
21
|
+
this.onChange.emit({ fragment: f, index: i });
|
|
22
|
+
this.router.navigate([], { relativeTo: this.activeRoute, fragment: f || undefined, replaceUrl: true });
|
|
23
|
+
let found = false;
|
|
24
|
+
this.content().forEach((tab) => {
|
|
25
|
+
if (tab.fragment !== f)
|
|
26
|
+
tab.toggleVisibility(false);
|
|
27
|
+
else {
|
|
28
|
+
found = true;
|
|
29
|
+
this.activeFragment = f;
|
|
30
|
+
tab.toggleVisibility(true);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
if (!found) {
|
|
34
|
+
this.content()[0].toggleVisibility(true);
|
|
35
|
+
this.activeFragment = this.content()[0].fragment;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabGroupComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TabGroupComponent, isStandalone: true, selector: "up-tab-group", outputs: { onChange: "onChange", changed: "changed" }, queries: [{ propertyName: "content", predicate: TabContentComponent, isSignal: true }], ngImport: i0, template: "<ion-segment \n [scrollable]=\"true\" \n [value]=\"activeFragment\"\n>\n @for (c of content(); track c.fragment) {\n <ion-segment-button\n [value]=\"c.fragment\" \n (click)=\"changeTab(c.fragment, $index)\"\n >\n @if (!c.customHeader) {\n {{ c.header }}\n }\n @else {\n <div \n class=\"{{ c.customHeader.nativeElement.className }}\"\n [innerHTML]=\"c.customHeader.nativeElement.innerHTML\"\n >\n </div>\n }\n </ion-segment-button>\n }\n</ion-segment>\n\n<ng-content />\n", styles: [":host{display:flex;flex-direction:column}ion-segment{display:flex;flex-shrink:0;padding-bottom:16px}ion-segment::-webkit-scrollbar{height:0}ion-segment-button{--color: #9E9E9E;--color-checked: #424242;--indicator-color: #ED6B26;border:none;height:34px;font-weight:400;min-width:100px;min-height:34px;width:fit-content;text-transform:none;letter-spacing:normal;border-radius:.25rem}ion-segment-button.segment-button-checked{font-weight:500}ion-segment-button::part(native){border-radius:4px}ion-segment-button::part(indicator-background){margin:auto;max-width:25%;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i2.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabGroupComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ standalone: true, selector: 'up-tab-group', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
44
|
+
IonicModule
|
|
45
|
+
], template: "<ion-segment \n [scrollable]=\"true\" \n [value]=\"activeFragment\"\n>\n @for (c of content(); track c.fragment) {\n <ion-segment-button\n [value]=\"c.fragment\" \n (click)=\"changeTab(c.fragment, $index)\"\n >\n @if (!c.customHeader) {\n {{ c.header }}\n }\n @else {\n <div \n class=\"{{ c.customHeader.nativeElement.className }}\"\n [innerHTML]=\"c.customHeader.nativeElement.innerHTML\"\n >\n </div>\n }\n </ion-segment-button>\n }\n</ion-segment>\n\n<ng-content />\n", styles: [":host{display:flex;flex-direction:column}ion-segment{display:flex;flex-shrink:0;padding-bottom:16px}ion-segment::-webkit-scrollbar{height:0}ion-segment-button{--color: #9E9E9E;--color-checked: #424242;--indicator-color: #ED6B26;border:none;height:34px;font-weight:400;min-width:100px;min-height:34px;width:fit-content;text-transform:none;letter-spacing:normal;border-radius:.25rem}ion-segment-button.segment-button-checked{font-weight:500}ion-segment-button::part(native){border-radius:4px}ion-segment-button::part(indicator-background){margin:auto;max-width:25%;border-radius:8px}\n"] }]
|
|
46
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy90YWJzL3RhYi1ncm91cC90YWItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYnMvdGFiLWdyb3VwL3RhYi1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV4SSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFhM0UsTUFBTSxPQUFPLGlCQUFpQjtJQWdDNUIsWUFDcUIsTUFBYyxFQUNkLFdBQTJCO1FBRDNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUF4QmhDLGFBQVEsR0FBdUMsTUFBTSxFQUFFLENBQUM7UUFReEQsWUFBTyxHQUF1QyxNQUFNLEVBQUUsQ0FBQztRQU12RCxZQUFPLEdBQTJDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBV25HLENBQUM7SUFFRSxrQkFBa0I7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBRTdDLElBQUksQ0FBQyxTQUFTLENBQ1osQ0FBQyxFQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDO0lBVU0sU0FBUyxDQUFDLENBQWdCLEVBQUUsQ0FBUztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXZHLElBQUksS0FBSyxHQUFZLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLENBQUM7Z0JBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQyxDQUFDO2dCQUNKLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDOytHQTFFVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1SkF3QnNELG1CQUFtQiw2Q0N4Q3ZHLDZwQkF3QkEsZ29CRFhJLFdBQVc7OzRGQUdGLGlCQUFpQjtrQkFWN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFdBQVc7cUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb250ZW50Q2hpbGRyZW4sIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVGFiQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL3RhYi1jb250ZW50L3RhYi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJzQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC10YWItZ3JvdXAnLFxuICBzdHlsZVVybDogJy4vdGFiLWdyb3VwLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgSW9uaWNNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFiR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSBVc2UgYGNoYW5nZWRgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAqIFxuICAgKiBBbiBvdXRwdXQgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGVtaXRzIGV2ZW50IG9mIHR5cGUgc3RyaW5nIG9yIG51bGwgd2hlbiB2YWx1ZSBjaGFuZ2VkLiBUaGlzXG4gICAqIG91dHB1dCB2YXJpYWJsZSwgd2hlbiBzdWJzY3JpYmVkIHRvLCBlbWl0cyBldmVudHMgY29udGFpbmluZyBpbnN0YW5jZXMgb2Ygc3RyaW5nIG9yIG51bGxcbiAgICogb3IgaXRzIHN1YmNsYXNzLlxuICAgKiBAdHlwZSB7T3V0cHV0RW1pdHRlclJlZjxUYWJzQ2hhbmdlZEV2ZW50Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkNoYW5nZTogT3V0cHV0RW1pdHRlclJlZjxUYWJzQ2hhbmdlZEV2ZW50PiA9IG91dHB1dCgpO1xuXG4gIC8qKlxuICAgKiBBbiBvdXRwdXQgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGVtaXRzIGV2ZW50IG9mIHR5cGUgc3RyaW5nIG9yIG51bGwgd2hlbiB2YWx1ZSBjaGFuZ2VkLiBUaGlzXG4gICAqIG91dHB1dCB2YXJpYWJsZSwgd2hlbiBzdWJzY3JpYmVkIHRvLCBlbWl0cyBldmVudHMgY29udGFpbmluZyBpbnN0YW5jZXMgb2Ygc3RyaW5nIG9yIG51bGxcbiAgICogb3IgaXRzIHN1YmNsYXNzLlxuICAgKiBAdHlwZSB7T3V0cHV0RW1pdHRlclJlZjxUYWJzQ2hhbmdlZEV2ZW50Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2VkOiBPdXRwdXRFbWl0dGVyUmVmPFRhYnNDaGFuZ2VkRXZlbnQ+ID0gb3V0cHV0KCk7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0YWIgY29udGVudCBjb21wb25lbnRzXG4gICAqIEB0eXBlIHtTaWduYWw8cmVhZG9ubHkgVGFiQ29udGVudENvbXBvbmVudFtdPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb250ZW50OiBTaWduYWw8cmVhZG9ubHkgVGFiQ29udGVudENvbXBvbmVudFtdPiA9IGNvbnRlbnRDaGlsZHJlbihUYWJDb250ZW50Q29tcG9uZW50KTtcblxuICAvKipcbiAgICogQSBmbGFnIHZhcmlhYmxlIHRoYXQgdXNlZCB0byBzZXQgdmFsdWUgb2YgaW9uLXNlZ21lbnQgZm9yIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgdGFiLlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHB1YmxpYyBhY3RpdmVGcmFnbWVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZHtcbiAgICBjb25zdCBmID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5mcmFnbWVudDtcbiAgICBcbiAgICB0aGlzLmNoYW5nZVRhYihcbiAgICAgIGYsXG4gICAgICB0aGlzLmNvbnRlbnQoKS5maW5kSW5kZXgoKHsgZnJhZ21lbnQgfSkgPT4gZnJhZ21lbnQgPT09IGYpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1ldGhvZCB3aGVuIHRoZSB0YWIgaXMgY2hhbmdlZCwgaXQgd2lsbCBlbWl0IG9uQ2hhbmdlIHZhcmlhYmxlLCBjaGFuZ2Ugcm91dGVcbiAgICogYmFzZWQgb24gZnJhZ21lbnQgdmFsdWUgaW4gcGFyYW0sIGFuZCBzZWFyY2ggaWYgdGFicyBoYXZlIHRoZSBmcmFnbWVudCB2YWx1ZS5cbiAgICogSWYgaXQncyBmb3VuZCwgaXQnbGwgc2hvdyB0aGUgdGFiJ3MgY29udGVudC4gSWYgaXQncyBub3QsIGl0J2xsIHNob3cgZW1wdHkgY29udGVudC5cbiAgICogXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gZiAtIENvbnRhaW4gdmFsdWUgb2YgdGhlIGZyYWdtZW50IHRoYXQgY3VycmVudGx5IHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGkgLSBGcmFnbWVudCBpbmRleC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VUYWIoZjogc3RyaW5nIHwgbnVsbCwgaTogbnVtYmVyKTogdm9pZHtcbiAgICB0aGlzLmNoYW5nZWQuZW1pdCh7IGZyYWdtZW50OiBmLCBpbmRleDogaSB9KTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyBmcmFnbWVudDogZiwgaW5kZXg6IGkgfSk7XG4gICAgXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSwgZnJhZ21lbnQ6IGYgfHwgdW5kZWZpbmVkLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xuXG4gICAgbGV0IGZvdW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZW50KCkuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICBpZiAodGFiLmZyYWdtZW50ICE9PSBmKSB0YWIudG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZUZyYWdtZW50ID0gZjtcbiAgICAgICAgdGFiLnRvZ2dsZVZpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB9ICAgICAgXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aGlzLmNvbnRlbnQoKVswXS50b2dnbGVWaXNpYmlsaXR5KHRydWUpO1xuICAgICAgdGhpcy5hY3RpdmVGcmFnbWVudCA9IHRoaXMuY29udGVudCgpWzBdLmZyYWdtZW50O1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1zZWdtZW50IFxuICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIiBcbiAgICBbdmFsdWVdPVwiYWN0aXZlRnJhZ21lbnRcIlxuPlxuICAgIEBmb3IgKGMgb2YgY29udGVudCgpOyB0cmFjayBjLmZyYWdtZW50KSB7XG4gICAgICAgIDxpb24tc2VnbWVudC1idXR0b25cbiAgICAgICAgICAgIFt2YWx1ZV09XCJjLmZyYWdtZW50XCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVGFiKGMuZnJhZ21lbnQsICRpbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKCFjLmN1c3RvbUhlYWRlcikge1xuICAgICAgICAgICAgICAgIHt7IGMuaGVhZGVyIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjLmN1c3RvbUhlYWRlci5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiYy5jdXN0b21IZWFkZXIubmF0aXZlRWxlbWVudC5pbm5lckhUTUxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgfVxuPC9pb24tc2VnbWVudD5cblxuPG5nLWNvbnRlbnQgLz5cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { AuthResolver } from '../../resolvers';
|
|
3
|
+
export const AuthGuard = () => {
|
|
4
|
+
const resolver = inject(AuthResolver);
|
|
5
|
+
if (!resolver.isUserLoggedIn()) {
|
|
6
|
+
location.href = '/auth/login';
|
|
7
|
+
}
|
|
8
|
+
return true;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvZ3VhcmRzL2F1dGgvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWtCLEdBQVksRUFBRTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFJlc29sdmVyIH0gZnJvbSAnLi4vLi4vcmVzb2x2ZXJzJztcblxuZXhwb3J0IGNvbnN0IEF1dGhHdWFyZDogKCkgPT4gYm9vbGVhbiA9ICgpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmVzb2x2ZXIgPSBpbmplY3QoQXV0aFJlc29sdmVyKTtcbiAgXG4gIGlmICghcmVzb2x2ZXIuaXNVc2VyTG9nZ2VkSW4oKSkge1xuICAgIGxvY2F0aW9uLmhyZWYgPSAnL2F1dGgvbG9naW4nO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AuthGuard } from './auth/auth.guard';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2d1YXJkcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBdXRoR3VhcmQgfSBmcm9tICcuL2F1dGgvYXV0aC5ndWFyZCc7XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { AuthService } from '../../services';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class HeaderInterceptor {
|
|
5
|
+
intercept(request, next) {
|
|
6
|
+
return next.handle(request.clone({
|
|
7
|
+
headers: request.headers,
|
|
8
|
+
setHeaders: {
|
|
9
|
+
authorization: AuthService.authToken,
|
|
10
|
+
project: 'unipin'
|
|
11
|
+
}
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
15
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor, decorators: [{
|
|
18
|
+
type: Injectable
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9pbnRlcmNlcHRvcnMvaGVhZGVyL2hlYWRlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHN0MsTUFBTSxPQUFPLGlCQUFpQjtJQUVyQixTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsVUFBVSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxXQUFXLENBQUMsU0FBUztnQkFDcEMsT0FBTyxFQUFFLFFBQVE7YUFDbEI7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7K0dBVlUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIZWFkZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+e1xuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0LmNsb25lKHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycyxcbiAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogQXV0aFNlcnZpY2UuYXV0aFRva2VuLFxuICAgICAgICBwcm9qZWN0OiAndW5pcGluJ1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { HeaderInterceptor } from './header/header.interceptor';
|
|
2
|
+
export { RefreshTokenInterceptor } from './refresh-token/refresh-token.interceptor';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2ludGVyY2VwdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEhlYWRlckludGVyY2VwdG9yIH0gZnJvbSAnLi9oZWFkZXIvaGVhZGVyLmludGVyY2VwdG9yJztcbmV4cG9ydCB7IFJlZnJlc2hUb2tlbkludGVyY2VwdG9yIH0gZnJvbSAnLi9yZWZyZXNoLXRva2VuL3JlZnJlc2gtdG9rZW4uaW50ZXJjZXB0b3InO1xuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { catchError, switchMap, throwError } from 'rxjs';
|
|
3
|
+
import { AuthService } from '../../services';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services";
|
|
6
|
+
export class RefreshTokenInterceptor {
|
|
7
|
+
constructor(authService) {
|
|
8
|
+
this.authService = authService;
|
|
9
|
+
}
|
|
10
|
+
intercept(request, next) {
|
|
11
|
+
return next.handle(request).pipe(catchError(({ error: { errors } }) => {
|
|
12
|
+
if (errors[0].extensions.code === 'USER_INVALID_TOKEN') {
|
|
13
|
+
return this.authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
|
|
14
|
+
const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
|
|
15
|
+
AuthService.authToken = accessToken;
|
|
16
|
+
AuthService.refreshToken = refreshToken;
|
|
17
|
+
localStorage.setItem('authToken', accessToken);
|
|
18
|
+
localStorage.setItem('refreshToken', refreshToken);
|
|
19
|
+
return next.handle(request.clone({
|
|
20
|
+
setHeaders: {
|
|
21
|
+
authorization: accessToken
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
}), catchError(() => {
|
|
25
|
+
localStorage.removeItem('roles');
|
|
26
|
+
localStorage.removeItem('userGuid');
|
|
27
|
+
localStorage.removeItem('authToken');
|
|
28
|
+
localStorage.removeItem('refreshToken');
|
|
29
|
+
AuthService.authToken = '';
|
|
30
|
+
AuthService.refreshToken = '';
|
|
31
|
+
this.authService.user = undefined;
|
|
32
|
+
location.href = '/auth/login';
|
|
33
|
+
return throwError(() => errors[0]);
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
return throwError(() => errors[0]);
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, decorators: [{
|
|
43
|
+
type: Injectable
|
|
44
|
+
}], ctorParameters: () => [{ type: i1.AuthService }] });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvaW50ZXJjZXB0b3JzL3JlZnJlc2gtdG9rZW4vcmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3QyxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDLFlBQ3FCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3pDLENBQUM7SUFFRSxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM5QixVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNuQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3ZELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRixTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSyxDQUFDLHdCQUF3QixDQUFDO29CQUVyRSxXQUFXLENBQUMsU0FBUyxHQUFHLFdBQVksQ0FBQztvQkFDckMsV0FBVyxDQUFDLFlBQVksR0FBRyxZQUFhLENBQUM7b0JBRXpDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVksQ0FBQyxDQUFDO29CQUNoRCxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxZQUFhLENBQUMsQ0FBQztvQkFFcEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQy9CLFVBQVUsRUFBRTs0QkFDVixhQUFhLEVBQUUsV0FBWTt5QkFDNUI7cUJBQ0YsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNwQyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNyQyxZQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUV4QyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztvQkFFbEMsUUFBUSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7b0JBQzlCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTdDVSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj57XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKCh7IGVycm9yOiB7IGVycm9ycyB9IH0pID0+IHtcbiAgICAgICAgaWYgKGVycm9yc1swXS5leHRlbnNpb25zLmNvZGUgPT09ICdVU0VSX0lOVkFMSURfVE9LRU4nKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKHsgcmVmcmVzaFRva2VuOiBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuIH0gPSBkYXRhIS5hdXRoTXNSZWZyZXNoQWNjZXNzVG9rZW47XG5cbiAgICAgICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gYWNjZXNzVG9rZW4hO1xuICAgICAgICAgICAgICBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW4hO1xuXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoVG9rZW4nLCBhY2Nlc3NUb2tlbiEpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuISk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGFjY2Vzc1Rva2VuIVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3JvbGVzJyk7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd1c2VyR3VpZCcpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXV0aFRva2VuJyk7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdyZWZyZXNoVG9rZW4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIEF1dGhTZXJ2aWNlLmF1dGhUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS51c2VyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAnL2F1dGgvbG9naW4nO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcnNbMF0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3JzWzBdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFVzZXIgfSBmcm9tICcuL3VzZXIvdXNlci5pbnRlcmZhY2UnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2ludGVyZmFjZXMvdXNlci91c2VyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgYmlydGhkYXk6IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmcgfCBudWxsO1xuICBlbWFpbDogc3RyaW5nO1xuICBnZW5kZXI6IHN0cmluZztcbiAgZ3VpZDogc3RyaW5nO1xuICBtb2JpbGVOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBob3RvOiBzdHJpbmc7XG4gIHJvbGVzOiB7XG4gICAgZ3VpZDogc3RyaW5nO1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgaXNJbnRlcm5hbDogYm9vbGVhbjtcbiAgfVtdO1xufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { bootstrap } from './micro-frontend';
|
|
2
|
+
export { PermissionDirective, PermissionGuard, PermissionModule, PermissionService, LoadingPage, UnauthorizedPage } from './permission';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9taWNyby1mcm9udGVuZCc7XG5leHBvcnQgeyBQZXJtaXNzaW9uRGlyZWN0aXZlLCBQZXJtaXNzaW9uR3VhcmQsIFBlcm1pc3Npb25Nb2R1bGUsIFBlcm1pc3Npb25TZXJ2aWNlLCBMb2FkaW5nUGFnZSwgVW5hdXRob3JpemVkUGFnZSB9IGZyb20gJy4vcGVybWlzc2lvbic7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { bootstrap } from './utils/mf-bootstrap.util';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvbWljcm8tZnJvbnRlbmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi91dGlscy9tZi1ib290c3RyYXAudXRpbCc7XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { enableProdMode, NgZone } from '@angular/core';
|
|
2
|
+
import { Location } from '@angular/common';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { bootstrapApplication, createApplication } from '@angular/platform-browser';
|
|
5
|
+
import { getGlobalStateSlice, setGlobalStateSlice } from './mf-global-state.util';
|
|
6
|
+
import { createCustomElement } from '@angular/elements';
|
|
7
|
+
function getNgZone() {
|
|
8
|
+
return (getGlobalStateSlice((state) => state.ngZone));
|
|
9
|
+
}
|
|
10
|
+
export function shareNgZone(zone) {
|
|
11
|
+
setGlobalStateSlice({ ngZone: zone });
|
|
12
|
+
}
|
|
13
|
+
export function bootstrap(component, options, config) {
|
|
14
|
+
options.production && enableProdMode();
|
|
15
|
+
if (options.appType === 'shell') {
|
|
16
|
+
bootstrapApplication(component, config).then((ref) => {
|
|
17
|
+
shareShellZone(ref.injector);
|
|
18
|
+
});
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!getNgZone() && isLocalhost()) {
|
|
22
|
+
bootstrapApplication(component, config).then((ref) => {
|
|
23
|
+
connectMicroFrontendRouter(ref.injector);
|
|
24
|
+
});
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
(async () => {
|
|
28
|
+
config.providers.push({ provide: NgZone, useValue: getNgZone() });
|
|
29
|
+
const app = await createApplication(config);
|
|
30
|
+
customElements.define(options.elementName, createCustomElement(component, { injector: app.injector }));
|
|
31
|
+
connectMicroFrontendRouter(app.injector);
|
|
32
|
+
})();
|
|
33
|
+
}
|
|
34
|
+
function shareShellZone(injector) {
|
|
35
|
+
const ngZone = injector.get(NgZone, null);
|
|
36
|
+
if (!ngZone) {
|
|
37
|
+
console.warn('No NgZone to share found');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
shareNgZone(ngZone);
|
|
41
|
+
}
|
|
42
|
+
function connectMicroFrontendRouter(injector) {
|
|
43
|
+
const router = injector.get(Router);
|
|
44
|
+
const location = injector.get(Location);
|
|
45
|
+
if (!router) {
|
|
46
|
+
console.warn('No router to connect found');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
router.navigateByUrl(location.path() + window.location.hash);
|
|
50
|
+
}
|
|
51
|
+
function isLocalhost() {
|
|
52
|
+
const hostname = window.location.hostname;
|
|
53
|
+
return hostname === 'localhost' || hostname === '127.0.0.1';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWYtYm9vdHN0cmFwLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvbWljcm8tZnJvbnRlbmQvdXRpbHMvbWYtYm9vdHN0cmFwLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixjQUFjLEVBQVksTUFBTSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFVeEQsU0FBUyxTQUFTO0lBQ2hCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQXlCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsbUJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBSSxTQUFrQixFQUFFLE9BQWdCLEVBQUUsTUFBeUI7SUFDMUYsT0FBTyxDQUFDLFVBQVUsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUV2QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDaEMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ25ELGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDVixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVsRSxNQUFNLEdBQUcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLGNBQWMsQ0FBQyxNQUFNLENBQVUsT0FBTyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoSCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxRQUFrQjtJQUN4QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDekMsT0FBTztJQUNULENBQUM7SUFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsUUFBa0I7SUFDcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMzQyxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWcsIGVuYWJsZVByb2RNb2RlLCBJbmplY3RvciwgTmdab25lLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYm9vdHN0cmFwQXBwbGljYXRpb24sIGNyZWF0ZUFwcGxpY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBnZXRHbG9iYWxTdGF0ZVNsaWNlLCBzZXRHbG9iYWxTdGF0ZVNsaWNlIH0gZnJvbSAnLi9tZi1nbG9iYWwtc3RhdGUudXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVDdXN0b21FbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvZWxlbWVudHMnO1xuXG5leHBvcnQgdHlwZSBBcHBUeXBlID0gJ3NoZWxsJyB8ICdtaWNyb2Zyb250ZW5kJztcblxuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgcHJvZHVjdGlvbjogYm9vbGVhbjtcbiAgYXBwVHlwZTogQXBwVHlwZTtcbiAgZWxlbWVudE5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBnZXROZ1pvbmUoKTogTmdab25le1xuICByZXR1cm4gKGdldEdsb2JhbFN0YXRlU2xpY2UoKHN0YXRlOiB7IG5nWm9uZTogTmdab25lIH0pID0+IHN0YXRlLm5nWm9uZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hhcmVOZ1pvbmUoem9uZTogTmdab25lKTogdm9pZHtcbiAgc2V0R2xvYmFsU3RhdGVTbGljZSh7IG5nWm9uZTogem9uZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcDxNPihjb21wb25lbnQ6IFR5cGU8TT4sIG9wdGlvbnM6IE9wdGlvbnMsIGNvbmZpZzogQXBwbGljYXRpb25Db25maWcpOiB2b2lke1xuICBvcHRpb25zLnByb2R1Y3Rpb24gJiYgZW5hYmxlUHJvZE1vZGUoKTtcblxuICBpZiAob3B0aW9ucy5hcHBUeXBlID09PSAnc2hlbGwnKSB7XG4gICAgYm9vdHN0cmFwQXBwbGljYXRpb24oY29tcG9uZW50LCBjb25maWcpLnRoZW4oKHJlZikgPT4ge1xuICAgICAgc2hhcmVTaGVsbFpvbmUocmVmLmluamVjdG9yKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWdldE5nWm9uZSgpICYmIGlzTG9jYWxob3N0KCkpIHtcbiAgICBib290c3RyYXBBcHBsaWNhdGlvbihjb21wb25lbnQsIGNvbmZpZykudGhlbigocmVmKSA9PiB7XG4gICAgICBjb25uZWN0TWljcm9Gcm9udGVuZFJvdXRlcihyZWYuaW5qZWN0b3IpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgKGFzeW5jICgpID0+IHtcbiAgICBjb25maWcucHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBOZ1pvbmUsIHVzZVZhbHVlOiBnZXROZ1pvbmUoKSB9KTtcblxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IGNyZWF0ZUFwcGxpY2F0aW9uKGNvbmZpZyk7XG4gICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKDxzdHJpbmc+IG9wdGlvbnMuZWxlbWVudE5hbWUsIGNyZWF0ZUN1c3RvbUVsZW1lbnQoY29tcG9uZW50LCB7IGluamVjdG9yOiBhcHAuaW5qZWN0b3IgfSkpO1xuXG4gICAgY29ubmVjdE1pY3JvRnJvbnRlbmRSb3V0ZXIoYXBwLmluamVjdG9yKTtcbiAgfSkoKTtcbn1cblxuZnVuY3Rpb24gc2hhcmVTaGVsbFpvbmUoaW5qZWN0b3I6IEluamVjdG9yKTogdm9pZHtcbiAgY29uc3Qgbmdab25lID0gaW5qZWN0b3IuZ2V0KE5nWm9uZSwgbnVsbCk7XG4gIGlmICghbmdab25lKSB7XG4gICAgY29uc29sZS53YXJuKCdObyBOZ1pvbmUgdG8gc2hhcmUgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2hhcmVOZ1pvbmUobmdab25lKTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdE1pY3JvRnJvbnRlbmRSb3V0ZXIoaW5qZWN0b3I6IEluamVjdG9yKTogdm9pZHtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gIGNvbnN0IGxvY2F0aW9uID0gaW5qZWN0b3IuZ2V0KExvY2F0aW9uKTtcblxuICBpZiAoIXJvdXRlcikge1xuICAgIGNvbnNvbGUud2FybignTm8gcm91dGVyIHRvIGNvbm5lY3QgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcm91dGVyLm5hdmlnYXRlQnlVcmwobG9jYXRpb24ucGF0aCgpICsgd2luZG93LmxvY2F0aW9uLmhhc2gpO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsaG9zdCgpOiBib29sZWFue1xuICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgcmV0dXJuIGhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBob3N0bmFtZSA9PT0gJzEyNy4wLjAuMSc7XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const packageNamespace = '@angular-architects/module-federation-tools';
|
|
2
|
+
function getGlobalState() {
|
|
3
|
+
const globalState = window;
|
|
4
|
+
globalState[packageNamespace] = globalState[packageNamespace] || {};
|
|
5
|
+
return globalState[packageNamespace];
|
|
6
|
+
}
|
|
7
|
+
export function getGlobalStateSlice(selector) {
|
|
8
|
+
const globalState = getGlobalState();
|
|
9
|
+
return selector ? selector(globalState) : globalState;
|
|
10
|
+
}
|
|
11
|
+
export function setGlobalStateSlice(slice) {
|
|
12
|
+
return Object.assign(getGlobalState(), slice);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWYtZ2xvYmFsLXN0YXRlLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvbWljcm8tZnJvbnRlbmQvdXRpbHMvbWYtZ2xvYmFsLXN0YXRlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsNkNBQTZDLENBQUM7QUFFOUUsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sV0FBVyxHQUFHLE1BQThDLENBQUM7SUFDbkUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUssRUFBbUIsQ0FBQztJQUV0RixPQUFPLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFLRCxNQUFNLFVBQVUsbUJBQW1CLENBQU8sUUFBZ0M7SUFDeEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFLLENBQUM7SUFDeEMsT0FBTyxRQUFRLENBQUEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQW1CLEtBQVE7SUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcGFja2FnZU5hbWVzcGFjZSA9ICdAYW5ndWxhci1hcmNoaXRlY3RzL21vZHVsZS1mZWRlcmF0aW9uLXRvb2xzJztcblxuZnVuY3Rpb24gZ2V0R2xvYmFsU3RhdGU8VD4oKTogVCB7XG4gIGNvbnN0IGdsb2JhbFN0YXRlID0gd2luZG93IGFzIHVua25vd24gYXMgeyBbcGFja2FnZU5hbWVzcGFjZV06IFQgfTtcbiAgZ2xvYmFsU3RhdGVbcGFja2FnZU5hbWVzcGFjZV0gPSBnbG9iYWxTdGF0ZVtwYWNrYWdlTmFtZXNwYWNlXSB8fCAoe30gYXMgdW5rbm93biBhcyBUKTtcbiAgXG4gIHJldHVybiBnbG9iYWxTdGF0ZVtwYWNrYWdlTmFtZXNwYWNlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbFN0YXRlU2xpY2U8VD4oKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxTdGF0ZVNsaWNlPFQsIFI+KHNlbGVjdG9yOiAoZ2xvYmFsU3RhdGU6IFQpID0+IFIpOiBSO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsU3RhdGVTbGljZTxULCBSPihzZWxlY3Rvcj86IChnbG9iYWxTdGF0ZTogVCkgPT4gUik6IFIgfCBUIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGUgPSBnZXRHbG9iYWxTdGF0ZTxUPigpO1xuICByZXR1cm4gc2VsZWN0b3I/IHNlbGVjdG9yKGdsb2JhbFN0YXRlKSA6IGdsb2JhbFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R2xvYmFsU3RhdGVTbGljZTxUIGV4dGVuZHMgb2JqZWN0PihzbGljZTogVCk6IFQge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRHbG9iYWxTdGF0ZTxUPigpLCBzbGljZSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../services/permission.service";
|
|
4
|
+
export class PermissionDirective {
|
|
5
|
+
set hasPermission(m) {
|
|
6
|
+
this.module = m;
|
|
7
|
+
}
|
|
8
|
+
set hasPermissionScope(s) {
|
|
9
|
+
this.scope = s;
|
|
10
|
+
}
|
|
11
|
+
set hasPermissionType(t) {
|
|
12
|
+
;
|
|
13
|
+
if (this.permissionService.checkPermission(this.scope, this.module, t)) {
|
|
14
|
+
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
this.viewContainer.clear();
|
|
18
|
+
}
|
|
19
|
+
constructor(templateRef, viewContainer, permissionService) {
|
|
20
|
+
this.templateRef = templateRef;
|
|
21
|
+
this.viewContainer = viewContainer;
|
|
22
|
+
this.permissionService = permissionService;
|
|
23
|
+
this.scope = 'GLOBAL';
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission", hasPermissionScope: "hasPermissionScope", hasPermissionType: "hasPermissionType" }, ngImport: i0 }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
standalone: true,
|
|
32
|
+
selector: '[hasPermission]'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.PermissionService }], propDecorators: { hasPermission: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}], hasPermissionScope: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], hasPermissionType: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}] } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9kaXJlY3RpdmUvcGVybWlzc2lvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDOzs7QUFnQmhGLE1BQU0sT0FBTyxtQkFBbUI7SUFxQjlCLElBQWEsYUFBYSxDQUFDLENBQVM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQU1ELElBQWEsa0JBQWtCLENBQUMsQ0FBUztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBTUQsSUFBYSxpQkFBaUIsQ0FBQyxDQUFTO1FBQUcsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUNxQixXQUE2QixFQUM3QixhQUErQixFQUMvQixpQkFBb0M7UUFGcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbkMvQyxVQUFLLEdBQVcsUUFBUSxDQUFDO0lBb0MvQixDQUFDOytHQWxETSxtQkFBbUI7bUdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFKL0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7K0lBc0JjLGFBQWE7c0JBQXpCLEtBQUs7Z0JBUU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQVFPLGlCQUFpQjtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBQZXJtaXNzaW9uRGlyZWN0aXZlYCBpcyBhIGRpcmVjdGl2ZSB0aGF0IGNvbmRpdGlvbmFsbHkgcmVuZGVycyBjb250ZW50IGJhc2VkIG9uIHVzZXIgcGVybWlzc2lvbnMuXG4gKiBgU2NvcGVgIHBhcmFtIGlzIGRlZmF1bHQgdG8gYEdMT0JBTGBcbiAqIEBzZWxlY3RvciAnW2hhc1Blcm1pc3Npb25dJ1xuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxkaXYgKmhhc1Blcm1pc3Npb249XCInUE9TVF9BVURJVCc7IHR5cGU6ICdSRUFEJzsgc2NvcGU6ICdNRVJDSEFOVCdcIj48L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbaGFzUGVybWlzc2lvbl0nXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25EaXJlY3RpdmUge1xuICBcbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgbmFtZSBmb3Igd2hpY2ggcGVybWlzc2lvbnMgYXJlIGJlaW5nIGNoZWNrZWQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHtudWxsfVxuICAgKi9cbiAgcHJvdGVjdGVkIG1vZHVsZSE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb24gc2NvcGUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHsnR0xPQkFMJ31cbiAgICovXG4gIHByb3RlY3RlZCBzY29wZTogc3RyaW5nID0gJ0dMT0JBTCc7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1vZHVsZSBuYW1lIGZvciB3aGljaCBwZXJtaXNzaW9ucyBhcmUgYmVpbmcgY2hlY2tlZC5cbiAgICogQGV4YW1wbGUgJ1BPU1RfQVVESVQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbSAtIFRoZSBtb2R1bGUgbmFtZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBoYXNQZXJtaXNzaW9uKG06IHN0cmluZykge1xuICAgIHRoaXMubW9kdWxlID0gbTsgXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGVybWlzc2lvbiBzY29wZS4gRGVmYXVsdCBpcyAnR0xPQkFMJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgcGVybWlzc2lvbiBzY29wZS5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBoYXNQZXJtaXNzaW9uU2NvcGUoczogc3RyaW5nKSB7IFxuICAgIHRoaXMuc2NvcGUgPSBzOyBcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwZXJtaXNzaW9uIHR5cGUgYW5kIGNvbmRpdGlvbmFsbHkgcmVuZGVycyBjb250ZW50IGJhc2VkIG9uIHVzZXIgcGVybWlzc2lvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0IC0gVGhlIHBlcm1pc3Npb24gdHlwZSwgZS5nLiwgJ1JFQUQnLCAnV1JJVEUnLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGhhc1Blcm1pc3Npb25UeXBlKHQ6IHN0cmluZykgeztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uU2VydmljZS5jaGVja1Blcm1pc3Npb24odGhpcy5zY29wZSwgdGhpcy5tb2R1bGUsIHQpKSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHByb3RlY3RlZCByZWFkb25seSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7IH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Location } from '@angular/common';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { PermissionService } from '../services/permission.service';
|
|
5
|
+
export const PermissionGuard = (route) => {
|
|
6
|
+
const router = inject(Router);
|
|
7
|
+
const location = inject(Location);
|
|
8
|
+
const permissionService = inject(PermissionService);
|
|
9
|
+
const permissions = route.data['requiredPermissions'];
|
|
10
|
+
if (!permissions || permissions.length === 0)
|
|
11
|
+
throw new Error('Invalid config: requiredPermissions is a required parameter in route data for PermissionGuard');
|
|
12
|
+
if (!permissionService.isInitiated) {
|
|
13
|
+
router.navigate(['loading'], { queryParams: { url: `${location.path() + window.location.hash}` } });
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (permissions) {
|
|
17
|
+
for (let i = 0; i < permissions.length; i++) {
|
|
18
|
+
const { scope, module, type } = permissions[i];
|
|
19
|
+
if (permissionService.checkPermission(scope, module, type))
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
router.navigate(['401']);
|
|
24
|
+
return false;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvbW9kdWxlcy9wZXJtaXNzaW9uL2d1YXJkcy9wZXJtaXNzaW9uLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBeUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFrQixDQUFDLEtBQTZCLEVBQVcsRUFBRTtJQUV2RixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sV0FBVyxHQUFzRCxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFekcsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtGQUErRixDQUFDLENBQUM7SUFFL0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBRSxTQUFTLENBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUMzQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGVGbiwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFBlcm1pc3Npb25HdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGJvb2xlYW4gPT4ge1xuICBcbiAgY29uc3Qgcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3QgbG9jYXRpb246IExvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgY29uc3QgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0KFBlcm1pc3Npb25TZXJ2aWNlKTtcblxuICBjb25zdCBwZXJtaXNzaW9uczogeyBzY29wZTogc3RyaW5nLCBtb2R1bGU6IHN0cmluZywgdHlwZTogc3RyaW5nIH1bXSA9IHJvdXRlLmRhdGFbJ3JlcXVpcmVkUGVybWlzc2lvbnMnXTtcbiAgXG4gIGlmICghcGVybWlzc2lvbnMgfHwgcGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29uZmlnOiByZXF1aXJlZFBlcm1pc3Npb25zIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIHJvdXRlIGRhdGEgZm9yIFBlcm1pc3Npb25HdWFyZCcpO1xuXG4gIGlmICghcGVybWlzc2lvblNlcnZpY2UuaXNJbml0aWF0ZWQpIHtcbiAgICByb3V0ZXIubmF2aWdhdGUoWyAnbG9hZGluZycgXSwgeyBxdWVyeVBhcmFtczogeyB1cmw6IGAkeyBsb2NhdGlvbi5wYXRoKCkgKyB3aW5kb3cubG9jYXRpb24uaGFzaCB9YCB9IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwZXJtaXNzaW9ucykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVybWlzc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgc2NvcGUsIG1vZHVsZSwgdHlwZSB9ID0gcGVybWlzc2lvbnNbaV07XG4gICAgICBpZiAocGVybWlzc2lvblNlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKHNjb3BlLCBtb2R1bGUsIHR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByb3V0ZXIubmF2aWdhdGUoWyAnNDAxJyBdKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { LoadingPage } from './pages/loading/loading.page';
|
|
2
|
+
export { PermissionDirective } from './directive/permission.directive';
|
|
3
|
+
export { PermissionGuard } from './guards/permission.guard';
|
|
4
|
+
export { PermissionModule } from './permission.module';
|
|
5
|
+
export { PermissionService } from './services/permission.service';
|
|
6
|
+
export { UnauthorizedPage } from './pages/401/unauthorized.page';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTG9hZGluZ1BhZ2UgfSBmcm9tICcuL3BhZ2VzL2xvYWRpbmcvbG9hZGluZy5wYWdlJztcbmV4cG9ydCB7IFBlcm1pc3Npb25EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZS9wZXJtaXNzaW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBQZXJtaXNzaW9uR3VhcmQgfSBmcm9tICcuL2d1YXJkcy9wZXJtaXNzaW9uLmd1YXJkJztcbmV4cG9ydCB7IFBlcm1pc3Npb25Nb2R1bGUgfSBmcm9tICcuL3Blcm1pc3Npb24ubW9kdWxlJztcbmV4cG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgVW5hdXRob3JpemVkUGFnZSB9IGZyb20gJy4vcGFnZXMvNDAxL3VuYXV0aG9yaXplZC5wYWdlJztcbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { IonicModule } from '@ionic/angular';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@ionic/angular";
|
|
5
|
+
export class UnauthorizedPage {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UnauthorizedPage, isStandalone: true, selector: "up-unauthorized", host: { classAttribute: "d-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto" }, ngImport: i0, template: "<ion-icon name=\"lock-closed\" class=\"mb-4\" />\n<h3 class=\"text-center\">Oops! You're not authorized to access this page.</h3>\n<p class=\"text-center\">Please log in or re-check your permissions.</p>\n", styles: ["ion-icon{font-size:5rem}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UnauthorizedPage, decorators: [{
|
|
10
|
+
type: Component,
|
|
11
|
+
args: [{ standalone: true, selector: 'up-unauthorized', host: {
|
|
12
|
+
class: 'd-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto'
|
|
13
|
+
}, imports: [IonicModule], template: "<ion-icon name=\"lock-closed\" class=\"mb-4\" />\n<h3 class=\"text-center\">Oops! You're not authorized to access this page.</h3>\n<p class=\"text-center\">Please log in or re-check your permissions.</p>\n", styles: ["ion-icon{font-size:5rem}\n"] }]
|
|
14
|
+
}] });
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hdXRob3JpemVkLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9wYWdlcy80MDEvdW5hdXRob3JpemVkLnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9wYWdlcy80MDEvdW5hdXRob3JpemVkLnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBWTdDLE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHdMQ2I3QiwrTUFHQSxtRkRRYSxXQUFXOzs0RkFFWCxnQkFBZ0I7a0JBVjVCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGlCQUFpQixRQUdyQjt3QkFDSixLQUFLLEVBQUUsaUZBQWlGO3FCQUN6RixXQUNRLENBQUUsV0FBVyxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtdW5hdXRob3JpemVkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYXV0aG9yaXplZC5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91bmF1dGhvcml6ZWQucGFnZS5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMCB3LTc1IG14LWF1dG8nXG4gIH0sXG4gIGltcG9ydHM6IFsgSW9uaWNNb2R1bGUgXVxufSlcbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRQYWdlIHsgfVxuIiwiPGlvbi1pY29uIG5hbWU9XCJsb2NrLWNsb3NlZFwiIGNsYXNzPVwibWItNFwiIC8+XG48aDMgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPk9vcHMhIFlvdSdyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhpcyBwYWdlLjwvaDM+XG48cCBjbGFzcz1cInRleHQtY2VudGVyXCI+UGxlYXNlIGxvZyBpbiBvciByZS1jaGVjayB5b3VyIHBlcm1pc3Npb25zLjwvcD5cbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { IonicModule } from '@ionic/angular';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "../../services/permission.service";
|
|
6
|
+
import * as i3 from "@ionic/angular";
|
|
7
|
+
export class LoadingPage {
|
|
8
|
+
constructor(config, router, route, permissionService) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.router = router;
|
|
11
|
+
this.route = route;
|
|
12
|
+
this.permissionService = permissionService;
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
const subjectGuid = localStorage.getItem(this.config.subjectGuidStorageKey || 'userGuid');
|
|
16
|
+
if (!subjectGuid) {
|
|
17
|
+
this.router.navigate(['401']);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const permCodeList = [];
|
|
21
|
+
this.sub = this.permissionService.getPermissions({ pageSize: 1000, subjectGuid, permModule: this.config.permModule, permType: this.config.permType }, this.config.fetchPolicy).subscribe({
|
|
22
|
+
next: ({ data: { authMsPermission: { data } } }) => {
|
|
23
|
+
data.forEach(({ permCode }) => {
|
|
24
|
+
if (!permCode)
|
|
25
|
+
return;
|
|
26
|
+
permCodeList.push(permCode);
|
|
27
|
+
});
|
|
28
|
+
this.permissionService.isInitiated = true;
|
|
29
|
+
this.permissionService.setPermission(permCodeList, this.config.permModule);
|
|
30
|
+
this.router.navigateByUrl(this.route.snapshot.queryParamMap.get('url') ?? '');
|
|
31
|
+
},
|
|
32
|
+
error: () => this.router.navigate(['401'])
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
this.sub?.unsubscribe();
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingPage, deps: [{ token: 'LOADING_CONFIG' }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "d-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto" }, ngImport: i0, template: "<ion-spinner class=\"mb-4\" />\n<h3 class=\"text-center\">Please wait, we're preparing the applet. Drink water or coffee while waiting.</h3>\n", styles: ["ion-spinner{height:50px;width:50px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingPage, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ standalone: true, selector: 'up-loading', host: {
|
|
44
|
+
class: 'd-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto'
|
|
45
|
+
}, imports: [
|
|
46
|
+
IonicModule
|
|
47
|
+
], template: "<ion-spinner class=\"mb-4\" />\n<h3 class=\"text-center\">Please wait, we're preparing the applet. Drink water or coffee while waiting.</h3>\n", styles: ["ion-spinner{height:50px;width:50px}\n"] }]
|
|
48
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
49
|
+
type: Inject,
|
|
50
|
+
args: ['LOADING_CONFIG']
|
|
51
|
+
}] }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PermissionService }] });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9tb2R1bGVzL3Blcm1pc3Npb24vcGFnZXMvbG9hZGluZy9sb2FkaW5nLnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9wYWdlcy9sb2FkaW5nL2xvYWRpbmcucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUdyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBZ0I3QyxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUM0QyxNQUt6QyxFQUNrQixNQUFjLEVBQ2QsS0FBcUIsRUFDckIsaUJBQW9DO1FBUmIsV0FBTSxHQUFOLE1BQU0sQ0FLL0M7UUFDa0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDckQsQ0FBQztJQUVFLFFBQVE7UUFDYixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLElBQUksVUFBVSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkwsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFDLEVBQUMsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsUUFBUTt3QkFBRSxPQUFPO29CQUV0QixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBRyxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUUsS0FBSyxDQUFFLENBQUM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDOytHQTNDVSxXQUFXLGtCQUtaLGdCQUFnQjttR0FMZixXQUFXLG1MQ25CeEIsZ0pBRUEsOEZEY0ksV0FBVzs7NEZBR0YsV0FBVztrQkFadkIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sWUFBWSxRQUdoQjt3QkFDSixLQUFLLEVBQUUsaUZBQWlGO3FCQUN6RixXQUNRO3dCQUNQLFdBQVc7cUJBQ1o7OzBCQU9FLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGZXRjaFBvbGljeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1sb2FkaW5nJyxcbiAgc3R5bGVVcmw6ICcuL2xvYWRpbmcucGFnZS5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWRpbmcucGFnZS5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwIHctNzUgbXgtYXV0bydcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIElvbmljTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTG9hZGluZ1BhZ2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIHN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdMT0FESU5HX0NPTkZJRycpIHB1YmxpYyByZWFkb25seSBjb25maWc6IHtcbiAgICAgIHBlcm1Nb2R1bGU6IHN0cmluZ1tdLFxuICAgICAgcGVybVR5cGU6IHN0cmluZ1tdLFxuICAgICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeVxuICAgICAgc3ViamVjdEd1aWRTdG9yYWdlS2V5Pzogc3RyaW5nXG4gICAgfSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWR7XG4gICAgY29uc3Qgc3ViamVjdEd1aWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbmZpZy5zdWJqZWN0R3VpZFN0b3JhZ2VLZXkgfHwgJ3VzZXJHdWlkJyk7XG4gICAgaWYgKCFzdWJqZWN0R3VpZCkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyAnNDAxJyBdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGVybUNvZGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMuc3ViID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5nZXRQZXJtaXNzaW9ucyh7IHBhZ2VTaXplOiAxMDAwLCBzdWJqZWN0R3VpZCwgcGVybU1vZHVsZTogdGhpcy5jb25maWcucGVybU1vZHVsZSwgcGVybVR5cGU6IHRoaXMuY29uZmlnLnBlcm1UeXBlIH0sIHRoaXMuY29uZmlnLmZldGNoUG9saWN5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHsgZGF0YTogeyBhdXRoTXNQZXJtaXNzaW9uOiB7IGRhdGEgfX19KSA9PiB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgoeyBwZXJtQ29kZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKCFwZXJtQ29kZSkgcmV0dXJuO1xuXG4gICAgICAgICAgcGVybUNvZGVMaXN0LnB1c2gocGVybUNvZGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzSW5pdGlhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5zZXRQZXJtaXNzaW9uKHBlcm1Db2RlTGlzdCwgdGhpcy5jb25maWcucGVybU1vZHVsZSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCd1cmwnKT8/ICcnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyAnNDAxJyBdKVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWR7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxpb24tc3Bpbm5lciBjbGFzcz1cIm1iLTRcIiAvPlxuPGgzIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5QbGVhc2Ugd2FpdCwgd2UncmUgcHJlcGFyaW5nIHRoZSBhcHBsZXQuIERyaW5rIHdhdGVyIG9yIGNvZmZlZSB3aGlsZSB3YWl0aW5nLjwvaDM+XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { PermissionDirective } from './directive/permission.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class PermissionModule {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, imports: [PermissionDirective], exports: [PermissionDirective] }); }
|
|
7
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule }); }
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
imports: [
|
|
13
|
+
PermissionDirective
|
|
14
|
+
],
|
|
15
|
+
exports: [
|
|
16
|
+
PermissionDirective
|
|
17
|
+
]
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL21vZHVsZXMvcGVybWlzc2lvbi9wZXJtaXNzaW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQWF2RSxNQUFNLE9BQU8sZ0JBQWdCOytHQUFoQixnQkFBZ0I7Z0hBQWhCLGdCQUFnQixZQU56QixtQkFBbUIsYUFHbkIsbUJBQW1CO2dIQUdWLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFSNUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3FCQUNwQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmUvcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgMTguNy4wIHJlbGVhc2UuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBQZXJtaXNzaW9uRGlyZWN0aXZlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBQZXJtaXNzaW9uRGlyZWN0aXZlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { gql } from 'apollo-angular';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "apollo-angular";
|
|
6
|
+
export class PermissionService {
|
|
7
|
+
constructor(apollo) {
|
|
8
|
+
this.apollo = apollo;
|
|
9
|
+
this.permModules = new Subject();
|
|
10
|
+
this.isInitiated = false;
|
|
11
|
+
this.permissions = new Map();
|
|
12
|
+
}
|
|
13
|
+
setPermission(permCodes, permModules = []) {
|
|
14
|
+
for (let i = 0; i < permCodes.length; i++)
|
|
15
|
+
this.permissions.set(permCodes[i], true);
|
|
16
|
+
this.permModules.next(permModules);
|
|
17
|
+
}
|
|
18
|
+
checkPermission(scope, module, type) {
|
|
19
|
+
if (this.permissions.has(`${scope}.${module}.ADMIN`))
|
|
20
|
+
return true;
|
|
21
|
+
if (this.permissions.has(`${scope}.${module}.${type}`))
|
|
22
|
+
return true;
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
getPermissions(filter, fetchPolicy) {
|
|
26
|
+
return this.apollo.query({
|
|
27
|
+
fetchPolicy,
|
|
28
|
+
variables: { filter },
|
|
29
|
+
query: gql `
|
|
30
|
+
query QueryPermission($filter: PermissionFilter!) {
|
|
31
|
+
authMsPermission(filter: $filter) {
|
|
32
|
+
data { permCode }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionService, decorators: [{
|
|
42
|
+
type: Injectable,
|
|
43
|
+
args: [{
|
|
44
|
+
providedIn: 'root'
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: () => [{ type: i1.Apollo }] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9tb2R1bGVzL3Blcm1pc3Npb24vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQVUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03QyxNQUFNLE9BQU8saUJBQWlCO0lBbUI1QixZQUNxQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVhuQixnQkFBVyxHQUFzQixJQUFJLE9BQU8sRUFBWSxDQUFDO1FBT2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFJcEQsQ0FBQztJQU9FLGFBQWEsQ0FBQyxTQUFtQixFQUFFLGNBQXdCLEVBQUU7UUFDbEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFTTSxlQUFlLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxJQUFZO1FBQ2hFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBSSxLQUFNLElBQUssTUFBTyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUksS0FBTSxJQUFLLE1BQU8sSUFBSyxJQUFLLEVBQUUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU9NLGNBQWMsQ0FBQyxNQUF3QixFQUFFLFdBQXlCO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdkIsV0FBVztZQUNYLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRTtZQUNyQixLQUFLLEVBQUUsR0FBRyxDQUFBOzs7Ozs7T0FNVDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBaEVVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcG9sbG9RdWVyeVJlc3VsdCwgRmV0Y2hQb2xpY3kgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgQXBwUGVybURmbiwgUGVybWlzc2lvbkZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2dyYXBocWwvZ2VuZXJhdGVkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2Uge1xuXG4gIC8qKlxuICAgKiBBIHJlYWRvbmx5IHZhcmlhYmxlIHRoYXQgdXNlZCB0byBzdG9yZSBwZXJtaXNzaW9uIG1vZHVsZXMgaW4gYW4gYXBwbGV0IHRoZW4gY2hlY2sgaWYgdGhlIHVzZXJcbiAgICogaGFzIHRoZSBwZXJtaXNzaW9uIG9yIG5vdC4gVGhpcyB2YXJpYWJsZSBjb250cm9scyBtZW51J3MgaWNvbiB2aXNpYmlsaXR5IG9uIHRoZSBzaWRlYmFyLiBUaGVcbiAgICogaWNvbiB3aWxsIGFwcGVhciBpZiB0aGUgdXNlciBoYXMgdGhlIHBlcm1pc3Npb24gdGhhdCBtZW51J3MgbmVlZGVkIGFuZCBpdCB3aWxsIGRpc2FwcGVhciBpZlxuICAgKiB0aGUgdXNlciBkb24ndCBoYXZlIHRoZSBwZXJtaXNzaW9uLlxuICAgKiBAdHlwZSB7U3ViamVjdDxzdHJpbmdbXT59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybU1vZHVsZXM6IFN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IFN1YmplY3Q8c3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8ga25vdyBpZiB0aGUgYXBwbGV0IGFscmVhZHkgaW5pdGlhdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpc1xuICAgKiBmYWxzZS5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNJbml0aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBvbGxvOiBBcG9sbG9cbiAgKSB7IH1cblxuICAvKipcbiAgICogQSBtZXRob2QgdGhhdCBzZXQgdGhlIHBlcm1pc3Npb25zIGFuZCBwZXJtaXNzaW9uIG1vZHVsZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBlcm1Db2RlcyAtIENvbnRhaW4gbGlzdCBvZiBwZXJtaXNzaW9uIGNvZGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwZXJtTW9kdWxlcyAtIENvbnRhaW4gbGlzdCBvZiBwZXJtaXNzaW9uIG1vZHVsZXMuIERlZmF1bHQgdmFsdWUgW10uXG4gICAqL1xuICBwdWJsaWMgc2V0UGVybWlzc2lvbihwZXJtQ29kZXM6IHN0cmluZ1tdLCBwZXJtTW9kdWxlczogc3RyaW5nW10gPSBbXSk6IHZvaWR7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtQ29kZXMubGVuZ3RoOyBpKyspIHRoaXMucGVybWlzc2lvbnMuc2V0KHBlcm1Db2Rlc1tpXSwgdHJ1ZSk7XG4gICAgdGhpcy5wZXJtTW9kdWxlcy5uZXh0KHBlcm1Nb2R1bGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0aGF0IGNoZWNraW5nIGlmIHRoZSB1c2VyIGhhcyB0aGUgcGVybWlzc2lvbiBvciBub3QgYmFzZWQgb24gdGhlIHBhcmFtcyB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIC0gQ29udGFpbiBzY29wZSBvZiB0aGUgdXNlcidzIHBlcm1pc3Npb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGUgLSBDb250YWluIG1vZHVsZSBvZiB0aGUgdXNlcidzIHBlcm1pc3Npb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gQ29udGFpbiB0eXBlIG9mIHRoZSB1c2VyJ3MgcGVybWlzc2lvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IENvbnRhaW4gYm9vbGVhbiB2YWx1ZSB0aGF0IHRlbGxzIHRoZSB1c2VyIGhhcyB0aGUgcGVybWlzc2lvbiBvciBub3QuXG4gICAqL1xuICBwdWJsaWMgY2hlY2tQZXJtaXNzaW9uKHNjb3BlOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBib29sZWFue1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmhhcyhgJHsgc2NvcGUgfS4keyBtb2R1bGUgfS5BRE1JTmApKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXMoYCR7IHNjb3BlIH0uJHsgbW9kdWxlIH0uJHsgdHlwZSB9YCkpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbWV0aG9kIHRoYXQgZ2V0IHRoZSBxdWVyeSB2YWx1ZSB3aXRoIGF1dGhNc1Blcm1pc3Npb24gYXMgdGhlIG9iamVjdC5cbiAgICogQHBhcmFtIHtQZXJtaXNzaW9uRmlsdGVyfSBmaWx0ZXIgLSBDb250YWluIGZpbHRlciBhcyBhIGNvbmRpdGlvbnMgZm9yIHRoZSBxdWVyeS5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8eyBhdXRoTXNQZXJtaXNzaW9uOiB7IGRhdGE6IEFwcFBlcm1EZm5bXSB9fT4+fSBDb250YWluIHF1ZXJ5IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldFBlcm1pc3Npb25zKGZpbHRlcjogUGVybWlzc2lvbkZpbHRlciwgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSk6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8eyBhdXRoTXNQZXJtaXNzaW9uOiB7IGRhdGE6IEFwcFBlcm1EZm5bXSB9fT4+e1xuICAgIHJldHVybiB0aGlzLmFwb2xsby5xdWVyeSh7XG4gICAgICBmZXRjaFBvbGljeSxcbiAgICAgIHZhcmlhYmxlczogeyBmaWx0ZXIgfSxcbiAgICAgIHF1ZXJ5OiBncWxgXG4gICAgICAgIHF1ZXJ5IFF1ZXJ5UGVybWlzc2lvbigkZmlsdGVyOiBQZXJtaXNzaW9uRmlsdGVyISkge1xuICAgICAgICAgIGF1dGhNc1Blcm1pc3Npb24oZmlsdGVyOiAkZmlsdGVyKSB7XG4gICAgICAgICAgICBkYXRhIHsgcGVybUNvZGUgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|