@openmrs/ngx-formentry 5.0.1-pre.351 → 5.0.1-pre.360
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/components/afe-ng-select.component.d.ts +1 -1
- package/components/appointments-overview/appointments-overview.component.d.ts +1 -1
- package/components/check-box/checkbox.component.d.ts +1 -1
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +1 -1
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +1 -1
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +1 -1
- package/components/date-time-picker/date-time-picker.component.d.ts +1 -1
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +1 -1
- package/components/file-upload/file-upload.component.d.ts +1 -1
- package/components/input/input.directive.d.ts +1 -1
- package/components/input/label.component.d.ts +1 -1
- package/components/input/text-area.directive.d.ts +1 -1
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +1 -1
- package/components/ngx-remote-select/ngx-remote-select.component.d.ts +1 -1
- package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +1 -1
- package/components/ngx-tabset/components/tab.component.d.ts +1 -1
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +1 -1
- package/components/number-input/number-input.component.d.ts +1 -1
- package/components/radio-button/radio.component.d.ts +1 -1
- package/components/select/select.component.d.ts +1 -1
- package/components/workspace-launcher/workspace-launcher.component.d.ts +1 -1
- package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-array.mjs +4 -2
- package/{esm2020 → esm2022}/components/afe-ng-select.component.mjs +12 -12
- package/{esm2020 → esm2022}/components/appointments-overview/appointments-overview.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/check-box/checkbox.component.mjs +10 -10
- package/{esm2020 → esm2022}/components/check-box/checkbox.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/custom-component-wrapper/custom-component-wrapper..module.mjs +5 -5
- package/{esm2020 → esm2022}/components/custom-component-wrapper/custom-component-wrapper.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/custom-control-wrapper/custom-control-wrapper..module.mjs +5 -5
- package/esm2022/components/custom-control-wrapper/custom-control-wrapper.component.mjs +68 -0
- package/{esm2020 → esm2022}/components/date-time-picker/date-picker/date-picker.component.mjs +4 -4
- package/esm2022/components/date-time-picker/date-time-picker.component.mjs +115 -0
- package/{esm2020 → esm2022}/components/date-time-picker/date-time-picker.module.mjs +13 -13
- package/{esm2020 → esm2022}/components/date-time-picker/picker-modal/modal.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/date-time-picker/pipes/moment.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/components/date-time-picker/time-picker/time-picker.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/file-upload/file-upload.component.mjs +10 -10
- package/{esm2020 → esm2022}/components/file-upload/file-upload.module.mjs +13 -13
- package/{esm2020 → esm2022}/components/file-upload/secure.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/components/input/input.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/input/input.module.mjs +5 -5
- package/esm2022/components/input/label.component.mjs +263 -0
- package/{esm2020 → esm2022}/components/input/text-area.directive.mjs +4 -4
- package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +76 -0
- package/{esm2020 → esm2022}/components/ngx-datetime-picker/ngx-datetime-picker.module.mjs +13 -13
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.mjs +11 -11
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-body.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs +7 -7
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time.class.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time.module.mjs +33 -33
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/timer-box.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/timer.component.mjs +4 -4
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +243 -0
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog.service.mjs +4 -4
- package/esm2022/components/ngx-remote-select/ngx-remote-select.component.mjs +132 -0
- package/{esm2020 → esm2022}/components/ngx-remote-select/ngx-remote-select.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/ngx-tabset/components/ngx-tab-set.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-tabset/components/tab.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-tabset/directives/hover-class.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/ngx-tabset/modules/ngx-tabset.module.mjs +5 -5
- package/esm2022/components/number-input/number-input.component.mjs +248 -0
- package/{esm2020 → esm2022}/components/number-input/number-input.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/number-input/number.directive.mjs +4 -4
- package/esm2022/components/radio-button/radio.component.mjs +96 -0
- package/{esm2020 → esm2022}/components/radio-button/radio.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/select/optgroup.directive.mjs +4 -4
- package/{esm2020 → esm2022}/components/select/option.directive.mjs +4 -4
- package/esm2022/components/select/select.component.mjs +182 -0
- package/{esm2020 → esm2022}/components/select/select.module.mjs +5 -5
- package/{esm2020 → esm2022}/components/workspace-launcher/workspace-launcher.component.mjs +4 -4
- package/{esm2020 → esm2022}/components/workspace-launcher/workspace-launcher.module.mjs +5 -5
- package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/hider-helpers.mjs +2 -1
- package/{esm2020 → esm2022}/form-entry/data-sources/data-sources.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/directives/collapse.directive.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/directives/historical-value.directive.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/error-renderer/error-renderer.component.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/expression-runner/expression-runner.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-entry.module.mjs +75 -75
- package/{esm2020 → esm2022}/form-entry/form-factory/control-relations.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/form-control.service.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/form.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/hiders-disablers.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/question.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/show-messages.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-factory/validation.factory.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/form-renderer/form-renderer.component.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/helpers/historical-expression-helper-service.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/helpers/historical-field-helper-service.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/helpers/js-expression-helper.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/pipes/time-ago.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/services/debug-mode.service.mjs +4 -4
- package/esm2022/form-entry/services/form-errors.service.mjs +21 -0
- package/{esm2020 → esm2022}/form-entry/services/form-schema-compiler.service.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/services/historical-encounter-data.service.mjs +4 -4
- package/esm2022/form-entry/validators/validations.mjs +5 -0
- package/esm2022/form-entry/value-adapters/diagnosis.adapter.mjs +241 -0
- package/{esm2020 → esm2022}/form-entry/value-adapters/encounter.adapter.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/value-adapters/obs-adapter-helper.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/value-adapters/obs.adapter.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/value-adapters/order.adapter.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/value-adapters/patient-identifier.adapter.mjs +4 -4
- package/{esm2020 → esm2022}/form-entry/value-adapters/person-attribute.adapter.mjs +4 -4
- package/{esm2020 → esm2022}/shared.module.mjs +5 -5
- package/{fesm2020 → fesm2022}/openmrs-ngx-formentry.mjs +534 -531
- package/fesm2022/openmrs-ngx-formentry.mjs.map +1 -0
- package/form-entry/directives/collapse.directive.d.ts +1 -1
- package/form-entry/directives/historical-value.directive.d.ts +1 -1
- package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
- package/form-entry/form-renderer/form-renderer.component.d.ts +1 -1
- package/package.json +14 -20
- package/esm2020/components/custom-control-wrapper/custom-control-wrapper.component.mjs +0 -68
- package/esm2020/components/date-time-picker/date-time-picker.component.mjs +0 -115
- package/esm2020/components/input/label.component.mjs +0 -263
- package/esm2020/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +0 -76
- package/esm2020/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +0 -243
- package/esm2020/components/ngx-remote-select/ngx-remote-select.component.mjs +0 -132
- package/esm2020/components/number-input/number-input.component.mjs +0 -248
- package/esm2020/components/radio-button/radio.component.mjs +0 -96
- package/esm2020/components/select/select.component.mjs +0 -182
- package/esm2020/form-entry/services/form-errors.service.mjs +0 -21
- package/esm2020/form-entry/validators/validations.mjs +0 -5
- package/esm2020/form-entry/value-adapters/diagnosis.adapter.mjs +0 -241
- package/fesm2015/openmrs-ngx-formentry.mjs +0 -14935
- package/fesm2015/openmrs-ngx-formentry.mjs.map +0 -1
- package/fesm2020/openmrs-ngx-formentry.mjs.map +0 -1
- /package/{esm2020 → esm2022}/abstract-controls-extension/afe-control-type.mjs +0 -0
- /package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-control.mjs +0 -0
- /package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-group.mjs +0 -0
- /package/{esm2020 → esm2022}/abstract-controls-extension/control-extensions.mjs +0 -0
- /package/{esm2020 → esm2022}/abstract-controls-extension/index.mjs +0 -0
- /package/{esm2020 → esm2022}/abstract-controls-extension/value-change.listener.mjs +0 -0
- /package/{esm2020 → esm2022}/change-tracking/control-relation.mjs +0 -0
- /package/{esm2020 → esm2022}/change-tracking/control-relations.mjs +0 -0
- /package/{esm2020 → esm2022}/components/date-time-picker/index.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog-config.class.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/utils/object.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-alerts/alert-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-alerts/can-generate-alert.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-calculators/can-calculate.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/can-disable.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/can-hide.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/disabler-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/data-sources/dummy-data-source.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/directives/collapse-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/form-factory/form-node.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/form-factory/form.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/form-factory/index.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/helpers/risk-dataset-table.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/checkbox.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/conditional-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/custom-control-question.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/date-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/date-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/diagnosis-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/file-upload-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/group-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/base-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/checkbox-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/data-source.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/date-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/diagnosis-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/file-upload-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/group-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/multi-select-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/nested-questions.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/radio-button-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/repeating-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/select-option.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/select-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/test-order-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/text-area-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/text-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/ui-select-question-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/workspace-launcher-options.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/js-expression-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/max-length-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/max-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/min-length-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/min-validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/models.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/multi-select-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/pair.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/question-base.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/radio-button.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/rendering-type.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/repeating-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/select-option.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/select-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/test-order-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/text-area-input-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/text-input-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/ui-select-question.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/validation.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/question-models/workspace-launcher.model.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/conditional-answered.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/conditional-required.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/date.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/future-date-restriction.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/js-expression.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/max-date.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/max-length.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/max.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/min-date.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/min-length.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/min.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/validators/required.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/form-entry/value-adapters/value.adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/{esm2020 → esm2022}/openmrs-ngx-formentry.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash';
|
|
3
|
+
import { ArrayNode } from '../form-factory/form-node';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class DiagnosisValueAdapter {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.formDiagnosisNodes = [];
|
|
8
|
+
}
|
|
9
|
+
generateFormPayload(form) {
|
|
10
|
+
this.formDiagnosisNodes = [];
|
|
11
|
+
this._findDiagnosisQuestionNodes(form.rootNode);
|
|
12
|
+
return this._createDiagnosesPayload(this.formDiagnosisNodes, form.existingDiagnoses);
|
|
13
|
+
}
|
|
14
|
+
populateForm(form, diagnoses) {
|
|
15
|
+
form.existingDiagnoses = diagnoses?.filter((d) => {
|
|
16
|
+
return !d.voided;
|
|
17
|
+
});
|
|
18
|
+
this.formDiagnosisNodes = [];
|
|
19
|
+
this._findDiagnosisQuestionNodes(form.rootNode);
|
|
20
|
+
this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 1);
|
|
21
|
+
this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 2);
|
|
22
|
+
this.setDiagnosisGroupValue(this.formDiagnosisNodes, form.existingDiagnoses);
|
|
23
|
+
}
|
|
24
|
+
_createDiagnosesPayload(diagnosisNodes, existingDiagnoses) {
|
|
25
|
+
const payload = [];
|
|
26
|
+
let deletedDiagnoses = [];
|
|
27
|
+
// Add new diagnosis to payload
|
|
28
|
+
diagnosisNodes?.forEach((node) => {
|
|
29
|
+
if (node instanceof ArrayNode) {
|
|
30
|
+
node.control.value
|
|
31
|
+
.filter((v) => v[node.question.key])
|
|
32
|
+
.forEach((value) => {
|
|
33
|
+
// Create Payload
|
|
34
|
+
const payloadDiagnosis = this._createPayloadDiagnosis(value[node.question.key], node.question.extras);
|
|
35
|
+
const isNewDiagnosis = existingDiagnoses.every((d) => d.diagnosis.coded.uuid !== value[node.question.key] ||
|
|
36
|
+
d.certainty !== 'CONFIRMED' ||
|
|
37
|
+
d.rank !== node.question.extras.questionOptions.rank);
|
|
38
|
+
if (isNewDiagnosis) {
|
|
39
|
+
payload.push(payloadDiagnosis);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (node instanceof ArrayNode) {
|
|
44
|
+
const groupNodeArray = node.children;
|
|
45
|
+
groupNodeArray.forEach((groupNode) => {
|
|
46
|
+
if (this.hasDiagnosisNodeChanged(groupNode)) {
|
|
47
|
+
const diagnosisPayload = {};
|
|
48
|
+
Object.values(groupNode.children).forEach((childNode) => {
|
|
49
|
+
const { diagnosisType } = childNode.question.extras.questionOptions;
|
|
50
|
+
switch (diagnosisType) {
|
|
51
|
+
case 'rank':
|
|
52
|
+
diagnosisPayload.rank =
|
|
53
|
+
parseInt(childNode.control.value, 10) ?? 1;
|
|
54
|
+
break;
|
|
55
|
+
case 'certainty':
|
|
56
|
+
diagnosisPayload.certainty = childNode.control.value;
|
|
57
|
+
break;
|
|
58
|
+
case 'diagnosis':
|
|
59
|
+
diagnosisPayload.diagnosis = {
|
|
60
|
+
coded: childNode.control.value
|
|
61
|
+
};
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (_.isEmpty(diagnosisPayload)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
if (groupNode.question.defaultValue?.uuid) {
|
|
71
|
+
diagnosisPayload.uuid = groupNode.question.defaultValue.uuid;
|
|
72
|
+
}
|
|
73
|
+
diagnosisPayload.voided = false;
|
|
74
|
+
payload.push(diagnosisPayload);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
this._updatedOldDiagnoses(payload, existingDiagnoses);
|
|
80
|
+
deletedDiagnoses = this._getDeletedDiagnoses(diagnosisNodes, existingDiagnoses);
|
|
81
|
+
return payload.concat(deletedDiagnoses);
|
|
82
|
+
}
|
|
83
|
+
_createPayloadDiagnosis(codedUuid, questionExtras) {
|
|
84
|
+
const diagnosis = {
|
|
85
|
+
diagnosis: {
|
|
86
|
+
coded: codedUuid
|
|
87
|
+
},
|
|
88
|
+
certainty: 'CONFIRMED',
|
|
89
|
+
rank: questionExtras.questionOptions.rank,
|
|
90
|
+
voided: false
|
|
91
|
+
};
|
|
92
|
+
return diagnosis;
|
|
93
|
+
}
|
|
94
|
+
_getDeletedDiagnoses(diagnosisNodes, existingDiagnoses) {
|
|
95
|
+
return existingDiagnoses
|
|
96
|
+
.filter((existingDiagnosis) => {
|
|
97
|
+
return !diagnosisNodes?.some((node) => {
|
|
98
|
+
if (node instanceof ArrayNode) {
|
|
99
|
+
return node.control.value.some((value) => {
|
|
100
|
+
return (value[node.question.key] ===
|
|
101
|
+
existingDiagnosis.diagnosis.coded.uuid &&
|
|
102
|
+
existingDiagnosis.rank ===
|
|
103
|
+
node.question.extras.questionOptions.rank &&
|
|
104
|
+
existingDiagnosis.certainty === 'CONFIRMED');
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
});
|
|
109
|
+
})
|
|
110
|
+
.map((existingDiagnosis) => ({
|
|
111
|
+
uuid: existingDiagnosis.uuid,
|
|
112
|
+
voided: true
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
_updatedOldDiagnoses(payloadDiagnoses, existingDiagnoses) {
|
|
116
|
+
payloadDiagnoses.forEach((p) => {
|
|
117
|
+
existingDiagnoses?.forEach((e) => {
|
|
118
|
+
let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
|
|
119
|
+
p.uuid = isSame ? e.uuid : null;
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
_setDiagnosesValues(formDiagnosisNodes, existingDiagnoses, rank) {
|
|
124
|
+
formDiagnosisNodes
|
|
125
|
+
?.filter((node) => node.question.extras.questionOptions.rank == rank)
|
|
126
|
+
.forEach((node) => {
|
|
127
|
+
node['initialValue'] = existingDiagnoses;
|
|
128
|
+
existingDiagnoses
|
|
129
|
+
.filter((d) => d.rank == rank)
|
|
130
|
+
.forEach((diagnosis, index) => {
|
|
131
|
+
node.createChildNode();
|
|
132
|
+
const value = {};
|
|
133
|
+
value[node.question.key] = diagnosis.diagnosis.coded.uuid;
|
|
134
|
+
const childNode = node.children[index];
|
|
135
|
+
childNode.control.setValue(value);
|
|
136
|
+
childNode['initialValue'] = value;
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
setDiagnosisGroupValue(formDiagnosisNodes, existingDiagnoses) {
|
|
141
|
+
for (const diagnosis of existingDiagnoses) {
|
|
142
|
+
for (const diagnosisNode of formDiagnosisNodes) {
|
|
143
|
+
if (diagnosisNode.question.extras.type !== 'diagnosisGroup')
|
|
144
|
+
break;
|
|
145
|
+
const groupNode = diagnosisNode.createChildNode();
|
|
146
|
+
groupNode.question.defaultValue = { uuid: diagnosis.uuid };
|
|
147
|
+
for (const child of Object.values(groupNode.children)) {
|
|
148
|
+
const diagnosisType = child.question.extras.questionOptions.diagnosisType;
|
|
149
|
+
switch (diagnosisType) {
|
|
150
|
+
case 'diagnosis':
|
|
151
|
+
child.initialValue = diagnosis.diagnosis.coded?.uuid;
|
|
152
|
+
child.control.setValue(diagnosis.diagnosis.coded?.uuid);
|
|
153
|
+
break;
|
|
154
|
+
case 'rank':
|
|
155
|
+
child.initialValue = diagnosis.rank;
|
|
156
|
+
child.control.setValue(diagnosis.rank);
|
|
157
|
+
break;
|
|
158
|
+
case 'certainty':
|
|
159
|
+
child.initialValue = diagnosis.certainty;
|
|
160
|
+
child.control.setValue(diagnosis.certainty);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
_findDiagnosisQuestionNodes(formNode) {
|
|
168
|
+
if (formNode.children) {
|
|
169
|
+
if (formNode.children instanceof Object) {
|
|
170
|
+
for (const key in formNode.children) {
|
|
171
|
+
if (formNode.children.hasOwnProperty(key)) {
|
|
172
|
+
switch (formNode.children[key].question.renderingType) {
|
|
173
|
+
case 'page':
|
|
174
|
+
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
175
|
+
break;
|
|
176
|
+
case 'section':
|
|
177
|
+
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
178
|
+
break;
|
|
179
|
+
case 'group':
|
|
180
|
+
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
181
|
+
break;
|
|
182
|
+
case 'repeating':
|
|
183
|
+
if (formNode.children) {
|
|
184
|
+
const { children } = formNode;
|
|
185
|
+
// Condition for diagnosisGroup nodes
|
|
186
|
+
for (const node in formNode.children) {
|
|
187
|
+
const questionExtras = formNode.children[node].question.extras;
|
|
188
|
+
if (questionExtras.type === 'diagnosisGroup') {
|
|
189
|
+
const arrayNode = formNode.children[node];
|
|
190
|
+
this.formDiagnosisNodes.push(arrayNode);
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Condition for diagnosis nodes
|
|
195
|
+
Object.values(children).forEach((child) => {
|
|
196
|
+
const { question, nodeIndex } = child;
|
|
197
|
+
if (question.extras?.type === 'diagnosis' &&
|
|
198
|
+
!this.formDiagnosisNodes.some((x) => x.nodeIndex === nodeIndex)) {
|
|
199
|
+
this.formDiagnosisNodes.push(child);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
default:
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
_convert(diagnosis) {
|
|
213
|
+
return {
|
|
214
|
+
uuid: diagnosis.uuid,
|
|
215
|
+
encounter: diagnosis.encounter,
|
|
216
|
+
patient: diagnosis.patient,
|
|
217
|
+
diagnosis: {
|
|
218
|
+
coded: diagnosis.diagnosis.coded.uuid,
|
|
219
|
+
nonCoded: diagnosis.diagnosis.nonCoded
|
|
220
|
+
},
|
|
221
|
+
certainty: diagnosis.certainty,
|
|
222
|
+
rank: diagnosis.rank,
|
|
223
|
+
voided: diagnosis.voided
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
hasDiagnosisNodeChanged(nodeAsGroup) {
|
|
227
|
+
const childrenNodes = Object.values(nodeAsGroup.children);
|
|
228
|
+
for (let childNode of childrenNodes) {
|
|
229
|
+
if (childNode.control.value !== nodeAsGroup.initialValue?.primaryDiagnosisId) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiagnosisValueAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
236
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiagnosisValueAdapter }); }
|
|
237
|
+
}
|
|
238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiagnosisValueAdapter, decorators: [{
|
|
239
|
+
type: Injectable
|
|
240
|
+
}] });
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc2lzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2RpYWdub3Npcy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVFLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQXdTekI7SUF0U0MsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFVLEVBQUUsU0FBMkI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixD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Q0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFDeEU7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXhTVSxxQkFBcUI7bUhBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtJztcbmltcG9ydCB7IFZhbHVlQWRhcHRlciB9IGZyb20gJy4vdmFsdWUuYWRhcHRlcic7XG5pbXBvcnQgeyBBcnJheU5vZGUsIEdyb3VwTm9kZSwgTGVhZk5vZGUgfSBmcm9tICcuLi9mb3JtLWZhY3RvcnkvZm9ybS1ub2RlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERpYWdub3Npc1ZhbHVlQWRhcHRlciBpbXBsZW1lbnRzIFZhbHVlQWRhcHRlciB7XG4gIGZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuXG4gIGdlbmVyYXRlRm9ybVBheWxvYWQoZm9ybTogRm9ybSkge1xuICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzID0gW107XG4gICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybS5yb290Tm9kZSk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURpYWdub3Nlc1BheWxvYWQoXG4gICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXNcbiAgICApO1xuICB9XG5cbiAgcG9wdWxhdGVGb3JtKGZvcm06IEZvcm0sIGRpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPikge1xuICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXMgPSBkaWFnbm9zZXM/LmZpbHRlcigoZCkgPT4ge1xuICAgICAgcmV0dXJuICFkLnZvaWRlZDtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm0ucm9vdE5vZGUpO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDFcbiAgICApO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDJcbiAgICApO1xuICAgIHRoaXMuc2V0RGlhZ25vc2lzR3JvdXBWYWx1ZShcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3Nlc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEaWFnbm9zZXNQYXlsb2FkKGRpYWdub3Npc05vZGVzLCBleGlzdGluZ0RpYWdub3Nlcykge1xuICAgIGNvbnN0IHBheWxvYWQ6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+ID0gW107XG4gICAgbGV0IGRlbGV0ZWREaWFnbm9zZXM6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+ID0gW107XG5cbiAgICAvLyBBZGQgbmV3IGRpYWdub3NpcyB0byBwYXlsb2FkXG4gICAgZGlhZ25vc2lzTm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgIG5vZGUuY29udHJvbC52YWx1ZVxuICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHZbbm9kZS5xdWVzdGlvbi5rZXldKVxuICAgICAgICAgIC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIFBheWxvYWRcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWREaWFnbm9zaXMgPSB0aGlzLl9jcmVhdGVQYXlsb2FkRGlhZ25vc2lzKFxuICAgICAgICAgICAgICB2YWx1ZVtub2RlLnF1ZXN0aW9uLmtleV0sXG4gICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBpc05ld0RpYWdub3NpcyA9IGV4aXN0aW5nRGlhZ25vc2VzLmV2ZXJ5KFxuICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICBkLmRpYWdub3Npcy5jb2RlZC51dWlkICE9PSB2YWx1ZVtub2RlLnF1ZXN0aW9uLmtleV0gfHxcbiAgICAgICAgICAgICAgICBkLmNlcnRhaW50eSAhPT0gJ0NPTkZJUk1FRCcgfHxcbiAgICAgICAgICAgICAgICBkLnJhbmsgIT09IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoaXNOZXdEaWFnbm9zaXMpIHtcbiAgICAgICAgICAgICAgcGF5bG9hZC5wdXNoKHBheWxvYWREaWFnbm9zaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEFycmF5Tm9kZSkge1xuICAgICAgICBjb25zdCBncm91cE5vZGVBcnJheSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGdyb3VwTm9kZUFycmF5LmZvckVhY2goKGdyb3VwTm9kZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmhhc0RpYWdub3Npc05vZGVDaGFuZ2VkKGdyb3VwTm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWdub3Npc1BheWxvYWQ6IFBhcnRpYWw8RGlhZ25vc2lzUGF5bG9hZD4gPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBOb2RlLmNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZE5vZGU6IExlYWZOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBkaWFnbm9zaXNUeXBlXG4gICAgICAgICAgICAgIH0gPSBjaGlsZE5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucztcbiAgICAgICAgICAgICAgc3dpdGNoIChkaWFnbm9zaXNUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncmFuayc6XG4gICAgICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLnJhbmsgPVxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChjaGlsZE5vZGUuY29udHJvbC52YWx1ZSwgMTApID8/IDE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjZXJ0YWludHknOlxuICAgICAgICAgICAgICAgICAgZGlhZ25vc2lzUGF5bG9hZC5jZXJ0YWludHkgPSBjaGlsZE5vZGUuY29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RpYWdub3Npcyc6XG4gICAgICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLmRpYWdub3NpcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZWQ6IGNoaWxkTm9kZS5jb250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChfLmlzRW1wdHkoZGlhZ25vc2lzUGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ3JvdXBOb2RlLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZT8udXVpZCkge1xuICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLnV1aWQgPSBncm91cE5vZGUucXVlc3Rpb24uZGVmYXVsdFZhbHVlLnV1aWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLnZvaWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcGF5bG9hZC5wdXNoKGRpYWdub3Npc1BheWxvYWQgYXMgRGlhZ25vc2lzUGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl91cGRhdGVkT2xkRGlhZ25vc2VzKHBheWxvYWQsIGV4aXN0aW5nRGlhZ25vc2VzKTtcbiAgICBkZWxldGVkRGlhZ25vc2VzID0gdGhpcy5fZ2V0RGVsZXRlZERpYWdub3NlcyhcbiAgICAgIGRpYWdub3Npc05vZGVzLFxuICAgICAgZXhpc3RpbmdEaWFnbm9zZXNcbiAgICApO1xuICAgIHJldHVybiBwYXlsb2FkLmNvbmNhdChkZWxldGVkRGlhZ25vc2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZVBheWxvYWREaWFnbm9zaXMoY29kZWRVdWlkLCBxdWVzdGlvbkV4dHJhcyk6IERpYWdub3Npc1BheWxvYWQge1xuICAgIGNvbnN0IGRpYWdub3NpczogRGlhZ25vc2lzUGF5bG9hZCA9IHtcbiAgICAgIGRpYWdub3Npczoge1xuICAgICAgICBjb2RlZDogY29kZWRVdWlkXG4gICAgICB9LFxuICAgICAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyxcbiAgICAgIHJhbms6IHF1ZXN0aW9uRXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rLFxuICAgICAgdm9pZGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICByZXR1cm4gZGlhZ25vc2lzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVsZXRlZERpYWdub3NlcyhcbiAgICBkaWFnbm9zaXNOb2RlczogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4sXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz5cbiAgKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nRGlhZ25vc2VzXG4gICAgICAuZmlsdGVyKChleGlzdGluZ0RpYWdub3NpcykgPT4ge1xuICAgICAgICByZXR1cm4gIWRpYWdub3Npc05vZGVzPy5zb21lKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNvbnRyb2wudmFsdWUuc29tZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB2YWx1ZVtub2RlLnF1ZXN0aW9uLmtleV0gPT09XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0RpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQudXVpZCAmJlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nRGlhZ25vc2lzLnJhbmsgPT09XG4gICAgICAgICAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmFuayAmJlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nRGlhZ25vc2lzLmNlcnRhaW50eSA9PT0gJ0NPTkZJUk1FRCdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGV4aXN0aW5nRGlhZ25vc2lzKSA9PiAoe1xuICAgICAgICB1dWlkOiBleGlzdGluZ0RpYWdub3Npcy51dWlkLFxuICAgICAgICB2b2lkZWQ6IHRydWVcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZWRPbGREaWFnbm9zZXMoXG4gICAgcGF5bG9hZERpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4sXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz5cbiAgKSB7XG4gICAgcGF5bG9hZERpYWdub3Nlcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICBleGlzdGluZ0RpYWdub3Nlcz8uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBsZXQgaXNTYW1lID0gIWUudm9pZGVkICYmIHAuZGlhZ25vc2lzLmNvZGVkID09PSBlLmRpYWdub3Npcy5jb2RlZC51dWlkO1xuICAgICAgICBwLnV1aWQgPSBpc1NhbWUgPyBlLnV1aWQgOiBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaWFnbm9zZXNWYWx1ZXMoXG4gICAgZm9ybURpYWdub3Npc05vZGVzLFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+LFxuICAgIHJhbms6IG51bWJlclxuICApIHtcbiAgICBmb3JtRGlhZ25vc2lzTm9kZXNcbiAgICAgID8uZmlsdGVyKChub2RlKSA9PiBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmFuayA9PSByYW5rKVxuICAgICAgLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgbm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBleGlzdGluZ0RpYWdub3NlcztcbiAgICAgICAgZXhpc3RpbmdEaWFnbm9zZXNcbiAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLnJhbmsgPT0gcmFuaylcbiAgICAgICAgICAuZm9yRWFjaCgoZGlhZ25vc2lzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbm9kZS5jcmVhdGVDaGlsZE5vZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICAgICAgICB2YWx1ZVtub2RlLnF1ZXN0aW9uLmtleV0gPSBkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkLnV1aWQ7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW2luZGV4XTtcbiAgICAgICAgICAgIGNoaWxkTm9kZS5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIGNoaWxkTm9kZVsnaW5pdGlhbFZhbHVlJ10gPSB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaWFnbm9zaXNHcm91cFZhbHVlKFxuICAgIGZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPlxuICApIHtcbiAgICBmb3IgKGNvbnN0IGRpYWdub3NpcyBvZiBleGlzdGluZ0RpYWdub3Nlcykge1xuICAgICAgZm9yIChjb25zdCBkaWFnbm9zaXNOb2RlIG9mIGZvcm1EaWFnbm9zaXNOb2Rlcykge1xuICAgICAgICBpZiAoZGlhZ25vc2lzTm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSAhPT0gJ2RpYWdub3Npc0dyb3VwJykgYnJlYWs7XG4gICAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IGRpYWdub3Npc05vZGUuY3JlYXRlQ2hpbGROb2RlKCkgYXMgR3JvdXBOb2RlO1xuXG4gICAgICAgIGdyb3VwTm9kZS5xdWVzdGlvbi5kZWZhdWx0VmFsdWUgPSB7IHV1aWQ6IGRpYWdub3Npcy51dWlkIH07XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgT2JqZWN0LnZhbHVlcyhncm91cE5vZGUuY2hpbGRyZW4pIGFzIExlYWZOb2RlW10pIHtcbiAgICAgICAgICBjb25zdCBkaWFnbm9zaXNUeXBlID1cbiAgICAgICAgICAgIGNoaWxkLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuZGlhZ25vc2lzVHlwZTtcbiAgICAgICAgICBzd2l0Y2ggKGRpYWdub3Npc1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RpYWdub3Npcyc6XG4gICAgICAgICAgICAgIGNoaWxkLmluaXRpYWxWYWx1ZSA9IGRpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQ/LnV1aWQ7XG4gICAgICAgICAgICAgIGNoaWxkLmNvbnRyb2wuc2V0VmFsdWUoZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZD8udXVpZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFuayc6XG4gICAgICAgICAgICAgIGNoaWxkLmluaXRpYWxWYWx1ZSA9IGRpYWdub3Npcy5yYW5rO1xuICAgICAgICAgICAgICBjaGlsZC5jb250cm9sLnNldFZhbHVlKGRpYWdub3Npcy5yYW5rKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjZXJ0YWludHknOlxuICAgICAgICAgICAgICBjaGlsZC5pbml0aWFsVmFsdWUgPSBkaWFnbm9zaXMuY2VydGFpbnR5O1xuICAgICAgICAgICAgICBjaGlsZC5jb250cm9sLnNldFZhbHVlKGRpYWdub3Npcy5jZXJ0YWludHkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtTm9kZSkge1xuICAgIGlmIChmb3JtTm9kZS5jaGlsZHJlbikge1xuICAgICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtTm9kZS5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdyZXBlYXRpbmcnOlxuICAgICAgICAgICAgICAgIGlmIChmb3JtTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gZm9ybU5vZGU7XG4gICAgICAgICAgICAgICAgICAvLyBDb25kaXRpb24gZm9yIGRpYWdub3Npc0dyb3VwIG5vZGVzXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgaW4gZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25FeHRyYXMgPVxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Ob2RlLmNoaWxkcmVuW25vZGVdLnF1ZXN0aW9uLmV4dHJhcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uRXh0cmFzLnR5cGUgPT09ICdkaWFnbm9zaXNHcm91cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJheU5vZGUgPSBmb3JtTm9kZS5jaGlsZHJlbltub2RlXSBhcyBBcnJheU5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMucHVzaChhcnJheU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBDb25kaXRpb24gZm9yIGRpYWdub3NpcyBub2Rlc1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGQ6IExlYWZOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcXVlc3Rpb24sIG5vZGVJbmRleCB9ID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5leHRyYXM/LnR5cGUgPT09ICdkaWFnbm9zaXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZm9ybURpYWdub3Npc05vZGVzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoeCkgPT4geC5ub2RlSW5kZXggPT09IG5vZGVJbmRleFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbnZlcnQoZGlhZ25vc2lzOiBEaWFnbm9zaXMpOiBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXVpZDogZGlhZ25vc2lzLnV1aWQsXG4gICAgICBlbmNvdW50ZXI6IGRpYWdub3Npcy5lbmNvdW50ZXIsXG4gICAgICBwYXRpZW50OiBkaWFnbm9zaXMucGF0aWVudCxcbiAgICAgIGRpYWdub3Npczoge1xuICAgICAgICBjb2RlZDogZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZC51dWlkLFxuICAgICAgICBub25Db2RlZDogZGlhZ25vc2lzLmRpYWdub3Npcy5ub25Db2RlZFxuICAgICAgfSxcbiAgICAgIGNlcnRhaW50eTogZGlhZ25vc2lzLmNlcnRhaW50eSxcbiAgICAgIHJhbms6IGRpYWdub3Npcy5yYW5rLFxuICAgICAgdm9pZGVkOiBkaWFnbm9zaXMudm9pZGVkXG4gICAgfTtcbiAgfVxuXG4gIGhhc0RpYWdub3Npc05vZGVDaGFuZ2VkKG5vZGVBc0dyb3VwOiBHcm91cE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGlsZHJlbk5vZGVzID0gT2JqZWN0LnZhbHVlcyhub2RlQXNHcm91cC5jaGlsZHJlbikgYXMgQXJyYXk8XG4gICAgICBMZWFmTm9kZVxuICAgID47XG5cbiAgICBmb3IgKGxldCBjaGlsZE5vZGUgb2YgY2hpbGRyZW5Ob2Rlcykge1xuICAgICAgaWYgKFxuICAgICAgICBjaGlsZE5vZGUuY29udHJvbC52YWx1ZSAhPT0gbm9kZUFzR3JvdXAuaW5pdGlhbFZhbHVlPy5wcmltYXJ5RGlhZ25vc2lzSWRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zaXMge1xuICB1dWlkPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xuICBlbmNvdW50ZXI/OiBzdHJpbmc7XG4gIHBhdGllbnQ/OiBzdHJpbmc7XG4gIGRpYWdub3Npczoge1xuICAgIGNvZGVkPzoge1xuICAgICAgdXVpZDogc3RyaW5nO1xuICAgICAgZGlzcGxheT86IHN0cmluZztcbiAgICB9O1xuICAgIG5vbkNvZGVkPzogc3RyaW5nO1xuICB9O1xuICBjZXJ0YWludHk6ICdDT05GSVJNRUQnIHwgJ1BST1ZJU0lPTkFMJztcbiAgcmFuazogbnVtYmVyO1xuICB2b2lkZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3Npc1BheWxvYWQge1xuICB1dWlkPzogc3RyaW5nO1xuICBlbmNvdW50ZXI/OiBzdHJpbmc7XG4gIHBhdGllbnQ/OiBzdHJpbmc7XG4gIGRpYWdub3Npczoge1xuICAgIGNvZGVkPzogc3RyaW5nO1xuICAgIG5vbkNvZGVkPzogc3RyaW5nO1xuICB9O1xuICBjZXJ0YWludHk6ICdDT05GSVJNRUQnIHwgJ1BST1ZJU0lPTkFMJztcbiAgcmFuazogbnVtYmVyO1xuICB2b2lkZWQ/OiBib29sZWFuO1xufVxuIl19
|
|
@@ -177,10 +177,10 @@ export class EncounterAdapter {
|
|
|
177
177
|
}
|
|
178
178
|
return false;
|
|
179
179
|
}
|
|
180
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncounterAdapter, deps: [{ token: i1.OrderValueAdapter }, { token: i2.DiagnosisValueAdapter }, { token: i3.ObsValueAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
181
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncounterAdapter }); }
|
|
180
182
|
}
|
|
181
|
-
|
|
182
|
-
EncounterAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EncounterAdapter });
|
|
183
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EncounterAdapter, decorators: [{
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncounterAdapter, decorators: [{
|
|
184
184
|
type: Injectable
|
|
185
185
|
}], ctorParameters: function () { return [{ type: i1.OrderValueAdapter }, { type: i2.DiagnosisValueAdapter }, { type: i3.ObsValueAdapter }]; } });
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb3VudGVyLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2VuY291bnRlci5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7O0FBRzVCLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFDUyxhQUFnQyxFQUNoQyxnQkFBdUMsRUFDdkMsVUFBMkI7UUFGM0Isa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUI7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7SUFDakMsQ0FBQztJQUVKLFlBQVksQ0FBQyxJQUFVLEVBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM3RDtRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsUUFBa0IsRUFBRSxPQUFPO1FBQ3RDLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pDLEtBQUssbUJBQW1CO29CQUN0QixJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO3dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQzlDLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDbkU7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLG1CQUFtQjtvQkFDdEIsSUFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3dCQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4Qzt3QkFDQSxNQUFNLGFBQWEsR0FDakIsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUM1QyxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFOzRCQUN2Qyw2REFBNkQ7NEJBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQ0FDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVDLENBQUMsQ0FBQyxDQUFDOzRCQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzt5QkFDeEM7cUJBQ0Y7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLG1CQUFtQjtvQkFDdEIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQzlDO29CQUNELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTTthQUNUO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpFLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV2RSxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWtCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JCLElBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTtnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUztnQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUN6QjtnQkFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDakMsS0FBSyxtQkFBbUI7d0JBQ3RCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUN2RCxDQUFDO3dCQUNGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDbEQsTUFBTTtvQkFDUixLQUFLLG1CQUFtQjt3QkFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7NEJBQ25ELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQzs0QkFDckIsU0FBUyxDQUFDLElBQUksQ0FBQztnQ0FDYixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dDQUM1QixhQUFhLEVBQUUsc0NBQXNDLENBQUMsb0RBQW9EOzZCQUMzRyxDQUFDLENBQUM7NEJBQ0gsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsU0FBUyxDQUFDO3lCQUMzQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssbUJBQW1CO3dCQUN0QixPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ3pDLE1BQU07b0JBQ1I7d0JBQ0UsTUFBTTtpQkFDVDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBa0I7UUFDbEMsTUFBTSxPQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFVLEVBQUUsT0FBTztRQUM1QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7WUFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRTtZQUM5QyxJQUFJLENBQUMsMkJBQTJCLENBQzlCLE9BQU8sRUFDUCxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQzNDLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUMxQixPQUFPLEVBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQ3RFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQ25DLENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyRTtRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQzFCLE9BQU8sRUFDUCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUN2QyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBTyxFQUFFLFdBQW1CO1FBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFpQjtRQUM1QyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsaUJBQXlCO1FBQzVELE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLE9BQU8sRUFDUCxpQkFBeUIsRUFDekIsU0FBaUI7UUFFakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFnQjtRQUMxQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsYUFBcUI7UUFDcEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxLQUFzQjtRQUNuRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxRQUFRLFlBQVksU0FBUyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLFFBQXFCLENBQUM7WUFFbkMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksUUFBUSxFQUFFO29CQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbEQ7YUFDRjtTQUNGO1FBRUQsSUFBSSxRQUFRLFlBQVksU0FBUyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLFFBQXFCLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQWM7UUFDckMsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDcEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CO2dCQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsRUFDcEQ7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs4R0EvTlUsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTm9kZUJhc2UsIEdyb3VwTm9kZSwgQXJyYXlOb2RlIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0tbm9kZSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0nO1xuXG5pbXBvcnQgeyBWYWx1ZUFkYXB0ZXIgfSBmcm9tICcuL3ZhbHVlLmFkYXB0ZXInO1xuaW1wb3J0IHsgT2JzVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi9vYnMuYWRhcHRlcic7XG5pbXBvcnQgeyBPcmRlclZhbHVlQWRhcHRlciB9IGZyb20gJy4vb3JkZXIuYWRhcHRlcic7XG5pbXBvcnQgeyBEaWFnbm9zaXNWYWx1ZUFkYXB0ZXIgfSBmcm9tICcuL2RpYWdub3Npcy5hZGFwdGVyJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5jb3VudGVyQWRhcHRlciBpbXBsZW1lbnRzIFZhbHVlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvcmRlcnNBZGFwdGVyOiBPcmRlclZhbHVlQWRhcHRlcixcbiAgICBwdWJsaWMgZGlhZ25vc2VzQWRhcHRlcjogRGlhZ25vc2lzVmFsdWVBZGFwdGVyLFxuICAgIHB1YmxpYyBvYnNBZGFwdGVyOiBPYnNWYWx1ZUFkYXB0ZXJcbiAgKSB7fVxuXG4gIHBvcHVsYXRlRm9ybShmb3JtOiBGb3JtLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5wb3B1bGF0ZU5vZGUoZm9ybS5yb290Tm9kZSwgcGF5bG9hZCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5vcmRlcnMpKSB7XG4gICAgICB0aGlzLm9yZGVyc0FkYXB0ZXIucG9wdWxhdGVGb3JtKGZvcm0sIHBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmRpYWdub3NlcykpIHtcbiAgICAgIHRoaXMuZGlhZ25vc2VzQWRhcHRlci5wb3B1bGF0ZUZvcm0oZm9ybSwgcGF5bG9hZC5kaWFnbm9zZXMpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLm9icykpIHtcbiAgICAgIHRoaXMub2JzQWRhcHRlci5wb3B1bGF0ZUZvcm0oZm9ybSwgcGF5bG9hZC5vYnMpO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlTm9kZShyb290Tm9kZTogTm9kZUJhc2UsIHBheWxvYWQpIHtcbiAgICBpZiAocGF5bG9hZCA9PT0gdW5kZWZpbmVkIHx8IHBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGF5bG9hZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRFbmNvdW50ZXJOb2Rlcyhyb290Tm9kZSk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyRGF0ZXRpbWUnOlxuICAgICAgICAgIGlmIChwYXlsb2FkWydlbmNvdW50ZXJEYXRldGltZSddKSB7XG4gICAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgIG1vbWVudChwYXlsb2FkWydlbmNvdW50ZXJEYXRldGltZSddKS50b0RhdGUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlID0gbW9tZW50KHBheWxvYWRbJ2VuY291bnRlckRhdGV0aW1lJ10pLnRvRGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyUHJvdmlkZXInOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGF5bG9hZFsnZW5jb3VudGVyUHJvdmlkZXJzJ10pICYmXG4gICAgICAgICAgICBwYXlsb2FkWydlbmNvdW50ZXJQcm92aWRlcnMnXS5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFByb3ZpZGVyOiBhbnkgPVxuICAgICAgICAgICAgICBwYXlsb2FkWydlbmNvdW50ZXJQcm92aWRlcnMnXVswXS5wcm92aWRlcjtcbiAgICAgICAgICAgIGlmIChmaXJzdFByb3ZpZGVyICYmIGZpcnN0UHJvdmlkZXIudXVpZCkge1xuICAgICAgICAgICAgICAvLyBWZXJ5IHdlaXJkIHdvcmsgYXJvdW5kIGZvciBhbiBpc3N1ZSB3aXRoIHNldHRpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIG5vZGUuY29udHJvbC5zZXRWYWx1ZShmaXJzdFByb3ZpZGVyLnV1aWQpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUoZmlyc3RQcm92aWRlci51dWlkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlID0gZmlyc3RQcm92aWRlci51dWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyTG9jYXRpb24nOlxuICAgICAgICAgIGlmIChwYXlsb2FkWydsb2NhdGlvbiddICYmIHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZCkge1xuICAgICAgICAgICAgbm9kZS5jb250cm9sLnNldFZhbHVlKHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZCk7XG4gICAgICAgICAgICBub2RlLmluaXRpYWxWYWx1ZSA9IHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm06IEZvcm0pIHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5nZW5lcmF0ZU5vZGVQYXlsb2FkKGZvcm0ucm9vdE5vZGUpO1xuICAgIHRoaXMuc2V0Tm9uRmlsbGVkUGF5bG9hZE1lbWJlcnMoZm9ybSwgcGF5bG9hZCk7XG5cbiAgICBwYXlsb2FkWydvYnMnXSA9IHRoaXMub2JzQWRhcHRlci5nZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm0pIHx8IFtdO1xuXG4gICAgcGF5bG9hZFsnb3JkZXJzJ10gPSB0aGlzLm9yZGVyc0FkYXB0ZXIuZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtKSB8fCBbXTtcblxuICAgIHBheWxvYWRbJ2RpYWdub3NlcyddID1cbiAgICAgIHRoaXMuZGlhZ25vc2VzQWRhcHRlci5nZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm0pIHx8IFtdO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBnZW5lcmF0ZU5vZGVQYXlsb2FkKHJvb3ROb2RlOiBOb2RlQmFzZSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRFbmNvdW50ZXJOb2Rlcyhyb290Tm9kZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHt9O1xuXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNvbnRyb2wudmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2VuY291bnRlckRhdGV0aW1lJzpcbiAgICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG1vbWVudChub2RlLmNvbnRyb2wudmFsdWUpLnV0Y09mZnNldChcbiAgICAgICAgICAgICAgcm9vdE5vZGUuZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLnV0Y09mZnNldCB8fCAnKzAzMDAnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcGF5bG9hZFsnZW5jb3VudGVyRGF0ZXRpbWUnXSA9IGRhdGVWYWx1ZS5mb3JtYXQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VuY291bnRlclByb3ZpZGVyJzpcbiAgICAgICAgICAgIGlmIChub2RlLmNvbnRyb2wudmFsdWUgJiYgbm9kZS5jb250cm9sLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBub2RlLmNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgICAgZW5jb3VudGVyUm9sZTogJ2EwYjAzMDUwLWM5OWItMTFlMC05NTcyLTA4MDAyMDBjOWE2NicgLy8gdW5rbm93biBwcm92aWRlciByb2xlIGluIHRoZSBlbmNvdW50ZXIgYXMgZGVmYXVsdFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcGF5bG9hZFsnZW5jb3VudGVyUHJvdmlkZXJzJ10gPSBwcm92aWRlcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlbmNvdW50ZXJMb2NhdGlvbic6XG4gICAgICAgICAgICBwYXlsb2FkWydsb2NhdGlvbiddID0gbm9kZS5jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIGdldEVuY291bnRlck5vZGVzKHJvb3ROb2RlOiBOb2RlQmFzZSk6IEFycmF5PE5vZGVCYXNlPiB7XG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8Tm9kZUJhc2U+ID0gW107XG4gICAgdGhpcy5fZ2V0RW5jb3VudGVyTm9kZXMocm9vdE5vZGUsIHJlc3VsdHMpO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgc2V0Tm9uRmlsbGVkUGF5bG9hZE1lbWJlcnMoZm9ybTogRm9ybSwgcGF5bG9hZCkge1xuICAgIGlmIChmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8ucGF0aWVudFV1aWQpIHtcbiAgICAgIHRoaXMuc2V0UGF5bG9hZFBhdGllbnRVdWlkKHBheWxvYWQsIGZvcm0udmFsdWVQcm9jZXNzaW5nSW5mby5wYXRpZW50VXVpZCk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm0udmFsdWVQcm9jZXNzaW5nSW5mby52aXNpdFV1aWQpIHtcbiAgICAgIHRoaXMuc2V0UGF5bG9hZFZpc2l0VXVpZChwYXlsb2FkLCBmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8udmlzaXRVdWlkKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclR5cGVVdWlkKSB7XG4gICAgICB0aGlzLnNldFBheWxvYWRFbmNvdW50ZXJUeXBlVXVpZChcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclR5cGVVdWlkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGF5bG9hZC5lbmNvdW50ZXJEYXRldGltZSkge1xuICAgICAgdGhpcy5zZXRQYXlsb2FkRW5jb3VudGVyRGF0ZShcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlckRhdGV0aW1lID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLnV0Y09mZnNldFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmZvcm1VdWlkKSB7XG4gICAgICB0aGlzLnNldFBheWxvYWRGb3JtVXVpZChwYXlsb2FkLCBmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8uZm9ybVV1aWQpO1xuICAgIH1cblxuICAgIGlmIChmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8uZW5jb3VudGVyVXVpZCkge1xuICAgICAgdGhpcy5zZXRQYXlsb2FkRW5jb3VudGVyVXVpZChcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclV1aWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGF5bG9hZFBhdGllbnRVdWlkKHBheWxvYWQsIHBhdGllbnRVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWydwYXRpZW50J10gPSBwYXRpZW50VXVpZDtcbiAgfVxuXG4gIHNldFBheWxvYWRWaXNpdFV1aWQocGF5bG9hZCwgdmlzaXRVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWyd2aXNpdCddID0gdmlzaXRVdWlkO1xuICB9XG5cbiAgc2V0UGF5bG9hZEVuY291bnRlclR5cGVVdWlkKHBheWxvYWQsIGVuY291bnRlclR5cGVVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWydlbmNvdW50ZXJUeXBlJ10gPSBlbmNvdW50ZXJUeXBlVXVpZDtcbiAgfVxuXG4gIHNldFBheWxvYWRFbmNvdW50ZXJEYXRlKFxuICAgIHBheWxvYWQsXG4gICAgZW5jb3VudGVyRGF0ZXRpbWU6IHN0cmluZyxcbiAgICB1dGNPZmZzZXQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSBtb21lbnQoZW5jb3VudGVyRGF0ZXRpbWUpLnV0Y09mZnNldCh1dGNPZmZzZXQgfHwgJyswMzAwJyk7XG4gICAgcGF5bG9hZFsnZW5jb3VudGVyRGF0ZXRpbWUnXSA9IGRhdGVWYWx1ZS5mb3JtYXQoKTtcbiAgfVxuXG4gIHNldFBheWxvYWRGb3JtVXVpZChwYXlsb2FkLCBmb3JtVXVpZDogc3RyaW5nKSB7XG4gICAgcGF5bG9hZFsnZm9ybSddID0gZm9ybVV1aWQ7XG4gIH1cblxuICBzZXRQYXlsb2FkRW5jb3VudGVyVXVpZChwYXlsb2FkLCBlbmNvdW50ZXJVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWyd1dWlkJ10gPSBlbmNvdW50ZXJVdWlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RW5jb3VudGVyTm9kZXMocm9vdE5vZGU6IE5vZGVCYXNlLCBhcnJheTogQXJyYXk8Tm9kZUJhc2U+KSB7XG4gICAgaWYgKHRoaXMuX2lzRW5jb3VudGVyTm9kZShyb290Tm9kZSkpIHtcbiAgICAgIGFycmF5LnB1c2gocm9vdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIEdyb3VwTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHJvb3ROb2RlIGFzIEdyb3VwTm9kZTtcblxuICAgICAgZm9yIChjb25zdCBvIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5bb10gaW5zdGFuY2VvZiBOb2RlQmFzZSkge1xuICAgICAgICAgIHRoaXMuX2dldEVuY291bnRlck5vZGVzKG5vZGUuY2hpbGRyZW5bb10sIGFycmF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIEFycmF5Tm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHJvb3ROb2RlIGFzIEFycmF5Tm9kZTtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgdGhpcy5fZ2V0RW5jb3VudGVyTm9kZXMoY2hpbGQsIGFycmF5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRW5jb3VudGVyTm9kZShub2RlOiBOb2RlQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzICYmXG4gICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2VuY291bnRlckRhdGV0aW1lJyB8fFxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy50eXBlID09PSAnZW5jb3VudGVyUHJvdmlkZXInIHx8XG4gICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdlbmNvdW50ZXJMb2NhdGlvbicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb3VudGVyLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2VuY291bnRlci5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7O0FBRzVCLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFDUyxhQUFnQyxFQUNoQyxnQkFBdUMsRUFDdkMsVUFBMkI7UUFGM0Isa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUI7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7SUFDakMsQ0FBQztJQUVKLFlBQVksQ0FBQyxJQUFVLEVBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FB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QUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CO2dCQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsRUFDcEQ7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQS9OVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTm9kZUJhc2UsIEdyb3VwTm9kZSwgQXJyYXlOb2RlIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0tbm9kZSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0nO1xuXG5pbXBvcnQgeyBWYWx1ZUFkYXB0ZXIgfSBmcm9tICcuL3ZhbHVlLmFkYXB0ZXInO1xuaW1wb3J0IHsgT2JzVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi9vYnMuYWRhcHRlcic7XG5pbXBvcnQgeyBPcmRlclZhbHVlQWRhcHRlciB9IGZyb20gJy4vb3JkZXIuYWRhcHRlcic7XG5pbXBvcnQgeyBEaWFnbm9zaXNWYWx1ZUFkYXB0ZXIgfSBmcm9tICcuL2RpYWdub3Npcy5hZGFwdGVyJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5jb3VudGVyQWRhcHRlciBpbXBsZW1lbnRzIFZhbHVlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvcmRlcnNBZGFwdGVyOiBPcmRlclZhbHVlQWRhcHRlcixcbiAgICBwdWJsaWMgZGlhZ25vc2VzQWRhcHRlcjogRGlhZ25vc2lzVmFsdWVBZGFwdGVyLFxuICAgIHB1YmxpYyBvYnNBZGFwdGVyOiBPYnNWYWx1ZUFkYXB0ZXJcbiAgKSB7fVxuXG4gIHBvcHVsYXRlRm9ybShmb3JtOiBGb3JtLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5wb3B1bGF0ZU5vZGUoZm9ybS5yb290Tm9kZSwgcGF5bG9hZCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5vcmRlcnMpKSB7XG4gICAgICB0aGlzLm9yZGVyc0FkYXB0ZXIucG9wdWxhdGVGb3JtKGZvcm0sIHBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmRpYWdub3NlcykpIHtcbiAgICAgIHRoaXMuZGlhZ25vc2VzQWRhcHRlci5wb3B1bGF0ZUZvcm0oZm9ybSwgcGF5bG9hZC5kaWFnbm9zZXMpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLm9icykpIHtcbiAgICAgIHRoaXMub2JzQWRhcHRlci5wb3B1bGF0ZUZvcm0oZm9ybSwgcGF5bG9hZC5vYnMpO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlTm9kZShyb290Tm9kZTogTm9kZUJhc2UsIHBheWxvYWQpIHtcbiAgICBpZiAocGF5bG9hZCA9PT0gdW5kZWZpbmVkIHx8IHBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGF5bG9hZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRFbmNvdW50ZXJOb2Rlcyhyb290Tm9kZSk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyRGF0ZXRpbWUnOlxuICAgICAgICAgIGlmIChwYXlsb2FkWydlbmNvdW50ZXJEYXRldGltZSddKSB7XG4gICAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgICAgIG1vbWVudChwYXlsb2FkWydlbmNvdW50ZXJEYXRldGltZSddKS50b0RhdGUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlID0gbW9tZW50KHBheWxvYWRbJ2VuY291bnRlckRhdGV0aW1lJ10pLnRvRGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyUHJvdmlkZXInOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGF5bG9hZFsnZW5jb3VudGVyUHJvdmlkZXJzJ10pICYmXG4gICAgICAgICAgICBwYXlsb2FkWydlbmNvdW50ZXJQcm92aWRlcnMnXS5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFByb3ZpZGVyOiBhbnkgPVxuICAgICAgICAgICAgICBwYXlsb2FkWydlbmNvdW50ZXJQcm92aWRlcnMnXVswXS5wcm92aWRlcjtcbiAgICAgICAgICAgIGlmIChmaXJzdFByb3ZpZGVyICYmIGZpcnN0UHJvdmlkZXIudXVpZCkge1xuICAgICAgICAgICAgICAvLyBWZXJ5IHdlaXJkIHdvcmsgYXJvdW5kIGZvciBhbiBpc3N1ZSB3aXRoIHNldHRpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIG5vZGUuY29udHJvbC5zZXRWYWx1ZShmaXJzdFByb3ZpZGVyLnV1aWQpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUoZmlyc3RQcm92aWRlci51dWlkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlID0gZmlyc3RQcm92aWRlci51dWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW5jb3VudGVyTG9jYXRpb24nOlxuICAgICAgICAgIGlmIChwYXlsb2FkWydsb2NhdGlvbiddICYmIHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZCkge1xuICAgICAgICAgICAgbm9kZS5jb250cm9sLnNldFZhbHVlKHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZCk7XG4gICAgICAgICAgICBub2RlLmluaXRpYWxWYWx1ZSA9IHBheWxvYWRbJ2xvY2F0aW9uJ10udXVpZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm06IEZvcm0pIHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5nZW5lcmF0ZU5vZGVQYXlsb2FkKGZvcm0ucm9vdE5vZGUpO1xuICAgIHRoaXMuc2V0Tm9uRmlsbGVkUGF5bG9hZE1lbWJlcnMoZm9ybSwgcGF5bG9hZCk7XG5cbiAgICBwYXlsb2FkWydvYnMnXSA9IHRoaXMub2JzQWRhcHRlci5nZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm0pIHx8IFtdO1xuXG4gICAgcGF5bG9hZFsnb3JkZXJzJ10gPSB0aGlzLm9yZGVyc0FkYXB0ZXIuZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtKSB8fCBbXTtcblxuICAgIHBheWxvYWRbJ2RpYWdub3NlcyddID1cbiAgICAgIHRoaXMuZGlhZ25vc2VzQWRhcHRlci5nZW5lcmF0ZUZvcm1QYXlsb2FkKGZvcm0pIHx8IFtdO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBnZW5lcmF0ZU5vZGVQYXlsb2FkKHJvb3ROb2RlOiBOb2RlQmFzZSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRFbmNvdW50ZXJOb2Rlcyhyb290Tm9kZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHt9O1xuXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNvbnRyb2wudmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2VuY291bnRlckRhdGV0aW1lJzpcbiAgICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG1vbWVudChub2RlLmNvbnRyb2wudmFsdWUpLnV0Y09mZnNldChcbiAgICAgICAgICAgICAgcm9vdE5vZGUuZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLnV0Y09mZnNldCB8fCAnKzAzMDAnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcGF5bG9hZFsnZW5jb3VudGVyRGF0ZXRpbWUnXSA9IGRhdGVWYWx1ZS5mb3JtYXQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VuY291bnRlclByb3ZpZGVyJzpcbiAgICAgICAgICAgIGlmIChub2RlLmNvbnRyb2wudmFsdWUgJiYgbm9kZS5jb250cm9sLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBub2RlLmNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgICAgZW5jb3VudGVyUm9sZTogJ2EwYjAzMDUwLWM5OWItMTFlMC05NTcyLTA4MDAyMDBjOWE2NicgLy8gdW5rbm93biBwcm92aWRlciByb2xlIGluIHRoZSBlbmNvdW50ZXIgYXMgZGVmYXVsdFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcGF5bG9hZFsnZW5jb3VudGVyUHJvdmlkZXJzJ10gPSBwcm92aWRlcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlbmNvdW50ZXJMb2NhdGlvbic6XG4gICAgICAgICAgICBwYXlsb2FkWydsb2NhdGlvbiddID0gbm9kZS5jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIGdldEVuY291bnRlck5vZGVzKHJvb3ROb2RlOiBOb2RlQmFzZSk6IEFycmF5PE5vZGVCYXNlPiB7XG4gICAgY29uc3QgcmVzdWx0czogQXJyYXk8Tm9kZUJhc2U+ID0gW107XG4gICAgdGhpcy5fZ2V0RW5jb3VudGVyTm9kZXMocm9vdE5vZGUsIHJlc3VsdHMpO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgc2V0Tm9uRmlsbGVkUGF5bG9hZE1lbWJlcnMoZm9ybTogRm9ybSwgcGF5bG9hZCkge1xuICAgIGlmIChmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8ucGF0aWVudFV1aWQpIHtcbiAgICAgIHRoaXMuc2V0UGF5bG9hZFBhdGllbnRVdWlkKHBheWxvYWQsIGZvcm0udmFsdWVQcm9jZXNzaW5nSW5mby5wYXRpZW50VXVpZCk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm0udmFsdWVQcm9jZXNzaW5nSW5mby52aXNpdFV1aWQpIHtcbiAgICAgIHRoaXMuc2V0UGF5bG9hZFZpc2l0VXVpZChwYXlsb2FkLCBmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8udmlzaXRVdWlkKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclR5cGVVdWlkKSB7XG4gICAgICB0aGlzLnNldFBheWxvYWRFbmNvdW50ZXJUeXBlVXVpZChcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclR5cGVVdWlkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGF5bG9hZC5lbmNvdW50ZXJEYXRldGltZSkge1xuICAgICAgdGhpcy5zZXRQYXlsb2FkRW5jb3VudGVyRGF0ZShcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlckRhdGV0aW1lID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLnV0Y09mZnNldFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmZvcm1VdWlkKSB7XG4gICAgICB0aGlzLnNldFBheWxvYWRGb3JtVXVpZChwYXlsb2FkLCBmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8uZm9ybVV1aWQpO1xuICAgIH1cblxuICAgIGlmIChmb3JtLnZhbHVlUHJvY2Vzc2luZ0luZm8uZW5jb3VudGVyVXVpZCkge1xuICAgICAgdGhpcy5zZXRQYXlsb2FkRW5jb3VudGVyVXVpZChcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmVuY291bnRlclV1aWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGF5bG9hZFBhdGllbnRVdWlkKHBheWxvYWQsIHBhdGllbnRVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWydwYXRpZW50J10gPSBwYXRpZW50VXVpZDtcbiAgfVxuXG4gIHNldFBheWxvYWRWaXNpdFV1aWQocGF5bG9hZCwgdmlzaXRVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWyd2aXNpdCddID0gdmlzaXRVdWlkO1xuICB9XG5cbiAgc2V0UGF5bG9hZEVuY291bnRlclR5cGVVdWlkKHBheWxvYWQsIGVuY291bnRlclR5cGVVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWydlbmNvdW50ZXJUeXBlJ10gPSBlbmNvdW50ZXJUeXBlVXVpZDtcbiAgfVxuXG4gIHNldFBheWxvYWRFbmNvdW50ZXJEYXRlKFxuICAgIHBheWxvYWQsXG4gICAgZW5jb3VudGVyRGF0ZXRpbWU6IHN0cmluZyxcbiAgICB1dGNPZmZzZXQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSBtb21lbnQoZW5jb3VudGVyRGF0ZXRpbWUpLnV0Y09mZnNldCh1dGNPZmZzZXQgfHwgJyswMzAwJyk7XG4gICAgcGF5bG9hZFsnZW5jb3VudGVyRGF0ZXRpbWUnXSA9IGRhdGVWYWx1ZS5mb3JtYXQoKTtcbiAgfVxuXG4gIHNldFBheWxvYWRGb3JtVXVpZChwYXlsb2FkLCBmb3JtVXVpZDogc3RyaW5nKSB7XG4gICAgcGF5bG9hZFsnZm9ybSddID0gZm9ybVV1aWQ7XG4gIH1cblxuICBzZXRQYXlsb2FkRW5jb3VudGVyVXVpZChwYXlsb2FkLCBlbmNvdW50ZXJVdWlkOiBzdHJpbmcpIHtcbiAgICBwYXlsb2FkWyd1dWlkJ10gPSBlbmNvdW50ZXJVdWlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RW5jb3VudGVyTm9kZXMocm9vdE5vZGU6IE5vZGVCYXNlLCBhcnJheTogQXJyYXk8Tm9kZUJhc2U+KSB7XG4gICAgaWYgKHRoaXMuX2lzRW5jb3VudGVyTm9kZShyb290Tm9kZSkpIHtcbiAgICAgIGFycmF5LnB1c2gocm9vdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIEdyb3VwTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHJvb3ROb2RlIGFzIEdyb3VwTm9kZTtcblxuICAgICAgZm9yIChjb25zdCBvIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5bb10gaW5zdGFuY2VvZiBOb2RlQmFzZSkge1xuICAgICAgICAgIHRoaXMuX2dldEVuY291bnRlck5vZGVzKG5vZGUuY2hpbGRyZW5bb10sIGFycmF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIEFycmF5Tm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHJvb3ROb2RlIGFzIEFycmF5Tm9kZTtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgdGhpcy5fZ2V0RW5jb3VudGVyTm9kZXMoY2hpbGQsIGFycmF5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRW5jb3VudGVyTm9kZShub2RlOiBOb2RlQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzICYmXG4gICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2VuY291bnRlckRhdGV0aW1lJyB8fFxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy50eXBlID09PSAnZW5jb3VudGVyUHJvdmlkZXInIHx8XG4gICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdlbmNvdW50ZXJMb2NhdGlvbicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|