@bravobit/bb-foundation 0.15.4 → 0.16.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/auth/lib/auth.interceptor.d.ts +1 -1
- package/auth/lib/auth.service.d.ts +1 -1
- package/auth/package.json +5 -5
- package/collections/package.json +5 -5
- package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
- package/controls/lib/checkbox/checkbox.component.d.ts +27 -0
- package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
- package/controls/lib/controls.module.d.ts +7 -0
- package/controls/package.json +10 -0
- package/controls/public_api.d.ts +3 -0
- package/dashboard/package.json +5 -5
- package/dialog/package.json +5 -5
- package/elements/package.json +5 -5
- package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
- package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
- package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
- package/esm2020/auth/lib/auth.service.mjs +276 -0
- package/esm2020/auth/lib/auth.session.mjs +131 -0
- package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
- package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
- package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
- package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
- package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
- package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
- package/esm2020/auth/lib/permissions.service.mjs +56 -0
- package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
- package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
- package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
- package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
- package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
- package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
- package/esm2020/collections/lib/collection.mjs +98 -0
- package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
- package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
- package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
- package/esm2020/collections/lib/providers/api-collection.provider.mjs +68 -0
- package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
- package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
- package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
- package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
- package/esm2020/controls/lib/checkbox/checkbox.component.mjs +86 -0
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
- package/esm2020/controls/lib/controls.module.mjs +16 -0
- package/esm2020/controls/public_api.mjs +4 -0
- package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
- package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
- package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
- package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
- package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
- package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
- package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
- package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
- package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
- package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
- package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
- package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
- package/esm2020/elements/lib/button/button.component.mjs +61 -0
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
- package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
- package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
- package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
- package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
- package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
- package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
- package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
- package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
- package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
- package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
- package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
- package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
- package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
- package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
- package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
- package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
- package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
- package/esm2020/http/lib/classes/http.config.mjs +29 -0
- package/esm2020/http/lib/classes/http.error.mjs +20 -0
- package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
- package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
- package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
- package/{esm2015/lib/core/coercions/boolean-coercion.js → esm2020/lib/core/coercions/boolean-coercion.mjs} +0 -0
- package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
- package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
- package/{esm2015/lib/core/mixins/can-disable.js → esm2020/lib/core/mixins/can-disable.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-load.js → esm2020/lib/core/mixins/can-load.mjs} +0 -0
- package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
- package/{esm2015/lib/core/mixins/has-error.js → esm2020/lib/core/mixins/has-error.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-focused.js → esm2020/lib/core/mixins/is-focused.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-grouped.js → esm2020/lib/core/mixins/is-grouped.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-readonly.js → esm2020/lib/core/mixins/is-readonly.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-required.js → esm2020/lib/core/mixins/is-required.mjs} +0 -0
- package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
- package/esm2020/lib/core/services/exif.service.mjs +163 -0
- package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
- package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
- package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
- package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
- package/esm2020/lib/core/services/patch.service.mjs +63 -0
- package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
- package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
- package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
- package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
- package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
- package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
- package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
- package/esm2020/localize/lib/localize.service.mjs +277 -0
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
- package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
- package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
- package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
- package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
- package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
- package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
- package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
- package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
- package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
- package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
- package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
- package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
- package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
- package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
- package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
- package/esm2020/storage/lib/storage.service.mjs +109 -0
- package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
- package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
- package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
- package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
- package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
- package/esm2020/table/lib/components/table/table.component.mjs +191 -0
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
- package/esm2020/table/lib/data/datasource.data.mjs +32 -0
- package/esm2020/table/lib/data/generic.data.mjs +72 -0
- package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
- package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
- package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
- package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
- package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +33 -47
- package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs +123 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +193 -302
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
- package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +74 -64
- package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs +434 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs +121 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs +1993 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation.mjs +895 -0
- package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
- package/http/package.json +5 -5
- package/localize/package.json +5 -5
- package/notifications/package.json +5 -5
- package/package.json +125 -8
- package/recaptcha/package.json +5 -5
- package/rxjs/package.json +5 -5
- package/storage/package.json +5 -5
- package/table/lib/components/table/table.component.d.ts +3 -0
- package/table/package.json +5 -5
- package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
- package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
- package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
- package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
- package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
- package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
- package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
- package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
- package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
- package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
- package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-table.umd.js +0 -1070
- package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation.umd.js +0 -1440
- package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
- package/esm2015/auth/lib/auth.interceptor.js +0 -95
- package/esm2015/auth/lib/auth.service.js +0 -299
- package/esm2015/auth/lib/auth.session.js +0 -136
- package/esm2015/auth/lib/directives/permission.directive.js +0 -81
- package/esm2015/auth/lib/directives/role.directive.js +0 -38
- package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
- package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
- package/esm2015/auth/lib/permissions.service.js +0 -58
- package/esm2015/auth/lib/providers/email.provider.js +0 -26
- package/esm2015/auth/lib/providers/verify.provider.js +0 -20
- package/esm2015/collections/lib/collection.js +0 -104
- package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
- package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
- package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
- package/esm2015/collections/lib/providers/collection.provider.js +0 -14
- package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
- package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
- package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
- package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
- package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
- package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
- package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
- package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
- package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
- package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
- package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
- package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
- package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
- package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
- package/esm2015/elements/lib/button/button.component.js +0 -79
- package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
- package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
- package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
- package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
- package/esm2015/elements/lib/directives/input.directive.js +0 -139
- package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
- package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
- package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
- package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
- package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
- package/esm2015/elements/lib/icon/icon.component.js +0 -110
- package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
- package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
- package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
- package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
- package/esm2015/elements/lib/tag/tag.component.js +0 -26
- package/esm2015/http/lib/classes/http.config.js +0 -31
- package/esm2015/http/lib/classes/http.error.js +0 -21
- package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
- package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
- package/esm2015/lib/core/miscellaneous/validator.js +0 -86
- package/esm2015/lib/core/services/clipboard.service.js +0 -72
- package/esm2015/lib/core/services/exif.service.js +0 -168
- package/esm2015/lib/core/services/file-loader.service.js +0 -90
- package/esm2015/lib/core/services/image-converter.service.js +0 -130
- package/esm2015/lib/core/services/patch.service.js +0 -65
- package/esm2015/localize/lib/localize.dictionary.js +0 -137
- package/esm2015/localize/lib/localize.service.js +0 -282
- package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
- package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
- package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
- package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
- package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
- package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
- package/esm2015/storage/lib/storage.service.js +0 -111
- package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
- package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
- package/esm2015/table/lib/components/table/table.component.js +0 -196
- package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
- package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -141
- package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
- package/esm2015/table/lib/data/datasource.data.js +0 -32
- package/esm2015/table/lib/data/generic.data.js +0 -73
- package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
- package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
- package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-table.js +0 -626
- package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../auth.service";
|
|
5
|
+
export class BbRole {
|
|
6
|
+
constructor(_auth, _template, _viewContainerRef) {
|
|
7
|
+
this._auth = _auth;
|
|
8
|
+
this._template = _template;
|
|
9
|
+
this._viewContainerRef = _viewContainerRef;
|
|
10
|
+
this.getAllowedRoles = (value) => {
|
|
11
|
+
return Array.isArray(value) ? value : [value];
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this._subscription = this._auth.user.pipe(map(user => user?.role ?? null), distinctUntilChanged()).subscribe(role => {
|
|
16
|
+
const allowedRoles = this.getAllowedRoles(this.bbRole);
|
|
17
|
+
if (!allowedRoles.includes(role)) {
|
|
18
|
+
return this._viewContainerRef.clear();
|
|
19
|
+
}
|
|
20
|
+
this._viewContainerRef.createEmbeddedView(this._template);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
ngOnDestroy() {
|
|
24
|
+
this._subscription?.unsubscribe();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
BbRole.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbRole, deps: [{ token: i1.Auth }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
28
|
+
BbRole.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.0", type: BbRole, selector: "[bbRole]", inputs: { bbRole: "bbRole" }, ngImport: i0 });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbRole, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: '[bbRole]'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { bbRole: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}] } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL3JvbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQU96RCxNQUFNLE9BQU8sTUFBTTtJQVFmLFlBQW9CLEtBQVcsRUFDWCxTQUEyQixFQUMzQixpQkFBbUM7UUFGbkMsVUFBSyxHQUFMLEtBQUssQ0FBTTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFzQi9DLG9CQUFlLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDbkQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO0lBdkJGLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQy9CLG9CQUFvQixFQUFFLENBQ3pCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3pDO1lBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzttR0E5QlEsTUFBTTt1RkFBTixNQUFNOzJGQUFOLE1BQU07a0JBSGxCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFVBQVU7aUJBQ3ZCO29KQUlZLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tiYlJvbGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBCYlJvbGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBJbnB1dHMuXG4gICAgQElucHV0KCkgYmJSb2xlOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8vIFN1YnNjcmlwdGlvbnMuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fYXV0aC51c2VyLnBpcGUoXG4gICAgICAgICAgICBtYXAodXNlciA9PiB1c2VyPy5yb2xlID8/IG51bGwpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLnN1YnNjcmliZShyb2xlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRSb2xlcyA9IHRoaXMuZ2V0QWxsb3dlZFJvbGVzKHRoaXMuYmJSb2xlKTtcblxuICAgICAgICAgICAgaWYgKCFhbGxvd2VkUm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxvd2VkUm9sZXMgPSAodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICB9O1xuXG59XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { map } from 'rxjs/operators';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { firstValueFrom } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../auth.service";
|
|
6
|
+
export class BbAnonymousGuard {
|
|
7
|
+
constructor(_auth) {
|
|
8
|
+
this._auth = _auth;
|
|
9
|
+
}
|
|
10
|
+
async canActivate(_, state) {
|
|
11
|
+
// Check if the user is authenticated.
|
|
12
|
+
const isAuthenticated$ = await this._auth.user.pipe(map(user => !!user));
|
|
13
|
+
// If the user is not authenticated it can
|
|
14
|
+
// access the anonymous page.
|
|
15
|
+
const isAuthenticated = await firstValueFrom(isAuthenticated$, { defaultValue: null });
|
|
16
|
+
if (!isAuthenticated) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// Return the user back to the authenticated page.
|
|
20
|
+
return this._auth.guard('authenticated', state.url);
|
|
21
|
+
}
|
|
22
|
+
canActivateChild(childRoute, state) {
|
|
23
|
+
return this.canActivate(childRoute, state);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
BbAnonymousGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAnonymousGuard, deps: [{ token: i1.Auth }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
27
|
+
BbAnonymousGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAnonymousGuard, providedIn: 'root' });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAnonymousGuard, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{
|
|
31
|
+
providedIn: 'root'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }]; } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5vbnltb3VzLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvZ3VhcmRzL2Fub255bW91cy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVEsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFLcEMsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixZQUFvQixLQUFXO1FBQVgsVUFBSyxHQUFMLEtBQUssQ0FBTTtJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUF5QixFQUFFLEtBQTBCO1FBQ25FLHNDQUFzQztRQUN0QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3RCLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsNkJBQTZCO1FBQzdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sY0FBYyxDQUFDLGdCQUFnQixFQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsa0RBQWtEO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0MsRUFBRSxLQUEwQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7OzZHQXhCUSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2ZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYkFub255bW91c0d1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aDogQXV0aCkge1xuICAgIH1cblxuICAgIGFzeW5jIGNhbkFjdGl2YXRlKF86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCQgPSBhd2FpdCB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlcilcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCBpdCBjYW5cbiAgICAgICAgLy8gYWNjZXNzIHRoZSBhbm9ueW1vdXMgcGFnZS5cbiAgICAgICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaXNBdXRoZW50aWNhdGVkJCwge2RlZmF1bHRWYWx1ZTogbnVsbH0pO1xuICAgICAgICBpZiAoIWlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIgYmFjayB0byB0aGUgYXV0aGVudGljYXRlZCBwYWdlLlxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aC5ndWFyZCgnYXV0aGVudGljYXRlZCcsIHN0YXRlLnVybCk7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGVDaGlsZChjaGlsZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShjaGlsZFJvdXRlLCBzdGF0ZSk7XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { firstValueFrom } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../auth.service";
|
|
6
|
+
export class BbAuthenticatedGuard {
|
|
7
|
+
constructor(_auth) {
|
|
8
|
+
this._auth = _auth;
|
|
9
|
+
}
|
|
10
|
+
async canActivate(_, state) {
|
|
11
|
+
// Check if the user is authenticated.
|
|
12
|
+
const isAuthenticated$ = await this._auth.user.pipe(map(user => !!user));
|
|
13
|
+
// If the user is authenticated it can
|
|
14
|
+
// access the authenticated page.
|
|
15
|
+
const isAuthenticated = await firstValueFrom(isAuthenticated$, { defaultValue: null });
|
|
16
|
+
if (isAuthenticated) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// The user is not authorized to see that
|
|
20
|
+
// page so un-authorize him.
|
|
21
|
+
return this._auth.guard('unauthenticated', state.url);
|
|
22
|
+
}
|
|
23
|
+
canActivateChild(childRoute, state) {
|
|
24
|
+
return this.canActivate(childRoute, state);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
BbAuthenticatedGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAuthenticatedGuard, deps: [{ token: i1.Auth }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
BbAuthenticatedGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAuthenticatedGuard, providedIn: 'root' });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAuthenticatedGuard, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{
|
|
32
|
+
providedIn: 'root'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }]; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2d1YXJkcy9hdXRoZW50aWNhdGVkLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQUtuQyxNQUFNLE9BQU8sb0JBQW9CO0lBRTdCLFlBQW9CLEtBQVc7UUFBWCxVQUFLLEdBQUwsS0FBSyxDQUFNO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQXlCLEVBQUUsS0FBMEI7UUFDbkUsc0NBQXNDO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDdEIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxpQ0FBaUM7UUFDakMsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLGVBQWUsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQseUNBQXlDO1FBQ3pDLDRCQUE0QjtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0MsRUFBRSxLQUEwQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7O2lIQXpCUSxvQkFBb0I7cUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb219IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYkF1dGhlbnRpY2F0ZWRHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGg6IEF1dGgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBjYW5BY3RpdmF0ZShfOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICAgICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQkID0gYXdhaXQgdGhpcy5fYXV0aC51c2VyLnBpcGUoXG4gICAgICAgICAgICBtYXAodXNlciA9PiAhIXVzZXIpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBpdCBjYW5cbiAgICAgICAgLy8gYWNjZXNzIHRoZSBhdXRoZW50aWNhdGVkIHBhZ2UuXG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGlzQXV0aGVudGljYXRlZCQsIHtkZWZhdWx0VmFsdWU6IG51bGx9KTtcbiAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgdXNlciBpcyBub3QgYXV0aG9yaXplZCB0byBzZWUgdGhhdFxuICAgICAgICAvLyBwYWdlIHNvIHVuLWF1dGhvcml6ZSBoaW0uXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLmd1YXJkKCd1bmF1dGhlbnRpY2F0ZWQnLCBzdGF0ZS51cmwpO1xuICAgIH1cblxuICAgIGNhbkFjdGl2YXRlQ2hpbGQoY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGUoY2hpbGRSb3V0ZSwgc3RhdGUpO1xuICAgIH1cblxufVxuIl19
|
|
@@ -37,7 +37,7 @@ export class JwtHelper {
|
|
|
37
37
|
const json = JSON.parse(this.urlDecode(token.split('.')[1]));
|
|
38
38
|
return this.parse(json);
|
|
39
39
|
}
|
|
40
|
-
catch
|
|
40
|
+
catch {
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -61,9 +61,9 @@ export class JwtHelper {
|
|
|
61
61
|
try {
|
|
62
62
|
return this.baseDecodeUnicode(output);
|
|
63
63
|
}
|
|
64
|
-
catch
|
|
64
|
+
catch {
|
|
65
65
|
return atob(output);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2hlbHBlcnMvand0LmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQTRDWSxzQkFBaUIsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzFDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztpQkFDckI7Z0JBQ0QsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUM7UUFFTSxVQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUM3QixPQUFPO2dCQUNILEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSTtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJO2dCQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUk7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSTtnQkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJO2dCQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUk7Z0JBQzFCLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0IsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFTSxjQUFTLEdBQUcsQ0FBQyxjQUFzQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDO0lBRU4sQ0FBQztJQTFFRyxNQUFNLENBQUMsS0FBYTtRQUNoQixJQUFJO1lBQ0EsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtRQUFDLE1BQU07WUFDSixPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFvQjtRQUNsQyxNQUFNLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFHLEtBQUs7YUFDYixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzthQUNsQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXhCLFFBQVEsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsS0FBSyxDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLElBQUksQ0FBQztnQkFDZixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ2QsTUFBTTtZQUNWO2dCQUNJLE1BQU0sMkJBQTJCLENBQUM7U0FDekM7UUFFRCxJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7UUFBQyxNQUFNO1lBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7SUFDTCxDQUFDO0NBa0NKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBdXRoVG9rZW59IGZyb20gJy4uL2ludGVyZmFjZXMvdG9rZW4uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIEp3dEhlbHBlciB7XG5cbiAgICBkZWNvZGUodG9rZW46IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgdGhpcy51cmxEZWNvZGUodG9rZW4uc3BsaXQoJy4nKVsxXSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGpzb24pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cmxEZWNvZGUodG9rZW46IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0b2tlbiB8fCAnJztcbiAgICAgICAgbGV0IG91dHB1dCA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvLS9nLCAnKycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXy9nLCAnLycpO1xuXG4gICAgICAgIHN3aXRjaCAob3V0cHV0Lmxlbmd0aCAlIDQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJz09JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJz0nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyAnSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISc7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZURlY29kZVVuaWNvZGUob3V0cHV0KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gYXRvYihvdXRwdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiYXNlRGVjb2RlVW5pY29kZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXRvYih2YWx1ZSkucmVwbGFjZSgvKC4pL2csIChfLCBwKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29kZSA9IHAuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gJzAnICsgY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJScgKyBjb2RlO1xuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGFyc2UgPSAoZGF0YTogb2JqZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZGF0YVsnaXNzJ10gfHwgbnVsbCxcbiAgICAgICAgICAgIHR5cGU6IGRhdGFbJ3R5cCddIHx8IG51bGwsXG4gICAgICAgICAgICBhdWRpZW5jZTogZGF0YVsnYXVkJ10gfHwgbnVsbCxcbiAgICAgICAgICAgIGlzc3VlcjogZGF0YVsnaXNzJ10gfHwgbnVsbCxcbiAgICAgICAgICAgIHN1YmplY3Q6IGRhdGFbJ3N1YiddIHx8IG51bGwsXG4gICAgICAgICAgICByb2xlOiBkYXRhWydyb2xlJ10gfHwgbnVsbCxcbiAgICAgICAgICAgIG5vdFZhbGlkQmVmb3JlOiB0aGlzLnBhcnNlRGF0ZShkYXRhWyduYmYnXSksXG4gICAgICAgICAgICBleHBpcmVzQXQ6IHRoaXMucGFyc2VEYXRlKGRhdGFbJ2V4cCddKSxcbiAgICAgICAgICAgIGlzc3VlZEF0OiB0aGlzLnBhcnNlRGF0ZShkYXRhWydpYXQnXSlcbiAgICAgICAgfSBhcyBBdXRoVG9rZW47XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGFyc2VEYXRlID0gKGVwb2NoSW5TZWNvbmRzOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFlcG9jaEluU2Vjb25kcyB8fCBlcG9jaEluU2Vjb25kcyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShlcG9jaEluU2Vjb25kcyAqIDEwMDApO1xuICAgIH07XG5cbn1cbiJdfQ==
|
package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs}
RENAMED
|
@@ -27,9 +27,9 @@ export class AuthMapper {
|
|
|
27
27
|
return { accessToken: token, refreshToken: refresh_token };
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
AuthMapper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
31
|
-
AuthMapper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
30
|
+
AuthMapper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthMapper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
31
|
+
AuthMapper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthMapper });
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: AuthMapper, decorators: [{
|
|
33
33
|
type: Injectable
|
|
34
34
|
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGVyLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2hlbHBlcnMvbWFwcGVyLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sVUFBVTtJQUR2QjtRQUdJLFVBQVU7UUFDVixPQUFFLEdBQVcsU0FBUyxDQUFDO1FBQ3ZCLGFBQVEsR0FBVyxlQUFlLENBQUM7UUFDbkMsZUFBVSxHQUFXLGFBQWEsQ0FBQztRQUNuQyxXQUFNLEdBQVcsYUFBYSxDQUFDO1FBQy9CLFlBQU8sR0FBVyxjQUFjLENBQUM7UUFDakMsb0JBQWUsR0FBVyxZQUFZLENBQUM7UUFDdkMsa0JBQWEsR0FBVyxxQkFBcUIsQ0FBQztLQXNCakQ7SUFwQkcsSUFBSSxDQUFDLElBQVM7UUFDVixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLHVCQUF1QjtRQUN2QixNQUFNLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUM7UUFFMUMsc0NBQXNDO1FBQ3RDLE9BQU8sRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBUztRQUNmLHVCQUF1QjtRQUN2QixNQUFNLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQyxHQUFHLElBQUksQ0FBQztRQUVwQyxzQ0FBc0M7UUFDdEMsT0FBTyxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBQyxDQUFDO0lBQzdELENBQUM7O3VHQTdCUSxVQUFVOzJHQUFWLFVBQVU7MkZBQVYsVUFBVTtrQkFEdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXV0aE1hcHBlclByb3RvY29sfSBmcm9tICcuLi9pbnRlcmZhY2VzL21hcHBlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhNYXBwZXIgaW1wbGVtZW50cyBBdXRoTWFwcGVyUHJvdG9jb2wge1xuXG4gICAgLy8gUm91dGVzLlxuICAgIG1lOiBzdHJpbmcgPSAnYXV0aC9tZSc7XG4gICAgcmVnaXN0ZXI6IHN0cmluZyA9ICdhdXRoL3JlZ2lzdGVyJztcbiAgICByZXNlbmRDb2RlOiBzdHJpbmcgPSAnYXV0aC9yZXNlbmQnO1xuICAgIGxvZ291dDogc3RyaW5nID0gJ2F1dGgvbG9nb3V0JztcbiAgICByZWZyZXNoOiBzdHJpbmcgPSAnYXV0aC9yZWZyZXNoJztcbiAgICByZXF1ZXN0UGFzc3dvcmQ6IHN0cmluZyA9ICdhdXRoL3Jlc2V0JztcbiAgICByZXNldFBhc3N3b3JkOiBzdHJpbmcgPSAnYXV0aC9yZXNldC1wYXNzd29yZCc7XG5cbiAgICByb2xlKGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gKGRhdGEgJiYgZGF0YS5yb2xlKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHRvUmVnaXN0ZXIoZGF0YTogYW55KSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHt0b2tlbiwgcmVmcmVzaF90b2tlbiwgdXNlcn0gPSBkYXRhO1xuXG4gICAgICAgIC8vIE1hcCB0aGUgZGF0YSB0byB0aGUgY29ycmVjdCBmb3JtYXQuXG4gICAgICAgIHJldHVybiB7YWNjZXNzVG9rZW46IHRva2VuLCByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sIHVzZXI6IHVzZXJ9O1xuICAgIH1cblxuICAgIHRvUmVmcmVzaChkYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHBhcmFtcy5cbiAgICAgICAgY29uc3Qge3Rva2VuLCByZWZyZXNoX3Rva2VufSA9IGRhdGE7XG5cbiAgICAgICAgLy8gTWFwIHRoZSBkYXRhIHRvIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHthY2Nlc3NUb2tlbjogdG9rZW4sIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbn07XG4gICAgfVxuXG59XG4iXX0=
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
2
|
+
import { Injectable, Optional } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./auth.service";
|
|
5
|
+
import * as i2 from "./interfaces/config.interface";
|
|
6
|
+
export class Permissions {
|
|
7
|
+
constructor(_auth, _config) {
|
|
8
|
+
this._auth = _auth;
|
|
9
|
+
this._config = _config;
|
|
10
|
+
// Data.
|
|
11
|
+
this._permissions = this._config?.permissions ?? {};
|
|
12
|
+
this._role$ = this._auth.user.pipe(map(user => user?.role ?? null), distinctUntilChanged());
|
|
13
|
+
}
|
|
14
|
+
has(value) {
|
|
15
|
+
const requiredPermissions = Array.isArray(value)
|
|
16
|
+
? value
|
|
17
|
+
: [value];
|
|
18
|
+
return this._role$.pipe(map(role => {
|
|
19
|
+
if (role === null || role === undefined) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
for (const requiredPermission of requiredPermissions) {
|
|
23
|
+
const result = this.validatePermission(requiredPermission, role);
|
|
24
|
+
if (!result) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
validatePermission(type, role) {
|
|
32
|
+
const permission = this._permissions?.[type] ?? null;
|
|
33
|
+
if (!permission) {
|
|
34
|
+
console?.warn?.(`Permissions: Invalid permission requested "${type}".`);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (permission?.length <= 0) {
|
|
38
|
+
console?.warn?.(`Permissions: No roles were set, please add some roles to this permission.`);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// If the permission includes a "*" we allow everyone.
|
|
42
|
+
if (permission.includes('*')) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
// Validate the role against the permissions.
|
|
46
|
+
return permission?.includes(role) ?? false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
Permissions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Permissions, deps: [{ token: i1.Auth }, { token: i2.AuthConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
50
|
+
Permissions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Permissions });
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Permissions, decorators: [{
|
|
52
|
+
type: Injectable
|
|
53
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i2.AuthConfig, decorators: [{
|
|
54
|
+
type: Optional
|
|
55
|
+
}] }]; } });
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7O0FBSW5ELE1BQU0sT0FBTyxXQUFXO0lBU3BCLFlBQW9CLEtBQVcsRUFDQyxPQUFvQjtRQURoQyxVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ0MsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQVJwRCxRQUFRO1FBQ1MsaUJBQVksR0FBdUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ25GLFdBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFjLElBQUksSUFBSSxDQUFDLEVBQ3pDLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7SUFJRixDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQXdCO1FBQ3hCLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDNUMsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNQLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUNyQyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxtQkFBbUIsRUFBRTtnQkFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsOENBQThDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDeEUsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1lBQzdGLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsc0RBQXNEO1FBQ3RELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsNkNBQTZDO1FBQzdDLE9BQU8sVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDL0MsQ0FBQzs7d0dBdERRLFdBQVc7NEdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFXTSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0F1dGhDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9ucyB7XG5cbiAgICAvLyBEYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Blcm1pc3Npb25zOiB7IFtwZXJtaXNzaW9uOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0gdGhpcy5fY29uZmlnPy5wZXJtaXNzaW9ucyA/PyB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb2xlJCA9IHRoaXMuX2F1dGgudXNlci5waXBlKFxuICAgICAgICBtYXAodXNlciA9PiB1c2VyPy5yb2xlIGFzIHN0cmluZyA/PyBudWxsKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcpIHtcbiAgICB9XG5cbiAgICBoYXModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkUGVybWlzc2lvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBbdmFsdWVdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9yb2xlJC5waXBlKFxuICAgICAgICAgICAgbWFwKHJvbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSBudWxsIHx8IHJvbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXF1aXJlZFBlcm1pc3Npb24gb2YgcmVxdWlyZWRQZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb24sIHJvbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVQZXJtaXNzaW9uKHR5cGU6IHN0cmluZywgcm9sZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLl9wZXJtaXNzaW9ucz8uW3R5cGVdID8/IG51bGw7XG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xuICAgICAgICAgICAgY29uc29sZT8ud2Fybj8uKGBQZXJtaXNzaW9uczogSW52YWxpZCBwZXJtaXNzaW9uIHJlcXVlc3RlZCBcIiR7dHlwZX1cIi5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbj8ubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGU/Lndhcm4/LihgUGVybWlzc2lvbnM6IE5vIHJvbGVzIHdlcmUgc2V0LCBwbGVhc2UgYWRkIHNvbWUgcm9sZXMgdG8gdGhpcyBwZXJtaXNzaW9uLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBlcm1pc3Npb24gaW5jbHVkZXMgYSBcIipcIiB3ZSBhbGxvdyBldmVyeW9uZS5cbiAgICAgICAgaWYgKHBlcm1pc3Npb24uaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgcm9sZSBhZ2FpbnN0IHRoZSBwZXJtaXNzaW9ucy5cbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb24/LmluY2x1ZGVzKHJvbGUpID8/IGZhbHNlO1xuICAgIH1cblxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { firstValueFrom } from 'rxjs';
|
|
2
|
+
export class AuthEmailProvider {
|
|
3
|
+
constructor(_email, _password, _endpoint) {
|
|
4
|
+
this._email = _email;
|
|
5
|
+
this._password = _password;
|
|
6
|
+
this._endpoint = _endpoint;
|
|
7
|
+
}
|
|
8
|
+
async authenticate(httpClient) {
|
|
9
|
+
// Execute API call.
|
|
10
|
+
const data$ = await httpClient.post(this._endpoint, {
|
|
11
|
+
email: this._email,
|
|
12
|
+
password: this._password
|
|
13
|
+
});
|
|
14
|
+
const { token, refresh_token, user, provider, verify_token } = await firstValueFrom(data$);
|
|
15
|
+
// Map the data to the correct format.
|
|
16
|
+
return {
|
|
17
|
+
accessToken: token,
|
|
18
|
+
refreshToken: refresh_token,
|
|
19
|
+
user: user,
|
|
20
|
+
provider: provider,
|
|
21
|
+
verifyToken: verify_token
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9wcm92aWRlcnMvZW1haWwucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVwQyxNQUFNLE9BQU8saUJBQWlCO0lBRTFCLFlBQW9CLE1BQWMsRUFDZCxTQUFpQixFQUNqQixTQUFpQjtRQUZqQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFRO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQXNCO1FBQ3JDLG9CQUFvQjtRQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekYsc0NBQXNDO1FBQ3RDLE9BQU87WUFDSCxXQUFXLEVBQUUsS0FBSztZQUNsQixZQUFZLEVBQUUsYUFBYTtZQUMzQixJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFdBQVcsRUFBRSxZQUFZO1NBQzVCLENBQUM7SUFDTixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F1dGhQcm92aWRlcn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm92aWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIEF1dGhFbWFpbFByb3ZpZGVyIGltcGxlbWVudHMgQXV0aFByb3ZpZGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VtYWlsOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGFzc3dvcmQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9lbmRwb2ludDogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgZGF0YSQgPSBhd2FpdCBodHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9lbmRwb2ludCwge1xuICAgICAgICAgICAgZW1haWw6IHRoaXMuX2VtYWlsLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHRoaXMuX3Bhc3N3b3JkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHt0b2tlbiwgcmVmcmVzaF90b2tlbiwgdXNlciwgcHJvdmlkZXIsIHZlcmlmeV90b2tlbn0gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShkYXRhJCk7XG5cbiAgICAgICAgLy8gTWFwIHRoZSBkYXRhIHRvIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgIHVzZXI6IHVzZXIsXG4gICAgICAgICAgICBwcm92aWRlcjogcHJvdmlkZXIsXG4gICAgICAgICAgICB2ZXJpZnlUb2tlbjogdmVyaWZ5X3Rva2VuXG4gICAgICAgIH07XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { firstValueFrom } from 'rxjs';
|
|
2
|
+
export class AuthVerifyProvider {
|
|
3
|
+
constructor(_code, _verifyToken, _endpoint) {
|
|
4
|
+
this._code = _code;
|
|
5
|
+
this._verifyToken = _verifyToken;
|
|
6
|
+
this._endpoint = _endpoint;
|
|
7
|
+
}
|
|
8
|
+
async authenticate(httpClient) {
|
|
9
|
+
// Execute API call.
|
|
10
|
+
const data$ = await httpClient.post(this._endpoint, {
|
|
11
|
+
token: this._code,
|
|
12
|
+
verify_token: this._verifyToken
|
|
13
|
+
});
|
|
14
|
+
const { token, refresh_token, user } = await firstValueFrom(data$);
|
|
15
|
+
// Map the data to the correct format.
|
|
16
|
+
return { accessToken: token, refreshToken: refresh_token, user: user };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvcHJvdmlkZXJzL3ZlcmlmeS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE1BQU0sT0FBTyxrQkFBa0I7SUFFM0IsWUFBb0IsS0FBYSxFQUNiLFlBQW9CLEVBQ3BCLFNBQWlCO1FBRmpCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQXNCO1FBQ3JDLG9CQUFvQjtRQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2xDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBQyxHQUFHLE1BQU0sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLHNDQUFzQztRQUN0QyxPQUFPLEVBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RSxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F1dGhQcm92aWRlcn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm92aWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIEF1dGhWZXJpZnlQcm92aWRlciBpbXBsZW1lbnRzIEF1dGhQcm92aWRlciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb2RlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdmVyaWZ5VG9rZW46IHN0cmluZyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9lbmRwb2ludDogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgZGF0YSQgPSBhd2FpdCBodHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9lbmRwb2ludCwge1xuICAgICAgICAgICAgdG9rZW46IHRoaXMuX2NvZGUsXG4gICAgICAgICAgICB2ZXJpZnlfdG9rZW46IHRoaXMuX3ZlcmlmeVRva2VuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHt0b2tlbiwgcmVmcmVzaF90b2tlbiwgdXNlcn0gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShkYXRhJCk7XG5cbiAgICAgICAgLy8gTWFwIHRoZSBkYXRhIHRvIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHthY2Nlc3NUb2tlbjogdG9rZW4sIHJlZnJlc2hUb2tlbjogcmVmcmVzaF90b2tlbiwgdXNlcjogdXNlcn07XG4gICAgfVxuXG59XG4iXX0=
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';
|
|
2
|
+
import { BehaviorSubject, combineLatest, of } from 'rxjs';
|
|
3
|
+
import { FormControl } from '@angular/forms';
|
|
4
|
+
export class Collection {
|
|
5
|
+
constructor(_provider, _initialValues = {}) {
|
|
6
|
+
this._provider = _provider;
|
|
7
|
+
this._initialValues = _initialValues;
|
|
8
|
+
this.raw$ = new BehaviorSubject(null);
|
|
9
|
+
this.loading$ = new BehaviorSubject(true);
|
|
10
|
+
// State.
|
|
11
|
+
this._formatter = null;
|
|
12
|
+
this._refresh$ = new BehaviorSubject(0);
|
|
13
|
+
this._requestCache = null;
|
|
14
|
+
this.controlToObservable = (control) => {
|
|
15
|
+
return control.valueChanges.pipe(distinctUntilChanged(), startWith(control?.value));
|
|
16
|
+
};
|
|
17
|
+
this.queryControl = new FormControl(_initialValues?.query ?? null);
|
|
18
|
+
this.queryFieldsControl = new FormControl(_initialValues?.queryFields ?? []);
|
|
19
|
+
this.pageNumberControl = new FormControl(_initialValues?.pageNumber ?? 1);
|
|
20
|
+
this.pageSizeControl = new FormControl(_initialValues?.pageSize ?? 25);
|
|
21
|
+
this.sortControl = new FormControl(_initialValues?.sort ?? null);
|
|
22
|
+
this.data$ = this.getData();
|
|
23
|
+
}
|
|
24
|
+
refresh() {
|
|
25
|
+
this._refresh$.next(0);
|
|
26
|
+
}
|
|
27
|
+
setFormatter(callback) {
|
|
28
|
+
this._formatter = callback;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
getData() {
|
|
32
|
+
const data$ = this.request.pipe(tap(() => this.loading$.next(true)), map(request => this.validateRequest(request)), switchMap(request => {
|
|
33
|
+
return this._provider.transform(request).pipe(tap(response => this.cacheCollectionData(response)), map(response => ({ response, request, initial: false })), catchError(error => of({
|
|
34
|
+
error,
|
|
35
|
+
request,
|
|
36
|
+
response: null,
|
|
37
|
+
initial: false
|
|
38
|
+
})));
|
|
39
|
+
}), startWith({ initial: true, response: null }));
|
|
40
|
+
return combineLatest([data$, this.loading$.asObservable()]).pipe(map(([data, loading]) => {
|
|
41
|
+
const combined = { ...data, loading };
|
|
42
|
+
return { ...combined, response: this.formatResponse(data?.response), state: this.getState(combined) };
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
formatResponse(response) {
|
|
46
|
+
if (!response) {
|
|
47
|
+
return response;
|
|
48
|
+
}
|
|
49
|
+
const data = (response?.data ?? []).map(item => {
|
|
50
|
+
return !!this._formatter ? this._formatter?.(item) : item;
|
|
51
|
+
});
|
|
52
|
+
return { ...response, data };
|
|
53
|
+
}
|
|
54
|
+
validateRequest(request) {
|
|
55
|
+
// We should reset the page number whenever we change the query or the page size.
|
|
56
|
+
if (this._requestCache && request && (this._requestCache?.query !== request?.query || this._requestCache?.pageSize !== request?.pageSize)) {
|
|
57
|
+
this.pageNumberControl?.setValue(1, { emitEvent: false });
|
|
58
|
+
request.pageNumber = this.pageNumberControl?.value;
|
|
59
|
+
}
|
|
60
|
+
this._requestCache = { ...request };
|
|
61
|
+
return request;
|
|
62
|
+
}
|
|
63
|
+
getState(data) {
|
|
64
|
+
if (!!data?.error) {
|
|
65
|
+
return "error" /* Error */;
|
|
66
|
+
}
|
|
67
|
+
if (!!data?.initial) {
|
|
68
|
+
return "initial" /* Initial */;
|
|
69
|
+
}
|
|
70
|
+
const count = data?.response?.data?.length ?? 0;
|
|
71
|
+
if (count <= 0) {
|
|
72
|
+
return "empty" /* Empty */;
|
|
73
|
+
}
|
|
74
|
+
return "data" /* Data */;
|
|
75
|
+
}
|
|
76
|
+
cacheCollectionData(data) {
|
|
77
|
+
this.raw$.next(data);
|
|
78
|
+
this.loading$.next(false);
|
|
79
|
+
}
|
|
80
|
+
get request() {
|
|
81
|
+
const pageNumber$ = this.controlToObservable(this.pageNumberControl);
|
|
82
|
+
const pageSize$ = this.controlToObservable(this.pageSizeControl);
|
|
83
|
+
const query$ = this.getQueryObservable();
|
|
84
|
+
const queryFields$ = this.controlToObservable(this.queryFieldsControl);
|
|
85
|
+
const sort$ = this.controlToObservable(this.sortControl);
|
|
86
|
+
return combineLatest([pageNumber$, pageSize$, query$, queryFields$, sort$, this._refresh$.asObservable()]).pipe(map(([pageNumber, pageSize, query, queryFields, sort]) => ({
|
|
87
|
+
pageNumber,
|
|
88
|
+
pageSize,
|
|
89
|
+
query,
|
|
90
|
+
queryFields,
|
|
91
|
+
sort
|
|
92
|
+
})));
|
|
93
|
+
}
|
|
94
|
+
getQueryObservable() {
|
|
95
|
+
return this.queryControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged(), startWith(this.queryControl?.value));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vY29sbGVjdGlvbnMvc3JjL2xpYi9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlHLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQWtCLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBUzVELE1BQU0sT0FBTyxVQUFVO0lBMkJuQixZQUE2QixTQUFnQyxFQUNoQyxpQkFBNkMsRUFBRTtRQUQvQyxjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUM7UUFUbkUsU0FBSSxHQUFHLElBQUksZUFBZSxDQUEyQixJQUFJLENBQUMsQ0FBQztRQUMzRCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFdkQsU0FBUztRQUNELGVBQVUsR0FBMEIsSUFBSSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzQyxrQkFBYSxHQUE2QixJQUFJLENBQUM7UUF3SC9DLHdCQUFtQixHQUFHLENBQWMsT0FBd0IsRUFBRSxFQUFFO1lBQ3BFLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzVCLG9CQUFvQixFQUFLLEVBQ3pCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBVSxDQUFDLENBQ2pDLENBQUM7UUFDTixDQUFDLENBQUM7UUF6SEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxJ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QUFDO0NBU0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb2xsZWN0aW9uRGF0YSwgQ29sbGVjdGlvblJlcXVlc3QsIENvbGxlY3Rpb25SZXF1ZXN0U29ydH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbGxlY3Rpb25Qcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvY29sbGVjdGlvbi5wcm92aWRlcic7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sbGVjdGlvblN0YXRlIHtcbiAgICBJbml0aWFsID0gJ2luaXRpYWwnLFxuICAgIEVycm9yID0gJ2Vycm9yJyxcbiAgICBFbXB0eSA9ICdlbXB0eScsXG4gICAgRGF0YSA9ICdkYXRhJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbjxUPiB7XG5cbiAgICAvLyBDb250cm9scy5cbiAgICByZWFkb25seSBxdWVyeUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICAgIHJlYWRvbmx5IHF1ZXJ5RmllbGRzQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gICAgcmVhZG9ubHkgcGFnZU51bWJlckNvbnRyb2w6IEZvcm1Db250cm9sO1xuICAgIHJlYWRvbmx5IHBhZ2VTaXplQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gICAgcmVhZG9ubHkgc29ydENvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLy8gUmVxdWVzdC5cbiAgICByZWFkb25seSBkYXRhJDogT2JzZXJ2YWJsZTx7XG4gICAgICAgIHJlc3BvbnNlPzogQ29sbGVjdGlvbkRhdGE8VD4sXG4gICAgICAgIHJlcXVlc3Q/OiBDb2xsZWN0aW9uUmVxdWVzdCxcbiAgICAgICAgZXJyb3I/OiBFcnJvclxuICAgICAgICBzdGF0ZTogQ29sbGVjdGlvblN0YXRlLFxuICAgICAgICBsb2FkaW5nOiBib29sZWFuLFxuICAgICAgICBpbml0aWFsOiBib29sZWFuXG4gICAgfT47XG5cbiAgICByZWFkb25seSByYXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uRGF0YTxUPiB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICAgIC8vIFN0YXRlLlxuICAgIHByaXZhdGUgX2Zvcm1hdHRlcjogKGl0ZW06IFQpID0+IFQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICBwcml2YXRlIF9yZXF1ZXN0Q2FjaGU6IENvbGxlY3Rpb25SZXF1ZXN0IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9wcm92aWRlcjogQ29sbGVjdGlvblByb3ZpZGVyPFQ+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxWYWx1ZXM6IFBhcnRpYWw8Q29sbGVjdGlvblJlcXVlc3Q+ID0ge30pIHtcbiAgICAgICAgdGhpcy5xdWVyeUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woX2luaXRpYWxWYWx1ZXM/LnF1ZXJ5ID8/IG51bGwpO1xuICAgICAgICB0aGlzLnF1ZXJ5RmllbGRzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChfaW5pdGlhbFZhbHVlcz8ucXVlcnlGaWVsZHMgPz8gW10pO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJDb250cm9sID0gbmV3IEZvcm1Db250cm9sKF9pbml0aWFsVmFsdWVzPy5wYWdlTnVtYmVyID8/IDEpO1xuICAgICAgICB0aGlzLnBhZ2VTaXplQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChfaW5pdGlhbFZhbHVlcz8ucGFnZVNpemUgPz8gMjUpO1xuICAgICAgICB0aGlzLnNvcnRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKF9pbml0aWFsVmFsdWVzPy5zb3J0ID8/IG51bGwpO1xuXG4gICAgICAgIHRoaXMuZGF0YSQgPSB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KDApO1xuICAgIH1cblxuICAgIHNldEZvcm1hdHRlcihjYWxsYmFjazogKGl0ZW1zOiBUKSA9PiBUKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlciA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEkID0gdGhpcy5yZXF1ZXN0LnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICAgICAgICAgIG1hcChyZXF1ZXN0ID0+IHRoaXMudmFsaWRhdGVSZXF1ZXN0KHJlcXVlc3QpKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXIudHJhbnNmb3JtKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcChyZXNwb25zZSA9PiB0aGlzLmNhY2hlQ29sbGVjdGlvbkRhdGEocmVzcG9uc2UpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+ICh7cmVzcG9uc2UsIHJlcXVlc3QsIGluaXRpYWw6IGZhbHNlfSkpLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IG9mPHsgZXJyb3I6IEVycm9yLCByZXNwb25zZTogbnVsbCwgcmVxdWVzdDogQ29sbGVjdGlvblJlcXVlc3QsIGluaXRpYWw6IGJvb2xlYW4gfT4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzdGFydFdpdGgoe2luaXRpYWw6IHRydWUsIHJlc3BvbnNlOiBudWxsfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbZGF0YSQsIHRoaXMubG9hZGluZyQuYXNPYnNlcnZhYmxlKCldKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbZGF0YSwgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9IHsuLi5kYXRhLCBsb2FkaW5nfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLmNvbWJpbmVkLCByZXNwb25zZTogdGhpcy5mb3JtYXRSZXNwb25zZShkYXRhPy5yZXNwb25zZSksIHN0YXRlOiB0aGlzLmdldFN0YXRlKGNvbWJpbmVkKX07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UmVzcG9uc2UocmVzcG9uc2U6IENvbGxlY3Rpb25EYXRhPFQ+KSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2U/LmRhdGEgPz8gW10pLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX2Zvcm1hdHRlciA/IHRoaXMuX2Zvcm1hdHRlcj8uKGl0ZW0pIDogaXRlbTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4ucmVzcG9uc2UsIGRhdGF9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0KHJlcXVlc3Q6IENvbGxlY3Rpb25SZXF1ZXN0KSB7XG4gICAgICAgIC8vIFdlIHNob3VsZCByZXNldCB0aGUgcGFnZSBudW1iZXIgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSBxdWVyeSBvciB0aGUgcGFnZSBzaXplLlxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdENhY2hlICYmIHJlcXVlc3QgJiYgKHRoaXMuX3JlcXVlc3RDYWNoZT8ucXVlcnkgIT09IHJlcXVlc3Q/LnF1ZXJ5IHx8IHRoaXMuX3JlcXVlc3RDYWNoZT8ucGFnZVNpemUgIT09IHJlcXVlc3Q/LnBhZ2VTaXplKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlTnVtYmVyQ29udHJvbD8uc2V0VmFsdWUoMSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIHJlcXVlc3QucGFnZU51bWJlciA9IHRoaXMucGFnZU51bWJlckNvbnRyb2w/LnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVxdWVzdENhY2hlID0gey4uLnJlcXVlc3R9O1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhdGUoZGF0YTogeyByZXNwb25zZT86IENvbGxlY3Rpb25EYXRhPFQ+LCByZXF1ZXN0PzogQ29sbGVjdGlvblJlcXVlc3QsIGVycm9yPzogRXJyb3IsIGxvYWRpbmc6IGJvb2xlYW4sIGluaXRpYWw6IGJvb2xlYW4gfSkge1xuICAgICAgICBpZiAoISFkYXRhPy5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25TdGF0ZS5FcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIWRhdGE/LmluaXRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9uU3RhdGUuSW5pdGlhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdW50ID0gZGF0YT8ucmVzcG9uc2U/LmRhdGE/Lmxlbmd0aCA/PyAwO1xuICAgICAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25TdGF0ZS5FbXB0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBDb2xsZWN0aW9uU3RhdGUuRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhY2hlQ29sbGVjdGlvbkRhdGEoZGF0YTogQ29sbGVjdGlvbkRhdGE8VD4pIHtcbiAgICAgICAgdGhpcy5yYXckLm5leHQoZGF0YSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcmVxdWVzdCgpIHtcbiAgICAgICAgY29uc3QgcGFnZU51bWJlciQgPSB0aGlzLmNvbnRyb2xUb09ic2VydmFibGU8bnVtYmVyPih0aGlzLnBhZ2VOdW1iZXJDb250cm9sKTtcbiAgICAgICAgY29uc3QgcGFnZVNpemUkID0gdGhpcy5jb250cm9sVG9PYnNlcnZhYmxlPG51bWJlcj4odGhpcy5wYWdlU2l6ZUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBxdWVyeSQgPSB0aGlzLmdldFF1ZXJ5T2JzZXJ2YWJsZSgpO1xuICAgICAgICBjb25zdCBxdWVyeUZpZWxkcyQgPSB0aGlzLmNvbnRyb2xUb09ic2VydmFibGU8c3RyaW5nW10+KHRoaXMucXVlcnlGaWVsZHNDb250cm9sKTtcbiAgICAgICAgY29uc3Qgc29ydCQgPSB0aGlzLmNvbnRyb2xUb09ic2VydmFibGU8Q29sbGVjdGlvblJlcXVlc3RTb3J0IHwgQ29sbGVjdGlvblJlcXVlc3RTb3J0W10+KHRoaXMuc29ydENvbnRyb2wpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtwYWdlTnVtYmVyJCwgcGFnZVNpemUkLCBxdWVyeSQsIHF1ZXJ5RmllbGRzJCwgc29ydCQsIHRoaXMuX3JlZnJlc2gkLmFzT2JzZXJ2YWJsZSgpXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3BhZ2VOdW1iZXIsIHBhZ2VTaXplLCBxdWVyeSwgcXVlcnlGaWVsZHMsIHNvcnRdKSA9PiAoe1xuICAgICAgICAgICAgICAgIHBhZ2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgcXVlcnlGaWVsZHMsXG4gICAgICAgICAgICAgICAgc29ydFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRRdWVyeU9ic2VydmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZTxzdHJpbmc+KDQwMCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KCksXG4gICAgICAgICAgICBzdGFydFdpdGgodGhpcy5xdWVyeUNvbnRyb2w/LnZhbHVlIGFzIHN0cmluZyB8IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250cm9sVG9PYnNlcnZhYmxlID0gPFQgPSB1bmtub3duPihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxUPigpLFxuICAgICAgICAgICAgc3RhcnRXaXRoKGNvbnRyb2w/LnZhbHVlIGFzIFQpXG4gICAgICAgICk7XG4gICAgfTtcblxufVxuXG4iXX0=
|
|
@@ -6,8 +6,8 @@ import { NgModule } from '@angular/core';
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export class CollectionsModule {
|
|
8
8
|
}
|
|
9
|
-
CollectionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
10
|
-
CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
9
|
+
CollectionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: CollectionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: CollectionsModule, declarations: [
|
|
11
11
|
// Components.
|
|
12
12
|
BbCollectionsViewer,
|
|
13
13
|
BbCollectionsPager,
|
|
@@ -24,8 +24,8 @@ CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
|
|
|
24
24
|
BbCollectionsEmpty,
|
|
25
25
|
BbCollectionsError,
|
|
26
26
|
BbCollectionsInitial] });
|
|
27
|
-
CollectionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
27
|
+
CollectionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: CollectionsModule, imports: [[CommonModule]] });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: CollectionsModule, decorators: [{
|
|
29
29
|
type: NgModule,
|
|
30
30
|
args: [{
|
|
31
31
|
imports: [CommonModule],
|
|
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImpo
|
|
|
51
51
|
]
|
|
52
52
|
}]
|
|
53
53
|
}] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9jb2xsZWN0aW9ucy9zcmMvbGliL2NvbGxlY3Rpb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDakcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBeUJ2QyxNQUFNLE9BQU8saUJBQWlCOzs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUI7UUFwQnRCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQkFBb0IsYUFUZCxZQUFZO1FBWWxCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQkFBb0I7K0dBR2YsaUJBQWlCLFlBdEJqQixDQUFDLFlBQVksQ0FBQzsyRkFzQmQsaUJBQWlCO2tCQXZCN0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFlBQVksRUFBRTt3QkFDVixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLG9CQUFvQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQmJDb2xsZWN0aW9uc0RhdGEsXG4gICAgQmJDb2xsZWN0aW9uc0VtcHR5LFxuICAgIEJiQ29sbGVjdGlvbnNFcnJvcixcbiAgICBCYkNvbGxlY3Rpb25zSW5pdGlhbFxufSBmcm9tICcuL2NvbXBvbmVudHMvY29sbGVjdGlvbnMuZGlyZWN0aXZlJztcbmltcG9ydCB7QmJDb2xsZWN0aW9uc1ZpZXdlcn0gZnJvbSAnLi9jb21wb25lbnRzL2NvbGxlY3Rpb25zLXZpZXdlci9jb2xsZWN0aW9ucy12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7QmJDb2xsZWN0aW9uc1BhZ2VyfSBmcm9tICcuL2NvbXBvbmVudHMvY29sbGVjdGlvbnMtcGFnZXIvY29sbGVjdGlvbnMtcGFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIC8vIENvbXBvbmVudHMuXG4gICAgICAgIEJiQ29sbGVjdGlvbnNWaWV3ZXIsXG4gICAgICAgIEJiQ29sbGVjdGlvbnNQYWdlcixcbiAgICAgICAgLy8gRGlyZWN0aXZlcy5cbiAgICAgICAgQmJDb2xsZWN0aW9uc0RhdGEsXG4gICAgICAgIEJiQ29sbGVjdGlvbnNFbXB0eSxcbiAgICAgICAgQmJDb2xsZWN0aW9uc0Vycm9yLFxuICAgICAgICBCYkNvbGxlY3Rpb25zSW5pdGlhbFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICAvLyBDb21wb25lbnRzLlxuICAgICAgICBCYkNvbGxlY3Rpb25zVmlld2VyLFxuICAgICAgICBCYkNvbGxlY3Rpb25zUGFnZXIsXG4gICAgICAgIC8vIERpcmVjdGl2ZXMuXG4gICAgICAgIEJiQ29sbGVjdGlvbnNEYXRhLFxuICAgICAgICBCYkNvbGxlY3Rpb25zRW1wdHksXG4gICAgICAgIEJiQ29sbGVjdGlvbnNFcnJvcixcbiAgICAgICAgQmJDb2xsZWN0aW9uc0luaXRpYWxcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25zTW9kdWxlIHtcbn1cbiJdfQ==
|