@ukhomeoffice/cop-react-form-renderer 7.3.2 → 8.0.0-alpha
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/README.md +106 -32
- package/dist/components/CheckYourAnswers/Answer.d.ts +10 -0
- package/dist/components/CheckYourAnswers/CheckYourAnswers.d.ts +35 -0
- package/dist/components/CheckYourAnswers/index.d.ts +2 -0
- package/dist/components/CollectionPage/CollectionPage.d.ts +24 -0
- package/dist/components/CollectionPage/index.d.ts +1 -0
- package/dist/components/CollectionSummary/BannerStrip.d.ts +9 -0
- package/dist/components/CollectionSummary/CollectionSummary.d.ts +53 -0
- package/dist/components/CollectionSummary/Confirmation.d.ts +15 -0
- package/dist/components/CollectionSummary/RenderListView.d.ts +42 -0
- package/dist/components/CollectionSummary/SummaryCard.d.ts +62 -0
- package/dist/components/CollectionSummary/SummaryCardButtons.d.ts +21 -0
- package/dist/components/CollectionSummary/SummaryCardDetails.d.ts +14 -0
- package/dist/components/CollectionSummary/SummaryCardValidationContext.d.ts +9 -0
- package/dist/components/CollectionSummary/index.d.ts +2 -0
- package/dist/components/FormComponent/Collection.d.ts +39 -0
- package/dist/components/FormComponent/Container.d.ts +26 -0
- package/dist/components/FormComponent/FormComponent.d.ts +39 -0
- package/dist/components/FormComponent/helpers/addLabel.d.ts +7 -0
- package/dist/components/FormComponent/helpers/getComponentDisabled.d.ts +2 -0
- package/dist/components/FormComponent/helpers/getComponentError.d.ts +4 -0
- package/dist/components/FormComponent/helpers/getComponentFieldSet.d.ts +2 -0
- package/dist/components/FormComponent/helpers/index.d.ts +5 -0
- package/dist/components/FormComponent/index.d.ts +2 -0
- package/dist/components/FormPage/FormPage.d.ts +36 -0
- package/dist/components/FormPage/index.d.ts +2 -0
- package/dist/components/FormRenderer/FormRenderer.d.ts +39 -0
- package/dist/components/FormRenderer/handlers/cyaAction.d.ts +9 -0
- package/dist/components/FormRenderer/handlers/getPageId.d.ts +8 -0
- package/dist/components/FormRenderer/handlers/index.d.ts +6 -0
- package/dist/components/FormRenderer/handlers/navigate.d.ts +10 -0
- package/dist/components/FormRenderer/handlers/submissionError.d.ts +7 -0
- package/dist/components/FormRenderer/helpers/canActionProceed.d.ts +12 -0
- package/dist/components/FormRenderer/helpers/canCYASubmit.d.ts +10 -0
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.d.ts +2 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.d.ts +51 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.d.ts +179 -0
- package/dist/components/FormRenderer/helpers/getCYA.d.ts +20 -0
- package/dist/components/FormRenderer/helpers/getFormState.d.ts +25 -0
- package/dist/components/FormRenderer/helpers/getNextPageId.d.ts +2 -0
- package/dist/components/FormRenderer/helpers/getPage.d.ts +9 -0
- package/dist/components/FormRenderer/helpers/getRelevantPages.d.ts +2 -0
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.d.ts +2 -0
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.d.ts +10 -0
- package/dist/components/FormRenderer/helpers/index.d.ts +29 -0
- package/dist/components/FormRenderer/index.d.ts +2 -0
- package/dist/components/FormRenderer/onCYAAction.d.ts +6 -0
- package/dist/components/FormRenderer/onPageAction.d.ts +2 -0
- package/dist/components/FormRenderer/onTaskAction.d.ts +2 -0
- package/dist/components/PageActions/ActionButton.d.ts +7 -0
- package/dist/components/PageActions/PageActions.d.ts +7 -0
- package/dist/components/PageActions/index.d.ts +2 -0
- package/dist/components/SummaryList/GroupAction.d.ts +12 -0
- package/dist/components/SummaryList/RowAction.d.ts +12 -0
- package/dist/components/SummaryList/SummaryList.d.ts +28 -0
- package/dist/components/SummaryList/SummaryList.stories.d.ts +10 -0
- package/dist/components/SummaryList/SummaryListHeadingRow.d.ts +7 -0
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.d.ts +16 -0
- package/dist/components/SummaryList/SummaryListRow.d.ts +19 -0
- package/dist/components/SummaryList/SummaryListTitleRow.d.ts +7 -0
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.d.ts +17 -0
- package/dist/components/SummaryList/helpers/getRowActionAttributes.d.ts +17 -0
- package/dist/components/SummaryList/helpers/index.d.ts +2 -0
- package/dist/components/SummaryList/index.d.ts +2 -0
- package/dist/components/TaskList/Task.d.ts +12 -0
- package/dist/components/TaskList/TaskList.d.ts +40 -0
- package/dist/components/TaskList/TaskState.d.ts +6 -0
- package/dist/components/TaskList/index.d.ts +2 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/context/HooksContext/HooksContext.d.ts +23 -0
- package/dist/context/HooksContext/index.d.ts +3 -0
- package/dist/context/ValidationContext/ValidationContext.d.ts +7 -0
- package/dist/context/ValidationContext/index.d.ts +3 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/useAxios.d.ts +2 -0
- package/dist/hooks/useGetRequest.d.ts +12 -0
- package/dist/hooks/useHooks.d.ts +2 -0
- package/dist/hooks/useRefData.d.ts +7 -0
- package/dist/hooks/useValidation.d.ts +2 -0
- package/dist/index.cjs +5 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6124 -81
- package/dist/models/CollectionLabels.d.ts +7 -0
- package/dist/models/ComponentTypes.d.ts +27 -0
- package/dist/models/EventTypes.d.ts +6 -0
- package/dist/models/FormPages.d.ts +6 -0
- package/dist/models/FormTypes.d.ts +10 -0
- package/dist/models/HubFormats.d.ts +5 -0
- package/dist/models/PageAction.d.ts +89 -0
- package/dist/models/TaskStates.d.ts +39 -0
- package/dist/models/index.d.ts +143 -0
- package/dist/setupTests.d.ts +14 -0
- package/dist/utils/CheckYourAnswers/getCYAAction.d.ts +20 -0
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.d.ts +22 -0
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.d.ts +22 -0
- package/dist/utils/CheckYourAnswers/getCYARow.d.ts +26 -0
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.d.ts +17 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.d.ts +2 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.d.ts +23 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.d.ts +2 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.d.ts +11 -0
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.d.ts +3 -0
- package/dist/utils/CheckYourAnswers/index.d.ts +5 -0
- package/dist/utils/CheckYourAnswers/showComponentCYA.d.ts +11 -0
- package/dist/utils/CollectionPage/addCollectionPageEntry.d.ts +12 -0
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.d.ts +13 -0
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.d.ts +13 -0
- package/dist/utils/CollectionPage/getCollectionPageActiveId.d.ts +14 -0
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.d.ts +15 -0
- package/dist/utils/CollectionPage/getCollectionPageData.d.ts +15 -0
- package/dist/utils/CollectionPage/getErrorsForCollection.d.ts +2 -0
- package/dist/utils/CollectionPage/getQuickEditPage.d.ts +40 -0
- package/dist/utils/CollectionPage/index.d.ts +13 -0
- package/dist/utils/CollectionPage/mergeCollectionPages.d.ts +13 -0
- package/dist/utils/CollectionPage/removeCollectionPageEntry.d.ts +11 -0
- package/dist/utils/CollectionPage/setCollectionPageData.d.ts +16 -0
- package/dist/utils/Component/addShowWhen.d.ts +13 -0
- package/dist/utils/Component/applyToComponentTree.d.ts +15 -0
- package/dist/utils/Component/cleanAttributes.d.ts +14 -0
- package/dist/utils/Component/elevateNestedComponents.d.ts +28 -0
- package/dist/utils/Component/getDefaultValue.d.ts +2 -0
- package/dist/utils/Component/getDefaultValueFromConfig.d.ts +2 -0
- package/dist/utils/Component/index.d.ts +12 -0
- package/dist/utils/Component/isEditable.d.ts +3 -0
- package/dist/utils/Component/optionIsSelected.d.ts +10 -0
- package/dist/utils/Component/setupContainerComponentsPath.d.ts +2 -0
- package/dist/utils/Component/showComponent.d.ts +2 -0
- package/dist/utils/Condition/index.d.ts +6 -0
- package/dist/utils/Condition/meetsAllConditions.d.ts +8 -0
- package/dist/utils/Condition/meetsCondition.d.ts +14 -0
- package/dist/utils/Condition/meetsOneCondition.d.ts +8 -0
- package/dist/utils/Condition/setupConditions.d.ts +2 -0
- package/dist/utils/Container/getEditableComponents.d.ts +7 -0
- package/dist/utils/Container/index.d.ts +6 -0
- package/dist/utils/Container/setupNesting.d.ts +2 -0
- package/dist/utils/Container/showContainer.d.ts +8 -0
- package/dist/utils/Data/applyFormula.d.ts +2 -0
- package/dist/utils/Data/deleteValues.d.ts +8 -0
- package/dist/utils/Data/getAutocompleteSource.d.ts +2 -0
- package/dist/utils/Data/getDataPath.d.ts +21 -0
- package/dist/utils/Data/getOptions.d.ts +2 -0
- package/dist/utils/Data/getSourceData.d.ts +17 -0
- package/dist/utils/Data/index.d.ts +15 -0
- package/dist/utils/Data/nestInRefdataOptions.d.ts +10 -0
- package/dist/utils/Data/refDataToOptions.d.ts +8 -0
- package/dist/utils/Data/setDataItem.d.ts +2 -0
- package/dist/utils/Data/setupFormData.d.ts +15 -0
- package/dist/utils/Data/setupRefDataUrlForComponent.d.ts +2 -0
- package/dist/utils/FormPage/applyConditionalProperties.d.ts +8 -0
- package/dist/utils/FormPage/getConditionalText.d.ts +23 -0
- package/dist/utils/FormPage/getFormPage.d.ts +9 -0
- package/dist/utils/FormPage/getFormPages.d.ts +9 -0
- package/dist/utils/FormPage/getPageActions.d.ts +13 -0
- package/dist/utils/FormPage/getParagraphFromText.d.ts +11 -0
- package/dist/utils/FormPage/index.d.ts +10 -0
- package/dist/utils/FormPage/showFormPage.d.ts +8 -0
- package/dist/utils/FormPage/showFormPageCYA.d.ts +8 -0
- package/dist/utils/FormPage/useComponent.d.ts +9 -0
- package/dist/utils/Format/formatData.d.ts +8 -0
- package/dist/utils/Format/formatDataForComponent.d.ts +15 -0
- package/dist/utils/Format/formatDataForForm.d.ts +8 -0
- package/dist/utils/Format/formatDataForPage.d.ts +15 -0
- package/dist/utils/Format/index.d.ts +7 -0
- package/dist/utils/Hub/getFormHub.d.ts +15 -0
- package/dist/utils/Hub/index.d.ts +4 -0
- package/dist/utils/Meta/constants.d.ts +2 -0
- package/dist/utils/Meta/documents/getDocuments.d.ts +2 -0
- package/dist/utils/Meta/documents/index.d.ts +6 -0
- package/dist/utils/Meta/documents/setDocumentsForField.d.ts +2 -0
- package/dist/utils/Meta/index.d.ts +9 -0
- package/dist/utils/Operate/checkValueIsTruthy.d.ts +9 -0
- package/dist/utils/Operate/deleteValueInFormData.d.ts +8 -0
- package/dist/utils/Operate/doesContainValue.d.ts +11 -0
- package/dist/utils/Operate/getFirstOf.d.ts +2 -0
- package/dist/utils/Operate/getIndexOfMatchingValueIn.d.ts +11 -0
- package/dist/utils/Operate/getLength.d.ts +11 -0
- package/dist/utils/Operate/index.d.ts +4 -0
- package/dist/utils/Operate/persistValueInFormData.d.ts +9 -0
- package/dist/utils/Operate/runPageOperations.d.ts +19 -0
- package/dist/utils/Operate/setValueInFormData.d.ts +2 -0
- package/dist/utils/Operate/shouldRun.d.ts +9 -0
- package/dist/utils/Validate/additional/conditionallyPermittedChange.d.ts +14 -0
- package/dist/utils/Validate/additional/conditionallyRequired.d.ts +11 -0
- package/dist/utils/Validate/additional/index.d.ts +2 -0
- package/dist/utils/Validate/additional/mustBeAfter.d.ts +14 -0
- package/dist/utils/Validate/additional/mustBeBefore.d.ts +14 -0
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.d.ts +15 -0
- package/dist/utils/Validate/additional/mustBeGreaterThan.d.ts +7 -0
- package/dist/utils/Validate/additional/mustBeInTheFuture.d.ts +8 -0
- package/dist/utils/Validate/additional/mustBeInThePast.d.ts +9 -0
- package/dist/utils/Validate/additional/mustBeLessThan.d.ts +7 -0
- package/dist/utils/Validate/additional/mustBeLongerThan.d.ts +9 -0
- package/dist/utils/Validate/additional/mustBeNumbersOnly.d.ts +9 -0
- package/dist/utils/Validate/additional/mustBeOneOf.d.ts +8 -0
- package/dist/utils/Validate/additional/mustBeShorterThan.d.ts +9 -0
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.d.ts +10 -0
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.d.ts +9 -0
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.d.ts +7 -0
- package/dist/utils/Validate/additional/mustNotContainSql.d.ts +2 -0
- package/dist/utils/Validate/additional/mustSelectOnlyOne.d.ts +8 -0
- package/dist/utils/Validate/additional/utils.d.ts +4 -0
- package/dist/utils/Validate/index.d.ts +42 -0
- package/dist/utils/Validate/validateCollection.d.ts +9 -0
- package/dist/utils/Validate/validateComponent.d.ts +16 -0
- package/dist/utils/Validate/validateContainer.d.ts +12 -0
- package/dist/utils/Validate/validateDate.d.ts +29 -0
- package/dist/utils/Validate/validateEmail.d.ts +13 -0
- package/dist/utils/Validate/validateMultifile.d.ts +3 -0
- package/dist/utils/Validate/validateOnPageLoad.d.ts +1 -0
- package/dist/utils/Validate/validatePage.d.ts +8 -0
- package/dist/utils/Validate/validateRegex.d.ts +13 -0
- package/dist/utils/Validate/validateRequired.d.ts +9 -0
- package/dist/utils/Validate/validateTextArea.d.ts +13 -0
- package/dist/utils/Validate/validateTime.d.ts +20 -0
- package/dist/utils/canOverrideFieldRequired.d.ts +9 -0
- package/dist/utils/index.d.ts +140 -0
- package/package.json +80 -167
- package/LICENCE.md +0 -21
- package/dist/components/CheckYourAnswers/Answer.js +0 -59
- package/dist/components/CheckYourAnswers/Answer.test.js +0 -142
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +0 -252
- package/dist/components/CheckYourAnswers/CheckYourAnswers.scss +0 -43
- package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +0 -409
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +0 -603
- package/dist/components/CheckYourAnswers/index.js +0 -10
- package/dist/components/CollectionPage/CollectionPage.js +0 -178
- package/dist/components/CollectionPage/CollectionPage.test.js +0 -507
- package/dist/components/CollectionPage/index.js +0 -10
- package/dist/components/CollectionSummary/BannerStrip.js +0 -65
- package/dist/components/CollectionSummary/BannerStrip.scss +0 -60
- package/dist/components/CollectionSummary/BannerStrip.test.js +0 -167
- package/dist/components/CollectionSummary/CollectionSummary.js +0 -362
- package/dist/components/CollectionSummary/CollectionSummary.scss +0 -26
- package/dist/components/CollectionSummary/CollectionSummary.test.js +0 -368
- package/dist/components/CollectionSummary/Confirmation.js +0 -65
- package/dist/components/CollectionSummary/Confirmation.scss +0 -26
- package/dist/components/CollectionSummary/Confirmation.test.js +0 -109
- package/dist/components/CollectionSummary/RenderListView.js +0 -162
- package/dist/components/CollectionSummary/RenderListView.scss +0 -295
- package/dist/components/CollectionSummary/RenderListView.test.js +0 -303
- package/dist/components/CollectionSummary/SummaryCard.js +0 -277
- package/dist/components/CollectionSummary/SummaryCard.scss +0 -114
- package/dist/components/CollectionSummary/SummaryCard.test.js +0 -1442
- package/dist/components/CollectionSummary/SummaryCardButtons.js +0 -76
- package/dist/components/CollectionSummary/SummaryCardButtons.test.js +0 -87
- package/dist/components/CollectionSummary/SummaryCardDetails.js +0 -206
- package/dist/components/CollectionSummary/SummaryCardDetails.scss +0 -216
- package/dist/components/CollectionSummary/SummaryCardDetails.test.js +0 -654
- package/dist/components/CollectionSummary/SummaryCardValidationContext.js +0 -79
- package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +0 -104
- package/dist/components/CollectionSummary/index.js +0 -10
- package/dist/components/FormComponent/Collection.js +0 -234
- package/dist/components/FormComponent/Collection.scss +0 -24
- package/dist/components/FormComponent/Collection.test.js +0 -934
- package/dist/components/FormComponent/Container.js +0 -130
- package/dist/components/FormComponent/Container.scss +0 -15
- package/dist/components/FormComponent/Container.test.js +0 -456
- package/dist/components/FormComponent/FormComponent.js +0 -238
- package/dist/components/FormComponent/FormComponent.stories.mdx +0 -186
- package/dist/components/FormComponent/FormComponent.test.js +0 -436
- package/dist/components/FormComponent/helpers/addLabel.js +0 -25
- package/dist/components/FormComponent/helpers/getComponentDisabled.js +0 -15
- package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +0 -27
- package/dist/components/FormComponent/helpers/getComponentError.js +0 -23
- package/dist/components/FormComponent/helpers/getComponentError.test.js +0 -51
- package/dist/components/FormComponent/helpers/getComponentFieldSet.js +0 -11
- package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +0 -30
- package/dist/components/FormComponent/helpers/index.js +0 -35
- package/dist/components/FormComponent/index.js +0 -10
- package/dist/components/FormPage/FormPage.js +0 -212
- package/dist/components/FormPage/FormPage.scss +0 -7
- package/dist/components/FormPage/FormPage.stories.mdx +0 -157
- package/dist/components/FormPage/FormPage.test.js +0 -454
- package/dist/components/FormPage/index.js +0 -10
- package/dist/components/FormRenderer/FormRenderer.js +0 -426
- package/dist/components/FormRenderer/FormRenderer.scss +0 -5
- package/dist/components/FormRenderer/FormRenderer.stories.mdx +0 -178
- package/dist/components/FormRenderer/FormRenderer.test.js +0 -799
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/cop-reassign-task-to-rcc.json +0 -446
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +0 -120
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +0 -113
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +0 -106
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +0 -106
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +0 -99
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +0 -106
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +0 -113
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +0 -26408
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +0 -9405
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +0 -158
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +0 -86
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +0 -173
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +0 -202
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +0 -63
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions-visible-elsewhere.json +0 -118
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +0 -112
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +0 -58
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +0 -97
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +0 -83
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +0 -55
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-entire-collection.json +0 -114
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +0 -106
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +0 -106
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +0 -99
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +0 -128
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +0 -109
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +0 -62
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +0 -96
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option-visible-elsewhere.json +0 -113
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +0 -112
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-component.json +0 -26003
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-radio-component.json +0 -201
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +0 -75
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-variance-breach.json +0 -4272
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-carrier.json +0 -407
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +0 -300
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +0 -384
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +0 -140
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +0 -186
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +0 -143
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-variance-breach-with-upload-files.json +0 -1264
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +0 -26
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +0 -15
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +0 -25
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +0 -26
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +0 -6
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions-visible-elsewhere.json +0 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +0 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +0 -15
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-entire-collection.json +0 -20
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +0 -14
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +0 -14
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +0 -18
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +0 -6
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +0 -9
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option-visible-elsewhere.json +0 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +0 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-component.json +0 -63
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-radio-component.json +0 -45
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +0 -8
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/reassign-to-rcc.json +0 -72
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +0 -280
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +0 -355
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +0 -80
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +0 -122
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +0 -86
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +0 -127
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +0 -7
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +0 -7
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +0 -7
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +0 -7
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +0 -6
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +0 -6
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +0 -23
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +0 -21
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +0 -6
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-visible-elsewhere-removed.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-entire-collection-removed.json +0 -3
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +0 -13
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +0 -8
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +0 -15
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-visible-elsewhere-removed.json +0 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-component.json +0 -63
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-radio-component-removed.json +0 -45
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +0 -7
- package/dist/components/FormRenderer/handlers/cyaAction.js +0 -23
- package/dist/components/FormRenderer/handlers/getPageId.js +0 -15
- package/dist/components/FormRenderer/handlers/getPageId.test.js +0 -35
- package/dist/components/FormRenderer/handlers/handlers.test.js +0 -81
- package/dist/components/FormRenderer/handlers/index.js +0 -17
- package/dist/components/FormRenderer/handlers/navigate.js +0 -25
- package/dist/components/FormRenderer/handlers/submissionError.js +0 -18
- package/dist/components/FormRenderer/helpers/canActionProceed.js +0 -27
- package/dist/components/FormRenderer/helpers/canActionProceed.test.js +0 -84
- package/dist/components/FormRenderer/helpers/canCYASubmit.js +0 -17
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +0 -75
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +0 -63
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +0 -191
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -338
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -434
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +0 -399
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +0 -559
- package/dist/components/FormRenderer/helpers/getCYA.js +0 -42
- package/dist/components/FormRenderer/helpers/getCYA.test.js +0 -46
- package/dist/components/FormRenderer/helpers/getFormState.js +0 -25
- package/dist/components/FormRenderer/helpers/getFormState.test.js +0 -60
- package/dist/components/FormRenderer/helpers/getNextPageId.js +0 -76
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +0 -292
- package/dist/components/FormRenderer/helpers/getPage.js +0 -27
- package/dist/components/FormRenderer/helpers/getPage.test.js +0 -45
- package/dist/components/FormRenderer/helpers/getRelevantPages.js +0 -27
- package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +0 -70
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +0 -65
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +0 -309
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +0 -201
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +0 -473
- package/dist/components/FormRenderer/helpers/index.js +0 -33
- package/dist/components/FormRenderer/index.js +0 -10
- package/dist/components/FormRenderer/onCYAAction.js +0 -150
- package/dist/components/FormRenderer/onCYAAction.test.js +0 -741
- package/dist/components/FormRenderer/onPageAction.js +0 -227
- package/dist/components/FormRenderer/onPageAction.test.js +0 -960
- package/dist/components/FormRenderer/onTaskAction.js +0 -47
- package/dist/components/FormRenderer/onTaskAction.test.js +0 -247
- package/dist/components/PageActions/ActionButton.js +0 -48
- package/dist/components/PageActions/ActionButton.test.js +0 -73
- package/dist/components/PageActions/PageActions.js +0 -37
- package/dist/components/PageActions/PageActions.stories.mdx +0 -74
- package/dist/components/PageActions/PageActions.test.js +0 -106
- package/dist/components/PageActions/index.js +0 -10
- package/dist/components/SummaryList/GroupAction.js +0 -50
- package/dist/components/SummaryList/GroupAction.test.js +0 -86
- package/dist/components/SummaryList/RowAction.js +0 -48
- package/dist/components/SummaryList/RowAction.test.js +0 -86
- package/dist/components/SummaryList/SummaryList.js +0 -128
- package/dist/components/SummaryList/SummaryList.scss +0 -79
- package/dist/components/SummaryList/SummaryList.stories.mdx +0 -84
- package/dist/components/SummaryList/SummaryList.test.js +0 -504
- package/dist/components/SummaryList/SummaryListHeadingRow.js +0 -39
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +0 -65
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +0 -38
- package/dist/components/SummaryList/SummaryListRow.js +0 -58
- package/dist/components/SummaryList/SummaryListTitleRow.js +0 -32
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +0 -29
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +0 -72
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +0 -29
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +0 -72
- package/dist/components/SummaryList/helpers/index.js +0 -14
- package/dist/components/SummaryList/index.js +0 -10
- package/dist/components/TaskList/Task.js +0 -62
- package/dist/components/TaskList/Task.test.js +0 -176
- package/dist/components/TaskList/TaskList.js +0 -175
- package/dist/components/TaskList/TaskList.scss +0 -123
- package/dist/components/TaskList/TaskList.stories.mdx +0 -164
- package/dist/components/TaskList/TaskList.test.js +0 -535
- package/dist/components/TaskList/TaskState.js +0 -37
- package/dist/components/TaskList/TaskState.test.js +0 -95
- package/dist/components/TaskList/index.js +0 -10
- package/dist/components/index.js +0 -56
- package/dist/context/HooksContext/HooksContext.js +0 -122
- package/dist/context/HooksContext/HooksContext.test.js +0 -45
- package/dist/context/HooksContext/index.js +0 -16
- package/dist/context/ValidationContext/ValidationContext.js +0 -98
- package/dist/context/ValidationContext/ValidationContext.test.js +0 -107
- package/dist/context/ValidationContext/index.js +0 -16
- package/dist/context/index.js +0 -21
- package/dist/hooks/index.js +0 -55
- package/dist/hooks/useAxios.js +0 -36
- package/dist/hooks/useGetRequest.js +0 -89
- package/dist/hooks/useHooks.js +0 -15
- package/dist/hooks/useRefData.js +0 -62
- package/dist/hooks/useValidation.js +0 -15
- package/dist/json/actions.json +0 -17
- package/dist/json/actionsNoSave.json +0 -17
- package/dist/json/addressDetails.json +0 -149
- package/dist/json/areYouACivilServant.json +0 -7
- package/dist/json/firstForm.json +0 -94
- package/dist/json/grade.json +0 -108
- package/dist/json/group.data.json +0 -21
- package/dist/json/group.json +0 -402
- package/dist/json/groupOfRow.json +0 -137
- package/dist/json/groupOfRowData.json +0 -15
- package/dist/json/port.json +0 -346
- package/dist/json/saveAndContinue.json +0 -98
- package/dist/json/sublocation.json +0 -859
- package/dist/json/taskList.json +0 -265
- package/dist/json/team.json +0 -17351
- package/dist/json/terminal.json +0 -81
- package/dist/json/userProfile.data.json +0 -21
- package/dist/json/userProfile.json +0 -276
- package/dist/models/CollectionLabels.js +0 -15
- package/dist/models/ComponentTypes.js +0 -58
- package/dist/models/EventTypes.js +0 -16
- package/dist/models/FormPages.js +0 -16
- package/dist/models/FormTypes.js +0 -24
- package/dist/models/HubFormats.js +0 -14
- package/dist/models/PageAction.js +0 -65
- package/dist/models/TaskStates.js +0 -46
- package/dist/models/index.js +0 -77
- package/dist/setupTests.js +0 -54
- package/dist/utils/CheckYourAnswers/getCYAAction.js +0 -44
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +0 -120
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +0 -57
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +0 -162
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +0 -66
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +0 -198
- package/dist/utils/CheckYourAnswers/getCYARow.js +0 -58
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +0 -373
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +0 -69
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +0 -70
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +0 -71
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +0 -285
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +0 -237
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +0 -844
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +0 -45
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +0 -535
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +0 -72
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +0 -343
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +0 -42
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +0 -56
- package/dist/utils/CheckYourAnswers/index.js +0 -15
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +0 -53
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +0 -149
- package/dist/utils/CollectionPage/addCollectionPageEntry.js +0 -23
- package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +0 -17
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +0 -26
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +0 -70
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +0 -51
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +0 -125
- package/dist/utils/CollectionPage/getCollectionPageActiveId.js +0 -24
- package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +0 -26
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +0 -44
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +0 -88
- package/dist/utils/CollectionPage/getCollectionPageData.js +0 -53
- package/dist/utils/CollectionPage/getCollectionPageData.test.js +0 -103
- package/dist/utils/CollectionPage/getErrorsForCollection.js +0 -55
- package/dist/utils/CollectionPage/getErrorsForCollection.test.js +0 -154
- package/dist/utils/CollectionPage/getQuickEditPage.js +0 -122
- package/dist/utils/CollectionPage/getQuickEditPage.test.js +0 -143
- package/dist/utils/CollectionPage/index.js +0 -33
- package/dist/utils/CollectionPage/mergeCollectionPages.js +0 -128
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +0 -198
- package/dist/utils/CollectionPage/removeCollectionPageEntry.js +0 -36
- package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +0 -62
- package/dist/utils/CollectionPage/setCollectionPageData.js +0 -60
- package/dist/utils/CollectionPage/setCollectionPageData.test.js +0 -182
- package/dist/utils/Component/addShowWhen.js +0 -43
- package/dist/utils/Component/addShowWhen.test.js +0 -217
- package/dist/utils/Component/applyToComponentTree.js +0 -68
- package/dist/utils/Component/applyToComponentTree.test.js +0 -125
- package/dist/utils/Component/cleanAttributes.js +0 -42
- package/dist/utils/Component/cleanAttributes.test.js +0 -67
- package/dist/utils/Component/elevateNestedComponents.js +0 -58
- package/dist/utils/Component/elevateNestedComponents.test.js +0 -305
- package/dist/utils/Component/getComponent.js +0 -305
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +0 -73
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +0 -251
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +0 -156
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +0 -104
- package/dist/utils/Component/getComponentTests/getComponent.details.test.js +0 -56
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +0 -60
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +0 -60
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +0 -31
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +0 -42
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +0 -29
- package/dist/utils/Component/getComponentTests/getComponent.list.test.js +0 -47
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +0 -66
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +0 -211
- package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +0 -46
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +0 -60
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +0 -221
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +0 -62
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +0 -60
- package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +0 -104
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +0 -80
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +0 -14
- package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +0 -29
- package/dist/utils/Component/getDefaultValue.js +0 -22
- package/dist/utils/Component/getDefaultValue.test.js +0 -62
- package/dist/utils/Component/getDefaultValueFromConfig.js +0 -106
- package/dist/utils/Component/getDefaultValueFromConfig.test.js +0 -141
- package/dist/utils/Component/index.js +0 -29
- package/dist/utils/Component/isEditable.js +0 -13
- package/dist/utils/Component/isEditable.test.js +0 -42
- package/dist/utils/Component/optionIsSelected.js +0 -25
- package/dist/utils/Component/optionIsSelected.test.js +0 -69
- package/dist/utils/Component/setupContainerComponentsPath.js +0 -35
- package/dist/utils/Component/setupContainerComponentsPath.test.js +0 -79
- package/dist/utils/Component/showComponent.js +0 -25
- package/dist/utils/Component/showComponent.test.js +0 -157
- package/dist/utils/Component/wrapInFormGroup.js +0 -26
- package/dist/utils/Condition/index.js +0 -17
- package/dist/utils/Condition/meetsAllConditions.js +0 -44
- package/dist/utils/Condition/meetsAllConditions.test.js +0 -109
- package/dist/utils/Condition/meetsCondition.js +0 -165
- package/dist/utils/Condition/meetsCondition.test.js +0 -899
- package/dist/utils/Condition/meetsOneCondition.js +0 -32
- package/dist/utils/Condition/meetsOneCondition.test.js +0 -101
- package/dist/utils/Condition/setupConditions.js +0 -36
- package/dist/utils/Condition/setupConditions.test.js +0 -34
- package/dist/utils/Container/getEditableComponents.js +0 -29
- package/dist/utils/Container/getEditableComponents.test.js +0 -134
- package/dist/utils/Container/index.js +0 -17
- package/dist/utils/Container/setupNesting.js +0 -53
- package/dist/utils/Container/setupNesting.test.js +0 -143
- package/dist/utils/Container/showContainer.js +0 -52
- package/dist/utils/Container/showContainer.test.js +0 -179
- package/dist/utils/Data/applyFormula.js +0 -90
- package/dist/utils/Data/applyFormula.test.js +0 -264
- package/dist/utils/Data/deleteValues.js +0 -19
- package/dist/utils/Data/deleteValues.test.js +0 -58
- package/dist/utils/Data/getAutocompleteSource.js +0 -87
- package/dist/utils/Data/getAutocompleteSource.test.js +0 -335
- package/dist/utils/Data/getDataPath.js +0 -66
- package/dist/utils/Data/getDataPath.test.js +0 -49
- package/dist/utils/Data/getOptions.js +0 -86
- package/dist/utils/Data/getOptions.test.js +0 -279
- package/dist/utils/Data/getSourceData.js +0 -44
- package/dist/utils/Data/getSourceData.test.js +0 -158
- package/dist/utils/Data/index.js +0 -35
- package/dist/utils/Data/nestInRefdataOptions.js +0 -47
- package/dist/utils/Data/nestInRefdataOptions.test.js +0 -237
- package/dist/utils/Data/refDataToOptions.js +0 -44
- package/dist/utils/Data/refDataToOptions.test.js +0 -197
- package/dist/utils/Data/setDataItem.js +0 -26
- package/dist/utils/Data/setDataItem.test.js +0 -136
- package/dist/utils/Data/setupFormData.js +0 -49
- package/dist/utils/Data/setupFormData.test.js +0 -215
- package/dist/utils/Data/setupRefDataUrlForComponent.js +0 -44
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +0 -150
- package/dist/utils/FormPage/applyConditionalProperties.js +0 -34
- package/dist/utils/FormPage/applyConditionalProperties.test.js +0 -61
- package/dist/utils/FormPage/getConditionalText.js +0 -55
- package/dist/utils/FormPage/getConditionalText.test.js +0 -163
- package/dist/utils/FormPage/getFormPage.js +0 -54
- package/dist/utils/FormPage/getFormPage.test.js +0 -206
- package/dist/utils/FormPage/getFormPages.js +0 -30
- package/dist/utils/FormPage/getFormPages.test.js +0 -97
- package/dist/utils/FormPage/getPageActions.js +0 -58
- package/dist/utils/FormPage/getPageActions.test.js +0 -115
- package/dist/utils/FormPage/getParagraphFromText.js +0 -21
- package/dist/utils/FormPage/getParagraphFromText.test.js +0 -28
- package/dist/utils/FormPage/index.js +0 -24
- package/dist/utils/FormPage/showFormPage.js +0 -52
- package/dist/utils/FormPage/showFormPage.test.js +0 -181
- package/dist/utils/FormPage/showFormPageCYA.js +0 -23
- package/dist/utils/FormPage/showFormPageCYA.test.js +0 -29
- package/dist/utils/FormPage/useComponent.js +0 -83
- package/dist/utils/FormPage/useComponent.test.js +0 -216
- package/dist/utils/Format/formatData.js +0 -27
- package/dist/utils/Format/formatData.test.js +0 -46
- package/dist/utils/Format/formatDataForComponent.js +0 -35
- package/dist/utils/Format/formatDataForComponent.test.js +0 -114
- package/dist/utils/Format/formatDataForForm.js +0 -27
- package/dist/utils/Format/formatDataForForm.test.js +0 -79
- package/dist/utils/Format/formatDataForPage.js +0 -31
- package/dist/utils/Format/formatDataForPage.test.js +0 -94
- package/dist/utils/Format/index.js +0 -21
- package/dist/utils/Hub/getFormHub.js +0 -40
- package/dist/utils/Hub/getFormHub.test.js +0 -105
- package/dist/utils/Hub/index.js +0 -15
- package/dist/utils/Meta/constants.js +0 -9
- package/dist/utils/Meta/documents/getDocuments.js +0 -15
- package/dist/utils/Meta/documents/getDocuments.test.js +0 -46
- package/dist/utils/Meta/documents/index.js +0 -19
- package/dist/utils/Meta/documents/setDocumentsForField.js +0 -30
- package/dist/utils/Meta/documents/setDocumentsForField.test.js +0 -97
- package/dist/utils/Meta/index.js +0 -17
- package/dist/utils/Operate/checkValueIsTruthy.js +0 -29
- package/dist/utils/Operate/checkValueIsTruthy.test.js +0 -43
- package/dist/utils/Operate/deleteValueInFormData.js +0 -27
- package/dist/utils/Operate/deleteValueInFormData.test.js +0 -61
- package/dist/utils/Operate/doesContainValue.js +0 -35
- package/dist/utils/Operate/doesContainValue.test.js +0 -76
- package/dist/utils/Operate/getFirstOf.js +0 -31
- package/dist/utils/Operate/getFirstOf.test.js +0 -87
- package/dist/utils/Operate/getIndexOfMatchingValueIn.js +0 -68
- package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +0 -158
- package/dist/utils/Operate/getLength.js +0 -51
- package/dist/utils/Operate/getLength.test.js +0 -90
- package/dist/utils/Operate/index.js +0 -13
- package/dist/utils/Operate/persistValueInFormData.js +0 -40
- package/dist/utils/Operate/persistValueInFormData.test.js +0 -118
- package/dist/utils/Operate/runPageOperations.js +0 -75
- package/dist/utils/Operate/runPageOperations.test.js +0 -105
- package/dist/utils/Operate/setValueInFormData.js +0 -22
- package/dist/utils/Operate/setValueInFormData.test.js +0 -45
- package/dist/utils/Operate/shouldRun.js +0 -57
- package/dist/utils/Operate/shouldRun.test.js +0 -65
- package/dist/utils/Validate/additional/conditionallyPermittedChange.js +0 -26
- package/dist/utils/Validate/additional/conditionallyPermittedChange.test.js +0 -34
- package/dist/utils/Validate/additional/conditionallyRequired.js +0 -24
- package/dist/utils/Validate/additional/conditionallyRequired.test.js +0 -74
- package/dist/utils/Validate/additional/index.js +0 -74
- package/dist/utils/Validate/additional/index.test.js +0 -130
- package/dist/utils/Validate/additional/mustBeAfter.js +0 -34
- package/dist/utils/Validate/additional/mustBeAfter.test.js +0 -109
- package/dist/utils/Validate/additional/mustBeBefore.js +0 -34
- package/dist/utils/Validate/additional/mustBeBefore.test.js +0 -77
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +0 -57
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +0 -128
- package/dist/utils/Validate/additional/mustBeGreaterThan.js +0 -22
- package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +0 -57
- package/dist/utils/Validate/additional/mustBeInTheFuture.js +0 -33
- package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +0 -32
- package/dist/utils/Validate/additional/mustBeInThePast.js +0 -36
- package/dist/utils/Validate/additional/mustBeInThePast.test.js +0 -32
- package/dist/utils/Validate/additional/mustBeLessThan.js +0 -22
- package/dist/utils/Validate/additional/mustBeLessThan.test.js +0 -53
- package/dist/utils/Validate/additional/mustBeLongerThan.js +0 -23
- package/dist/utils/Validate/additional/mustBeLongerThan.test.js +0 -49
- package/dist/utils/Validate/additional/mustBeNumbersOnly.js +0 -24
- package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +0 -45
- package/dist/utils/Validate/additional/mustBeOneOf.js +0 -22
- package/dist/utils/Validate/additional/mustBeOneOf.test.js +0 -37
- package/dist/utils/Validate/additional/mustBeShorterThan.js +0 -23
- package/dist/utils/Validate/additional/mustBeShorterThan.test.js +0 -49
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +0 -40
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +0 -163
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +0 -26
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +0 -37
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +0 -19
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +0 -37
- package/dist/utils/Validate/additional/mustNotContainSql.js +0 -19
- package/dist/utils/Validate/additional/mustNotContainSql.test.js +0 -33
- package/dist/utils/Validate/additional/mustSelectOnlyOne.js +0 -29
- package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +0 -55
- package/dist/utils/Validate/additional/utils.js +0 -35
- package/dist/utils/Validate/index.js +0 -33
- package/dist/utils/Validate/validateCollection.js +0 -50
- package/dist/utils/Validate/validateCollection.test.js +0 -134
- package/dist/utils/Validate/validateComponent.js +0 -126
- package/dist/utils/Validate/validateComponent.test.js +0 -435
- package/dist/utils/Validate/validateContainer.js +0 -52
- package/dist/utils/Validate/validateContainer.test.js +0 -115
- package/dist/utils/Validate/validateDate.js +0 -112
- package/dist/utils/Validate/validateDate.test.js +0 -133
- package/dist/utils/Validate/validateEmail.js +0 -45
- package/dist/utils/Validate/validateEmail.test.js +0 -78
- package/dist/utils/Validate/validateMultifile.js +0 -29
- package/dist/utils/Validate/validateMultifile.test.js +0 -46
- package/dist/utils/Validate/validateOnPageLoad.js +0 -24
- package/dist/utils/Validate/validateOnPageLoad.test.js +0 -89
- package/dist/utils/Validate/validatePage.js +0 -56
- package/dist/utils/Validate/validatePage.test.js +0 -795
- package/dist/utils/Validate/validateRegex.js +0 -41
- package/dist/utils/Validate/validateRegex.test.js +0 -43
- package/dist/utils/Validate/validateRequired.js +0 -37
- package/dist/utils/Validate/validateRequired.test.js +0 -64
- package/dist/utils/Validate/validateTextArea.js +0 -36
- package/dist/utils/Validate/validateTextArea.test.js +0 -71
- package/dist/utils/Validate/validateTime.js +0 -76
- package/dist/utils/Validate/validateTime.test.js +0 -116
- package/dist/utils/canOverrideFieldRequired.js +0 -23
- package/dist/utils/index.js +0 -42
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _mergeCollectionPages = _interopRequireDefault(require("../../../utils/CollectionPage/mergeCollectionPages"));
|
|
8
|
-
var Utils = _interopRequireWildcard(require("./clearOutUncompletedRoutesUtils"));
|
|
9
|
-
var _optionIsSelected = _interopRequireDefault(require("../../../utils/Component/optionIsSelected"));
|
|
10
|
-
var _getSourceData = _interopRequireDefault(require("../../../utils/Data/getSourceData"));
|
|
11
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
16
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
17
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable no-param-reassign */
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* This function recursively reads in the non-collection pages and components and builds lists from it:
|
|
21
|
-
*
|
|
22
|
-
* 1: allComponents. This is a map of all components in the form, keyed by the fully qualified component path.
|
|
23
|
-
* If the component belongs to a page (or other parent entity) that has its own show_when rule, then this rule
|
|
24
|
-
* is combined with the show_when rule of the component, so the decision as to whether the component's data should
|
|
25
|
-
* exist can be made just by processing the component.
|
|
26
|
-
* The main purpose of this map is to allow us to build a dependency graph in the function createComponentDependenciesGraph
|
|
27
|
-
*
|
|
28
|
-
* 2: componentsToKeep: This is an object containing a count of how many times each component is defined. This is to support the
|
|
29
|
-
* fact that a component can be used more than once in a form (but with mutually exclusive show_when rules so only used
|
|
30
|
-
* once with the same path).
|
|
31
|
-
*
|
|
32
|
-
* @param {Array} condensedPages All pages in the form, with the collection pages collated into a single object per collection
|
|
33
|
-
* @param {Object} formData The form payload
|
|
34
|
-
* @param {Map} componentByIdMap Map of all components, to enable performant lookup by id
|
|
35
|
-
* @param {Map} componentByFieldIdMap Map of all components, to enable performant lookup by fieldId
|
|
36
|
-
* @param {Object}
|
|
37
|
-
* @return {Map, Object, Map} allComponents All components in form (including nested), keyed by path:
|
|
38
|
-
* componentsToKeep A count of how many times each component is used, to prevent us deleting components defined > 1 times
|
|
39
|
-
* allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
|
|
40
|
-
*/
|
|
41
|
-
const createComponentMapsFromForm = (condensedPages, componentByIdMap, componentByFieldIdMap, formData) => {
|
|
42
|
-
const allComponents = new Map();
|
|
43
|
-
const componentsToKeep = {};
|
|
44
|
-
const unselectedOptionsNestedPaths = [];
|
|
45
|
-
const allCollections = new Map();
|
|
46
|
-
|
|
47
|
-
/*
|
|
48
|
-
* Inner function to support the recursion required to traverse through the nested structures of the form
|
|
49
|
-
*/
|
|
50
|
-
const recursivelyMapFieldsAndDeleteHiddenNested = (page, component, path) => {
|
|
51
|
-
var _component$data;
|
|
52
|
-
if (!component.fieldId) return; // Many component, such as warnings, html and details do not have data so we can ignore them
|
|
53
|
-
path = path ? "".concat(path, ".").concat(component.fieldId) : component.fieldId; // Build up the path to reflect nested components
|
|
54
|
-
componentsToKeep[path] = (componentsToKeep[path] || 0) + 1; // We need to keep track of the count of each component path, to avoid pruning paths that exist elsewhere
|
|
55
|
-
component.path = path; // Add the fully qualified path to the component, which will be required when resolving the dependencies later
|
|
56
|
-
|
|
57
|
-
// If the parent page has a rule, combine it with any component rule as we will be resolving dependencies for components only
|
|
58
|
-
if (page.show_when) {
|
|
59
|
-
component.show_when = component.show_when ? [].concat(Utils.toArray(page.show_when), Utils.toArray(component.show_when)) : page.show_when;
|
|
60
|
-
}
|
|
61
|
-
Utils.addValue(path, component, allComponents); // There can be more than one component per path, so keep a map of <path, array>
|
|
62
|
-
// recurse if there is nesting
|
|
63
|
-
if (component.components) {
|
|
64
|
-
component.components.forEach(c => {
|
|
65
|
-
recursivelyMapFieldsAndDeleteHiddenNested(page, c, path, allComponents, componentsToKeep, formData);
|
|
66
|
-
});
|
|
67
|
-
} else if (component !== null && component !== void 0 && (_component$data = component.data) !== null && _component$data !== void 0 && _component$data.options) {
|
|
68
|
-
var _component$data2;
|
|
69
|
-
component === null || component === void 0 || (_component$data2 = component.data) === null || _component$data2 === void 0 || (_component$data2 = _component$data2.options) === null || _component$data2 === void 0 || _component$data2.forEach(option => {
|
|
70
|
-
if (option.nested) {
|
|
71
|
-
const unselectedOption = !(0, _optionIsSelected.default)((0, _getSourceData.default)(formData, path), option);
|
|
72
|
-
const blockShowWhen = option.show_when;
|
|
73
|
-
option.nested.forEach(nestedComponent => {
|
|
74
|
-
// prepare to delete hidden nested question payload items when the parent option is not selected
|
|
75
|
-
if (unselectedOption) unselectedOptionsNestedPaths.push(Utils.getNestedQuestionPath(path, nestedComponent.fieldId));
|
|
76
|
-
if (blockShowWhen) nestedComponent.show_when = blockShowWhen;
|
|
77
|
-
recursivelyMapFieldsAndDeleteHiddenNested(page, nestedComponent, Utils.getImmediateParent(path), allComponents, componentsToKeep, formData);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
// Entry point for the recursive traverse of the form specification.
|
|
85
|
-
condensedPages === null || condensedPages === void 0 || condensedPages.forEach(page => {
|
|
86
|
-
// Make the distinction between collections (which will be processed separately) and non-collections, which will be processed here.
|
|
87
|
-
if (page.childPages) {
|
|
88
|
-
allCollections.set(page.collection.name, page);
|
|
89
|
-
} else {
|
|
90
|
-
var _page$components;
|
|
91
|
-
(_page$components = page.components) === null || _page$components === void 0 || _page$components.forEach(useComponentInPage => {
|
|
92
|
-
const componentObj = Utils.findComponentDefinitionInForm(useComponentInPage, componentByIdMap, componentByFieldIdMap);
|
|
93
|
-
recursivelyMapFieldsAndDeleteHiddenNested(page, componentObj, null, allComponents, componentsToKeep, formData);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
// Now delete all the unselected options, if they are not used elsewhere
|
|
98
|
-
unselectedOptionsNestedPaths.forEach(path => {
|
|
99
|
-
if (componentsToKeep[path] > 1) {
|
|
100
|
-
componentsToKeep[path] -= 1;
|
|
101
|
-
} else {
|
|
102
|
-
Utils.deleteNodeByPath(formData, path);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return {
|
|
106
|
-
allComponents,
|
|
107
|
-
componentsToKeep,
|
|
108
|
-
allCollections
|
|
109
|
-
};
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
*
|
|
113
|
-
* This function iterates through the allComponents list. For each component, it will derive all payload paths
|
|
114
|
-
* that this component is dependent on. The same component might be defined more than once in the form, so add the dependencies
|
|
115
|
-
* for all the component definitions.
|
|
116
|
-
*
|
|
117
|
-
* @param {Map} allDependencyRelationships A map of each component with dependencies. The key is the fully qualified path and the value is a Set of all the paths that this component is dependent on.
|
|
118
|
-
* @param {Map} allComponents All components in form (including nested), keyed by path. Used to build the allDependencyRelationships
|
|
119
|
-
* @return {Map }allDependencyRelationships graph of the relationships between all entities
|
|
120
|
-
*/
|
|
121
|
-
const createComponentDependenciesGraph = allComponents => {
|
|
122
|
-
const allDependencyRelationships = new Map();
|
|
123
|
-
allComponents === null || allComponents === void 0 || allComponents.forEach(componentArray => {
|
|
124
|
-
componentArray === null || componentArray === void 0 || componentArray.forEach(component => {
|
|
125
|
-
if (!component.fieldId) return;
|
|
126
|
-
const componentDependencies = Utils.getDependencies(component);
|
|
127
|
-
if (componentDependencies) {
|
|
128
|
-
if (allDependencyRelationships.has(component.path)) {
|
|
129
|
-
const existingSet = allDependencyRelationships.get(component.path);
|
|
130
|
-
componentDependencies.forEach(dep => existingSet.add(dep));
|
|
131
|
-
} else {
|
|
132
|
-
allDependencyRelationships.set(component.path, new Set(componentDependencies));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
return allDependencyRelationships;
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
*
|
|
142
|
-
* This function loops through each entry in the allDependencyRelationships map. Each entry will contain a Set of all
|
|
143
|
-
* paths that the key path is dependent on. Recursively delve into each dependency path and repeat the process until we
|
|
144
|
-
* have reached an entry that has no dependencies. At this point we can safely resolve the dependency using its show_when rule,
|
|
145
|
-
* and unwind the recursion.
|
|
146
|
-
*
|
|
147
|
-
* Because all the components are inter-connected, this could result in resolving the same entry repeatedly, so keep a 'visited'
|
|
148
|
-
* array to prevent this.
|
|
149
|
-
*
|
|
150
|
-
* @param {Object} formData The form payload
|
|
151
|
-
* @param {Map} allComponents All components in form (including nested), keyed by path
|
|
152
|
-
* @param {Object} componentsToKeep A count of how many times each component is used, to prevent us deleting components defined > 1 times
|
|
153
|
-
* @param {Map} allDependencyRelationships A map of each component with dependencies. The key is the fully qualified path and the value is a Set of all the paths that this component is dependent on.
|
|
154
|
-
* @param {Map} allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
|
|
155
|
-
* @param {Object} form The form specification
|
|
156
|
-
*/
|
|
157
|
-
const resolveComponentDependenciesGraph = (allDependencyRelationships, allComponents, componentsToKeep, allCollections, form, formData) => {
|
|
158
|
-
/*
|
|
159
|
-
* Inner function to support the recursion required to traverse through the nested nature of the allDependencyRelationships
|
|
160
|
-
*/
|
|
161
|
-
const recursivelyResolveDependencies = (visited, dependentComponent, dependencyRelationships) => {
|
|
162
|
-
if (visited.has(dependentComponent)) return;
|
|
163
|
-
visited.add(dependentComponent);
|
|
164
|
-
const dependencies = dependencyRelationships.get(dependentComponent.path);
|
|
165
|
-
dependencies === null || dependencies === void 0 || dependencies.forEach(dependencyPath => {
|
|
166
|
-
const dependencyComponents = Utils.getDependencyObjectFromPath(dependencyPath, allComponents);
|
|
167
|
-
if (dependencyComponents) {
|
|
168
|
-
dependencyComponents.forEach(dependency => {
|
|
169
|
-
if (!visited.has(dependency)) {
|
|
170
|
-
recursivelyResolveDependencies(visited, dependency, dependencyRelationships);
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
} else {
|
|
174
|
-
// We are here if the dependency path was not found in the list of allComponents. This is valid and can happen when
|
|
175
|
-
// a component is dependent on a field that was generated by cop-ui, e.g. jobHolderStaffDetails.linemanagerEmail.
|
|
176
|
-
// However, there is an edge case (described in the message below) that we need to validate for.
|
|
177
|
-
const arrayNamePattern = /([a-zA-Z_$][\w$]*)\[\d+\]/;
|
|
178
|
-
const match = dependencyPath.match(arrayNamePattern);
|
|
179
|
-
if (match) {
|
|
180
|
-
const collectionName = match[1];
|
|
181
|
-
const collection = allCollections.get(collectionName);
|
|
182
|
-
if (collection) {
|
|
183
|
-
var _collection$childPage;
|
|
184
|
-
(_collection$childPage = collection.childPages) === null || _collection$childPage === void 0 || _collection$childPage.forEach(childPage => {
|
|
185
|
-
if (childPage.show_when) {
|
|
186
|
-
const message = "It is not possible to reliably clean hidden data when a component is dependent on a \n collection's data, and that collection is itself dependent on data elsewhere in the form.\n The dependency path is ".concat(dependencyPath, ", and the chained show_when is ").concat(JSON.stringify(childPage.show_when), ".\n The form will need to be changed to break this chained dependency");
|
|
187
|
-
throw new Error(message);
|
|
188
|
-
}
|
|
189
|
-
;
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
// Whilst unravelling the recursion, we can start deleting from the leaf upwards
|
|
196
|
-
if (!Utils.isShowEntity(dependentComponent, formData)) {
|
|
197
|
-
Utils.deleteComponentData(formData, dependentComponent.path, dependentComponent, componentsToKeep);
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
const visited = new Set();
|
|
201
|
-
allDependencyRelationships === null || allDependencyRelationships === void 0 || allDependencyRelationships.forEach((dependencies, dependentComponentPath) => {
|
|
202
|
-
// Each path that a component is dependent on may have > 1 possible dependent components, if a field is used twice
|
|
203
|
-
const dependentComponents = allComponents.get(dependentComponentPath);
|
|
204
|
-
dependentComponents === null || dependentComponents === void 0 || dependentComponents.forEach(dependentComponent => {
|
|
205
|
-
if (!visited.has(dependentComponent)) {
|
|
206
|
-
recursivelyResolveDependencies(visited, dependentComponent, allDependencyRelationships, form, formData, allComponents, componentsToKeep, allCollections);
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* For each collection, iterate through the payload array's objects, and apply the collections show_when
|
|
214
|
-
* rules for each payload object.
|
|
215
|
-
*
|
|
216
|
-
* Some of the rules may be dependent on payload items outside the collection. These will already have been cleansed
|
|
217
|
-
* so will be in a reliable state.
|
|
218
|
-
*
|
|
219
|
-
* It is possible in the form spec to specify in the master page that the whole collection has a show_when rule.
|
|
220
|
-
* If this is the case, evaluate the rule and if false delete the entire collection array.
|
|
221
|
-
*
|
|
222
|
-
* @param {Map} allCollections A map of collection objects, which are a grouping of the pages that make up a single collection
|
|
223
|
-
* @param {Object} formData The form payload
|
|
224
|
-
* @param {Map} componentByIdMap Map of all components, to enable performant lookup by id
|
|
225
|
-
* @param {Map} componentByFieldIdMap Map of all components, to enable performant lookup by fieldId
|
|
226
|
-
*/
|
|
227
|
-
const cleanseCollectionData = (allCollections, formData, componentByIdMap, componentByFieldIdMap) => {
|
|
228
|
-
allCollections === null || allCollections === void 0 || allCollections.forEach((collection, collectionName) => {
|
|
229
|
-
if (!Utils.isShowEntity(collection, formData)) {
|
|
230
|
-
// Delete the entire collection array (including activeId) if the master page has an unmet rule
|
|
231
|
-
delete formData[collectionName];
|
|
232
|
-
delete formData["".concat(collectionName, "ActiveId")];
|
|
233
|
-
}
|
|
234
|
-
const collectionDataArray = formData[collectionName];
|
|
235
|
-
collectionDataArray === null || collectionDataArray === void 0 || collectionDataArray.forEach(collectionDataEntry => {
|
|
236
|
-
var _collection$childPage2;
|
|
237
|
-
// The forms are written such that a show_when in a collection array object can be evaluated against the data relative to that data object
|
|
238
|
-
// OR against the data relative to the root of the form. To achieve that, we'll copy the collection object to the root of the form before evaluating
|
|
239
|
-
const dataForEvaluation = _objectSpread(_objectSpread({}, formData), collectionDataEntry);
|
|
240
|
-
const pathsToKeep = new Set();
|
|
241
|
-
const componentsToPrune = new Map();
|
|
242
|
-
(_collection$childPage2 = collection.childPages) === null || _collection$childPage2 === void 0 || _collection$childPage2.forEach(childPage => {
|
|
243
|
-
var _childPage$components;
|
|
244
|
-
const showPage = Utils.isShowEntity(childPage, dataForEvaluation);
|
|
245
|
-
(_childPage$components = childPage.components) === null || _childPage$components === void 0 || _childPage$components.forEach(useComponentInPage => {
|
|
246
|
-
const componentObj = Utils.findComponentDefinitionInForm(useComponentInPage, componentByIdMap, componentByFieldIdMap);
|
|
247
|
-
// Non-data components can be ignored (eg html)
|
|
248
|
-
if (!componentObj.fieldId) return;
|
|
249
|
-
const showComponentOnPage = Utils.isShowEntity(useComponentInPage, dataForEvaluation);
|
|
250
|
-
if (showPage && showComponentOnPage && Utils.isShowEntity(componentObj, dataForEvaluation)) {
|
|
251
|
-
// There may be >1 components with the same path (eg quantity in EAB2), so don't delete hidden components if they are required elsewhere
|
|
252
|
-
pathsToKeep.add(componentObj.fieldId);
|
|
253
|
-
} else {
|
|
254
|
-
componentsToPrune.set(componentObj.id, componentObj);
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
Utils.pruneCollectionEntry(pathsToKeep, componentsToPrune, collectionDataEntry, formData);
|
|
259
|
-
});
|
|
260
|
-
//
|
|
261
|
-
if (collectionDataArray) Utils.removeObjectWithOnlySingleIdField(collectionDataArray);
|
|
262
|
-
});
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
*
|
|
267
|
-
* The purpose of this function is to apply the show_when rules defined in the form specification to the
|
|
268
|
-
* form payload (formData), and remove any data that should not be shown according to those rules.
|
|
269
|
-
* (the reason this data exists in the payload is that users can answer a question in such a way that
|
|
270
|
-
* other questions are 'shown' to them, which are then complete. The user can then go back and change the original
|
|
271
|
-
* question to then 'hide' those questions, but the answers they gave persist in the payload. The must be cleansed
|
|
272
|
-
* before being submitted.
|
|
273
|
-
*
|
|
274
|
-
* There are 2 types of payload data that have to be treated differently by this function for it to work.
|
|
275
|
-
*
|
|
276
|
-
* 1. Data from non-repeating pages, containing components.
|
|
277
|
-
*
|
|
278
|
-
* Each data item captured will be written to the payload as a field with the name of the fieldId of the payload.
|
|
279
|
-
* In the case of components that are nested within 'container' components, the payload will reflect the nesting.
|
|
280
|
-
* There is no limit to the level of nesting in a form.
|
|
281
|
-
*
|
|
282
|
-
* To cleanse the payload for this type of data, we do the following (high level description, see method comments for detail):
|
|
283
|
-
*
|
|
284
|
-
* - build a map of all components, keyed by their payload path (required for the next step)
|
|
285
|
-
* - for all of these components that have dependencies (show_when rules), create a graph datastructure to show all components
|
|
286
|
-
* on which a component is dependent, and then all components that those components may be dependent on. There is no limit to
|
|
287
|
-
* the depth of these chained dependencies.
|
|
288
|
-
* - the reason for building a graph of these dependency chains is so we know the sequence in which we must resolve the dependencies.
|
|
289
|
-
* For any given chain of dependencies it is essential that we resolve the dependencies starting at the end of the chains, and work our way
|
|
290
|
-
* back up the chain. If not, we could be resolving a dependency based on a payload item that itself will later be deleted.
|
|
291
|
-
* Therefore, the final step is to recursively traverse the dependency graph, resolving the dependency rule for the components in
|
|
292
|
-
* the chain from the leaf back up to the parent node.
|
|
293
|
-
*
|
|
294
|
-
* 2. Page collection data
|
|
295
|
-
*
|
|
296
|
-
* A page collection is a set of one or more pages which (as a group) can be filled in as many times is required
|
|
297
|
-
* by the user. For example, in EAB, you can add as many item-seal-details to an EAB form as are required. An item-seal-detail
|
|
298
|
-
* is made up of several different pages, all grouped. The data saved will be an array representing the whole collection, with
|
|
299
|
-
* each object in the array representing a single collection entry (a single item-seal-detail in this example).
|
|
300
|
-
*
|
|
301
|
-
* Cleanse collection data has to be driven from the payload rather than the form, as there are repeated objects in an array
|
|
302
|
-
* representing the data. Each one has to be treated independently as the data to be cleansed can be different in each one.
|
|
303
|
-
*
|
|
304
|
-
* - For each collection type, iterate through each payload object and treat it like an independent payload..
|
|
305
|
-
* - For each collection payload object, iterate through the collection's pages and components, and apply all the show_when rules
|
|
306
|
-
* found at both page and component level to the payload.
|
|
307
|
-
* - Repeat for each payload object
|
|
308
|
-
* - Repeat for all collections
|
|
309
|
-
*
|
|
310
|
-
* @param {*} form
|
|
311
|
-
* @param {*} formData
|
|
312
|
-
* @returns {*} cleansed form data
|
|
313
|
-
*/
|
|
314
|
-
const clearOutUncompletedRoutes = (cleanseHiddenData, form, formData) => {
|
|
315
|
-
if (!cleanseHiddenData) return formData;
|
|
316
|
-
|
|
317
|
-
// Load components into maps keyed on id and field for subsequent performant access
|
|
318
|
-
const componentByIdMap = new Map(form.components.map(c => [c.id, c]));
|
|
319
|
-
const componentByFieldIdMap = new Map(form.components.map(c => [c.fieldId, c]));
|
|
320
|
-
|
|
321
|
-
// Group all pages relating to a page-collection into a single object to aid collection
|
|
322
|
-
// processing, and to allow us to differentiate between a collection and non-collection page.
|
|
323
|
-
const condensedPages = (0, _mergeCollectionPages.default)(form.pages);
|
|
324
|
-
const {
|
|
325
|
-
allComponents,
|
|
326
|
-
componentsToKeep,
|
|
327
|
-
allCollections
|
|
328
|
-
} = createComponentMapsFromForm(condensedPages, componentByIdMap, componentByFieldIdMap, formData);
|
|
329
|
-
const allDependencyRelationships = createComponentDependenciesGraph(allComponents);
|
|
330
|
-
resolveComponentDependenciesGraph(allDependencyRelationships, allComponents, componentsToKeep, allCollections, form, formData);
|
|
331
|
-
cleanseCollectionData(allCollections, formData, componentByIdMap, componentByFieldIdMap);
|
|
332
|
-
|
|
333
|
-
// The cleansing above may have left empty arrays and collection IDs. Tidy these up.
|
|
334
|
-
Utils.removeEmptyArraysAndUnusedCollectionIDs(formData);
|
|
335
|
-
return formData;
|
|
336
|
-
};
|
|
337
|
-
var _default = exports.default = clearOutUncompletedRoutes;
|
|
338
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVyZ2VDb2xsZWN0aW9uUGFnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIlV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfb3B0aW9uSXNTZWxlY3RlZCIsIl9nZXRTb3VyY2VEYXRhIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiY3JlYXRlQ29tcG9uZW50TWFwc0Zyb21Gb3JtIiwiY29uZGVuc2VkUGFnZXMiLCJjb21wb25lbnRCeUlkTWFwIiwiY29tcG9uZW50QnlGaWVsZElkTWFwIiwiZm9ybURhdGEiLCJhbGxDb21wb25lbnRzIiwiTWFwIiwiY29tcG9uZW50c1RvS2VlcCIsInVuc2VsZWN0ZWRPcHRpb25zTmVzdGVkUGF0aHMiLCJhbGxDb2xsZWN0aW9ucyIsInJlY3Vyc2l2ZWx5TWFwRmllbGRzQW5kRGVsZXRlSGlkZGVuTmVzdGVkIiwicGFnZSIsImNvbXBvbmVudCIsInBhdGgiLCJfY29tcG9uZW50JGRhdGEiLCJmaWVsZElkIiwiY29uY2F0Iiwic2hvd193aGVuIiwidG9BcnJheSIsImFkZFZhbHVlIiwiY29tcG9uZW50cyIsImMiLCJkYXRhIiwib3B0aW9ucyIsIl9jb21wb25lbnQkZGF0YTIiLCJvcHRpb24iLCJuZXN0ZWQiLCJ1bnNlbGVjdGVkT3B0aW9uIiwib3B0aW9uSXNTZWxlY3RlZCIsImdldFNvdXJjZURhdGEiLCJibG9ja1Nob3dXaGVuIiwibmVzdGVkQ29tcG9uZW50IiwiZ2V0TmVzdGVkUXVlc3Rpb25QYXRoIiwiZ2V0SW1tZWRpYXRlUGFyZW50IiwiY2hpbGRQYWdlcyIsImNvbGxlY3Rpb24iLCJuYW1lIiwiX3BhZ2UkY29tcG9uZW50cyIsInVzZUNvbXBvbmVudEluUGFnZSIsImNvbXBvbmVudE9iaiIsImZpbmRDb21wb25lbnREZWZpbml0aW9uSW5Gb3JtIiwiZGVsZXRlTm9kZUJ5UGF0aCIsImNyZWF0ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoIiwiYWxsRGVwZW5kZW5jeVJlbGF0aW9uc2hpcHMiLCJjb21wb25lbnRBcnJheSIsImNvbXBvbmVudERlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImV4aXN0aW5nU2V0IiwiZGVwIiwiYWRkIiwiU2V0IiwicmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoIiwiZm9ybSIsInJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyIsInZpc2l0ZWQiLCJkZXBlbmRlbnRDb21wb25lbnQiLCJkZXBlbmRlbmN5UmVsYXRpb25zaGlwcyIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lQYXRoIiwiZGVwZW5kZW5jeUNvbXBvbmVudHMiLCJnZXREZXBlbmRlbmN5T2JqZWN0RnJvbVBhdGgiLCJkZXBlbmRlbmN5IiwiYXJyYXlOYW1lUGF0dGVybiIsIm1hdGNoIiwiY29sbGVjdGlvbk5hbWUiLCJfY29sbGVjdGlvbiRjaGlsZFBhZ2UiLCJjaGlsZFBhZ2UiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIkVycm9yIiwiaXNTaG93RW50aXR5IiwiZGVsZXRlQ29tcG9uZW50RGF0YSIsImRlcGVuZGVudENvbXBvbmVudFBhdGgiLCJkZXBlbmRlbnRDb21wb25lbnRzIiwiY2xlYW5zZUNvbGxlY3Rpb25EYXRhIiwiY29sbGVjdGlvbkRhdGFBcnJheSIsImNvbGxlY3Rpb25EYXRhRW50cnkiLCJfY29sbGVjdGlvbiRjaGlsZFBhZ2UyIiwiZGF0YUZvckV2YWx1YXRpb24iLCJwYXRoc1RvS2VlcCIsImNvbXBvbmVudHNUb1BydW5lIiwiX2NoaWxkUGFnZSRjb21wb25lbnRzIiwic2hvd1BhZ2UiLCJzaG93Q29tcG9uZW50T25QYWdlIiwiaWQiLCJwcnVuZUNvbGxlY3Rpb25FbnRyeSIsInJlbW92ZU9iamVjdFdpdGhPbmx5U2luZ2xlSWRGaWVsZCIsImNsZWFyT3V0VW5jb21wbGV0ZWRSb3V0ZXMiLCJjbGVhbnNlSGlkZGVuRGF0YSIsIm1hcCIsIm1lcmdlQ29sbGVjdGlvblBhZ2VzIiwicGFnZXMiLCJyZW1vdmVFbXB0eUFycmF5c0FuZFVudXNlZENvbGxlY3Rpb25JRHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9Gb3JtUmVuZGVyZXIvaGVscGVycy9jbGVhck91dFVuY29tcGxldGVkUm91dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5pbXBvcnQgbWVyZ2VDb2xsZWN0aW9uUGFnZXMgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0NvbGxlY3Rpb25QYWdlL21lcmdlQ29sbGVjdGlvblBhZ2VzXCI7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi9jbGVhck91dFVuY29tcGxldGVkUm91dGVzVXRpbHNcIjtcbmltcG9ydCBvcHRpb25Jc1NlbGVjdGVkIGZyb20gXCIuLi8uLi8uLi91dGlscy9Db21wb25lbnQvb3B0aW9uSXNTZWxlY3RlZFwiO1xuaW1wb3J0IGdldFNvdXJjZURhdGEgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0RhdGEvZ2V0U291cmNlRGF0YVwiO1xuXG4vKipcbiAqICBcbiAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgcmVhZHMgaW4gdGhlIG5vbi1jb2xsZWN0aW9uIHBhZ2VzIGFuZCBjb21wb25lbnRzIGFuZCBidWlsZHMgbGlzdHMgZnJvbSBpdDpcbiAqIFxuICogMTogYWxsQ29tcG9uZW50cy4gVGhpcyBpcyBhIG1hcCBvZiBhbGwgY29tcG9uZW50cyBpbiB0aGUgZm9ybSwga2V5ZWQgYnkgdGhlIGZ1bGx5IHF1YWxpZmllZCBjb21wb25lbnQgcGF0aC5cbiAqICAgICAgSWYgdGhlIGNvbXBvbmVudCBiZWxvbmdzIHRvIGEgcGFnZSAob3Igb3RoZXIgcGFyZW50IGVudGl0eSkgdGhhdCBoYXMgaXRzIG93biBzaG93X3doZW4gcnVsZSwgdGhlbiB0aGlzIHJ1bGVcbiAqICAgICAgaXMgY29tYmluZWQgd2l0aCB0aGUgc2hvd193aGVuIHJ1bGUgb2YgdGhlIGNvbXBvbmVudCwgc28gdGhlIGRlY2lzaW9uIGFzIHRvIHdoZXRoZXIgdGhlIGNvbXBvbmVudCdzIGRhdGEgc2hvdWxkXG4gKiAgICAgIGV4aXN0IGNhbiBiZSBtYWRlIGp1c3QgYnkgcHJvY2Vzc2luZyB0aGUgY29tcG9uZW50LlxuICogICAgICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgbWFwIGlzIHRvIGFsbG93IHVzIHRvIGJ1aWxkIGEgZGVwZW5kZW5jeSBncmFwaCBpbiB0aGUgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50RGVwZW5kZW5jaWVzR3JhcGhcbiAqIFxuICogMjogY29tcG9uZW50c1RvS2VlcDogVGhpcyBpcyBhbiBvYmplY3QgY29udGFpbmluZyBhIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzIGVhY2ggY29tcG9uZW50IGlzIGRlZmluZWQuIFRoaXMgaXMgdG8gc3VwcG9ydCB0aGVcbiAqICAgICAgZmFjdCB0aGF0IGEgY29tcG9uZW50IGNhbiBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlIGluIGEgZm9ybSAoYnV0IHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIHNob3dfd2hlbiBydWxlcyBzbyBvbmx5IHVzZWQgXG4gKiAgICAgIG9uY2Ugd2l0aCB0aGUgc2FtZSBwYXRoKS4gXG4gKiBcbiAqIEBwYXJhbSB7QXJyYXl9IGNvbmRlbnNlZFBhZ2VzIEFsbCBwYWdlcyBpbiB0aGUgZm9ybSwgd2l0aCB0aGUgY29sbGVjdGlvbiBwYWdlcyBjb2xsYXRlZCBpbnRvIGEgc2luZ2xlIG9iamVjdCBwZXIgY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhIFRoZSBmb3JtIHBheWxvYWRcbiAqIEBwYXJhbSB7TWFwfSBjb21wb25lbnRCeUlkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGlkXG4gKiBAcGFyYW0ge01hcH0gY29tcG9uZW50QnlGaWVsZElkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGZpZWxkSWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBcbiAqIEByZXR1cm4ge01hcCwgT2JqZWN0LCBNYXB9IGFsbENvbXBvbmVudHMgQWxsIGNvbXBvbmVudHMgaW4gZm9ybSAoaW5jbHVkaW5nIG5lc3RlZCksIGtleWVkIGJ5IHBhdGg6IFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzVG9LZWVwIEEgY291bnQgb2YgaG93IG1hbnkgdGltZXMgZWFjaCBjb21wb25lbnQgaXMgdXNlZCwgdG8gcHJldmVudCB1cyBkZWxldGluZyBjb21wb25lbnRzIGRlZmluZWQgPiAxIHRpbWVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zIEEgbWFwIG9mIGNvbGxlY3Rpb24gb2JqZWN0cywgd2hpY2ggYXJlIGEgZ3JvdXBpbmcgb2YgdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCBhIHNpbmdsZSBjb2xsZWN0aW9uIFxuICovXG5jb25zdCBjcmVhdGVDb21wb25lbnRNYXBzRnJvbUZvcm0gPSAoY29uZGVuc2VkUGFnZXMsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCwgZm9ybURhdGEpID0+IHtcblxuICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY29tcG9uZW50c1RvS2VlcCA9IHt9O1xuICAgIGNvbnN0IHVuc2VsZWN0ZWRPcHRpb25zTmVzdGVkUGF0aHMgPSBbXTtcbiAgICBjb25zdCBhbGxDb2xsZWN0aW9ucyA9IG5ldyBNYXAoKTtcblxuICAgIC8qXG4gICAgICogSW5uZXIgZnVuY3Rpb24gdG8gc3VwcG9ydCB0aGUgcmVjdXJzaW9uIHJlcXVpcmVkIHRvIHRyYXZlcnNlIHRocm91Z2ggdGhlIG5lc3RlZCBzdHJ1Y3R1cmVzIG9mIHRoZSBmb3JtXG4gICAgICovXG4gICAgY29uc3QgcmVjdXJzaXZlbHlNYXBGaWVsZHNBbmREZWxldGVIaWRkZW5OZXN0ZWQgPSAocGFnZSwgY29tcG9uZW50LCBwYXRoKSA9PiB7XG5cbiAgICAgICAgaWYgKCFjb21wb25lbnQuZmllbGRJZCkgcmV0dXJuOyAvLyBNYW55IGNvbXBvbmVudCwgc3VjaCBhcyB3YXJuaW5ncywgaHRtbCBhbmQgZGV0YWlscyBkbyBub3QgaGF2ZSBkYXRhIHNvIHdlIGNhbiBpZ25vcmUgdGhlbSAgICAgICAgXG4gICAgICAgIHBhdGggPSBwYXRoID8gYCR7cGF0aH0uJHtjb21wb25lbnQuZmllbGRJZH1gIDogY29tcG9uZW50LmZpZWxkSWQ7IC8vIEJ1aWxkIHVwIHRoZSBwYXRoIHRvIHJlZmxlY3QgbmVzdGVkIGNvbXBvbmVudHNcbiAgICAgICAgY29tcG9uZW50c1RvS2VlcFtwYXRoXSA9IChjb21wb25lbnRzVG9LZWVwW3BhdGhdIHx8IDApICsgMTsgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY291bnQgb2YgZWFjaCBjb21wb25lbnQgcGF0aCwgdG8gYXZvaWQgcHJ1bmluZyBwYXRocyB0aGF0IGV4aXN0IGVsc2V3aGVyZSAgICAgICAgXG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gcGF0aDsgLy8gQWRkIHRoZSBmdWxseSBxdWFsaWZpZWQgcGF0aCB0byB0aGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHJlcXVpcmVkIHdoZW4gcmVzb2x2aW5nIHRoZSBkZXBlbmRlbmNpZXMgbGF0ZXJcblxuICAgICAgICAvLyBJZiB0aGUgcGFyZW50IHBhZ2UgaGFzIGEgcnVsZSwgY29tYmluZSBpdCB3aXRoIGFueSBjb21wb25lbnQgcnVsZSBhcyB3ZSB3aWxsIGJlIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgZm9yIGNvbXBvbmVudHMgb25seVxuICAgICAgICBpZiAocGFnZS5zaG93X3doZW4pIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5zaG93X3doZW4gPSBjb21wb25lbnQuc2hvd193aGVuID9cbiAgICAgICAgICAgICAgICBbLi4uVXRpbHMudG9BcnJheShwYWdlLnNob3dfd2hlbiksIC4uLlV0aWxzLnRvQXJyYXkoY29tcG9uZW50LnNob3dfd2hlbildIDogcGFnZS5zaG93X3doZW47XG4gICAgICAgIH1cblxuICAgICAgICBVdGlscy5hZGRWYWx1ZShwYXRoLCBjb21wb25lbnQsIGFsbENvbXBvbmVudHMpOyAvLyBUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBjb21wb25lbnQgcGVyIHBhdGgsIHNvIGtlZXAgYSBtYXAgb2YgPHBhdGgsIGFycmF5PlxuICAgICAgICAvLyByZWN1cnNlIGlmIHRoZXJlIGlzIG5lc3RpbmdcbiAgICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuY29tcG9uZW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlNYXBGaWVsZHNBbmREZWxldGVIaWRkZW5OZXN0ZWQocGFnZSwgYywgcGF0aCwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgZm9ybURhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50Py5kYXRhPy5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb21wb25lbnQ/LmRhdGE/Lm9wdGlvbnM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24ubmVzdGVkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbiA9ICFvcHRpb25Jc1NlbGVjdGVkKGdldFNvdXJjZURhdGEoZm9ybURhdGEsIHBhdGgpLCBvcHRpb24pOyAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1Nob3dXaGVuID0gb3B0aW9uLnNob3dfd2hlbjtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLm5lc3RlZC5mb3JFYWNoKChuZXN0ZWRDb21wb25lbnQpID0+IHsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdG8gZGVsZXRlIGhpZGRlbiBuZXN0ZWQgcXVlc3Rpb24gcGF5bG9hZCBpdGVtcyB3aGVuIHRoZSBwYXJlbnQgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZWxlY3RlZE9wdGlvbnNOZXN0ZWRQYXRocy5wdXNoKFV0aWxzLmdldE5lc3RlZFF1ZXN0aW9uUGF0aChwYXRoLCBuZXN0ZWRDb21wb25lbnQuZmllbGRJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrU2hvd1doZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkQ29tcG9uZW50LnNob3dfd2hlbiA9IGJsb2NrU2hvd1doZW47XG4gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseU1hcEZpZWxkc0FuZERlbGV0ZUhpZGRlbk5lc3RlZChwYWdlLCBuZXN0ZWRDb21wb25lbnQsIFV0aWxzLmdldEltbWVkaWF0ZVBhcmVudChwYXRoKSwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudHJ5IHBvaW50IGZvciB0aGUgcmVjdXJzaXZlIHRyYXZlcnNlIG9mIHRoZSBmb3JtIHNwZWNpZmljYXRpb24uIFxuICAgIGNvbmRlbnNlZFBhZ2VzPy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICAgIC8vIE1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY29sbGVjdGlvbnMgKHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkIHNlcGFyYXRlbHkpIGFuZCBub24tY29sbGVjdGlvbnMsIHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkIGhlcmUuXG4gICAgICAgIGlmIChwYWdlLmNoaWxkUGFnZXMpIHtcbiAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnNldChwYWdlLmNvbGxlY3Rpb24ubmFtZSwgcGFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdlLmNvbXBvbmVudHM/LmZvckVhY2goKHVzZUNvbXBvbmVudEluUGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudE9iaiA9IFV0aWxzLmZpbmRDb21wb25lbnREZWZpbml0aW9uSW5Gb3JtKHVzZUNvbXBvbmVudEluUGFnZSwgY29tcG9uZW50QnlJZE1hcCwgY29tcG9uZW50QnlGaWVsZElkTWFwKTtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseU1hcEZpZWxkc0FuZERlbGV0ZUhpZGRlbk5lc3RlZChwYWdlLCBjb21wb25lbnRPYmosIG51bGwsIGFsbENvbXBvbmVudHMsIGNvbXBvbmVudHNUb0tlZXAsIGZvcm1EYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gTm93IGRlbGV0ZSBhbGwgdGhlIHVuc2VsZWN0ZWQgb3B0aW9ucywgaWYgdGhleSBhcmUgbm90IHVzZWQgZWxzZXdoZXJlXG4gICAgdW5zZWxlY3RlZE9wdGlvbnNOZXN0ZWRQYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgICBpZiAoY29tcG9uZW50c1RvS2VlcFtwYXRoXSA+IDEpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHNUb0tlZXBbcGF0aF0gLT0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFV0aWxzLmRlbGV0ZU5vZGVCeVBhdGgoZm9ybURhdGEsIHBhdGgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgYWxsQ29sbGVjdGlvbnMgfTtcbn1cbi8qKlxuICogIFxuICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBhbGxDb21wb25lbnRzIGxpc3QuIEZvciBlYWNoIGNvbXBvbmVudCwgaXQgd2lsbCBkZXJpdmUgYWxsIHBheWxvYWQgcGF0aHMgXG4gKiB0aGF0IHRoaXMgY29tcG9uZW50IGlzIGRlcGVuZGVudCBvbi4gVGhlIHNhbWUgY29tcG9uZW50IG1pZ2h0IGJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGZvcm0sIHNvIGFkZCB0aGUgZGVwZW5kZW5jaWVzXG4gKiBmb3IgYWxsIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gKiBcbiAqIEBwYXJhbSB7TWFwfSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcyBBIG1hcCBvZiBlYWNoIGNvbXBvbmVudCB3aXRoIGRlcGVuZGVuY2llcy4gVGhlIGtleSBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIHBhdGggYW5kIHRoZSB2YWx1ZSBpcyBhIFNldCBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgZGVwZW5kZW50IG9uLiAgIFxuICogQHBhcmFtIHtNYXB9IGFsbENvbXBvbmVudHMgQWxsIGNvbXBvbmVudHMgaW4gZm9ybSAoaW5jbHVkaW5nIG5lc3RlZCksIGtleWVkIGJ5IHBhdGguIFVzZWQgdG8gYnVpbGQgdGhlIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzXG4gKiBAcmV0dXJuIHtNYXAgfWFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzIGdyYXBoIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYWxsIGVudGl0aWVzXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoID0gKGFsbENvbXBvbmVudHMpID0+IHtcblxuICAgIGNvbnN0IGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzID0gbmV3IE1hcCgpO1xuXG4gICAgYWxsQ29tcG9uZW50cz8uZm9yRWFjaCgoY29tcG9uZW50QXJyYXkpID0+IHtcbiAgICAgICAgY29tcG9uZW50QXJyYXk/LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQuZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RGVwZW5kZW5jaWVzID0gVXRpbHMuZ2V0RGVwZW5kZW5jaWVzKGNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLmhhcyhjb21wb25lbnQucGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTZXQgPSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcy5nZXQoY29tcG9uZW50LnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnREZXBlbmRlbmNpZXMuZm9yRWFjaChkZXAgPT4gZXhpc3RpbmdTZXQuYWRkKGRlcCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLnNldChjb21wb25lbnQucGF0aCwgbmV3IFNldChjb21wb25lbnREZXBlbmRlbmNpZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzO1xufVxuXG4vKipcbiAqIFxuICogVGhpcyBmdW5jdGlvbiBsb29wcyB0aHJvdWdoIGVhY2ggZW50cnkgaW4gdGhlIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzIG1hcC4gRWFjaCBlbnRyeSB3aWxsIGNvbnRhaW4gYSBTZXQgb2YgYWxsXG4gKiBwYXRocyB0aGF0IHRoZSBrZXkgcGF0aCBpcyBkZXBlbmRlbnQgb24uIFJlY3Vyc2l2ZWx5IGRlbHZlIGludG8gZWFjaCBkZXBlbmRlbmN5IHBhdGggYW5kIHJlcGVhdCB0aGUgcHJvY2VzcyB1bnRpbCB3ZVxuICogaGF2ZSByZWFjaGVkIGFuIGVudHJ5IHRoYXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gQXQgdGhpcyBwb2ludCB3ZSBjYW4gc2FmZWx5IHJlc29sdmUgdGhlIGRlcGVuZGVuY3kgdXNpbmcgaXRzIHNob3dfd2hlbiBydWxlLCBcbiAqIGFuZCB1bndpbmQgdGhlIHJlY3Vyc2lvbi4gXG4gKiBcbiAqIEJlY2F1c2UgYWxsIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlci1jb25uZWN0ZWQsIHRoaXMgY291bGQgcmVzdWx0IGluIHJlc29sdmluZyB0aGUgc2FtZSBlbnRyeSByZXBlYXRlZGx5LCBzbyBrZWVwIGEgJ3Zpc2l0ZWQnIFxuICogYXJyYXkgdG8gcHJldmVudCB0aGlzLlxuICogICBcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YSBUaGUgZm9ybSBwYXlsb2FkXG4gKiBAcGFyYW0ge01hcH0gYWxsQ29tcG9uZW50cyBBbGwgY29tcG9uZW50cyBpbiBmb3JtIChpbmNsdWRpbmcgbmVzdGVkKSwga2V5ZWQgYnkgcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudHNUb0tlZXAgQSBjb3VudCBvZiBob3cgbWFueSB0aW1lcyBlYWNoIGNvbXBvbmVudCBpcyB1c2VkLCB0byBwcmV2ZW50IHVzIGRlbGV0aW5nIGNvbXBvbmVudHMgZGVmaW5lZCA+IDEgdGltZXNcbiAqIEBwYXJhbSB7TWFwfSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwcyBBIG1hcCBvZiBlYWNoIGNvbXBvbmVudCB3aXRoIGRlcGVuZGVuY2llcy4gVGhlIGtleSBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIHBhdGggYW5kIHRoZSB2YWx1ZSBpcyBhIFNldCBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgZGVwZW5kZW50IG9uLiAgIFxuICogQHBhcmFtIHtNYXB9IGFsbENvbGxlY3Rpb25zIEEgbWFwIG9mIGNvbGxlY3Rpb24gb2JqZWN0cywgd2hpY2ggYXJlIGEgZ3JvdXBpbmcgb2YgdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCBhIHNpbmdsZSBjb2xsZWN0aW9uICBcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtIFRoZSBmb3JtIHNwZWNpZmljYXRpb25cbiAqL1xuY29uc3QgcmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoID0gKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBhbGxDb21wb25lbnRzLCBjb21wb25lbnRzVG9LZWVwLCBhbGxDb2xsZWN0aW9ucywgZm9ybSwgZm9ybURhdGEpID0+IHtcbiAgICAvKlxuICAgICAqIElubmVyIGZ1bmN0aW9uIHRvIHN1cHBvcnQgdGhlIHJlY3Vyc2lvbiByZXF1aXJlZCB0byB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBuZXN0ZWQgbmF0dXJlIG9mIHRoZSBhbGxEZXBlbmRlbmN5UmVsYXRpb25zaGlwc1xuICAgICAqL1xuICAgIGNvbnN0IHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyA9ICh2aXNpdGVkLCBkZXBlbmRlbnRDb21wb25lbnQsIGRlcGVuZGVuY3lSZWxhdGlvbnNoaXBzKSA9PiB7XG5cbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKGRlcGVuZGVudENvbXBvbmVudCkpIHJldHVybjtcbiAgICAgICAgdmlzaXRlZC5hZGQoZGVwZW5kZW50Q29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jeVJlbGF0aW9uc2hpcHMuZ2V0KGRlcGVuZGVudENvbXBvbmVudC5wYXRoKTtcblxuICAgICAgICBkZXBlbmRlbmNpZXM/LmZvckVhY2goKGRlcGVuZGVuY3lQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5Q29tcG9uZW50cyA9IFV0aWxzLmdldERlcGVuZGVuY3lPYmplY3RGcm9tUGF0aChkZXBlbmRlbmN5UGF0aCwgYWxsQ29tcG9uZW50cyk7XG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeUNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5Q29tcG9uZW50cy5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyh2aXNpdGVkLCBkZXBlbmRlbmN5LCBkZXBlbmRlbmN5UmVsYXRpb25zaGlwcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGhlcmUgaWYgdGhlIGRlcGVuZGVuY3kgcGF0aCB3YXMgbm90IGZvdW5kIGluIHRoZSBsaXN0IG9mIGFsbENvbXBvbmVudHMuIFRoaXMgaXMgdmFsaWQgYW5kIGNhbiBoYXBwZW4gd2hlbiBcbiAgICAgICAgICAgICAgICAvLyBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQgb24gYSBmaWVsZCB0aGF0IHdhcyBnZW5lcmF0ZWQgYnkgY29wLXVpLCBlLmcuIGpvYkhvbGRlclN0YWZmRGV0YWlscy5saW5lbWFuYWdlckVtYWlsLlxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIGFuIGVkZ2UgY2FzZSAoZGVzY3JpYmVkIGluIHRoZSBtZXNzYWdlIGJlbG93KSB0aGF0IHdlIG5lZWQgdG8gdmFsaWRhdGUgZm9yLiAgXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlOYW1lUGF0dGVybiA9IC8oW2EtekEtWl8kXVtcXHckXSopXFxbXFxkK1xcXS87XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZXBlbmRlbmN5UGF0aC5tYXRjaChhcnJheU5hbWVQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGFsbENvbGxlY3Rpb25zLmdldChjb2xsZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmNoaWxkUGFnZXM/LmZvckVhY2goY2hpbGRQYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRQYWdlLnNob3dfd2hlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWxpYWJseSBjbGVhbiBoaWRkZW4gZGF0YSB3aGVuIGEgY29tcG9uZW50IGlzIGRlcGVuZGVudCBvbiBhIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uJ3MgZGF0YSwgYW5kIHRoYXQgY29sbGVjdGlvbiBpcyBpdHNlbGYgZGVwZW5kZW50IG9uIGRhdGEgZWxzZXdoZXJlIGluIHRoZSBmb3JtLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBwYXRoIGlzICR7ZGVwZW5kZW5jeVBhdGh9LCBhbmQgdGhlIGNoYWluZWQgc2hvd193aGVuIGlzICR7SlNPTi5zdHJpbmdpZnkoY2hpbGRQYWdlLnNob3dfd2hlbil9LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9ybSB3aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBicmVhayB0aGlzIGNoYWluZWQgZGVwZW5kZW5jeWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFdoaWxzdCB1bnJhdmVsbGluZyB0aGUgcmVjdXJzaW9uLCB3ZSBjYW4gc3RhcnQgZGVsZXRpbmcgZnJvbSB0aGUgbGVhZiB1cHdhcmRzXG4gICAgICAgIGlmICghVXRpbHMuaXNTaG93RW50aXR5KGRlcGVuZGVudENvbXBvbmVudCwgZm9ybURhdGEpKSB7XG4gICAgICAgICAgICBVdGlscy5kZWxldGVDb21wb25lbnREYXRhKGZvcm1EYXRhLCBkZXBlbmRlbnRDb21wb25lbnQucGF0aCwgZGVwZW5kZW50Q29tcG9uZW50LCBjb21wb25lbnRzVG9LZWVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgYWxsRGVwZW5kZW5jeVJlbGF0aW9uc2hpcHM/LmZvckVhY2goKGRlcGVuZGVuY2llcywgZGVwZW5kZW50Q29tcG9uZW50UGF0aCkgPT4ge1xuICAgICAgICAvLyBFYWNoIHBhdGggdGhhdCBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQgb24gbWF5IGhhdmUgPiAxIHBvc3NpYmxlIGRlcGVuZGVudCBjb21wb25lbnRzLCBpZiBhIGZpZWxkIGlzIHVzZWQgdHdpY2VcbiAgICAgICAgY29uc3QgZGVwZW5kZW50Q29tcG9uZW50cyA9IGFsbENvbXBvbmVudHMuZ2V0KGRlcGVuZGVudENvbXBvbmVudFBhdGgpO1xuICAgICAgICBkZXBlbmRlbnRDb21wb25lbnRzPy5mb3JFYWNoKChkZXBlbmRlbnRDb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwZW5kZW50Q29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzb2x2ZURlcGVuZGVuY2llcyh2aXNpdGVkLCBkZXBlbmRlbnRDb21wb25lbnQsIGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBmb3JtLCBmb3JtRGF0YSwgYWxsQ29tcG9uZW50cywgY29tcG9uZW50c1RvS2VlcCwgYWxsQ29sbGVjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBGb3IgZWFjaCBjb2xsZWN0aW9uLCBpdGVyYXRlIHRocm91Z2ggdGhlIHBheWxvYWQgYXJyYXkncyBvYmplY3RzLCBhbmQgYXBwbHkgdGhlIGNvbGxlY3Rpb25zIHNob3dfd2hlblxuICogcnVsZXMgZm9yIGVhY2ggcGF5bG9hZCBvYmplY3QuXG4gKiBcbiAqIFNvbWUgb2YgdGhlIHJ1bGVzIG1heSBiZSBkZXBlbmRlbnQgb24gcGF5bG9hZCBpdGVtcyBvdXRzaWRlIHRoZSBjb2xsZWN0aW9uLiBUaGVzZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNsZWFuc2VkXG4gKiBzbyB3aWxsIGJlIGluIGEgcmVsaWFibGUgc3RhdGUuIFxuICogXG4gKiBJdCBpcyBwb3NzaWJsZSBpbiB0aGUgZm9ybSBzcGVjIHRvIHNwZWNpZnkgaW4gdGhlIG1hc3RlciBwYWdlIHRoYXQgdGhlIHdob2xlIGNvbGxlY3Rpb24gaGFzIGEgc2hvd193aGVuIHJ1bGUuXG4gKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBldmFsdWF0ZSB0aGUgcnVsZSBhbmQgaWYgZmFsc2UgZGVsZXRlIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBhcnJheS4gIFxuICogXG4gKiBAcGFyYW0ge01hcH0gYWxsQ29sbGVjdGlvbnMgQSBtYXAgb2YgY29sbGVjdGlvbiBvYmplY3RzLCB3aGljaCBhcmUgYSBncm91cGluZyBvZiB0aGUgcGFnZXMgdGhhdCBtYWtlIHVwIGEgc2luZ2xlIGNvbGxlY3Rpb24gIFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1EYXRhIFRoZSBmb3JtIHBheWxvYWRcbiAqIEBwYXJhbSB7TWFwfSBjb21wb25lbnRCeUlkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGlkXG4gKiBAcGFyYW0ge01hcH0gY29tcG9uZW50QnlGaWVsZElkTWFwIE1hcCBvZiBhbGwgY29tcG9uZW50cywgdG8gZW5hYmxlIHBlcmZvcm1hbnQgbG9va3VwIGJ5IGZpZWxkSWRcbiAqL1xuY29uc3QgY2xlYW5zZUNvbGxlY3Rpb25EYXRhID0gKGFsbENvbGxlY3Rpb25zLCBmb3JtRGF0YSwgY29tcG9uZW50QnlJZE1hcCwgY29tcG9uZW50QnlGaWVsZElkTWFwKSA9PiB7XG4gICAgYWxsQ29sbGVjdGlvbnM/LmZvckVhY2goKGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25OYW1lKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNTaG93RW50aXR5KGNvbGxlY3Rpb24sIGZvcm1EYXRhKSkge1xuICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBhcnJheSAoaW5jbHVkaW5nIGFjdGl2ZUlkKSBpZiB0aGUgbWFzdGVyIHBhZ2UgaGFzIGFuIHVubWV0IHJ1bGVcbiAgICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtjb2xsZWN0aW9uTmFtZV07XG4gICAgICAgICAgICBkZWxldGUgZm9ybURhdGFbYCR7Y29sbGVjdGlvbk5hbWV9QWN0aXZlSWRgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uRGF0YUFycmF5ID0gZm9ybURhdGFbY29sbGVjdGlvbk5hbWVdO1xuICAgICAgICBjb2xsZWN0aW9uRGF0YUFycmF5Py5mb3JFYWNoKGNvbGxlY3Rpb25EYXRhRW50cnkgPT4ge1xuICAgICAgICAgICAgLy8gVGhlIGZvcm1zIGFyZSB3cml0dGVuIHN1Y2ggdGhhdCBhIHNob3dfd2hlbiBpbiBhIGNvbGxlY3Rpb24gYXJyYXkgb2JqZWN0IGNhbiBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgZGF0YSByZWxhdGl2ZSB0byB0aGF0IGRhdGEgb2JqZWN0XG4gICAgICAgICAgICAvLyBPUiBhZ2FpbnN0IHRoZSBkYXRhIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBmb3JtLiBUbyBhY2hpZXZlIHRoYXQsIHdlJ2xsIGNvcHkgdGhlIGNvbGxlY3Rpb24gb2JqZWN0IHRvIHRoZSByb290IG9mIHRoZSBmb3JtIGJlZm9yZSBldmFsdWF0aW5nXG4gICAgICAgICAgICBjb25zdCBkYXRhRm9yRXZhbHVhdGlvbiA9IHsgLi4uZm9ybURhdGEsIC4uLmNvbGxlY3Rpb25EYXRhRW50cnkgfTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50c1RvUHJ1bmUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLmNoaWxkUGFnZXM/LmZvckVhY2goY2hpbGRQYWdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93UGFnZSA9IFV0aWxzLmlzU2hvd0VudGl0eShjaGlsZFBhZ2UsIGRhdGFGb3JFdmFsdWF0aW9uKTtcbiAgICAgICAgICAgICAgICBjaGlsZFBhZ2UuY29tcG9uZW50cz8uZm9yRWFjaCh1c2VDb21wb25lbnRJblBhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRPYmogPSBVdGlscy5maW5kQ29tcG9uZW50RGVmaW5pdGlvbkluRm9ybSh1c2VDb21wb25lbnRJblBhZ2UsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vbi1kYXRhIGNvbXBvbmVudHMgY2FuIGJlIGlnbm9yZWQgKGVnIGh0bWwpXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50T2JqLmZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd0NvbXBvbmVudE9uUGFnZSA9IFV0aWxzLmlzU2hvd0VudGl0eSh1c2VDb21wb25lbnRJblBhZ2UsIGRhdGFGb3JFdmFsdWF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dQYWdlICYmIHNob3dDb21wb25lbnRPblBhZ2UgJiYgVXRpbHMuaXNTaG93RW50aXR5KGNvbXBvbmVudE9iaiwgZGF0YUZvckV2YWx1YXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtYXkgYmUgPjEgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIHBhdGggKGVnIHF1YW50aXR5IGluIEVBQjIpLCBzbyBkb24ndCBkZWxldGUgaGlkZGVuIGNvbXBvbmVudHMgaWYgdGhleSBhcmUgcmVxdWlyZWQgZWxzZXdoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoc1RvS2VlcC5hZGQoY29tcG9uZW50T2JqLmZpZWxkSWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1RvUHJ1bmUuc2V0KGNvbXBvbmVudE9iai5pZCwgY29tcG9uZW50T2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBVdGlscy5wcnVuZUNvbGxlY3Rpb25FbnRyeShwYXRoc1RvS2VlcCwgY29tcG9uZW50c1RvUHJ1bmUsIGNvbGxlY3Rpb25EYXRhRW50cnksIGZvcm1EYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFxuICAgICAgICBpZiAoY29sbGVjdGlvbkRhdGFBcnJheSkgVXRpbHMucmVtb3ZlT2JqZWN0V2l0aE9ubHlTaW5nbGVJZEZpZWxkKGNvbGxlY3Rpb25EYXRhQXJyYXkpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBhcHBseSB0aGUgc2hvd193aGVuIHJ1bGVzIGRlZmluZWQgaW4gdGhlIGZvcm0gc3BlY2lmaWNhdGlvbiB0byB0aGUgXG4gKiBmb3JtIHBheWxvYWQgKGZvcm1EYXRhKSwgYW5kIHJlbW92ZSBhbnkgZGF0YSB0aGF0IHNob3VsZCBub3QgYmUgc2hvd24gYWNjb3JkaW5nIHRvIHRob3NlIHJ1bGVzLlxuICogKHRoZSByZWFzb24gdGhpcyBkYXRhIGV4aXN0cyBpbiB0aGUgcGF5bG9hZCBpcyB0aGF0IHVzZXJzIGNhbiBhbnN3ZXIgYSBxdWVzdGlvbiBpbiBzdWNoIGEgd2F5IHRoYXQgXG4gKiBvdGhlciBxdWVzdGlvbnMgYXJlICdzaG93bicgdG8gdGhlbSwgd2hpY2ggYXJlIHRoZW4gY29tcGxldGUuIFRoZSB1c2VyIGNhbiB0aGVuIGdvIGJhY2sgYW5kIGNoYW5nZSB0aGUgb3JpZ2luYWxcbiAqIHF1ZXN0aW9uIHRvIHRoZW4gJ2hpZGUnIHRob3NlIHF1ZXN0aW9ucywgYnV0IHRoZSBhbnN3ZXJzIHRoZXkgZ2F2ZSBwZXJzaXN0IGluIHRoZSBwYXlsb2FkLiBUaGUgbXVzdCBiZSBjbGVhbnNlZFxuICogYmVmb3JlIGJlaW5nIHN1Ym1pdHRlZC5cbiAqIFxuICogVGhlcmUgYXJlIDIgdHlwZXMgb2YgcGF5bG9hZCBkYXRhIHRoYXQgaGF2ZSB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5IGJ5IHRoaXMgZnVuY3Rpb24gZm9yIGl0IHRvIHdvcmsuXG4gKiBcbiAqIDEuIERhdGEgZnJvbSBub24tcmVwZWF0aW5nIHBhZ2VzLCBjb250YWluaW5nIGNvbXBvbmVudHMuXG4gKiBcbiAqIEVhY2ggZGF0YSBpdGVtIGNhcHR1cmVkIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgcGF5bG9hZCBhcyBhIGZpZWxkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpZWxkSWQgb2YgdGhlIHBheWxvYWQuXG4gKiBJbiB0aGUgY2FzZSBvZiBjb21wb25lbnRzIHRoYXQgYXJlIG5lc3RlZCB3aXRoaW4gJ2NvbnRhaW5lcicgY29tcG9uZW50cywgdGhlIHBheWxvYWQgd2lsbCByZWZsZWN0IHRoZSBuZXN0aW5nLlxuICogVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGxldmVsIG9mIG5lc3RpbmcgaW4gYSBmb3JtLlxuICogXG4gKiBUbyBjbGVhbnNlIHRoZSBwYXlsb2FkIGZvciB0aGlzIHR5cGUgb2YgZGF0YSwgd2UgZG8gdGhlIGZvbGxvd2luZyAoaGlnaCBsZXZlbCBkZXNjcmlwdGlvbiwgc2VlIG1ldGhvZCBjb21tZW50cyBmb3IgZGV0YWlsKTpcbiAqIFxuICogLSBidWlsZCBhIG1hcCBvZiBhbGwgY29tcG9uZW50cywga2V5ZWQgYnkgdGhlaXIgcGF5bG9hZCBwYXRoIChyZXF1aXJlZCBmb3IgdGhlIG5leHQgc3RlcClcbiAqIC0gZm9yIGFsbCBvZiB0aGVzZSBjb21wb25lbnRzIHRoYXQgaGF2ZSBkZXBlbmRlbmNpZXMgKHNob3dfd2hlbiBydWxlcyksIGNyZWF0ZSBhIGdyYXBoIGRhdGFzdHJ1Y3R1cmUgdG8gc2hvdyBhbGwgY29tcG9uZW50c1xuICogICBvbiB3aGljaCBhIGNvbXBvbmVudCBpcyBkZXBlbmRlbnQsIGFuZCB0aGVuIGFsbCBjb21wb25lbnRzIHRoYXQgdGhvc2UgY29tcG9uZW50cyBtYXkgYmUgZGVwZW5kZW50IG9uLiBUaGVyZSBpcyBubyBsaW1pdCB0byBcbiAqICAgdGhlIGRlcHRoIG9mIHRoZXNlIGNoYWluZWQgZGVwZW5kZW5jaWVzLlxuICogLSB0aGUgcmVhc29uIGZvciBidWlsZGluZyBhIGdyYXBoIG9mIHRoZXNlIGRlcGVuZGVuY3kgY2hhaW5zIGlzIHNvIHdlIGtub3cgdGhlIHNlcXVlbmNlIGluIHdoaWNoIHdlIG11c3QgcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLiBcbiAqICAgRm9yIGFueSBnaXZlbiBjaGFpbiBvZiBkZXBlbmRlbmNpZXMgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWlucywgYW5kIHdvcmsgb3VyIHdheVxuICogICBiYWNrIHVwIHRoZSBjaGFpbi4gSWYgbm90LCB3ZSBjb3VsZCBiZSByZXNvbHZpbmcgYSBkZXBlbmRlbmN5IGJhc2VkIG9uIGEgcGF5bG9hZCBpdGVtIHRoYXQgaXRzZWxmIHdpbGwgbGF0ZXIgYmUgZGVsZXRlZC5cbiAqICAgVGhlcmVmb3JlLCB0aGUgZmluYWwgc3RlcCBpcyB0byByZWN1cnNpdmVseSB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCwgcmVzb2x2aW5nIHRoZSBkZXBlbmRlbmN5IHJ1bGUgZm9yIHRoZSBjb21wb25lbnRzIGluIFxuICogICB0aGUgY2hhaW4gZnJvbSB0aGUgbGVhZiBiYWNrIHVwIHRvIHRoZSBwYXJlbnQgbm9kZS4gXG4gKiBcbiAqIDIuIFBhZ2UgY29sbGVjdGlvbiBkYXRhXG4gKiBcbiAqIEEgcGFnZSBjb2xsZWN0aW9uIGlzIGEgc2V0IG9mIG9uZSBvciBtb3JlIHBhZ2VzIHdoaWNoIChhcyBhIGdyb3VwKSBjYW4gYmUgZmlsbGVkIGluIGFzIG1hbnkgdGltZXMgaXMgcmVxdWlyZWRcbiAqIGJ5IHRoZSB1c2VyLiBGb3IgZXhhbXBsZSwgaW4gRUFCLCB5b3UgY2FuIGFkZCBhcyBtYW55IGl0ZW0tc2VhbC1kZXRhaWxzIHRvIGFuIEVBQiBmb3JtIGFzIGFyZSByZXF1aXJlZC4gQW4gaXRlbS1zZWFsLWRldGFpbFxuICogaXMgbWFkZSB1cCBvZiBzZXZlcmFsIGRpZmZlcmVudCBwYWdlcywgYWxsIGdyb3VwZWQuIFRoZSBkYXRhIHNhdmVkIHdpbGwgYmUgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSB3aG9sZSBjb2xsZWN0aW9uLCB3aXRoXG4gKiBlYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNvbGxlY3Rpb24gZW50cnkgKGEgc2luZ2xlIGl0ZW0tc2VhbC1kZXRhaWwgaW4gdGhpcyBleGFtcGxlKS5cbiAqIFxuICogQ2xlYW5zZSBjb2xsZWN0aW9uIGRhdGEgaGFzIHRvIGJlIGRyaXZlbiBmcm9tIHRoZSBwYXlsb2FkIHJhdGhlciB0aGFuIHRoZSBmb3JtLCBhcyB0aGVyZSBhcmUgcmVwZWF0ZWQgb2JqZWN0cyBpbiBhbiBhcnJheVxuICogcmVwcmVzZW50aW5nIHRoZSBkYXRhLiBFYWNoIG9uZSBoYXMgdG8gYmUgdHJlYXRlZCBpbmRlcGVuZGVudGx5IGFzIHRoZSBkYXRhIHRvIGJlIGNsZWFuc2VkIGNhbiBiZSBkaWZmZXJlbnQgaW4gZWFjaCBvbmUuXG4gKiAgXG4gKiAtIEZvciBlYWNoIGNvbGxlY3Rpb24gdHlwZSwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGF5bG9hZCBvYmplY3QgYW5kIHRyZWF0IGl0IGxpa2UgYW4gaW5kZXBlbmRlbnQgcGF5bG9hZC4uXG4gKiAtIEZvciBlYWNoIGNvbGxlY3Rpb24gcGF5bG9hZCBvYmplY3QsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY29sbGVjdGlvbidzIHBhZ2VzIGFuZCBjb21wb25lbnRzLCBhbmQgYXBwbHkgYWxsIHRoZSBzaG93X3doZW4gcnVsZXNcbiAqICAgZm91bmQgYXQgYm90aCBwYWdlIGFuZCBjb21wb25lbnQgbGV2ZWwgdG8gdGhlIHBheWxvYWQuIFxuICogLSBSZXBlYXQgZm9yIGVhY2ggcGF5bG9hZCBvYmplY3RcbiAqIC0gUmVwZWF0IGZvciBhbGwgY29sbGVjdGlvbnNcbiAqIFxuICogQHBhcmFtIHsqfSBmb3JtIFxuICogQHBhcmFtIHsqfSBmb3JtRGF0YSBcbiAqIEByZXR1cm5zIHsqfSBjbGVhbnNlZCBmb3JtIGRhdGEgXG4gKi9cbmNvbnN0IGNsZWFyT3V0VW5jb21wbGV0ZWRSb3V0ZXMgPSAoY2xlYW5zZUhpZGRlbkRhdGEsIGZvcm0sIGZvcm1EYXRhKSA9PiB7XG5cbiAgICBpZiAoIWNsZWFuc2VIaWRkZW5EYXRhKSByZXR1cm4gZm9ybURhdGE7XG5cbiAgICAvLyBMb2FkIGNvbXBvbmVudHMgaW50byBtYXBzIGtleWVkIG9uIGlkIGFuZCBmaWVsZCBmb3Igc3Vic2VxdWVudCBwZXJmb3JtYW50IGFjY2Vzc1xuICAgIGNvbnN0IGNvbXBvbmVudEJ5SWRNYXAgPSBuZXcgTWFwKGZvcm0uY29tcG9uZW50cy5tYXAoYyA9PiBbYy5pZCwgY10pKTtcbiAgICBjb25zdCBjb21wb25lbnRCeUZpZWxkSWRNYXAgPSBuZXcgTWFwKGZvcm0uY29tcG9uZW50cy5tYXAoYyA9PiBbYy5maWVsZElkLCBjXSkpO1xuXG4gICAgLy8gR3JvdXAgYWxsIHBhZ2VzIHJlbGF0aW5nIHRvIGEgcGFnZS1jb2xsZWN0aW9uIGludG8gYSBzaW5nbGUgb2JqZWN0IHRvIGFpZCBjb2xsZWN0aW9uIFxuICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB0byBhbGxvdyB1cyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBjb2xsZWN0aW9uIGFuZCBub24tY29sbGVjdGlvbiBwYWdlLlxuICAgIGNvbnN0IGNvbmRlbnNlZFBhZ2VzID0gbWVyZ2VDb2xsZWN0aW9uUGFnZXMoZm9ybS5wYWdlcyk7XG5cbiAgICBjb25zdCB7IGFsbENvbXBvbmVudHMsIGNvbXBvbmVudHNUb0tlZXAsIGFsbENvbGxlY3Rpb25zIH0gPSBjcmVhdGVDb21wb25lbnRNYXBzRnJvbUZvcm0oY29uZGVuc2VkUGFnZXMsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCwgZm9ybURhdGEpO1xuICAgIGNvbnN0IGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzID0gY3JlYXRlQ29tcG9uZW50RGVwZW5kZW5jaWVzR3JhcGgoYWxsQ29tcG9uZW50cyk7XG4gICAgcmVzb2x2ZUNvbXBvbmVudERlcGVuZGVuY2llc0dyYXBoKGFsbERlcGVuZGVuY3lSZWxhdGlvbnNoaXBzLCBhbGxDb21wb25lbnRzLCBjb21wb25lbnRzVG9LZWVwLCBhbGxDb2xsZWN0aW9ucywgZm9ybSwgZm9ybURhdGEpO1xuICAgIGNsZWFuc2VDb2xsZWN0aW9uRGF0YShhbGxDb2xsZWN0aW9ucywgZm9ybURhdGEsIGNvbXBvbmVudEJ5SWRNYXAsIGNvbXBvbmVudEJ5RmllbGRJZE1hcCk7XG5cbiAgICAvLyBUaGUgY2xlYW5zaW5nIGFib3ZlIG1heSBoYXZlIGxlZnQgZW1wdHkgYXJyYXlzIGFuZCBjb2xsZWN0aW9uIElEcy4gVGlkeSB0aGVzZSB1cC5cbiAgICBVdGlscy5yZW1vdmVFbXB0eUFycmF5c0FuZFVudXNlZENvbGxlY3Rpb25JRHMoZm9ybURhdGEpO1xuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xlYXJPdXRVbmNvbXBsZXRlZFJvdXRlcztcblxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQThELFNBQUFFLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTCx1QkFBQSxZQUFBQSxDQUFBRyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxD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
|