@senior-agronegocio/angular-components 0.0.49
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/agro-angular-components.module.d.ts +9 -0
- package/bundles/senior-agronegocio-angular-components.umd.js +5855 -0
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -0
- package/bundles/senior-agronegocio-angular-components.umd.min.js +17 -0
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -0
- package/common/agro-array-utils.class.d.ts +35 -0
- package/common/agro-cookie-utils.class.d.ts +8 -0
- package/common/agro-date-utils.class.d.ts +88 -0
- package/common/agro-name-utils.class.d.ts +22 -0
- package/common/agro-number-utils.class.d.ts +71 -0
- package/common/agro-object-utils.class.d.ts +161 -0
- package/common/agro-platform-utils.class.d.ts +38 -0
- package/common/agro-regex.constant.d.ts +142 -0
- package/common/agro-string-utils.class.d.ts +194 -0
- package/common/colors.class.d.ts +76 -0
- package/common/index.d.ts +10 -0
- package/components/event-control-board/common/control-status.d.ts +5 -0
- package/components/event-control-board/common/documentsToIssue.d.ts +4 -0
- package/components/event-control-board/common/event-control-constants.d.ts +15 -0
- package/components/event-control-board/common/event-operation.d.ts +11 -0
- package/components/event-control-board/common/event-origin.d.ts +7 -0
- package/components/event-control-board/common/event-status.d.ts +7 -0
- package/components/event-control-board/common/invoice-status.d.ts +12 -0
- package/components/event-control-board/common/invoice-type.d.ts +5 -0
- package/components/event-control-board/common/lookup-error-message.constants.d.ts +3 -0
- package/components/event-control-board/common/operation.d.ts +5 -0
- package/components/event-control-board/common/operationType.d.ts +5 -0
- package/components/event-control-board/common/status-entity.d.ts +4 -0
- package/components/event-control-board/common/ticket-status.d.ts +7 -0
- package/components/event-control-board/event-control-board.component.d.ts +97 -0
- package/components/event-control-board/event-control-board.module.d.ts +2 -0
- package/components/event-control-board/index.d.ts +20 -0
- package/components/event-control-board/service/e001pes/e001pes-dto.d.ts +12 -0
- package/components/event-control-board/service/e001pes/e001pes.d.ts +15 -0
- package/components/event-control-board/service/e001pes/e001pes.module.d.ts +2 -0
- package/components/event-control-board/service/e001pes/e001pes.service.d.ts +13 -0
- package/components/event-control-board/service/e001tns/e001tns-dto.d.ts +14 -0
- package/components/event-control-board/service/e001tns/e001tns.d.ts +19 -0
- package/components/event-control-board/service/e001tns/e001tns.module.d.ts +2 -0
- package/components/event-control-board/service/e001tns/e001tns.service.d.ts +11 -0
- package/components/event-control-board/service/e012fam/e012fam-dto.d.ts +11 -0
- package/components/event-control-board/service/e012fam/e012fam.d.ts +14 -0
- package/components/event-control-board/service/e012fam/e012fam.service.d.ts +11 -0
- package/components/event-control-board/service/e070emp/e070emp-dto.d.ts +10 -0
- package/components/event-control-board/service/e070emp/e070emp.d.ts +13 -0
- package/components/event-control-board/service/e070emp/e070emp.module.d.ts +2 -0
- package/components/event-control-board/service/e070emp/e070emp.service.d.ts +12 -0
- package/components/event-control-board/service/e070fil/e070fil-dto.d.ts +14 -0
- package/components/event-control-board/service/e070fil/e070fil.d.ts +17 -0
- package/components/event-control-board/service/e070fil/e070fil.module.d.ts +2 -0
- package/components/event-control-board/service/e070fil/e070fil.service.d.ts +12 -0
- package/components/event-control-board/service/e075der/e075der-dto.d.ts +15 -0
- package/components/event-control-board/service/e075der/e075der.d.ts +18 -0
- package/components/event-control-board/service/e075der/e075der.module.d.ts +2 -0
- package/components/event-control-board/service/e075der/e075der.service.d.ts +12 -0
- package/components/event-control-board/service/e113saf/e113saf-dto.d.ts +11 -0
- package/components/event-control-board/service/e113saf/e113saf.d.ts +14 -0
- package/components/event-control-board/service/e205dep/deposit-dto.d.ts +11 -0
- package/components/event-control-board/service/e205dep/e205dep-dto.d.ts +15 -0
- package/components/event-control-board/service/e205dep/e205dep.d.ts +16 -0
- package/components/event-control-board/service/e205dep/e205dep.service.d.ts +12 -0
- package/components/event-control-board/service/entity-service.d.ts +72 -0
- package/components/event-control-board/service/event-control/event-control-dto.d.ts +12 -0
- package/components/event-control-board/service/event-control/event-control.d.ts +18 -0
- package/components/event-control-board/service/event-control/event-control.module.d.ts +2 -0
- package/components/event-control-board/service/event-control/event-control.service.d.ts +11 -0
- package/components/event-control-board/service/event-control-board.service.d.ts +11 -0
- package/components/event-control-board/service/event-control-item/event-control-item-dto.d.ts +17 -0
- package/components/event-control-board/service/event-control-item/event-control-item.d.ts +23 -0
- package/components/event-control-board/service/event-control-item/event-control-item.module.d.ts +2 -0
- package/components/event-control-board/service/event-control-item/event-control-item.service.d.ts +15 -0
- package/components/event-control-board/service/external-invoice/external-invoice-dto.d.ts +13 -0
- package/components/event-control-board/service/external-invoice/external-invoice.d.ts +13 -0
- package/components/event-control-board/service/external-invoice/external-invoice.module.d.ts +2 -0
- package/components/event-control-board/service/external-invoice/external-invoice.service.d.ts +11 -0
- package/components/event-control-board/service/invoice/invoice-dto.d.ts +15 -0
- package/components/event-control-board/service/invoice/invoice.d.ts +21 -0
- package/components/event-control-board/service/invoice/invoice.module.d.ts +2 -0
- package/components/event-control-board/service/invoice/invoice.service.d.ts +11 -0
- package/components/event-control-board/service/origination/operationType.d.ts +5 -0
- package/components/event-control-board/service/origination/origination-dto.d.ts +50 -0
- package/components/event-control-board/service/origination/origination.d.ts +51 -0
- package/components/event-control-board/service/origination/origination.module.d.ts +2 -0
- package/components/event-control-board/service/origination/origination.service.d.ts +11 -0
- package/components/event-control-board/service/paginator-storage.service.d.ts +8 -0
- package/components/event-control-board/service/producer-invoice/producer-invoice-dto.d.ts +26 -0
- package/components/event-control-board/service/producer-invoice/producer-invoice.d.ts +27 -0
- package/components/event-control-board/service/producer-invoice/producer-invoice.module.d.ts +2 -0
- package/components/event-control-board/service/producer-invoice/producer-invoice.service.d.ts +11 -0
- package/components/event-control-board/service/rural-estate/rural-estate-dto.d.ts +28 -0
- package/components/event-control-board/service/rural-estate/rural-estate.d.ts +34 -0
- package/components/event-control-board/service/rural-estate/rural-estate.module.d.ts +2 -0
- package/components/event-control-board/service/rural-estate/rural-estate.service.d.ts +11 -0
- package/components/event-control-board/service/ticket/ticket-dto.d.ts +17 -0
- package/components/event-control-board/service/ticket/ticket.d.ts +18 -0
- package/components/event-control-board/service/ticket/ticket.module.d.ts +2 -0
- package/components/event-control-board/service/ticket/ticket.service.d.ts +45 -0
- package/components/event-control-board/shared.module.d.ts +2 -0
- package/components/event-steps/event-steps.component.d.ts +35 -0
- package/components/event-steps/event-steps.module.d.ts +2 -0
- package/components/event-steps/index.d.ts +2 -0
- package/components/index.d.ts +2 -0
- package/enums/agro-entity-status.enum.d.ts +4 -0
- package/enums/agro-numbers.enum.d.ts +1006 -0
- package/enums/agro-string-masks.enum.d.ts +10 -0
- package/enums/date-comparison-type.enum.d.ts +4 -0
- package/enums/http-codes.enum.d.ts +64 -0
- package/enums/index.d.ts +6 -0
- package/enums/number-comparison-type.enum.d.ts +8 -0
- package/esm2015/agro-angular-components.module.js +22 -0
- package/esm2015/common/agro-array-utils.class.js +56 -0
- package/esm2015/common/agro-cookie-utils.class.js +31 -0
- package/esm2015/common/agro-date-utils.class.js +117 -0
- package/esm2015/common/agro-name-utils.class.js +59 -0
- package/esm2015/common/agro-number-utils.class.js +102 -0
- package/esm2015/common/agro-object-utils.class.js +245 -0
- package/esm2015/common/agro-platform-utils.class.js +97 -0
- package/esm2015/common/agro-regex.constant.js +143 -0
- package/esm2015/common/agro-string-utils.class.js +367 -0
- package/esm2015/common/colors.class.js +77 -0
- package/esm2015/common/index.js +11 -0
- package/esm2015/components/event-control-board/common/control-status.js +7 -0
- package/esm2015/components/event-control-board/common/documentsToIssue.js +6 -0
- package/esm2015/components/event-control-board/common/event-control-constants.js +28 -0
- package/esm2015/components/event-control-board/common/event-operation.js +13 -0
- package/esm2015/components/event-control-board/common/event-origin.js +9 -0
- package/esm2015/components/event-control-board/common/event-status.js +9 -0
- package/esm2015/components/event-control-board/common/invoice-status.js +14 -0
- package/esm2015/components/event-control-board/common/invoice-type.js +7 -0
- package/esm2015/components/event-control-board/common/lookup-error-message.constants.js +11 -0
- package/esm2015/components/event-control-board/common/operation.js +7 -0
- package/esm2015/components/event-control-board/common/operationType.js +7 -0
- package/esm2015/components/event-control-board/common/status-entity.js +6 -0
- package/esm2015/components/event-control-board/common/ticket-status.js +9 -0
- package/esm2015/components/event-control-board/event-control-board.component.js +503 -0
- package/esm2015/components/event-control-board/event-control-board.module.js +62 -0
- package/esm2015/components/event-control-board/index.js +21 -0
- package/esm2015/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e001pes/e001pes.js +20 -0
- package/esm2015/components/event-control-board/service/e001pes/e001pes.module.js +24 -0
- package/esm2015/components/event-control-board/service/e001pes/e001pes.service.js +34 -0
- package/esm2015/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e001tns/e001tns.js +42 -0
- package/esm2015/components/event-control-board/service/e001tns/e001tns.module.js +26 -0
- package/esm2015/components/event-control-board/service/e001tns/e001tns.service.js +24 -0
- package/esm2015/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e012fam/e012fam.js +20 -0
- package/esm2015/components/event-control-board/service/e012fam/e012fam.service.js +24 -0
- package/esm2015/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e070emp/e070emp.js +29 -0
- package/esm2015/components/event-control-board/service/e070emp/e070emp.module.js +24 -0
- package/esm2015/components/event-control-board/service/e070emp/e070emp.service.js +31 -0
- package/esm2015/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e070fil/e070fil.js +41 -0
- package/esm2015/components/event-control-board/service/e070fil/e070fil.module.js +24 -0
- package/esm2015/components/event-control-board/service/e070fil/e070fil.service.js +31 -0
- package/esm2015/components/event-control-board/service/e075der/e075der-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e075der/e075der.js +31 -0
- package/esm2015/components/event-control-board/service/e075der/e075der.module.js +24 -0
- package/esm2015/components/event-control-board/service/e075der/e075der.service.js +29 -0
- package/esm2015/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e113saf/e113saf.js +20 -0
- package/esm2015/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
- package/esm2015/components/event-control-board/service/e205dep/e205dep.js +20 -0
- package/esm2015/components/event-control-board/service/e205dep/e205dep.service.js +29 -0
- package/esm2015/components/event-control-board/service/entity-service.js +129 -0
- package/esm2015/components/event-control-board/service/event-control/event-control-dto.js +1 -0
- package/esm2015/components/event-control-board/service/event-control/event-control.js +20 -0
- package/esm2015/components/event-control-board/service/event-control/event-control.module.js +26 -0
- package/esm2015/components/event-control-board/service/event-control/event-control.service.js +24 -0
- package/esm2015/components/event-control-board/service/event-control-board.service.js +33 -0
- package/esm2015/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
- package/esm2015/components/event-control-board/service/event-control-item/event-control-item.js +34 -0
- package/esm2015/components/event-control-board/service/event-control-item/event-control-item.module.js +26 -0
- package/esm2015/components/event-control-board/service/event-control-item/event-control-item.service.js +29 -0
- package/esm2015/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
- package/esm2015/components/event-control-board/service/external-invoice/external-invoice.js +20 -0
- package/esm2015/components/event-control-board/service/external-invoice/external-invoice.module.js +26 -0
- package/esm2015/components/event-control-board/service/external-invoice/external-invoice.service.js +24 -0
- package/esm2015/components/event-control-board/service/invoice/invoice-dto.js +1 -0
- package/esm2015/components/event-control-board/service/invoice/invoice.js +43 -0
- package/esm2015/components/event-control-board/service/invoice/invoice.module.js +26 -0
- package/esm2015/components/event-control-board/service/invoice/invoice.service.js +24 -0
- package/esm2015/components/event-control-board/service/origination/operationType.js +7 -0
- package/esm2015/components/event-control-board/service/origination/origination-dto.js +1 -0
- package/esm2015/components/event-control-board/service/origination/origination.js +59 -0
- package/esm2015/components/event-control-board/service/origination/origination.module.js +24 -0
- package/esm2015/components/event-control-board/service/origination/origination.service.js +24 -0
- package/esm2015/components/event-control-board/service/paginator-storage.service.js +32 -0
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.js +32 -0
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.module.js +26 -0
- package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.service.js +24 -0
- package/esm2015/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
- package/esm2015/components/event-control-board/service/rural-estate/rural-estate.js +78 -0
- package/esm2015/components/event-control-board/service/rural-estate/rural-estate.module.js +26 -0
- package/esm2015/components/event-control-board/service/rural-estate/rural-estate.service.js +24 -0
- package/esm2015/components/event-control-board/service/ticket/ticket-dto.js +1 -0
- package/esm2015/components/event-control-board/service/ticket/ticket.js +39 -0
- package/esm2015/components/event-control-board/service/ticket/ticket.module.js +26 -0
- package/esm2015/components/event-control-board/service/ticket/ticket.service.js +59 -0
- package/esm2015/components/event-control-board/shared.module.js +60 -0
- package/esm2015/components/event-steps/event-steps.component.js +103 -0
- package/esm2015/components/event-steps/event-steps.module.js +16 -0
- package/esm2015/components/event-steps/index.js +3 -0
- package/esm2015/components/index.js +3 -0
- package/esm2015/enums/agro-entity-status.enum.js +6 -0
- package/esm2015/enums/agro-numbers.enum.js +1007 -0
- package/esm2015/enums/agro-string-masks.enum.js +12 -0
- package/esm2015/enums/date-comparison-type.enum.js +6 -0
- package/esm2015/enums/http-codes.enum.js +66 -0
- package/esm2015/enums/index.js +7 -0
- package/esm2015/enums/number-comparison-type.enum.js +10 -0
- package/esm2015/form-validator/agro-form-validator.js +229 -0
- package/esm2015/form-validator/index.js +2 -0
- package/esm2015/lib-translation.module.js +21 -0
- package/esm2015/pipe/index.js +2 -0
- package/esm2015/pipe/lib-translate.pipe.js +24 -0
- package/esm2015/public-api.js +9 -0
- package/esm2015/senior-agronegocio-angular-components.js +6 -0
- package/esm2015/services/i18n/en-US.js +195 -0
- package/esm2015/services/i18n/es-CO.js +195 -0
- package/esm2015/services/i18n/pt-BR.js +195 -0
- package/esm2015/services/index.js +3 -0
- package/esm2015/services/lib-translation.service.js +54 -0
- package/esm2015/services/websocket/async-lock.js +34 -0
- package/esm2015/services/websocket/index.js +6 -0
- package/esm2015/services/websocket/models/index.js +2 -0
- package/esm2015/services/websocket/models/primitive-manager.js +39 -0
- package/esm2015/services/websocket/protocols/index.js +1 -0
- package/esm2015/services/websocket/protocols/on-event-options.js +1 -0
- package/esm2015/services/websocket/protocols/primitive-event.js +1 -0
- package/esm2015/services/websocket/user-information.service.js +34 -0
- package/esm2015/services/websocket/websocket.module.js +21 -0
- package/esm2015/services/websocket/websocket.service.js +339 -0
- package/esm5/agro-angular-components.module.js +26 -0
- package/esm5/common/agro-array-utils.class.js +72 -0
- package/esm5/common/agro-cookie-utils.class.js +38 -0
- package/esm5/common/agro-date-utils.class.js +122 -0
- package/esm5/common/agro-name-utils.class.js +63 -0
- package/esm5/common/agro-number-utils.class.js +109 -0
- package/esm5/common/agro-object-utils.class.js +250 -0
- package/esm5/common/agro-platform-utils.class.js +101 -0
- package/esm5/common/agro-regex.constant.js +143 -0
- package/esm5/common/agro-string-utils.class.js +383 -0
- package/esm5/common/colors.class.js +81 -0
- package/esm5/common/index.js +11 -0
- package/esm5/components/event-control-board/common/control-status.js +7 -0
- package/esm5/components/event-control-board/common/documentsToIssue.js +6 -0
- package/esm5/components/event-control-board/common/event-control-constants.js +28 -0
- package/esm5/components/event-control-board/common/event-operation.js +13 -0
- package/esm5/components/event-control-board/common/event-origin.js +9 -0
- package/esm5/components/event-control-board/common/event-status.js +9 -0
- package/esm5/components/event-control-board/common/invoice-status.js +14 -0
- package/esm5/components/event-control-board/common/invoice-type.js +7 -0
- package/esm5/components/event-control-board/common/lookup-error-message.constants.js +11 -0
- package/esm5/components/event-control-board/common/operation.js +7 -0
- package/esm5/components/event-control-board/common/operationType.js +7 -0
- package/esm5/components/event-control-board/common/status-entity.js +6 -0
- package/esm5/components/event-control-board/common/ticket-status.js +9 -0
- package/esm5/components/event-control-board/event-control-board.component.js +528 -0
- package/esm5/components/event-control-board/event-control-board.module.js +65 -0
- package/esm5/components/event-control-board/index.js +21 -0
- package/esm5/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
- package/esm5/components/event-control-board/service/e001pes/e001pes.js +25 -0
- package/esm5/components/event-control-board/service/e001pes/e001pes.module.js +27 -0
- package/esm5/components/event-control-board/service/e001pes/e001pes.service.js +37 -0
- package/esm5/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
- package/esm5/components/event-control-board/service/e001tns/e001tns.js +45 -0
- package/esm5/components/event-control-board/service/e001tns/e001tns.module.js +29 -0
- package/esm5/components/event-control-board/service/e001tns/e001tns.service.js +27 -0
- package/esm5/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
- package/esm5/components/event-control-board/service/e012fam/e012fam.js +25 -0
- package/esm5/components/event-control-board/service/e012fam/e012fam.service.js +27 -0
- package/esm5/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
- package/esm5/components/event-control-board/service/e070emp/e070emp.js +34 -0
- package/esm5/components/event-control-board/service/e070emp/e070emp.module.js +27 -0
- package/esm5/components/event-control-board/service/e070emp/e070emp.service.js +34 -0
- package/esm5/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
- package/esm5/components/event-control-board/service/e070fil/e070fil.js +48 -0
- package/esm5/components/event-control-board/service/e070fil/e070fil.module.js +27 -0
- package/esm5/components/event-control-board/service/e070fil/e070fil.service.js +34 -0
- package/esm5/components/event-control-board/service/e075der/e075der-dto.js +1 -0
- package/esm5/components/event-control-board/service/e075der/e075der.js +36 -0
- package/esm5/components/event-control-board/service/e075der/e075der.module.js +27 -0
- package/esm5/components/event-control-board/service/e075der/e075der.service.js +32 -0
- package/esm5/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
- package/esm5/components/event-control-board/service/e113saf/e113saf.js +25 -0
- package/esm5/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
- package/esm5/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
- package/esm5/components/event-control-board/service/e205dep/e205dep.js +25 -0
- package/esm5/components/event-control-board/service/e205dep/e205dep.service.js +32 -0
- package/esm5/components/event-control-board/service/entity-service.js +140 -0
- package/esm5/components/event-control-board/service/event-control/event-control-dto.js +1 -0
- package/esm5/components/event-control-board/service/event-control/event-control.js +25 -0
- package/esm5/components/event-control-board/service/event-control/event-control.module.js +29 -0
- package/esm5/components/event-control-board/service/event-control/event-control.service.js +27 -0
- package/esm5/components/event-control-board/service/event-control-board.service.js +34 -0
- package/esm5/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
- package/esm5/components/event-control-board/service/event-control-item/event-control-item.js +39 -0
- package/esm5/components/event-control-board/service/event-control-item/event-control-item.module.js +29 -0
- package/esm5/components/event-control-board/service/event-control-item/event-control-item.service.js +32 -0
- package/esm5/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
- package/esm5/components/event-control-board/service/external-invoice/external-invoice.js +25 -0
- package/esm5/components/event-control-board/service/external-invoice/external-invoice.module.js +29 -0
- package/esm5/components/event-control-board/service/external-invoice/external-invoice.service.js +27 -0
- package/esm5/components/event-control-board/service/invoice/invoice-dto.js +1 -0
- package/esm5/components/event-control-board/service/invoice/invoice.js +48 -0
- package/esm5/components/event-control-board/service/invoice/invoice.module.js +29 -0
- package/esm5/components/event-control-board/service/invoice/invoice.service.js +27 -0
- package/esm5/components/event-control-board/service/origination/operationType.js +7 -0
- package/esm5/components/event-control-board/service/origination/origination-dto.js +1 -0
- package/esm5/components/event-control-board/service/origination/origination.js +62 -0
- package/esm5/components/event-control-board/service/origination/origination.module.js +27 -0
- package/esm5/components/event-control-board/service/origination/origination.service.js +27 -0
- package/esm5/components/event-control-board/service/paginator-storage.service.js +71 -0
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.js +37 -0
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.module.js +29 -0
- package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.service.js +27 -0
- package/esm5/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
- package/esm5/components/event-control-board/service/rural-estate/rural-estate.js +83 -0
- package/esm5/components/event-control-board/service/rural-estate/rural-estate.module.js +29 -0
- package/esm5/components/event-control-board/service/rural-estate/rural-estate.service.js +27 -0
- package/esm5/components/event-control-board/service/ticket/ticket-dto.js +1 -0
- package/esm5/components/event-control-board/service/ticket/ticket.js +44 -0
- package/esm5/components/event-control-board/service/ticket/ticket.module.js +29 -0
- package/esm5/components/event-control-board/service/ticket/ticket.service.js +62 -0
- package/esm5/components/event-control-board/shared.module.js +63 -0
- package/esm5/components/event-steps/event-steps.component.js +113 -0
- package/esm5/components/event-steps/event-steps.module.js +19 -0
- package/esm5/components/event-steps/index.js +3 -0
- package/esm5/components/index.js +3 -0
- package/esm5/enums/agro-entity-status.enum.js +6 -0
- package/esm5/enums/agro-numbers.enum.js +1007 -0
- package/esm5/enums/agro-string-masks.enum.js +12 -0
- package/esm5/enums/date-comparison-type.enum.js +6 -0
- package/esm5/enums/http-codes.enum.js +66 -0
- package/esm5/enums/index.js +7 -0
- package/esm5/enums/number-comparison-type.enum.js +10 -0
- package/esm5/form-validator/agro-form-validator.js +239 -0
- package/esm5/form-validator/index.js +2 -0
- package/esm5/lib-translation.module.js +24 -0
- package/esm5/pipe/index.js +2 -0
- package/esm5/pipe/lib-translate.pipe.js +29 -0
- package/esm5/public-api.js +9 -0
- package/esm5/senior-agronegocio-angular-components.js +6 -0
- package/esm5/services/i18n/en-US.js +195 -0
- package/esm5/services/i18n/es-CO.js +195 -0
- package/esm5/services/i18n/pt-BR.js +195 -0
- package/esm5/services/index.js +3 -0
- package/esm5/services/lib-translation.service.js +56 -0
- package/esm5/services/websocket/async-lock.js +43 -0
- package/esm5/services/websocket/index.js +6 -0
- package/esm5/services/websocket/models/index.js +2 -0
- package/esm5/services/websocket/models/primitive-manager.js +58 -0
- package/esm5/services/websocket/protocols/index.js +1 -0
- package/esm5/services/websocket/protocols/on-event-options.js +1 -0
- package/esm5/services/websocket/protocols/primitive-event.js +1 -0
- package/esm5/services/websocket/user-information.service.js +38 -0
- package/esm5/services/websocket/websocket.module.js +24 -0
- package/esm5/services/websocket/websocket.service.js +411 -0
- package/fesm2015/senior-agronegocio-angular-components.js +5279 -0
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -0
- package/fesm5/senior-agronegocio-angular-components.js +5638 -0
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -0
- package/form-validator/agro-form-validator.d.ts +103 -0
- package/form-validator/index.d.ts +1 -0
- package/lib-translation.module.d.ts +2 -0
- package/package.json +82 -0
- package/pipe/index.d.ts +1 -0
- package/pipe/lib-translate.pipe.d.ts +7 -0
- package/public-api.d.ts +8 -0
- package/senior-agronegocio-angular-components.d.ts +5 -0
- package/senior-agronegocio-angular-components.metadata.json +1 -0
- package/services/i18n/en-US.d.ts +194 -0
- package/services/i18n/es-CO.d.ts +194 -0
- package/services/i18n/pt-BR.d.ts +194 -0
- package/services/index.d.ts +2 -0
- package/services/lib-translation.service.d.ts +15 -0
- package/services/websocket/async-lock.d.ts +6 -0
- package/services/websocket/index.d.ts +6 -0
- package/services/websocket/models/index.d.ts +1 -0
- package/services/websocket/models/primitive-manager.d.ts +19 -0
- package/services/websocket/protocols/index.d.ts +2 -0
- package/services/websocket/protocols/on-event-options.d.ts +8 -0
- package/services/websocket/protocols/primitive-event.d.ts +10 -0
- package/services/websocket/user-information.service.d.ts +7 -0
- package/services/websocket/websocket.module.d.ts +2 -0
- package/services/websocket/websocket.service.d.ts +100 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { filter, finalize, map, switchMap, take } from 'rxjs/operators';
|
|
4
|
+
import { Client, FrameImpl } from '@stomp/stompjs';
|
|
5
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./user-information.service";
|
|
8
|
+
const SockJS = require('sockjs-client');
|
|
9
|
+
import { AsyncLock } from './async-lock';
|
|
10
|
+
import { UserInformationService } from './user-information.service';
|
|
11
|
+
import { PrimitiveManager } from './models';
|
|
12
|
+
const RECONNECT_INTERVAL_MILLISECONDS = 3000;
|
|
13
|
+
const CONNECTION_TIMEOUT_MILLISECONDS = 5000;
|
|
14
|
+
let WebsocketService = class WebsocketService {
|
|
15
|
+
constructor(userInformationService) {
|
|
16
|
+
this.userInformationService = userInformationService;
|
|
17
|
+
this.connected$ = new BehaviorSubject(false);
|
|
18
|
+
this.disconnected$ = new Subject();
|
|
19
|
+
this.reconnected$ = new Subject();
|
|
20
|
+
this.error$ = new Subject();
|
|
21
|
+
this.subscribed$ = new Subject();
|
|
22
|
+
this.primitiveManagers = new Map();
|
|
23
|
+
this.connectionLock = new AsyncLock();
|
|
24
|
+
this.debugEnable = false;
|
|
25
|
+
this.lostConnection = false;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Enables stompjs debug logs and additional info
|
|
29
|
+
*/
|
|
30
|
+
enableDebugLogs() {
|
|
31
|
+
this.debugEnable = true;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Manually starts the connection
|
|
35
|
+
*/
|
|
36
|
+
connect() {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
yield this.connectionLock.acquire();
|
|
39
|
+
try {
|
|
40
|
+
if (this.isConnected() || this.isConnecting()) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.lostConnection = false;
|
|
44
|
+
const stompConfig = {
|
|
45
|
+
webSocketFactory: () => {
|
|
46
|
+
return new SockJS(this.getSubscriptionUrl(), null, {
|
|
47
|
+
timeout: CONNECTION_TIMEOUT_MILLISECONDS
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
reconnectDelay: RECONNECT_INTERVAL_MILLISECONDS,
|
|
51
|
+
debug: this.debug.bind(this),
|
|
52
|
+
onConnect: this.handleOnConnected.bind(this),
|
|
53
|
+
onDisconnect: this.handleOnDisconnect.bind(this),
|
|
54
|
+
onWebSocketClose: this.handleOnWebSocketClose.bind(this),
|
|
55
|
+
onStompError: this.handleOnStompError.bind(this),
|
|
56
|
+
onWebSocketError: this.handleOnWebSocketError.bind(this)
|
|
57
|
+
};
|
|
58
|
+
this.debug('Connecting the Webscoket');
|
|
59
|
+
this.stompClient = new Client(stompConfig);
|
|
60
|
+
this.stompClient.activate();
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
yield this.connectionLock.release();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Manually disconnect the websocket. The reconnect loop will be stopped.
|
|
69
|
+
*/
|
|
70
|
+
disconnect() {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
if (!this.isConnected()) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
yield this.connectionLock.acquire();
|
|
76
|
+
try {
|
|
77
|
+
for (const primitiveManager of this.primitiveManagers.values()) {
|
|
78
|
+
primitiveManager.unsubscribe();
|
|
79
|
+
}
|
|
80
|
+
this.primitiveManagers.clear();
|
|
81
|
+
this.connected$.next(false);
|
|
82
|
+
if (this.stompClient) {
|
|
83
|
+
yield this.stompClient.deactivate();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
yield this.connectionLock.release();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if the websocket is connected
|
|
93
|
+
* @return `boolean` representing if the websocket is connected
|
|
94
|
+
*/
|
|
95
|
+
isConnected() {
|
|
96
|
+
if (!this.stompClient) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return this.stompClient.connected;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if the websocket is tring to connect
|
|
103
|
+
* @return `boolean` representing if the websocket status
|
|
104
|
+
*/
|
|
105
|
+
isConnecting() {
|
|
106
|
+
if (!this.stompClient) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return !this.stompClient.connected && this.stompClient.active;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Event responsable to emit an event when the connection is established.
|
|
113
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
114
|
+
* @return `Observable<boolean>`
|
|
115
|
+
*/
|
|
116
|
+
onConnect() {
|
|
117
|
+
return this.connected$.asObservable()
|
|
118
|
+
.pipe(filter(p => p === true));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Event responsable to emit an event when the connection is closed.
|
|
122
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
123
|
+
* @return `Observable<void>`
|
|
124
|
+
*/
|
|
125
|
+
onDisconnect() {
|
|
126
|
+
return this.disconnected$.asObservable();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Event responsable to emit an event when the connection is reestablished.
|
|
130
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
131
|
+
* @return `Observable<void>`
|
|
132
|
+
*/
|
|
133
|
+
onReconnect() {
|
|
134
|
+
return this.reconnected$.asObservable();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Event responsable to emit an event when an error ocurred.
|
|
138
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
139
|
+
* @return `Observable<FrameImpl>`
|
|
140
|
+
*/
|
|
141
|
+
onError() {
|
|
142
|
+
return this.error$.asObservable();
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Event responsible to emit an event when a primitive is called.
|
|
146
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
147
|
+
* @typeParam `<T>` Object type that will be used in the observable for the `data` property.
|
|
148
|
+
* @param {OnEventOptions} options Configurations for the event.
|
|
149
|
+
* @return `Observable<PrimitiveEvent<T>>` Observable that emits an event when the service calls the primitive.
|
|
150
|
+
*/
|
|
151
|
+
onEvent(options) {
|
|
152
|
+
const { domain, service, primitive } = options;
|
|
153
|
+
const key = this.buildPrimitiveManagerKey(domain, service, primitive);
|
|
154
|
+
if (this.primitiveManagers.has(key)) {
|
|
155
|
+
return this.primitiveManagers.get(key).getEventObservable();
|
|
156
|
+
}
|
|
157
|
+
const primitiveManager = new PrimitiveManager(domain, service, primitive);
|
|
158
|
+
this.primitiveManagers.set(key, primitiveManager);
|
|
159
|
+
this.connect().then(() => {
|
|
160
|
+
this.onConnect()
|
|
161
|
+
.pipe(take(1))
|
|
162
|
+
.subscribe(() => {
|
|
163
|
+
this.createStompSubscriptions(primitiveManager);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
return primitiveManager
|
|
167
|
+
.getEventObservable()
|
|
168
|
+
.pipe(finalize(() => this.unsubscribePrimitiveOnFinalize(primitiveManager)));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Event responsible to emit an event when a subscription is created for the primitive.
|
|
172
|
+
* Do not forget to unsubscribe the observable when you don't need it anymore.
|
|
173
|
+
* @param {OnEventOptions} options Configurations for the event.
|
|
174
|
+
* Observable responsável por emitir uma notificação após o subscribe do evento pela primeira vez.
|
|
175
|
+
* @return `Observable<boolean>` Observable that emits an event when the service calls the primitive.
|
|
176
|
+
*/
|
|
177
|
+
onSubscribe(options) {
|
|
178
|
+
const { domain, service, primitive } = options;
|
|
179
|
+
const key = this.buildPrimitiveManagerKey(domain, service, primitive);
|
|
180
|
+
return this.onConnect().pipe(take(1), switchMap(() => {
|
|
181
|
+
if (this.primitiveManagers.has(key)) {
|
|
182
|
+
return this.primitiveManagers
|
|
183
|
+
.get(key)
|
|
184
|
+
.getSubscriptionObservable()
|
|
185
|
+
.pipe(take(1));
|
|
186
|
+
}
|
|
187
|
+
return this.subscribed$.asObservable().pipe(filter((primitiveManager) => {
|
|
188
|
+
return this.buildPrimitiveManagerKey(primitiveManager.domain, primitiveManager.service, primitiveManager.primitive) === key;
|
|
189
|
+
}), map(() => true), take(1));
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
debug(message, ...optionalParams) {
|
|
193
|
+
if (!this.debugEnable) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
console.log('WS debug: ' + message, ...optionalParams);
|
|
197
|
+
}
|
|
198
|
+
info(message) {
|
|
199
|
+
console.info('WS info: ' + message);
|
|
200
|
+
}
|
|
201
|
+
handleOnConnected() {
|
|
202
|
+
this.info('Webscoket connected');
|
|
203
|
+
this.connected$.next(true);
|
|
204
|
+
if (this.lostConnection) {
|
|
205
|
+
this.info('Webscoket reconnected, recriating subscriptions');
|
|
206
|
+
this.handleReconnection();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
handleOnDisconnect() {
|
|
210
|
+
this.info('Webscoket disconnected');
|
|
211
|
+
this.connected$.next(false);
|
|
212
|
+
this.disconnected$.next();
|
|
213
|
+
}
|
|
214
|
+
handleOnWebSocketClose(data) {
|
|
215
|
+
var _a, _b;
|
|
216
|
+
if (((_a = data === null || data === void 0 ? void 0 : data.reason) === null || _a === void 0 ? void 0 : _a.toLowerCase().indexOf("go away")) !== -1) {
|
|
217
|
+
this.lostConnection = true;
|
|
218
|
+
this.handleError('AuthenticationError', new FrameImpl({
|
|
219
|
+
command: data.type,
|
|
220
|
+
headers: {
|
|
221
|
+
message: data.reason
|
|
222
|
+
}
|
|
223
|
+
}));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (((_b = data === null || data === void 0 ? void 0 : data.reason) === null || _b === void 0 ? void 0 : _b.toLowerCase().indexOf("cannot connect to server")) !== -1) {
|
|
227
|
+
this.lostConnection = true;
|
|
228
|
+
this.handleError('ConnectionError', new FrameImpl({
|
|
229
|
+
command: data.type,
|
|
230
|
+
headers: {
|
|
231
|
+
message: data.reason
|
|
232
|
+
}
|
|
233
|
+
}));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (data.wasClean) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.lostConnection = true;
|
|
240
|
+
}
|
|
241
|
+
handleOnStompError(data) {
|
|
242
|
+
this.handleError('StompError', data);
|
|
243
|
+
if (this.isAuthenticationError(data)) {
|
|
244
|
+
this.info('Authentication error, recriating subscriptions');
|
|
245
|
+
this.handleReconnection();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
isAuthenticationError(data) {
|
|
249
|
+
var _a;
|
|
250
|
+
const errorMessage = (_a = data === null || data === void 0 ? void 0 : data.headers) === null || _a === void 0 ? void 0 : _a.message;
|
|
251
|
+
if (!errorMessage) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
return errorMessage.toLowerCase().indexOf('forbiddenexception') !== -1;
|
|
255
|
+
}
|
|
256
|
+
handleOnWebSocketError(data) {
|
|
257
|
+
this.handleError('WebSocketError', data);
|
|
258
|
+
}
|
|
259
|
+
handleError(origin, data) {
|
|
260
|
+
console.error(origin, data);
|
|
261
|
+
this.error$.next(data);
|
|
262
|
+
}
|
|
263
|
+
handleReconnection() {
|
|
264
|
+
this.lostConnection = false;
|
|
265
|
+
this.reconnectPrimitives();
|
|
266
|
+
this.reconnected$.next();
|
|
267
|
+
}
|
|
268
|
+
reconnectPrimitives() {
|
|
269
|
+
for (const primitiveManager of this.primitiveManagers.values()) {
|
|
270
|
+
this.createStompSubscriptions(primitiveManager);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
buildSubscriptionUrlWithToken(domain, service, primitive) {
|
|
274
|
+
const authToken = this.userInformationService.getAuthToken();
|
|
275
|
+
const tenant = this.userInformationService.getTenantDomain();
|
|
276
|
+
return `/topic/${tenant}/${authToken}/${domain}/${service}/${primitive}`;
|
|
277
|
+
}
|
|
278
|
+
getSubscriptionUrlWithoutToken(domain, service, primitive) {
|
|
279
|
+
const tenant = this.userInformationService.getTenantDomain();
|
|
280
|
+
return `/topic/${tenant}/${domain}/${service}/${primitive}`;
|
|
281
|
+
}
|
|
282
|
+
buildPrimitiveManagerKey(domain, service, primitive) {
|
|
283
|
+
return `${domain}/${service}/${primitive}`;
|
|
284
|
+
}
|
|
285
|
+
unsubscribePrimitiveOnFinalize(primitiveManager) {
|
|
286
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
+
if (primitiveManager.hasObservers()) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
primitiveManager.unsubscribe();
|
|
291
|
+
const key = this.buildPrimitiveManagerKey(primitiveManager.domain, primitiveManager.service, primitiveManager.primitive);
|
|
292
|
+
this.primitiveManagers.delete(key);
|
|
293
|
+
yield this.disconnectIfNoMoreObservables();
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
disconnectIfNoMoreObservables() {
|
|
297
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
298
|
+
if (this.getObserversCount() === 0) {
|
|
299
|
+
this.debug('Manually disconnecting because there are no more observers');
|
|
300
|
+
yield this.disconnect();
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
getObserversCount() {
|
|
305
|
+
let observersCount = 0;
|
|
306
|
+
this.primitiveManagers.forEach(primitiveManager => {
|
|
307
|
+
observersCount += primitiveManager.getObserversCount();
|
|
308
|
+
});
|
|
309
|
+
return observersCount;
|
|
310
|
+
}
|
|
311
|
+
createStompSubscription(destination, primitiveManager) {
|
|
312
|
+
return this.stompClient.subscribe(destination, (message) => {
|
|
313
|
+
const event = JSON.parse(message.body || '{}');
|
|
314
|
+
primitiveManager.fireEvent(event);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
createStompSubscriptions(primitiveManager) {
|
|
318
|
+
const subscriptionUrlWithToken = this.buildSubscriptionUrlWithToken(primitiveManager.domain, primitiveManager.service, primitiveManager.primitive);
|
|
319
|
+
const subscriptionUrlWithoutToken = this.getSubscriptionUrlWithoutToken(primitiveManager.domain, primitiveManager.service, primitiveManager.primitive);
|
|
320
|
+
const stompSubscriptionWithToken = this.createStompSubscription(subscriptionUrlWithToken, primitiveManager);
|
|
321
|
+
const stompSubscriptionWithoutToken = this.createStompSubscription(subscriptionUrlWithoutToken, primitiveManager);
|
|
322
|
+
primitiveManager.subscribe(stompSubscriptionWithToken, stompSubscriptionWithoutToken);
|
|
323
|
+
this.subscribed$.next(primitiveManager);
|
|
324
|
+
}
|
|
325
|
+
getSubscriptionUrl() {
|
|
326
|
+
return `${this.userInformationService.getWebSocketUrl()}/subscription`;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
WebsocketService.ctorParameters = () => [
|
|
330
|
+
{ type: UserInformationService }
|
|
331
|
+
];
|
|
332
|
+
WebsocketService.ɵprov = i0.ɵɵdefineInjectable({ factory: function WebsocketService_Factory() { return new WebsocketService(i0.ɵɵinject(i1.UserInformationService)); }, token: WebsocketService, providedIn: "root" });
|
|
333
|
+
WebsocketService = __decorate([
|
|
334
|
+
Injectable({
|
|
335
|
+
providedIn: 'root'
|
|
336
|
+
})
|
|
337
|
+
], WebsocketService);
|
|
338
|
+
export { WebsocketService };
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3dlYnNvY2tldC93ZWJzb2NrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFrQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFDNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzVDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBSzdDLElBQWEsZ0JBQWdCLEdBQTdCLE1BQWEsZ0JBQWdCO0lBY3pCLFlBQTZCLHNCQUE4QztRQUE5QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBYjFELGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO1FBQ2xD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QkFBdUIsQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVHLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbEgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLDBCQUEwQixFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQztJQUMzRSxDQUFDO0NBQ0osQ0FBQTs7WUF6WHdELHNCQUFzQjs7O0FBZGxFLGdCQUFnQjtJQUg1QixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csZ0JBQWdCLENBdVk1QjtTQXZZWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGllbnQsIEZyYW1lSW1wbCwgU3RvbXBDb25maWcsIFN0b21wU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHN0b21wL3N0b21wanMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuY29uc3QgU29ja0pTID0gcmVxdWlyZSgnc29ja2pzLWNsaWVudCcpO1xyXG5pbXBvcnQgeyBBc3luY0xvY2sgfSBmcm9tICcuL2FzeW5jLWxvY2snO1xyXG5pbXBvcnQgeyBVc2VySW5mb3JtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91c2VyLWluZm9ybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcmltaXRpdmVNYW5hZ2VyIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBPbkV2ZW50T3B0aW9ucywgUHJpbWl0aXZlRXZlbnQgfSBmcm9tICcuL3Byb3RvY29scyc7XHJcblxyXG5jb25zdCBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTID0gMzAwMDtcclxuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpc2Nvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvciQgPSBuZXcgU3ViamVjdDxGcmFtZUltcGw+KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZWQkID0gbmV3IFN1YmplY3Q8UHJpbWl0aXZlTWFuYWdlcjxhbnk+PigpO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbWl0aXZlTWFuYWdlcnM6IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgUHJpbWl0aXZlTWFuYWdlcjxhbnk+PigpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uTG9jayA9IG5ldyBBc3luY0xvY2soKTtcclxuXHJcbiAgICBwcml2YXRlIHN0b21wQ2xpZW50OiBDbGllbnQ7XHJcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGxvc3RDb25uZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB1c2VySW5mb3JtYXRpb25TZXJ2aWNlOiBVc2VySW5mb3JtYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIHN0b21wanMgZGVidWcgbG9ncyBhbmQgYWRkaXRpb25hbCBpbmZvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0VuYWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW51YWxseSBzdGFydHMgdGhlIGNvbm5lY3Rpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uTG9jay5hY3F1aXJlKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkgfHwgdGhpcy5pc0Nvbm5lY3RpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b21wQ29uZmlnOiBTdG9tcENvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIHdlYlNvY2tldEZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25VcmwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZWNvbm5lY3REZWxheTogUkVDT05ORUNUX0lOVEVSVkFMX01JTExJU0VDT05EUyxcclxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvbkNvbm5lY3Q6IHRoaXMuaGFuZGxlT25Db25uZWN0ZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uRGlzY29ubmVjdDogdGhpcy5oYW5kbGVPbkRpc2Nvbm5lY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25TdG9tcEVycm9yOiB0aGlzLmhhbmRsZU9uU3RvbXBFcnJvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25XZWJTb2NrZXRFcnJvcjogdGhpcy5oYW5kbGVPbldlYlNvY2tldEVycm9yLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdG9tcENsaWVudCA9IG5ldyBDbGllbnQoc3RvbXBDb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uTG9jay5yZWxlYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFudWFsbHkgZGlzY29ubmVjdCB0aGUgd2Vic29ja2V0LiBUaGUgcmVjb25uZWN0IGxvb3Agd2lsbCBiZSBzdG9wcGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZU1hbmFnZXIgb2YgdGhpcy5wcmltaXRpdmVNYW5hZ2Vycy52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgY29ubmVjdGVkXHJcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9tcENsaWVudC5jb25uZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiB0aGUgd2Vic29ja2V0IGlzIHRyaW5nIHRvIGNvbm5lY3RcclxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNDb25uZWN0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkICYmIHRoaXMuc3RvbXBDbGllbnQuYWN0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLlxyXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPGJvb2xlYW4+YFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHAgPT4gcCA9PT0gdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRGlzY29ubmVjdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXNjb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEByZXR1cm4gYE9ic2VydmFibGU8dm9pZD5gXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblJlY29ubmVjdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWNvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cclxuICAgICAqIERvIG5vdCBmb3JnZXQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxGcmFtZUltcGw+YFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FcnJvcigpOiBPYnNlcnZhYmxlPEZyYW1lSW1wbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEB0eXBlUGFyYW0gYDxUPmAgT2JqZWN0IHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIG9ic2VydmFibGUgZm9yIHRoZSBgZGF0YWAgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXHJcbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XHJcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcclxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3QoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb25zKHByaW1pdGl2ZU1hbmFnZXIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXHJcbiAgICAgICAgICAgIC5nZXRFdmVudE9ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShwcmltaXRpdmVNYW5hZ2VyKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgcmVzcG9uc2libGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIGEgc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgZm9yIHRoZSBwcmltaXRpdmUuXHJcbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cclxuICAgICAqIEBwYXJhbSB7T25FdmVudE9wdGlvbnN9IG9wdGlvbnMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBldmVudC5cclxuICAgICAqIE9ic2VydmFibGUgcmVzcG9uc8OhdmVsIHBvciBlbWl0aXIgdW1hIG5vdGlmaWNhw6fDo28gYXDDs3MgbyBzdWJzY3JpYmUgZG8gZXZlbnRvIHBlbGEgcHJpbWVpcmEgdmV6LlxyXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3Vic2NyaWJlKG9wdGlvbnM6IE9uRXZlbnRPcHRpb25zKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVNYW5hZ2Vycy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3Vic2NyaXB0aW9uT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA9PT0ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdXUyBkZWJ1ZzogJyArIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluZm8obWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKCdXUyBpbmZvOiAnICsgbWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPbkNvbm5lY3RlZCgpIHtcclxuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgcmVjb25uZWN0ZWQsIHJlY3JpYXRpbmcgc3Vic2NyaXB0aW9ucycpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlY29ubmVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpIHtcclxuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBkaXNjb25uZWN0ZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGVkJC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPbldlYlNvY2tldENsb3NlKGRhdGE6IENsb3NlRXZlbnQpIHtcclxuICAgICAgICBpZiAoZGF0YT8ucmVhc29uPy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJnbyBhd2F5XCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignQXV0aGVudGljYXRpb25FcnJvcicsIG5ldyBGcmFtZUltcGwoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGF0YS5yZWFzb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YT8ucmVhc29uPy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJjYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXJcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdDb25uZWN0aW9uRXJyb3InLCBuZXcgRnJhbWVJbXBsKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEud2FzQ2xlYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVPblN0b21wRXJyb3IoZGF0YTogRnJhbWVJbXBsKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignU3RvbXBFcnJvcicsIGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0aW9uRXJyb3IoZGF0YSkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmZvKCdBdXRoZW50aWNhdGlvbiBlcnJvciwgcmVjcmlhdGluZyBzdWJzY3JpcHRpb25zJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGE6IEZyYW1lSW1wbCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGRhdGE/LmhlYWRlcnM/Lm1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKCFlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZvcmJpZGRlbmV4Y2VwdGlvbicpICE9PSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU9uV2ViU29ja2V0RXJyb3IoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignV2ViU29ja2V0RXJyb3InLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKG9yaWdpbjogc3RyaW5nLCBkYXRhOiBGcmFtZUltcGwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKG9yaWdpbiwgZGF0YSk7XHJcbiAgICAgICAgdGhpcy5lcnJvciQubmV4dChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVJlY29ubmVjdGlvbigpIHtcclxuICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RQcmltaXRpdmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RlZCQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjb25uZWN0UHJpbWl0aXZlcygpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHByaW1pdGl2ZU1hbmFnZXIgb2YgdGhpcy5wcmltaXRpdmVNYW5hZ2Vycy52YWx1ZXMoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9ucyhwcmltaXRpdmVNYW5hZ2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihkb21haW46IHN0cmluZywgc2VydmljZTogc3RyaW5nLCBwcmltaXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgICAgIGNvbnN0IHRlbmFudCA9IHRoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRUZW5hbnREb21haW4oKTtcclxuICAgICAgICByZXR1cm4gYC90b3BpYy8ke3RlbmFudH0vJHthdXRoVG9rZW59LyR7ZG9tYWlufS8ke3NlcnZpY2V9LyR7cHJpbWl0aXZlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oZG9tYWluOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZywgcHJpbWl0aXZlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHRlbmFudCA9IHRoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRUZW5hbnREb21haW4oKTtcclxuICAgICAgICByZXR1cm4gYC90b3BpYy8ke3RlbmFudH0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShkb21haW46IHN0cmluZywgc2VydmljZTogc3RyaW5nLCBwcmltaXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdW5zdWJzY3JpYmVQcmltaXRpdmVPbkZpbmFsaXplKHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8YW55Pikge1xyXG4gICAgICAgIGlmIChwcmltaXRpdmVNYW5hZ2VyLmhhc09ic2VydmVycygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkocHJpbWl0aXZlTWFuYWdlci5kb21haW4sIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSwgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmUpO1xyXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZGVsZXRlKGtleSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldE9ic2VydmVyc0NvdW50KCkgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnTWFudWFsbHkgZGlzY29ubmVjdGluZyBiZWNhdXNlIHRoZXJlIGFyZSBubyBtb3JlIG9ic2VydmVycycpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYnNlcnZlcnNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBvYnNlcnZlcnNDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZm9yRWFjaChwcmltaXRpdmVNYW5hZ2VyID0+IHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXJzQ291bnQgKz0gcHJpbWl0aXZlTWFuYWdlci5nZXRPYnNlcnZlcnNDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbjxUPihkZXN0aW5hdGlvbjogc3RyaW5nLCBwcmltaXRpdmVNYW5hZ2VyOiBQcmltaXRpdmVNYW5hZ2VyPFQ+KTogU3RvbXBTdWJzY3JpcHRpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b21wQ2xpZW50LnN1YnNjcmliZShkZXN0aW5hdGlvbiwgKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudCA9IEpTT04ucGFyc2UobWVzc2FnZS5ib2R5IHx8ICd7fScpO1xyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmZpcmVFdmVudChldmVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnM8VD4ocHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvblVybFdpdGhUb2tlbiA9IHRoaXMuYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxyXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnNlcnZpY2UsXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4gPSB0aGlzLmdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5kb21haW4sXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcclxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuLCBwcmltaXRpdmVNYW5hZ2VyKTtcclxuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuLCBwcmltaXRpdmVNYW5hZ2VyKTtcclxuICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnN1YnNjcmliZShzdG9tcFN1YnNjcmlwdGlvbldpdGhUb2tlbiwgc3RvbXBTdWJzY3JpcHRpb25XaXRob3V0VG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlZCQubmV4dChwcmltaXRpdmVNYW5hZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybCgpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldFdlYlNvY2tldFVybCgpfS9zdWJzY3JpcHRpb25gO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { NgModule, InjectionToken } from "@angular/core";
|
|
3
|
+
export var HostProjectConfigsInjectionToken = new InjectionToken("hostProjectConfigs");
|
|
4
|
+
var AgroAngularComponentsModule = /** @class */ (function () {
|
|
5
|
+
function AgroAngularComponentsModule() {
|
|
6
|
+
}
|
|
7
|
+
AgroAngularComponentsModule_1 = AgroAngularComponentsModule;
|
|
8
|
+
AgroAngularComponentsModule.forRoot = function (config) {
|
|
9
|
+
return {
|
|
10
|
+
ngModule: AgroAngularComponentsModule_1,
|
|
11
|
+
providers: [
|
|
12
|
+
{
|
|
13
|
+
provide: HostProjectConfigsInjectionToken,
|
|
14
|
+
useValue: config
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
var AgroAngularComponentsModule_1;
|
|
20
|
+
AgroAngularComponentsModule = AgroAngularComponentsModule_1 = __decorate([
|
|
21
|
+
NgModule({})
|
|
22
|
+
], AgroAngularComponentsModule);
|
|
23
|
+
return AgroAngularComponentsModule;
|
|
24
|
+
}());
|
|
25
|
+
export { AgroAngularComponentsModule };
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1hZ3JvbmVnb2Npby9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJhZ3JvLWFuZ3VsYXItY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxRQUFRLEVBQ1IsY0FBYyxFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLENBQUMsSUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQztBQVM3RztJQUFBO0lBWUEsQ0FBQztvQ0FaWSwyQkFBMkI7SUFDN0IsbUNBQU8sR0FBZCxVQUFlLE1BQTBCO1FBQ3JDLE9BQU87WUFDSCxRQUFRLEVBQUUsNkJBQTJCO1lBQ3JDLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsZ0NBQWdDO29CQUN6QyxRQUFRLEVBQUUsTUFBTTtpQkFDbkI7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDOztJQVhRLDJCQUEyQjtRQUZ2QyxRQUFRLENBQUMsRUFDVCxDQUFDO09BQ1csMkJBQTJCLENBWXZDO0lBQUQsa0NBQUM7Q0FBQSxBQVpELElBWUM7U0FaWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgTW9kdWxlV2l0aFByb3ZpZGVycyxcclxuICAgIE5nTW9kdWxlLFxyXG4gICAgSW5qZWN0aW9uVG9rZW5cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuID0gbmV3IEluamVjdGlvblRva2VuPEhvc3RQcm9qZWN0Q29uZmlncz4oXCJob3N0UHJvamVjdENvbmZpZ3NcIik7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RQcm9qZWN0Q29uZmlncyB7XHJcbiAgICBkb21haW46IHN0cmluZztcclxuICAgIHNlcnZpY2U6IHN0cmluZztcclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxufSlcclxuZXhwb3J0IGNsYXNzIEFncm9Bbmd1bGFyQ29tcG9uZW50c01vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEhvc3RQcm9qZWN0Q29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QWdyb0FuZ3VsYXJDb21wb25lbnRzTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEFncm9Bbmd1bGFyQ29tcG9uZW50c01vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { __values } from "tslib";
|
|
2
|
+
/**
|
|
3
|
+
* Classe com funções úteis para Arrays.
|
|
4
|
+
*/
|
|
5
|
+
var AgroArrayUtils = /** @class */ (function () {
|
|
6
|
+
function AgroArrayUtils() {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Verifica se o valor informado é um array.
|
|
10
|
+
*/
|
|
11
|
+
AgroArrayUtils.isArray = function (value) {
|
|
12
|
+
return Array.isArray(value);
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Remove um item de um array.
|
|
16
|
+
* @param array Array de onde o item será removido.
|
|
17
|
+
* @param item Item a ser removido.
|
|
18
|
+
*/
|
|
19
|
+
AgroArrayUtils.removeItem = function (array, item) {
|
|
20
|
+
var index = array.indexOf(item);
|
|
21
|
+
if (index !== -1) {
|
|
22
|
+
array.splice(index, 1);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Remove um item de um array por índice.
|
|
27
|
+
* @param array Array de onde o item será removido.
|
|
28
|
+
* @param index Índice do item a ser removido.
|
|
29
|
+
*/
|
|
30
|
+
AgroArrayUtils.removeItemByIndex = function (array, index) {
|
|
31
|
+
array.splice(index, 1);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Remove todos os itens de um array.
|
|
35
|
+
* @param array Array de onde os itens serão removidos.
|
|
36
|
+
*/
|
|
37
|
+
AgroArrayUtils.removeAllItems = function (array) {
|
|
38
|
+
array.splice(0, array.length);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Verifica se um array é vazio.
|
|
42
|
+
* @param array Array a ser verificado.
|
|
43
|
+
*/
|
|
44
|
+
AgroArrayUtils.isEmpty = function (array) {
|
|
45
|
+
return AgroArrayUtils.isArray(array) && array.length === 0;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Localiza um item em um array de objetos de acordo com a propriedade e valor informados.
|
|
49
|
+
*/
|
|
50
|
+
AgroArrayUtils.findItemByProperty = function (array, property, value) {
|
|
51
|
+
var e_1, _a;
|
|
52
|
+
try {
|
|
53
|
+
for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {
|
|
54
|
+
var item = array_1_1.value;
|
|
55
|
+
if (item[property] === value) {
|
|
56
|
+
return item;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
61
|
+
finally {
|
|
62
|
+
try {
|
|
63
|
+
if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);
|
|
64
|
+
}
|
|
65
|
+
finally { if (e_1) throw e_1.error; }
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
};
|
|
69
|
+
return AgroArrayUtils;
|
|
70
|
+
}());
|
|
71
|
+
export { AgroArrayUtils };
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1hcnJheS11dGlscy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tYXJyYXktdXRpbHMuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHO0FBQ0g7SUFBQTtJQXdEQSxDQUFDO0lBdkRHOztPQUVHO0lBQ1csc0JBQU8sR0FBckIsVUFBc0IsS0FBVTtRQUM1QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDVyx5QkFBVSxHQUF4QixVQUF5QixLQUFZLEVBQUUsSUFBUztRQUM1QyxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNXLGdDQUFpQixHQUEvQixVQUFnQyxLQUFZLEVBQUUsS0FBYTtRQUN2RCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ1csNkJBQWMsR0FBNUIsVUFBNkIsS0FBWTtRQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNXLHNCQUFPLEdBQXJCLFVBQXNCLEtBQVk7UUFDOUIsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNXLGlDQUFrQixHQUFoQyxVQUFpQyxLQUFZLEVBQUUsUUFBZ0IsRUFBRSxLQUFVOzs7WUFDdkUsS0FBbUIsSUFBQSxVQUFBLFNBQUEsS0FBSyxDQUFBLDRCQUFBLCtDQUFFO2dCQUFyQixJQUFNLElBQUksa0JBQUE7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO29CQUMxQixPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKOzs7Ozs7Ozs7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0wscUJBQUM7QUFBRCxDQUFDLEFBeERELElBd0RDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENsYXNzZSBjb20gZnVuw6fDtWVzIMO6dGVpcyBwYXJhIEFycmF5cy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBZ3JvQXJyYXlVdGlscyB7XHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIG8gdmFsb3IgaW5mb3JtYWRvIMOpIHVtIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB1bSBpdGVtIGRlIHVtIGFycmF5LlxyXG4gICAgICogQHBhcmFtIGFycmF5IEFycmF5IGRlIG9uZGUgbyBpdGVtIHNlcsOhIHJlbW92aWRvLlxyXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBhIHNlciByZW1vdmlkby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVJdGVtKGFycmF5OiBhbnlbXSwgaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdW0gaXRlbSBkZSB1bSBhcnJheSBwb3Igw61uZGljZS5cclxuICAgICAqIEBwYXJhbSBhcnJheSBBcnJheSBkZSBvbmRlIG8gaXRlbSBzZXLDoSByZW1vdmlkby5cclxuICAgICAqIEBwYXJhbSBpbmRleCDDjW5kaWNlIGRvIGl0ZW0gYSBzZXIgcmVtb3ZpZG8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlSXRlbUJ5SW5kZXgoYXJyYXk6IGFueVtdLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0b2RvcyBvcyBpdGVucyBkZSB1bSBhcnJheS5cclxuICAgICAqIEBwYXJhbSBhcnJheSBBcnJheSBkZSBvbmRlIG9zIGl0ZW5zIHNlcsOjbyByZW1vdmlkb3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQWxsSXRlbXMoYXJyYXk6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKDAsIGFycmF5Lmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bSBhcnJheSDDqSB2YXppby5cclxuICAgICAqIEBwYXJhbSBhcnJheSBBcnJheSBhIHNlciB2ZXJpZmljYWRvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzRW1wdHkoYXJyYXk6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFncm9BcnJheVV0aWxzLmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExvY2FsaXphIHVtIGl0ZW0gZW0gdW0gYXJyYXkgZGUgb2JqZXRvcyBkZSBhY29yZG8gY29tIGEgcHJvcHJpZWRhZGUgZSB2YWxvciBpbmZvcm1hZG9zLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGZpbmRJdGVtQnlQcm9wZXJ0eShhcnJheTogYW55W10sIHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtwcm9wZXJ0eV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
export { AgroCookieUtils as ACU, AgroCookieUtils as CookieUtils };
|
|
3
|
+
var AgroCookieUtils = /** @class */ (function () {
|
|
4
|
+
function AgroCookieUtils() {
|
|
5
|
+
}
|
|
6
|
+
AgroCookieUtils.getCookie = function (name, parseURIValue) {
|
|
7
|
+
if (parseURIValue === void 0) { parseURIValue = false; }
|
|
8
|
+
var cookieValue = document.cookie.split(';')
|
|
9
|
+
.map(function (cookie) { return cookie.trim(); })
|
|
10
|
+
.find(function (cookie) { return cookie.startsWith(name); });
|
|
11
|
+
var result = cookieValue === null || cookieValue === void 0 ? void 0 : cookieValue.split('=')[1];
|
|
12
|
+
if (parseURIValue && result) {
|
|
13
|
+
result = decodeURIComponent(result);
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
AgroCookieUtils.parseCookieToObject = function (cookieString, parseURIString) {
|
|
18
|
+
if (parseURIString === void 0) { parseURIString = false; }
|
|
19
|
+
var cookieObject = {};
|
|
20
|
+
if (parseURIString) {
|
|
21
|
+
cookieString = decodeURIComponent(cookieString);
|
|
22
|
+
}
|
|
23
|
+
cookieString.split(';').forEach(function (cookie) {
|
|
24
|
+
var _a = __read(cookie.split('=').map(function (c) { return c.trim(); }), 2), key = _a[0], value = _a[1];
|
|
25
|
+
cookieObject[key] = value;
|
|
26
|
+
});
|
|
27
|
+
return cookieObject;
|
|
28
|
+
};
|
|
29
|
+
AgroCookieUtils.prototype.setCookie = function (name, value, days) {
|
|
30
|
+
var date = new Date();
|
|
31
|
+
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
32
|
+
var expires = 'expires=' + date.toUTCString();
|
|
33
|
+
document.cookie = name + '=' + value + ';' + expires + ';path=/';
|
|
34
|
+
};
|
|
35
|
+
return AgroCookieUtils;
|
|
36
|
+
}());
|
|
37
|
+
export { AgroCookieUtils };
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1jb29raWUtdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBQyxDQUFDO0FBRWhFO0lBQUE7SUFtQ0EsQ0FBQztJQWpDaUIseUJBQVMsR0FBdkIsVUFBd0IsSUFBWSxFQUFFLGFBQXFCO1FBQXJCLDhCQUFBLEVBQUEscUJBQXFCO1FBQ3ZELElBQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUN6QyxHQUFHLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQWIsQ0FBYSxDQUFDO2FBQzVCLElBQUksQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQXZCLENBQXVCLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4QyxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFFbEIsQ0FBQztJQUVhLG1DQUFtQixHQUFqQyxVQUFrQyxZQUFvQixFQUFFLGNBQXNCO1FBQXRCLCtCQUFBLEVBQUEsc0JBQXNCO1FBQzFFLElBQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7UUFDbkQsSUFBSSxjQUFjLEVBQUU7WUFDaEIsWUFBWSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxNQUFNO1lBQzVCLElBQUEsd0VBQW1ELEVBQWxELFdBQUcsRUFBRSxhQUE2QyxDQUFDO1lBQzFELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsbUNBQVMsR0FBVCxVQUFVLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUMvQyxJQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFHTCxzQkFBQztBQUFELENBQUMsQUFuQ0QsSUFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IHtBZ3JvQ29va2llVXRpbHMgYXMgQUNVLCBBZ3JvQ29va2llVXRpbHMgYXMgQ29va2llVXRpbHN9O1xyXG5cclxuZXhwb3J0IGNsYXNzIEFncm9Db29raWVVdGlscyB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRDb29raWUobmFtZTogc3RyaW5nLCBwYXJzZVVSSVZhbHVlID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZVZhbHVlID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JylcclxuICAgICAgICAgICAgLm1hcChjb29raWUgPT4gY29va2llLnRyaW0oKSlcclxuICAgICAgICAgICAgLmZpbmQoY29va2llID0+IGNvb2tpZS5zdGFydHNXaXRoKG5hbWUpKTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gY29va2llVmFsdWU/LnNwbGl0KCc9JylbMV07XHJcblxyXG4gICAgICAgIGlmIChwYXJzZVVSSVZhbHVlICYmIHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUNvb2tpZVRvT2JqZWN0KGNvb2tpZVN0cmluZzogc3RyaW5nLCBwYXJzZVVSSVN0cmluZyA9IGZhbHNlKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgICAgICAgY29uc3QgY29va2llT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICAgICAgaWYgKHBhcnNlVVJJU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNvb2tpZVN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChjb29raWVTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb29raWVTdHJpbmcuc3BsaXQoJzsnKS5mb3JFYWNoKGNvb2tpZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGNvb2tpZS5zcGxpdCgnPScpLm1hcChjID0+IGMudHJpbSgpKTtcclxuICAgICAgICAgICAgY29va2llT2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY29va2llT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgIGNvbnN0IGV4cGlyZXMgPSAnZXhwaXJlcz0nICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAnPScgKyB2YWx1ZSArICc7JyArIGV4cGlyZXMgKyAnO3BhdGg9Lyc7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|