@ampath-kenya/ngx-openmrs-formentry 3.0.0-alpha9 → 3.0.0-ampath.1-beta.0
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/abstract-controls-extension/afe-control-type.d.ts +1 -1
- package/abstract-controls-extension/afe-form-array.d.ts +2 -3
- package/abstract-controls-extension/afe-form-control.d.ts +1 -1
- package/abstract-controls-extension/afe-form-group.d.ts +1 -1
- package/ampath-kenya-ngx-openmrs-formentry.d.ts +48 -74
- package/ampath-kenya-ngx-openmrs-formentry.metadata.json +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +5729 -9376
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -16
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
- package/change-tracking/control-relation.d.ts +4 -4
- package/change-tracking/control-relations.d.ts +3 -3
- package/components/check-box/checkbox.component.d.ts +1 -2
- package/components/date-time-picker/date-time-picker.component.d.ts +1 -2
- package/components/date-time-picker/date-time-picker.module.d.ts +0 -3
- package/components/file-upload/file-upload.component.d.ts +25 -0
- package/components/file-upload/file-upload.module.d.ts +2 -0
- package/components/file-upload/secure.pipe.d.ts +5 -5
- package/components/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +52 -0
- package/components/{ngx-datetime-picker/ngx-datetime-picker.module.d.ts → ngx-date-time-picker/ngx-date-time-picker.module.d.ts} +0 -3
- package/components/ngx-time-picker/ngx-time-picker.component.d.ts +13 -0
- package/components/ngx-time-picker/ngx-time-picker.module.d.ts +2 -0
- package/components/{ngx-remote-select/ngx-remote-select.component.d.ts → remote-select/remote-select.component.d.ts} +8 -12
- package/components/remote-select/remote-select.module.d.ts +2 -0
- package/components/select/diacritics.d.ts +844 -0
- package/components/select/option-list.d.ts +36 -0
- package/components/select/option.d.ts +17 -0
- package/components/select/select-dropdown.component.d.ts +40 -0
- package/components/select/select-dropdown.component.style.d.ts +1 -0
- package/components/select/select.component.d.ts +96 -108
- package/components/select/select.component.style.d.ts +1 -0
- package/encounter-viewer/display-controls/file-preview.component.d.ts +25 -0
- package/encounter-viewer/display-controls/question-control.component.d.ts +15 -0
- package/encounter-viewer/display-controls/remote-answer.component.d.ts +17 -0
- package/encounter-viewer/encounter-container/encounter-container.component.d.ts +15 -0
- package/encounter-viewer/encounter-pdf-viewer.service.d.ts +27 -0
- package/encounter-viewer/encounter-view/encounter-viewer.component.d.ts +30 -0
- package/encounter-viewer/encounter-viewer.module.d.ts +2 -0
- package/encounter-viewer/encounter-viewer.service.d.ts +16 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-array.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-control.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-group.js +2 -1
- package/esm2015/abstract-controls-extension/control-extensions.js +2 -1
- package/esm2015/abstract-controls-extension/index.js +2 -1
- package/esm2015/abstract-controls-extension/value-change.listener.js +2 -2
- package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +40 -65
- package/esm2015/change-tracking/control-relation.js +2 -1
- package/esm2015/change-tracking/control-relations.js +2 -1
- package/esm2015/components/afe-ng-select.component.js +3 -2
- package/esm2015/components/appointments-overview/appointments-overview.component.js +78 -33
- package/esm2015/components/check-box/checkbox.component.js +24 -3
- package/esm2015/components/check-box/checkbox.module.js +3 -2
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +93 -4
- package/esm2015/components/date-time-picker/date-time-picker.component.js +109 -5
- package/esm2015/components/date-time-picker/date-time-picker.module.js +3 -2
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +13 -5
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +3 -2
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +51 -4
- package/esm2015/components/file-upload/file-upload.component.js +130 -0
- package/esm2015/components/file-upload/file-upload.module.js +28 -0
- package/esm2015/components/file-upload/secure.pipe.js +5 -3
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +259 -0
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +43 -0
- package/esm2015/components/ngx-time-picker/ngx-time-picker.component.js +78 -0
- package/esm2015/components/ngx-time-picker/ngx-time-picker.module.js +16 -0
- package/esm2015/components/remote-select/remote-select.component.js +171 -0
- package/esm2015/components/remote-select/remote-select.module.js +18 -0
- package/esm2015/components/select/diacritics.js +856 -0
- package/esm2015/components/select/option-list.js +180 -0
- package/esm2015/components/select/option.js +30 -0
- package/esm2015/components/select/select-dropdown.component.js +162 -0
- package/esm2015/components/select/select-dropdown.component.style.js +59 -0
- package/esm2015/components/select/select.component.js +493 -216
- package/esm2015/components/select/select.component.style.js +102 -0
- package/esm2015/components/select/select.module.js +11 -24
- package/esm2015/encounter-viewer/display-controls/file-preview.component.js +111 -0
- package/esm2015/encounter-viewer/display-controls/question-control.component.js +94 -0
- package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +81 -0
- package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +50 -0
- package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +437 -0
- package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +301 -0
- package/esm2015/encounter-viewer/encounter-viewer.module.js +36 -0
- package/esm2015/encounter-viewer/encounter-viewer.service.js +162 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +2 -1
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -2
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +2 -1
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +2 -1
- package/esm2015/form-entry/data-sources/data-sources.js +5 -3
- package/esm2015/form-entry/data-sources/dummy-data-source.js +2 -1
- package/esm2015/form-entry/directives/historical-value-directive.js +4 -2
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +20 -4
- package/esm2015/form-entry/expression-runner/expression-runner.js +13 -16
- package/esm2015/form-entry/form-entry.module.js +29 -25
- package/esm2015/form-entry/form-factory/control-relations.factory.js +4 -2
- package/esm2015/form-entry/form-factory/form-control.service.js +4 -2
- package/esm2015/form-entry/form-factory/form-node.js +2 -4
- package/esm2015/form-entry/form-factory/form.factory.js +4 -2
- package/esm2015/form-entry/form-factory/form.js +2 -1
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +4 -2
- package/esm2015/form-entry/form-factory/question.factory.js +158 -23
- package/esm2015/form-entry/form-factory/show-messages.factory.js +4 -2
- package/esm2015/form-entry/form-factory/validation.factory.js +4 -2
- package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +8 -12
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +458 -9
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +4 -2
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +2 -5
- package/esm2015/form-entry/helpers/js-expression-helper.js +2 -5
- package/esm2015/form-entry/question-models/checkbox.model.js +2 -1
- package/esm2015/form-entry/question-models/conditional-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/date-question.js +3 -1
- package/esm2015/form-entry/question-models/date-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/decimal-point-validation.model.js +20 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +2 -1
- package/esm2015/form-entry/question-models/group-question.js +2 -1
- package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +2 -1
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/time-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -2
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/max-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/min-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/models.js +2 -1
- package/esm2015/form-entry/question-models/multi-select-question.js +2 -1
- package/esm2015/form-entry/question-models/pair.model.js +2 -1
- package/esm2015/form-entry/question-models/question-base.js +2 -1
- package/esm2015/form-entry/question-models/rendering-type.js +2 -1
- package/esm2015/form-entry/question-models/repeating-question.js +2 -1
- package/esm2015/form-entry/question-models/select-option.js +2 -1
- package/esm2015/form-entry/question-models/select-question.js +2 -1
- package/esm2015/form-entry/question-models/test-order-question.js +2 -1
- package/esm2015/form-entry/question-models/text-area-input-question.js +2 -1
- package/esm2015/form-entry/question-models/text-input-question.js +2 -1
- package/esm2015/form-entry/question-models/time-question.js +11 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +2 -1
- package/esm2015/form-entry/question-models/validation.model.js +2 -1
- package/esm2015/form-entry/services/debug-mode.service.js +4 -2
- package/esm2015/form-entry/services/form-errors.service.js +3 -2
- package/esm2015/form-entry/services/form-schema-compiler.service.js +4 -2
- package/esm2015/form-entry/services/historical-encounter-data.service.js +4 -2
- package/esm2015/form-entry/utils/messages.js +2 -1
- package/esm2015/form-entry/validators/conditional-answered.validator.js +2 -1
- package/esm2015/form-entry/validators/conditional-required.validator.js +2 -1
- package/esm2015/form-entry/validators/date.validator.js +2 -1
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +2 -1
- package/esm2015/form-entry/validators/js-expression.validator.js +2 -1
- package/esm2015/form-entry/validators/max-date.validator.js +2 -1
- package/esm2015/form-entry/validators/max.validator.js +2 -1
- package/esm2015/form-entry/validators/min-date.validator.js +2 -1
- package/esm2015/form-entry/validators/min.validator.js +2 -1
- package/esm2015/form-entry/validators/required.validator.js +2 -1
- package/esm2015/form-entry/validators/validations.js +2 -1
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +5 -3
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +5 -11
- package/esm2015/form-entry/value-adapters/obs.adapter.js +5 -6
- package/esm2015/form-entry/value-adapters/order.adapter.js +3 -2
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +8 -3
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -2
- package/esm2015/public_api.js +52 -2
- package/esm2015/shared.module.js +3 -2
- package/esm5/abstract-controls-extension/afe-control-type.js +9 -0
- package/esm5/abstract-controls-extension/afe-form-array.js +99 -0
- package/esm5/abstract-controls-extension/afe-form-control.js +97 -0
- package/esm5/abstract-controls-extension/afe-form-group.js +71 -0
- package/esm5/abstract-controls-extension/control-extensions.js +6 -0
- package/esm5/abstract-controls-extension/index.js +6 -0
- package/esm5/abstract-controls-extension/value-change.listener.js +2 -0
- package/esm5/ampath-kenya-ngx-openmrs-formentry.js +45 -0
- package/esm5/change-tracking/control-relation.js +60 -0
- package/esm5/change-tracking/control-relations.js +47 -0
- package/esm5/components/afe-ng-select.component.js +88 -0
- package/esm5/components/appointments-overview/appointments-overview.component.js +127 -0
- package/esm5/components/check-box/checkbox.component.js +89 -0
- package/esm5/components/check-box/checkbox.module.js +19 -0
- package/esm5/components/date-time-picker/date-picker/date-picker.component.js +188 -0
- package/esm5/components/date-time-picker/date-time-picker.component.js +113 -0
- package/esm5/components/date-time-picker/date-time-picker.module.js +39 -0
- package/esm5/components/date-time-picker/picker-modal/modal.component.js +34 -0
- package/esm5/components/date-time-picker/pipes/moment.pipe.js +18 -0
- package/esm5/components/date-time-picker/time-picker/time-picker.component.js +119 -0
- package/esm5/components/file-upload/file-upload.component.js +128 -0
- package/esm5/components/file-upload/file-upload.module.js +32 -0
- package/esm5/components/file-upload/secure.pipe.js +107 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +221 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +47 -0
- package/esm5/components/ngx-time-picker/ngx-time-picker.component.js +74 -0
- package/esm5/components/ngx-time-picker/ngx-time-picker.module.js +20 -0
- package/esm5/components/remote-select/remote-select.component.js +165 -0
- package/esm5/components/remote-select/remote-select.module.js +22 -0
- package/esm5/components/select/diacritics.js +861 -0
- package/esm5/components/select/option-list.js +225 -0
- package/esm5/components/select/option.js +32 -0
- package/esm5/components/select/select-dropdown.component.js +132 -0
- package/esm5/components/select/select-dropdown.component.style.js +3 -0
- package/esm5/components/select/select.component.js +457 -0
- package/esm5/components/select/select.component.style.js +3 -0
- package/esm5/components/select/select.module.js +20 -0
- package/esm5/encounter-viewer/display-controls/file-preview.component.js +111 -0
- package/esm5/encounter-viewer/display-controls/question-control.component.js +106 -0
- package/esm5/encounter-viewer/display-controls/remote-answer.component.js +88 -0
- package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +47 -0
- package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +523 -0
- package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +187 -0
- package/esm5/encounter-viewer/encounter-viewer.module.js +40 -0
- package/esm5/encounter-viewer/encounter-viewer.service.js +167 -0
- package/esm5/form-entry/control-alerts/alert-helpers.js +45 -0
- package/esm5/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm5/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +38 -0
- package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +45 -0
- package/esm5/form-entry/data-sources/data-sources.js +39 -0
- package/esm5/form-entry/data-sources/dummy-data-source.js +107 -0
- package/esm5/form-entry/directives/historical-value-directive.js +74 -0
- package/esm5/form-entry/error-renderer/error-renderer.component.js +64 -0
- package/esm5/form-entry/expression-runner/expression-runner.js +159 -0
- package/esm5/form-entry/form-entry.module.js +111 -0
- package/esm5/form-entry/form-factory/control-relations.factory.js +245 -0
- package/esm5/form-entry/form-factory/form-control.service.js +122 -0
- package/esm5/form-entry/form-factory/form-node.js +117 -0
- package/esm5/form-entry/form-factory/form.factory.js +138 -0
- package/esm5/form-entry/form-factory/form.js +214 -0
- package/esm5/form-entry/form-factory/hiders-disablers.factory.js +70 -0
- package/esm5/form-entry/form-factory/question.factory.js +980 -0
- package/esm5/form-entry/form-factory/show-messages.factory.js +34 -0
- package/esm5/form-entry/form-factory/validation.factory.js +191 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.css.js +3 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.js +219 -0
- package/esm5/form-entry/helpers/historical-expression-helper-service.js +43 -0
- package/esm5/form-entry/helpers/historical-field-helper-service.js +37 -0
- package/esm5/form-entry/helpers/js-expression-helper.js +243 -0
- package/esm5/form-entry/question-models/checkbox.model.js +17 -0
- package/esm5/form-entry/question-models/conditional-validation.model.js +15 -0
- package/esm5/form-entry/question-models/date-question.js +19 -0
- package/esm5/form-entry/question-models/date-validation.model.js +16 -0
- package/esm5/form-entry/question-models/decimal-point-validation.model.js +22 -0
- package/esm5/form-entry/question-models/file-upload-question.js +19 -0
- package/esm5/form-entry/question-models/group-question.js +18 -0
- package/esm5/form-entry/question-models/interfaces/base-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm5/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/nested-questions.js +12 -0
- package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm5/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/time-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
- package/esm5/form-entry/question-models/js-expression-validation.model.js +14 -0
- package/esm5/form-entry/question-models/max-validation.model.js +15 -0
- package/esm5/form-entry/question-models/min-validation.model.js +15 -0
- package/esm5/form-entry/question-models/models.js +13 -0
- package/esm5/form-entry/question-models/multi-select-question.js +17 -0
- package/esm5/form-entry/question-models/pair.model.js +10 -0
- package/esm5/form-entry/question-models/question-base.js +27 -0
- package/esm5/form-entry/question-models/rendering-type.js +10 -0
- package/esm5/form-entry/question-models/repeating-question.js +17 -0
- package/esm5/form-entry/question-models/select-option.js +10 -0
- package/esm5/form-entry/question-models/select-question.js +18 -0
- package/esm5/form-entry/question-models/test-order-question.js +21 -0
- package/esm5/form-entry/question-models/text-area-input-question.js +19 -0
- package/esm5/form-entry/question-models/text-input-question.js +16 -0
- package/esm5/form-entry/question-models/time-question.js +16 -0
- package/esm5/form-entry/question-models/ui-select-question.js +17 -0
- package/esm5/form-entry/question-models/validation.model.js +10 -0
- package/esm5/form-entry/services/debug-mode.service.js +26 -0
- package/esm5/form-entry/services/form-errors.service.js +21 -0
- package/esm5/form-entry/services/form-schema-compiler.service.js +254 -0
- package/esm5/form-entry/services/historical-encounter-data.service.js +180 -0
- package/esm5/form-entry/utils/messages.js +17 -0
- package/esm5/form-entry/validators/conditional-answered.validator.js +50 -0
- package/esm5/form-entry/validators/conditional-required.validator.js +44 -0
- package/esm5/form-entry/validators/date.validator.js +22 -0
- package/esm5/form-entry/validators/future-date-restriction.validator.js +25 -0
- package/esm5/form-entry/validators/js-expression.validator.js +30 -0
- package/esm5/form-entry/validators/max-date.validator.js +28 -0
- package/esm5/form-entry/validators/max.validator.js +22 -0
- package/esm5/form-entry/validators/min-date.validator.js +28 -0
- package/esm5/form-entry/validators/min.validator.js +22 -0
- package/esm5/form-entry/validators/required.validator.js +16 -0
- package/esm5/form-entry/validators/validations.js +9 -0
- package/esm5/form-entry/value-adapters/encounter.adapter.js +178 -0
- package/esm5/form-entry/value-adapters/obs-adapter-helper.js +509 -0
- package/esm5/form-entry/value-adapters/obs.adapter.js +737 -0
- package/esm5/form-entry/value-adapters/order.adapter.js +227 -0
- package/esm5/form-entry/value-adapters/person-attribute.adapter.js +96 -0
- package/esm5/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm5/public_api.js +52 -0
- package/esm5/shared.module.js +20 -0
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +5093 -6889
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10737 -0
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/form-entry/data-sources/data-sources.d.ts +1 -1
- package/form-entry/directives/historical-value-directive.d.ts +2 -2
- package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
- package/form-entry/expression-runner/expression-runner.d.ts +6 -6
- package/form-entry/form-factory/form-control.service.d.ts +3 -3
- package/form-entry/form-factory/form-node.d.ts +9 -10
- package/form-entry/form-factory/form.d.ts +6 -7
- package/form-entry/form-factory/question.factory.d.ts +7 -1
- package/form-entry/form-factory/validation.factory.d.ts +10 -10
- package/form-entry/form-renderer/form-renderer.component.css.d.ts +1 -1
- package/form-entry/form-renderer/form-renderer.component.d.ts +4 -6
- package/form-entry/helpers/js-expression-helper.d.ts +1 -1
- package/form-entry/question-models/date-question.d.ts +2 -0
- package/form-entry/question-models/decimal-point-validation.model.d.ts +10 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +1 -0
- package/form-entry/question-models/interfaces/time-question-options.d.ts +3 -0
- package/form-entry/question-models/question-base.d.ts +4 -0
- package/form-entry/question-models/rendering-type.d.ts +1 -1
- package/form-entry/question-models/time-question.d.ts +5 -0
- package/form-entry/services/form-errors.service.d.ts +2 -1
- package/form-entry/services/form-schema-compiler.service.d.ts +16 -16
- package/form-entry/services/historical-encounter-data.service.d.ts +3 -3
- package/form-entry/utils/messages.d.ts +9 -9
- package/form-entry/value-adapters/encounter.adapter.d.ts +2 -2
- package/form-entry/value-adapters/order.adapter.d.ts +9 -9
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +1 -1
- package/package.json +18 -16
- package/public_api.d.ts +50 -1
- package/components/input/input.directive.d.ts +0 -28
- package/components/input/input.module.d.ts +0 -2
- package/components/input/label.component.d.ts +0 -87
- package/components/input/text-area.directive.d.ts +0 -21
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +0 -13
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +0 -189
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +0 -15
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +0 -73
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +0 -7
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +0 -77
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +0 -139
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +0 -109
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +0 -120
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +0 -141
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +0 -90
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +0 -122
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +0 -152
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +0 -51
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -21
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +0 -8
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +0 -157
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +0 -86
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +0 -7
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +0 -35
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +0 -129
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +0 -93
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +0 -56
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +0 -49
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +0 -70
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +0 -4
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +0 -11
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +0 -2
- package/components/ngx-tabset/components/tab-set.d.ts +0 -15
- package/components/ngx-tabset/components/tab.d.ts +0 -10
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +0 -8
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +0 -11
- package/components/number-input/number-input.component.d.ts +0 -148
- package/components/number-input/number-input.module.d.ts +0 -2
- package/components/select/optgroup.directive.d.ts +0 -3
- package/components/select/option.directive.d.ts +0 -3
- package/esm2015/components/input/input.directive.js +0 -55
- package/esm2015/components/input/input.module.js +0 -29
- package/esm2015/components/input/label.component.js +0 -139
- package/esm2015/components/input/text-area.directive.js +0 -40
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +0 -52
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +0 -28
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +0 -115
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +0 -7
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +0 -346
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +0 -10
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +0 -30
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +0 -149
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +0 -432
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +0 -353
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +0 -362
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +0 -337
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +0 -252
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +0 -379
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +0 -601
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +0 -60
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +0 -69
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +0 -21
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +0 -515
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +0 -154
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +0 -63
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +0 -24
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +0 -83
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +0 -293
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +0 -56
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +0 -208
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +0 -113
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +0 -29
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +0 -228
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +0 -5
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +0 -26
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +0 -119
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +0 -18
- package/esm2015/components/ngx-tabset/components/tab-set.js +0 -67
- package/esm2015/components/ngx-tabset/components/tab.js +0 -38
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +0 -26
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +0 -40
- package/esm2015/components/number-input/number-input.component.js +0 -203
- package/esm2015/components/number-input/number-input.module.js +0 -15
- package/esm2015/components/select/optgroup.directive.js +0 -17
- package/esm2015/components/select/option.directive.js +0 -17
- package/esm2015/form-entry/directives/collapse-animations.js +0 -11
- package/esm2015/form-entry/directives/collapse.directive.js +0 -157
- package/esm2015/form-entry/pipes/time-ago.pipe.js +0 -107
- package/esm2015/lib/index.js +0 -49
- package/form-entry/directives/collapse-animations.d.ts +0 -4
- package/form-entry/directives/collapse.directive.d.ts +0 -42
- package/form-entry/pipes/time-ago.pipe.d.ts +0 -11
- package/lib/index.d.ts +0 -49
- package/styles/ngx-formentry.css +0 -317
- package/styles/picker.min.css +0 -1
|
@@ -0,0 +1,737 @@
|
|
|
1
|
+
import * as tslib_1 from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import 'rxjs';
|
|
4
|
+
import * as _ from 'lodash';
|
|
5
|
+
import { LeafNode, GroupNode } from '../form-factory/form-node';
|
|
6
|
+
import { ObsAdapterHelper } from './obs-adapter-helper';
|
|
7
|
+
var ObsValueAdapter = /** @class */ (function () {
|
|
8
|
+
function ObsValueAdapter(helper) {
|
|
9
|
+
this.helper = helper;
|
|
10
|
+
}
|
|
11
|
+
ObsValueAdapter.prototype.generateFormPayload = function (form) {
|
|
12
|
+
return this.helper.getObsNodePayload(form.rootNode);
|
|
13
|
+
// TODO: Get rid of the section below when the helper is stable.
|
|
14
|
+
// // Traverse to get all nodes
|
|
15
|
+
// let pages = this.traverse(form.rootNode);
|
|
16
|
+
// // Extract actual question nodes
|
|
17
|
+
// let questionNodes = this.getQuestionNodes(pages);
|
|
18
|
+
// // Get obs Payload
|
|
19
|
+
// return this.getObsPayload(questionNodes);
|
|
20
|
+
};
|
|
21
|
+
ObsValueAdapter.prototype.populateForm = function (form, payload) {
|
|
22
|
+
this.helper.setNodeValue(form.rootNode, payload);
|
|
23
|
+
// TODO: Get rid of the section below when the helper is stable.
|
|
24
|
+
// // Traverse to get all nodes
|
|
25
|
+
// let pages = this.traverse(form.rootNode);
|
|
26
|
+
// // Extract actual question nodes
|
|
27
|
+
// let questionNodes = this.getQuestionNodes(pages);
|
|
28
|
+
// // Extract set obs
|
|
29
|
+
// this.setValues(questionNodes, payload);
|
|
30
|
+
};
|
|
31
|
+
// TODO: Get rid of all the functions below as they will not be needed
|
|
32
|
+
// once the helper is stable
|
|
33
|
+
ObsValueAdapter.prototype.setValues = function (nodes, payload, forcegroup) {
|
|
34
|
+
if (nodes) {
|
|
35
|
+
var _loop_1 = function (node) {
|
|
36
|
+
if (node instanceof LeafNode) {
|
|
37
|
+
this_1.setObsValue(node, payload);
|
|
38
|
+
if (node.question.enableHistoricalValue &&
|
|
39
|
+
node.initialValue !== undefined) {
|
|
40
|
+
node.question.setHistoricalValue(false);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if ((node.question &&
|
|
44
|
+
node.question.extras &&
|
|
45
|
+
node.question.renderingType === 'group') ||
|
|
46
|
+
forcegroup) {
|
|
47
|
+
var groupObs = _.find(payload, function (o) {
|
|
48
|
+
return (o.concept.uuid === node.question.extras.questionOptions.concept &&
|
|
49
|
+
o.groupMembers);
|
|
50
|
+
});
|
|
51
|
+
if (groupObs) {
|
|
52
|
+
if (node.node) {
|
|
53
|
+
node.node['initialValue'] = groupObs;
|
|
54
|
+
}
|
|
55
|
+
this_1.setValues(node.groupMembers, groupObs.groupMembers);
|
|
56
|
+
}
|
|
57
|
+
if (forcegroup && node.payload) {
|
|
58
|
+
this_1.setValues(node.groupMembers, node.payload.groupMembers);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (node instanceof GroupNode &&
|
|
62
|
+
node.question.extras.type === 'complex-obs') {
|
|
63
|
+
this_1.setComplexObsValue(node, payload);
|
|
64
|
+
}
|
|
65
|
+
else if (node.question &&
|
|
66
|
+
node.question.extras &&
|
|
67
|
+
node.question.renderingType === 'repeating' &&
|
|
68
|
+
!forcegroup) {
|
|
69
|
+
this_1.setRepeatingGroupValues(node, payload);
|
|
70
|
+
node.node.control.updateValueAndValidity();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw new Error('not implemented');
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
var this_1 = this;
|
|
77
|
+
try {
|
|
78
|
+
for (var nodes_1 = tslib_1.__values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
79
|
+
var node = nodes_1_1.value;
|
|
80
|
+
_loop_1(node);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
87
|
+
}
|
|
88
|
+
finally { if (e_1) throw e_1.error; }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
var e_1, _a;
|
|
92
|
+
};
|
|
93
|
+
ObsValueAdapter.prototype.setObsValue = function (node, payload) {
|
|
94
|
+
if ((node.question &&
|
|
95
|
+
node.question.extras &&
|
|
96
|
+
(node.question.extras.type === 'obs' ||
|
|
97
|
+
(node.question.extras.type === 'complex-obs-child' &&
|
|
98
|
+
node.question.extras.questionOptions.obsField === 'value')) &&
|
|
99
|
+
node.question.extras.questionOptions.rendering !== 'multiCheckbox') ||
|
|
100
|
+
node.question.extras.questionOptions.rendering !== 'checkbox' ||
|
|
101
|
+
node.question.extras.questionOptions.rendering !== 'multi-select') {
|
|
102
|
+
var obs = _.find(payload, function (o) {
|
|
103
|
+
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
104
|
+
});
|
|
105
|
+
if (obs) {
|
|
106
|
+
if (obs.value instanceof Object) {
|
|
107
|
+
node.control.setValue(obs.value.uuid);
|
|
108
|
+
node.control.updateValueAndValidity();
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
node.control.setValue(obs.value);
|
|
112
|
+
node.control.updateValueAndValidity();
|
|
113
|
+
}
|
|
114
|
+
node['initialValue'] = { obsUuid: obs.uuid, value: obs.value };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
var multiObs = _.filter(payload, function (o) {
|
|
119
|
+
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
120
|
+
});
|
|
121
|
+
if (multiObs && multiObs.length > 0) {
|
|
122
|
+
node.control.setValue(this.getMultiselectValues(multiObs));
|
|
123
|
+
node.control.updateValueAndValidity();
|
|
124
|
+
node['initialValue'] = multiObs;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
ObsValueAdapter.prototype.setComplexObsValue = function (node, payload) {
|
|
129
|
+
var valueField;
|
|
130
|
+
var dateField;
|
|
131
|
+
// tslint:disable-next-line:forin
|
|
132
|
+
for (var o in node.children) {
|
|
133
|
+
if (node.children[o].question.extras.questionOptions
|
|
134
|
+
.obsField === 'value') {
|
|
135
|
+
valueField = node.children[o];
|
|
136
|
+
}
|
|
137
|
+
if (node.children[o].question.extras.questionOptions
|
|
138
|
+
.obsField === 'obsDatetime') {
|
|
139
|
+
dateField = node.children[o];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// set the usual obs value
|
|
143
|
+
this.setObsValue(valueField, payload);
|
|
144
|
+
// set the obs date
|
|
145
|
+
var obs = _.find(payload, function (o) {
|
|
146
|
+
return o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
147
|
+
});
|
|
148
|
+
if (obs) {
|
|
149
|
+
dateField['initialValue'] = { obsUuid: obs.uuid, value: obs.obsDatetime };
|
|
150
|
+
dateField.control.setValue(obs.obsDatetime);
|
|
151
|
+
dateField.control.updateValueAndValidity();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
ObsValueAdapter.prototype.getMultiselectValues = function (multiObs) {
|
|
155
|
+
var values = [];
|
|
156
|
+
try {
|
|
157
|
+
for (var multiObs_1 = tslib_1.__values(multiObs), multiObs_1_1 = multiObs_1.next(); !multiObs_1_1.done; multiObs_1_1 = multiObs_1.next()) {
|
|
158
|
+
var m = multiObs_1_1.value;
|
|
159
|
+
values.push(m.value.uuid);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
163
|
+
finally {
|
|
164
|
+
try {
|
|
165
|
+
if (multiObs_1_1 && !multiObs_1_1.done && (_a = multiObs_1.return)) _a.call(multiObs_1);
|
|
166
|
+
}
|
|
167
|
+
finally { if (e_2) throw e_2.error; }
|
|
168
|
+
}
|
|
169
|
+
return values;
|
|
170
|
+
var e_2, _a;
|
|
171
|
+
};
|
|
172
|
+
ObsValueAdapter.prototype.setRepeatingGroupValues = function (node, payload) {
|
|
173
|
+
var groupRepeatingObs = _.filter(payload, function (o) {
|
|
174
|
+
var found = o.concept.uuid === node.question.extras.questionOptions.concept;
|
|
175
|
+
var intersect = false;
|
|
176
|
+
if (found && o.groupMembers) {
|
|
177
|
+
var obs = o.groupMembers.map(function (a) {
|
|
178
|
+
return a.concept.uuid;
|
|
179
|
+
});
|
|
180
|
+
var schemaQuestions = node.question.questions.map(function (a) {
|
|
181
|
+
return a.extras.questionOptions.concept;
|
|
182
|
+
});
|
|
183
|
+
intersect = _.intersection(obs, schemaQuestions).length > 0;
|
|
184
|
+
}
|
|
185
|
+
return found && intersect;
|
|
186
|
+
});
|
|
187
|
+
if (groupRepeatingObs.length > 0) {
|
|
188
|
+
node.node['initialValue'] = groupRepeatingObs;
|
|
189
|
+
for (var i = 0; i < groupRepeatingObs.length; i++) {
|
|
190
|
+
node.node.createChildNode();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
var groups = [];
|
|
194
|
+
var index = 0;
|
|
195
|
+
var _loop_2 = function (child) {
|
|
196
|
+
var children = Object.keys(child.children).map(function (key) {
|
|
197
|
+
return child.children[key];
|
|
198
|
+
});
|
|
199
|
+
var groupPayload = groupRepeatingObs[index];
|
|
200
|
+
groups.push({
|
|
201
|
+
question: node.question,
|
|
202
|
+
groupMembers: children,
|
|
203
|
+
payload: groupPayload
|
|
204
|
+
});
|
|
205
|
+
index++;
|
|
206
|
+
};
|
|
207
|
+
try {
|
|
208
|
+
for (var _a = tslib_1.__values(node.node.children), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
209
|
+
var child = _b.value;
|
|
210
|
+
_loop_2(child);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
214
|
+
finally {
|
|
215
|
+
try {
|
|
216
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
217
|
+
}
|
|
218
|
+
finally { if (e_3) throw e_3.error; }
|
|
219
|
+
}
|
|
220
|
+
this.setValues(groups, groupRepeatingObs, true);
|
|
221
|
+
var e_3, _c;
|
|
222
|
+
};
|
|
223
|
+
ObsValueAdapter.prototype.getQuestionNodes = function (pages) {
|
|
224
|
+
var merged = [];
|
|
225
|
+
var arrays = [];
|
|
226
|
+
try {
|
|
227
|
+
for (var pages_1 = tslib_1.__values(pages), pages_1_1 = pages_1.next(); !pages_1_1.done; pages_1_1 = pages_1.next()) {
|
|
228
|
+
var page = pages_1_1.value;
|
|
229
|
+
try {
|
|
230
|
+
for (var _a = tslib_1.__values(page.page), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
231
|
+
var section = _b.value;
|
|
232
|
+
arrays.push(section.section);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
236
|
+
finally {
|
|
237
|
+
try {
|
|
238
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
239
|
+
}
|
|
240
|
+
finally { if (e_4) throw e_4.error; }
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
245
|
+
finally {
|
|
246
|
+
try {
|
|
247
|
+
if (pages_1_1 && !pages_1_1.done && (_d = pages_1.return)) _d.call(pages_1);
|
|
248
|
+
}
|
|
249
|
+
finally { if (e_5) throw e_5.error; }
|
|
250
|
+
}
|
|
251
|
+
return merged.concat.apply([], arrays);
|
|
252
|
+
var e_5, _d, e_4, _c;
|
|
253
|
+
};
|
|
254
|
+
ObsValueAdapter.prototype.repeatingGroup = function (nodes) {
|
|
255
|
+
var toReturn = [];
|
|
256
|
+
try {
|
|
257
|
+
for (var nodes_2 = tslib_1.__values(nodes), nodes_2_1 = nodes_2.next(); !nodes_2_1.done; nodes_2_1 = nodes_2.next()) {
|
|
258
|
+
var node = nodes_2_1.value;
|
|
259
|
+
toReturn.push({
|
|
260
|
+
question: node.question,
|
|
261
|
+
groupMembers: this.traverse(node)
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
266
|
+
finally {
|
|
267
|
+
try {
|
|
268
|
+
if (nodes_2_1 && !nodes_2_1.done && (_a = nodes_2.return)) _a.call(nodes_2);
|
|
269
|
+
}
|
|
270
|
+
finally { if (e_6) throw e_6.error; }
|
|
271
|
+
}
|
|
272
|
+
return toReturn;
|
|
273
|
+
var e_6, _a;
|
|
274
|
+
};
|
|
275
|
+
ObsValueAdapter.prototype.processGroup = function (obs, obsPayload) {
|
|
276
|
+
if (obs.question &&
|
|
277
|
+
obs.question.extras &&
|
|
278
|
+
obs.question.extras.questionOptions.rendering === 'group') {
|
|
279
|
+
var members = _.filter(this.getObsPayload(obs.groupMembers), function (o) {
|
|
280
|
+
return o.value !== '';
|
|
281
|
+
});
|
|
282
|
+
var mappedMembers = members.map(function (a) {
|
|
283
|
+
return a.voided;
|
|
284
|
+
});
|
|
285
|
+
if (members.length > 0 && mappedMembers.every(Boolean)) {
|
|
286
|
+
obsPayload.push({
|
|
287
|
+
uuid: obs.node.initialValue.uuid,
|
|
288
|
+
voided: true
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
else if (members.length > 0) {
|
|
292
|
+
if (obs.node.initialValue) {
|
|
293
|
+
obsPayload.push({
|
|
294
|
+
uuid: obs.node.initialValue.uuid,
|
|
295
|
+
groupMembers: members
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
obsPayload.push({
|
|
300
|
+
concept: obs.question.extras.questionOptions.concept,
|
|
301
|
+
groupMembers: members
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
ObsValueAdapter.prototype.mapInitialGroup = function (group) {
|
|
308
|
+
var current = {};
|
|
309
|
+
try {
|
|
310
|
+
for (var _a = tslib_1.__values(group.groupMembers), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
311
|
+
var member = _b.value;
|
|
312
|
+
var value = '';
|
|
313
|
+
if (member.value instanceof Object) {
|
|
314
|
+
value = member.value.uuid;
|
|
315
|
+
}
|
|
316
|
+
else if (member.value) {
|
|
317
|
+
value = member.value;
|
|
318
|
+
}
|
|
319
|
+
else if (member.groupMembers && member.groupMembers.length > 0) {
|
|
320
|
+
current = this.mapInitialGroup(group);
|
|
321
|
+
}
|
|
322
|
+
current[member.concept.uuid + ':' + value] = value;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
326
|
+
finally {
|
|
327
|
+
try {
|
|
328
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
329
|
+
}
|
|
330
|
+
finally { if (e_7) throw e_7.error; }
|
|
331
|
+
}
|
|
332
|
+
return current;
|
|
333
|
+
var e_7, _c;
|
|
334
|
+
};
|
|
335
|
+
ObsValueAdapter.prototype.mapModelGroup = function (node, value) {
|
|
336
|
+
var current = {};
|
|
337
|
+
for (var key in value) {
|
|
338
|
+
if (value.hasOwnProperty(key)) {
|
|
339
|
+
var groupQuestion = _.find(node.question.questions, {
|
|
340
|
+
key: key
|
|
341
|
+
});
|
|
342
|
+
var modelValue = value[key];
|
|
343
|
+
if (modelValue instanceof Object) {
|
|
344
|
+
}
|
|
345
|
+
else if (modelValue !== '') {
|
|
346
|
+
current[groupQuestion.extras.questionOptions.concept + ':' + modelValue] = modelValue;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return current;
|
|
351
|
+
};
|
|
352
|
+
ObsValueAdapter.prototype.processRepeatingGroups = function (node, obsPayload) {
|
|
353
|
+
var initialValues = [];
|
|
354
|
+
if (node.node.initialValue) {
|
|
355
|
+
try {
|
|
356
|
+
for (var _a = tslib_1.__values(node.node.initialValue), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
357
|
+
var group = _b.value;
|
|
358
|
+
initialValues.push({
|
|
359
|
+
uuid: group.uuid,
|
|
360
|
+
value: this.mapInitialGroup(group)
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
365
|
+
finally {
|
|
366
|
+
try {
|
|
367
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
368
|
+
}
|
|
369
|
+
finally { if (e_8) throw e_8.error; }
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
var repeatingModel = [];
|
|
373
|
+
try {
|
|
374
|
+
for (var _d = tslib_1.__values(node.node.control.value), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
375
|
+
var value = _e.value;
|
|
376
|
+
repeatingModel.push({ value: this.mapModelGroup(node, value) });
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
380
|
+
finally {
|
|
381
|
+
try {
|
|
382
|
+
if (_e && !_e.done && (_f = _d.return)) _f.call(_d);
|
|
383
|
+
}
|
|
384
|
+
finally { if (e_9) throw e_9.error; }
|
|
385
|
+
}
|
|
386
|
+
var deleted = this.leftOuterJoinArrays(initialValues, repeatingModel);
|
|
387
|
+
var newObs = this.leftOuterJoinArrays(repeatingModel, initialValues);
|
|
388
|
+
var groupConcept = node.question.extras.questionOptions.concept;
|
|
389
|
+
var newObsPayload = [];
|
|
390
|
+
if (deleted.length > 0) {
|
|
391
|
+
var deletedObs = this.createGroupDeletedObs(deleted);
|
|
392
|
+
try {
|
|
393
|
+
for (var deletedObs_1 = tslib_1.__values(deletedObs), deletedObs_1_1 = deletedObs_1.next(); !deletedObs_1_1.done; deletedObs_1_1 = deletedObs_1.next()) {
|
|
394
|
+
var d = deletedObs_1_1.value;
|
|
395
|
+
obsPayload.push(d);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
399
|
+
finally {
|
|
400
|
+
try {
|
|
401
|
+
if (deletedObs_1_1 && !deletedObs_1_1.done && (_g = deletedObs_1.return)) _g.call(deletedObs_1);
|
|
402
|
+
}
|
|
403
|
+
finally { if (e_10) throw e_10.error; }
|
|
404
|
+
}
|
|
405
|
+
if (newObs.length > 0) {
|
|
406
|
+
newObsPayload = this.createGroupNewObs(newObs, groupConcept);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
newObsPayload = this.createGroupNewObs(newObs, groupConcept);
|
|
411
|
+
}
|
|
412
|
+
if (newObsPayload.length > 0) {
|
|
413
|
+
try {
|
|
414
|
+
for (var newObsPayload_1 = tslib_1.__values(newObsPayload), newObsPayload_1_1 = newObsPayload_1.next(); !newObsPayload_1_1.done; newObsPayload_1_1 = newObsPayload_1.next()) {
|
|
415
|
+
var p = newObsPayload_1_1.value;
|
|
416
|
+
obsPayload.push(p);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
420
|
+
finally {
|
|
421
|
+
try {
|
|
422
|
+
if (newObsPayload_1_1 && !newObsPayload_1_1.done && (_h = newObsPayload_1.return)) _h.call(newObsPayload_1);
|
|
423
|
+
}
|
|
424
|
+
finally { if (e_11) throw e_11.error; }
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
var e_8, _c, e_9, _f, e_10, _g, e_11, _h;
|
|
428
|
+
};
|
|
429
|
+
ObsValueAdapter.prototype.leftOuterJoinArrays = function (first, second) {
|
|
430
|
+
var unique = first.filter(function (obj) {
|
|
431
|
+
return !second.some(function (obj2) {
|
|
432
|
+
return _.isEqual(obj.value, obj2.value);
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
return unique;
|
|
436
|
+
};
|
|
437
|
+
ObsValueAdapter.prototype.createGroupNewObs = function (payload, groupConcept) {
|
|
438
|
+
var newPayload = [];
|
|
439
|
+
try {
|
|
440
|
+
for (var payload_1 = tslib_1.__values(payload), payload_1_1 = payload_1.next(); !payload_1_1.done; payload_1_1 = payload_1.next()) {
|
|
441
|
+
var obs = payload_1_1.value;
|
|
442
|
+
var groupPayload = [];
|
|
443
|
+
/* tslint:disable */
|
|
444
|
+
for (var key in obs.value) {
|
|
445
|
+
var concept = key.split(':')[0];
|
|
446
|
+
var value = key.split(':')[1];
|
|
447
|
+
groupPayload.push({ concept: concept, value: value });
|
|
448
|
+
}
|
|
449
|
+
newPayload.push({ concept: groupConcept, groupMembers: groupPayload });
|
|
450
|
+
/* tslint:enable */
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
454
|
+
finally {
|
|
455
|
+
try {
|
|
456
|
+
if (payload_1_1 && !payload_1_1.done && (_a = payload_1.return)) _a.call(payload_1);
|
|
457
|
+
}
|
|
458
|
+
finally { if (e_12) throw e_12.error; }
|
|
459
|
+
}
|
|
460
|
+
return newPayload;
|
|
461
|
+
var e_12, _a;
|
|
462
|
+
};
|
|
463
|
+
ObsValueAdapter.prototype.createGroupDeletedObs = function (payload) {
|
|
464
|
+
var deletedObs = [];
|
|
465
|
+
try {
|
|
466
|
+
for (var payload_2 = tslib_1.__values(payload), payload_2_1 = payload_2.next(); !payload_2_1.done; payload_2_1 = payload_2.next()) {
|
|
467
|
+
var d = payload_2_1.value;
|
|
468
|
+
deletedObs.push({ uuid: d.uuid, voided: true });
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
472
|
+
finally {
|
|
473
|
+
try {
|
|
474
|
+
if (payload_2_1 && !payload_2_1.done && (_a = payload_2.return)) _a.call(payload_2);
|
|
475
|
+
}
|
|
476
|
+
finally { if (e_13) throw e_13.error; }
|
|
477
|
+
}
|
|
478
|
+
return deletedObs;
|
|
479
|
+
var e_13, _a;
|
|
480
|
+
};
|
|
481
|
+
ObsValueAdapter.prototype.getExactTime = function (datetime) {
|
|
482
|
+
return datetime.substring(0, 19).replace('T', ' ');
|
|
483
|
+
};
|
|
484
|
+
ObsValueAdapter.prototype.processObs = function (obs, obsPayload) {
|
|
485
|
+
if (obs.control && obs.question.extras) {
|
|
486
|
+
var obsValue = {
|
|
487
|
+
concept: obs.question.extras.questionOptions.concept,
|
|
488
|
+
value: obs.question.extras.questionOptions.rendering === 'date' &&
|
|
489
|
+
!this.isEmpty(obs.control.value)
|
|
490
|
+
? this.getExactTime(obs.control.value)
|
|
491
|
+
: obs.control.value
|
|
492
|
+
};
|
|
493
|
+
if (obs.question.extras.questionOptions.rendering === 'multiCheckbox' ||
|
|
494
|
+
obs.question.extras.questionOptions.rendering === 'checkbox' ||
|
|
495
|
+
obs.question.extras.questionOptions.rendering === 'multi-select') {
|
|
496
|
+
var multis = this.processMultiSelect(obs.question.extras.questionOptions.concept, obs.control.value);
|
|
497
|
+
if (obs.initialValue) {
|
|
498
|
+
var mappedInitial = obs.initialValue.map(function (a) {
|
|
499
|
+
return {
|
|
500
|
+
uuid: a.uuid,
|
|
501
|
+
value: { concept: a.concept.uuid, value: a.value.uuid }
|
|
502
|
+
};
|
|
503
|
+
});
|
|
504
|
+
var mappedCurrent = multis.map(function (a) {
|
|
505
|
+
return { value: a };
|
|
506
|
+
});
|
|
507
|
+
var deletedObs = this.leftOuterJoinArrays(mappedInitial, mappedCurrent);
|
|
508
|
+
var newObs = this.leftOuterJoinArrays(mappedCurrent, mappedInitial);
|
|
509
|
+
this.processDeletedMultiSelectObs(deletedObs, obsPayload);
|
|
510
|
+
this.processNewMultiSelectObs(newObs, obsPayload);
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
this.processNewMultiSelectObs(multis, obsPayload);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
if (obs.initialValue && obs.initialValue.value && obsValue) {
|
|
518
|
+
this.updateOrVoidObs(obsValue, obs.initialValue, obsPayload);
|
|
519
|
+
}
|
|
520
|
+
else if (obsValue.value !== '' && obsValue.value !== null) {
|
|
521
|
+
obsPayload.push(obsValue);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
ObsValueAdapter.prototype.processComplexObs = function (node, obsPayload) {
|
|
527
|
+
var valueField;
|
|
528
|
+
var dateField;
|
|
529
|
+
// tslint:disable-next-line:forin
|
|
530
|
+
for (var o in node.children) {
|
|
531
|
+
if (node.children[o].question.extras.questionOptions
|
|
532
|
+
.obsField === 'value') {
|
|
533
|
+
valueField = node.children[o];
|
|
534
|
+
}
|
|
535
|
+
if (node.children[o].question.extras.questionOptions
|
|
536
|
+
.obsField === 'obsDatetime') {
|
|
537
|
+
dateField = node.children[o];
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (valueField) {
|
|
541
|
+
// process obs as usual
|
|
542
|
+
this.processObs(valueField, obsPayload);
|
|
543
|
+
// obtain the last inserted obs and set the obsDatetime
|
|
544
|
+
var createdPayload = obsPayload.length > 0 ? obsPayload[obsPayload.length - 1] : undefined;
|
|
545
|
+
if (createdPayload &&
|
|
546
|
+
((createdPayload.concept &&
|
|
547
|
+
createdPayload.concept ===
|
|
548
|
+
node.question.extras.questionOptions.concept) ||
|
|
549
|
+
(valueField.initialValue &&
|
|
550
|
+
createdPayload.uuid === valueField.initialValue.obsUuid))) {
|
|
551
|
+
if (dateField.initialValue &&
|
|
552
|
+
dateField.control.value !== dateField.initialValue.value) {
|
|
553
|
+
createdPayload.obsDatetime = dateField.control.value;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
};
|
|
558
|
+
ObsValueAdapter.prototype.processDeletedMultiSelectObs = function (values, obsPayload) {
|
|
559
|
+
try {
|
|
560
|
+
for (var values_1 = tslib_1.__values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
|
|
561
|
+
var value = values_1_1.value;
|
|
562
|
+
obsPayload.push({ uuid: value.uuid, voided: true });
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
566
|
+
finally {
|
|
567
|
+
try {
|
|
568
|
+
if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
|
|
569
|
+
}
|
|
570
|
+
finally { if (e_14) throw e_14.error; }
|
|
571
|
+
}
|
|
572
|
+
var e_14, _a;
|
|
573
|
+
};
|
|
574
|
+
ObsValueAdapter.prototype.processNewMultiSelectObs = function (values, obsPayload) {
|
|
575
|
+
try {
|
|
576
|
+
for (var values_2 = tslib_1.__values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {
|
|
577
|
+
var multi = values_2_1.value;
|
|
578
|
+
if (multi.value instanceof Object) {
|
|
579
|
+
obsPayload.push(multi.value);
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
obsPayload.push(multi);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
587
|
+
finally {
|
|
588
|
+
try {
|
|
589
|
+
if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);
|
|
590
|
+
}
|
|
591
|
+
finally { if (e_15) throw e_15.error; }
|
|
592
|
+
}
|
|
593
|
+
var e_15, _a;
|
|
594
|
+
};
|
|
595
|
+
ObsValueAdapter.prototype.updateOrVoidObs = function (obsValue, initialValue, obsPayload) {
|
|
596
|
+
if (this.isEmpty(obsValue.value) && initialValue.value) {
|
|
597
|
+
obsPayload.push({ uuid: initialValue.obsUuid, voided: true });
|
|
598
|
+
}
|
|
599
|
+
else if (!this.isEmpty(obsValue.value) && initialValue.value) {
|
|
600
|
+
obsPayload.push({ uuid: initialValue.obsUuid, value: obsValue.value });
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
ObsValueAdapter.prototype.isEmpty = function (value) {
|
|
604
|
+
if (value === '' ||
|
|
605
|
+
value === null ||
|
|
606
|
+
value === undefined) {
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
return false;
|
|
610
|
+
};
|
|
611
|
+
ObsValueAdapter.prototype.traverse = function (o, type) {
|
|
612
|
+
var questions = [];
|
|
613
|
+
if (o.children) {
|
|
614
|
+
if (o.children instanceof Array) {
|
|
615
|
+
var returned = this.repeatingGroup(o.children);
|
|
616
|
+
return returned;
|
|
617
|
+
}
|
|
618
|
+
if (o.children instanceof Object) {
|
|
619
|
+
for (var key in o.children) {
|
|
620
|
+
if (o.children.hasOwnProperty(key)) {
|
|
621
|
+
switch (o.children[key].question.renderingType) {
|
|
622
|
+
case 'page':
|
|
623
|
+
var page = this.traverse(o.children[key]);
|
|
624
|
+
questions.push({
|
|
625
|
+
page: page,
|
|
626
|
+
label: o.children[key].question.label
|
|
627
|
+
});
|
|
628
|
+
break;
|
|
629
|
+
case 'section':
|
|
630
|
+
var section = this.traverse(o.children[key]);
|
|
631
|
+
questions.push({
|
|
632
|
+
section: section,
|
|
633
|
+
node: o.children[key],
|
|
634
|
+
label: o.children[key].question.label
|
|
635
|
+
});
|
|
636
|
+
break;
|
|
637
|
+
case 'group':
|
|
638
|
+
var qs = this.traverse(o.children[key]);
|
|
639
|
+
questions.push({
|
|
640
|
+
node: o.children[key],
|
|
641
|
+
question: o.children[key].question,
|
|
642
|
+
groupMembers: qs
|
|
643
|
+
});
|
|
644
|
+
break;
|
|
645
|
+
case 'repeating':
|
|
646
|
+
var rep = this.repeatingGroup(o.children[key].children);
|
|
647
|
+
questions.push({
|
|
648
|
+
node: o.children[key],
|
|
649
|
+
question: o.children[key].question,
|
|
650
|
+
groupMembers: rep
|
|
651
|
+
});
|
|
652
|
+
break;
|
|
653
|
+
default:
|
|
654
|
+
questions.push(o.children[key]);
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
return questions;
|
|
662
|
+
};
|
|
663
|
+
ObsValueAdapter.prototype.processMultiSelect = function (concept, values) {
|
|
664
|
+
var multiSelectObs = [];
|
|
665
|
+
if (values && values !== null) {
|
|
666
|
+
try {
|
|
667
|
+
for (var values_3 = tslib_1.__values(values), values_3_1 = values_3.next(); !values_3_1.done; values_3_1 = values_3.next()) {
|
|
668
|
+
var value = values_3_1.value;
|
|
669
|
+
var obs = {
|
|
670
|
+
concept: concept,
|
|
671
|
+
value: value
|
|
672
|
+
};
|
|
673
|
+
multiSelectObs.push(obs);
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
677
|
+
finally {
|
|
678
|
+
try {
|
|
679
|
+
if (values_3_1 && !values_3_1.done && (_a = values_3.return)) _a.call(values_3);
|
|
680
|
+
}
|
|
681
|
+
finally { if (e_16) throw e_16.error; }
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
return multiSelectObs;
|
|
685
|
+
var e_16, _a;
|
|
686
|
+
};
|
|
687
|
+
ObsValueAdapter.prototype.isObs = function (node) {
|
|
688
|
+
return (node.question.extras.type === 'obs' ||
|
|
689
|
+
node.question.extras.type === 'obsGroup' ||
|
|
690
|
+
node.question.extras.type === 'complex-obs');
|
|
691
|
+
};
|
|
692
|
+
ObsValueAdapter.prototype.getObsPayload = function (nodes) {
|
|
693
|
+
var obsPayload = [];
|
|
694
|
+
try {
|
|
695
|
+
for (var nodes_3 = tslib_1.__values(nodes), nodes_3_1 = nodes_3.next(); !nodes_3_1.done; nodes_3_1 = nodes_3.next()) {
|
|
696
|
+
var node = nodes_3_1.value;
|
|
697
|
+
if (this.isObs(node)) {
|
|
698
|
+
if ((node.groupMembers,
|
|
699
|
+
node.question.extras.questionOptions.rendering === 'group')) {
|
|
700
|
+
this.processGroup(node, obsPayload);
|
|
701
|
+
}
|
|
702
|
+
else if ((node.groupMembers,
|
|
703
|
+
node.question.extras.questionOptions.rendering === 'repeating')) {
|
|
704
|
+
this.processRepeatingGroups(node, obsPayload);
|
|
705
|
+
}
|
|
706
|
+
else if (node instanceof GroupNode &&
|
|
707
|
+
node.question.extras.type === 'complex-obs') {
|
|
708
|
+
this.processComplexObs(node, obsPayload);
|
|
709
|
+
}
|
|
710
|
+
else {
|
|
711
|
+
this.processObs(node, obsPayload);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
catch (e_17_1) { e_17 = { error: e_17_1 }; }
|
|
717
|
+
finally {
|
|
718
|
+
try {
|
|
719
|
+
if (nodes_3_1 && !nodes_3_1.done && (_a = nodes_3.return)) _a.call(nodes_3);
|
|
720
|
+
}
|
|
721
|
+
finally { if (e_17) throw e_17.error; }
|
|
722
|
+
}
|
|
723
|
+
return obsPayload;
|
|
724
|
+
var e_17, _a;
|
|
725
|
+
};
|
|
726
|
+
ObsValueAdapter.decorators = [
|
|
727
|
+
{ type: Injectable },
|
|
728
|
+
];
|
|
729
|
+
/** @nocollapse */
|
|
730
|
+
ObsValueAdapter.ctorParameters = function () { return [
|
|
731
|
+
{ type: ObsAdapterHelper }
|
|
732
|
+
]; };
|
|
733
|
+
return ObsValueAdapter;
|
|
734
|
+
}());
|
|
735
|
+
export { ObsValueAdapter };
|
|
736
|
+
|
|
737
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW1wYXRoLWtlbnlhL25neC1vcGVubXJzLWZvcm1lbnRyeS8iLCJzb3VyY2VzIjpbImZvcm0tZW50cnkvdmFsdWUtYWRhcHRlcnMvb2JzLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxNQUFNLENBQUM7QUFFZCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhEO0lBRUUseUJBQW9CLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQUcsQ0FBQztJQUVoRCw2Q0FBbUIsR0FBbkIsVUFBb0IsSUFBVTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsZ0VBQWdFO1FBQ2hFLGdDQUFnQztRQUNoQyw0Q0FBNEM7UUFDNUMsbUNBQW1DO1FBQ25DLG9EQUFvRDtRQUNwRCxxQkFBcUI7UUFDckIsNENBQTRDO0lBQzlDLENBQUM7SUFFRCxzQ0FBWSxHQUFaLFVBQWEsSUFBVSxFQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRCxnRUFBZ0U7UUFDaEUsZ0NBQWdDO1FBQ2hDLDRDQUE0QztRQUM1QyxtQ0FBbUM7UUFDbkMsb0RBQW9EO1FBQ3BELHFCQUFxQjtRQUNyQiwwQ0FBMEM7SUFDNUMsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSw0QkFBNEI7SUFFNUIsbUNBQVMsR0FBVCxVQUFVLEtBQUssRUFBRSxP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QUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ2hELENBQUM7b0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNSLElBQUksWUFBWSxTQUFTO3dCQUN4QixJQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGFBQy9DLENBQUMsQ0FBQyxDQUFDO3dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzNDLENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQzthQUNGOzs7Ozs7Ozs7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDOztJQUNwQixDQUFDOztnQkE1bEJGLFVBQVU7Ozs7Z0JBRkYsZ0JBQWdCOztJQStsQnpCLHNCQUFDO0NBQUEsQUE3bEJELElBNmxCQztTQTVsQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAncnhqcyc7XG5cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgTGVhZk5vZGUsIEdyb3VwTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtJztcbmltcG9ydCB7IFZhbHVlQWRhcHRlciB9IGZyb20gJy4vdmFsdWUuYWRhcHRlcic7XG5pbXBvcnQgeyBPYnNBZGFwdGVySGVscGVyIH0gZnJvbSAnLi9vYnMtYWRhcHRlci1oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2JzVmFsdWVBZGFwdGVyIGltcGxlbWVudHMgVmFsdWVBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoZWxwZXI6IE9ic0FkYXB0ZXJIZWxwZXIpIHt9XG5cbiAgZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtOiBGb3JtKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmdldE9ic05vZGVQYXlsb2FkKGZvcm0ucm9vdE5vZGUpO1xuICAgIC8vIFRPRE86IEdldCByaWQgb2YgdGhlIHNlY3Rpb24gYmVsb3cgd2hlbiB0aGUgaGVscGVyIGlzIHN0YWJsZS5cbiAgICAvLyAvLyBUcmF2ZXJzZSAgdG8gZ2V0IGFsbCBub2Rlc1xuICAgIC8vIGxldCBwYWdlcyA9IHRoaXMudHJhdmVyc2UoZm9ybS5yb290Tm9kZSk7XG4gICAgLy8gLy8gRXh0cmFjdCBhY3R1YWwgcXVlc3Rpb24gbm9kZXNcbiAgICAvLyBsZXQgcXVlc3Rpb25Ob2RlcyA9IHRoaXMuZ2V0UXVlc3Rpb25Ob2RlcyhwYWdlcyk7XG4gICAgLy8gLy8gR2V0IG9icyBQYXlsb2FkXG4gICAgLy8gcmV0dXJuIHRoaXMuZ2V0T2JzUGF5bG9hZChxdWVzdGlvbk5vZGVzKTtcbiAgfVxuXG4gIHBvcHVsYXRlRm9ybShmb3JtOiBGb3JtLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5oZWxwZXIuc2V0Tm9kZVZhbHVlKGZvcm0ucm9vdE5vZGUsIHBheWxvYWQpO1xuXG4gICAgLy8gVE9ETzogR2V0IHJpZCBvZiB0aGUgc2VjdGlvbiBiZWxvdyB3aGVuIHRoZSBoZWxwZXIgaXMgc3RhYmxlLlxuICAgIC8vIC8vIFRyYXZlcnNlICB0byBnZXQgYWxsIG5vZGVzXG4gICAgLy8gbGV0IHBhZ2VzID0gdGhpcy50cmF2ZXJzZShmb3JtLnJvb3ROb2RlKTtcbiAgICAvLyAvLyBFeHRyYWN0IGFjdHVhbCBxdWVzdGlvbiBub2Rlc1xuICAgIC8vIGxldCBxdWVzdGlvbk5vZGVzID0gdGhpcy5nZXRRdWVzdGlvbk5vZGVzKHBhZ2VzKTtcbiAgICAvLyAvLyBFeHRyYWN0IHNldCBvYnNcbiAgICAvLyB0aGlzLnNldFZhbHVlcyhxdWVzdGlvbk5vZGVzLCBwYXlsb2FkKTtcbiAgfVxuXG4gIC8vIFRPRE86IEdldCByaWQgb2YgYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgYXMgdGhleSB3aWxsIG5vdCBiZSBuZWVkZWRcbiAgLy8gb25jZSB0aGUgaGVscGVyIGlzIHN0YWJsZVxuXG4gIHNldFZhbHVlcyhub2RlcywgcGF5bG9hZD8sIGZvcmNlZ3JvdXA/KSB7XG4gICAgaWYgKG5vZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBMZWFmTm9kZSkge1xuICAgICAgICAgIHRoaXMuc2V0T2JzVmFsdWUobm9kZSwgcGF5bG9hZCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5lbmFibGVIaXN0b3JpY2FsVmFsdWUgJiZcbiAgICAgICAgICAgIG5vZGUuaW5pdGlhbFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uc2V0SGlzdG9yaWNhbFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKG5vZGUucXVlc3Rpb24gJiZcbiAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzICYmXG4gICAgICAgICAgICBub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdncm91cCcpIHx8XG4gICAgICAgICAgZm9yY2Vncm91cFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBncm91cE9icyA9IF8uZmluZChwYXlsb2FkLCAobzogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBvLmNvbmNlcHQudXVpZCA9PT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQgJiZcbiAgICAgICAgICAgICAgby5ncm91cE1lbWJlcnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGdyb3VwT2JzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlKSB7XG4gICAgICAgICAgICAgIG5vZGUubm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBncm91cE9icztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMobm9kZS5ncm91cE1lbWJlcnMsIGdyb3VwT2JzLmdyb3VwTWVtYmVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmb3JjZWdyb3VwICYmIG5vZGUucGF5bG9hZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMobm9kZS5ncm91cE1lbWJlcnMsIG5vZGUucGF5bG9hZC5ncm91cE1lbWJlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlIGluc3RhbmNlb2YgR3JvdXBOb2RlICYmXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2NvbXBsZXgtb2JzJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNldENvbXBsZXhPYnNWYWx1ZShub2RlLCBwYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uICYmXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMgJiZcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdyZXBlYXRpbmcnICYmXG4gICAgICAgICAgIWZvcmNlZ3JvdXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXRSZXBlYXRpbmdHcm91cFZhbHVlcyhub2RlLCBwYXlsb2FkKTtcbiAgICAgICAgICBub2RlLm5vZGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldE9ic1ZhbHVlKG5vZGUsIHBheWxvYWQpIHtcbiAgICBpZiAoXG4gICAgICAobm9kZS5xdWVzdGlvbiAmJlxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ29icycgfHxcbiAgICAgICAgICAobm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2NvbXBsZXgtb2JzLWNoaWxkJyAmJlxuICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm9ic0ZpZWxkID09PSAndmFsdWUnKSkgJiZcbiAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ211bHRpQ2hlY2tib3gnKSB8fFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ2NoZWNrYm94JyB8fFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyAhPT0gJ211bHRpLXNlbGVjdCdcbiAgICApIHtcbiAgICAgIGNvbnN0IG9icyA9IF8uZmluZChwYXlsb2FkLCAobzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvLmNvbmNlcHQudXVpZCA9PT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChvYnMpIHtcbiAgICAgICAgaWYgKG9icy52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgIG5vZGUuY29udHJvbC5zZXRWYWx1ZShvYnMudmFsdWUudXVpZCk7XG4gICAgICAgICAgbm9kZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLmNvbnRyb2wuc2V0VmFsdWUob2JzLnZhbHVlKTtcbiAgICAgICAgICBub2RlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVbJ2luaXRpYWxWYWx1ZSddID0geyBvYnNVdWlkOiBvYnMudXVpZCwgdmFsdWU6IG9icy52YWx1ZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtdWx0aU9icyA9IF8uZmlsdGVyKHBheWxvYWQsIChvOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG8uY29uY2VwdC51dWlkID09PSBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG11bHRpT2JzICYmIG11bHRpT2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9kZS5jb250cm9sLnNldFZhbHVlKHRoaXMuZ2V0TXVsdGlzZWxlY3RWYWx1ZXMobXVsdGlPYnMpKTtcbiAgICAgICAgbm9kZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgbm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBtdWx0aU9icztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDb21wbGV4T2JzVmFsdWUobm9kZSwgcGF5bG9hZCkge1xuICAgIGxldCB2YWx1ZUZpZWxkOiBhbnk7XG4gICAgbGV0IGRhdGVGaWVsZDogYW55O1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXG4gICAgZm9yIChjb25zdCBvIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgKG5vZGUuY2hpbGRyZW5bb10gYXMgTGVhZk5vZGUpLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnNcbiAgICAgICAgICAub2JzRmllbGQgPT09ICd2YWx1ZSdcbiAgICAgICkge1xuICAgICAgICB2YWx1ZUZpZWxkID0gbm9kZS5jaGlsZHJlbltvXTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAobm9kZS5jaGlsZHJlbltvXSBhcyBMZWFmTm9kZSkucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9uc1xuICAgICAgICAgIC5vYnNGaWVsZCA9PT0gJ29ic0RhdGV0aW1lJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGVGaWVsZCA9IG5vZGUuY2hpbGRyZW5bb107XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHNldCB0aGUgdXN1YWwgb2JzIHZhbHVlXG4gICAgdGhpcy5zZXRPYnNWYWx1ZSh2YWx1ZUZpZWxkLCBwYXlsb2FkKTtcblxuICAgIC8vIHNldCB0aGUgb2JzIGRhdGVcbiAgICBjb25zdCBvYnMgPSBfLmZpbmQocGF5bG9hZCwgKG86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIG8uY29uY2VwdC51dWlkID09PSBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdDtcbiAgICB9KTtcblxuICAgIGlmIChvYnMpIHtcbiAgICAgIGRhdGVGaWVsZFsnaW5pdGlhbFZhbHVlJ10gPSB7IG9ic1V1aWQ6IG9icy51dWlkLCB2YWx1ZTogb2JzLm9ic0RhdGV0aW1lIH07XG4gICAgICAoZGF0ZUZpZWxkIGFzIExlYWZOb2RlKS5jb250cm9sLnNldFZhbHVlKG9icy5vYnNEYXRldGltZSk7XG4gICAgICAoZGF0ZUZpZWxkIGFzIExlYWZOb2RlKS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRNdWx0aXNlbGVjdFZhbHVlcyhtdWx0aU9icykge1xuICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbSBvZiBtdWx0aU9icykge1xuICAgICAgdmFsdWVzLnB1c2gobS52YWx1ZS51dWlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHNldFJlcGVhdGluZ0dyb3VwVmFsdWVzKG5vZGUsIHBheWxvYWQpIHtcbiAgICBjb25zdCBncm91cFJlcGVhdGluZ09icyA9IF8uZmlsdGVyKHBheWxvYWQsIChvOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID1cbiAgICAgICAgby5jb25jZXB0LnV1aWQgPT09IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgICAgbGV0IGludGVyc2VjdCA9IGZhbHNlO1xuICAgICAgaWYgKGZvdW5kICYmIG8uZ3JvdXBNZW1iZXJzKSB7XG4gICAgICAgIGNvbnN0IG9icyA9IG8uZ3JvdXBNZW1iZXJzLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhLmNvbmNlcHQudXVpZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NoZW1hUXVlc3Rpb25zID0gbm9kZS5xdWVzdGlvbi5xdWVzdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEuZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlcnNlY3QgPSBfLmludGVyc2VjdGlvbihvYnMsIHNjaGVtYVF1ZXN0aW9ucykubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3VuZCAmJiBpbnRlcnNlY3Q7XG4gICAgfSk7XG4gICAgaWYgKGdyb3VwUmVwZWF0aW5nT2JzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGUubm9kZVsnaW5pdGlhbFZhbHVlJ10gPSBncm91cFJlcGVhdGluZ09icztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBSZXBlYXRpbmdPYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZS5ub2RlLmNyZWF0ZUNoaWxkTm9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBncm91cHMgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5ub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKGNoaWxkLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gY2hpbGQuY2hpbGRyZW5ba2V5XTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZ3JvdXBQYXlsb2FkID0gZ3JvdXBSZXBlYXRpbmdPYnNbaW5kZXhdO1xuICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICBxdWVzdGlvbjogbm9kZS5xdWVzdGlvbixcbiAgICAgICAgZ3JvdXBNZW1iZXJzOiBjaGlsZHJlbixcbiAgICAgICAgcGF5bG9hZDogZ3JvdXBQYXlsb2FkXG4gICAgICB9KTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHRoaXMuc2V0VmFsdWVzKGdyb3VwcywgZ3JvdXBSZXBlYXRpbmdPYnMsIHRydWUpO1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25Ob2RlcyhwYWdlcykge1xuICAgIGNvbnN0IG1lcmdlZCA9IFtdO1xuICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHBhZ2UucGFnZSkge1xuICAgICAgICBhcnJheXMucHVzaChzZWN0aW9uLnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcbiAgfVxuXG4gIHJlcGVhdGluZ0dyb3VwKG5vZGVzKSB7XG4gICAgY29uc3QgdG9SZXR1cm4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIHRvUmV0dXJuLnB1c2goe1xuICAgICAgICBxdWVzdGlvbjogbm9kZS5xdWVzdGlvbixcbiAgICAgICAgZ3JvdXBNZW1iZXJzOiB0aGlzLnRyYXZlcnNlKG5vZGUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG5cbiAgcHJvY2Vzc0dyb3VwKG9icywgb2JzUGF5bG9hZCkge1xuICAgIGlmIChcbiAgICAgIG9icy5xdWVzdGlvbiAmJlxuICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmVuZGVyaW5nID09PSAnZ3JvdXAnXG4gICAgKSB7XG4gICAgICBjb25zdCBtZW1iZXJzID0gXy5maWx0ZXIoXG4gICAgICAgIHRoaXMuZ2V0T2JzUGF5bG9hZChvYnMuZ3JvdXBNZW1iZXJzKSxcbiAgICAgICAgKG86IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlICE9PSAnJztcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWFwcGVkTWVtYmVycyA9IG1lbWJlcnMubWFwKChhKSA9PiB7XG4gICAgICAgIHJldHVybiBhLnZvaWRlZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1lbWJlcnMubGVuZ3RoID4gMCAmJiBtYXBwZWRNZW1iZXJzLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgdXVpZDogb2JzLm5vZGUuaW5pdGlhbFZhbHVlLnV1aWQsXG4gICAgICAgICAgdm9pZGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChtZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9icy5ub2RlLmluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgICB1dWlkOiBvYnMubm9kZS5pbml0aWFsVmFsdWUudXVpZCxcbiAgICAgICAgICAgIGdyb3VwTWVtYmVyczogbWVtYmVyc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaCh7XG4gICAgICAgICAgICBjb25jZXB0OiBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0LFxuICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiBtZW1iZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXBJbml0aWFsR3JvdXAoZ3JvdXApIHtcbiAgICBsZXQgY3VycmVudCA9IHt9O1xuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGdyb3VwLmdyb3VwTWVtYmVycykge1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcbiAgICAgIGlmIChtZW1iZXIudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdmFsdWUgPSBtZW1iZXIudmFsdWUudXVpZDtcbiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLnZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gbWVtYmVyLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChtZW1iZXIuZ3JvdXBNZW1iZXJzICYmIG1lbWJlci5ncm91cE1lbWJlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjdXJyZW50ID0gdGhpcy5tYXBJbml0aWFsR3JvdXAoZ3JvdXApO1xuICAgICAgfVxuICAgICAgY3VycmVudFttZW1iZXIuY29uY2VwdC51dWlkICsgJzonICsgdmFsdWVdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgbWFwTW9kZWxHcm91cChub2RlLCB2YWx1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBRdWVzdGlvbjogYW55ID0gXy5maW5kKG5vZGUucXVlc3Rpb24ucXVlc3Rpb25zLCB7XG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgICBpZiAobW9kZWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgY3VycmVudFtcbiAgICAgICAgICAgIGdyb3VwUXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0ICsgJzonICsgbW9kZWxWYWx1ZVxuICAgICAgICAgIF0gPSBtb2RlbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgcHJvY2Vzc1JlcGVhdGluZ0dyb3Vwcyhub2RlLCBvYnNQYXlsb2FkKSB7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IFtdO1xuICAgIGlmIChub2RlLm5vZGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIG5vZGUubm9kZS5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICB1dWlkOiBncm91cC51dWlkLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLm1hcEluaXRpYWxHcm91cChncm91cClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcGVhdGluZ01vZGVsID0gW107XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBub2RlLm5vZGUuY29udHJvbC52YWx1ZSkge1xuICAgICAgcmVwZWF0aW5nTW9kZWwucHVzaCh7IHZhbHVlOiB0aGlzLm1hcE1vZGVsR3JvdXAobm9kZSwgdmFsdWUpIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZWxldGVkID0gdGhpcy5sZWZ0T3V0ZXJKb2luQXJyYXlzKGluaXRpYWxWYWx1ZXMsIHJlcGVhdGluZ01vZGVsKTtcbiAgICBjb25zdCBuZXdPYnMgPSB0aGlzLmxlZnRPdXRlckpvaW5BcnJheXMocmVwZWF0aW5nTW9kZWwsIGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IGdyb3VwQ29uY2VwdCA9IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0O1xuICAgIGxldCBuZXdPYnNQYXlsb2FkID0gW107XG4gICAgaWYgKGRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVsZXRlZE9icyA9IHRoaXMuY3JlYXRlR3JvdXBEZWxldGVkT2JzKGRlbGV0ZWQpO1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRlbGV0ZWRPYnMpIHtcbiAgICAgICAgb2JzUGF5bG9hZC5wdXNoKGQpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09icy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ld09ic1BheWxvYWQgPSB0aGlzLmNyZWF0ZUdyb3VwTmV3T2JzKG5ld09icywgZ3JvdXBDb25jZXB0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T2JzUGF5bG9hZCA9IHRoaXMuY3JlYXRlR3JvdXBOZXdPYnMobmV3T2JzLCBncm91cENvbmNlcHQpO1xuICAgIH1cblxuICAgIGlmIChuZXdPYnNQYXlsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBuZXdPYnNQYXlsb2FkKSB7XG4gICAgICAgIG9ic1BheWxvYWQucHVzaChwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZWZ0T3V0ZXJKb2luQXJyYXlzKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBjb25zdCB1bmlxdWUgPSBmaXJzdC5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuICFzZWNvbmQuc29tZShmdW5jdGlvbiAob2JqMikge1xuICAgICAgICByZXR1cm4gXy5pc0VxdWFsKG9iai52YWx1ZSwgb2JqMi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcXVlO1xuICB9XG5cbiAgY3JlYXRlR3JvdXBOZXdPYnMocGF5bG9hZCwgZ3JvdXBDb25jZXB0KSB7XG4gICAgY29uc3QgbmV3UGF5bG9hZCA9IFtdO1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHBheWxvYWQpIHtcbiAgICAgIGNvbnN0IGdyb3VwUGF5bG9hZCA9IFtdO1xuICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgIGZvciAobGV0IGtleSBpbiBvYnMudmFsdWUpIHtcbiAgICAgICAgbGV0IGNvbmNlcHQgPSBrZXkuc3BsaXQoJzonKVswXTtcbiAgICAgICAgbGV0IHZhbHVlID0ga2V5LnNwbGl0KCc6JylbMV07XG4gICAgICAgIGdyb3VwUGF5bG9hZC5wdXNoKHsgY29uY2VwdDogY29uY2VwdCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgbmV3UGF5bG9hZC5wdXNoKHsgY29uY2VwdDogZ3JvdXBDb25jZXB0LCBncm91cE1lbWJlcnM6IGdyb3VwUGF5bG9hZCB9KTtcbiAgICAgIC8qIHRzbGludDplbmFibGUgKi9cbiAgICB9XG4gICAgcmV0dXJuIG5ld1BheWxvYWQ7XG4gIH1cblxuICBjcmVhdGVHcm91cERlbGV0ZWRPYnMocGF5bG9hZCkge1xuICAgIGNvbnN0IGRlbGV0ZWRPYnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgcGF5bG9hZCkge1xuICAgICAgZGVsZXRlZE9icy5wdXNoKHsgdXVpZDogZC51dWlkLCB2b2lkZWQ6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkT2JzO1xuICB9XG5cbiAgZ2V0RXhhY3RUaW1lKGRhdGV0aW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGF0ZXRpbWUuc3Vic3RyaW5nKDAsIDE5KS5yZXBsYWNlKCdUJywgJyAnKTtcbiAgfVxuXG4gIHByb2Nlc3NPYnMob2JzLCBvYnNQYXlsb2FkKSB7XG4gICAgaWYgKG9icy5jb250cm9sICYmIG9icy5xdWVzdGlvbi5leHRyYXMpIHtcbiAgICAgIGNvbnN0IG9ic1ZhbHVlID0ge1xuICAgICAgICBjb25jZXB0OiBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5jb25jZXB0LFxuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdkYXRlJyAmJlxuICAgICAgICAgICF0aGlzLmlzRW1wdHkob2JzLmNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0RXhhY3RUaW1lKG9icy5jb250cm9sLnZhbHVlKVxuICAgICAgICAgICAgOiBvYnMuY29udHJvbC52YWx1ZVxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdtdWx0aUNoZWNrYm94JyB8fFxuICAgICAgICBvYnMucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdjaGVja2JveCcgfHxcbiAgICAgICAgb2JzLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmVuZGVyaW5nID09PSAnbXVsdGktc2VsZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG11bHRpcyA9IHRoaXMucHJvY2Vzc011bHRpU2VsZWN0KFxuICAgICAgICAgIG9icy5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmNvbmNlcHQsXG4gICAgICAgICAgb2JzLmNvbnRyb2wudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9icy5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBtYXBwZWRJbml0aWFsID0gb2JzLmluaXRpYWxWYWx1ZS5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHV1aWQ6IGEudXVpZCxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgY29uY2VwdDogYS5jb25jZXB0LnV1aWQsIHZhbHVlOiBhLnZhbHVlLnV1aWQgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRDdXJyZW50ID0gbXVsdGlzLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGEgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkZWxldGVkT2JzID0gdGhpcy5sZWZ0T3V0ZXJKb2luQXJyYXlzKFxuICAgICAgICAgICAgbWFwcGVkSW5pdGlhbCxcbiAgICAgICAgICAgIG1hcHBlZEN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG5ld09icyA9IHRoaXMubGVmdE91dGVySm9pbkFycmF5cyhtYXBwZWRDdXJyZW50LCBtYXBwZWRJbml0aWFsKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEZWxldGVkTXVsdGlTZWxlY3RPYnMoZGVsZXRlZE9icywgb2JzUGF5bG9hZCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzTmV3TXVsdGlTZWxlY3RPYnMobmV3T2JzLCBvYnNQYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NOZXdNdWx0aVNlbGVjdE9icyhtdWx0aXMsIG9ic1BheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob2JzLmluaXRpYWxWYWx1ZSAmJiBvYnMuaW5pdGlhbFZhbHVlLnZhbHVlICYmIG9ic1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPclZvaWRPYnMob2JzVmFsdWUsIG9icy5pbml0aWFsVmFsdWUsIG9ic1BheWxvYWQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9ic1ZhbHVlLnZhbHVlICE9PSAnJyAmJiBvYnNWYWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG9ic1BheWxvYWQucHVzaChvYnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcGxleE9icyhub2RlLCBvYnNQYXlsb2FkKSB7XG4gICAgbGV0IHZhbHVlRmllbGQ6IGFueTtcbiAgICBsZXQgZGF0ZUZpZWxkOiBhbnk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICBmb3IgKGNvbnN0IG8gaW4gbm9kZS5jaGlsZHJlbikge1xuICAgICAgaWYgKFxuICAgICAgICAobm9kZS5jaGlsZHJlbltvXSBhcyBMZWFmTm9kZSkucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9uc1xuICAgICAgICAgIC5vYnNGaWVsZCA9PT0gJ3ZhbHVlJ1xuICAgICAgKSB7XG4gICAgICAgIHZhbHVlRmllbGQgPSBub2RlLmNoaWxkcmVuW29dO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChub2RlLmNoaWxkcmVuW29dIGFzIExlYWZOb2RlKS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zXG4gICAgICAgICAgLm9ic0ZpZWxkID09PSAnb2JzRGF0ZXRpbWUnXG4gICAgICApIHtcbiAgICAgICAgZGF0ZUZpZWxkID0gbm9kZS5jaGlsZHJlbltvXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWVGaWVsZCkge1xuICAgICAgLy8gcHJvY2VzcyBvYnMgYXMgdXN1YWxcbiAgICAgIHRoaXMucHJvY2Vzc09icyh2YWx1ZUZpZWxkLCBvYnNQYXlsb2FkKTtcblxuICAgICAgLy8gb2J0YWluIHRoZSBsYXN0IGluc2VydGVkIG9icyBhbmQgc2V0IHRoZSBvYnNEYXRldGltZVxuICAgICAgY29uc3QgY3JlYXRlZFBheWxvYWQgPVxuICAgICAgICBvYnNQYXlsb2FkLmxlbmd0aCA+IDAgPyBvYnNQYXlsb2FkW29ic1BheWxvYWQubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoXG4gICAgICAgIGNyZWF0ZWRQYXlsb2FkICYmXG4gICAgICAgICgoY3JlYXRlZFBheWxvYWQuY29uY2VwdCAmJlxuICAgICAgICAgIGNyZWF0ZWRQYXlsb2FkLmNvbmNlcHQgPT09XG4gICAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdCkgfHxcbiAgICAgICAgICAodmFsdWVGaWVsZC5pbml0aWFsVmFsdWUgJiZcbiAgICAgICAgICAgIGNyZWF0ZWRQYXlsb2FkLnV1aWQgPT09IHZhbHVlRmllbGQuaW5pdGlhbFZhbHVlLm9ic1V1aWQpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRlRmllbGQuaW5pdGlhbFZhbHVlICYmXG4gICAgICAgICAgZGF0ZUZpZWxkLmNvbnRyb2wudmFsdWUgIT09IGRhdGVGaWVsZC5pbml0aWFsVmFsdWUudmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3JlYXRlZFBheWxvYWQub2JzRGF0ZXRpbWUgPSBkYXRlRmllbGQuY29udHJvbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NEZWxldGVkTXVsdGlTZWxlY3RPYnModmFsdWVzLCBvYnNQYXlsb2FkKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIG9ic1BheWxvYWQucHVzaCh7IHV1aWQ6IHZhbHVlLnV1aWQsIHZvaWRlZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzTmV3TXVsdGlTZWxlY3RPYnModmFsdWVzLCBvYnNQYXlsb2FkKSB7XG4gICAgZm9yIChjb25zdCBtdWx0aSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmIChtdWx0aS52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBvYnNQYXlsb2FkLnB1c2gobXVsdGkudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzUGF5bG9hZC5wdXNoKG11bHRpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVPclZvaWRPYnMob2JzVmFsdWUsIGluaXRpYWxWYWx1ZSwgb2JzUGF5bG9hZCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkob2JzVmFsdWUudmFsdWUpICYmIGluaXRpYWxWYWx1ZS52YWx1ZSkge1xuICAgICAgb2JzUGF5bG9hZC5wdXNoKHsgdXVpZDogaW5pdGlhbFZhbHVlLm9ic1V1aWQsIHZvaWRlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW1wdHkob2JzVmFsdWUudmFsdWUpICYmIGluaXRpYWxWYWx1ZS52YWx1ZSkge1xuICAgICAgb2JzUGF5bG9hZC5wdXNoKHsgdXVpZDogaW5pdGlhbFZhbHVlLm9ic1V1aWQsIHZhbHVlOiBvYnNWYWx1ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBpc0VtcHR5KHZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgLy8gfHwgdmFsdWUgPT09IFtdIHx8XG4gICAgICAvLyB2YWx1ZSA9PT0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cmF2ZXJzZShvLCB0eXBlPykge1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIGlmIChvLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoby5jaGlsZHJlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5yZXBlYXRpbmdHcm91cChvLmNoaWxkcmVuKTtcbiAgICAgICAgcmV0dXJuIHJldHVybmVkO1xuICAgICAgfVxuICAgICAgaWYgKG8uY2hpbGRyZW4gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gby5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChvLmNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMudHJhdmVyc2Uoby5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IG8uY2hpbGRyZW5ba2V5XS5xdWVzdGlvbi5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy50cmF2ZXJzZShvLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBjb25zdCBxcyA9IHRoaXMudHJhdmVyc2Uoby5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbjogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiBxc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdyZXBlYXRpbmcnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcCA9IHRoaXMucmVwZWF0aW5nR3JvdXAoby5jaGlsZHJlbltrZXldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBub2RlOiBvLmNoaWxkcmVuW2tleV0sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbjogby5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBNZW1iZXJzOiByZXBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChvLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG5cbiAgcHJvY2Vzc011bHRpU2VsZWN0KGNvbmNlcHQsIHZhbHVlcykge1xuICAgIGNvbnN0IG11bHRpU2VsZWN0T2JzID0gW107XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG9icyA9IHtcbiAgICAgICAgICBjb25jZXB0OiBjb25jZXB0LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBtdWx0aVNlbGVjdE9icy5wdXNoKG9icyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtdWx0aVNlbGVjdE9icztcbiAgfVxuXG4gIGlzT2JzKG5vZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ29icycgfHxcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdvYnNHcm91cCcgfHxcbiAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdjb21wbGV4LW9icydcbiAgICApO1xuICB9XG5cbiAgZ2V0T2JzUGF5bG9hZChub2Rlcykge1xuICAgIGNvbnN0IG9ic1BheWxvYWQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmICh0aGlzLmlzT2JzKG5vZGUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAobm9kZS5ncm91cE1lbWJlcnMsXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJlbmRlcmluZyA9PT0gJ2dyb3VwJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzR3JvdXAobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKG5vZGUuZ3JvdXBNZW1iZXJzLFxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yZW5kZXJpbmcgPT09ICdyZXBlYXRpbmcnKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NSZXBlYXRpbmdHcm91cHMobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEdyb3VwTm9kZSAmJlxuICAgICAgICAgIChub2RlIGFzIEdyb3VwTm9kZSkucXVlc3Rpb24uZXh0cmFzLnR5cGUgPT09ICdjb21wbGV4LW9icydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzQ29tcGxleE9icyhub2RlLCBvYnNQYXlsb2FkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NPYnMobm9kZSwgb2JzUGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9ic1BheWxvYWQ7XG4gIH1cbn1cbiJdfQ==
|