@abp/ng.core 7.2.1 → 7.3.0-rc.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/{esm2020 → esm2022}/abp-ng.core.mjs +4 -4
- package/esm2022/lib/abstracts/abstract-guard.mjs +2 -0
- package/{esm2020 → esm2022}/lib/abstracts/auth-response.model.mjs +1 -1
- package/esm2022/lib/abstracts/auth.guard.mjs +18 -0
- package/esm2022/lib/abstracts/auth.service.mjs +46 -0
- package/esm2022/lib/abstracts/index.mjs +6 -0
- package/esm2022/lib/abstracts/ng-model.component.mjs +60 -0
- package/esm2022/lib/clients/http.client.mjs +29 -0
- package/{esm2020 → esm2022}/lib/clients/index.mjs +1 -1
- package/esm2022/lib/components/dynamic-layout.component.mjs +101 -0
- package/{esm2020 → esm2022}/lib/components/index.mjs +3 -3
- package/esm2022/lib/components/replaceable-route-container.component.mjs +43 -0
- package/esm2022/lib/components/router-outlet.component.mjs +16 -0
- package/{esm2020 → esm2022}/lib/constants/different-locales.mjs +336 -336
- package/{esm2020 → esm2022}/lib/constants/index.mjs +1 -1
- package/esm2022/lib/core.module.mjs +285 -0
- package/esm2022/lib/directives/autofocus.directive.mjs +31 -0
- package/esm2022/lib/directives/debounce.directive.mjs +37 -0
- package/esm2022/lib/directives/for.directive.mjs +160 -0
- package/esm2022/lib/directives/form-submit.directive.mjs +78 -0
- package/{esm2020 → esm2022}/lib/directives/index.mjs +8 -8
- package/esm2022/lib/directives/init.directive.mjs +22 -0
- package/esm2022/lib/directives/permission.directive.mjs +75 -0
- package/esm2022/lib/directives/replaceable-template.directive.mjs +133 -0
- package/esm2022/lib/directives/stop-propagation.directive.mjs +33 -0
- package/{esm2020 → esm2022}/lib/enums/common.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/guards/index.mjs +1 -1
- package/esm2022/lib/guards/permission.guard.mjs +41 -0
- package/esm2022/lib/handlers/routes.handler.mjs +52 -0
- package/esm2022/lib/interceptors/api.interceptor.mjs +28 -0
- package/{esm2020 → esm2022}/lib/interceptors/index.mjs +1 -1
- package/esm2022/lib/localization.module.mjs +17 -0
- package/{esm2020 → esm2022}/lib/models/auth.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/common.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/dtos.mjs +134 -134
- package/{esm2020 → esm2022}/lib/models/environment.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/index.mjs +9 -9
- package/{esm2020 → esm2022}/lib/models/localization.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/replaceable-components.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/rest.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/session.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/utility.mjs +1 -1
- package/{esm2020 → esm2022}/lib/pipes/index.mjs +7 -7
- package/esm2022/lib/pipes/localization.pipe.mjs +34 -0
- package/esm2022/lib/pipes/safe-html.pipe.mjs +24 -0
- package/esm2022/lib/pipes/short-date-time.pipe.mjs +35 -0
- package/esm2022/lib/pipes/short-date.pipe.mjs +35 -0
- package/esm2022/lib/pipes/short-time.pipe.mjs +35 -0
- package/esm2022/lib/pipes/sort.pipe.mjs +50 -0
- package/esm2022/lib/pipes/to-injector.pipe.mjs +30 -0
- package/{esm2020 → esm2022}/lib/providers/cookie-language.provider.mjs +21 -21
- package/{esm2020 → esm2022}/lib/providers/include-localization-resources.provider.mjs +5 -5
- package/{esm2020 → esm2022}/lib/providers/locale.provider.mjs +25 -25
- package/esm2022/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.mjs +28 -0
- package/{esm2020 → esm2022}/lib/proxy/pages/abp/multi-tenancy/index.mjs +1 -1
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.mjs +25 -0
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.mjs +1 -1
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.mjs +25 -0
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-localization.service.mjs +25 -0
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.mjs +5 -5
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/http/modeling/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/http/modeling/models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/localization/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/localization/models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/proxy/volo/abp/models.mjs +1 -1
- package/esm2022/lib/services/config-state.service.mjs +182 -0
- package/esm2022/lib/services/content-projection.service.mjs +18 -0
- package/esm2022/lib/services/dom-insertion.service.mjs +35 -0
- package/esm2022/lib/services/environment.service.mjs +49 -0
- package/esm2022/lib/services/http-error-reporter.service.mjs +30 -0
- package/esm2022/lib/services/http-wait.service.mjs +76 -0
- package/{esm2020 → esm2022}/lib/services/index.mjs +21 -21
- package/esm2022/lib/services/lazy-load.service.mjs +41 -0
- package/esm2022/lib/services/list.service.mjs +103 -0
- package/esm2022/lib/services/local-storage.service.mjs +33 -0
- package/esm2022/lib/services/localization.service.mjs +218 -0
- package/esm2022/lib/services/multi-tenancy.service.mjs +49 -0
- package/esm2022/lib/services/permission.service.mjs +64 -0
- package/esm2022/lib/services/replaceable-components.service.mjs +50 -0
- package/esm2022/lib/services/resource-wait.service.mjs +40 -0
- package/esm2022/lib/services/rest.service.mjs +79 -0
- package/esm2022/lib/services/router-events.service.mjs +39 -0
- package/esm2022/lib/services/router-wait.service.mjs +52 -0
- package/esm2022/lib/services/routes.service.mjs +165 -0
- package/esm2022/lib/services/session-state.service.mjs +81 -0
- package/esm2022/lib/services/subscription.service.mjs +44 -0
- package/esm2022/lib/services/track-by.service.mjs +22 -0
- package/{esm2020 → esm2022}/lib/strategies/container.strategy.mjs +37 -37
- package/{esm2020 → esm2022}/lib/strategies/content-security.strategy.mjs +29 -29
- package/{esm2020 → esm2022}/lib/strategies/content.strategy.mjs +51 -51
- package/{esm2020 → esm2022}/lib/strategies/context.strategy.mjs +36 -36
- package/{esm2020 → esm2022}/lib/strategies/cross-origin.strategy.mjs +27 -27
- package/{esm2020 → esm2022}/lib/strategies/dom.strategy.mjs +26 -26
- package/{esm2020 → esm2022}/lib/strategies/index.mjs +8 -8
- package/{esm2020 → esm2022}/lib/strategies/loading.strategy.mjs +57 -57
- package/{esm2020 → esm2022}/lib/strategies/projection.strategy.mjs +79 -79
- package/{esm2020 → esm2022}/lib/tokens/app-config.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/check-authentication-state.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/cookie-language-key.token.mjs +4 -4
- package/{esm2020 → esm2022}/lib/tokens/http-context.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/include-localization-resources.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/index.mjs +15 -15
- package/{esm2020 → esm2022}/lib/tokens/list.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/localization.token.mjs +9 -9
- package/{esm2020 → esm2022}/lib/tokens/lodaer-delay.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/manage-profile.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/options.token.mjs +7 -7
- package/{esm2020 → esm2022}/lib/tokens/others-group.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/pipe-to-login.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/queue.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/tokens/set-token-response-to-storage.token.mjs +5 -5
- package/{esm2020 → esm2022}/lib/tokens/tenant-key.token.mjs +2 -2
- package/{esm2020 → esm2022}/lib/utils/array-utils.mjs +6 -6
- package/{esm2020 → esm2022}/lib/utils/common-utils.mjs +34 -34
- package/{esm2020 → esm2022}/lib/utils/date-extensions.mjs +5 -5
- package/{esm2020 → esm2022}/lib/utils/date-utils.mjs +12 -12
- package/{esm2020 → esm2022}/lib/utils/environment-utils.mjs +35 -35
- package/{esm2020 → esm2022}/lib/utils/factory-utils.mjs +24 -24
- package/{esm2020 → esm2022}/lib/utils/file-utils.mjs +13 -13
- package/{esm2020 → esm2022}/lib/utils/form-utils.mjs +11 -11
- package/{esm2020 → esm2022}/lib/utils/generator-utils.mjs +33 -33
- package/{esm2020 → esm2022}/lib/utils/http-utils.mjs +18 -18
- package/{esm2020 → esm2022}/lib/utils/index.mjs +20 -20
- package/{esm2020 → esm2022}/lib/utils/initial-utils.mjs +59 -59
- package/esm2022/lib/utils/internal-store-utils.mjs +37 -0
- package/{esm2020 → esm2022}/lib/utils/lazy-load-utils.mjs +39 -39
- package/{esm2020 → esm2022}/lib/utils/localization-utils.mjs +48 -48
- package/{esm2020 → esm2022}/lib/utils/multi-tenancy-utils.mjs +80 -80
- package/{esm2020 → esm2022}/lib/utils/number-utils.mjs +3 -3
- package/{esm2020 → esm2022}/lib/utils/object-utils.mjs +36 -36
- package/{esm2020 → esm2022}/lib/utils/queue.mjs +40 -40
- package/{esm2020 → esm2022}/lib/utils/route-utils.mjs +25 -25
- package/{esm2020 → esm2022}/lib/utils/string-utils.mjs +29 -29
- package/{esm2020 → esm2022}/lib/utils/tree-utils.mjs +69 -69
- package/{esm2020 → esm2022}/lib/validators/age.validator.mjs +13 -13
- package/{esm2020 → esm2022}/lib/validators/credit-card.validator.mjs +20 -20
- package/esm2022/lib/validators/index.mjs +29 -0
- package/{esm2020 → esm2022}/lib/validators/range.validator.mjs +14 -14
- package/{esm2020 → esm2022}/lib/validators/required.validator.mjs +14 -14
- package/{esm2020 → esm2022}/lib/validators/string-length.validator.mjs +14 -14
- package/esm2022/lib/validators/unique-character.validator.mjs +13 -0
- package/{esm2020 → esm2022}/lib/validators/url.validator.mjs +16 -16
- package/{esm2020 → esm2022}/lib/validators/username.validator.mjs +13 -13
- package/{esm2020 → esm2022}/locale/abp-ng.core-locale.mjs +4 -4
- package/{esm2020 → esm2022}/locale/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/locale/utils/register-locale.mjs +46 -46
- package/{esm2020 → esm2022}/public-api.mjs +26 -26
- package/{esm2020 → esm2022}/testing/abp-ng.core-testing.mjs +4 -4
- package/esm2022/testing/lib/core-testing.module.mjs +68 -0
- package/{esm2020 → esm2022}/testing/lib/services/index.mjs +2 -2
- package/esm2022/testing/lib/services/mock-permission.service.mjs +36 -0
- package/esm2022/testing/lib/services/mock-rest.service.mjs +32 -0
- package/{esm2020 → esm2022}/testing/lib/utils/clear-page.util.mjs +9 -9
- package/{esm2020 → esm2022}/testing/lib/utils/index.mjs +2 -2
- package/{esm2020 → esm2022}/testing/lib/utils/wait.util.mjs +4 -4
- package/{esm2020 → esm2022}/testing/public-api.mjs +3 -3
- package/{fesm2020 → fesm2022}/abp-ng.core-locale.mjs +45 -45
- package/{fesm2020 → fesm2022}/abp-ng.core-testing.mjs +120 -120
- package/{fesm2020 → fesm2022}/abp-ng.core-testing.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/abp-ng.core.mjs +4199 -4187
- package/fesm2022/abp-ng.core.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/abstracts/abstract-guard.d.ts +5 -0
- package/lib/abstracts/auth-response.model.d.ts +10 -10
- package/lib/abstracts/auth.guard.d.ts +9 -10
- package/lib/abstracts/auth.service.d.ts +30 -30
- package/lib/abstracts/index.d.ts +5 -4
- package/lib/abstracts/ng-model.component.d.ts +25 -25
- package/lib/clients/http.client.d.ts +11 -11
- package/lib/clients/index.d.ts +1 -1
- package/lib/components/dynamic-layout.component.d.ts +28 -28
- 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 +57 -57
- 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 +23 -23
- package/lib/directives/index.d.ts +8 -8
- package/lib/directives/init.directive.d.ts +10 -10
- package/lib/directives/permission.directive.d.ts +24 -24
- package/lib/directives/replaceable-template.directive.d.ts +29 -29
- 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/index.d.ts +1 -1
- package/lib/guards/permission.guard.d.ts +16 -16
- package/lib/handlers/routes.handler.d.ts +11 -11
- package/lib/interceptors/api.interceptor.d.ts +14 -14
- package/lib/interceptors/index.d.ts +1 -1
- package/lib/localization.module.d.ts +7 -7
- package/lib/models/auth.d.ts +14 -14
- package/lib/models/common.d.ts +79 -79
- package/lib/models/dtos.d.ts +107 -107
- package/lib/models/environment.d.ts +38 -38
- 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 +36 -36
- package/lib/models/session.d.ts +7 -7
- package/lib/models/utility.d.ts +14 -14
- package/lib/pipes/index.d.ts +7 -7
- package/lib/pipes/localization.pipe.d.ts +12 -12
- package/lib/pipes/safe-html.pipe.d.ts +9 -9
- package/lib/pipes/short-date-time.pipe.d.ts +12 -12
- package/lib/pipes/short-date.pipe.d.ts +12 -12
- package/lib/pipes/short-time.pipe.d.ts +12 -12
- package/lib/pipes/sort.pipe.d.ts +9 -9
- package/lib/pipes/to-injector.pipe.d.ts +10 -10
- package/lib/providers/cookie-language.provider.d.ts +3 -3
- package/lib/providers/include-localization-resources.provider.d.ts +2 -2
- 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/abp-application-localization.service.d.ts +11 -11
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.d.ts +5 -5
- package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.d.ts +106 -106
- 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 +88 -88
- package/lib/proxy/volo/abp/localization/index.d.ts +1 -1
- package/lib/proxy/volo/abp/localization/models.d.ts +7 -7
- package/lib/proxy/volo/abp/models.d.ts +4 -4
- package/lib/services/config-state.service.d.ts +379 -378
- 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 +103 -103
- 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/local-storage.service.d.ts +13 -13
- package/lib/services/localization.service.d.ts +54 -54
- 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 +24 -24
- 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 +57 -57
- package/lib/services/session-state.service.d.ts +27 -27
- package/lib/services/subscription.service.d.ts +17 -17
- package/lib/services/track-by.service.d.ts +11 -11
- 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/check-authentication-state.d.ts +3 -3
- package/lib/tokens/cookie-language-key.token.d.ts +2 -2
- package/lib/tokens/http-context.token.d.ts +2 -2
- package/lib/tokens/include-localization-resources.token.d.ts +2 -2
- package/lib/tokens/index.d.ts +15 -15
- 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/others-group.token.d.ts +2 -2
- package/lib/tokens/pipe-to-login.token.d.ts +3 -3
- package/lib/tokens/queue.token.d.ts +3 -3
- package/lib/tokens/set-token-response-to-storage.token.d.ts +6 -6
- package/lib/tokens/tenant-key.token.d.ts +2 -2
- package/lib/utils/array-utils.d.ts +1 -1
- package/lib/utils/common-utils.d.ts +11 -11
- 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 +11 -11
- 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 +3 -3
- 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 +2 -2
- package/lib/utils/queue.d.ts +14 -14
- package/lib/utils/route-utils.d.ts +8 -8
- package/lib/utils/string-utils.d.ts +3 -3
- package/lib/utils/tree-utils.d.ts +26 -26
- 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 +28 -24
- 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/unique-character.validator.d.ts +5 -0
- package/lib/validators/url.validator.d.ts +5 -5
- package/lib/validators/username.validator.d.ts +10 -10
- package/locale/index.d.ts +5 -5
- package/locale/public-api.d.ts +1 -1
- package/locale/utils/register-locale.d.ts +13 -13
- package/package.json +12 -22
- package/public-api.d.ts +25 -25
- package/testing/index.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 +14 -14
- 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
- package/esm2020/lib/abstracts/auth.guard.mjs +0 -17
- package/esm2020/lib/abstracts/auth.service.mjs +0 -45
- package/esm2020/lib/abstracts/index.mjs +0 -5
- package/esm2020/lib/abstracts/ng-model.component.mjs +0 -59
- package/esm2020/lib/clients/http.client.mjs +0 -34
- package/esm2020/lib/components/dynamic-layout.component.mjs +0 -100
- package/esm2020/lib/components/replaceable-route-container.component.mjs +0 -42
- package/esm2020/lib/components/router-outlet.component.mjs +0 -15
- package/esm2020/lib/core.module.mjs +0 -282
- package/esm2020/lib/directives/autofocus.directive.mjs +0 -30
- package/esm2020/lib/directives/debounce.directive.mjs +0 -36
- package/esm2020/lib/directives/for.directive.mjs +0 -159
- package/esm2020/lib/directives/form-submit.directive.mjs +0 -77
- package/esm2020/lib/directives/init.directive.mjs +0 -21
- package/esm2020/lib/directives/permission.directive.mjs +0 -74
- package/esm2020/lib/directives/replaceable-template.directive.mjs +0 -132
- package/esm2020/lib/directives/stop-propagation.directive.mjs +0 -32
- package/esm2020/lib/guards/permission.guard.mjs +0 -44
- package/esm2020/lib/handlers/routes.handler.mjs +0 -51
- package/esm2020/lib/interceptors/api.interceptor.mjs +0 -27
- package/esm2020/lib/localization.module.mjs +0 -16
- package/esm2020/lib/pipes/localization.pipe.mjs +0 -33
- package/esm2020/lib/pipes/safe-html.pipe.mjs +0 -23
- package/esm2020/lib/pipes/short-date-time.pipe.mjs +0 -34
- package/esm2020/lib/pipes/short-date.pipe.mjs +0 -34
- package/esm2020/lib/pipes/short-time.pipe.mjs +0 -34
- package/esm2020/lib/pipes/sort.pipe.mjs +0 -49
- package/esm2020/lib/pipes/to-injector.pipe.mjs +0 -29
- package/esm2020/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.mjs +0 -27
- package/esm2020/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.mjs +0 -24
- package/esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.mjs +0 -24
- package/esm2020/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-localization.service.mjs +0 -24
- package/esm2020/lib/services/config-state.service.mjs +0 -178
- package/esm2020/lib/services/content-projection.service.mjs +0 -17
- package/esm2020/lib/services/dom-insertion.service.mjs +0 -34
- package/esm2020/lib/services/environment.service.mjs +0 -48
- package/esm2020/lib/services/http-error-reporter.service.mjs +0 -29
- package/esm2020/lib/services/http-wait.service.mjs +0 -75
- package/esm2020/lib/services/lazy-load.service.mjs +0 -40
- package/esm2020/lib/services/list.service.mjs +0 -102
- package/esm2020/lib/services/local-storage.service.mjs +0 -32
- package/esm2020/lib/services/localization.service.mjs +0 -217
- package/esm2020/lib/services/multi-tenancy.service.mjs +0 -48
- package/esm2020/lib/services/permission.service.mjs +0 -63
- package/esm2020/lib/services/replaceable-components.service.mjs +0 -49
- package/esm2020/lib/services/resource-wait.service.mjs +0 -39
- package/esm2020/lib/services/rest.service.mjs +0 -78
- package/esm2020/lib/services/router-events.service.mjs +0 -38
- package/esm2020/lib/services/router-wait.service.mjs +0 -51
- package/esm2020/lib/services/routes.service.mjs +0 -163
- package/esm2020/lib/services/session-state.service.mjs +0 -80
- package/esm2020/lib/services/subscription.service.mjs +0 -43
- package/esm2020/lib/services/track-by.service.mjs +0 -21
- package/esm2020/lib/utils/internal-store-utils.mjs +0 -37
- package/esm2020/lib/validators/index.mjs +0 -25
- package/esm2020/testing/lib/core-testing.module.mjs +0 -67
- package/esm2020/testing/lib/services/mock-permission.service.mjs +0 -35
- package/esm2020/testing/lib/services/mock-rest.service.mjs +0 -31
- package/fesm2015/abp-ng.core-locale.mjs +0 -57
- package/fesm2015/abp-ng.core-locale.mjs.map +0 -1
- package/fesm2015/abp-ng.core-testing.mjs +0 -146
- package/fesm2015/abp-ng.core-testing.mjs.map +0 -1
- package/fesm2015/abp-ng.core.mjs +0 -4460
- package/fesm2015/abp-ng.core.mjs.map +0 -1
- package/fesm2020/abp-ng.core.mjs.map +0 -1
- package/src/lib/proxy/README.md +0 -17
- /package/{fesm2020 → fesm2022}/abp-ng.core-locale.mjs.map +0 -0
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { registerLocaleData } from '@angular/common';
|
|
2
|
-
import { Injectable, Injector, isDevMode, Optional, SkipSelf } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, combineLatest, from, Subject } from 'rxjs';
|
|
4
|
-
import { filter, map, switchMap } from 'rxjs/operators';
|
|
5
|
-
import { localizations$ } from '../tokens/localization.token';
|
|
6
|
-
import { CORE_OPTIONS } from '../tokens/options.token';
|
|
7
|
-
import { createLocalizer, createLocalizerWithFallback } from '../utils/localization-utils';
|
|
8
|
-
import { interpolate } from '../utils/string-utils';
|
|
9
|
-
import { ConfigStateService } from './config-state.service';
|
|
10
|
-
import { SessionStateService } from './session-state.service';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "./session-state.service";
|
|
13
|
-
import * as i2 from "./config-state.service";
|
|
14
|
-
export class LocalizationService {
|
|
15
|
-
constructor(sessionState, injector, otherInstance, configState) {
|
|
16
|
-
this.sessionState = sessionState;
|
|
17
|
-
this.injector = injector;
|
|
18
|
-
this.configState = configState;
|
|
19
|
-
this.latestLang = this.sessionState.getLanguage();
|
|
20
|
-
this._languageChange$ = new Subject();
|
|
21
|
-
this.uiLocalizations$ = new BehaviorSubject(new Map());
|
|
22
|
-
this.localizations$ = new BehaviorSubject(new Map());
|
|
23
|
-
if (otherInstance)
|
|
24
|
-
throw new Error('LocalizationService should have only one instance.');
|
|
25
|
-
this.listenToSetLanguage();
|
|
26
|
-
this.initLocalizationValues();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Returns currently selected language
|
|
30
|
-
* Even though this looks like it's redundant to return the same value as `getLanguage()`,
|
|
31
|
-
* it's actually not. This could be invoked any time, and the latestLang could be different from the
|
|
32
|
-
* sessionState.getLanguage() value.
|
|
33
|
-
*/
|
|
34
|
-
get currentLang() {
|
|
35
|
-
return this.latestLang || this.sessionState.getLanguage();
|
|
36
|
-
}
|
|
37
|
-
get currentLang$() {
|
|
38
|
-
return this.sessionState.getLanguage$();
|
|
39
|
-
}
|
|
40
|
-
get languageChange$() {
|
|
41
|
-
return this._languageChange$.asObservable();
|
|
42
|
-
}
|
|
43
|
-
initLocalizationValues() {
|
|
44
|
-
localizations$.subscribe(val => this.addLocalization(val));
|
|
45
|
-
const legacyResources$ = this.configState.getDeep$('localization.values');
|
|
46
|
-
const remoteLocalizations$ = this.configState.getDeep$('localization.resources');
|
|
47
|
-
const currentLanguage$ = this.sessionState.getLanguage$();
|
|
48
|
-
const uiLocalizations$ = combineLatest([currentLanguage$, this.uiLocalizations$]).pipe(map(([currentLang, localizations]) => localizations.get(currentLang)));
|
|
49
|
-
combineLatest([legacyResources$, remoteLocalizations$, uiLocalizations$])
|
|
50
|
-
.pipe(map(([legacy, resource, local]) => {
|
|
51
|
-
if (!resource) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const remote = combineLegacyandNewResources(legacy || {}, resource);
|
|
55
|
-
if (remote) {
|
|
56
|
-
if (!local) {
|
|
57
|
-
local = new Map();
|
|
58
|
-
}
|
|
59
|
-
Object.entries(remote).forEach(entry => {
|
|
60
|
-
const resourceName = entry[0];
|
|
61
|
-
const remoteTexts = entry[1];
|
|
62
|
-
let resource = local?.get(resourceName) || {};
|
|
63
|
-
resource = { ...resource, ...remoteTexts };
|
|
64
|
-
local?.set(resourceName, resource);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return local;
|
|
68
|
-
}), filter(Boolean))
|
|
69
|
-
.subscribe(val => this.localizations$.next(val));
|
|
70
|
-
}
|
|
71
|
-
addLocalization(localizations) {
|
|
72
|
-
if (!localizations)
|
|
73
|
-
return;
|
|
74
|
-
const localizationMap = this.uiLocalizations$.value;
|
|
75
|
-
localizations.forEach(loc => {
|
|
76
|
-
const cultureMap = localizationMap.get(loc.culture) || new Map();
|
|
77
|
-
loc.resources.forEach(res => {
|
|
78
|
-
let resource = cultureMap.get(res.resourceName) || {};
|
|
79
|
-
resource = { ...resource, ...res.texts };
|
|
80
|
-
cultureMap.set(res.resourceName, resource);
|
|
81
|
-
});
|
|
82
|
-
localizationMap.set(loc.culture, cultureMap);
|
|
83
|
-
});
|
|
84
|
-
this.uiLocalizations$.next(localizationMap);
|
|
85
|
-
}
|
|
86
|
-
listenToSetLanguage() {
|
|
87
|
-
this.sessionState
|
|
88
|
-
.onLanguageChange$()
|
|
89
|
-
.pipe(filter(lang => this.configState.getDeep('localization.currentCulture.cultureName') !== lang), switchMap(lang => this.configState.refreshAppState().pipe(map(() => lang))), filter(Boolean), switchMap(lang => from(this.registerLocale(lang).then(() => lang))))
|
|
90
|
-
.subscribe(lang => this._languageChange$.next(lang));
|
|
91
|
-
}
|
|
92
|
-
registerLocale(locale) {
|
|
93
|
-
const { registerLocaleFn } = this.injector.get(CORE_OPTIONS);
|
|
94
|
-
return registerLocaleFn(locale).then(module => {
|
|
95
|
-
if (module?.default)
|
|
96
|
-
registerLocaleData(module.default);
|
|
97
|
-
this.latestLang = locale;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Returns an observable localized text with the given interpolation parameters in current language.
|
|
102
|
-
* @param key Localizaton key to replace with localized text
|
|
103
|
-
* @param interpolateParams Values to interpolate
|
|
104
|
-
*/
|
|
105
|
-
get(key, ...interpolateParams) {
|
|
106
|
-
return this.configState
|
|
107
|
-
.getAll$()
|
|
108
|
-
.pipe(map(state => this.getLocalization(state, key, ...interpolateParams)));
|
|
109
|
-
}
|
|
110
|
-
getResource(resourceName) {
|
|
111
|
-
return this.localizations$.value.get(resourceName);
|
|
112
|
-
}
|
|
113
|
-
getResource$(resourceName) {
|
|
114
|
-
return this.localizations$.pipe(map(res => res.get(resourceName)));
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Returns localized text with the given interpolation parameters in current language.
|
|
118
|
-
* @param key Localization key to replace with localized text
|
|
119
|
-
* @param interpolateParams Values to intepolate.
|
|
120
|
-
*/
|
|
121
|
-
instant(key, ...interpolateParams) {
|
|
122
|
-
return this.getLocalization(this.configState.getAll(), key, ...interpolateParams);
|
|
123
|
-
}
|
|
124
|
-
localize(resourceName, key, defaultValue) {
|
|
125
|
-
return this.configState.getOne$('localization').pipe(map(createLocalizer), map(localize => localize(resourceName, key, defaultValue)));
|
|
126
|
-
}
|
|
127
|
-
localizeSync(resourceName, key, defaultValue) {
|
|
128
|
-
const localization = this.configState.getOne('localization');
|
|
129
|
-
return createLocalizer(localization)(resourceName, key, defaultValue);
|
|
130
|
-
}
|
|
131
|
-
localizeWithFallback(resourceNames, keys, defaultValue) {
|
|
132
|
-
return this.configState.getOne$('localization').pipe(map(createLocalizerWithFallback), map(localizeWithFallback => localizeWithFallback(resourceNames, keys, defaultValue)));
|
|
133
|
-
}
|
|
134
|
-
localizeWithFallbackSync(resourceNames, keys, defaultValue) {
|
|
135
|
-
const localization = this.configState.getOne('localization');
|
|
136
|
-
return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue);
|
|
137
|
-
}
|
|
138
|
-
getLocalization(state, key, ...interpolateParams) {
|
|
139
|
-
if (!key)
|
|
140
|
-
key = '';
|
|
141
|
-
let defaultValue = '';
|
|
142
|
-
if (typeof key !== 'string') {
|
|
143
|
-
defaultValue = key.defaultValue;
|
|
144
|
-
key = key.key;
|
|
145
|
-
}
|
|
146
|
-
const keys = key.split('::');
|
|
147
|
-
const warn = (message) => {
|
|
148
|
-
if (isDevMode())
|
|
149
|
-
console.warn(message);
|
|
150
|
-
};
|
|
151
|
-
if (keys.length < 2) {
|
|
152
|
-
warn('The localization source separator (::) not found.');
|
|
153
|
-
return defaultValue || key;
|
|
154
|
-
}
|
|
155
|
-
if (!state.localization)
|
|
156
|
-
return defaultValue || keys[1];
|
|
157
|
-
const sourceName = keys[0] || state.localization.defaultResourceName;
|
|
158
|
-
const sourceKey = keys[1];
|
|
159
|
-
if (sourceName === '_') {
|
|
160
|
-
return defaultValue || sourceKey;
|
|
161
|
-
}
|
|
162
|
-
if (!sourceName) {
|
|
163
|
-
warn('Localization source name is not specified and the defaultResourceName was not defined!');
|
|
164
|
-
return defaultValue || sourceKey;
|
|
165
|
-
}
|
|
166
|
-
const source = this.localizations$.value.get(sourceName);
|
|
167
|
-
if (!source) {
|
|
168
|
-
warn('Could not find localization source: ' + sourceName);
|
|
169
|
-
return defaultValue || sourceKey;
|
|
170
|
-
}
|
|
171
|
-
let localization = source[sourceKey];
|
|
172
|
-
if (typeof localization === 'undefined') {
|
|
173
|
-
return defaultValue || sourceKey;
|
|
174
|
-
}
|
|
175
|
-
interpolateParams = interpolateParams.filter(params => params != null);
|
|
176
|
-
if (localization)
|
|
177
|
-
localization = interpolate(localization, interpolateParams);
|
|
178
|
-
if (typeof localization !== 'string')
|
|
179
|
-
localization = '';
|
|
180
|
-
return localization || defaultValue || key;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
LocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LocalizationService, deps: [{ token: i1.SessionStateService }, { token: i0.Injector }, { token: LocalizationService, optional: true, skipSelf: true }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
184
|
-
LocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LocalizationService, providedIn: 'root' });
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LocalizationService, decorators: [{
|
|
186
|
-
type: Injectable,
|
|
187
|
-
args: [{ providedIn: 'root' }]
|
|
188
|
-
}], ctorParameters: function () { return [{ type: i1.SessionStateService }, { type: i0.Injector }, { type: LocalizationService, decorators: [{
|
|
189
|
-
type: Optional
|
|
190
|
-
}, {
|
|
191
|
-
type: SkipSelf
|
|
192
|
-
}] }, { type: i2.ConfigStateService }]; } });
|
|
193
|
-
function recursivelyMergeBaseResources(baseResourceName, source) {
|
|
194
|
-
const item = source[baseResourceName];
|
|
195
|
-
if (item.baseResources.length === 0) {
|
|
196
|
-
return item;
|
|
197
|
-
}
|
|
198
|
-
return item.baseResources.reduce((acc, baseResource) => {
|
|
199
|
-
const baseItem = recursivelyMergeBaseResources(baseResource, source);
|
|
200
|
-
const texts = { ...baseItem.texts, ...item.texts };
|
|
201
|
-
return { ...acc, texts };
|
|
202
|
-
}, item);
|
|
203
|
-
}
|
|
204
|
-
function mergeResourcesWithBaseResource(resource) {
|
|
205
|
-
const entities = Object.keys(resource).map(key => {
|
|
206
|
-
const newValue = recursivelyMergeBaseResources(key, resource);
|
|
207
|
-
return [key, newValue];
|
|
208
|
-
});
|
|
209
|
-
return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
210
|
-
}
|
|
211
|
-
function combineLegacyandNewResources(legacy, resource) {
|
|
212
|
-
const mergedResource = mergeResourcesWithBaseResource(resource);
|
|
213
|
-
return Object.entries(mergedResource).reduce((acc, [key, value]) => {
|
|
214
|
-
return { ...acc, [key]: value.texts };
|
|
215
|
-
}, legacy);
|
|
216
|
-
}
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvc2VydmljZXMvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU94RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLG1CQUFtQjtJQTRCOUIsWUFDVSxZQUFpQyxFQUNqQyxRQUFrQixFQUcxQixhQUFrQyxFQUMxQixXQUErQjtRQUwvQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUlsQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFqQ2pDLGVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxD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QUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUNuQyxNQUF5QixFQUN6QixRQUFxQjtJQUVyQixNQUFNLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVoRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDakUsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaXNEZXZNb2RlLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFCUCB9IGZyb20gJy4uL21vZGVscy9jb21tb24nO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25XaXRoRGVmYXVsdCB9IGZyb20gJy4uL21vZGVscy9sb2NhbGl6YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0byxcclxuICBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvLFxyXG59IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbnMvbW9kZWxzJztcclxuaW1wb3J0IHsgbG9jYWxpemF0aW9ucyQgfSBmcm9tICcuLi90b2tlbnMvbG9jYWxpemF0aW9uLnRva2VuJztcclxuaW1wb3J0IHsgQ09SRV9PUFRJT05TIH0gZnJvbSAnLi4vdG9rZW5zL29wdGlvbnMudG9rZW4nO1xyXG5pbXBvcnQgeyBjcmVhdGVMb2NhbGl6ZXIsIGNyZWF0ZUxvY2FsaXplcldpdGhGYWxsYmFjayB9IGZyb20gJy4uL3V0aWxzL2xvY2FsaXphdGlvbi11dGlscyc7XHJcbmltcG9ydCB7IGludGVycG9sYXRlIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nLXV0aWxzJztcclxuaW1wb3J0IHsgQ29uZmlnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWctc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBsYXRlc3RMYW5nID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UoKTtcclxuICBwcml2YXRlIF9sYW5ndWFnZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIHByaXZhdGUgdWlMb2NhbGl6YXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+KCksXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGl6YXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCkpO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZVxyXG4gICAqIEV2ZW4gdGhvdWdoIHRoaXMgbG9va3MgbGlrZSBpdCdzIHJlZHVuZGFudCB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMgYGdldExhbmd1YWdlKClgLFxyXG4gICAqIGl0J3MgYWN0dWFsbHkgbm90LiBUaGlzIGNvdWxkIGJlIGludm9rZWQgYW55IHRpbWUsIGFuZCB0aGUgbGF0ZXN0TGFuZyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGVcclxuICAgKiBzZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UoKSB2YWx1ZS5cclxuICAgKi9cclxuICBnZXQgY3VycmVudExhbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhdGVzdExhbmcgfHwgdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50TGFuZyQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSQoKTtcclxuICB9XHJcblxyXG4gIGdldCBsYW5ndWFnZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0YXRlOiBTZXNzaW9uU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgQFNraXBTZWxmKClcclxuICAgIG90aGVySW5zdGFuY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBpZiAob3RoZXJJbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGl6YXRpb25TZXJ2aWNlIHNob3VsZCBoYXZlIG9ubHkgb25lIGluc3RhbmNlLicpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9TZXRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5pbml0TG9jYWxpemF0aW9uVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRMb2NhbGl6YXRpb25WYWx1ZXMoKSB7XHJcbiAgICBsb2NhbGl6YXRpb25zJC5zdWJzY3JpYmUodmFsID0+IHRoaXMuYWRkTG9jYWxpemF0aW9uKHZhbCkpO1xyXG5cclxuICAgIGNvbnN0IGxlZ2FjeVJlc291cmNlcyQgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAkKCdsb2NhbGl6YXRpb24udmFsdWVzJykgYXMgT2JzZXJ2YWJsZTxcclxuICAgICAgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5cclxuICAgID47XHJcblxyXG4gICAgY29uc3QgcmVtb3RlTG9jYWxpemF0aW9ucyQgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAkKCdsb2NhbGl6YXRpb24ucmVzb3VyY2VzJykgYXMgT2JzZXJ2YWJsZTxcclxuICAgICAgUmVjb3JkPHN0cmluZywgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXNvdXJjZUR0bz5cclxuICAgID47XHJcblxyXG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlJCA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlJCgpO1xyXG5cclxuICAgIGNvbnN0IHVpTG9jYWxpemF0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtjdXJyZW50TGFuZ3VhZ2UkLCB0aGlzLnVpTG9jYWxpemF0aW9ucyRdKS5waXBlKFxyXG4gICAgICBtYXAoKFtjdXJyZW50TGFuZywgbG9jYWxpemF0aW9uc10pID0+IGxvY2FsaXphdGlvbnMuZ2V0KGN1cnJlbnRMYW5nKSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW2xlZ2FjeVJlc291cmNlcyQsIHJlbW90ZUxvY2FsaXphdGlvbnMkLCB1aUxvY2FsaXphdGlvbnMkXSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChbbGVnYWN5LCByZXNvdXJjZSwgbG9jYWxdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlc291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlbW90ZSA9IGNvbWJpbmVMZWdhY3lhbmROZXdSZXNvdXJjZXMobGVnYWN5IHx8IHt9LCByZXNvdXJjZSk7XHJcbiAgICAgICAgICBpZiAocmVtb3RlKSB7XHJcbiAgICAgICAgICAgIGlmICghbG9jYWwpIHtcclxuICAgICAgICAgICAgICBsb2NhbCA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVtb3RlKS5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBlbnRyeVswXTtcclxuICAgICAgICAgICAgICBjb25zdCByZW1vdGVUZXh0cyA9IGVudHJ5WzFdO1xyXG4gICAgICAgICAgICAgIGxldCByZXNvdXJjZSA9IGxvY2FsPy5nZXQocmVzb3VyY2VOYW1lKSB8fCB7fTtcclxuICAgICAgICAgICAgICByZXNvdXJjZSA9IHsgLi4ucmVzb3VyY2UsIC4uLnJlbW90ZVRleHRzIH07XHJcblxyXG4gICAgICAgICAgICAgIGxvY2FsPy5zZXQocmVzb3VyY2VOYW1lLCByZXNvdXJjZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBsb2NhbDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaWx0ZXIoQm9vbGVhbilcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHZhbCA9PiB0aGlzLmxvY2FsaXphdGlvbnMkLm5leHQodmFsKSk7XHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGl6YXRpb24obG9jYWxpemF0aW9ucz86IEFCUC5Mb2NhbGl6YXRpb25bXSkge1xyXG4gICAgaWYgKCFsb2NhbGl6YXRpb25zKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbG9jYWxpemF0aW9uTWFwID0gdGhpcy51aUxvY2FsaXphdGlvbnMkLnZhbHVlO1xyXG5cclxuICAgIGxvY2FsaXphdGlvbnMuZm9yRWFjaChsb2MgPT4ge1xyXG4gICAgICBjb25zdCBjdWx0dXJlTWFwID1cclxuICAgICAgICBsb2NhbGl6YXRpb25NYXAuZ2V0KGxvYy5jdWx0dXJlKSB8fCBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcclxuXHJcbiAgICAgIGxvYy5yZXNvdXJjZXMuZm9yRWFjaChyZXMgPT4ge1xyXG4gICAgICAgIGxldCByZXNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGN1bHR1cmVNYXAuZ2V0KHJlcy5yZXNvdXJjZU5hbWUpIHx8IHt9O1xyXG5cclxuICAgICAgICByZXNvdXJjZSA9IHsgLi4ucmVzb3VyY2UsIC4uLnJlcy50ZXh0cyB9O1xyXG5cclxuICAgICAgICBjdWx0dXJlTWFwLnNldChyZXMucmVzb3VyY2VOYW1lLCByZXNvdXJjZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbG9jYWxpemF0aW9uTWFwLnNldChsb2MuY3VsdHVyZSwgY3VsdHVyZU1hcCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVpTG9jYWxpemF0aW9ucyQubmV4dChsb2NhbGl6YXRpb25NYXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Ub1NldExhbmd1YWdlKCkge1xyXG4gICAgdGhpcy5zZXNzaW9uU3RhdGVcclxuICAgICAgLm9uTGFuZ3VhZ2VDaGFuZ2UkKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgbGFuZyA9PiB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAoJ2xvY2FsaXphdGlvbi5jdXJyZW50Q3VsdHVyZS5jdWx0dXJlTmFtZScpICE9PSBsYW5nLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgc3dpdGNoTWFwKGxhbmcgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKS5waXBlKG1hcCgoKSA9PiBsYW5nKSkpLFxyXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcclxuICAgICAgICBzd2l0Y2hNYXAobGFuZyA9PiBmcm9tKHRoaXMucmVnaXN0ZXJMb2NhbGUobGFuZykudGhlbigoKSA9PiBsYW5nKSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUobGFuZyA9PiB0aGlzLl9sYW5ndWFnZUNoYW5nZSQubmV4dChsYW5nKSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckxvY2FsZShsb2NhbGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgeyByZWdpc3RlckxvY2FsZUZuIH06IEFCUC5Sb290ID0gdGhpcy5pbmplY3Rvci5nZXQoQ09SRV9PUFRJT05TKTtcclxuXHJcbiAgICByZXR1cm4gcmVnaXN0ZXJMb2NhbGVGbihsb2NhbGUpLnRoZW4obW9kdWxlID0+IHtcclxuICAgICAgaWYgKG1vZHVsZT8uZGVmYXVsdCkgcmVnaXN0ZXJMb2NhbGVEYXRhKG1vZHVsZS5kZWZhdWx0KTtcclxuICAgICAgdGhpcy5sYXRlc3RMYW5nID0gbG9jYWxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgbG9jYWxpemVkIHRleHQgd2l0aCB0aGUgZ2l2ZW4gaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXJzIGluIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICogQHBhcmFtIGtleSBMb2NhbGl6YXRvbiBrZXkgdG8gcmVwbGFjZSB3aXRoIGxvY2FsaXplZCB0ZXh0XHJcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIFZhbHVlcyB0byBpbnRlcnBvbGF0ZVxyXG4gICAqL1xyXG4gIGdldChrZXk6IHN0cmluZyB8IExvY2FsaXphdGlvbldpdGhEZWZhdWx0LCAuLi5pbnRlcnBvbGF0ZVBhcmFtczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGVcclxuICAgICAgLmdldEFsbCQoKVxyXG4gICAgICAucGlwZShtYXAoc3RhdGUgPT4gdGhpcy5nZXRMb2NhbGl6YXRpb24oc3RhdGUsIGtleSwgLi4uaW50ZXJwb2xhdGVQYXJhbXMpKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZShyZXNvdXJjZU5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9ucyQudmFsdWUuZ2V0KHJlc291cmNlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZSQocmVzb3VyY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbnMkLnBpcGUobWFwKHJlcyA9PiByZXMuZ2V0KHJlc291cmNlTmFtZSkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgbG9jYWxpemVkIHRleHQgd2l0aCB0aGUgZ2l2ZW4gaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXJzIGluIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICogQHBhcmFtIGtleSBMb2NhbGl6YXRpb24ga2V5IHRvIHJlcGxhY2Ugd2l0aCBsb2NhbGl6ZWQgdGV4dFxyXG4gICAqIEBwYXJhbSBpbnRlcnBvbGF0ZVBhcmFtcyBWYWx1ZXMgdG8gaW50ZXBvbGF0ZS5cclxuICAgKi9cclxuICBpbnN0YW50KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YXRpb24odGhpcy5jb25maWdTdGF0ZS5nZXRBbGwoKSwga2V5LCAuLi5pbnRlcnBvbGF0ZVBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBsb2NhbGl6ZShyZXNvdXJjZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUkKCdsb2NhbGl6YXRpb24nKS5waXBlKFxyXG4gICAgICBtYXAoY3JlYXRlTG9jYWxpemVyKSxcclxuICAgICAgbWFwKGxvY2FsaXplID0+IGxvY2FsaXplKHJlc291cmNlTmFtZSwga2V5LCBkZWZhdWx0VmFsdWUpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2NhbGl6ZVN5bmMocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgbG9jYWxpemF0aW9uID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2xvY2FsaXphdGlvbicpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsaXplcihsb2NhbGl6YXRpb24pKHJlc291cmNlTmFtZSwga2V5LCBkZWZhdWx0VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbG9jYWxpemVXaXRoRmFsbGJhY2soXHJcbiAgICByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSxcclxuICAgIGtleXM6IHN0cmluZ1tdLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmcsXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXHJcbiAgICAgIG1hcChjcmVhdGVMb2NhbGl6ZXJXaXRoRmFsbGJhY2spLFxyXG4gICAgICBtYXAobG9jYWxpemVXaXRoRmFsbGJhY2sgPT4gbG9jYWxpemVXaXRoRmFsbGJhY2socmVzb3VyY2VOYW1lcywga2V5cywgZGVmYXVsdFZhbHVlKSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9jYWxpemVXaXRoRmFsbGJhY2tTeW5jKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbG9jYWxpemF0aW9uID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2xvY2FsaXphdGlvbicpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsaXplcldpdGhGYWxsYmFjayhsb2NhbGl6YXRpb24pKHJlc291cmNlTmFtZXMsIGtleXMsIGRlZmF1bHRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExvY2FsaXphdGlvbihcclxuICAgIHN0YXRlOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8sXHJcbiAgICBrZXk6IHN0cmluZyB8IExvY2FsaXphdGlvbldpdGhEZWZhdWx0LFxyXG4gICAgLi4uaW50ZXJwb2xhdGVQYXJhbXM6IHN0cmluZ1tdXHJcbiAgKSB7XHJcbiAgICBpZiAoIWtleSkga2V5ID0gJyc7XHJcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gJyc7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGtleS5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIGtleSA9IGtleS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnOjonKSBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IHdhcm4gPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHdhcm4oJ1RoZSBsb2NhbGl6YXRpb24gc291cmNlIHNlcGFyYXRvciAoOjopIG5vdCBmb3VuZC4nKTtcclxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCAoa2V5IGFzIHN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXN0YXRlLmxvY2FsaXphdGlvbikgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBrZXlzWzFdO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBrZXlzWzBdIHx8IHN0YXRlLmxvY2FsaXphdGlvbi5kZWZhdWx0UmVzb3VyY2VOYW1lO1xyXG4gICAgY29uc3Qgc291cmNlS2V5ID0ga2V5c1sxXTtcclxuXHJcbiAgICBpZiAoc291cmNlTmFtZSA9PT0gJ18nKSB7XHJcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc291cmNlTmFtZSkge1xyXG4gICAgICB3YXJuKFxyXG4gICAgICAgICdMb2NhbGl6YXRpb24gc291cmNlIG5hbWUgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIGRlZmF1bHRSZXNvdXJjZU5hbWUgd2FzIG5vdCBkZWZpbmVkIScsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IHNvdXJjZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxvY2FsaXphdGlvbnMkLnZhbHVlLmdldChzb3VyY2VOYW1lKTtcclxuICAgIGlmICghc291cmNlKSB7XHJcbiAgICAgIHdhcm4oJ0NvdWxkIG5vdCBmaW5kIGxvY2FsaXphdGlvbiBzb3VyY2U6ICcgKyBzb3VyY2VOYW1lKTtcclxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxvY2FsaXphdGlvbiA9IHNvdXJjZVtzb3VyY2VLZXldO1xyXG4gICAgaWYgKHR5cGVvZiBsb2NhbGl6YXRpb24gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGludGVycG9sYXRlUGFyYW1zID0gaW50ZXJwb2xhdGVQYXJhbXMuZmlsdGVyKHBhcmFtcyA9PiBwYXJhbXMgIT0gbnVsbCk7XHJcbiAgICBpZiAobG9jYWxpemF0aW9uKSBsb2NhbGl6YXRpb24gPSBpbnRlcnBvbGF0ZShsb2NhbGl6YXRpb24sIGludGVycG9sYXRlUGFyYW1zKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGxvY2FsaXphdGlvbiAhPT0gJ3N0cmluZycpIGxvY2FsaXphdGlvbiA9ICcnO1xyXG5cclxuICAgIHJldHVybiBsb2NhbGl6YXRpb24gfHwgZGVmYXVsdFZhbHVlIHx8IChrZXkgYXMgc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5TWVyZ2VCYXNlUmVzb3VyY2VzKGJhc2VSZXNvdXJjZU5hbWU6IHN0cmluZywgc291cmNlOiBSZXNvdXJjZUR0byk6IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uUmVzb3VyY2VEdG8ge1xyXG4gIGNvbnN0IGl0ZW0gPSBzb3VyY2VbYmFzZVJlc291cmNlTmFtZV07XHJcblxyXG4gIGlmIChpdGVtLmJhc2VSZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpdGVtLmJhc2VSZXNvdXJjZXMucmVkdWNlKChhY2MsIGJhc2VSZXNvdXJjZSkgPT4ge1xyXG4gICAgY29uc3QgYmFzZUl0ZW0gPSByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhiYXNlUmVzb3VyY2UsIHNvdXJjZSk7XHJcbiAgICBjb25zdCB0ZXh0cyA9IHsgLi4uYmFzZUl0ZW0udGV4dHMsIC4uLml0ZW0udGV4dHMgfTtcclxuICAgIHJldHVybiB7IC4uLmFjYywgdGV4dHMgfTtcclxuICB9LCBpdGVtKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZUR0byk6IFJlc291cmNlRHRvIHtcclxuICBjb25zdCBlbnRpdGllczogQXJyYXk8W3N0cmluZywgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXNvdXJjZUR0b10+ID0gT2JqZWN0LmtleXMocmVzb3VyY2UpLm1hcChrZXkgPT4ge1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhrZXksIHJlc291cmNlKTtcclxuICAgIHJldHVybiBba2V5LCBuZXdWYWx1ZV07XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGVudGl0aWVzLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7IC4uLmFjYywgW2tleV06IHZhbHVlIH0pLCB7fSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbWJpbmVMZWdhY3lhbmROZXdSZXNvdXJjZXMoXHJcbiAgbGVnYWN5OiBMZWdhY3lMYW5ndWFnZUR0byxcclxuICByZXNvdXJjZTogUmVzb3VyY2VEdG8sXHJcbik6IExlZ2FjeUxhbmd1YWdlRHRvIHtcclxuICBjb25zdCBtZXJnZWRSZXNvdXJjZSA9IG1lcmdlUmVzb3VyY2VzV2l0aEJhc2VSZXNvdXJjZShyZXNvdXJjZSk7XHJcblxyXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhtZXJnZWRSZXNvdXJjZSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogdmFsdWUudGV4dHMgfTtcclxuICB9LCBsZWdhY3kpO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBMZWdhY3lMYW5ndWFnZUR0byA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xyXG5leHBvcnQgdHlwZSBSZXNvdXJjZUR0byA9IFJlY29yZDxzdHJpbmcsIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uUmVzb3VyY2VEdG8+O1xyXG4iXX0=
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { map, switchMap } from 'rxjs/operators';
|
|
3
|
-
import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy';
|
|
4
|
-
import { TENANT_KEY } from '../tokens/tenant-key.token';
|
|
5
|
-
import { ConfigStateService } from './config-state.service';
|
|
6
|
-
import { RestService } from './rest.service';
|
|
7
|
-
import { SessionStateService } from './session-state.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./rest.service";
|
|
10
|
-
import * as i2 from "./session-state.service";
|
|
11
|
-
import * as i3 from "../proxy/pages/abp/multi-tenancy";
|
|
12
|
-
import * as i4 from "./config-state.service";
|
|
13
|
-
export class MultiTenancyService {
|
|
14
|
-
constructor(restService, sessionState, tenantService, configStateService, tenantKey) {
|
|
15
|
-
this.restService = restService;
|
|
16
|
-
this.sessionState = sessionState;
|
|
17
|
-
this.tenantService = tenantService;
|
|
18
|
-
this.configStateService = configStateService;
|
|
19
|
-
this.tenantKey = tenantKey;
|
|
20
|
-
this.domainTenant = null;
|
|
21
|
-
this.isTenantBoxVisible = true;
|
|
22
|
-
this.apiName = 'abp';
|
|
23
|
-
this.setTenantToState = (tenant) => {
|
|
24
|
-
this.sessionState.setTenant({ id: tenant.tenantId, name: tenant.name, isAvailable: true });
|
|
25
|
-
return this.configStateService.refreshAppState().pipe(map(_ => tenant));
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
setTenantByName(tenantName) {
|
|
29
|
-
return this.tenantService
|
|
30
|
-
.findTenantByName(tenantName)
|
|
31
|
-
.pipe(switchMap(this.setTenantToState));
|
|
32
|
-
}
|
|
33
|
-
setTenantById(tenantId) {
|
|
34
|
-
return this.tenantService
|
|
35
|
-
.findTenantById(tenantId)
|
|
36
|
-
.pipe(switchMap(this.setTenantToState));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
MultiTenancyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MultiTenancyService, deps: [{ token: i1.RestService }, { token: i2.SessionStateService }, { token: i3.AbpTenantService }, { token: i4.ConfigStateService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
-
MultiTenancyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MultiTenancyService, providedIn: 'root' });
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MultiTenancyService, decorators: [{
|
|
42
|
-
type: Injectable,
|
|
43
|
-
args: [{ providedIn: 'root' }]
|
|
44
|
-
}], ctorParameters: function () { return [{ type: i1.RestService }, { type: i2.SessionStateService }, { type: i3.AbpTenantService }, { type: i4.ConfigStateService }, { type: undefined, decorators: [{
|
|
45
|
-
type: Inject,
|
|
46
|
-
args: [TENANT_KEY]
|
|
47
|
-
}] }]; } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL211bHRpLXRlbmFuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUc5RCxNQUFNLE9BQU8sbUJBQW1CO0lBWTlCLFlBQ1UsV0FBd0IsRUFDeEIsWUFBaUMsRUFDakMsYUFBK0IsRUFDL0Isa0JBQXNDLEVBQ25CLFNBQWlCO1FBSnBDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBaEI5QyxpQkFBWSxHQUE0QixJQUFJLENBQUM7UUFFN0MsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUixxQkFBZ0IsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQztJQVFFLENBQUM7SUFFTCxlQUFlLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsYUFBYTthQUN0QixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7YUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYTthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOztnSEE5QlUsbUJBQW1CLGtKQWlCcEIsVUFBVTtvSEFqQlQsbUJBQW1CLGNBRE4sTUFBTTsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBa0I3QixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFicFRlbmFudFNlcnZpY2UgfSBmcm9tICcuLi9wcm94eS9wYWdlcy9hYnAvbXVsdGktdGVuYW5jeSc7XHJcbmltcG9ydCB7XHJcbiAgQ3VycmVudFRlbmFudER0byxcclxuICBGaW5kVGVuYW50UmVzdWx0RHRvLFxyXG59IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvbXVsdGktdGVuYW5jeS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBURU5BTlRfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL3RlbmFudC1rZXkudG9rZW4nO1xyXG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlUZW5hbmN5U2VydmljZSB7XHJcbiAgZG9tYWluVGVuYW50OiBDdXJyZW50VGVuYW50RHRvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGlzVGVuYW50Qm94VmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIGFwaU5hbWUgPSAnYWJwJztcclxuXHJcbiAgcHJpdmF0ZSBzZXRUZW5hbnRUb1N0YXRlID0gKHRlbmFudDogRmluZFRlbmFudFJlc3VsdER0bykgPT4ge1xyXG4gICAgdGhpcy5zZXNzaW9uU3RhdGUuc2V0VGVuYW50KHsgaWQ6IHRlbmFudC50ZW5hbnRJZCwgbmFtZTogdGVuYW50Lm5hbWUsIGlzQXZhaWxhYmxlOiB0cnVlIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGVTZXJ2aWNlLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUobWFwKF8gPT4gdGVuYW50KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0YXRlOiBTZXNzaW9uU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBBYnBUZW5hbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdGF0ZVNlcnZpY2U6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICAgIEBJbmplY3QoVEVOQU5UX0tFWSkgcHVibGljIHRlbmFudEtleTogc3RyaW5nLFxyXG4gICkgeyB9XHJcblxyXG4gIHNldFRlbmFudEJ5TmFtZSh0ZW5hbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbmFudFNlcnZpY2VcclxuICAgICAgLmZpbmRUZW5hbnRCeU5hbWUodGVuYW50TmFtZSlcclxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHRoaXMuc2V0VGVuYW50VG9TdGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGVuYW50QnlJZCh0ZW5hbnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRTZXJ2aWNlXHJcbiAgICAgIC5maW5kVGVuYW50QnlJZCh0ZW5hbnRJZClcclxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHRoaXMuc2V0VGVuYW50VG9TdGF0ZSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { map } from 'rxjs/operators';
|
|
3
|
-
import { ConfigStateService } from './config-state.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./config-state.service";
|
|
6
|
-
export class PermissionService {
|
|
7
|
-
constructor(configState) {
|
|
8
|
-
this.configState = configState;
|
|
9
|
-
}
|
|
10
|
-
getGrantedPolicy$(key) {
|
|
11
|
-
return this.getStream().pipe(map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)));
|
|
12
|
-
}
|
|
13
|
-
getGrantedPolicy(key) {
|
|
14
|
-
const policies = this.getSnapshot();
|
|
15
|
-
return this.isPolicyGranted(key, policies);
|
|
16
|
-
}
|
|
17
|
-
filterItemsByPolicy(items) {
|
|
18
|
-
const policies = this.getSnapshot();
|
|
19
|
-
return items.filter(item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies));
|
|
20
|
-
}
|
|
21
|
-
filterItemsByPolicy$(items) {
|
|
22
|
-
return this.getStream().pipe(map(policies => items.filter(item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies))));
|
|
23
|
-
}
|
|
24
|
-
isPolicyGranted(key, grantedPolicies) {
|
|
25
|
-
if (!key)
|
|
26
|
-
return true;
|
|
27
|
-
const orRegexp = /\|\|/g;
|
|
28
|
-
const andRegexp = /&&/g;
|
|
29
|
-
// TODO: Allow combination of ANDs & ORs
|
|
30
|
-
if (orRegexp.test(key)) {
|
|
31
|
-
const keys = key.split('||').filter(Boolean);
|
|
32
|
-
if (keys.length < 2)
|
|
33
|
-
return false;
|
|
34
|
-
return keys.some(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
35
|
-
}
|
|
36
|
-
else if (andRegexp.test(key)) {
|
|
37
|
-
const keys = key.split('&&').filter(Boolean);
|
|
38
|
-
if (keys.length < 2)
|
|
39
|
-
return false;
|
|
40
|
-
return keys.every(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
41
|
-
}
|
|
42
|
-
return this.getPolicy(key, grantedPolicies);
|
|
43
|
-
}
|
|
44
|
-
getStream() {
|
|
45
|
-
return this.configState.getAll$().pipe(map(this.mapToPolicies));
|
|
46
|
-
}
|
|
47
|
-
getSnapshot() {
|
|
48
|
-
return this.mapToPolicies(this.configState.getAll());
|
|
49
|
-
}
|
|
50
|
-
mapToPolicies(applicationConfiguration) {
|
|
51
|
-
return applicationConfiguration?.auth?.grantedPolicies || {};
|
|
52
|
-
}
|
|
53
|
-
getPolicy(key, grantedPolicies) {
|
|
54
|
-
return grantedPolicies[key] || false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
PermissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionService, deps: [{ token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
-
PermissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionService, providedIn: 'root' });
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PermissionService, decorators: [{
|
|
60
|
-
type: Injectable,
|
|
61
|
-
args: [{ providedIn: 'root' }]
|
|
62
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigStateService }]; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRzVELE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBc0IsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBQUcsQ0FBQztJQUV6RCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsbUJBQW1CLENBQTBCLEtBQWU7UUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUNwRixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUEwQixLQUFlO1FBQzNELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ2IsS0FBSyxDQUFDLE1BQU0sQ0FDVixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQ3BGLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FBQyxHQUF1QixFQUFFLGVBQXdDO1FBQ3pGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV4Qix3Q0FBd0M7UUFDeEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTdDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRWxDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7U0FDbEU7YUFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUNuRTtRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVTLFdBQVc7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsYUFBYSxDQUFDLHdCQUFxRDtRQUMzRSxPQUFPLHdCQUF3QixFQUFFLElBQUksRUFBRSxlQUFlLElBQUksRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFUyxTQUFTLENBQUMsR0FBVyxFQUFFLGVBQXdDO1FBQ3ZFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUN2QyxDQUFDOzs4R0FyRVUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFCUCB9IGZyb20gJy4uL21vZGVscy9jb21tb24nO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8gfSBmcm9tICcuLi9wcm94eS92b2xvL2FicC9hc3AtbmV0LWNvcmUvbXZjL2FwcGxpY2F0aW9uLWNvbmZpZ3VyYXRpb25zL21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSkge31cclxuXHJcbiAgZ2V0R3JhbnRlZFBvbGljeSQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFN0cmVhbSgpLnBpcGUoXHJcbiAgICAgIG1hcChncmFudGVkUG9saWNpZXMgPT4gdGhpcy5pc1BvbGljeUdyYW50ZWQoa2V5LCBncmFudGVkUG9saWNpZXMpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmFudGVkUG9saWN5KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBjb25zdCBwb2xpY2llcyA9IHRoaXMuZ2V0U25hcHNob3QoKTtcclxuICAgIHJldHVybiB0aGlzLmlzUG9saWN5R3JhbnRlZChrZXksIHBvbGljaWVzKTtcclxuICB9XHJcblxyXG4gIGZpbHRlckl0ZW1zQnlQb2xpY3k8VCBleHRlbmRzIEFCUC5IYXNQb2xpY3k+KGl0ZW1zOiBBcnJheTxUPikge1xyXG4gICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLmdldFNuYXBzaG90KCk7XHJcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKFxyXG4gICAgICBpdGVtID0+ICFpdGVtLnJlcXVpcmVkUG9saWN5IHx8IHRoaXMuaXNQb2xpY3lHcmFudGVkKGl0ZW0ucmVxdWlyZWRQb2xpY3ksIHBvbGljaWVzKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJJdGVtc0J5UG9saWN5JDxUIGV4dGVuZHMgQUJQLkhhc1BvbGljeT4oaXRlbXM6IEFycmF5PFQ+KSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJlYW0oKS5waXBlKFxyXG4gICAgICBtYXAocG9saWNpZXMgPT5cclxuICAgICAgICBpdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICBpdGVtID0+ICFpdGVtLnJlcXVpcmVkUG9saWN5IHx8IHRoaXMuaXNQb2xpY3lHcmFudGVkKGl0ZW0ucmVxdWlyZWRQb2xpY3ksIHBvbGljaWVzKSxcclxuICAgICAgICApLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1BvbGljeUdyYW50ZWQoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGdyYW50ZWRQb2xpY2llczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcclxuICAgIGlmICgha2V5KSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBvclJlZ2V4cCA9IC9cXHxcXHwvZztcclxuICAgIGNvbnN0IGFuZFJlZ2V4cCA9IC8mJi9nO1xyXG5cclxuICAgIC8vIFRPRE86IEFsbG93IGNvbWJpbmF0aW9uIG9mIEFORHMgJiBPUnNcclxuICAgIGlmIChvclJlZ2V4cC50ZXN0KGtleSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnfHwnKS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICByZXR1cm4ga2V5cy5zb21lKGsgPT4gdGhpcy5nZXRQb2xpY3koay50cmltKCksIGdyYW50ZWRQb2xpY2llcykpO1xyXG4gICAgfSBlbHNlIGlmIChhbmRSZWdleHAudGVzdChrZXkpKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJyYmJykuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgaWYgKGtleXMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgcmV0dXJuIGtleXMuZXZlcnkoayA9PiB0aGlzLmdldFBvbGljeShrLnRyaW0oKSwgZ3JhbnRlZFBvbGljaWVzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UG9saWN5KGtleSwgZ3JhbnRlZFBvbGljaWVzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRTdHJlYW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdGF0ZS5nZXRBbGwkKCkucGlwZShtYXAodGhpcy5tYXBUb1BvbGljaWVzKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0U25hcHNob3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBUb1BvbGljaWVzKHRoaXMuY29uZmlnU3RhdGUuZ2V0QWxsKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1hcFRvUG9saWNpZXMoYXBwbGljYXRpb25Db25maWd1cmF0aW9uOiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcclxuICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/LmF1dGg/LmdyYW50ZWRQb2xpY2llcyB8fCB7fTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRQb2xpY3koa2V5OiBzdHJpbmcsIGdyYW50ZWRQb2xpY2llczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcclxuICAgIHJldHVybiBncmFudGVkUG9saWNpZXNba2V5XSB8fCBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Injectable, NgZone } from '@angular/core';
|
|
2
|
-
import { Router } from '@angular/router';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import { InternalStore } from '../utils/internal-store-utils';
|
|
5
|
-
import { reloadRoute } from '../utils/route-utils';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/router";
|
|
8
|
-
export class ReplaceableComponentsService {
|
|
9
|
-
constructor(ngZone, router) {
|
|
10
|
-
this.ngZone = ngZone;
|
|
11
|
-
this.router = router;
|
|
12
|
-
this.store = new InternalStore([]);
|
|
13
|
-
}
|
|
14
|
-
get replaceableComponents$() {
|
|
15
|
-
return this.store.sliceState(state => state);
|
|
16
|
-
}
|
|
17
|
-
get replaceableComponents() {
|
|
18
|
-
return this.store.state;
|
|
19
|
-
}
|
|
20
|
-
get onUpdate$() {
|
|
21
|
-
return this.store.sliceUpdate(state => state);
|
|
22
|
-
}
|
|
23
|
-
add(replaceableComponent, reload) {
|
|
24
|
-
const replaceableComponents = [...this.store.state];
|
|
25
|
-
const index = replaceableComponents.findIndex(component => component.key === replaceableComponent.key);
|
|
26
|
-
if (index > -1) {
|
|
27
|
-
replaceableComponents[index] = replaceableComponent;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
replaceableComponents.push(replaceableComponent);
|
|
31
|
-
}
|
|
32
|
-
this.store.set(replaceableComponents);
|
|
33
|
-
if (reload)
|
|
34
|
-
reloadRoute(this.router, this.ngZone);
|
|
35
|
-
}
|
|
36
|
-
get(replaceableComponentKey) {
|
|
37
|
-
return this.replaceableComponents.find(component => component.key === replaceableComponentKey);
|
|
38
|
-
}
|
|
39
|
-
get$(replaceableComponentKey) {
|
|
40
|
-
return this.replaceableComponents$.pipe(map(components => components.find(component => component.key === replaceableComponentKey)));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
ReplaceableComponentsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReplaceableComponentsService, deps: [{ token: i0.NgZone }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
44
|
-
ReplaceableComponentsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReplaceableComponentsService, providedIn: 'root' });
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ReplaceableComponentsService, decorators: [{
|
|
46
|
-
type: Injectable,
|
|
47
|
-
args: [{ providedIn: 'root' }]
|
|
48
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Router }]; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZWFibGUtY29tcG9uZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3JlcGxhY2VhYmxlLWNvbXBvbmVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUduRCxNQUFNLE9BQU8sNEJBQTRCO0lBZXZDLFlBQW9CLE1BQWMsRUFBVSxNQUFjO1FBQXRDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBa0QsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFkRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBTUQsR0FBRyxDQUFDLG9CQUFnRSxFQUFFLE1BQWdCO1FBQ3BGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUMzQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssb0JBQW9CLENBQUMsR0FBRyxDQUN4RCxDQUFDO1FBRUYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDZCxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztTQUNyRDthQUFNO1lBQ0wscUJBQXFCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRDLElBQUksTUFBTTtZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsR0FBRyxDQUFDLHVCQUErQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLHVCQUF1QixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELElBQUksQ0FBQyx1QkFBK0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFDSixDQUFDOzt5SEE3Q1UsNEJBQTRCOzZIQUE1Qiw0QkFBNEIsY0FEZixNQUFNOzJGQUNuQiw0QkFBNEI7a0JBRHhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXBsYWNlYWJsZUNvbXBvbmVudHMgfSBmcm9tICcuLi9tb2RlbHMvcmVwbGFjZWFibGUtY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IEludGVybmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9pbnRlcm5hbC1zdG9yZS11dGlscyc7XHJcbmltcG9ydCB7IHJlbG9hZFJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvcm91dGUtdXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlcGxhY2VhYmxlQ29tcG9uZW50c1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IEludGVybmFsU3RvcmU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+O1xyXG5cclxuICBnZXQgcmVwbGFjZWFibGVDb21wb25lbnRzJCgpOiBPYnNlcnZhYmxlPFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbGljZVN0YXRlKHN0YXRlID0+IHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldCByZXBsYWNlYWJsZUNvbXBvbmVudHMoKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgb25VcGRhdGUkKCk6IE9ic2VydmFibGU8UmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50W10+IHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlVXBkYXRlKHN0YXRlID0+IHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIHRoaXMuc3RvcmUgPSBuZXcgSW50ZXJuYWxTdG9yZShbXSBhcyBSZXBsYWNlYWJsZUNvbXBvbmVudHMuUmVwbGFjZWFibGVDb21wb25lbnRbXSk7XHJcbiAgfVxyXG5cclxuICBhZGQocmVwbGFjZWFibGVDb21wb25lbnQ6IFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudCwgcmVsb2FkPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgcmVwbGFjZWFibGVDb21wb25lbnRzID0gWy4uLnRoaXMuc3RvcmUuc3RhdGVdO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gcmVwbGFjZWFibGVDb21wb25lbnRzLmZpbmRJbmRleChcclxuICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC5rZXkgPT09IHJlcGxhY2VhYmxlQ29tcG9uZW50LmtleSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgcmVwbGFjZWFibGVDb21wb25lbnRzW2luZGV4XSA9IHJlcGxhY2VhYmxlQ29tcG9uZW50O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVwbGFjZWFibGVDb21wb25lbnRzLnB1c2gocmVwbGFjZWFibGVDb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcmUuc2V0KHJlcGxhY2VhYmxlQ29tcG9uZW50cyk7XHJcblxyXG4gICAgaWYgKHJlbG9hZCkgcmVsb2FkUm91dGUodGhpcy5yb3V0ZXIsIHRoaXMubmdab25lKTtcclxuICB9XHJcblxyXG4gIGdldChyZXBsYWNlYWJsZUNvbXBvbmVudEtleTogc3RyaW5nKTogUmVwbGFjZWFibGVDb21wb25lbnRzLlJlcGxhY2VhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnJlcGxhY2VhYmxlQ29tcG9uZW50cy5maW5kKGNvbXBvbmVudCA9PiBjb21wb25lbnQua2V5ID09PSByZXBsYWNlYWJsZUNvbXBvbmVudEtleSk7XHJcbiAgfVxyXG5cclxuICBnZXQkKHJlcGxhY2VhYmxlQ29tcG9uZW50S2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlcGxhY2VhYmxlQ29tcG9uZW50cy5SZXBsYWNlYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZWFibGVDb21wb25lbnRzJC5waXBlKFxyXG4gICAgICBtYXAoY29tcG9uZW50cyA9PiBjb21wb25lbnRzLmZpbmQoY29tcG9uZW50ID0+IGNvbXBvbmVudC5rZXkgPT09IHJlcGxhY2VhYmxlQ29tcG9uZW50S2V5KSksXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { InternalStore } from '../utils/internal-store-utils';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class ResourceWaitService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.store = new InternalStore({ resources: new Set() });
|
|
7
|
-
}
|
|
8
|
-
getLoading() {
|
|
9
|
-
return !!this.store.state.resources.size;
|
|
10
|
-
}
|
|
11
|
-
getLoading$() {
|
|
12
|
-
return this.store.sliceState(({ resources }) => !!resources.size);
|
|
13
|
-
}
|
|
14
|
-
updateLoading$() {
|
|
15
|
-
return this.store.sliceUpdate(({ resources }) => !!resources?.size);
|
|
16
|
-
}
|
|
17
|
-
clearLoading() {
|
|
18
|
-
this.store.patch({ resources: new Set() });
|
|
19
|
-
}
|
|
20
|
-
addResource(resource) {
|
|
21
|
-
const resources = this.store.state.resources;
|
|
22
|
-
resources.add(resource);
|
|
23
|
-
this.store.patch({ resources });
|
|
24
|
-
}
|
|
25
|
-
deleteResource(resource) {
|
|
26
|
-
const resources = this.store.state.resources;
|
|
27
|
-
resources.delete(resource);
|
|
28
|
-
this.store.patch({ resources });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
ResourceWaitService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResourceWaitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
-
ResourceWaitService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResourceWaitService, providedIn: 'root' });
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResourceWaitService, decorators: [{
|
|
34
|
-
type: Injectable,
|
|
35
|
-
args: [{
|
|
36
|
-
providedIn: 'root',
|
|
37
|
-
}]
|
|
38
|
-
}] });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utd2FpdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3Jlc291cmNlLXdhaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFTOUQsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlVLFVBQUssR0FBRyxJQUFJLGFBQWEsQ0FBb0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7S0E2QmhGO0lBM0JDLFVBQVU7UUFDUixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzdDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O2dIQTdCVSxtQkFBbUI7b0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEludGVybmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9pbnRlcm5hbC1zdG9yZS11dGlscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdFN0YXRlIHtcclxuICByZXNvdXJjZXM6IFNldDxzdHJpbmc+O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VXYWl0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBJbnRlcm5hbFN0b3JlPFJlc291cmNlV2FpdFN0YXRlPih7IHJlc291cmNlczogbmV3IFNldCgpIH0pO1xyXG5cclxuICBnZXRMb2FkaW5nKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zdG9yZS5zdGF0ZS5yZXNvdXJjZXMuc2l6ZTtcclxuICB9XHJcblxyXG4gIGdldExvYWRpbmckKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2xpY2VTdGF0ZSgoeyByZXNvdXJjZXMgfSkgPT4gISFyZXNvdXJjZXMuc2l6ZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb2FkaW5nJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNsaWNlVXBkYXRlKCh7IHJlc291cmNlcyB9KSA9PiAhIXJlc291cmNlcz8uc2l6ZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckxvYWRpbmcoKSB7XHJcbiAgICB0aGlzLnN0b3JlLnBhdGNoKHsgcmVzb3VyY2VzOiBuZXcgU2V0KCkgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRSZXNvdXJjZShyZXNvdXJjZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnN0b3JlLnN0YXRlLnJlc291cmNlcztcclxuICAgIHJlc291cmNlcy5hZGQocmVzb3VyY2UpO1xyXG4gICAgdGhpcy5zdG9yZS5wYXRjaCh7IHJlc291cmNlcyB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlc291cmNlKHJlc291cmNlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuc3RvcmUuc3RhdGUucmVzb3VyY2VzO1xyXG4gICAgcmVzb3VyY2VzLmRlbGV0ZShyZXNvdXJjZSk7XHJcbiAgICB0aGlzLnN0b3JlLnBhdGNoKHsgcmVzb3VyY2VzIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
|
-
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { throwError } from 'rxjs';
|
|
4
|
-
import { catchError } from 'rxjs/operators';
|
|
5
|
-
import { ExternalHttpClient } from '../clients/http.client';
|
|
6
|
-
import { CORE_OPTIONS } from '../tokens/options.token';
|
|
7
|
-
import { isUndefinedOrEmptyString } from '../utils/common-utils';
|
|
8
|
-
import { EnvironmentService } from './environment.service';
|
|
9
|
-
import { HttpErrorReporterService } from './http-error-reporter.service';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/common/http";
|
|
12
|
-
import * as i2 from "../clients/http.client";
|
|
13
|
-
import * as i3 from "./environment.service";
|
|
14
|
-
import * as i4 from "./http-error-reporter.service";
|
|
15
|
-
export class RestService {
|
|
16
|
-
constructor(options, http, externalHttp, environment, httpErrorReporter) {
|
|
17
|
-
this.options = options;
|
|
18
|
-
this.http = http;
|
|
19
|
-
this.externalHttp = externalHttp;
|
|
20
|
-
this.environment = environment;
|
|
21
|
-
this.httpErrorReporter = httpErrorReporter;
|
|
22
|
-
}
|
|
23
|
-
getApiFromStore(apiName) {
|
|
24
|
-
return this.environment.getApiUrl(apiName);
|
|
25
|
-
}
|
|
26
|
-
handleError(err) {
|
|
27
|
-
this.httpErrorReporter.reportError(err);
|
|
28
|
-
return throwError(err);
|
|
29
|
-
}
|
|
30
|
-
request(request, config, api) {
|
|
31
|
-
config = config || {};
|
|
32
|
-
api = api || this.getApiFromStore(config.apiName);
|
|
33
|
-
const { method, params, ...options } = request;
|
|
34
|
-
const { observe = "body" /* Rest.Observe.Body */, skipHandleError } = config;
|
|
35
|
-
const url = this.removeDuplicateSlashes(api + request.url);
|
|
36
|
-
const httpClient = this.getHttpClient(config.skipAddingHeader);
|
|
37
|
-
return httpClient
|
|
38
|
-
.request(method, url, {
|
|
39
|
-
observe,
|
|
40
|
-
...(params && {
|
|
41
|
-
params: this.getParams(params, config.httpParamEncoder),
|
|
42
|
-
}),
|
|
43
|
-
...options,
|
|
44
|
-
})
|
|
45
|
-
.pipe(catchError(err => (skipHandleError ? throwError(err) : this.handleError(err))));
|
|
46
|
-
}
|
|
47
|
-
getHttpClient(isExternal) {
|
|
48
|
-
return isExternal ? this.externalHttp : this.http;
|
|
49
|
-
}
|
|
50
|
-
getParams(params, encoder) {
|
|
51
|
-
const filteredParams = Object.entries(params).reduce((acc, [key, value]) => {
|
|
52
|
-
if (isUndefinedOrEmptyString(value))
|
|
53
|
-
return acc;
|
|
54
|
-
if (value === null && !this.options.sendNullsAsQueryParam)
|
|
55
|
-
return acc;
|
|
56
|
-
acc[key] = value;
|
|
57
|
-
return acc;
|
|
58
|
-
}, {});
|
|
59
|
-
return encoder
|
|
60
|
-
? new HttpParams({ encoder, fromObject: filteredParams })
|
|
61
|
-
: new HttpParams({ fromObject: filteredParams });
|
|
62
|
-
}
|
|
63
|
-
removeDuplicateSlashes(url) {
|
|
64
|
-
return url.replace(/([^:]\/)\/+/g, '$1');
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
RestService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RestService, deps: [{ token: CORE_OPTIONS }, { token: i1.HttpClient }, { token: i2.ExternalHttpClient }, { token: i3.EnvironmentService }, { token: i4.HttpErrorReporterService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
68
|
-
RestService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RestService, providedIn: 'root' });
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RestService, decorators: [{
|
|
70
|
-
type: Injectable,
|
|
71
|
-
args: [{
|
|
72
|
-
providedIn: 'root',
|
|
73
|
-
}]
|
|
74
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
75
|
-
type: Inject,
|
|
76
|
-
args: [CORE_OPTIONS]
|
|
77
|
-
}] }, { type: i1.HttpClient }, { type: i2.ExternalHttpClient }, { type: i3.EnvironmentService }, { type: i4.HttpErrorReporterService }]; } });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3Jlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFzQixVQUFVLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7OztBQUt6RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUNrQyxPQUFpQixFQUN2QyxJQUFnQixFQUNoQixZQUFnQyxFQUNoQyxXQUErQixFQUMvQixpQkFBMkM7UUFKckIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUN2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtJQUNwRCxDQUFDO0lBRU0sZUFBZSxDQUFDLE9BQTJCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJ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ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBQYXJhbXMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFeHRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9jbGllbnRzL2h0dHAuY2xpZW50JztcclxuaW1wb3J0IHsgQUJQIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IFJlc3QgfSBmcm9tICcuLi9tb2RlbHMvcmVzdCc7XHJcbmltcG9ydCB7IENPUkVfT1BUSU9OUyB9IGZyb20gJy4uL3Rva2Vucy9vcHRpb25zLnRva2VuJztcclxuaW1wb3J0IHsgaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uLXV0aWxzJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWVycm9yLXJlcG9ydGVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoQ09SRV9PUFRJT05TKSBwcm90ZWN0ZWQgb3B0aW9uczogQUJQLlJvb3QsXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBleHRlcm5hbEh0dHA6IEV4dGVybmFsSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGh0dHBFcnJvclJlcG9ydGVyOiBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QXBpRnJvbVN0b3JlKGFwaU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5nZXRBcGlVcmwoYXBpTmFtZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihlcnI6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yKGVycik7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdDxULCBSPihcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PFQ+IHwgUmVzdC5SZXF1ZXN0PFQ+LFxyXG4gICAgY29uZmlnPzogUmVzdC5Db25maWcsXHJcbiAgICBhcGk/OiBzdHJpbmcsXHJcbiAgKTogT2JzZXJ2YWJsZTxSPiB7XHJcbiAgICBjb25maWcgPSBjb25maWcgfHwgKHt9IGFzIFJlc3QuQ29uZmlnKTtcclxuICAgIGFwaSA9IGFwaSB8fCB0aGlzLmdldEFwaUZyb21TdG9yZShjb25maWcuYXBpTmFtZSk7XHJcbiAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zLCAuLi5vcHRpb25zIH0gPSByZXF1ZXN0O1xyXG4gICAgY29uc3QgeyBvYnNlcnZlID0gUmVzdC5PYnNlcnZlLkJvZHksIHNraXBIYW5kbGVFcnJvciB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKGFwaSArIHJlcXVlc3QudXJsKTtcclxuXHJcbiAgICBjb25zdCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gdGhpcy5nZXRIdHRwQ2xpZW50KGNvbmZpZy5za2lwQWRkaW5nSGVhZGVyKTtcclxuICAgIHJldHVybiBodHRwQ2xpZW50XHJcbiAgICAgIC5yZXF1ZXN0PFI+KG1ldGhvZCwgdXJsLCB7XHJcbiAgICAgICAgb2JzZXJ2ZSxcclxuICAgICAgICAuLi4ocGFyYW1zICYmIHtcclxuICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRQYXJhbXMocGFyYW1zLCBjb25maWcuaHR0cFBhcmFtRW5jb2RlciksXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgfSBhcyBhbnkpXHJcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IChza2lwSGFuZGxlRXJyb3IgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLmhhbmRsZUVycm9yKGVycikpKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0SHR0cENsaWVudChpc0V4dGVybmFsOiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gaXNFeHRlcm5hbCA/IHRoaXMuZXh0ZXJuYWxIdHRwIDogdGhpcy5odHRwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXMocGFyYW1zOiBSZXN0LlBhcmFtcywgZW5jb2Rlcj86IEh0dHBQYXJhbWV0ZXJDb2RlYyk6IEh0dHBQYXJhbXMge1xyXG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgaWYgKGlzVW5kZWZpbmVkT3JFbXB0eVN0cmluZyh2YWx1ZSkpIHJldHVybiBhY2M7XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAhdGhpcy5vcHRpb25zLnNlbmROdWxsc0FzUXVlcnlQYXJhbSkgcmV0dXJuIGFjYztcclxuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9IGFzIGFueSk7XHJcbiAgICByZXR1cm4gZW5jb2RlclxyXG4gICAgICA/IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlciwgZnJvbU9iamVjdDogZmlsdGVyZWRQYXJhbXMgfSlcclxuICAgICAgOiBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IGZpbHRlcmVkUGFyYW1zIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCAnJDEnKTtcclxuICB9XHJcbn1cclxuIl19
|