@abp/ng.core 5.0.0-rc.1 → 5.0.2
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/abp-ng.core.d.ts +5 -5
- package/bundles/abp-ng.core-locale.umd.js +361 -361
- package/bundles/abp-ng.core-locale.umd.js.map +1 -1
- package/bundles/abp-ng.core-testing.umd.js +442 -442
- package/bundles/abp-ng.core.umd.js +4873 -4860
- package/bundles/abp-ng.core.umd.js.map +1 -1
- package/esm2015/abp-ng.core.js +4 -4
- package/esm2015/lib/abstracts/index.js +1 -1
- package/esm2015/lib/abstracts/ng-model.component.js +58 -58
- package/esm2015/lib/components/dynamic-layout.component.js +89 -99
- package/esm2015/lib/components/index.js +3 -3
- package/esm2015/lib/components/replaceable-route-container.component.js +37 -37
- package/esm2015/lib/components/router-outlet.component.js +14 -14
- package/esm2015/lib/constants/different-locales.js +336 -336
- package/esm2015/lib/constants/index.js +1 -1
- package/esm2015/lib/core.module.js +280 -280
- package/esm2015/lib/directives/autofocus.directive.js +29 -29
- package/esm2015/lib/directives/debounce.directive.js +35 -35
- package/esm2015/lib/directives/for.directive.js +150 -150
- package/esm2015/lib/directives/form-submit.directive.js +68 -68
- package/esm2015/lib/directives/index.js +8 -8
- package/esm2015/lib/directives/init.directive.js +20 -20
- package/esm2015/lib/directives/permission.directive.js +47 -47
- package/esm2015/lib/directives/replaceable-template.directive.js +120 -120
- package/esm2015/lib/directives/stop-propagation.directive.js +31 -31
- package/esm2015/lib/enums/common.js +1 -1
- package/esm2015/lib/enums/index.js +1 -1
- package/esm2015/lib/guards/auth.guard.js +28 -28
- package/esm2015/lib/guards/index.js +2 -2
- package/esm2015/lib/guards/permission.guard.js +43 -43
- package/esm2015/lib/handlers/oauth-configuration.handler.js +36 -36
- package/esm2015/lib/handlers/routes.handler.js +46 -46
- package/esm2015/lib/interceptors/api.interceptor.js +53 -53
- package/esm2015/lib/interceptors/index.js +1 -1
- package/esm2015/lib/localization.module.js +15 -15
- package/esm2015/lib/models/auth.js +1 -1
- package/esm2015/lib/models/common.js +1 -1
- package/esm2015/lib/models/dtos.js +118 -118
- package/esm2015/lib/models/environment.js +1 -1
- package/esm2015/lib/models/index.js +9 -9
- package/esm2015/lib/models/localization.js +1 -1
- package/esm2015/lib/models/replaceable-components.js +1 -1
- package/esm2015/lib/models/rest.js +2 -2
- package/esm2015/lib/models/session.js +1 -1
- package/esm2015/lib/models/utility.js +1 -1
- package/esm2015/lib/pipes/index.js +2 -2
- package/esm2015/lib/pipes/localization.pipe.js +32 -32
- package/esm2015/lib/pipes/sort.pipe.js +48 -48
- package/esm2015/lib/providers/cookie-language.provider.js +21 -21
- package/esm2015/lib/providers/locale.provider.js +21 -21
- package/esm2015/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.js +28 -28
- package/esm2015/lib/proxy/pages/abp/multi-tenancy/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.js +23 -23
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.js +24 -24
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.js +4 -4
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.js +1 -1
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.js +2 -2
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.js +1 -1
- package/esm2015/lib/proxy/volo/abp/http/modeling/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/http/modeling/models.js +2 -2
- package/esm2015/lib/proxy/volo/abp/localization/index.js +1 -1
- package/esm2015/lib/proxy/volo/abp/localization/models.js +1 -1
- package/esm2015/lib/proxy/volo/abp/models.js +1 -1
- package/esm2015/lib/services/auth.service.js +46 -46
- package/esm2015/lib/services/config-state.service.js +129 -129
- package/esm2015/lib/services/content-projection.service.js +16 -16
- package/esm2015/lib/services/dom-insertion.service.js +31 -31
- package/esm2015/lib/services/environment.service.js +34 -34
- package/esm2015/lib/services/http-error-reporter.service.js +28 -28
- package/esm2015/lib/services/http-wait.service.js +71 -71
- package/esm2015/lib/services/index.js +21 -21
- package/esm2015/lib/services/lazy-load.service.js +37 -37
- package/esm2015/lib/services/list.service.js +102 -102
- package/esm2015/lib/services/localization.service.js +181 -181
- package/esm2015/lib/services/multi-tenancy.service.js +47 -47
- package/esm2015/lib/services/permission.service.js +63 -63
- package/esm2015/lib/services/replaceable-components.service.js +48 -48
- package/esm2015/lib/services/resource-wait.service.js +38 -38
- package/esm2015/lib/services/rest.service.js +63 -59
- package/esm2015/lib/services/router-events.service.js +37 -37
- package/esm2015/lib/services/router-wait.service.js +50 -50
- package/esm2015/lib/services/routes.service.js +146 -146
- package/esm2015/lib/services/session-state.service.js +75 -75
- package/esm2015/lib/services/subscription.service.js +40 -40
- package/esm2015/lib/services/track-by.service.js +20 -20
- package/esm2015/lib/strategies/auth-flow.strategy.js +201 -201
- package/esm2015/lib/strategies/container.strategy.js +37 -37
- package/esm2015/lib/strategies/content-security.strategy.js +27 -27
- package/esm2015/lib/strategies/content.strategy.js +47 -47
- package/esm2015/lib/strategies/context.strategy.js +36 -36
- package/esm2015/lib/strategies/cross-origin.strategy.js +25 -25
- package/esm2015/lib/strategies/dom.strategy.js +26 -26
- package/esm2015/lib/strategies/index.js +8 -8
- package/esm2015/lib/strategies/loading.strategy.js +57 -57
- package/esm2015/lib/strategies/projection.strategy.js +79 -79
- package/esm2015/lib/tokens/app-config.token.js +2 -2
- package/esm2015/lib/tokens/cookie-language-key.token.js +4 -4
- package/esm2015/lib/tokens/index.js +8 -8
- package/esm2015/lib/tokens/list.token.js +2 -2
- package/esm2015/lib/tokens/localization.token.js +9 -9
- package/esm2015/lib/tokens/lodaer-delay.token.js +2 -2
- package/esm2015/lib/tokens/manage-profile.token.js +11 -11
- package/esm2015/lib/tokens/options.token.js +7 -7
- package/esm2015/lib/tokens/tenant-key.token.js +2 -2
- package/esm2015/lib/utils/array-utils.js +6 -6
- package/esm2015/lib/utils/auth-utils.js +41 -41
- package/esm2015/lib/utils/common-utils.js +28 -28
- package/esm2015/lib/utils/date-extensions.js +5 -5
- package/esm2015/lib/utils/date-utils.js +12 -12
- package/esm2015/lib/utils/environment-utils.js +35 -35
- package/esm2015/lib/utils/factory-utils.js +23 -23
- package/esm2015/lib/utils/file-utils.js +13 -13
- package/esm2015/lib/utils/form-utils.js +11 -11
- package/esm2015/lib/utils/generator-utils.js +33 -33
- package/esm2015/lib/utils/http-utils.js +18 -18
- package/esm2015/lib/utils/index.js +20 -20
- package/esm2015/lib/utils/initial-utils.js +63 -63
- package/esm2015/lib/utils/internal-store-utils.js +35 -35
- package/esm2015/lib/utils/lazy-load-utils.js +39 -39
- package/esm2015/lib/utils/localization-utils.js +49 -49
- package/esm2015/lib/utils/multi-tenancy-utils.js +82 -82
- package/esm2015/lib/utils/number-utils.js +3 -3
- package/esm2015/lib/utils/object-utils.js +36 -36
- package/esm2015/lib/utils/route-utils.js +26 -26
- package/esm2015/lib/utils/string-utils.js +25 -21
- package/esm2015/lib/utils/tree-utils.js +53 -53
- package/esm2015/lib/validators/age.validator.js +13 -13
- package/esm2015/lib/validators/credit-card.validator.js +20 -20
- package/esm2015/lib/validators/index.js +22 -22
- package/esm2015/lib/validators/range.validator.js +14 -14
- package/esm2015/lib/validators/required.validator.js +12 -12
- package/esm2015/lib/validators/string-length.validator.js +14 -14
- package/esm2015/lib/validators/url.validator.js +15 -15
- package/esm2015/locale/abp-ng.core-locale.js +4 -4
- package/esm2015/locale/public-api.js +1 -1
- package/esm2015/locale/utils/register-locale.js +43 -43
- package/esm2015/public-api.js +25 -25
- package/esm2015/testing/abp-ng.core-testing.js +4 -4
- package/esm2015/testing/lib/core-testing.module.js +61 -61
- package/esm2015/testing/lib/services/index.js +2 -2
- package/esm2015/testing/lib/services/mock-permission.service.js +34 -34
- package/esm2015/testing/lib/services/mock-rest.service.js +29 -29
- package/esm2015/testing/lib/utils/clear-page.util.js +9 -9
- package/esm2015/testing/lib/utils/index.js +2 -2
- package/esm2015/testing/lib/utils/wait.util.js +4 -4
- package/esm2015/testing/public-api.js +3 -3
- package/fesm2015/abp-ng.core-locale.js +40 -40
- package/fesm2015/abp-ng.core-locale.js.map +1 -1
- package/fesm2015/abp-ng.core-testing.js +113 -113
- package/fesm2015/abp-ng.core.js +3976 -3977
- package/fesm2015/abp-ng.core.js.map +1 -1
- package/lib/abstracts/index.d.ts +1 -1
- package/lib/abstracts/ng-model.component.d.ts +25 -25
- package/lib/components/dynamic-layout.component.d.ts +27 -27
- package/lib/components/index.d.ts +3 -3
- package/lib/components/replaceable-route-container.component.d.ts +17 -17
- package/lib/components/router-outlet.component.d.ts +5 -5
- package/lib/constants/different-locales.d.ts +334 -334
- package/lib/constants/index.d.ts +1 -1
- package/lib/core.module.d.ts +56 -56
- package/lib/directives/autofocus.directive.d.ts +12 -12
- package/lib/directives/debounce.directive.d.ts +13 -13
- package/lib/directives/for.directive.d.ts +36 -36
- package/lib/directives/form-submit.directive.d.ts +19 -19
- package/lib/directives/index.d.ts +8 -8
- package/lib/directives/init.directive.d.ts +10 -10
- package/lib/directives/permission.directive.d.ts +18 -18
- package/lib/directives/replaceable-template.directive.d.ts +30 -30
- package/lib/directives/stop-propagation.directive.d.ts +12 -12
- package/lib/enums/common.d.ts +5 -5
- package/lib/enums/index.d.ts +1 -1
- package/lib/guards/auth.guard.d.ts +13 -13
- package/lib/guards/index.d.ts +2 -2
- package/lib/guards/permission.guard.d.ts +16 -16
- package/lib/handlers/oauth-configuration.handler.d.ts +13 -13
- package/lib/handlers/routes.handler.d.ts +11 -11
- package/lib/interceptors/api.interceptor.d.ts +16 -16
- package/lib/interceptors/index.d.ts +1 -1
- package/lib/localization.module.d.ts +7 -7
- package/lib/models/auth.d.ts +6 -6
- package/lib/models/common.d.ts +77 -77
- package/lib/models/dtos.d.ts +95 -95
- package/lib/models/environment.d.ts +35 -35
- package/lib/models/index.d.ts +9 -9
- package/lib/models/localization.d.ts +5 -5
- package/lib/models/replaceable-components.d.ts +45 -45
- package/lib/models/rest.d.ts +35 -33
- package/lib/models/session.d.ts +7 -7
- package/lib/models/utility.d.ts +14 -14
- package/lib/pipes/index.d.ts +2 -2
- package/lib/pipes/localization.pipe.d.ts +12 -12
- package/lib/pipes/sort.pipe.d.ts +9 -9
- package/lib/providers/cookie-language.provider.d.ts +3 -3
- package/lib/providers/locale.provider.d.ts +9 -9
- package/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.d.ts +12 -12
- package/lib/proxy/pages/abp/multi-tenancy/index.d.ts +1 -1
- package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.d.ts +11 -11
- package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.d.ts +1 -1
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.d.ts +11 -11
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.d.ts +4 -4
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.d.ts +85 -85
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.d.ts +1 -1
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.d.ts +71 -71
- package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.d.ts +1 -1
- package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.d.ts +14 -14
- package/lib/proxy/volo/abp/http/modeling/index.d.ts +1 -1
- package/lib/proxy/volo/abp/http/modeling/models.d.ts +70 -70
- package/lib/proxy/volo/abp/localization/index.d.ts +1 -1
- package/lib/proxy/volo/abp/localization/models.d.ts +6 -6
- package/lib/proxy/volo/abp/models.d.ts +4 -4
- package/lib/services/auth.service.d.ts +17 -17
- package/lib/services/config-state.service.d.ts +339 -339
- package/lib/services/content-projection.service.d.ts +10 -10
- package/lib/services/dom-insertion.service.d.ts +10 -10
- package/lib/services/environment.service.d.ts +96 -96
- package/lib/services/http-error-reporter.service.d.ts +12 -12
- package/lib/services/http-wait.service.d.ts +30 -30
- package/lib/services/index.d.ts +21 -21
- package/lib/services/lazy-load.service.d.ts +13 -13
- package/lib/services/list.service.d.ts +39 -39
- package/lib/services/localization.service.d.ts +47 -47
- package/lib/services/multi-tenancy.service.d.ts +22 -22
- package/lib/services/permission.service.d.ts +19 -19
- package/lib/services/replaceable-components.service.d.ts +19 -19
- package/lib/services/resource-wait.service.d.ts +15 -15
- package/lib/services/rest.service.d.ts +20 -19
- package/lib/services/router-events.service.d.ts +29 -29
- package/lib/services/router-wait.service.d.ts +20 -20
- package/lib/services/routes.service.d.ts +50 -50
- package/lib/services/session-state.service.d.ts +25 -25
- package/lib/services/subscription.service.d.ts +17 -17
- package/lib/services/track-by.service.d.ts +11 -11
- package/lib/strategies/auth-flow.strategy.d.ts +367 -367
- package/lib/strategies/container.strategy.d.ts +22 -22
- package/lib/strategies/content-security.strategy.d.ts +17 -17
- package/lib/strategies/content.strategy.d.ts +26 -26
- package/lib/strategies/context.strategy.d.ts +23 -23
- package/lib/strategies/cross-origin.strategy.d.ts +14 -14
- package/lib/strategies/dom.strategy.d.ts +13 -13
- package/lib/strategies/index.d.ts +8 -8
- package/lib/strategies/loading.strategy.d.ts +28 -28
- package/lib/strategies/projection.strategy.d.ts +39 -39
- package/lib/tokens/app-config.token.d.ts +3 -3
- package/lib/tokens/cookie-language-key.token.d.ts +2 -2
- package/lib/tokens/index.d.ts +8 -8
- package/lib/tokens/list.token.d.ts +2 -2
- package/lib/tokens/localization.token.d.ts +6 -6
- package/lib/tokens/lodaer-delay.token.d.ts +2 -2
- package/lib/tokens/manage-profile.token.d.ts +2 -2
- package/lib/tokens/options.token.d.ts +4 -4
- package/lib/tokens/tenant-key.token.d.ts +2 -2
- package/lib/utils/array-utils.d.ts +1 -1
- package/lib/utils/auth-utils.d.ts +162 -162
- package/lib/utils/common-utils.d.ts +9 -9
- package/lib/utils/date-extensions.d.ts +6 -6
- package/lib/utils/date-utils.d.ts +4 -4
- package/lib/utils/environment-utils.d.ts +3 -3
- package/lib/utils/factory-utils.d.ts +9 -9
- package/lib/utils/file-utils.d.ts +1 -1
- package/lib/utils/form-utils.d.ts +2 -2
- package/lib/utils/generator-utils.d.ts +3 -3
- package/lib/utils/http-utils.d.ts +8 -8
- package/lib/utils/index.d.ts +20 -20
- package/lib/utils/initial-utils.d.ts +159 -159
- package/lib/utils/internal-store-utils.d.ts +14 -14
- package/lib/utils/lazy-load-utils.d.ts +4 -4
- package/lib/utils/localization-utils.d.ts +5 -5
- package/lib/utils/multi-tenancy-utils.d.ts +3 -3
- package/lib/utils/number-utils.d.ts +1 -1
- package/lib/utils/object-utils.d.ts +1 -1
- package/lib/utils/route-utils.d.ts +8 -8
- package/lib/utils/string-utils.d.ts +3 -2
- package/lib/utils/tree-utils.d.ts +19 -19
- package/lib/validators/age.validator.d.ts +10 -10
- package/lib/validators/credit-card.validator.d.ts +5 -5
- package/lib/validators/index.d.ts +22 -22
- package/lib/validators/range.validator.d.ts +12 -12
- package/lib/validators/required.validator.d.ts +8 -8
- package/lib/validators/string-length.validator.d.ts +14 -14
- package/lib/validators/url.validator.d.ts +5 -5
- package/locale/abp-ng.core-locale.d.ts +5 -5
- package/locale/public-api.d.ts +1 -1
- package/locale/utils/register-locale.d.ts +13 -13
- package/package.json +2 -2
- package/public-api.d.ts +24 -24
- package/testing/abp-ng.core-testing.d.ts +5 -5
- package/testing/lib/core-testing.module.d.ts +16 -16
- package/testing/lib/services/index.d.ts +2 -2
- package/testing/lib/services/mock-permission.service.d.ts +10 -10
- package/testing/lib/services/mock-rest.service.d.ts +13 -13
- package/testing/lib/utils/clear-page.util.d.ts +2 -2
- package/testing/lib/utils/index.d.ts +2 -2
- package/testing/lib/utils/wait.util.d.ts +2 -2
- package/testing/public-api.d.ts +3 -3
|
@@ -1,50 +1,50 @@
|
|
|
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
|
-
var _a;
|
|
10
|
-
if (resourceName === '_')
|
|
11
|
-
return key;
|
|
12
|
-
const resource = (_a = localization === null || localization === void 0 ? void 0 : localization.values) === null || _a === void 0 ? void 0 : _a[resourceName];
|
|
13
|
-
if (!resource)
|
|
14
|
-
return defaultValue;
|
|
15
|
-
return resource[key] || defaultValue;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
export function createLocalizerWithFallback(localization) {
|
|
19
|
-
const findLocalization = createLocalizationFinder(localization);
|
|
20
|
-
return (resourceNames, keys, defaultValue) => {
|
|
21
|
-
const { localized } = findLocalization(resourceNames, keys);
|
|
22
|
-
return localized || defaultValue;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export function createLocalizationPipeKeyGenerator(localization) {
|
|
26
|
-
const findLocalization = createLocalizationFinder(localization);
|
|
27
|
-
return (resourceNames, keys, defaultKey) => {
|
|
28
|
-
const { resourceName, key } = findLocalization(resourceNames, keys);
|
|
29
|
-
return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function createLocalizationFinder(localization) {
|
|
33
|
-
const localize = createLocalizer(localization);
|
|
34
|
-
return (resourceNames, keys) => {
|
|
35
|
-
resourceNames = resourceNames.concat(localization.defaultResourceName || '').filter(Boolean);
|
|
36
|
-
const resourceCount = resourceNames.length;
|
|
37
|
-
const keyCount = keys.length;
|
|
38
|
-
for (let i = 0; i < resourceCount; i++) {
|
|
39
|
-
const resourceName = resourceNames[i];
|
|
40
|
-
for (let j = 0; j < keyCount; j++) {
|
|
41
|
-
const key = keys[j];
|
|
42
|
-
const localized = localize(resourceName, key, null);
|
|
43
|
-
if (localized)
|
|
44
|
-
return { resourceName, key, localized };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { resourceName: undefined, key: undefined, localized: undefined };
|
|
48
|
-
};
|
|
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
|
+
var _a;
|
|
10
|
+
if (resourceName === '_')
|
|
11
|
+
return key;
|
|
12
|
+
const resource = (_a = localization === null || localization === void 0 ? void 0 : localization.values) === null || _a === void 0 ? void 0 : _a[resourceName];
|
|
13
|
+
if (!resource)
|
|
14
|
+
return defaultValue;
|
|
15
|
+
return resource[key] || defaultValue;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function createLocalizerWithFallback(localization) {
|
|
19
|
+
const findLocalization = createLocalizationFinder(localization);
|
|
20
|
+
return (resourceNames, keys, defaultValue) => {
|
|
21
|
+
const { localized } = findLocalization(resourceNames, keys);
|
|
22
|
+
return localized || defaultValue;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function createLocalizationPipeKeyGenerator(localization) {
|
|
26
|
+
const findLocalization = createLocalizationFinder(localization);
|
|
27
|
+
return (resourceNames, keys, defaultKey) => {
|
|
28
|
+
const { resourceName, key } = findLocalization(resourceNames, keys);
|
|
29
|
+
return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function createLocalizationFinder(localization) {
|
|
33
|
+
const localize = createLocalizer(localization);
|
|
34
|
+
return (resourceNames, keys) => {
|
|
35
|
+
resourceNames = resourceNames.concat(localization.defaultResourceName || '').filter(Boolean);
|
|
36
|
+
const resourceCount = resourceNames.length;
|
|
37
|
+
const keyCount = keys.length;
|
|
38
|
+
for (let i = 0; i < resourceCount; i++) {
|
|
39
|
+
const resourceName = resourceNames[i];
|
|
40
|
+
for (let j = 0; j < keyCount; j++) {
|
|
41
|
+
const key = keys[j];
|
|
42
|
+
const localized = localize(resourceName, key, null);
|
|
43
|
+
if (localized)
|
|
44
|
+
return { resourceName, key, localized };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { resourceName: undefined, key: undefined, localized: undefined };
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
50
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL2xvY2FsaXphdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxzR0FBc0csQ0FBQyxJQUFJLENBQ2hILE1BQU0sQ0FDUDtRQUNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFlBQXFEO0lBQ25GLE9BQU8sQ0FBQyxZQUFvQixFQUFFLEdBQVcsRUFBRSxZQUFvQixFQUFFLEVBQUU7O1FBQ2pFLElBQUksWUFBWSxLQUFLLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUVyQyxNQUFNLFFBQVEsR0FBRyxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxNQUFNLDBDQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFFbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsWUFBcUQ7SUFDL0YsTUFBTSxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVoRSxPQUFPLENBQUMsYUFBdUIsRUFBRSxJQUFjLEVBQUUsWUFBb0IsRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxTQUFTLElBQUksWUFBWSxDQUFDO0lBQ25DLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0NBQWtDLENBQ2hELFlBQXFEO0lBRXJELE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEUsT0FBTyxDQUFDLGFBQXVCLEVBQUUsSUFBYyxFQUFFLFVBQThCLEVBQUUsRUFBRTtRQUNqRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDN0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsWUFBcUQ7SUFDckYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9DLE9BQU8sQ0FBQyxhQUF1QixFQUFFLElBQWMsRUFBRSxFQUFFO1FBQ2pELGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0YsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksU0FBUztvQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUN4RDtTQUNGO1FBRUQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDM0UsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0byB9IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbnMvbW9kZWxzJztcblxuLy8gVGhpcyB3aWxsIG5vdCBiZSBuZWNlc3Nhcnkgd2hlbiBvbmx5IEFuZ3VrYXIgOS4xKyBpcyBzdXBwb3J0ZWRcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVEaXJlY3Rpb24obG9jYWxlOiBzdHJpbmcpOiAnbHRyJyB8ICdydGwnIHtcbiAgcmV0dXJuIC9eKGFyKC1bQS1aXXsyfSk/fGNrYigtSVIpP3xmYSgtQUYpP3xoZXxrc3xscmMoLUlRKT98bXpufHBhLUFyYWJ8cHMoLVBLKT98c2R8dWd8dXIoLUlOKT98dXotQXJhYnx5aSkkLy50ZXN0KFxuICAgIGxvY2FsZSxcbiAgKVxuICAgID8gJ3J0bCdcbiAgICA6ICdsdHInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxpemVyKGxvY2FsaXphdGlvbjogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25Db25maWd1cmF0aW9uRHRvKSB7XG4gIHJldHVybiAocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChyZXNvdXJjZU5hbWUgPT09ICdfJykgcmV0dXJuIGtleTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbG9jYWxpemF0aW9uPy52YWx1ZXM/LltyZXNvdXJjZU5hbWVdO1xuXG4gICAgaWYgKCFyZXNvdXJjZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuICAgIHJldHVybiByZXNvdXJjZVtrZXldIHx8IGRlZmF1bHRWYWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplcldpdGhGYWxsYmFjayhsb2NhbGl6YXRpb246IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0bykge1xuICBjb25zdCBmaW5kTG9jYWxpemF0aW9uID0gY3JlYXRlTG9jYWxpemF0aW9uRmluZGVyKGxvY2FsaXphdGlvbik7XG5cbiAgcmV0dXJuIChyZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgeyBsb2NhbGl6ZWQgfSA9IGZpbmRMb2NhbGl6YXRpb24ocmVzb3VyY2VOYW1lcywga2V5cyk7XG4gICAgcmV0dXJuIGxvY2FsaXplZCB8fCBkZWZhdWx0VmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbGl6YXRpb25QaXBlS2V5R2VuZXJhdG9yKFxuICBsb2NhbGl6YXRpb246IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0byxcbikge1xuICBjb25zdCBmaW5kTG9jYWxpemF0aW9uID0gY3JlYXRlTG9jYWxpemF0aW9uRmluZGVyKGxvY2FsaXphdGlvbik7XG5cbiAgcmV0dXJuIChyZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10sIGRlZmF1bHRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHsgcmVzb3VyY2VOYW1lLCBrZXkgfSA9IGZpbmRMb2NhbGl6YXRpb24ocmVzb3VyY2VOYW1lcywga2V5cyk7XG4gICAgcmV0dXJuICFyZXNvdXJjZU5hbWUgPyBkZWZhdWx0S2V5IDogcmVzb3VyY2VOYW1lID09PSAnXycgPyBrZXkgOiBgJHtyZXNvdXJjZU5hbWV9Ojoke2tleX1gO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhbGl6YXRpb25GaW5kZXIobG9jYWxpemF0aW9uOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcbiAgY29uc3QgbG9jYWxpemUgPSBjcmVhdGVMb2NhbGl6ZXIobG9jYWxpemF0aW9uKTtcblxuICByZXR1cm4gKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgIHJlc291cmNlTmFtZXMgPSByZXNvdXJjZU5hbWVzLmNvbmNhdChsb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZSB8fCAnJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VDb3VudCA9IHJlc291cmNlTmFtZXMubGVuZ3RoO1xuICAgIGNvbnN0IGtleUNvdW50ID0ga2V5cy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lc1tpXTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlDb3VudDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbal07XG4gICAgICAgIGNvbnN0IGxvY2FsaXplZCA9IGxvY2FsaXplKHJlc291cmNlTmFtZSwga2V5LCBudWxsKTtcbiAgICAgICAgaWYgKGxvY2FsaXplZCkgcmV0dXJuIHsgcmVzb3VyY2VOYW1lLCBrZXksIGxvY2FsaXplZCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHJlc291cmNlTmFtZTogdW5kZWZpbmVkLCBrZXk6IHVuZGVmaW5lZCwgbG9jYWxpemVkOiB1bmRlZmluZWQgfTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import clone from 'just-clone';
|
|
3
|
-
import { tap } from 'rxjs/operators';
|
|
4
|
-
import { EnvironmentService } from '../services/environment.service';
|
|
5
|
-
import { MultiTenancyService } from '../services/multi-tenancy.service';
|
|
6
|
-
import { createTokenParser } from './string-utils';
|
|
7
|
-
const tenancyPlaceholder = '{0}';
|
|
8
|
-
function getCurrentTenancyName(appBaseUrl) {
|
|
9
|
-
var _a;
|
|
10
|
-
if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')
|
|
11
|
-
appBaseUrl += '/';
|
|
12
|
-
const parseTokens = createTokenParser(appBaseUrl);
|
|
13
|
-
const token = tenancyPlaceholder.replace(/[}{]/g, '');
|
|
14
|
-
return (_a = parseTokens(window.location.href)[token]) === null || _a === void 0 ? void 0 : _a[0];
|
|
15
|
-
}
|
|
16
|
-
function getCurrentTenancyNameFromUrl(tenantKey) {
|
|
17
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
18
|
-
return urlParams.get(tenantKey);
|
|
19
|
-
}
|
|
20
|
-
export function parseTenantFromUrl(injector) {
|
|
21
|
-
var _a, _b;
|
|
22
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
const environmentService = injector.get(EnvironmentService);
|
|
24
|
-
const multiTenancyService = injector.get(MultiTenancyService);
|
|
25
|
-
const baseUrl = ((_b = (_a = environmentService.getEnvironment()) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.baseUrl) || '';
|
|
26
|
-
const tenancyName = getCurrentTenancyName(baseUrl);
|
|
27
|
-
const hideTenantBox = () => {
|
|
28
|
-
multiTenancyService.isTenantBoxVisible = false;
|
|
29
|
-
};
|
|
30
|
-
const setDomainTenant = (tenant) => {
|
|
31
|
-
multiTenancyService.domainTenant = {
|
|
32
|
-
id: tenant.tenantId,
|
|
33
|
-
name: tenant.name,
|
|
34
|
-
isAvailable: true,
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
const setEnvironmentWithDomainTenant = (tenant) => {
|
|
38
|
-
hideTenantBox();
|
|
39
|
-
setDomainTenant(tenant);
|
|
40
|
-
};
|
|
41
|
-
if (tenancyName) {
|
|
42
|
-
/**
|
|
43
|
-
* We have to replace tenant name within the urls from environment,
|
|
44
|
-
* because the code below will make a http request to find information about the domain tenant.
|
|
45
|
-
* Before this request takes place, we need to replace placeholders aka "{0}".
|
|
46
|
-
*/
|
|
47
|
-
replaceTenantNameWithinEnvironment(injector, tenancyName);
|
|
48
|
-
return multiTenancyService
|
|
49
|
-
.setTenantByName(tenancyName)
|
|
50
|
-
.pipe(tap(setEnvironmentWithDomainTenant))
|
|
51
|
-
.toPromise();
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
/**
|
|
55
|
-
* If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.
|
|
56
|
-
*/
|
|
57
|
-
replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');
|
|
58
|
-
const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);
|
|
59
|
-
if (tenantIdFromQueryParams) {
|
|
60
|
-
return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return Promise.resolve();
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {
|
|
67
|
-
const environmentService = injector.get(EnvironmentService);
|
|
68
|
-
const environment = clone(environmentService.getEnvironment());
|
|
69
|
-
if (environment.application.baseUrl) {
|
|
70
|
-
environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);
|
|
71
|
-
}
|
|
72
|
-
if (environment.oAuthConfig.redirectUri) {
|
|
73
|
-
environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);
|
|
74
|
-
}
|
|
75
|
-
environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName);
|
|
76
|
-
Object.keys(environment.apis).forEach(api => {
|
|
77
|
-
Object.keys(environment.apis[api]).forEach(key => {
|
|
78
|
-
environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
return environmentService.setState(environment);
|
|
82
|
-
}
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import clone from 'just-clone';
|
|
3
|
+
import { tap } from 'rxjs/operators';
|
|
4
|
+
import { EnvironmentService } from '../services/environment.service';
|
|
5
|
+
import { MultiTenancyService } from '../services/multi-tenancy.service';
|
|
6
|
+
import { createTokenParser } from './string-utils';
|
|
7
|
+
const tenancyPlaceholder = '{0}';
|
|
8
|
+
function getCurrentTenancyName(appBaseUrl) {
|
|
9
|
+
var _a;
|
|
10
|
+
if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')
|
|
11
|
+
appBaseUrl += '/';
|
|
12
|
+
const parseTokens = createTokenParser(appBaseUrl);
|
|
13
|
+
const token = tenancyPlaceholder.replace(/[}{]/g, '');
|
|
14
|
+
return (_a = parseTokens(window.location.href)[token]) === null || _a === void 0 ? void 0 : _a[0];
|
|
15
|
+
}
|
|
16
|
+
function getCurrentTenancyNameFromUrl(tenantKey) {
|
|
17
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
18
|
+
return urlParams.get(tenantKey);
|
|
19
|
+
}
|
|
20
|
+
export function parseTenantFromUrl(injector) {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
const environmentService = injector.get(EnvironmentService);
|
|
24
|
+
const multiTenancyService = injector.get(MultiTenancyService);
|
|
25
|
+
const baseUrl = ((_b = (_a = environmentService.getEnvironment()) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.baseUrl) || '';
|
|
26
|
+
const tenancyName = getCurrentTenancyName(baseUrl);
|
|
27
|
+
const hideTenantBox = () => {
|
|
28
|
+
multiTenancyService.isTenantBoxVisible = false;
|
|
29
|
+
};
|
|
30
|
+
const setDomainTenant = (tenant) => {
|
|
31
|
+
multiTenancyService.domainTenant = {
|
|
32
|
+
id: tenant.tenantId,
|
|
33
|
+
name: tenant.name,
|
|
34
|
+
isAvailable: true,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const setEnvironmentWithDomainTenant = (tenant) => {
|
|
38
|
+
hideTenantBox();
|
|
39
|
+
setDomainTenant(tenant);
|
|
40
|
+
};
|
|
41
|
+
if (tenancyName) {
|
|
42
|
+
/**
|
|
43
|
+
* We have to replace tenant name within the urls from environment,
|
|
44
|
+
* because the code below will make a http request to find information about the domain tenant.
|
|
45
|
+
* Before this request takes place, we need to replace placeholders aka "{0}".
|
|
46
|
+
*/
|
|
47
|
+
replaceTenantNameWithinEnvironment(injector, tenancyName);
|
|
48
|
+
return multiTenancyService
|
|
49
|
+
.setTenantByName(tenancyName)
|
|
50
|
+
.pipe(tap(setEnvironmentWithDomainTenant))
|
|
51
|
+
.toPromise();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
/**
|
|
55
|
+
* If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.
|
|
56
|
+
*/
|
|
57
|
+
replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');
|
|
58
|
+
const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);
|
|
59
|
+
if (tenantIdFromQueryParams) {
|
|
60
|
+
return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return Promise.resolve();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {
|
|
67
|
+
const environmentService = injector.get(EnvironmentService);
|
|
68
|
+
const environment = clone(environmentService.getEnvironment());
|
|
69
|
+
if (environment.application.baseUrl) {
|
|
70
|
+
environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);
|
|
71
|
+
}
|
|
72
|
+
if (environment.oAuthConfig.redirectUri) {
|
|
73
|
+
environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);
|
|
74
|
+
}
|
|
75
|
+
environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName);
|
|
76
|
+
Object.keys(environment.apis).forEach(api => {
|
|
77
|
+
Object.keys(environment.apis[api]).forEach(key => {
|
|
78
|
+
environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
return environmentService.setState(environment);
|
|
82
|
+
}
|
|
83
83
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy9tdWx0aS10ZW5hbmN5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFFL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXJDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDLFNBQVMscUJBQXFCLENBQUMsVUFBa0I7O0lBQy9DLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7UUFBRSxVQUFVLElBQUksR0FBRyxDQUFDO0lBRXhFLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBTyxNQUFBLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQywwQ0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFnQixrQkFBa0IsQ0FBQyxRQUFrQjs7O1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTlELE1BQU0sT0FBTyxHQUFHLENBQUEsTUFBQSxNQUFBLGtCQUFrQixDQUFDLGNBQWMsRUFBRSwwQ0FBRSxXQUFXLDBDQUFFLE9BQU8sS0FBSSxFQUFFLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUN0RCxtQkFBbUIsQ0FBQyxZQUFZLEdBQUc7Z0JBQ2pDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUNyRSxhQUFhLEVBQUUsQ0FBQztZQUNoQixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUU7WUFDZjs7OztlQUlHO1lBQ0gsa0NBQWtDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELE9BQU8sbUJBQW1CO2lCQUN2QixlQUFlLENBQUMsV0FBVyxDQUFDO2lCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7aUJBQ3pDLFNBQVMsRUFBRSxDQUFDO1NBQ2hCO2FBQU07WUFDTDs7ZUFFRztZQUNILGtDQUFrQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFFM0UsTUFBTSx1QkFBdUIsR0FBRyw0QkFBNEIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RixJQUFJLHVCQUF1QixFQUFFO2dCQUMzQixPQUFPLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQy9FO1NBQ0Y7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Q0FDMUI7QUFFRCxTQUFTLGtDQUFrQyxDQUN6QyxRQUFrQixFQUNsQixXQUFtQixFQUNuQixXQUFXLEdBQUcsa0JBQWtCO0lBRWhDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBZ0IsQ0FBQztJQUU5RSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1FBQ25DLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkUsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0tBQ0g7SUFFRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1FBQ3ZDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDL0UsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0tBQ0g7SUFFRCxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnO1xuXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL21vZGVscy9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IEZpbmRUZW5hbnRSZXN1bHREdG8gfSBmcm9tICcuLi9wcm94eS92b2xvL2FicC9hc3AtbmV0LWNvcmUvbXZjL211bHRpLXRlbmFuY3kvbW9kZWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlUZW5hbmN5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL211bHRpLXRlbmFuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVUb2tlblBhcnNlciB9IGZyb20gJy4vc3RyaW5nLXV0aWxzJztcblxuY29uc3QgdGVuYW5jeVBsYWNlaG9sZGVyID0gJ3swfSc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZShhcHBCYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYXBwQmFzZVVybC5jaGFyQXQoYXBwQmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSBhcHBCYXNlVXJsICs9ICcvJztcblxuICBjb25zdCBwYXJzZVRva2VucyA9IGNyZWF0ZVRva2VuUGFyc2VyKGFwcEJhc2VVcmwpO1xuICBjb25zdCB0b2tlbiA9IHRlbmFuY3lQbGFjZWhvbGRlci5yZXBsYWNlKC9bfXtdL2csICcnKTtcbiAgcmV0dXJuIHBhcnNlVG9rZW5zKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVt0b2tlbl0/LlswXTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRlbmFuY3lOYW1lRnJvbVVybCh0ZW5hbnRLZXk6IHN0cmluZykge1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICByZXR1cm4gdXJsUGFyYW1zLmdldCh0ZW5hbnRLZXkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUZW5hbnRGcm9tVXJsKGluamVjdG9yOiBJbmplY3Rvcikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgbXVsdGlUZW5hbmN5U2VydmljZSA9IGluamVjdG9yLmdldChNdWx0aVRlbmFuY3lTZXJ2aWNlKTtcblxuICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVudmlyb25tZW50KCk/LmFwcGxpY2F0aW9uPy5iYXNlVXJsIHx8ICcnO1xuICBjb25zdCB0ZW5hbmN5TmFtZSA9IGdldEN1cnJlbnRUZW5hbmN5TmFtZShiYXNlVXJsKTtcblxuICBjb25zdCBoaWRlVGVuYW50Qm94ID0gKCkgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuaXNUZW5hbnRCb3hWaXNpYmxlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3Qgc2V0RG9tYWluVGVuYW50ID0gKHRlbmFudDogRmluZFRlbmFudFJlc3VsdER0bykgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuZG9tYWluVGVuYW50ID0ge1xuICAgICAgaWQ6IHRlbmFudC50ZW5hbnRJZCxcbiAgICAgIG5hbWU6IHRlbmFudC5uYW1lLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBzZXRFbnZpcm9ubWVudFdpdGhEb21haW5UZW5hbnQgPSAodGVuYW50OiBGaW5kVGVuYW50UmVzdWx0RHRvKSA9PiB7XG4gICAgaGlkZVRlbmFudEJveCgpO1xuICAgIHNldERvbWFpblRlbmFudCh0ZW5hbnQpO1xuICB9O1xuXG4gIGlmICh0ZW5hbmN5TmFtZSkge1xuICAgIC8qKlxuICAgICAqIFdlIGhhdmUgdG8gcmVwbGFjZSB0ZW5hbnQgbmFtZSB3aXRoaW4gdGhlIHVybHMgZnJvbSBlbnZpcm9ubWVudCxcbiAgICAgKiBiZWNhdXNlIHRoZSBjb2RlIGJlbG93IHdpbGwgbWFrZSBhIGh0dHAgcmVxdWVzdCB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkb21haW4gdGVuYW50LlxuICAgICAqIEJlZm9yZSB0aGlzIHJlcXVlc3QgdGFrZXMgcGxhY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSBwbGFjZWhvbGRlcnMgYWthIFwiezB9XCIuXG4gICAgICovXG4gICAgcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChpbmplY3RvciwgdGVuYW5jeU5hbWUpO1xuICAgIHJldHVybiBtdWx0aVRlbmFuY3lTZXJ2aWNlXG4gICAgICAuc2V0VGVuYW50QnlOYW1lKHRlbmFuY3lOYW1lKVxuICAgICAgLnBpcGUodGFwKHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgaXMgbm8gdGVuYW50LCB3ZSBzdGlsbCBoYXZlIHRvIGNsZWFuIHVwIHswfS4gZnJvbSBiYXNlVXJsIHRvIGF2b2lkIGluY29ycmVjdCBodHRwIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsICcnLCB0ZW5hbmN5UGxhY2Vob2xkZXIgKyAnLicpO1xuXG4gICAgY29uc3QgdGVuYW50SWRGcm9tUXVlcnlQYXJhbXMgPSBnZXRDdXJyZW50VGVuYW5jeU5hbWVGcm9tVXJsKG11bHRpVGVuYW5jeVNlcnZpY2UudGVuYW50S2V5KTtcbiAgICBpZiAodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpIHtcbiAgICAgIHJldHVybiBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5SWQodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpLnRvUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICB0ZW5hbmN5TmFtZTogc3RyaW5nLFxuICBwbGFjZWhvbGRlciA9IHRlbmFuY3lQbGFjZWhvbGRlcixcbikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcblxuICBjb25zdCBlbnZpcm9ubWVudCA9IGNsb25lKGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSBhcyBFbnZpcm9ubWVudDtcblxuICBpZiAoZW52aXJvbm1lbnQuYXBwbGljYXRpb24uYmFzZVVybCkge1xuICAgIGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcHBsaWNhdGlvbi5iYXNlVXJsLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkpIHtcbiAgICBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5yZWRpcmVjdFVyaSA9IGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLnJlZGlyZWN0VXJpLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5pc3N1ZXIgPSBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5pc3N1ZXIucmVwbGFjZShwbGFjZWhvbGRlciwgdGVuYW5jeU5hbWUpO1xuXG4gIE9iamVjdC5rZXlzKGVudmlyb25tZW50LmFwaXMpLmZvckVhY2goYXBpID0+IHtcbiAgICBPYmplY3Qua2V5cyhlbnZpcm9ubWVudC5hcGlzW2FwaV0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGVudmlyb25tZW50LmFwaXNbYXBpXVtrZXldID0gZW52aXJvbm1lbnQuYXBpc1thcGldW2tleV0ucmVwbGFjZShwbGFjZWhvbGRlciwgdGVuYW5jeU5hbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKGVudmlyb25tZW50KTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function isNumber(value) {
|
|
2
|
-
return value == Number(value);
|
|
3
|
-
}
|
|
1
|
+
export function isNumber(value) {
|
|
2
|
+
return value == Number(value);
|
|
3
|
+
}
|
|
4
4
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL251bWJlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQXNCO0lBQzdDLE9BQU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09IE51bWJlcih2YWx1ZSk7XG59XG4iXX0=
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { exists, isArray, isNode, isNullOrUndefined, isObject, isObjectAndNotArrayNotNode, } from './common-utils';
|
|
2
|
-
export function deepMerge(target, source) {
|
|
3
|
-
if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) {
|
|
4
|
-
return deepMergeRecursively(target, source);
|
|
5
|
-
}
|
|
6
|
-
else if (isNullOrUndefined(target) && isNullOrUndefined(source)) {
|
|
7
|
-
return {};
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
return exists(source) ? source : target;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function deepMergeRecursively(target, source) {
|
|
14
|
-
const shouldNotRecurse = isNullOrUndefined(target) ||
|
|
15
|
-
isNullOrUndefined(source) || // at least one not defined
|
|
16
|
-
isArray(target) ||
|
|
17
|
-
isArray(source) || // at least one array
|
|
18
|
-
!isObject(target) ||
|
|
19
|
-
!isObject(source) || // at least one not an object
|
|
20
|
-
isNode(target) ||
|
|
21
|
-
isNode(source); // at least one node
|
|
22
|
-
/**
|
|
23
|
-
* if we will not recurse any further,
|
|
24
|
-
* we will prioritize source if it is a defined value.
|
|
25
|
-
*/
|
|
26
|
-
if (shouldNotRecurse) {
|
|
27
|
-
return exists(source) ? source : target;
|
|
28
|
-
}
|
|
29
|
-
const keysOfTarget = Object.keys(target);
|
|
30
|
-
const keysOfSource = Object.keys(source);
|
|
31
|
-
const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource));
|
|
32
|
-
return [...uniqueKeys].reduce((retVal, key) => {
|
|
33
|
-
retVal[key] = deepMergeRecursively(target[key], source[key]);
|
|
34
|
-
return retVal;
|
|
35
|
-
}, {});
|
|
36
|
-
}
|
|
1
|
+
import { exists, isArray, isNode, isNullOrUndefined, isObject, isObjectAndNotArrayNotNode, } from './common-utils';
|
|
2
|
+
export function deepMerge(target, source) {
|
|
3
|
+
if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) {
|
|
4
|
+
return deepMergeRecursively(target, source);
|
|
5
|
+
}
|
|
6
|
+
else if (isNullOrUndefined(target) && isNullOrUndefined(source)) {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return exists(source) ? source : target;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function deepMergeRecursively(target, source) {
|
|
14
|
+
const shouldNotRecurse = isNullOrUndefined(target) ||
|
|
15
|
+
isNullOrUndefined(source) || // at least one not defined
|
|
16
|
+
isArray(target) ||
|
|
17
|
+
isArray(source) || // at least one array
|
|
18
|
+
!isObject(target) ||
|
|
19
|
+
!isObject(source) || // at least one not an object
|
|
20
|
+
isNode(target) ||
|
|
21
|
+
isNode(source); // at least one node
|
|
22
|
+
/**
|
|
23
|
+
* if we will not recurse any further,
|
|
24
|
+
* we will prioritize source if it is a defined value.
|
|
25
|
+
*/
|
|
26
|
+
if (shouldNotRecurse) {
|
|
27
|
+
return exists(source) ? source : target;
|
|
28
|
+
}
|
|
29
|
+
const keysOfTarget = Object.keys(target);
|
|
30
|
+
const keysOfSource = Object.keys(source);
|
|
31
|
+
const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource));
|
|
32
|
+
return [...uniqueKeys].reduce((retVal, key) => {
|
|
33
|
+
retVal[key] = deepMergeRecursively(target[key], source[key]);
|
|
34
|
+
return retVal;
|
|
35
|
+
}, {});
|
|
36
|
+
}
|
|
37
37
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL29iamVjdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQ3RDLElBQUksMEJBQTBCLENBQUMsTUFBTSxDQUFDLElBQUksMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDNUUsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0M7U0FBTSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pFLE9BQU8sRUFBRSxDQUFDO0tBQ1g7U0FBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUN6QztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQ3BCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUN6QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSwyQkFBMkI7UUFDeEQsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxxQkFBcUI7UUFDeEMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDZCQUE2QjtRQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBRXRDOzs7T0FHRztJQUNILElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3pDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZXhpc3RzLFxuICBpc0FycmF5LFxuICBpc05vZGUsXG4gIGlzTnVsbE9yVW5kZWZpbmVkLFxuICBpc09iamVjdCxcbiAgaXNPYmplY3RBbmROb3RBcnJheU5vdE5vZGUsXG59IGZyb20gJy4vY29tbW9uLXV0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAoaXNPYmplY3RBbmROb3RBcnJheU5vdE5vZGUodGFyZ2V0KSAmJiBpc09iamVjdEFuZE5vdEFycmF5Tm90Tm9kZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuIGRlZXBNZXJnZVJlY3Vyc2l2ZWx5KHRhcmdldCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc051bGxPclVuZGVmaW5lZCh0YXJnZXQpICYmIGlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpIHtcbiAgICByZXR1cm4ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV4aXN0cyhzb3VyY2UpID8gc291cmNlIDogdGFyZ2V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZVJlY3Vyc2l2ZWx5KHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IHNob3VsZE5vdFJlY3Vyc2UgPVxuICAgIGlzTnVsbE9yVW5kZWZpbmVkKHRhcmdldCkgfHxcbiAgICBpc051bGxPclVuZGVmaW5lZChzb3VyY2UpIHx8IC8vIGF0IGxlYXN0IG9uZSBub3QgZGVmaW5lZFxuICAgIGlzQXJyYXkodGFyZ2V0KSB8fFxuICAgIGlzQXJyYXkoc291cmNlKSB8fCAvLyBhdCBsZWFzdCBvbmUgYXJyYXlcbiAgICAhaXNPYmplY3QodGFyZ2V0KSB8fFxuICAgICFpc09iamVjdChzb3VyY2UpIHx8IC8vIGF0IGxlYXN0IG9uZSBub3QgYW4gb2JqZWN0XG4gICAgaXNOb2RlKHRhcmdldCkgfHxcbiAgICBpc05vZGUoc291cmNlKTsgLy8gYXQgbGVhc3Qgb25lIG5vZGVcblxuICAvKipcbiAgICogaWYgd2Ugd2lsbCBub3QgcmVjdXJzZSBhbnkgZnVydGhlcixcbiAgICogd2Ugd2lsbCBwcmlvcml0aXplIHNvdXJjZSBpZiBpdCBpcyBhIGRlZmluZWQgdmFsdWUuXG4gICAqL1xuICBpZiAoc2hvdWxkTm90UmVjdXJzZSkge1xuICAgIHJldHVybiBleGlzdHMoc291cmNlKSA/IHNvdXJjZSA6IHRhcmdldDtcbiAgfVxuXG4gIGNvbnN0IGtleXNPZlRhcmdldCA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG4gIGNvbnN0IGtleXNPZlNvdXJjZSA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIGNvbnN0IHVuaXF1ZUtleXMgPSBuZXcgU2V0KGtleXNPZlRhcmdldC5jb25jYXQoa2V5c09mU291cmNlKSk7XG4gIHJldHVybiBbLi4udW5pcXVlS2V5c10ucmVkdWNlKChyZXRWYWwsIGtleSkgPT4ge1xuICAgIHJldFZhbFtrZXldID0gZGVlcE1lcmdlUmVjdXJzaXZlbHkodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICByZXR1cm4gcmV0VmFsO1xuICB9LCB7fSk7XG59XG4iXX0=
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { PRIMARY_OUTLET } from '@angular/router';
|
|
3
|
-
import { noop } from './common-utils';
|
|
4
|
-
export function findRoute(routesService, path) {
|
|
5
|
-
const node = routesService.find(route => route.path === path);
|
|
6
|
-
return node || path === '/'
|
|
7
|
-
? node
|
|
8
|
-
: findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');
|
|
9
|
-
}
|
|
10
|
-
export function getRoutePath(router, url = router.url) {
|
|
11
|
-
const emptyGroup = { segments: [] };
|
|
12
|
-
const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];
|
|
13
|
-
return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');
|
|
14
|
-
}
|
|
15
|
-
export function reloadRoute(router, ngZone) {
|
|
16
|
-
const { shouldReuseRoute } = router.routeReuseStrategy;
|
|
17
|
-
const setRouteReuse = (reuse) => {
|
|
18
|
-
router.routeReuseStrategy.shouldReuseRoute = reuse;
|
|
19
|
-
};
|
|
20
|
-
setRouteReuse(() => false);
|
|
21
|
-
router.navigated = false;
|
|
22
|
-
ngZone.run(() => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
yield router.navigateByUrl(router.url).catch(noop);
|
|
24
|
-
setRouteReuse(shouldReuseRoute);
|
|
25
|
-
}));
|
|
26
|
-
}
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { PRIMARY_OUTLET } from '@angular/router';
|
|
3
|
+
import { noop } from './common-utils';
|
|
4
|
+
export function findRoute(routesService, path) {
|
|
5
|
+
const node = routesService.find(route => route.path === path);
|
|
6
|
+
return node || path === '/'
|
|
7
|
+
? node
|
|
8
|
+
: findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');
|
|
9
|
+
}
|
|
10
|
+
export function getRoutePath(router, url = router.url) {
|
|
11
|
+
const emptyGroup = { segments: [] };
|
|
12
|
+
const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];
|
|
13
|
+
return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');
|
|
14
|
+
}
|
|
15
|
+
export function reloadRoute(router, ngZone) {
|
|
16
|
+
const { shouldReuseRoute } = router.routeReuseStrategy;
|
|
17
|
+
const setRouteReuse = (reuse) => {
|
|
18
|
+
router.routeReuseStrategy.shouldReuseRoute = reuse;
|
|
19
|
+
};
|
|
20
|
+
setRouteReuse(() => false);
|
|
21
|
+
router.navigated = false;
|
|
22
|
+
ngZone.run(() => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
yield router.navigateByUrl(router.url).catch(noop);
|
|
24
|
+
setRouteReuse(shouldReuseRoute);
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
27
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdXRpbHMvcm91dGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0saUJBQWlCLENBQUM7QUFHMUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE1BQU0sVUFBVSxTQUFTLENBQUMsYUFBNEIsRUFBRSxJQUFZO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBRTlELE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHO1FBQ3pCLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUc7SUFDM0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFxQixDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWMsRUFBRSxNQUFjO0lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQThCLEVBQUUsRUFBRTtRQUN2RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3JELENBQUMsQ0FBQztJQUVGLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVMsRUFBRTtRQUNwQixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUFJJTUFSWV9PVVRMRVQsIFJvdXRlciwgVXJsU2VnbWVudEdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFCUCB9IGZyb20gJy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JvdXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2NvbW1vbi11dGlscyc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUm91dGUocm91dGVzU2VydmljZTogUm91dGVzU2VydmljZSwgcGF0aDogc3RyaW5nKTogVHJlZU5vZGU8QUJQLlJvdXRlPiB7XG4gIGNvbnN0IG5vZGUgPSByb3V0ZXNTZXJ2aWNlLmZpbmQocm91dGUgPT4gcm91dGUucGF0aCA9PT0gcGF0aCk7XG5cbiAgcmV0dXJuIG5vZGUgfHwgcGF0aCA9PT0gJy8nXG4gICAgPyBub2RlXG4gICAgOiBmaW5kUm91dGUocm91dGVzU2VydmljZSwgcGF0aC5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5qb2luKCcvJykgfHwgJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlUGF0aChyb3V0ZXI6IFJvdXRlciwgdXJsID0gcm91dGVyLnVybCkge1xuICBjb25zdCBlbXB0eUdyb3VwID0geyBzZWdtZW50czogW10gfSBhcyBVcmxTZWdtZW50R3JvdXA7XG4gIGNvbnN0IHByaW1hcnlHcm91cCA9IHJvdXRlci5wYXJzZVVybCh1cmwpLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gIHJldHVybiAnLycgKyAocHJpbWFyeUdyb3VwIHx8IGVtcHR5R3JvdXApLnNlZ21lbnRzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmpvaW4oJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZFJvdXRlKHJvdXRlcjogUm91dGVyLCBuZ1pvbmU6IE5nWm9uZSkge1xuICBjb25zdCB7IHNob3VsZFJldXNlUm91dGUgfSA9IHJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3k7XG4gIGNvbnN0IHNldFJvdXRlUmV1c2UgPSAocmV1c2U6IHR5cGVvZiBzaG91bGRSZXVzZVJvdXRlKSA9PiB7XG4gICAgcm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gcmV1c2U7XG4gIH07XG5cbiAgc2V0Um91dGVSZXVzZSgoKSA9PiBmYWxzZSk7XG4gIHJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcblxuICBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByb3V0ZXIubmF2aWdhdGVCeVVybChyb3V0ZXIudXJsKS5jYXRjaChub29wKTtcbiAgICBzZXRSb3V0ZVJldXNlKHNob3VsZFJldXNlUm91dGUpO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
export function createTokenParser(format) {
|
|
2
|
-
return (str) => {
|
|
3
|
-
const tokens = [];
|
|
4
|
-
const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => {
|
|
5
|
-
tokens.push(token);
|
|
6
|
-
return '(.+)';
|
|
7
|
-
});
|
|
8
|
-
const matches = (str.match(regex) || []).slice(1);
|
|
9
|
-
return matches.reduce((acc, v, i) => {
|
|
10
|
-
const key = tokens[i];
|
|
11
|
-
acc[key] = [...(acc[key] || []), v].filter(Boolean);
|
|
12
|
-
return acc;
|
|
13
|
-
}, {});
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export function interpolate(text, params) {
|
|
17
|
-
return text
|
|
18
|
-
.replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => { var _a; return (_a = params[digit]) !== null && _a !== void 0 ? _a : match; })
|
|
19
|
-
.replace(/\s+/g, ' ');
|
|
20
|
-
}
|
|
21
|
-
|
|
1
|
+
export function createTokenParser(format) {
|
|
2
|
+
return (str) => {
|
|
3
|
+
const tokens = [];
|
|
4
|
+
const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => {
|
|
5
|
+
tokens.push(token);
|
|
6
|
+
return '(.+)';
|
|
7
|
+
});
|
|
8
|
+
const matches = (str.match(regex) || []).slice(1);
|
|
9
|
+
return matches.reduce((acc, v, i) => {
|
|
10
|
+
const key = tokens[i];
|
|
11
|
+
acc[key] = [...(acc[key] || []), v].filter(Boolean);
|
|
12
|
+
return acc;
|
|
13
|
+
}, {});
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function interpolate(text, params) {
|
|
17
|
+
return text
|
|
18
|
+
.replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => { var _a; return (_a = params[digit]) !== null && _a !== void 0 ? _a : match; })
|
|
19
|
+
.replace(/\s+/g, ' ');
|
|
20
|
+
}
|
|
21
|
+
export function escapeHtmlChars(value) {
|
|
22
|
+
return (value &&
|
|
23
|
+
value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL3N0cmluZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYztJQUM5QyxPQUFPLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDckIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUE4QixDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWSxFQUFFLE1BQWdCO0lBQ3hELE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBSSxLQUFLLENBQUEsRUFBQSxDQUFDO1NBQ3BGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYTtJQUMzQyxPQUFPLENBQ0wsS0FBSztRQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUNqRyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlblBhcnNlcihmb3JtYXQ6IHN0cmluZykge1xuICByZXR1cm4gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlZ2V4ID0gZm9ybWF0LnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKS5yZXBsYWNlKC9cXHtcXHM/KFswLTlhLXpBLVpdKylcXHM/XFx9L2csIChfLCB0b2tlbikgPT4ge1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgcmV0dXJuICcoLispJztcbiAgICB9KTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSAoc3RyLm1hdGNoKHJlZ2V4KSB8fCBbXSkuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKGFjYywgdiwgaSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdG9rZW5zW2ldO1xuICAgICAgYWNjW2tleV0gPSBbLi4uKGFjY1trZXldIHx8IFtdKSwgdl0uZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGV4dDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbJ1wiXT9cXHtcXHMqKFxcZCspXFxzKlxcfVsnXCJdPykvZywgKF8sIG1hdGNoLCBkaWdpdCkgPT4gcGFyYW1zW2RpZ2l0XSA/PyBtYXRjaClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSHRtbENoYXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAmJlxuICAgIHZhbHVlLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
-
export class BaseTreeNode {
|
|
3
|
-
constructor(props) {
|
|
4
|
-
this.children = [];
|
|
5
|
-
this.isLeaf = true;
|
|
6
|
-
Object.assign(this, props);
|
|
7
|
-
}
|
|
8
|
-
static create(props) {
|
|
9
|
-
return new BaseTreeNode(props);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function createTreeFromList(list, keySelector, parentKeySelector, valueMapper) {
|
|
13
|
-
const map = createMapFromList(list, keySelector, valueMapper);
|
|
14
|
-
const tree = [];
|
|
15
|
-
list.forEach(row => {
|
|
16
|
-
const id = keySelector(row);
|
|
17
|
-
const parentId = parentKeySelector(row);
|
|
18
|
-
const node = map.get(id);
|
|
19
|
-
if (!node)
|
|
20
|
-
return;
|
|
21
|
-
if (parentId) {
|
|
22
|
-
const parent = map.get(parentId);
|
|
23
|
-
if (!parent)
|
|
24
|
-
return;
|
|
25
|
-
parent.children.push(node);
|
|
26
|
-
parent.isLeaf = false;
|
|
27
|
-
node.parent = parent;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
tree.push(node);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return tree;
|
|
34
|
-
}
|
|
35
|
-
export function createMapFromList(list, keySelector, valueMapper) {
|
|
36
|
-
const map = new Map();
|
|
37
|
-
list.forEach(row => map.set(keySelector(row), valueMapper(row)));
|
|
38
|
-
return map;
|
|
39
|
-
}
|
|
40
|
-
export function createTreeNodeFilterCreator(key, mapperFn) {
|
|
41
|
-
return (search) => {
|
|
42
|
-
const regex = new RegExp('.*' + search + '.*', 'i');
|
|
43
|
-
return function collectNodes(nodes, matches = []) {
|
|
44
|
-
for (const node of nodes) {
|
|
45
|
-
if (regex.test(mapperFn(node[key])))
|
|
46
|
-
matches.push(node);
|
|
47
|
-
if (node.children.length)
|
|
48
|
-
collectNodes(node.children, matches);
|
|
49
|
-
}
|
|
50
|
-
return matches;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
}
|
|
1
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
|
+
export class BaseTreeNode {
|
|
3
|
+
constructor(props) {
|
|
4
|
+
this.children = [];
|
|
5
|
+
this.isLeaf = true;
|
|
6
|
+
Object.assign(this, props);
|
|
7
|
+
}
|
|
8
|
+
static create(props) {
|
|
9
|
+
return new BaseTreeNode(props);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function createTreeFromList(list, keySelector, parentKeySelector, valueMapper) {
|
|
13
|
+
const map = createMapFromList(list, keySelector, valueMapper);
|
|
14
|
+
const tree = [];
|
|
15
|
+
list.forEach(row => {
|
|
16
|
+
const id = keySelector(row);
|
|
17
|
+
const parentId = parentKeySelector(row);
|
|
18
|
+
const node = map.get(id);
|
|
19
|
+
if (!node)
|
|
20
|
+
return;
|
|
21
|
+
if (parentId) {
|
|
22
|
+
const parent = map.get(parentId);
|
|
23
|
+
if (!parent)
|
|
24
|
+
return;
|
|
25
|
+
parent.children.push(node);
|
|
26
|
+
parent.isLeaf = false;
|
|
27
|
+
node.parent = parent;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
tree.push(node);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return tree;
|
|
34
|
+
}
|
|
35
|
+
export function createMapFromList(list, keySelector, valueMapper) {
|
|
36
|
+
const map = new Map();
|
|
37
|
+
list.forEach(row => map.set(keySelector(row), valueMapper(row)));
|
|
38
|
+
return map;
|
|
39
|
+
}
|
|
40
|
+
export function createTreeNodeFilterCreator(key, mapperFn) {
|
|
41
|
+
return (search) => {
|
|
42
|
+
const regex = new RegExp('.*' + search + '.*', 'i');
|
|
43
|
+
return function collectNodes(nodes, matches = []) {
|
|
44
|
+
for (const node of nodes) {
|
|
45
|
+
if (regex.test(mapperFn(node[key])))
|
|
46
|
+
matches.push(node);
|
|
47
|
+
if (node.children.length)
|
|
48
|
+
collectNodes(node.children, matches);
|
|
49
|
+
}
|
|
50
|
+
return matches;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
54
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy90cmVlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlEQUFpRDtBQUNqRCxNQUFNLE9BQU8sWUFBWTtJQUt2QixZQUFZLEtBQVE7UUFKcEIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFHLElBQUksQ0FBQztRQUlaLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFtQixLQUFRO1FBQ3RDLE9BQU8sSUFBSSxZQUFZLENBQUksS0FBSyxDQUFnQixDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBUyxFQUNULFdBQWlDLEVBQ2pDLGlCQUFxQyxFQUNyQyxXQUEyQjtJQUUzQixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUF1QyxFQUFFLENBQUM7SUFFcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDbkIsTUFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBYyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakI7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsSUFBUyxFQUNULFdBQWlDLEVBQ2pDLFdBQTJCO0lBSTNCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7SUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxHQUFZLEVBQ1osUUFBZ0M7SUFFaEMsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBELE9BQU8sU0FBUyxZQUFZLENBQUMsS0FBb0IsRUFBRSxPQUFPLEdBQUcsRUFBRTtZQUM3RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzICovXG5leHBvcnQgY2xhc3MgQmFzZVRyZWVOb2RlPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W10gPSBbXTtcbiAgaXNMZWFmID0gdHJ1ZTtcbiAgcGFyZW50PzogVHJlZU5vZGU8VD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFQpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BzKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGU8VCBleHRlbmRzIG9iamVjdD4ocHJvcHM6IFQpIHtcbiAgICByZXR1cm4gbmV3IEJhc2VUcmVlTm9kZTxUPihwcm9wcykgYXMgVHJlZU5vZGU8VD47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWVGcm9tTGlzdDxUIGV4dGVuZHMgb2JqZWN0LCBSIGV4dGVuZHMgdW5rbm93bj4oXG4gIGxpc3Q6IFRbXSxcbiAga2V5U2VsZWN0b3I6IChpdGVtOiBUKSA9PiBOb2RlS2V5LFxuICBwYXJlbnRLZXlTZWxlY3RvcjogdHlwZW9mIGtleVNlbGVjdG9yLFxuICB2YWx1ZU1hcHBlcjogKGl0ZW06IFQpID0+IFIsXG4pIHtcbiAgY29uc3QgbWFwID0gY3JlYXRlTWFwRnJvbUxpc3QobGlzdCwga2V5U2VsZWN0b3IsIHZhbHVlTWFwcGVyKTtcbiAgY29uc3QgdHJlZTogTm9kZVZhbHVlPFQsIHR5cGVvZiB2YWx1ZU1hcHBlcj5bXSA9IFtdO1xuXG4gIGxpc3QuZm9yRWFjaChyb3cgPT4ge1xuICAgIGNvbnN0IGlkID0ga2V5U2VsZWN0b3Iocm93KTtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudEtleVNlbGVjdG9yKHJvdyk7XG4gICAgY29uc3Qgbm9kZSA9IG1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQocGFyZW50SWQpO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIChwYXJlbnQgYXMgYW55KS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgKHBhcmVudCBhcyBhbnkpLmlzTGVhZiA9IGZhbHNlO1xuICAgICAgKG5vZGUgYXMgYW55KS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWUucHVzaChub2RlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0cmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFwRnJvbUxpc3Q8VCBleHRlbmRzIG9iamVjdCwgUiBleHRlbmRzIHVua25vd24+KFxuICBsaXN0OiBUW10sXG4gIGtleVNlbGVjdG9yOiAoaXRlbTogVCkgPT4gTm9kZUtleSxcbiAgdmFsdWVNYXBwZXI6IChpdGVtOiBUKSA9PiBSLFxuKSB7XG4gIHR5cGUgS2V5ID0gUmV0dXJuVHlwZTx0eXBlb2Yga2V5U2VsZWN0b3I+O1xuICB0eXBlIFZhbHVlID0gTm9kZVZhbHVlPFQsIHR5cGVvZiB2YWx1ZU1hcHBlcj47XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8S2V5LCBWYWx1ZT4oKTtcbiAgbGlzdC5mb3JFYWNoKHJvdyA9PiBtYXAuc2V0KGtleVNlbGVjdG9yKHJvdyksIHZhbHVlTWFwcGVyKHJvdykpKTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlRmlsdGVyQ3JlYXRvcjxUIGV4dGVuZHMgb2JqZWN0PihcbiAga2V5OiBrZXlvZiBULFxuICBtYXBwZXJGbjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyxcbikge1xuICByZXR1cm4gKHNlYXJjaDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKCcuKicgKyBzZWFyY2ggKyAnLionLCAnaScpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbGxlY3ROb2Rlcyhub2RlczogVHJlZU5vZGU8VD5bXSwgbWF0Y2hlcyA9IFtdKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QobWFwcGVyRm4obm9kZVtrZXldKSkpIG1hdGNoZXMucHVzaChub2RlKTtcblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGgpIGNvbGxlY3ROb2Rlcyhub2RlLmNoaWxkcmVuLCBtYXRjaGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVHJlZU5vZGU8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdO1xufSAmIHtcbiAgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W107XG4gIGlzTGVhZjogYm9vbGVhbjtcbiAgcGFyZW50PzogVHJlZU5vZGU8VD47XG59O1xuXG50eXBlIE5vZGVLZXkgPSBudW1iZXIgfCBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQgfCBudWxsO1xuXG50eXBlIE5vZGVWYWx1ZTxUIGV4dGVuZHMgb2JqZWN0LCBGIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55PiA9IEYgZXh0ZW5kcyB1bmRlZmluZWRcbiAgPyBUcmVlTm9kZTxUPlxuICA6IFJldHVyblR5cGU8Rj47XG4iXX0=
|