@abp/ng.core 5.0.1 → 5.1.1
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/{esm2015/abp-ng.core.js → esm2020/abp-ng.core.mjs} +0 -0
- package/{esm2015/lib/abstracts/index.js → esm2020/lib/abstracts/index.mjs} +0 -0
- package/{esm2015/lib/abstracts/ng-model.component.js → esm2020/lib/abstracts/ng-model.component.mjs} +4 -4
- package/esm2020/lib/components/dynamic-layout.component.mjs +88 -0
- package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- package/{esm2015/lib/components/replaceable-route-container.component.js → esm2020/lib/components/replaceable-route-container.component.mjs} +4 -4
- package/{esm2015/lib/components/router-outlet.component.js → esm2020/lib/components/router-outlet.component.mjs} +4 -4
- package/{esm2015/lib/constants/different-locales.js → esm2020/lib/constants/different-locales.mjs} +0 -0
- package/{esm2015/lib/constants/index.js → esm2020/lib/constants/index.mjs} +0 -0
- package/esm2020/lib/core.module.mjs +281 -0
- package/{esm2015/lib/directives/autofocus.directive.js → esm2020/lib/directives/autofocus.directive.mjs} +4 -4
- package/{esm2015/lib/directives/debounce.directive.js → esm2020/lib/directives/debounce.directive.mjs} +4 -4
- package/{esm2015/lib/directives/for.directive.js → esm2020/lib/directives/for.directive.mjs} +4 -4
- package/{esm2015/lib/directives/form-submit.directive.js → esm2020/lib/directives/form-submit.directive.mjs} +4 -4
- package/{esm2015/lib/directives/index.js → esm2020/lib/directives/index.mjs} +0 -0
- package/{esm2015/lib/directives/init.directive.js → esm2020/lib/directives/init.directive.mjs} +4 -4
- package/{esm2015/lib/directives/permission.directive.js → esm2020/lib/directives/permission.directive.mjs} +4 -4
- package/esm2020/lib/directives/replaceable-template.directive.mjs +126 -0
- package/{esm2015/lib/directives/stop-propagation.directive.js → esm2020/lib/directives/stop-propagation.directive.mjs} +4 -4
- package/{esm2015/lib/enums/common.js → esm2020/lib/enums/common.mjs} +0 -0
- package/{esm2015/lib/enums/index.js → esm2020/lib/enums/index.mjs} +0 -0
- package/{esm2015/lib/guards/auth.guard.js → esm2020/lib/guards/auth.guard.mjs} +4 -4
- package/{esm2015/lib/guards/index.js → esm2020/lib/guards/index.mjs} +0 -0
- package/{esm2015/lib/guards/permission.guard.js → esm2020/lib/guards/permission.guard.mjs} +5 -5
- package/{esm2015/lib/handlers/oauth-configuration.handler.js → esm2020/lib/handlers/oauth-configuration.handler.mjs} +4 -4
- package/esm2020/lib/handlers/routes.handler.mjs +49 -0
- package/esm2020/lib/interceptors/api.interceptor.mjs +54 -0
- package/{esm2015/lib/interceptors/index.js → esm2020/lib/interceptors/index.mjs} +0 -0
- package/{esm2015/lib/localization.module.js → esm2020/lib/localization.module.mjs} +5 -5
- package/{esm2015/lib/models/auth.js → esm2020/lib/models/auth.mjs} +0 -0
- package/{esm2015/lib/models/common.js → esm2020/lib/models/common.mjs} +0 -0
- package/{esm2015/lib/models/dtos.js → esm2020/lib/models/dtos.mjs} +0 -0
- package/{esm2015/lib/models/environment.js → esm2020/lib/models/environment.mjs} +0 -0
- package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
- package/{esm2015/lib/models/localization.js → esm2020/lib/models/localization.mjs} +0 -0
- package/{esm2015/lib/models/replaceable-components.js → esm2020/lib/models/replaceable-components.mjs} +0 -0
- package/{esm2015/lib/models/rest.js → esm2020/lib/models/rest.mjs} +0 -0
- package/{esm2015/lib/models/session.js → esm2020/lib/models/session.mjs} +0 -0
- package/{esm2015/lib/models/utility.js → esm2020/lib/models/utility.mjs} +0 -0
- package/{esm2015/lib/pipes/index.js → esm2020/lib/pipes/index.mjs} +2 -1
- package/{esm2015/lib/pipes/localization.pipe.js → esm2020/lib/pipes/localization.pipe.mjs} +5 -5
- package/{esm2015/lib/pipes/sort.pipe.js → esm2020/lib/pipes/sort.pipe.mjs} +5 -5
- package/esm2020/lib/pipes/to-injector.pipe.mjs +29 -0
- package/{esm2015/lib/providers/cookie-language.provider.js → esm2020/lib/providers/cookie-language.provider.mjs} +0 -0
- package/{esm2015/lib/providers/locale.provider.js → esm2020/lib/providers/locale.provider.mjs} +0 -0
- package/{esm2015/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.js → esm2020/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.mjs} +4 -4
- package/{esm2015/lib/proxy/pages/abp/multi-tenancy/index.js → esm2020/lib/proxy/pages/abp/multi-tenancy/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.mjs} +4 -4
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.mjs} +4 -4
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.js → esm2020/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/http/modeling/index.js → esm2020/lib/proxy/volo/abp/http/modeling/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/http/modeling/models.js → esm2020/lib/proxy/volo/abp/http/modeling/models.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/localization/index.js → esm2020/lib/proxy/volo/abp/localization/index.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/localization/models.js → esm2020/lib/proxy/volo/abp/localization/models.mjs} +0 -0
- package/{esm2015/lib/proxy/volo/abp/models.js → esm2020/lib/proxy/volo/abp/models.mjs} +0 -0
- package/esm2020/lib/services/auth.service.mjs +44 -0
- package/{esm2015/lib/services/config-state.service.js → esm2020/lib/services/config-state.service.mjs} +13 -16
- package/{esm2015/lib/services/content-projection.service.js → esm2020/lib/services/content-projection.service.mjs} +4 -4
- package/{esm2015/lib/services/dom-insertion.service.js → esm2020/lib/services/dom-insertion.service.mjs} +4 -4
- package/{esm2015/lib/services/environment.service.js → esm2020/lib/services/environment.service.mjs} +4 -4
- package/{esm2015/lib/services/http-error-reporter.service.js → esm2020/lib/services/http-error-reporter.service.mjs} +4 -4
- package/{esm2015/lib/services/http-wait.service.js → esm2020/lib/services/http-wait.service.mjs} +4 -4
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- package/{esm2015/lib/services/lazy-load.service.js → esm2020/lib/services/lazy-load.service.mjs} +4 -4
- package/{esm2015/lib/services/list.service.js → esm2020/lib/services/list.service.mjs} +4 -4
- package/esm2020/lib/services/localization.service.mjs +182 -0
- package/{esm2015/lib/services/multi-tenancy.service.js → esm2020/lib/services/multi-tenancy.service.mjs} +4 -4
- package/{esm2015/lib/services/permission.service.js → esm2020/lib/services/permission.service.mjs} +5 -6
- package/{esm2015/lib/services/replaceable-components.service.js → esm2020/lib/services/replaceable-components.service.mjs} +4 -4
- package/{esm2015/lib/services/resource-wait.service.js → esm2020/lib/services/resource-wait.service.mjs} +4 -4
- package/esm2020/lib/services/rest.service.mjs +66 -0
- package/{esm2015/lib/services/router-events.service.js → esm2020/lib/services/router-events.service.mjs} +4 -4
- package/{esm2015/lib/services/router-wait.service.js → esm2020/lib/services/router-wait.service.mjs} +4 -4
- package/esm2020/lib/services/routes.service.mjs +145 -0
- package/{esm2015/lib/services/session-state.service.js → esm2020/lib/services/session-state.service.mjs} +5 -5
- package/{esm2015/lib/services/subscription.service.js → esm2020/lib/services/subscription.service.mjs} +4 -4
- package/{esm2015/lib/services/track-by.service.js → esm2020/lib/services/track-by.service.mjs} +4 -4
- package/esm2020/lib/strategies/auth-flow.strategy.mjs +190 -0
- package/{esm2015/lib/strategies/container.strategy.js → esm2020/lib/strategies/container.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/content-security.strategy.js → esm2020/lib/strategies/content-security.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/content.strategy.js → esm2020/lib/strategies/content.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/context.strategy.js → esm2020/lib/strategies/context.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/cross-origin.strategy.js → esm2020/lib/strategies/cross-origin.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/dom.strategy.js → esm2020/lib/strategies/dom.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/index.js → esm2020/lib/strategies/index.mjs} +0 -0
- package/{esm2015/lib/strategies/loading.strategy.js → esm2020/lib/strategies/loading.strategy.mjs} +0 -0
- package/{esm2015/lib/strategies/projection.strategy.js → esm2020/lib/strategies/projection.strategy.mjs} +0 -0
- package/{esm2015/lib/tokens/app-config.token.js → esm2020/lib/tokens/app-config.token.mjs} +0 -0
- package/{esm2015/lib/tokens/cookie-language-key.token.js → esm2020/lib/tokens/cookie-language-key.token.mjs} +0 -0
- package/{esm2015/lib/tokens/index.js → esm2020/lib/tokens/index.mjs} +0 -0
- package/{esm2015/lib/tokens/list.token.js → esm2020/lib/tokens/list.token.mjs} +0 -0
- package/{esm2015/lib/tokens/localization.token.js → esm2020/lib/tokens/localization.token.mjs} +0 -0
- package/{esm2015/lib/tokens/lodaer-delay.token.js → esm2020/lib/tokens/lodaer-delay.token.mjs} +0 -0
- package/{esm2015/lib/tokens/manage-profile.token.js → esm2020/lib/tokens/manage-profile.token.mjs} +0 -0
- package/esm2020/lib/tokens/options.token.mjs +8 -0
- package/{esm2015/lib/tokens/tenant-key.token.js → esm2020/lib/tokens/tenant-key.token.mjs} +0 -0
- package/esm2020/lib/utils/array-utils.mjs +7 -0
- package/{esm2015/lib/utils/auth-utils.js → esm2020/lib/utils/auth-utils.mjs} +0 -0
- package/{esm2015/lib/utils/common-utils.js → esm2020/lib/utils/common-utils.mjs} +0 -0
- package/{esm2015/lib/utils/date-extensions.js → esm2020/lib/utils/date-extensions.mjs} +0 -0
- package/{esm2015/lib/utils/date-utils.js → esm2020/lib/utils/date-utils.mjs} +0 -0
- package/{esm2015/lib/utils/environment-utils.js → esm2020/lib/utils/environment-utils.mjs} +0 -0
- package/{esm2015/lib/utils/factory-utils.js → esm2020/lib/utils/factory-utils.mjs} +0 -0
- package/{esm2015/lib/utils/file-utils.js → esm2020/lib/utils/file-utils.mjs} +0 -0
- package/{esm2015/lib/utils/form-utils.js → esm2020/lib/utils/form-utils.mjs} +0 -0
- package/{esm2015/lib/utils/generator-utils.js → esm2020/lib/utils/generator-utils.mjs} +0 -0
- package/{esm2015/lib/utils/http-utils.js → esm2020/lib/utils/http-utils.mjs} +0 -0
- package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
- package/esm2020/lib/utils/initial-utils.mjs +63 -0
- package/esm2020/lib/utils/internal-store-utils.mjs +36 -0
- package/{esm2015/lib/utils/lazy-load-utils.js → esm2020/lib/utils/lazy-load-utils.mjs} +0 -0
- package/esm2020/lib/utils/localization-utils.mjs +49 -0
- package/esm2020/lib/utils/multi-tenancy-utils.mjs +78 -0
- package/{esm2015/lib/utils/number-utils.js → esm2020/lib/utils/number-utils.mjs} +0 -0
- package/{esm2015/lib/utils/object-utils.js → esm2020/lib/utils/object-utils.mjs} +0 -0
- package/esm2020/lib/utils/route-utils.mjs +26 -0
- package/esm2020/lib/utils/string-utils.mjs +25 -0
- package/{esm2015/lib/utils/tree-utils.js → esm2020/lib/utils/tree-utils.mjs} +1 -1
- package/{esm2015/lib/validators/age.validator.js → esm2020/lib/validators/age.validator.mjs} +0 -0
- package/{esm2015/lib/validators/credit-card.validator.js → esm2020/lib/validators/credit-card.validator.mjs} +0 -0
- package/{esm2015/lib/validators/index.js → esm2020/lib/validators/index.mjs} +0 -0
- package/{esm2015/lib/validators/range.validator.js → esm2020/lib/validators/range.validator.mjs} +0 -0
- package/{esm2015/lib/validators/required.validator.js → esm2020/lib/validators/required.validator.mjs} +0 -0
- package/{esm2015/lib/validators/string-length.validator.js → esm2020/lib/validators/string-length.validator.mjs} +0 -0
- package/{esm2015/lib/validators/url.validator.js → esm2020/lib/validators/url.validator.mjs} +0 -0
- package/{esm2015/locale/abp-ng.core-locale.js → esm2020/locale/abp-ng.core-locale.mjs} +0 -0
- package/{esm2015/locale/public-api.js → esm2020/locale/public-api.mjs} +0 -0
- package/esm2020/locale/utils/register-locale.mjs +47 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/{esm2015/testing/abp-ng.core-testing.js → esm2020/testing/abp-ng.core-testing.mjs} +0 -0
- package/esm2020/testing/lib/core-testing.module.mjs +63 -0
- package/{esm2015/testing/lib/services/index.js → esm2020/testing/lib/services/index.mjs} +0 -0
- package/{esm2015/testing/lib/services/mock-permission.service.js → esm2020/testing/lib/services/mock-permission.service.mjs} +4 -4
- package/{esm2015/testing/lib/services/mock-rest.service.js → esm2020/testing/lib/services/mock-rest.service.mjs} +4 -4
- package/{esm2015/testing/lib/utils/clear-page.util.js → esm2020/testing/lib/utils/clear-page.util.mjs} +0 -0
- package/{esm2015/testing/lib/utils/index.js → esm2020/testing/lib/utils/index.mjs} +0 -0
- package/{esm2015/testing/lib/utils/wait.util.js → esm2020/testing/lib/utils/wait.util.mjs} +0 -0
- package/{esm2015/testing/public-api.js → esm2020/testing/public-api.mjs} +0 -0
- package/fesm2015/{abp-ng.core-locale.js → abp-ng.core-locale.mjs} +11 -4
- package/fesm2015/abp-ng.core-locale.mjs.map +1 -0
- package/fesm2015/{abp-ng.core-testing.js → abp-ng.core-testing.mjs} +18 -16
- package/fesm2015/abp-ng.core-testing.mjs.map +1 -0
- package/fesm2015/{abp-ng.core.js → abp-ng.core.mjs} +812 -768
- package/fesm2015/abp-ng.core.mjs.map +1 -0
- package/fesm2020/abp-ng.core-locale.mjs +54 -0
- package/fesm2020/abp-ng.core-locale.mjs.map +1 -0
- package/fesm2020/abp-ng.core-testing.mjs +140 -0
- package/fesm2020/abp-ng.core-testing.mjs.map +1 -0
- package/fesm2020/abp-ng.core.mjs +4211 -0
- package/fesm2020/abp-ng.core.mjs.map +1 -0
- package/lib/core.module.d.ts +9 -8
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/to-injector.pipe.d.ts +10 -0
- package/lib/services/environment.service.d.ts +1 -0
- package/lib/services/list.service.d.ts +1 -1
- package/lib/services/subscription.service.d.ts +2 -2
- package/lib/utils/array-utils.d.ts +1 -1
- package/lib/utils/string-utils.d.ts +1 -0
- package/lib/utils/tree-utils.d.ts +2 -2
- package/locale/package.json +5 -5
- package/package.json +37 -8
- package/src/lib/proxy/README.md +17 -0
- package/testing/package.json +5 -5
- package/bundles/abp-ng.core-locale.umd.js +0 -381
- package/bundles/abp-ng.core-locale.umd.js.map +0 -1
- package/bundles/abp-ng.core-testing.umd.js +0 -494
- package/bundles/abp-ng.core-testing.umd.js.map +0 -1
- package/bundles/abp-ng.core.umd.js +0 -5277
- package/bundles/abp-ng.core.umd.js.map +0 -1
- package/esm2015/lib/components/dynamic-layout.component.js +0 -89
- package/esm2015/lib/core.module.js +0 -281
- package/esm2015/lib/directives/replaceable-template.directive.js +0 -121
- package/esm2015/lib/handlers/routes.handler.js +0 -47
- package/esm2015/lib/interceptors/api.interceptor.js +0 -54
- package/esm2015/lib/services/auth.service.js +0 -47
- package/esm2015/lib/services/localization.service.js +0 -182
- package/esm2015/lib/services/rest.service.js +0 -63
- package/esm2015/lib/services/routes.service.js +0 -147
- package/esm2015/lib/strategies/auth-flow.strategy.js +0 -202
- package/esm2015/lib/tokens/options.token.js +0 -8
- package/esm2015/lib/utils/array-utils.js +0 -7
- package/esm2015/lib/utils/initial-utils.js +0 -64
- package/esm2015/lib/utils/internal-store-utils.js +0 -36
- package/esm2015/lib/utils/localization-utils.js +0 -50
- package/esm2015/lib/utils/multi-tenancy-utils.js +0 -83
- package/esm2015/lib/utils/route-utils.js +0 -27
- package/esm2015/lib/utils/string-utils.js +0 -21
- package/esm2015/locale/utils/register-locale.js +0 -43
- package/esm2015/testing/lib/core-testing.module.js +0 -62
- package/fesm2015/abp-ng.core-locale.js.map +0 -1
- package/fesm2015/abp-ng.core-testing.js.map +0 -1
- package/fesm2015/abp-ng.core.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { OAuthErrorEvent, OAuthInfoEvent, OAuthService } from 'angular-oauth2-oidc';
|
|
4
|
+
import { from, of, pipe } from 'rxjs';
|
|
5
|
+
import { filter, switchMap, tap } from 'rxjs/operators';
|
|
6
|
+
import { ConfigStateService } from '../services/config-state.service';
|
|
7
|
+
import { EnvironmentService } from '../services/environment.service';
|
|
8
|
+
import { HttpErrorReporterService } from '../services/http-error-reporter.service';
|
|
9
|
+
import { SessionStateService } from '../services/session-state.service';
|
|
10
|
+
import { TENANT_KEY } from '../tokens/tenant-key.token';
|
|
11
|
+
import { removeRememberMe, setRememberMe } from '../utils/auth-utils';
|
|
12
|
+
import { noop } from '../utils/common-utils';
|
|
13
|
+
export const oAuthStorage = localStorage;
|
|
14
|
+
export class AuthFlowStrategy {
|
|
15
|
+
constructor(injector) {
|
|
16
|
+
this.injector = injector;
|
|
17
|
+
this.catchError = err => {
|
|
18
|
+
this.httpErrorReporter.reportError(err);
|
|
19
|
+
return of(null);
|
|
20
|
+
};
|
|
21
|
+
this.httpErrorReporter = injector.get(HttpErrorReporterService);
|
|
22
|
+
this.environment = injector.get(EnvironmentService);
|
|
23
|
+
this.configState = injector.get(ConfigStateService);
|
|
24
|
+
this.oAuthService = injector.get(OAuthService);
|
|
25
|
+
this.sessionState = injector.get(SessionStateService);
|
|
26
|
+
this.oAuthConfig = this.environment.getEnvironment().oAuthConfig;
|
|
27
|
+
this.tenantKey = injector.get(TENANT_KEY);
|
|
28
|
+
this.listenToOauthErrors();
|
|
29
|
+
}
|
|
30
|
+
async init() {
|
|
31
|
+
const shouldClear = shouldStorageClear(this.environment.getEnvironment().oAuthConfig.clientId, oAuthStorage);
|
|
32
|
+
if (shouldClear)
|
|
33
|
+
clearOAuthStorage(oAuthStorage);
|
|
34
|
+
this.oAuthService.configure(this.oAuthConfig);
|
|
35
|
+
this.oAuthService.events
|
|
36
|
+
.pipe(filter(event => event.type === 'token_refresh_error'))
|
|
37
|
+
.subscribe(() => this.navigateToLogin());
|
|
38
|
+
return this.oAuthService
|
|
39
|
+
.loadDiscoveryDocument()
|
|
40
|
+
.then(() => {
|
|
41
|
+
if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) {
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
}
|
|
44
|
+
return this.refreshToken();
|
|
45
|
+
})
|
|
46
|
+
.catch(this.catchError);
|
|
47
|
+
}
|
|
48
|
+
refreshToken() {
|
|
49
|
+
return this.oAuthService.refreshToken().catch(() => clearOAuthStorage());
|
|
50
|
+
}
|
|
51
|
+
listenToOauthErrors() {
|
|
52
|
+
this.oAuthService.events
|
|
53
|
+
.pipe(filter(event => event instanceof OAuthErrorEvent), tap(() => clearOAuthStorage()), switchMap(() => this.configState.refreshAppState()))
|
|
54
|
+
.subscribe();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class AuthCodeFlowStrategy extends AuthFlowStrategy {
|
|
58
|
+
constructor() {
|
|
59
|
+
super(...arguments);
|
|
60
|
+
this.isInternalAuth = false;
|
|
61
|
+
}
|
|
62
|
+
async init() {
|
|
63
|
+
return super
|
|
64
|
+
.init()
|
|
65
|
+
.then(() => this.oAuthService.tryLogin().catch(noop))
|
|
66
|
+
.then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token'));
|
|
67
|
+
}
|
|
68
|
+
navigateToLogin(queryParams) {
|
|
69
|
+
this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
|
|
70
|
+
}
|
|
71
|
+
checkIfInternalAuth(queryParams) {
|
|
72
|
+
this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
logout(queryParams) {
|
|
76
|
+
return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));
|
|
77
|
+
}
|
|
78
|
+
login(queryParams) {
|
|
79
|
+
this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
|
|
80
|
+
return of(null);
|
|
81
|
+
}
|
|
82
|
+
getCultureParams(queryParams) {
|
|
83
|
+
const lang = this.sessionState.getLanguage();
|
|
84
|
+
const culture = { culture: lang, 'ui-culture': lang };
|
|
85
|
+
return { ...(lang && culture), ...queryParams };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
|
|
89
|
+
constructor() {
|
|
90
|
+
super(...arguments);
|
|
91
|
+
this.isInternalAuth = true;
|
|
92
|
+
this.cookieKey = 'rememberMe';
|
|
93
|
+
this.storageKey = 'passwordFlow';
|
|
94
|
+
}
|
|
95
|
+
listenToTokenExpiration() {
|
|
96
|
+
this.oAuthService.events
|
|
97
|
+
.pipe(filter(event => event instanceof OAuthInfoEvent &&
|
|
98
|
+
event.type === 'token_expires' &&
|
|
99
|
+
event.info === 'access_token'))
|
|
100
|
+
.subscribe(() => {
|
|
101
|
+
if (this.oAuthService.getRefreshToken()) {
|
|
102
|
+
this.refreshToken();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.oAuthService.logOut();
|
|
106
|
+
removeRememberMe();
|
|
107
|
+
this.configState.refreshAppState().subscribe();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async init() {
|
|
112
|
+
if (!getCookieValueByName(this.cookieKey) && localStorage.getItem(this.storageKey)) {
|
|
113
|
+
this.oAuthService.logOut();
|
|
114
|
+
}
|
|
115
|
+
return super.init().then(() => this.listenToTokenExpiration());
|
|
116
|
+
}
|
|
117
|
+
navigateToLogin(queryParams) {
|
|
118
|
+
const router = this.injector.get(Router);
|
|
119
|
+
router.navigate(['/account/login'], { queryParams });
|
|
120
|
+
}
|
|
121
|
+
checkIfInternalAuth() {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
login(params) {
|
|
125
|
+
const tenant = this.sessionState.getTenant();
|
|
126
|
+
return from(this.oAuthService.fetchTokenUsingPasswordFlow(params.username, params.password, new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }))).pipe(this.pipeToLogin(params));
|
|
127
|
+
}
|
|
128
|
+
pipeToLogin(params) {
|
|
129
|
+
const router = this.injector.get(Router);
|
|
130
|
+
return pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
|
|
131
|
+
setRememberMe(params.rememberMe);
|
|
132
|
+
if (params.redirectUrl)
|
|
133
|
+
router.navigate([params.redirectUrl]);
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
logout(queryParams) {
|
|
137
|
+
const router = this.injector.get(Router);
|
|
138
|
+
return from(this.oAuthService.revokeTokenAndLogout(queryParams)).pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
|
|
139
|
+
router.navigateByUrl('/');
|
|
140
|
+
removeRememberMe();
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
refreshToken() {
|
|
144
|
+
return this.oAuthService.refreshToken().catch(() => {
|
|
145
|
+
clearOAuthStorage();
|
|
146
|
+
removeRememberMe();
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export const AUTH_FLOW_STRATEGY = {
|
|
151
|
+
Code(injector) {
|
|
152
|
+
return new AuthCodeFlowStrategy(injector);
|
|
153
|
+
},
|
|
154
|
+
Password(injector) {
|
|
155
|
+
return new AuthPasswordFlowStrategy(injector);
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
export function clearOAuthStorage(storage = oAuthStorage) {
|
|
159
|
+
const keys = [
|
|
160
|
+
'access_token',
|
|
161
|
+
'id_token',
|
|
162
|
+
'refresh_token',
|
|
163
|
+
'nonce',
|
|
164
|
+
'PKCE_verifier',
|
|
165
|
+
'expires_at',
|
|
166
|
+
'id_token_claims_obj',
|
|
167
|
+
'id_token_expires_at',
|
|
168
|
+
'id_token_stored_at',
|
|
169
|
+
'access_token_stored_at',
|
|
170
|
+
'granted_scopes',
|
|
171
|
+
'session_state',
|
|
172
|
+
];
|
|
173
|
+
keys.forEach(key => storage.removeItem(key));
|
|
174
|
+
}
|
|
175
|
+
function shouldStorageClear(clientId, storage) {
|
|
176
|
+
const key = 'abpOAuthClientId';
|
|
177
|
+
if (!storage.getItem(key)) {
|
|
178
|
+
storage.setItem(key, clientId);
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
const shouldClear = storage.getItem(key) !== clientId;
|
|
182
|
+
if (shouldClear)
|
|
183
|
+
storage.setItem(key, clientId);
|
|
184
|
+
return shouldClear;
|
|
185
|
+
}
|
|
186
|
+
function getCookieValueByName(name) {
|
|
187
|
+
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
|
188
|
+
return match ? match[2] : '';
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mbG93LnN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3N0cmF0ZWdpZXMvYXV0aC1mbG93LnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUVMLGVBQWUsRUFDZixjQUFjLEVBQ2QsWUFBWSxFQUViLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFFekMsTUFBTSxPQUFnQixnQkFBZ0I7SUFxQnBDLFlBQXNCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFMaEMsZUFBVSxHQUFHLEdBQUcsQ0FBQyxF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O1FBQ1AsZUFBZTtRQUNmLFlBQVk7UUFDWixxQkFBcUI7UUFDckIscUJBQXFCO1FBQ3JCLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGVBQWU7S0FDaEIsQ0FBQztJQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxPQUFxQjtJQUNqRSxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDdEQsSUFBSSxXQUFXO1FBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFyYW1zLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEF1dGhDb25maWcsXHJcbiAgT0F1dGhFcnJvckV2ZW50LFxyXG4gIE9BdXRoSW5mb0V2ZW50LFxyXG4gIE9BdXRoU2VydmljZSxcclxuICBPQXV0aFN0b3JhZ2VcclxufSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIHBpcGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTG9naW5QYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvYXV0aCc7XHJcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAtZXJyb3ItcmVwb3J0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBURU5BTlRfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL3RlbmFudC1rZXkudG9rZW4nO1xyXG5pbXBvcnQgeyByZW1vdmVSZW1lbWJlck1lLCBzZXRSZW1lbWJlck1lIH0gZnJvbSAnLi4vdXRpbHMvYXV0aC11dGlscyc7XHJcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlscy9jb21tb24tdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IG9BdXRoU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoRmxvd1N0cmF0ZWd5IHtcclxuICBhYnN0cmFjdCByZWFkb25seSBpc0ludGVybmFsQXV0aDogYm9vbGVhbjtcclxuXHJcbiAgcHJvdGVjdGVkIGh0dHBFcnJvclJlcG9ydGVyOiBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCBvQXV0aENvbmZpZzogQXV0aENvbmZpZztcclxuICBwcm90ZWN0ZWQgc2Vzc2lvblN0YXRlOiBTZXNzaW9uU3RhdGVTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB0ZW5hbnRLZXk6IHN0cmluZztcclxuXHJcbiAgYWJzdHJhY3QgY2hlY2tJZkludGVybmFsQXV0aChxdWVyeVBhcmFtcz86IFBhcmFtcyk6IGJvb2xlYW47XHJcbiAgYWJzdHJhY3QgbmF2aWdhdGVUb0xvZ2luKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKTogdm9pZDtcclxuICBhYnN0cmFjdCBsb2dvdXQocXVlcnlQYXJhbXM/OiBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgYWJzdHJhY3QgbG9naW4ocGFyYW1zPzogTG9naW5QYXJhbXMgfCBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT47XHJcblxyXG4gIHByaXZhdGUgY2F0Y2hFcnJvciA9IGVyciA9PiB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yKGVycik7XHJcbiAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5odHRwRXJyb3JSZXBvcnRlciA9IGluamVjdG9yLmdldChIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UpO1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gICAgdGhpcy5jb25maWdTdGF0ZSA9IGluamVjdG9yLmdldChDb25maWdTdGF0ZVNlcnZpY2UpO1xyXG4gICAgdGhpcy5vQXV0aFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoT0F1dGhTZXJ2aWNlKTtcclxuICAgIHRoaXMuc2Vzc2lvblN0YXRlID0gaW5qZWN0b3IuZ2V0KFNlc3Npb25TdGF0ZVNlcnZpY2UpO1xyXG4gICAgdGhpcy5vQXV0aENvbmZpZyA9IHRoaXMuZW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnQoKS5vQXV0aENvbmZpZztcclxuICAgIHRoaXMudGVuYW50S2V5ID0gaW5qZWN0b3IuZ2V0KFRFTkFOVF9LRVkpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9PYXV0aEVycm9ycygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3Qgc2hvdWxkQ2xlYXIgPSBzaG91bGRTdG9yYWdlQ2xlYXIoXHJcbiAgICAgIHRoaXMuZW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnQoKS5vQXV0aENvbmZpZy5jbGllbnRJZCxcclxuICAgICAgb0F1dGhTdG9yYWdlLFxyXG4gICAgKTtcclxuICAgIGlmIChzaG91bGRDbGVhcikgY2xlYXJPQXV0aFN0b3JhZ2Uob0F1dGhTdG9yYWdlKTtcclxuXHJcbiAgICB0aGlzLm9BdXRoU2VydmljZS5jb25maWd1cmUodGhpcy5vQXV0aENvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5vQXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudC50eXBlID09PSAndG9rZW5fcmVmcmVzaF9lcnJvcicpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVUb0xvZ2luKCkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm9BdXRoU2VydmljZVxyXG4gICAgICAubG9hZERpc2NvdmVyeURvY3VtZW50KClcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9BdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkgfHwgIXRoaXMub0F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpKSB7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW4oKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKHRoaXMuY2F0Y2hFcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVmcmVzaFRva2VuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpLmNhdGNoKCgpID0+IGNsZWFyT0F1dGhTdG9yYWdlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblRvT2F1dGhFcnJvcnMoKSB7XHJcbiAgICB0aGlzLm9BdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSxcclxuICAgICAgICB0YXAoKCkgPT4gY2xlYXJPQXV0aFN0b3JhZ2UoKSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRoQ29kZUZsb3dTdHJhdGVneSBleHRlbmRzIEF1dGhGbG93U3RyYXRlZ3kge1xyXG4gIHJlYWRvbmx5IGlzSW50ZXJuYWxBdXRoID0gZmFsc2U7XHJcblxyXG4gIGFzeW5jIGluaXQoKSB7XHJcbiAgICByZXR1cm4gc3VwZXJcclxuICAgICAgLmluaXQoKVxyXG4gICAgICAudGhlbigoKSA9PiB0aGlzLm9BdXRoU2VydmljZS50cnlMb2dpbigpLmNhdGNoKG5vb3ApKVxyXG4gICAgICAudGhlbigoKSA9PiB0aGlzLm9BdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goe30sICdhY2Nlc3NfdG9rZW4nKSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvTG9naW4ocXVlcnlQYXJhbXM/OiBQYXJhbXMpIHtcclxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmluaXRDb2RlRmxvdygnJywgdGhpcy5nZXRDdWx0dXJlUGFyYW1zKHF1ZXJ5UGFyYW1zKSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmSW50ZXJuYWxBdXRoKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICB0aGlzLm9BdXRoU2VydmljZS5pbml0Q29kZUZsb3coJycsIHRoaXMuZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcykpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm9BdXRoU2VydmljZS5yZXZva2VUb2tlbkFuZExvZ291dCh0aGlzLmdldEN1bHR1cmVQYXJhbXMocXVlcnlQYXJhbXMpKSk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihxdWVyeVBhcmFtcz86IFBhcmFtcykge1xyXG4gICAgdGhpcy5vQXV0aFNlcnZpY2UuaW5pdENvZGVGbG93KCcnLCB0aGlzLmdldEN1bHR1cmVQYXJhbXMocXVlcnlQYXJhbXMpKTtcclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcz86IFBhcmFtcykge1xyXG4gICAgY29uc3QgbGFuZyA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlKCk7XHJcbiAgICBjb25zdCBjdWx0dXJlID0geyBjdWx0dXJlOiBsYW5nLCAndWktY3VsdHVyZSc6IGxhbmcgfTtcclxuICAgIHJldHVybiB7IC4uLihsYW5nICYmIGN1bHR1cmUpLCAuLi5xdWVyeVBhcmFtcyB9O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dGhQYXNzd29yZEZsb3dTdHJhdGVneSBleHRlbmRzIEF1dGhGbG93U3RyYXRlZ3kge1xyXG4gIHJlYWRvbmx5IGlzSW50ZXJuYWxBdXRoID0gdHJ1ZTtcclxuICBwcml2YXRlIGNvb2tpZUtleSA9ICdyZW1lbWJlck1lJztcclxuICBwcml2YXRlIHN0b3JhZ2VLZXkgPSAncGFzc3dvcmRGbG93JztcclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Ub1Rva2VuRXhwaXJhdGlvbigpIHtcclxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmV2ZW50c1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE9BdXRoSW5mb0V2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LnR5cGUgPT09ICd0b2tlbl9leHBpcmVzJyAmJlxyXG4gICAgICAgICAgICBldmVudC5pbmZvID09PSAnYWNjZXNzX3Rva2VuJyxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9BdXRoU2VydmljZS5nZXRSZWZyZXNoVG9rZW4oKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vQXV0aFNlcnZpY2UubG9nT3V0KCk7XHJcbiAgICAgICAgICByZW1vdmVSZW1lbWJlck1lKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0KCkge1xyXG4gICAgaWYgKCFnZXRDb29raWVWYWx1ZUJ5TmFtZSh0aGlzLmNvb2tpZUtleSkgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KSkge1xyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS5sb2dPdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VwZXIuaW5pdCgpLnRoZW4oKCkgPT4gdGhpcy5saXN0ZW5Ub1Rva2VuRXhwaXJhdGlvbigpKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Mb2dpbihxdWVyeVBhcmFtcz86IFBhcmFtcykge1xyXG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9hY2NvdW50L2xvZ2luJ10sIHsgcXVlcnlQYXJhbXMgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmSW50ZXJuYWxBdXRoKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2dpbihwYXJhbXM6IExvZ2luUGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHRlbmFudCA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldFRlbmFudCgpO1xyXG5cclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS5mZXRjaFRva2VuVXNpbmdQYXNzd29yZEZsb3coXHJcbiAgICAgICAgcGFyYW1zLnVzZXJuYW1lLFxyXG4gICAgICAgIHBhcmFtcy5wYXNzd29yZCxcclxuICAgICAgICBuZXcgSHR0cEhlYWRlcnMoeyAuLi4odGVuYW50ICYmIHRlbmFudC5pZCAmJiB7IFt0aGlzLnRlbmFudEtleV06IHRlbmFudC5pZCB9KSB9KSxcclxuICAgICAgKSxcclxuICAgICkucGlwZSh0aGlzLnBpcGVUb0xvZ2luKHBhcmFtcykpO1xyXG4gIH1cclxuXHJcbiAgcGlwZVRvTG9naW4ocGFyYW1zOiBQaWNrPExvZ2luUGFyYW1zLCAncmVkaXJlY3RVcmwnIHwgJ3JlbWVtYmVyTWUnPikge1xyXG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuXHJcbiAgICByZXR1cm4gcGlwZShcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHNldFJlbWVtYmVyTWUocGFyYW1zLnJlbWVtYmVyTWUpO1xyXG4gICAgICAgIGlmIChwYXJhbXMucmVkaXJlY3RVcmwpIHJvdXRlci5uYXZpZ2F0ZShbcGFyYW1zLnJlZGlyZWN0VXJsXSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvZ291dChxdWVyeVBhcmFtcz86IFBhcmFtcykge1xyXG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuXHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm9BdXRoU2VydmljZS5yZXZva2VUb2tlbkFuZExvZ291dChxdWVyeVBhcmFtcykpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xyXG4gICAgICAgIHJlbW92ZVJlbWVtYmVyTWUoKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlZnJlc2hUb2tlbigpIHtcclxuICAgIHJldHVybiB0aGlzLm9BdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIGNsZWFyT0F1dGhTdG9yYWdlKCk7XHJcbiAgICAgIHJlbW92ZVJlbWVtYmVyTWUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEFVVEhfRkxPV19TVFJBVEVHWSA9IHtcclxuICBDb2RlKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBBdXRoQ29kZUZsb3dTdHJhdGVneShpbmplY3Rvcik7XHJcbiAgfSxcclxuICBQYXNzd29yZChpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHJldHVybiBuZXcgQXV0aFBhc3N3b3JkRmxvd1N0cmF0ZWd5KGluamVjdG9yKTtcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyT0F1dGhTdG9yYWdlKHN0b3JhZ2U6IE9BdXRoU3RvcmFnZSA9IG9BdXRoU3RvcmFnZSkge1xyXG4gIGNvbnN0IGtleXMgPSBbXHJcbiAgICAnYWNjZXNzX3Rva2VuJyxcclxuICAgICdpZF90b2tlbicsXHJcbiAgICAncmVmcmVzaF90b2tlbicsXHJcbiAgICAnbm9uY2UnLFxyXG4gICAgJ1BLQ0VfdmVyaWZpZXInLFxyXG4gICAgJ2V4cGlyZXNfYXQnLFxyXG4gICAgJ2lkX3Rva2VuX2NsYWltc19vYmonLFxyXG4gICAgJ2lkX3Rva2VuX2V4cGlyZXNfYXQnLFxyXG4gICAgJ2lkX3Rva2VuX3N0b3JlZF9hdCcsXHJcbiAgICAnYWNjZXNzX3Rva2VuX3N0b3JlZF9hdCcsXHJcbiAgICAnZ3JhbnRlZF9zY29wZXMnLFxyXG4gICAgJ3Nlc3Npb25fc3RhdGUnLFxyXG4gIF07XHJcblxyXG4gIGtleXMuZm9yRWFjaChrZXkgPT4gc3RvcmFnZS5yZW1vdmVJdGVtKGtleSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRTdG9yYWdlQ2xlYXIoY2xpZW50SWQ6IHN0cmluZywgc3RvcmFnZTogT0F1dGhTdG9yYWdlKTogYm9vbGVhbiB7XHJcbiAgY29uc3Qga2V5ID0gJ2FicE9BdXRoQ2xpZW50SWQnO1xyXG4gIGlmICghc3RvcmFnZS5nZXRJdGVtKGtleSkpIHtcclxuICAgIHN0b3JhZ2Uuc2V0SXRlbShrZXksIGNsaWVudElkKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNob3VsZENsZWFyID0gc3RvcmFnZS5nZXRJdGVtKGtleSkgIT09IGNsaWVudElkO1xyXG4gIGlmIChzaG91bGRDbGVhcikgc3RvcmFnZS5zZXRJdGVtKGtleSwgY2xpZW50SWQpO1xyXG4gIHJldHVybiBzaG91bGRDbGVhcjtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29va2llVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58ICknICsgbmFtZSArICc9KFteO10rKScpKTtcclxuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6ICcnO1xyXG59XHJcbiJdfQ==
|
|
File without changes
|
|
File without changes
|
package/{esm2015/lib/strategies/content.strategy.js → esm2020/lib/strategies/content.strategy.mjs}
RENAMED
|
File without changes
|
package/{esm2015/lib/strategies/context.strategy.js → esm2020/lib/strategies/context.strategy.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/{esm2015/lib/strategies/loading.strategy.js → esm2020/lib/strategies/loading.strategy.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/{esm2015/lib/tokens/localization.token.js → esm2020/lib/tokens/localization.token.mjs}
RENAMED
|
File without changes
|
package/{esm2015/lib/tokens/lodaer-delay.token.js → esm2020/lib/tokens/lodaer-delay.token.mjs}
RENAMED
|
File without changes
|
package/{esm2015/lib/tokens/manage-profile.token.js → esm2020/lib/tokens/manage-profile.token.mjs}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const CORE_OPTIONS = new InjectionToken('CORE_OPTIONS');
|
|
3
|
+
export function coreOptionsFactory({ ...options }) {
|
|
4
|
+
return {
|
|
5
|
+
...options,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi90b2tlbnMvb3B0aW9ucy50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBWTtJQUN6RCxPQUFPO1FBQ0wsR0FBRyxPQUFPO0tBQ0MsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQUJQIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcblxyXG5leHBvcnQgY29uc3QgQ09SRV9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPEFCUC5Sb290PignQ09SRV9PUFRJT05TJyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29yZU9wdGlvbnNGYWN0b3J5KHsgLi4ub3B0aW9ucyB9OiBBQlAuUm9vdCkge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gIH0gYXMgQUJQLlJvb3Q7XHJcbn1cclxuIl19
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function pushValueTo(array) {
|
|
2
|
+
return (element) => {
|
|
3
|
+
array.push(element);
|
|
4
|
+
return array;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdXRpbHMvYXJyYXktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFdBQVcsQ0FBSSxLQUFVO0lBQ3ZDLE9BQU8sQ0FBQyxPQUFVLEVBQUUsRUFBRTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwdXNoVmFsdWVUbzxUPihhcnJheTogVFtdKSB7XHJcbiAgcmV0dXJuIChlbGVtZW50OiBUKSA9PiB7XHJcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH07XHJcbn1cclxuIl19
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { registerLocaleData } from '@angular/common';
|
|
2
|
+
import { OAuthService } from 'angular-oauth2-oidc';
|
|
3
|
+
import { tap, catchError } from 'rxjs/operators';
|
|
4
|
+
import { throwError } from 'rxjs';
|
|
5
|
+
import { AuthService } from '../services/auth.service';
|
|
6
|
+
import { ConfigStateService } from '../services/config-state.service';
|
|
7
|
+
import { EnvironmentService } from '../services/environment.service';
|
|
8
|
+
import { SessionStateService } from '../services/session-state.service';
|
|
9
|
+
import { clearOAuthStorage } from '../strategies/auth-flow.strategy';
|
|
10
|
+
import { CORE_OPTIONS } from '../tokens/options.token';
|
|
11
|
+
import { APP_INIT_ERROR_HANDLERS } from '../tokens/app-config.token';
|
|
12
|
+
import { getRemoteEnv } from './environment-utils';
|
|
13
|
+
import { parseTenantFromUrl } from './multi-tenancy-utils';
|
|
14
|
+
export function getInitialData(injector) {
|
|
15
|
+
const fn = async () => {
|
|
16
|
+
const environmentService = injector.get(EnvironmentService);
|
|
17
|
+
const configState = injector.get(ConfigStateService);
|
|
18
|
+
const options = injector.get(CORE_OPTIONS);
|
|
19
|
+
environmentService.setState(options.environment);
|
|
20
|
+
await getRemoteEnv(injector, options.environment);
|
|
21
|
+
await parseTenantFromUrl(injector);
|
|
22
|
+
await injector.get(AuthService).init();
|
|
23
|
+
if (options.skipGetAppConfiguration)
|
|
24
|
+
return;
|
|
25
|
+
return configState
|
|
26
|
+
.refreshAppState()
|
|
27
|
+
.pipe(tap(() => checkAccessToken(injector)), tap(() => {
|
|
28
|
+
const currentTenant = configState.getOne('currentTenant');
|
|
29
|
+
injector.get(SessionStateService).setTenant(currentTenant);
|
|
30
|
+
}), catchError(error => {
|
|
31
|
+
const appInitErrorHandlers = injector.get(APP_INIT_ERROR_HANDLERS, null);
|
|
32
|
+
if (appInitErrorHandlers && appInitErrorHandlers.length) {
|
|
33
|
+
appInitErrorHandlers.forEach(func => func(error));
|
|
34
|
+
}
|
|
35
|
+
return throwError(error);
|
|
36
|
+
}))
|
|
37
|
+
.toPromise();
|
|
38
|
+
};
|
|
39
|
+
return fn;
|
|
40
|
+
}
|
|
41
|
+
export function checkAccessToken(injector) {
|
|
42
|
+
const configState = injector.get(ConfigStateService);
|
|
43
|
+
const oAuth = injector.get(OAuthService);
|
|
44
|
+
if (oAuth.hasValidAccessToken() && !configState.getDeep('currentUser.id')) {
|
|
45
|
+
clearOAuthStorage();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function localeInitializer(injector) {
|
|
49
|
+
const fn = () => {
|
|
50
|
+
const sessionState = injector.get(SessionStateService);
|
|
51
|
+
const { registerLocaleFn } = injector.get(CORE_OPTIONS);
|
|
52
|
+
const lang = sessionState.getLanguage() || 'en';
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
registerLocaleFn(lang).then(module => {
|
|
55
|
+
if (module?.default)
|
|
56
|
+
registerLocaleData(module.default);
|
|
57
|
+
return resolve('resolved');
|
|
58
|
+
}, reject);
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
return fn;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy9pbml0aWFsLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxRQUFrQjtJQUMvQyxNQUFNLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNwQixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxD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Z2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQUJQIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vbW9kZWxzL2Vudmlyb25tZW50JztcclxuaW1wb3J0IHsgQ3VycmVudFRlbmFudER0byB9IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvbXVsdGktdGVuYW5jeS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjbGVhck9BdXRoU3RvcmFnZSB9IGZyb20gJy4uL3N0cmF0ZWdpZXMvYXV0aC1mbG93LnN0cmF0ZWd5JztcclxuaW1wb3J0IHsgQ09SRV9PUFRJT05TIH0gZnJvbSAnLi4vdG9rZW5zL29wdGlvbnMudG9rZW4nO1xyXG5pbXBvcnQgeyBBUFBfSU5JVF9FUlJPUl9IQU5ETEVSUyB9IGZyb20gJy4uL3Rva2Vucy9hcHAtY29uZmlnLnRva2VuJztcclxuaW1wb3J0IHsgZ2V0UmVtb3RlRW52IH0gZnJvbSAnLi9lbnZpcm9ubWVudC11dGlscyc7XHJcbmltcG9ydCB7IHBhcnNlVGVuYW50RnJvbVVybCB9IGZyb20gJy4vbXVsdGktdGVuYW5jeS11dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbERhdGEoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgY29uc3QgZm4gPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGNvbmZpZ1N0YXRlID0gaW5qZWN0b3IuZ2V0KENvbmZpZ1N0YXRlU2VydmljZSk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gaW5qZWN0b3IuZ2V0KENPUkVfT1BUSU9OUykgYXMgQUJQLlJvb3Q7XHJcblxyXG4gICAgZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKG9wdGlvbnMuZW52aXJvbm1lbnQgYXMgRW52aXJvbm1lbnQpO1xyXG4gICAgYXdhaXQgZ2V0UmVtb3RlRW52KGluamVjdG9yLCBvcHRpb25zLmVudmlyb25tZW50KTtcclxuICAgIGF3YWl0IHBhcnNlVGVuYW50RnJvbVVybChpbmplY3Rvcik7XHJcbiAgICBhd2FpdCBpbmplY3Rvci5nZXQoQXV0aFNlcnZpY2UpLmluaXQoKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5za2lwR2V0QXBwQ29uZmlndXJhdGlvbikgcmV0dXJuO1xyXG5cclxuICAgIHJldHVybiBjb25maWdTdGF0ZVxyXG4gICAgICAucmVmcmVzaEFwcFN0YXRlKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IGNoZWNrQWNjZXNzVG9rZW4oaW5qZWN0b3IpKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFRlbmFudCA9IGNvbmZpZ1N0YXRlLmdldE9uZSgnY3VycmVudFRlbmFudCcpIGFzIEN1cnJlbnRUZW5hbnREdG87XHJcbiAgICAgICAgICBpbmplY3Rvci5nZXQoU2Vzc2lvblN0YXRlU2VydmljZSkuc2V0VGVuYW50KGN1cnJlbnRUZW5hbnQpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYXBwSW5pdEVycm9ySGFuZGxlcnMgPSBpbmplY3Rvci5nZXQoQVBQX0lOSVRfRVJST1JfSEFORExFUlMsIG51bGwpO1xyXG4gICAgICAgICAgaWYgKGFwcEluaXRFcnJvckhhbmRsZXJzICYmIGFwcEluaXRFcnJvckhhbmRsZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhcHBJbml0RXJyb3JIYW5kbGVycy5mb3JFYWNoKGZ1bmMgPT4gZnVuYyhlcnJvcikpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGZuO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBY2Nlc3NUb2tlbihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICBjb25zdCBjb25maWdTdGF0ZSA9IGluamVjdG9yLmdldChDb25maWdTdGF0ZVNlcnZpY2UpO1xyXG4gIGNvbnN0IG9BdXRoID0gaW5qZWN0b3IuZ2V0KE9BdXRoU2VydmljZSk7XHJcbiAgaWYgKG9BdXRoLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSAmJiAhY29uZmlnU3RhdGUuZ2V0RGVlcCgnY3VycmVudFVzZXIuaWQnKSkge1xyXG4gICAgY2xlYXJPQXV0aFN0b3JhZ2UoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2NhbGVJbml0aWFsaXplcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICBjb25zdCBmbiA9ICgpID0+IHtcclxuICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RhdGVTZXJ2aWNlKTtcclxuICAgIGNvbnN0IHsgcmVnaXN0ZXJMb2NhbGVGbiB9OiBBQlAuUm9vdCA9IGluamVjdG9yLmdldChDT1JFX09QVElPTlMpO1xyXG5cclxuICAgIGNvbnN0IGxhbmcgPSBzZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UoKSB8fCAnZW4nO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHJlZ2lzdGVyTG9jYWxlRm4obGFuZykudGhlbihtb2R1bGUgPT4ge1xyXG4gICAgICAgIGlmIChtb2R1bGU/LmRlZmF1bHQpIHJlZ2lzdGVyTG9jYWxlRGF0YShtb2R1bGUuZGVmYXVsdCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXNvbHZlKCdyZXNvbHZlZCcpO1xyXG4gICAgICB9LCByZWplY3QpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGZuO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import compare from 'just-compare';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { distinctUntilChanged, filter, map } from 'rxjs/operators';
|
|
4
|
+
import { deepMerge } from './object-utils';
|
|
5
|
+
export class InternalStore {
|
|
6
|
+
constructor(initialState) {
|
|
7
|
+
this.initialState = initialState;
|
|
8
|
+
this.state$ = new BehaviorSubject(this.initialState);
|
|
9
|
+
this.update$ = new Subject();
|
|
10
|
+
this.sliceState = (selector, compareFn = compare) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn));
|
|
11
|
+
this.sliceUpdate = (selector, filterFn = (x) => x !== undefined) => this.update$.pipe(map(selector), filter(filterFn));
|
|
12
|
+
}
|
|
13
|
+
get state() {
|
|
14
|
+
return this.state$.value;
|
|
15
|
+
}
|
|
16
|
+
patch(state) {
|
|
17
|
+
let patchedState = state;
|
|
18
|
+
if (typeof state === 'object' && !Array.isArray(state)) {
|
|
19
|
+
patchedState = { ...this.state, ...state };
|
|
20
|
+
}
|
|
21
|
+
this.state$.next(patchedState);
|
|
22
|
+
this.update$.next(patchedState);
|
|
23
|
+
}
|
|
24
|
+
deepPatch(state) {
|
|
25
|
+
this.state$.next(deepMerge(this.state, state));
|
|
26
|
+
this.update$.next(state);
|
|
27
|
+
}
|
|
28
|
+
set(state) {
|
|
29
|
+
this.state$.next(state);
|
|
30
|
+
this.update$.next(state);
|
|
31
|
+
}
|
|
32
|
+
reset() {
|
|
33
|
+
this.set(this.initialState);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtc3RvcmUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdXRpbHMvaW50ZXJuYWwtc3RvcmUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBTyxhQUFhO0lBbUJ4QixZQUFvQixZQUFtQjtRQUFuQixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQWxCL0IsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2RCxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXNCLENBQUM7UUFNcEQsZUFBVSxHQUFHLENBQ1gsUUFBaUMsRUFDakMsWUFBK0MsT0FBTyxFQUN0RCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdEUsZ0JBQVcsR0FBRyxDQUNaLFFBQThDLEVBQzlDLFdBQVcsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQ3hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZCxDQUFDO0lBZDNDLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQWNELEtBQUssQ0FBQyxLQUFxQjtRQUN6QixJQUFJLFlBQVksR0FBRyxLQUFjLENBQUM7UUFFbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RELFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBeUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQVk7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUEyQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tcGFyZSBmcm9tICdqdXN0LWNvbXBhcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJy4vb2JqZWN0LXV0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFN0b3JlPFN0YXRlPiB7XHJcbiAgcHJpdmF0ZSBzdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YXRlPih0aGlzLmluaXRpYWxTdGF0ZSk7XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlJCA9IG5ldyBTdWJqZWN0PERlZXBQYXJ0aWFsPFN0YXRlPj4oKTtcclxuXHJcbiAgZ2V0IHN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2xpY2VTdGF0ZSA9IDxTbGljZT4oXHJcbiAgICBzZWxlY3RvcjogKHN0YXRlOiBTdGF0ZSkgPT4gU2xpY2UsXHJcbiAgICBjb21wYXJlRm46IChzMTogU2xpY2UsIHMyOiBTbGljZSkgPT4gYm9vbGVhbiA9IGNvbXBhcmUsXHJcbiAgKSA9PiB0aGlzLnN0YXRlJC5waXBlKG1hcChzZWxlY3RvciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGNvbXBhcmVGbikpO1xyXG5cclxuICBzbGljZVVwZGF0ZSA9IDxTbGljZT4oXHJcbiAgICBzZWxlY3RvcjogKHN0YXRlOiBEZWVwUGFydGlhbDxTdGF0ZT4pID0+IFNsaWNlLFxyXG4gICAgZmlsdGVyRm4gPSAoeDogU2xpY2UpID0+IHggIT09IHVuZGVmaW5lZCxcclxuICApID0+IHRoaXMudXBkYXRlJC5waXBlKG1hcChzZWxlY3RvciksIGZpbHRlcihmaWx0ZXJGbikpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluaXRpYWxTdGF0ZTogU3RhdGUpIHt9XHJcblxyXG4gIHBhdGNoKHN0YXRlOiBQYXJ0aWFsPFN0YXRlPikge1xyXG4gICAgbGV0IHBhdGNoZWRTdGF0ZSA9IHN0YXRlIGFzIFN0YXRlO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHN0YXRlKSkge1xyXG4gICAgICBwYXRjaGVkU3RhdGUgPSB7IC4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZSQubmV4dChwYXRjaGVkU3RhdGUpO1xyXG4gICAgdGhpcy51cGRhdGUkLm5leHQocGF0Y2hlZFN0YXRlIGFzIERlZXBQYXJ0aWFsPFN0YXRlPik7XHJcbiAgfVxyXG5cclxuICBkZWVwUGF0Y2goc3RhdGU6IERlZXBQYXJ0aWFsPFN0YXRlPikge1xyXG4gICAgdGhpcy5zdGF0ZSQubmV4dChkZWVwTWVyZ2UodGhpcy5zdGF0ZSwgc3RhdGUpKTtcclxuICAgIHRoaXMudXBkYXRlJC5uZXh0KHN0YXRlKTtcclxuICB9XHJcblxyXG4gIHNldChzdGF0ZTogU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gICAgdGhpcy51cGRhdGUkLm5leHQoc3RhdGUgYXMgRGVlcFBhcnRpYWw8U3RhdGU+KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zZXQodGhpcy5pbml0aWFsU3RhdGUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// This will not be necessary when only Angukar 9.1+ is supported
|
|
2
|
+
export function getLocaleDirection(locale) {
|
|
3
|
+
return /^(ar(-[A-Z]{2})?|ckb(-IR)?|fa(-AF)?|he|ks|lrc(-IQ)?|mzn|pa-Arab|ps(-PK)?|sd|ug|ur(-IN)?|uz-Arab|yi)$/.test(locale)
|
|
4
|
+
? 'rtl'
|
|
5
|
+
: 'ltr';
|
|
6
|
+
}
|
|
7
|
+
export function createLocalizer(localization) {
|
|
8
|
+
return (resourceName, key, defaultValue) => {
|
|
9
|
+
if (resourceName === '_')
|
|
10
|
+
return key;
|
|
11
|
+
const resource = localization?.values?.[resourceName];
|
|
12
|
+
if (!resource)
|
|
13
|
+
return defaultValue;
|
|
14
|
+
return resource[key] || defaultValue;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function createLocalizerWithFallback(localization) {
|
|
18
|
+
const findLocalization = createLocalizationFinder(localization);
|
|
19
|
+
return (resourceNames, keys, defaultValue) => {
|
|
20
|
+
const { localized } = findLocalization(resourceNames, keys);
|
|
21
|
+
return localized || defaultValue;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function createLocalizationPipeKeyGenerator(localization) {
|
|
25
|
+
const findLocalization = createLocalizationFinder(localization);
|
|
26
|
+
return (resourceNames, keys, defaultKey) => {
|
|
27
|
+
const { resourceName, key } = findLocalization(resourceNames, keys);
|
|
28
|
+
return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function createLocalizationFinder(localization) {
|
|
32
|
+
const localize = createLocalizer(localization);
|
|
33
|
+
return (resourceNames, keys) => {
|
|
34
|
+
resourceNames = resourceNames.concat(localization.defaultResourceName || '').filter(Boolean);
|
|
35
|
+
const resourceCount = resourceNames.length;
|
|
36
|
+
const keyCount = keys.length;
|
|
37
|
+
for (let i = 0; i < resourceCount; i++) {
|
|
38
|
+
const resourceName = resourceNames[i];
|
|
39
|
+
for (let j = 0; j < keyCount; j++) {
|
|
40
|
+
const key = keys[j];
|
|
41
|
+
const localized = localize(resourceName, key, null);
|
|
42
|
+
if (localized)
|
|
43
|
+
return { resourceName, key, localized };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { resourceName: undefined, key: undefined, localized: undefined };
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL2xvY2FsaXphdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxzR0FBc0csQ0FBQyxJQUFJLENBQ2hILE1BQU0sQ0FDUDtRQUNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFlBQXFEO0lBQ25GLE9BQU8sQ0FBQyxZQUFvQixFQUFFLEdBQVcsRUFBRSxZQUFvQixFQUFFLEVBQUU7UUFDakUsSUFBSSxZQUFZLEtBQUssR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBRXJDLE1BQU0sUUFBUSxHQUFHLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBRW5DLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQztJQUN2QyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFlBQXFEO0lBQy9GLE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEUsT0FBTyxDQUFDLGFBQXVCLEVBQUUsSUFBYyxFQUFFLFlBQW9CLEVBQUUsRUFBRTtRQUN2RSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sU0FBUyxJQUFJLFlBQVksQ0FBQztJQUNuQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGtDQUFrQyxDQUNoRCxZQUFxRDtJQUVyRCxNQUFNLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWhFLE9BQU8sQ0FBQyxhQUF1QixFQUFFLElBQWMsRUFBRSxVQUE4QixFQUFFLEVBQUU7UUFDakYsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzdGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLFlBQXFEO0lBQ3JGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvQyxPQUFPLENBQUMsYUFBdUIsRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNqRCxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdGLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFNBQVM7b0JBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDeEQ7U0FDRjtRQUVELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8gfSBmcm9tICcuLi9wcm94eS92b2xvL2FicC9hc3AtbmV0LWNvcmUvbXZjL2FwcGxpY2F0aW9uLWNvbmZpZ3VyYXRpb25zL21vZGVscyc7XHJcblxyXG4vLyBUaGlzIHdpbGwgbm90IGJlIG5lY2Vzc2FyeSB3aGVuIG9ubHkgQW5ndWthciA5LjErIGlzIHN1cHBvcnRlZFxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlRGlyZWN0aW9uKGxvY2FsZTogc3RyaW5nKTogJ2x0cicgfCAncnRsJyB7XHJcbiAgcmV0dXJuIC9eKGFyKC1bQS1aXXsyfSk/fGNrYigtSVIpP3xmYSgtQUYpP3xoZXxrc3xscmMoLUlRKT98bXpufHBhLUFyYWJ8cHMoLVBLKT98c2R8dWd8dXIoLUlOKT98dXotQXJhYnx5aSkkLy50ZXN0KFxyXG4gICAgbG9jYWxlLFxyXG4gIClcclxuICAgID8gJ3J0bCdcclxuICAgIDogJ2x0cic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbGl6ZXIobG9jYWxpemF0aW9uOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICByZXR1cm4gKHJlc291cmNlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChyZXNvdXJjZU5hbWUgPT09ICdfJykgcmV0dXJuIGtleTtcclxuXHJcbiAgICBjb25zdCByZXNvdXJjZSA9IGxvY2FsaXphdGlvbj8udmFsdWVzPy5bcmVzb3VyY2VOYW1lXTtcclxuXHJcbiAgICBpZiAoIXJlc291cmNlKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgIHJldHVybiByZXNvdXJjZVtrZXldIHx8IGRlZmF1bHRWYWx1ZTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKGxvY2FsaXphdGlvbjogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25Db25maWd1cmF0aW9uRHRvKSB7XHJcbiAgY29uc3QgZmluZExvY2FsaXphdGlvbiA9IGNyZWF0ZUxvY2FsaXphdGlvbkZpbmRlcihsb2NhbGl6YXRpb24pO1xyXG5cclxuICByZXR1cm4gKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHsgbG9jYWxpemVkIH0gPSBmaW5kTG9jYWxpemF0aW9uKHJlc291cmNlTmFtZXMsIGtleXMpO1xyXG4gICAgcmV0dXJuIGxvY2FsaXplZCB8fCBkZWZhdWx0VmFsdWU7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXphdGlvblBpcGVLZXlHZW5lcmF0b3IoXHJcbiAgbG9jYWxpemF0aW9uOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8sXHJcbikge1xyXG4gIGNvbnN0IGZpbmRMb2NhbGl6YXRpb24gPSBjcmVhdGVMb2NhbGl6YXRpb25GaW5kZXIobG9jYWxpemF0aW9uKTtcclxuXHJcbiAgcmV0dXJuIChyZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10sIGRlZmF1bHRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgY29uc3QgeyByZXNvdXJjZU5hbWUsIGtleSB9ID0gZmluZExvY2FsaXphdGlvbihyZXNvdXJjZU5hbWVzLCBrZXlzKTtcclxuICAgIHJldHVybiAhcmVzb3VyY2VOYW1lID8gZGVmYXVsdEtleSA6IHJlc291cmNlTmFtZSA9PT0gJ18nID8ga2V5IDogYCR7cmVzb3VyY2VOYW1lfTo6JHtrZXl9YDtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVMb2NhbGl6YXRpb25GaW5kZXIobG9jYWxpemF0aW9uOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICBjb25zdCBsb2NhbGl6ZSA9IGNyZWF0ZUxvY2FsaXplcihsb2NhbGl6YXRpb24pO1xyXG5cclxuICByZXR1cm4gKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgcmVzb3VyY2VOYW1lcyA9IHJlc291cmNlTmFtZXMuY29uY2F0KGxvY2FsaXphdGlvbi5kZWZhdWx0UmVzb3VyY2VOYW1lIHx8ICcnKS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VDb3VudCA9IHJlc291cmNlTmFtZXMubGVuZ3RoO1xyXG4gICAgY29uc3Qga2V5Q291bnQgPSBrZXlzLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlQ291bnQ7IGkrKykge1xyXG4gICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSByZXNvdXJjZU5hbWVzW2ldO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlDb3VudDsgaisrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tqXTtcclxuICAgICAgICBjb25zdCBsb2NhbGl6ZWQgPSBsb2NhbGl6ZShyZXNvdXJjZU5hbWUsIGtleSwgbnVsbCk7XHJcbiAgICAgICAgaWYgKGxvY2FsaXplZCkgcmV0dXJuIHsgcmVzb3VyY2VOYW1lLCBrZXksIGxvY2FsaXplZCB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgcmVzb3VyY2VOYW1lOiB1bmRlZmluZWQsIGtleTogdW5kZWZpbmVkLCBsb2NhbGl6ZWQ6IHVuZGVmaW5lZCB9O1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import clone from 'just-clone';
|
|
2
|
+
import { tap } from 'rxjs/operators';
|
|
3
|
+
import { EnvironmentService } from '../services/environment.service';
|
|
4
|
+
import { MultiTenancyService } from '../services/multi-tenancy.service';
|
|
5
|
+
import { createTokenParser } from './string-utils';
|
|
6
|
+
const tenancyPlaceholder = '{0}';
|
|
7
|
+
function getCurrentTenancyName(appBaseUrl) {
|
|
8
|
+
if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')
|
|
9
|
+
appBaseUrl += '/';
|
|
10
|
+
const parseTokens = createTokenParser(appBaseUrl);
|
|
11
|
+
const token = tenancyPlaceholder.replace(/[}{]/g, '');
|
|
12
|
+
return parseTokens(window.location.href)[token]?.[0];
|
|
13
|
+
}
|
|
14
|
+
function getCurrentTenancyNameFromUrl(tenantKey) {
|
|
15
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
16
|
+
return urlParams.get(tenantKey);
|
|
17
|
+
}
|
|
18
|
+
export async function parseTenantFromUrl(injector) {
|
|
19
|
+
const environmentService = injector.get(EnvironmentService);
|
|
20
|
+
const multiTenancyService = injector.get(MultiTenancyService);
|
|
21
|
+
const baseUrl = environmentService.getEnvironment()?.application?.baseUrl || '';
|
|
22
|
+
const tenancyName = getCurrentTenancyName(baseUrl);
|
|
23
|
+
const hideTenantBox = () => {
|
|
24
|
+
multiTenancyService.isTenantBoxVisible = false;
|
|
25
|
+
};
|
|
26
|
+
const setDomainTenant = (tenant) => {
|
|
27
|
+
multiTenancyService.domainTenant = {
|
|
28
|
+
id: tenant.tenantId,
|
|
29
|
+
name: tenant.name,
|
|
30
|
+
isAvailable: true,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const setEnvironmentWithDomainTenant = (tenant) => {
|
|
34
|
+
hideTenantBox();
|
|
35
|
+
setDomainTenant(tenant);
|
|
36
|
+
};
|
|
37
|
+
if (tenancyName) {
|
|
38
|
+
/**
|
|
39
|
+
* We have to replace tenant name within the urls from environment,
|
|
40
|
+
* because the code below will make a http request to find information about the domain tenant.
|
|
41
|
+
* Before this request takes place, we need to replace placeholders aka "{0}".
|
|
42
|
+
*/
|
|
43
|
+
replaceTenantNameWithinEnvironment(injector, tenancyName);
|
|
44
|
+
return multiTenancyService
|
|
45
|
+
.setTenantByName(tenancyName)
|
|
46
|
+
.pipe(tap(setEnvironmentWithDomainTenant))
|
|
47
|
+
.toPromise();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
/**
|
|
51
|
+
* If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.
|
|
52
|
+
*/
|
|
53
|
+
replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');
|
|
54
|
+
const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);
|
|
55
|
+
if (tenantIdFromQueryParams) {
|
|
56
|
+
return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return Promise.resolve();
|
|
60
|
+
}
|
|
61
|
+
function replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {
|
|
62
|
+
const environmentService = injector.get(EnvironmentService);
|
|
63
|
+
const environment = clone(environmentService.getEnvironment());
|
|
64
|
+
if (environment.application.baseUrl) {
|
|
65
|
+
environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);
|
|
66
|
+
}
|
|
67
|
+
if (environment.oAuthConfig.redirectUri) {
|
|
68
|
+
environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);
|
|
69
|
+
}
|
|
70
|
+
environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName);
|
|
71
|
+
Object.keys(environment.apis).forEach(api => {
|
|
72
|
+
Object.keys(environment.apis[api]).forEach(key => {
|
|
73
|
+
environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return environmentService.setState(environment);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy9tdWx0aS10ZW5hbmN5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUUvQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsU0FBUyxxQkFBcUIsQ0FBQyxVQUFrQjtJQUMvQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHO1FBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUV4RSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNs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QyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJztcclxuXHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9tb2RlbHMvZW52aXJvbm1lbnQnO1xyXG5cclxuaW1wb3J0IHsgRmluZFRlbmFudFJlc3VsdER0byB9IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvbXVsdGktdGVuYW5jeS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlUZW5hbmN5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL211bHRpLXRlbmFuY3kuc2VydmljZSc7XHJcbmltcG9ydCB7IGNyZWF0ZVRva2VuUGFyc2VyIH0gZnJvbSAnLi9zdHJpbmctdXRpbHMnO1xyXG5cclxuY29uc3QgdGVuYW5jeVBsYWNlaG9sZGVyID0gJ3swfSc7XHJcblxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VGVuYW5jeU5hbWUoYXBwQmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBpZiAoYXBwQmFzZVVybC5jaGFyQXQoYXBwQmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSBhcHBCYXNlVXJsICs9ICcvJztcclxuXHJcbiAgY29uc3QgcGFyc2VUb2tlbnMgPSBjcmVhdGVUb2tlblBhcnNlcihhcHBCYXNlVXJsKTtcclxuICBjb25zdCB0b2tlbiA9IHRlbmFuY3lQbGFjZWhvbGRlci5yZXBsYWNlKC9bfXtdL2csICcnKTtcclxuICByZXR1cm4gcGFyc2VUb2tlbnMod2luZG93LmxvY2F0aW9uLmhyZWYpW3Rva2VuXT8uWzBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VGVuYW5jeU5hbWVGcm9tVXJsKHRlbmFudEtleTogc3RyaW5nKSB7XHJcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICByZXR1cm4gdXJsUGFyYW1zLmdldCh0ZW5hbnRLZXkpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUZW5hbnRGcm9tVXJsKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gIGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG4gIGNvbnN0IG11bHRpVGVuYW5jeVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTXVsdGlUZW5hbmN5U2VydmljZSk7XHJcblxyXG4gIGNvbnN0IGJhc2VVcmwgPSBlbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKT8uYXBwbGljYXRpb24/LmJhc2VVcmwgfHwgJyc7XHJcbiAgY29uc3QgdGVuYW5jeU5hbWUgPSBnZXRDdXJyZW50VGVuYW5jeU5hbWUoYmFzZVVybCk7XHJcblxyXG4gIGNvbnN0IGhpZGVUZW5hbnRCb3ggPSAoKSA9PiB7XHJcbiAgICBtdWx0aVRlbmFuY3lTZXJ2aWNlLmlzVGVuYW50Qm94VmlzaWJsZSA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNldERvbWFpblRlbmFudCA9ICh0ZW5hbnQ6IEZpbmRUZW5hbnRSZXN1bHREdG8pID0+IHtcclxuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuZG9tYWluVGVuYW50ID0ge1xyXG4gICAgICBpZDogdGVuYW50LnRlbmFudElkLFxyXG4gICAgICBuYW1lOiB0ZW5hbnQubmFtZSxcclxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCA9ICh0ZW5hbnQ6IEZpbmRUZW5hbnRSZXN1bHREdG8pID0+IHtcclxuICAgIGhpZGVUZW5hbnRCb3goKTtcclxuICAgIHNldERvbWFpblRlbmFudCh0ZW5hbnQpO1xyXG4gIH07XHJcblxyXG4gIGlmICh0ZW5hbmN5TmFtZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXZSBoYXZlIHRvIHJlcGxhY2UgdGVuYW50IG5hbWUgd2l0aGluIHRoZSB1cmxzIGZyb20gZW52aXJvbm1lbnQsXHJcbiAgICAgKiBiZWNhdXNlIHRoZSBjb2RlIGJlbG93IHdpbGwgbWFrZSBhIGh0dHAgcmVxdWVzdCB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkb21haW4gdGVuYW50LlxyXG4gICAgICogQmVmb3JlIHRoaXMgcmVxdWVzdCB0YWtlcyBwbGFjZSwgd2UgbmVlZCB0byByZXBsYWNlIHBsYWNlaG9sZGVycyBha2EgXCJ7MH1cIi5cclxuICAgICAqL1xyXG4gICAgcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChpbmplY3RvciwgdGVuYW5jeU5hbWUpO1xyXG4gICAgcmV0dXJuIG11bHRpVGVuYW5jeVNlcnZpY2VcclxuICAgICAgLnNldFRlbmFudEJ5TmFtZSh0ZW5hbmN5TmFtZSlcclxuICAgICAgLnBpcGUodGFwKHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCkpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBubyB0ZW5hbnQsIHdlIHN0aWxsIGhhdmUgdG8gY2xlYW4gdXAgezB9LiBmcm9tIGJhc2VVcmwgdG8gYXZvaWQgaW5jb3JyZWN0IGh0dHAgcmVxdWVzdHMuXHJcbiAgICAgKi9cclxuICAgIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsICcnLCB0ZW5hbmN5UGxhY2Vob2xkZXIgKyAnLicpO1xyXG5cclxuICAgIGNvbnN0IHRlbmFudElkRnJvbVF1ZXJ5UGFyYW1zID0gZ2V0Q3VycmVudFRlbmFuY3lOYW1lRnJvbVVybChtdWx0aVRlbmFuY3lTZXJ2aWNlLnRlbmFudEtleSk7XHJcbiAgICBpZiAodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpIHtcclxuICAgICAgcmV0dXJuIG11bHRpVGVuYW5jeVNlcnZpY2Uuc2V0VGVuYW50QnlJZCh0ZW5hbnRJZEZyb21RdWVyeVBhcmFtcykudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoXHJcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gIHRlbmFuY3lOYW1lOiBzdHJpbmcsXHJcbiAgcGxhY2Vob2xkZXIgPSB0ZW5hbmN5UGxhY2Vob2xkZXIsXHJcbikge1xyXG4gIGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xyXG5cclxuICBjb25zdCBlbnZpcm9ubWVudCA9IGNsb25lKGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSBhcyBFbnZpcm9ubWVudDtcclxuXHJcbiAgaWYgKGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwpIHtcclxuICAgIGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcHBsaWNhdGlvbi5iYXNlVXJsLnJlcGxhY2UoXHJcbiAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICB0ZW5hbmN5TmFtZSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkpIHtcclxuICAgIGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLnJlZGlyZWN0VXJpID0gZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkucmVwbGFjZShcclxuICAgICAgcGxhY2Vob2xkZXIsXHJcbiAgICAgIHRlbmFuY3lOYW1lLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLmlzc3VlciA9IGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLmlzc3Vlci5yZXBsYWNlKHBsYWNlaG9sZGVyLCB0ZW5hbmN5TmFtZSk7XHJcblxyXG4gIE9iamVjdC5rZXlzKGVudmlyb25tZW50LmFwaXMpLmZvckVhY2goYXBpID0+IHtcclxuICAgIE9iamVjdC5rZXlzKGVudmlyb25tZW50LmFwaXNbYXBpXSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBlbnZpcm9ubWVudC5hcGlzW2FwaV1ba2V5XSA9IGVudmlyb25tZW50LmFwaXNbYXBpXVtrZXldLnJlcGxhY2UocGxhY2Vob2xkZXIsIHRlbmFuY3lOYW1lKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKGVudmlyb25tZW50KTtcclxufVxyXG4iXX0=
|
|
File without changes
|
|
File without changes
|