@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,603 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
4
|
-
var _axiosMockAdapter = _interopRequireDefault(require("axios-mock-adapter"));
|
|
5
|
-
var _react = _interopRequireDefault(require("react"));
|
|
6
|
-
var _reactDom = require("react-dom");
|
|
7
|
-
var _testUtils = require("react-dom/test-utils");
|
|
8
|
-
var _areYouACivilServant = _interopRequireDefault(require("../../json/areYouACivilServant.json"));
|
|
9
|
-
var _grade = _interopRequireDefault(require("../../json/grade.json"));
|
|
10
|
-
var _team = _interopRequireDefault(require("../../json/team.json"));
|
|
11
|
-
var _userProfileData = _interopRequireDefault(require("../../json/userProfile.data.json"));
|
|
12
|
-
var _userProfile = _interopRequireDefault(require("../../json/userProfile.json"));
|
|
13
|
-
var _groupData = _interopRequireDefault(require("../../json/group.data.json"));
|
|
14
|
-
var _group = _interopRequireDefault(require("../../json/group.json"));
|
|
15
|
-
var _groupOfRow = _interopRequireDefault(require("../../json/groupOfRow.json"));
|
|
16
|
-
var _actions = _interopRequireDefault(require("../../json/actions.json"));
|
|
17
|
-
var _actionsNoSave = _interopRequireDefault(require("../../json/actionsNoSave.json"));
|
|
18
|
-
var _models = require("../../models");
|
|
19
|
-
var _setupTests = require("../../setupTests");
|
|
20
|
-
var _utils = _interopRequireDefault(require("../../utils"));
|
|
21
|
-
var _CheckYourAnswers = _interopRequireWildcard(require("./CheckYourAnswers"));
|
|
22
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
-
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); }
|
|
24
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
-
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; }
|
|
26
|
-
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; }
|
|
27
|
-
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; }
|
|
28
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
29
|
-
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); } // Global imports
|
|
30
|
-
// Local imports
|
|
31
|
-
describe('components', () => {
|
|
32
|
-
describe('CheckYourAnswers', () => {
|
|
33
|
-
const mockAxios = new _axiosMockAdapter.default(_axios.default);
|
|
34
|
-
const DATA = _utils.default.Data.setupForm(_userProfile.default.pages, _userProfile.default.components, _userProfileData.default);
|
|
35
|
-
const PAGES = _utils.default.FormPage.getAll(_userProfile.default.pages, _userProfile.default.components, _objectSpread({}, DATA));
|
|
36
|
-
const ON_ROW_ACTION_CALLS = [];
|
|
37
|
-
const ON_ROW_ACTION = row => {
|
|
38
|
-
ON_ROW_ACTION_CALLS.push(row);
|
|
39
|
-
};
|
|
40
|
-
const ON_ACTION_CALLS = [];
|
|
41
|
-
const ON_ACTION = (action, onError) => {
|
|
42
|
-
ON_ACTION_CALLS.push({
|
|
43
|
-
action,
|
|
44
|
-
onError
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
let container = null;
|
|
48
|
-
const refDataUrl = suffix => "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
|
|
49
|
-
beforeEach(() => {
|
|
50
|
-
ON_ROW_ACTION_CALLS.length = 0;
|
|
51
|
-
ON_ACTION_CALLS.length = 0;
|
|
52
|
-
container = document.createElement('div');
|
|
53
|
-
document.body.appendChild(container);
|
|
54
|
-
mockAxios.reset();
|
|
55
|
-
mockAxios.onGet(refDataUrl('areYouACivilServant')).reply(200, _areYouACivilServant.default);
|
|
56
|
-
mockAxios.onGet(refDataUrl('grade')).reply(200, _grade.default);
|
|
57
|
-
mockAxios.onGet(refDataUrl('team')).reply(200, _team.default);
|
|
58
|
-
});
|
|
59
|
-
afterEach(() => {
|
|
60
|
-
(0, _reactDom.unmountComponentAtNode)(container);
|
|
61
|
-
container.remove();
|
|
62
|
-
container = null;
|
|
63
|
-
});
|
|
64
|
-
const checkCYA = cyaContainer => {
|
|
65
|
-
const checkCYAContainer = cyaContainer;
|
|
66
|
-
const cya = checkCYAContainer.childNodes[0];
|
|
67
|
-
expect(cya.tagName).toEqual('DIV');
|
|
68
|
-
expect(cya.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
|
|
69
|
-
return cya;
|
|
70
|
-
};
|
|
71
|
-
const checkRow = (row, key, value, action) => {
|
|
72
|
-
expect(row.textContent).toContain(key);
|
|
73
|
-
expect(row.textContent).toContain(value);
|
|
74
|
-
if (action) {
|
|
75
|
-
expect(row.textContent).toContain('Change');
|
|
76
|
-
} else {
|
|
77
|
-
expect(row.textContent).not.toContain('Change');
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
it('should show default title if none is provided', async () => {
|
|
81
|
-
await (0, _testUtils.act)(async () => {
|
|
82
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
83
|
-
pages: PAGES,
|
|
84
|
-
onRowAction: ON_ROW_ACTION,
|
|
85
|
-
onAction: ON_ACTION
|
|
86
|
-
}), container);
|
|
87
|
-
});
|
|
88
|
-
const cya = checkCYA(container);
|
|
89
|
-
const title = cya.childNodes[0];
|
|
90
|
-
expect(title.classList).toContain('govuk-heading-l');
|
|
91
|
-
expect(title.textContent).toEqual(_CheckYourAnswers.DEFAULT_TITLE);
|
|
92
|
-
});
|
|
93
|
-
it('should allow title to be overridden', async () => {
|
|
94
|
-
const TITLE = 'Alpha Bravo Charlie';
|
|
95
|
-
await (0, _testUtils.act)(async () => {
|
|
96
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
97
|
-
title: TITLE,
|
|
98
|
-
pages: PAGES,
|
|
99
|
-
onRowAction: ON_ROW_ACTION,
|
|
100
|
-
onAction: ON_ACTION
|
|
101
|
-
}), container);
|
|
102
|
-
});
|
|
103
|
-
const cya = checkCYA(container);
|
|
104
|
-
const title = cya.childNodes[0];
|
|
105
|
-
expect(title.classList).toContain('govuk-heading-l');
|
|
106
|
-
expect(title.textContent).toEqual(TITLE);
|
|
107
|
-
});
|
|
108
|
-
it('should show readonly page components correctly', async () => {
|
|
109
|
-
await (0, _testUtils.act)(async () => {
|
|
110
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
111
|
-
pages: PAGES,
|
|
112
|
-
onRowAction: ON_ROW_ACTION,
|
|
113
|
-
onAction: ON_ACTION
|
|
114
|
-
}), container);
|
|
115
|
-
});
|
|
116
|
-
const cya = checkCYA(container);
|
|
117
|
-
const [, cyaChildNode] = cya.childNodes;
|
|
118
|
-
const names = cyaChildNode.childNodes[0];
|
|
119
|
-
expect(names.tagName).toEqual('DIV');
|
|
120
|
-
expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
|
|
121
|
-
const [firstName, surname] = names.childNodes;
|
|
122
|
-
checkRow(firstName, 'First name', 'John', false);
|
|
123
|
-
checkRow(surname, 'Last name', 'Smith', false);
|
|
124
|
-
});
|
|
125
|
-
it('should show editable page components correctly', async () => {
|
|
126
|
-
await (0, _testUtils.act)(async () => {
|
|
127
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
128
|
-
pages: PAGES,
|
|
129
|
-
onRowAction: ON_ROW_ACTION,
|
|
130
|
-
onAction: ON_ACTION
|
|
131
|
-
}), container);
|
|
132
|
-
});
|
|
133
|
-
const cya = checkCYA(container);
|
|
134
|
-
const [,, title, cyaChildNode] = cya.childNodes;
|
|
135
|
-
const civilServant = cyaChildNode.childNodes[0];
|
|
136
|
-
expect(title.textContent).toEqual('Are you a civil servant?');
|
|
137
|
-
expect(civilServant.tagName).toEqual('DIV');
|
|
138
|
-
expect(civilServant.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
|
|
139
|
-
const [status] = civilServant.childNodes;
|
|
140
|
-
checkRow(status, 'Are you a civil servant?', 'Yes', true);
|
|
141
|
-
});
|
|
142
|
-
it('should show editable page components correctly with page titles hidden', async () => {
|
|
143
|
-
await (0, _testUtils.act)(async () => {
|
|
144
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
145
|
-
pages: PAGES,
|
|
146
|
-
onRowAction: ON_ROW_ACTION,
|
|
147
|
-
onAction: ON_ACTION,
|
|
148
|
-
hide_page_titles: true
|
|
149
|
-
}), container);
|
|
150
|
-
});
|
|
151
|
-
const cya = checkCYA(container);
|
|
152
|
-
const [,, cyaChildNode] = cya.childNodes; // The title simply isn't returned
|
|
153
|
-
const civilServant = cyaChildNode.childNodes[0];
|
|
154
|
-
expect(civilServant.tagName).toEqual('DIV');
|
|
155
|
-
expect(civilServant.classList).toContain("govuk-!-margin-bottom-0"); // Changed margin if no titles
|
|
156
|
-
const [status] = civilServant.childNodes;
|
|
157
|
-
checkRow(status, 'Are you a civil servant?', 'Yes', true);
|
|
158
|
-
});
|
|
159
|
-
it('should only show change link next to the heading when the page is configured to only have a single change link', async () => {
|
|
160
|
-
const CUSTOM_PAGES = PAGES.map(page => _objectSpread(_objectSpread({}, page), {}, {
|
|
161
|
-
cya_link: {
|
|
162
|
-
page: page.id,
|
|
163
|
-
aria_suffix: 'page details',
|
|
164
|
-
singleChangeLink: true
|
|
165
|
-
}
|
|
166
|
-
}));
|
|
167
|
-
await (0, _testUtils.act)(async () => {
|
|
168
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
169
|
-
pages: CUSTOM_PAGES,
|
|
170
|
-
onRowAction: ON_ROW_ACTION,
|
|
171
|
-
onAction: ON_ACTION
|
|
172
|
-
}), container);
|
|
173
|
-
});
|
|
174
|
-
const cya = checkCYA(container);
|
|
175
|
-
const [,, title, cyaChildNode] = cya.childNodes;
|
|
176
|
-
expect(title.tagName).toEqual('DIV');
|
|
177
|
-
expect(title.classList).toContain('heading-with-action');
|
|
178
|
-
const titleText = title.children[0];
|
|
179
|
-
expect(titleText.tagName).toEqual('DIV');
|
|
180
|
-
expect(titleText.classList).toContain('heading-text');
|
|
181
|
-
expect(titleText.textContent).toEqual('Are you a civil servant?');
|
|
182
|
-
const titleAction = title.children[1];
|
|
183
|
-
expect(titleAction.tagName).toEqual('DIV');
|
|
184
|
-
expect(titleAction.classList).toContain('heading-action');
|
|
185
|
-
expect(titleAction.textContent).toEqual("Change page details");
|
|
186
|
-
const civilServant = cyaChildNode.childNodes[0];
|
|
187
|
-
expect(civilServant.tagName).toEqual('DIV');
|
|
188
|
-
const [status] = civilServant.childNodes;
|
|
189
|
-
checkRow(status, 'Are you a civil servant?', 'Yes', false);
|
|
190
|
-
});
|
|
191
|
-
it('should only show change link next to the heading when the page is configured to have a single change link and form is a task list', async () => {
|
|
192
|
-
const CUSTOM_PAGES = PAGES.map(page => _objectSpread(_objectSpread({}, page), {}, {
|
|
193
|
-
cya_link: {
|
|
194
|
-
page: page.id,
|
|
195
|
-
aria_suffix: 'page details',
|
|
196
|
-
singleChangeLink: true
|
|
197
|
-
}
|
|
198
|
-
}));
|
|
199
|
-
const SECTIONS = [{
|
|
200
|
-
name: 'These are your tasks',
|
|
201
|
-
tasks: [{
|
|
202
|
-
name: 'Task 1',
|
|
203
|
-
state: 'complete',
|
|
204
|
-
pages: ['civil-servant-status']
|
|
205
|
-
}]
|
|
206
|
-
}];
|
|
207
|
-
await (0, _testUtils.act)(async () => {
|
|
208
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
209
|
-
pages: CUSTOM_PAGES,
|
|
210
|
-
onRowAction: ON_ROW_ACTION,
|
|
211
|
-
onAction: ON_ACTION,
|
|
212
|
-
hide_title: true,
|
|
213
|
-
sections: SECTIONS,
|
|
214
|
-
type: _models.FormTypes.TASK_CYA
|
|
215
|
-
}), container);
|
|
216
|
-
});
|
|
217
|
-
const taskHeading1 = container.childNodes[0].childNodes[0];
|
|
218
|
-
expect(taskHeading1.tagName).toEqual('H2');
|
|
219
|
-
expect(taskHeading1.textContent).toEqual('Task 1');
|
|
220
|
-
expect(taskHeading1.classList).toContain("govuk-heading-m");
|
|
221
|
-
const cya = checkCYA(container);
|
|
222
|
-
const [, title, cyaChildNode] = cya.childNodes;
|
|
223
|
-
expect(title.tagName).toEqual('DIV');
|
|
224
|
-
expect(title.classList).toContain('heading-with-action');
|
|
225
|
-
const titleText = title.children[0];
|
|
226
|
-
expect(titleText.tagName).toEqual('DIV');
|
|
227
|
-
expect(titleText.classList).toContain('heading-text');
|
|
228
|
-
expect(titleText.textContent).toEqual('Are you a civil servant?');
|
|
229
|
-
const titleAction = title.children[1];
|
|
230
|
-
expect(titleAction.tagName).toEqual('DIV');
|
|
231
|
-
expect(titleAction.classList).toContain('heading-action');
|
|
232
|
-
expect(titleAction.textContent).toEqual("Change page details");
|
|
233
|
-
const civilServant = cyaChildNode.childNodes[0];
|
|
234
|
-
expect(civilServant.tagName).toEqual('DIV');
|
|
235
|
-
const [status] = civilServant.childNodes;
|
|
236
|
-
checkRow(status, 'Are you a civil servant?', 'Yes', false);
|
|
237
|
-
});
|
|
238
|
-
it('should show no title if is set to hidden', async () => {
|
|
239
|
-
await (0, _testUtils.act)(async () => {
|
|
240
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
241
|
-
pages: PAGES,
|
|
242
|
-
onRowAction: ON_ROW_ACTION,
|
|
243
|
-
onAction: ON_ACTION,
|
|
244
|
-
hide_title: true
|
|
245
|
-
}), container);
|
|
246
|
-
});
|
|
247
|
-
const cya = checkCYA(container);
|
|
248
|
-
const [cyaChildNode] = cya.childNodes;
|
|
249
|
-
const names = cyaChildNode.childNodes[0];
|
|
250
|
-
expect(names.tagName).toEqual('DIV');
|
|
251
|
-
expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
|
|
252
|
-
const [firstName, surname] = names.childNodes;
|
|
253
|
-
checkRow(firstName, 'First name', 'John', false);
|
|
254
|
-
checkRow(surname, 'Last name', 'Smith', false);
|
|
255
|
-
});
|
|
256
|
-
it('should show task list in CYA style', async () => {
|
|
257
|
-
const sections = [{
|
|
258
|
-
name: 'These are your tasks',
|
|
259
|
-
tasks: [{
|
|
260
|
-
name: 'Task 1',
|
|
261
|
-
state: 'complete',
|
|
262
|
-
pages: ['names']
|
|
263
|
-
}, {
|
|
264
|
-
name: 'Task 2',
|
|
265
|
-
state: 'complete',
|
|
266
|
-
pages: ['grade']
|
|
267
|
-
}]
|
|
268
|
-
}];
|
|
269
|
-
await (0, _testUtils.act)(async () => {
|
|
270
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
271
|
-
pages: PAGES,
|
|
272
|
-
onRowAction: ON_ROW_ACTION,
|
|
273
|
-
onAction: ON_ACTION,
|
|
274
|
-
hide_title: true,
|
|
275
|
-
sections: sections,
|
|
276
|
-
type: "task-list-cya"
|
|
277
|
-
}), container);
|
|
278
|
-
});
|
|
279
|
-
const taskHeading1 = container.childNodes[0].childNodes[0];
|
|
280
|
-
expect(taskHeading1.tagName).toEqual('H2');
|
|
281
|
-
expect(taskHeading1.textContent).toEqual('Task 1');
|
|
282
|
-
expect(taskHeading1.classList).toContain("govuk-heading-m");
|
|
283
|
-
const namesPageHeading = container.childNodes[0].childNodes[1];
|
|
284
|
-
expect(namesPageHeading.tagName).toEqual('DIV');
|
|
285
|
-
expect(namesPageHeading.textContent).toContain('John');
|
|
286
|
-
expect(namesPageHeading.classList).toContain("group-of-rows");
|
|
287
|
-
const taskHeading2 = container.childNodes[0].childNodes[2];
|
|
288
|
-
expect(taskHeading2.tagName).toEqual('H2');
|
|
289
|
-
expect(taskHeading2.textContent).toEqual('Task 2');
|
|
290
|
-
expect(taskHeading2.classList).toContain("govuk-heading-m");
|
|
291
|
-
const gradePageHeading = container.childNodes[0].childNodes[3];
|
|
292
|
-
expect(gradePageHeading.tagName).toEqual('H3');
|
|
293
|
-
expect(gradePageHeading.textContent).toEqual("What's your grade?");
|
|
294
|
-
expect(gradePageHeading.classList).toContain("govuk-heading-s");
|
|
295
|
-
});
|
|
296
|
-
it('should show task list in CYA style and priotitise displayName over name for a task', async () => {
|
|
297
|
-
const sections = [{
|
|
298
|
-
name: 'These are your tasks',
|
|
299
|
-
tasks: [{
|
|
300
|
-
name: 'Task 1',
|
|
301
|
-
displayName: 'Blue',
|
|
302
|
-
state: 'complete',
|
|
303
|
-
pages: ['names']
|
|
304
|
-
}, {
|
|
305
|
-
name: 'Task 2',
|
|
306
|
-
displayName: 'Red',
|
|
307
|
-
state: 'complete',
|
|
308
|
-
pages: ['grade']
|
|
309
|
-
}]
|
|
310
|
-
}];
|
|
311
|
-
await (0, _testUtils.act)(async () => {
|
|
312
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
313
|
-
pages: PAGES,
|
|
314
|
-
onRowAction: ON_ROW_ACTION,
|
|
315
|
-
onAction: ON_ACTION,
|
|
316
|
-
hide_title: true,
|
|
317
|
-
sections: sections,
|
|
318
|
-
type: "task-list-cya"
|
|
319
|
-
}), container);
|
|
320
|
-
});
|
|
321
|
-
const taskHeading1 = container.childNodes[0].childNodes[0];
|
|
322
|
-
expect(taskHeading1.textContent).toEqual('Blue');
|
|
323
|
-
const taskHeading2 = container.childNodes[0].childNodes[2];
|
|
324
|
-
expect(taskHeading2.textContent).toEqual('Red');
|
|
325
|
-
});
|
|
326
|
-
it('should show task list in CYA style and not show sections without any pages', async () => {
|
|
327
|
-
const sections = [{
|
|
328
|
-
name: 'These are your tasks',
|
|
329
|
-
tasks: [{
|
|
330
|
-
name: 'Task 1',
|
|
331
|
-
displayName: 'Blue',
|
|
332
|
-
state: 'complete',
|
|
333
|
-
pages: []
|
|
334
|
-
}, {
|
|
335
|
-
name: 'Task 2',
|
|
336
|
-
displayName: 'Red',
|
|
337
|
-
state: 'complete',
|
|
338
|
-
pages: ['grade']
|
|
339
|
-
}]
|
|
340
|
-
}];
|
|
341
|
-
await (0, _testUtils.act)(async () => {
|
|
342
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
343
|
-
pages: PAGES,
|
|
344
|
-
onRowAction: ON_ROW_ACTION,
|
|
345
|
-
onAction: ON_ACTION,
|
|
346
|
-
hide_title: true,
|
|
347
|
-
sections: sections,
|
|
348
|
-
type: "task-list-cya"
|
|
349
|
-
}), container);
|
|
350
|
-
});
|
|
351
|
-
const taskHeading1 = container.childNodes[0].childNodes[0];
|
|
352
|
-
expect(taskHeading1.textContent).toEqual('');
|
|
353
|
-
const taskHeading2 = container.childNodes[0].childNodes[1];
|
|
354
|
-
expect(taskHeading2.textContent).toEqual('Red');
|
|
355
|
-
});
|
|
356
|
-
it('Show answers from multiple address fields into in one DL', async () => {
|
|
357
|
-
const ADDRESS_DATA = _utils.default.Data.setupForm(_group.default.pages, _group.default.components, _groupData.default);
|
|
358
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_group.default.pages, _group.default.components, _objectSpread({}, ADDRESS_DATA));
|
|
359
|
-
await (0, _testUtils.act)(async () => {
|
|
360
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
361
|
-
pages: GROUP_PAGES,
|
|
362
|
-
onRowAction: ON_ROW_ACTION,
|
|
363
|
-
onAction: ON_ACTION,
|
|
364
|
-
hide_title: true
|
|
365
|
-
}), container);
|
|
366
|
-
});
|
|
367
|
-
const cya = checkCYA(container);
|
|
368
|
-
const groupedComponent = cya.childNodes[10];
|
|
369
|
-
const keyGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[0];
|
|
370
|
-
expect(keyGroup.tagName).toEqual('DT');
|
|
371
|
-
expect(keyGroup.textContent).toEqual('Address details');
|
|
372
|
-
const valueGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[1];
|
|
373
|
-
expect(valueGroup.childNodes.length).toEqual(4);
|
|
374
|
-
expect(valueGroup.tagName).toEqual('DD');
|
|
375
|
-
expect(valueGroup.childNodes[0].textContent).toContain('10 Downing Street');
|
|
376
|
-
expect(valueGroup.childNodes[1].textContent).toContain('City of Westminster');
|
|
377
|
-
expect(valueGroup.childNodes[2].textContent).toContain('London');
|
|
378
|
-
expect(valueGroup.childNodes[3].textContent).toContain('SW1A 2AA');
|
|
379
|
-
const changeButtonDiv = groupedComponent.childNodes[0].childNodes[0].childNodes[2];
|
|
380
|
-
expect(changeButtonDiv.classList).toContain('govuk-summary-list__actions');
|
|
381
|
-
const changeButton = changeButtonDiv.childNodes[0];
|
|
382
|
-
expect(changeButton.tagName).toEqual('A');
|
|
383
|
-
expect(changeButton.textContent).toEqual('Change address details');
|
|
384
|
-
});
|
|
385
|
-
it('should render a group with one action button', async () => {
|
|
386
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
|
|
387
|
-
await (0, _testUtils.act)(async () => {
|
|
388
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
389
|
-
pages: GROUP_PAGES,
|
|
390
|
-
onRowAction: ON_ROW_ACTION,
|
|
391
|
-
onAction: ON_ACTION,
|
|
392
|
-
groups: _groupOfRow.default.cya.groups
|
|
393
|
-
}), container);
|
|
394
|
-
});
|
|
395
|
-
const cya = checkCYA(container);
|
|
396
|
-
const namesGroup = cya.childNodes[2];
|
|
397
|
-
const firstNameRow = namesGroup.childNodes[0].childNodes[0];
|
|
398
|
-
expect(firstNameRow.childNodes.length).toEqual(2);
|
|
399
|
-
expect(firstNameRow.childNodes[0].textContent).toEqual('First name (optional)');
|
|
400
|
-
expect(firstNameRow.childNodes[0].tagName).toEqual('DT');
|
|
401
|
-
expect(firstNameRow.childNodes[1].textContent).toEqual('John');
|
|
402
|
-
expect(firstNameRow.childNodes[1].tagName).toEqual('DD');
|
|
403
|
-
const surname = namesGroup.childNodes[0].childNodes[1];
|
|
404
|
-
expect(surname.childNodes.length).toEqual(2);
|
|
405
|
-
expect(surname.childNodes[0].textContent).toEqual('Last name (optional)');
|
|
406
|
-
expect(surname.childNodes[0].tagName).toEqual('DT');
|
|
407
|
-
expect(surname.childNodes[1].textContent).toEqual('Smith');
|
|
408
|
-
expect(surname.childNodes[1].tagName).toEqual('DD');
|
|
409
|
-
const changeButtonDiv = namesGroup.childNodes[0].childNodes[2];
|
|
410
|
-
expect(changeButtonDiv.classList).toContain('change-group-button');
|
|
411
|
-
const changeButton = changeButtonDiv.childNodes[0];
|
|
412
|
-
expect(changeButton.tagName).toEqual('A');
|
|
413
|
-
expect(changeButton.textContent).toEqual('Change names');
|
|
414
|
-
});
|
|
415
|
-
it('should show a conditional button', async () => {
|
|
416
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
|
|
417
|
-
await (0, _testUtils.act)(async () => {
|
|
418
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
419
|
-
pages: GROUP_PAGES,
|
|
420
|
-
onRowAction: ON_ROW_ACTION,
|
|
421
|
-
onAction: ON_ACTION,
|
|
422
|
-
groups: _groupOfRow.default.cya.groups,
|
|
423
|
-
actions: _actions.default
|
|
424
|
-
}), container);
|
|
425
|
-
});
|
|
426
|
-
const cya = checkCYA(container);
|
|
427
|
-
const hodsButtonDiv = cya.childNodes[7];
|
|
428
|
-
expect(hodsButtonDiv.classList).toContain('hods-button-group');
|
|
429
|
-
const submitButton = hodsButtonDiv.childNodes[0];
|
|
430
|
-
expect(submitButton.tagName).toEqual('BUTTON');
|
|
431
|
-
expect(submitButton.textContent).toEqual('Submit');
|
|
432
|
-
const saveButton = hodsButtonDiv.childNodes[1];
|
|
433
|
-
expect(saveButton.tagName).toEqual('BUTTON');
|
|
434
|
-
expect(saveButton.textContent).toEqual('Save and return later');
|
|
435
|
-
});
|
|
436
|
-
it('should not show a conditional button', async () => {
|
|
437
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
|
|
438
|
-
await (0, _testUtils.act)(async () => {
|
|
439
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
440
|
-
pages: GROUP_PAGES,
|
|
441
|
-
onRowAction: ON_ROW_ACTION,
|
|
442
|
-
onAction: ON_ACTION,
|
|
443
|
-
groups: _groupOfRow.default.cya.groups,
|
|
444
|
-
actions: _actionsNoSave.default
|
|
445
|
-
}), container);
|
|
446
|
-
});
|
|
447
|
-
const cya = checkCYA(container);
|
|
448
|
-
const hodsButtonDiv = cya.childNodes[7];
|
|
449
|
-
expect(hodsButtonDiv.classList).toContain('hods-button-group');
|
|
450
|
-
const submitButton = hodsButtonDiv.childNodes[0];
|
|
451
|
-
expect(submitButton.tagName).toEqual('BUTTON');
|
|
452
|
-
expect(submitButton.textContent).toEqual('Submit');
|
|
453
|
-
const saveButton = hodsButtonDiv.childNodes[1];
|
|
454
|
-
expect(saveButton).toEqual(undefined);
|
|
455
|
-
});
|
|
456
|
-
it('should render empty optional fields with a placeholder value when provided', async () => {
|
|
457
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, {});
|
|
458
|
-
await (0, _testUtils.act)(async () => {
|
|
459
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
460
|
-
pages: GROUP_PAGES,
|
|
461
|
-
groups: _groupOfRow.default.cya.groups,
|
|
462
|
-
optionalFieldPlaceholder: "Not entered"
|
|
463
|
-
}), container);
|
|
464
|
-
});
|
|
465
|
-
const cya = checkCYA(container);
|
|
466
|
-
const namesGroup = cya.childNodes[2];
|
|
467
|
-
const firstNameRow = namesGroup.childNodes[0].childNodes[0];
|
|
468
|
-
expect(firstNameRow.childNodes.length).toEqual(2);
|
|
469
|
-
expect(firstNameRow.childNodes[0].textContent).toEqual('First name (optional)');
|
|
470
|
-
expect(firstNameRow.childNodes[0].tagName).toEqual('DT');
|
|
471
|
-
expect(firstNameRow.childNodes[1].textContent).toEqual('Not entered');
|
|
472
|
-
expect(firstNameRow.childNodes[1].tagName).toEqual('DD');
|
|
473
|
-
const surname = namesGroup.childNodes[0].childNodes[1];
|
|
474
|
-
expect(surname.childNodes.length).toEqual(2);
|
|
475
|
-
expect(surname.childNodes[0].textContent).toEqual('Last name (optional)');
|
|
476
|
-
expect(surname.childNodes[0].tagName).toEqual('DT');
|
|
477
|
-
expect(surname.childNodes[1].textContent).toEqual('Not entered');
|
|
478
|
-
expect(surname.childNodes[1].tagName).toEqual('DD');
|
|
479
|
-
});
|
|
480
|
-
it('should show page components corrently with interpolated title and cya_label, if label is missing', async () => {
|
|
481
|
-
const _PAGES = [].concat(_userProfile.default.pages);
|
|
482
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
483
|
-
_PAGES[0] = _objectSpread(_objectSpread({}, _PAGES[0]), {}, {
|
|
484
|
-
title: 'Alpha ID: ${businessKey}'
|
|
485
|
-
});
|
|
486
|
-
const _COMPONENTS = [].concat(_userProfile.default.components);
|
|
487
|
-
_COMPONENTS[0] = _objectSpread(_objectSpread({}, _COMPONENTS[0]), {}, {
|
|
488
|
-
label: undefined,
|
|
489
|
-
required: true,
|
|
490
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
491
|
-
cya_label: "Text ${currentUser.familyName}"
|
|
492
|
-
});
|
|
493
|
-
const T_PAGES = _utils.default.FormPage.getAll(_PAGES, _COMPONENTS, DATA);
|
|
494
|
-
await (0, _testUtils.act)(async () => {
|
|
495
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
496
|
-
pages: T_PAGES,
|
|
497
|
-
onRowAction: ON_ROW_ACTION,
|
|
498
|
-
onAction: ON_ACTION
|
|
499
|
-
}), container);
|
|
500
|
-
});
|
|
501
|
-
const cya = checkCYA(container);
|
|
502
|
-
const [, cyaTitle, cyaChildNode] = cya.childNodes;
|
|
503
|
-
expect(cyaTitle.textContent).toEqual('Alpha ID: 123456789');
|
|
504
|
-
const names = cyaChildNode.childNodes[0];
|
|
505
|
-
expect(names.tagName).toEqual('DIV');
|
|
506
|
-
expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
|
|
507
|
-
const [firstName, surname] = names.childNodes;
|
|
508
|
-
const [label] = firstName.childNodes;
|
|
509
|
-
expect(label.textContent).toEqual('Text Smith');
|
|
510
|
-
checkRow(surname, 'Last name', 'Smith', false);
|
|
511
|
-
});
|
|
512
|
-
it('should show page components corrently with no label, if label and cya_label are missing', async () => {
|
|
513
|
-
const _PAGES = [].concat(_userProfile.default.pages);
|
|
514
|
-
const _COMPONENTS = [].concat(_userProfile.default.components);
|
|
515
|
-
_COMPONENTS[0] = _objectSpread(_objectSpread({}, _COMPONENTS[0]), {}, {
|
|
516
|
-
label: undefined,
|
|
517
|
-
required: true,
|
|
518
|
-
cya_label: undefined
|
|
519
|
-
});
|
|
520
|
-
const T_PAGES = _utils.default.FormPage.getAll(_PAGES, _COMPONENTS, _objectSpread({}, DATA));
|
|
521
|
-
await (0, _testUtils.act)(async () => {
|
|
522
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
523
|
-
pages: T_PAGES,
|
|
524
|
-
onRowAction: ON_ROW_ACTION,
|
|
525
|
-
onAction: ON_ACTION
|
|
526
|
-
}), container);
|
|
527
|
-
});
|
|
528
|
-
const cya = checkCYA(container);
|
|
529
|
-
const [, cyaChildNode] = cya.childNodes;
|
|
530
|
-
const names = cyaChildNode.childNodes[0];
|
|
531
|
-
expect(names.tagName).toEqual('DIV');
|
|
532
|
-
expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
|
|
533
|
-
const [firstName, surname] = names.childNodes;
|
|
534
|
-
const [label] = firstName.childNodes;
|
|
535
|
-
expect(label.textContent).toEqual("");
|
|
536
|
-
checkRow(surname, 'Last name', 'Smith', false);
|
|
537
|
-
});
|
|
538
|
-
it('should show task list in CYA style and hide pages from skipped tasks', async () => {
|
|
539
|
-
const sections = [{
|
|
540
|
-
name: 'These are your tasks',
|
|
541
|
-
tasks: [{
|
|
542
|
-
name: 'Task 1',
|
|
543
|
-
state: 'complete',
|
|
544
|
-
pages: ['names']
|
|
545
|
-
}, {
|
|
546
|
-
name: 'Task 2',
|
|
547
|
-
state: 'skipped',
|
|
548
|
-
pages: ['grade']
|
|
549
|
-
}]
|
|
550
|
-
}];
|
|
551
|
-
await (0, _testUtils.act)(async () => {
|
|
552
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
553
|
-
pages: PAGES,
|
|
554
|
-
onRowAction: ON_ROW_ACTION,
|
|
555
|
-
onAction: ON_ACTION,
|
|
556
|
-
hide_title: true,
|
|
557
|
-
sections: sections,
|
|
558
|
-
type: "task-list-cya"
|
|
559
|
-
}), container);
|
|
560
|
-
});
|
|
561
|
-
const taskHeading1 = container.childNodes[0].childNodes[0];
|
|
562
|
-
expect(taskHeading1.tagName).toEqual('H2');
|
|
563
|
-
expect(taskHeading1.textContent).toEqual('Task 1');
|
|
564
|
-
expect(taskHeading1.classList).toContain("govuk-heading-m");
|
|
565
|
-
const namesPageHeading = container.childNodes[0].childNodes[1];
|
|
566
|
-
expect(namesPageHeading.tagName).toEqual('DIV');
|
|
567
|
-
expect(namesPageHeading.textContent).toContain('John');
|
|
568
|
-
expect(namesPageHeading.classList).toContain("group-of-rows");
|
|
569
|
-
expect(container.childNodes[0].childNodes.length).toEqual(2); // second task skipped so not shown
|
|
570
|
-
});
|
|
571
|
-
it('Show answers from multiple address fields into in one DL correctly when hideBlankRows is true', async () => {
|
|
572
|
-
const ADDRESS_DATA = _utils.default.Data.setupForm(_group.default.pages, _group.default.components, _groupData.default);
|
|
573
|
-
const GROUP_PAGES = _utils.default.FormPage.getAll(_group.default.pages, _group.default.components, _objectSpread({}, ADDRESS_DATA));
|
|
574
|
-
await (0, _testUtils.act)(async () => {
|
|
575
|
-
(0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
|
|
576
|
-
pages: GROUP_PAGES,
|
|
577
|
-
onRowAction: ON_ROW_ACTION,
|
|
578
|
-
onAction: ON_ACTION,
|
|
579
|
-
hide_title: true,
|
|
580
|
-
hideBlankRows: true
|
|
581
|
-
}), container);
|
|
582
|
-
});
|
|
583
|
-
const cya = checkCYA(container);
|
|
584
|
-
const groupedComponent = cya.childNodes[6];
|
|
585
|
-
const keyGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[0];
|
|
586
|
-
expect(keyGroup.tagName).toEqual('DT');
|
|
587
|
-
expect(keyGroup.textContent).toEqual('Address details');
|
|
588
|
-
const valueGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[1];
|
|
589
|
-
expect(valueGroup.childNodes.length).toEqual(4);
|
|
590
|
-
expect(valueGroup.tagName).toEqual('DD');
|
|
591
|
-
expect(valueGroup.childNodes[0].textContent).toContain('10 Downing Street');
|
|
592
|
-
expect(valueGroup.childNodes[1].textContent).toContain('City of Westminster');
|
|
593
|
-
expect(valueGroup.childNodes[2].textContent).toContain('London');
|
|
594
|
-
expect(valueGroup.childNodes[3].textContent).toContain('SW1A 2AA');
|
|
595
|
-
const changeButtonDiv = groupedComponent.childNodes[0].childNodes[0].childNodes[2];
|
|
596
|
-
expect(changeButtonDiv.classList).toContain('govuk-summary-list__actions');
|
|
597
|
-
const changeButton = changeButtonDiv.childNodes[0];
|
|
598
|
-
expect(changeButton.tagName).toEqual('A');
|
|
599
|
-
expect(changeButton.textContent).toEqual('Change address details');
|
|
600
|
-
});
|
|
601
|
-
});
|
|
602
|
-
});
|
|
603
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9heGlvc01vY2tBZGFwdGVyIiwiX3JlYWN0IiwiX3JlYWN0RG9tIiwiX3Rlc3RVdGlscyIsIl9hcmVZb3VBQ2l2aWxTZXJ2YW50IiwiX2dyYWRlIiwiX3RlYW0iLCJfdXNlclByb2ZpbGVEYXRhIiwiX3VzZXJQcm9maWxlIiwiX2dyb3VwRGF0YSIsIl9ncm91cCIsIl9ncm91cE9mUm93IiwiX2FjdGlvbnMiLCJfYWN0aW9uc05vU2F2ZSIsIl9tb2RlbHMiLCJfc2V0dXBUZXN0cyIsIl91dGlscyIsIl9DaGVja1lvdXJBbnN3ZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfanN4UnVudGltZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImRlc2NyaWJlIiwibW9ja0F4aW9zIiwiTW9ja0FkYXB0ZXIiLCJheGlvcyIsIkRBVEEiLCJVdGlscyIsIkRhdGEiLCJzZXR1cEZvcm0iLCJVU0VSX1BST0ZJTEUiLCJwYWdlcyIsImNvbXBvbmVudHMiLCJVU0VSX1BST0ZJTEVfREFUQSIsIlBBR0VTIiwiRm9ybVBhZ2UiLCJnZXRBbGwiLCJPTl9ST1dfQUNUSU9OX0NBTExTIiwiT05fUk9XX0FDVElPTiIsInJvdyIsIk9OX0FDVElPTl9DQUxMUyIsIk9OX0FDVElPTiIsImFjdGlvbiIsIm9uRXJyb3IiLCJjb250YWluZXIiLCJyZWZEYXRhVXJsIiwic3VmZml4IiwiY29uY2F0IiwidXJscyIsInJlZkRhdGEiLCJiZWZvcmVFYWNoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwicmVzZXQiLCJvbkdldCIsInJlcGx5IiwiQ0lWSUxfU0VSVkFOVCIsIkdSQURFIiwiVEVBTVMiLCJhZnRlckVhY2giLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicmVtb3ZlIiwiY2hlY2tDWUEiLCJjeWFDb250YWluZXIiLCJjaGVja0NZQUNvbnRhaW5lciIsImN5YSIsImNoaWxkTm9kZXMiLCJleHBlY3QiLCJ0YWdOYW1lIiwidG9FcXVhbCIsImNsYXNzTGlzdCIsInRvQ29udGFpbiIsIkRFRkFVTFRfQ0xBU1MiLCJjaGVja1JvdyIsImtleSIsInRleHRDb250ZW50Iiwibm90IiwiaXQiLCJhY3QiLCJyZW5kZXJEb21XaXRoVmFsaWRhdGlvbiIsImpzeCIsIm9uUm93QWN0aW9uIiwib25BY3Rpb24iLCJ0aXRsZSIsIkRFRkFVTFRfVElUTEUiLCJUSVRMRSIsImN5YUNoaWxkTm9kZSIsIm5hbWVzIiwiREVGQVVMVF9NQVJHSU5fQk9UVE9NIiwiZmlyc3ROYW1lIiwic3VybmFtZSIsImNpdmlsU2VydmFudCIsInN0YXR1cyIsImhpZGVfcGFnZV90aXRsZXMiLCJDVVNUT01fUEFHRVMiLCJtYXAiLCJwYWdlIiwiY3lhX2xpbmsiLCJpZCIsImFyaWFfc3VmZml4Iiwic2luZ2xlQ2hhbmdlTGluayIsInRpdGxlVGV4dCIsImNoaWxkcmVuIiwidGl0bGVBY3Rpb24iLCJTRUNUSU9OUyIsIm5hbWUiLCJ0YXNrcyIsInN0YXRlIiwiaGlkZV90aXRsZSIsInNlY3Rpb25zIiwidHlwZSIsIkZvcm1UeXBlcyIsIlRBU0tfQ1lBIiwidGFza0hlYWRpbmcxIiwibmFtZXNQYWdlSGVhZGluZyIsInRhc2tIZWFkaW5nMiIsImdyYWRlUGFnZUhlYWRpbmciLCJkaXNwbGF5TmFtZSIsIkFERFJFU1NfREFUQSIsIkdST1VQRURfQUREUkVTUyIsIkdST1VQRURfQUREUkVTU19EQVRBX0pTT04iLCJHUk9VUF9QQUdFUyIsImdyb3VwZWRDb21wb25lbnQiLCJrZXlHcm91cCIsInZhbHVlR3JvdXAiLCJjaGFuZ2VCdXR0b25EaXYiLCJjaGFuZ2VCdXR0b24iLCJHUk9VUF9ST1dTIiwiZ3JvdXBzIiwibmFtZXNHcm91cCIsImZpcnN0TmFtZVJvdyIsImFjdGlvbnMiLCJBQ1RJT05TIiwiaG9kc0J1dHRvbkRpdiIsInN1Ym1pdEJ1dHRvbiIsInNhdmVCdXR0b24iLCJBQ1RJT05TTk9TQVZFIiwidW5kZWZpbmVkIiwib3B0aW9uYWxGaWVsZFBsYWNlaG9sZGVyIiwiX1BBR0VTIiwiX0NPTVBPTkVOVFMiLCJsYWJlbCIsInJlcXVpcmVkIiwiY3lhX2xhYmVsIiwiVF9QQUdFUyIsImN5YVRpdGxlIiwiaGlkZUJsYW5rUm93cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0NoZWNrWW91ckFuc3dlcnMvQ2hlY2tZb3VyQW5zd2Vycy50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdsb2JhbCBpbXBvcnRzXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IE1vY2tBZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBhY3QgfSBmcm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XG5cbi8vIExvY2FsIGltcG9ydHNcbmltcG9ydCBDSVZJTF9TRVJWQU5UIGZyb20gJy4uLy4uL2pzb24vYXJlWW91QUNpdmlsU2VydmFudC5qc29uJztcbmltcG9ydCBHUkFERSBmcm9tICcuLi8uLi9qc29uL2dyYWRlLmpzb24nO1xuaW1wb3J0IFRFQU1TIGZyb20gJy4uLy4uL2pzb24vdGVhbS5qc29uJztcbmltcG9ydCBVU0VSX1BST0ZJTEVfREFUQSBmcm9tICcuLi8uLi9qc29uL3VzZXJQcm9maWxlLmRhdGEuanNvbic7XG5pbXBvcnQgVVNFUl9QUk9GSUxFIGZyb20gJy4uLy4uL2pzb24vdXNlclByb2ZpbGUuanNvbic7XG5pbXBvcnQgR1JPVVBFRF9BRERSRVNTX0RBVEFfSlNPTiBmcm9tICcuLi8uLi9qc29uL2dyb3VwLmRhdGEuanNvbic7XG5pbXBvcnQgR1JPVVBFRF9BRERSRVNTIGZyb20gJy4uLy4uL2pzb24vZ3JvdXAuanNvbic7XG5pbXBvcnQgR1JPVVBfUk9XUyBmcm9tICcuLi8uLi9qc29uL2dyb3VwT2ZSb3cuanNvbic7XG5pbXBvcnQgQUNUSU9OUyBmcm9tICcuLi8uLi9qc29uL2FjdGlvbnMuanNvbic7XG5pbXBvcnQgQUNUSU9OU05PU0FWRSBmcm9tICcuLi8uLi9qc29uL2FjdGlvbnNOb1NhdmUuanNvbic7XG5pbXBvcnQgeyBGb3JtVHlwZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9zZXR1cFRlc3RzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgQ2hlY2tZb3VyQW5zd2VycywgeyBERUZBVUxUX0NMQVNTLCBERUZBVUxUX01BUkdJTl9CT1RUT00sIERFRkFVTFRfVElUTEUgfSBmcm9tICcuL0NoZWNrWW91ckFuc3dlcnMnO1xuXG5kZXNjcmliZSgnY29tcG9uZW50cycsICgpID0+IHtcblxuICBkZXNjcmliZSgnQ2hlY2tZb3VyQW5zd2VycycsICgpID0+IHtcbiAgICBjb25zdCBtb2NrQXhpb3MgPSBuZXcgTW9ja0FkYXB0ZXIoYXhpb3MpO1xuICAgIGNvbnN0IERBVEEgPSBVdGlscy5EYXRhLnNldHVwRm9ybShVU0VSX1BST0ZJTEUucGFnZXMsIFVTRVJfUFJPRklMRS5jb21wb25lbnRzLCBVU0VSX1BST0ZJTEVfREFUQSlcbiAgICBjb25zdCBQQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChVU0VSX1BST0ZJTEUucGFnZXMsIFVTRVJfUFJPRklMRS5jb21wb25lbnRzLCB7IC4uLkRBVEEgfSk7XG4gICAgY29uc3QgT05fUk9XX0FDVElPTl9DQUxMUyA9IFtdO1xuICAgIGNvbnN0IE9OX1JPV19BQ1RJT04gPSAocm93KSA9PiB7XG4gICAgICBPTl9ST1dfQUNUSU9OX0NBTExTLnB1c2gocm93KTtcbiAgICB9O1xuICAgIGNvbnN0IE9OX0FDVElPTl9DQUxMUyA9IFtdO1xuICAgIGNvbnN0IE9OX0FDVElPTiA9IChhY3Rpb24sIG9uRXJyb3IpID0+IHtcbiAgICAgIE9OX0FDVElPTl9DQUxMUy5wdXNoKHsgYWN0aW9uLCBvbkVycm9yIH0pO1xuICAgIH07XG4gICAgbGV0IGNvbnRhaW5lciA9IG51bGw7XG5cbiAgICBjb25zdCByZWZEYXRhVXJsID0gKHN1ZmZpeCkgPT4gXG4gICAgICBgJHtVU0VSX1BST0ZJTEVfREFUQS51cmxzLnJlZkRhdGF9LyR7c3VmZml4fWBcbiAgICBcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIE9OX1JPV19BQ1RJT05fQ0FMTFMubGVuZ3RoID0gMDtcbiAgICAgIE9OX0FDVElPTl9DQUxMUy5sZW5ndGggPSAwO1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICBtb2NrQXhpb3MucmVzZXQoKTtcblxuICAgICAgbW9ja0F4aW9zLm9uR2V0KHJlZkRhdGFVcmwoJ2FyZVlvdUFDaXZpbFNlcnZhbnQnKSkucmVwbHkoMjAwLCBDSVZJTF9TRVJWQU5UKTtcbiAgICAgIG1vY2tBeGlvcy5vbkdldChyZWZEYXRhVXJsKCdncmFkZScpKS5yZXBseSgyMDAsIEdSQURFKTtcbiAgICAgIG1vY2tBeGlvcy5vbkdldChyZWZEYXRhVXJsKCd0ZWFtJykpLnJlcGx5KDIwMCwgVEVBTVMpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGVja0NZQSA9IChjeWFDb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrQ1lBQ29udGFpbmVyID0gY3lhQ29udGFpbmVyO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUFDb250YWluZXIuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChjeWEudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QoY3lhLmNsYXNzTGlzdCkudG9Db250YWluKERFRkFVTFRfQ0xBU1MpO1xuICAgICAgcmV0dXJuIGN5YTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSb3cgPSAocm93LCBrZXksIHZhbHVlLCBhY3Rpb24pID0+IHtcbiAgICAgIGV4cGVjdChyb3cudGV4dENvbnRlbnQpLnRvQ29udGFpbihrZXkpO1xuICAgICAgZXhwZWN0KHJvdy50ZXh0Q29udGVudCkudG9Db250YWluKHZhbHVlKTtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgZXhwZWN0KHJvdy50ZXh0Q29udGVudCkudG9Db250YWluKCdDaGFuZ2UnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGVjdChyb3cudGV4dENvbnRlbnQpLm5vdC50b0NvbnRhaW4oJ0NoYW5nZScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgZGVmYXVsdCB0aXRsZSBpZiBub25lIGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCB0aXRsZSA9IGN5YS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRpdGxlLmNsYXNzTGlzdCkudG9Db250YWluKCdnb3Z1ay1oZWFkaW5nLWwnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS50ZXh0Q29udGVudCkudG9FcXVhbChERUZBVUxUX1RJVExFKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgdGl0bGUgdG8gYmUgb3ZlcnJpZGRlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFRJVExFID0gJ0FscGhhIEJyYXZvIENoYXJsaWUnO1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgdGl0bGU9e1RJVExFfSBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gY3lhLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGl0bGUuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2dvdnVrLWhlYWRpbmctbCcpO1xuICAgICAgZXhwZWN0KHRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKFRJVExFKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2hvdyByZWFkb25seSBwYWdlIGNvbXBvbmVudHMgY29ycmVjdGx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBbLCBjeWFDaGlsZE5vZGVdID0gY3lhLmNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBuYW1lcyA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KG5hbWVzLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzLmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBzdXJuYW1lXSA9IG5hbWVzLmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhmaXJzdE5hbWUsICdGaXJzdCBuYW1lJywgJ0pvaG4nLCBmYWxzZSk7XG4gICAgICBjaGVja1JvdyhzdXJuYW1lLCAnTGFzdCBuYW1lJywgJ1NtaXRoJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGVkaXRhYmxlIHBhZ2UgY29tcG9uZW50cyBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IFssICwgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGV4cGVjdChjaXZpbFNlcnZhbnQudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QoY2l2aWxTZXJ2YW50LmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbc3RhdHVzXSA9IGNpdmlsU2VydmFudC5jaGlsZE5vZGVzO1xuICAgICAgY2hlY2tSb3coc3RhdHVzLCAnQXJlIHlvdSBhIGNpdmlsIHNlcnZhbnQ/JywgJ1llcycsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGVkaXRhYmxlIHBhZ2UgY29tcG9uZW50cyBjb3JyZWN0bHkgd2l0aCBwYWdlIHRpdGxlcyBoaWRkZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3BhZ2VfdGl0bGVzIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgLCBjeWFDaGlsZE5vZGVdID0gY3lhLmNoaWxkTm9kZXM7IC8vIFRoZSB0aXRsZSBzaW1wbHkgaXNuJ3QgcmV0dXJuZWRcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdChjaXZpbFNlcnZhbnQuY2xhc3NMaXN0KS50b0NvbnRhaW4oYGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wYCk7IC8vIENoYW5nZWQgbWFyZ2luIGlmIG5vIHRpdGxlc1xuICAgICAgY29uc3QgW3N0YXR1c10gPSBjaXZpbFNlcnZhbnQuY2hpbGROb2RlcztcbiAgICAgIGNoZWNrUm93KHN0YXR1cywgJ0FyZSB5b3UgYSBjaXZpbCBzZXJ2YW50PycsICdZZXMnLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgb25seSBzaG93IGNoYW5nZSBsaW5rIG5leHQgdG8gdGhlIGhlYWRpbmcgd2hlbiB0aGUgcGFnZSBpcyBjb25maWd1cmVkIHRvIG9ubHkgaGF2ZSBhIHNpbmdsZSBjaGFuZ2UgbGluaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IENVU1RPTV9QQUdFUyA9IFBBR0VTLm1hcChwYWdlID0+IChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgY3lhX2xpbms6IHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UuaWQsXG4gICAgICAgICAgICBhcmlhX3N1ZmZpeDogJ3BhZ2UgZGV0YWlscycsXG4gICAgICAgICAgICBzaW5nbGVDaGFuZ2VMaW5rOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtDVVNUT01fUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IFssICwgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGV4cGVjdCh0aXRsZS50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy13aXRoLWFjdGlvbicpO1xuICAgICAgY29uc3QgdGl0bGVUZXh0ID0gdGl0bGUuY2hpbGRyZW5bMF07XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KHRpdGxlVGV4dC5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy10ZXh0Jyk7XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGNvbnN0IHRpdGxlQWN0aW9uID0gdGl0bGUuY2hpbGRyZW5bMV07XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24uY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hlYWRpbmctYWN0aW9uJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGV4dENvbnRlbnQpLnRvRXF1YWwoYENoYW5nZSBwYWdlIGRldGFpbHNgKTtcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGNvbnN0IFtzdGF0dXNdID0gY2l2aWxTZXJ2YW50LmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhzdGF0dXMsICdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nLCAnWWVzJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBvbmx5IHNob3cgY2hhbmdlIGxpbmsgbmV4dCB0byB0aGUgaGVhZGluZyB3aGVuIHRoZSBwYWdlIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIHNpbmdsZSBjaGFuZ2UgbGluayBhbmQgZm9ybSBpcyBhIHRhc2sgbGlzdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IENVU1RPTV9QQUdFUyA9IFBBR0VTLm1hcChwYWdlID0+IChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgY3lhX2xpbms6IHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UuaWQsXG4gICAgICAgICAgICBhcmlhX3N1ZmZpeDogJ3BhZ2UgZGV0YWlscycsXG4gICAgICAgICAgICBzaW5nbGVDaGFuZ2VMaW5rOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKTtcbiAgICAgIGNvbnN0IFNFQ1RJT05TID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ2NpdmlsLXNlcnZhbnQtc3RhdHVzJ10gfSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtDVVNUT01fUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtTRUNUSU9OU30gdHlwZT17Rm9ybVR5cGVzLlRBU0tfQ1lBfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAxJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGV4cGVjdCh0aXRsZS50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy13aXRoLWFjdGlvbicpO1xuICAgICAgY29uc3QgdGl0bGVUZXh0ID0gdGl0bGUuY2hpbGRyZW5bMF07XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KHRpdGxlVGV4dC5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy10ZXh0Jyk7XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGNvbnN0IHRpdGxlQWN0aW9uID0gdGl0bGUuY2hpbGRyZW5bMV07XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24uY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hlYWRpbmctYWN0aW9uJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGV4dENvbnRlbnQpLnRvRXF1YWwoYENoYW5nZSBwYWdlIGRldGFpbHNgKTtcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGNvbnN0IFtzdGF0dXNdID0gY2l2aWxTZXJ2YW50LmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhzdGF0dXMsICdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nLCAnWWVzJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IG5vIHRpdGxlIGlmIGlzIHNldCB0byBoaWRkZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgW2N5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGNvbnN0IG5hbWVzID0gY3lhQ2hpbGROb2RlLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QobmFtZXMudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QobmFtZXMuY2xhc3NMaXN0KS50b0NvbnRhaW4oYGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0ke0RFRkFVTFRfTUFSR0lOX0JPVFRPTX1gKTtcbiAgICAgIGNvbnN0IFtmaXJzdE5hbWUsIHN1cm5hbWVdID0gbmFtZXMuY2hpbGROb2RlcztcbiAgICAgIGNoZWNrUm93KGZpcnN0TmFtZSwgJ0ZpcnN0IG5hbWUnLCAnSm9obicsIGZhbHNlKTtcbiAgICAgIGNoZWNrUm93KHN1cm5hbWUsICdMYXN0IG5hbWUnLCAnU21pdGgnLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgdGFzayBsaXN0IGluIENZQSBzdHlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIHN0YXRlOiAnY29tcGxldGUnLCBwYWdlczogWydncmFkZSddIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtzZWN0aW9uc30gdHlwZT1cInRhc2stbGlzdC1jeWFcIiAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAxJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBuYW1lc1BhZ2VIZWFkaW5nID0gY29udGFpbmVyLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdChuYW1lc1BhZ2VIZWFkaW5nLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcudGV4dENvbnRlbnQpLnRvQ29udGFpbignSm9obicpO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcuY2xhc3NMaXN0KS50b0NvbnRhaW4oXCJncm91cC1vZi1yb3dzXCIpO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzIgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMi50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMi50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAyJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBncmFkZVBhZ2VIZWFkaW5nID0gY29udGFpbmVyLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1szXTtcbiAgICAgIGV4cGVjdChncmFkZVBhZ2VIZWFkaW5nLnRhZ05hbWUpLnRvRXF1YWwoJ0gzJyk7XG4gICAgICBleHBlY3QoZ3JhZGVQYWdlSGVhZGluZy50ZXh0Q29udGVudCkudG9FcXVhbChcIldoYXQncyB5b3VyIGdyYWRlP1wiKTtcbiAgICAgIGV4cGVjdChncmFkZVBhZ2VIZWFkaW5nLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1zXCIpO1xuXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgdGFzayBsaXN0IGluIENZQSBzdHlsZSBhbmQgcHJpb3RpdGlzZSBkaXNwbGF5TmFtZSBvdmVyIG5hbWUgZm9yIGEgdGFzaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgZGlzcGxheU5hbWU6ICdCbHVlJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIGRpc3BsYXlOYW1lOiAnUmVkJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ2dyYWRlJ10gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtQQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgc2VjdGlvbnM9e3NlY3Rpb25zfSB0eXBlPVwidGFzay1saXN0LWN5YVwiIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRleHRDb250ZW50KS50b0VxdWFsKCdCbHVlJyk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMiA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMl07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLnRleHRDb250ZW50KS50b0VxdWFsKCdSZWQnKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IHRhc2sgbGlzdCBpbiBDWUEgc3R5bGUgYW5kIG5vdCBzaG93IHNlY3Rpb25zIHdpdGhvdXQgYW55IHBhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGhlc2UgYXJlIHlvdXIgdGFza3MnLFxuICAgICAgICAgIHRhc2tzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdUYXNrIDEnLCBkaXNwbGF5TmFtZTogJ0JsdWUnLCBzdGF0ZTogJ2NvbXBsZXRlJywgcGFnZXM6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdUYXNrIDInLCBkaXNwbGF5TmFtZTogJ1JlZCcsIHN0YXRlOiAnY29tcGxldGUnLCBwYWdlczogWydncmFkZSddIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtzZWN0aW9uc30gdHlwZT1cInRhc2stbGlzdC1jeWFcIiAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnJyk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMiA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLnRleHRDb250ZW50KS50b0VxdWFsKCdSZWQnKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3cgYW5zd2VycyBmcm9tIG11bHRpcGxlIGFkZHJlc3MgZmllbGRzIGludG8gaW4gb25lIERMJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgQUREUkVTU19EQVRBID0gVXRpbHMuRGF0YS5zZXR1cEZvcm0oR1JPVVBFRF9BRERSRVNTLnBhZ2VzLCBHUk9VUEVEX0FERFJFU1MuY29tcG9uZW50cywgR1JPVVBFRF9BRERSRVNTX0RBVEFfSlNPTilcbiAgICAgIGNvbnN0IEdST1VQX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKEdST1VQRURfQUREUkVTUy5wYWdlcywgR1JPVVBFRF9BRERSRVNTLmNvbXBvbmVudHMsIHsgLi4uQUREUkVTU19EQVRBIH0pO1xuXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17R1JPVVBfUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBncm91cGVkQ29tcG9uZW50ID0gY3lhLmNoaWxkTm9kZXNbMTBdO1xuICAgICAgY29uc3Qga2V5R3JvdXAgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGtleUdyb3VwLnRhZ05hbWUpLnRvRXF1YWwoJ0RUJyk7XG4gICAgICBleHBlY3Qoa2V5R3JvdXAudGV4dENvbnRlbnQpLnRvRXF1YWwoJ0FkZHJlc3MgZGV0YWlscycpO1xuXG4gICAgICBjb25zdCB2YWx1ZUdyb3VwID0gZ3JvdXBlZENvbXBvbmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXMubGVuZ3RoKS50b0VxdWFsKDQpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAudGFnTmFtZSkudG9FcXVhbCgnREQnKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQpLnRvQ29udGFpbignMTAgRG93bmluZyBTdHJlZXQnKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpLnRvQ29udGFpbignQ2l0eSBvZiBXZXN0bWluc3RlcicpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1syXS50ZXh0Q29udGVudCkudG9Db250YWluKCdMb25kb24nKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbM10udGV4dENvbnRlbnQpLnRvQ29udGFpbignU1cxQSAyQUEnKTtcblxuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uRGl2ID0gZ3JvdXBlZENvbXBvbmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1syXTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b25EaXYuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2dvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9ucycpO1xuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uID0gY2hhbmdlQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QoY2hhbmdlQnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0EnKTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0NoYW5nZSBhZGRyZXNzIGRldGFpbHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGEgZ3JvdXAgd2l0aCBvbmUgYWN0aW9uIGJ1dHRvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IEdST1VQX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKEdST1VQX1JPV1MucGFnZXMsIEdST1VQX1JPV1MuY29tcG9uZW50cywgeyAuLi5EQVRBIH0pO1xuXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17R1JPVVBfUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBncm91cHM9e0dST1VQX1JPV1MuY3lhLmdyb3Vwc30gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBuYW1lc0dyb3VwID0gY3lhLmNoaWxkTm9kZXNbMl07XG5cbiAgICAgIGNvbnN0IGZpcnN0TmFtZVJvdyA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnRmlyc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3QoZmlyc3ROYW1lUm93LmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9FcXVhbCgnSm9obicpO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzWzFdLnRhZ05hbWUpLnRvRXF1YWwoJ0REJyk7XG5cbiAgICAgIGNvbnN0IHN1cm5hbWUgPSBuYW1lc0dyb3VwLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgICAgZXhwZWN0KHN1cm5hbWUuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnTGFzdCBuYW1lIChvcHRpb25hbCknKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpLnRvRXF1YWwoJ1NtaXRoJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzFdLnRhZ05hbWUpLnRvRXF1YWwoJ0REJyk7XG5cbiAgICAgIGNvbnN0IGNoYW5nZUJ1dHRvbkRpdiA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignY2hhbmdlLWdyb3VwLWJ1dHRvbicpO1xuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uID0gY2hhbmdlQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QoY2hhbmdlQnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0EnKTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0NoYW5nZSBuYW1lcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGEgY29uZGl0aW9uYWwgYnV0dG9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgR1JPVVBfUEFHRVMgPSBVdGlscy5Gb3JtUGFnZS5nZXRBbGwoR1JPVVBfUk9XUy5wYWdlcywgR1JPVVBfUk9XUy5jb21wb25lbnRzLCB7IC4uLkRBVEEgfSk7XG4gIFxuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnNcbiAgICAgICAgICAgIHBhZ2VzPXtHUk9VUF9QQUdFU31cbiAgICAgICAgICAgIG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfVxuICAgICAgICAgICAgb25BY3Rpb249e09OX0FDVElPTn1cbiAgICAgICAgICAgIGdyb3Vwcz17R1JPVVBfUk9XUy5jeWEuZ3JvdXBzfVxuICAgICAgICAgICAgYWN0aW9ucz17QUNUSU9OU30gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gIFxuICAgICAgY29uc3QgaG9kc0J1dHRvbkRpdiA9IGN5YS5jaGlsZE5vZGVzWzddO1xuICAgICAgZXhwZWN0KGhvZHNCdXR0b25EaXYuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hvZHMtYnV0dG9uLWdyb3VwJyk7XG4gICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSBob2RzQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3Qoc3VibWl0QnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0JVVFRPTicpO1xuICAgICAgZXhwZWN0KHN1Ym1pdEJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnU3VibWl0Jyk7XG4gICAgICBjb25zdCBzYXZlQnV0dG9uID0gaG9kc0J1dHRvbkRpdi5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KHNhdmVCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQlVUVE9OJyk7XG4gICAgICBleHBlY3Qoc2F2ZUJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnU2F2ZSBhbmQgcmV0dXJuIGxhdGVyJyk7XG4gICAgICBcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNob3cgYSBjb25kaXRpb25hbCBidXR0b24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBHUk9VUF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChHUk9VUF9ST1dTLnBhZ2VzLCBHUk9VUF9ST1dTLmNvbXBvbmVudHMsIHsgLi4uREFUQSB9KTtcbiAgXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2Vyc1xuICAgICAgICAgICAgcGFnZXM9e0dST1VQX1BBR0VTfVxuICAgICAgICAgICAgb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059XG4gICAgICAgICAgICBvbkFjdGlvbj17T05fQUNUSU9OfVxuICAgICAgICAgICAgZ3JvdXBzPXtHUk9VUF9ST1dTLmN5YS5ncm91cHN9XG4gICAgICAgICAgICBhY3Rpb25zPXtBQ1RJT05TTk9TQVZFfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgXG4gICAgICBjb25zdCBob2RzQnV0dG9uRGl2ID0gY3lhLmNoaWxkTm9kZXNbN107XG4gICAgICBleHBlY3QoaG9kc0J1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignaG9kcy1idXR0b24tZ3JvdXAnKTtcbiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGhvZHNCdXR0b25EaXYuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChzdWJtaXRCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQlVUVE9OJyk7XG4gICAgICBleHBlY3Qoc3VibWl0QnV0dG9uLnRleHRDb250ZW50KS50b0VxdWFsKCdTdWJtaXQnKTtcbiAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBob2RzQnV0dG9uRGl2LmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3Qoc2F2ZUJ1dHRvbikudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBlbXB0eSBvcHRpb25hbCBmaWVsZHMgd2l0aCBhIHBsYWNlaG9sZGVyIHZhbHVlIHdoZW4gcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBHUk9VUF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChHUk9VUF9ST1dTLnBhZ2VzLCBHUk9VUF9ST1dTLmNvbXBvbmVudHMsIHt9KTtcblxuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e0dST1VQX1BBR0VTfSBncm91cHM9e0dST1VQX1JPV1MuY3lhLmdyb3Vwc30gb3B0aW9uYWxGaWVsZFBsYWNlaG9sZGVyPSdOb3QgZW50ZXJlZCcgLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBuYW1lc0dyb3VwID0gY3lhLmNoaWxkTm9kZXNbMl07XG5cbiAgICAgIGNvbnN0IGZpcnN0TmFtZVJvdyA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnRmlyc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3QoZmlyc3ROYW1lUm93LmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9FcXVhbCgnTm90IGVudGVyZWQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuXG4gICAgICBjb25zdCBzdXJuYW1lID0gbmFtZXNHcm91cC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0xhc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpLnRvRXF1YWwoJ0RUJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KS50b0VxdWFsKCdOb3QgZW50ZXJlZCcpO1xuICAgICAgZXhwZWN0KHN1cm5hbWUuY2hpbGROb2Rlc1sxXS50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IHBhZ2UgY29tcG9uZW50cyBjb3JyZW50bHkgd2l0aCBpbnRlcnBvbGF0ZWQgdGl0bGUgYW5kIGN5YV9sYWJlbCwgaWYgbGFiZWwgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IF9QQUdFUyA9IFsgLi4uVVNFUl9QUk9GSUxFLnBhZ2VzIF07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nXG4gICAgICBfUEFHRVNbMF0gPSB7IC4uLl9QQUdFU1swXSwgdGl0bGU6ICdBbHBoYSBJRDogJHtidXNpbmVzc0tleX0nfVxuICAgICAgY29uc3QgX0NPTVBPTkVOVFMgPSBbIC4uLlVTRVJfUFJPRklMRS5jb21wb25lbnRzIF07XG4gICAgICBfQ09NUE9ORU5UU1swXSA9IHsgLi4uX0NPTVBPTkVOVFNbMF0sIFxuICAgICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuICAgICAgICBjeWFfbGFiZWw6IFwiVGV4dCAke2N1cnJlbnRVc2VyLmZhbWlseU5hbWV9XCJcbiAgICAgIH07XG4gICAgICBjb25zdCBUX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKF9QQUdFUywgX0NPTVBPTkVOVFMsIERBVEEgKTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtUX1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBbLCBjeWFUaXRsZSwgY3lhQ2hpbGROb2RlXSA9IGN5YS5jaGlsZE5vZGVzO1xuICAgICAgZXhwZWN0KGN5YVRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKCdBbHBoYSBJRDogMTIzNDU2Nzg5Jyk7XG4gICAgICBjb25zdCBuYW1lcyA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KG5hbWVzLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzLmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBzdXJuYW1lXSA9IG5hbWVzLmNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBbbGFiZWxdID0gZmlyc3ROYW1lLmNoaWxkTm9kZXM7XG4gICAgICBleHBlY3QobGFiZWwudGV4dENvbnRlbnQpLnRvRXF1YWwoJ1RleHQgU21pdGgnKTtcbiAgICAgIGNoZWNrUm93KHN1cm5hbWUsICdMYXN0IG5hbWUnLCAnU21pdGgnLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgcGFnZSBjb21wb25lbnRzIGNvcnJlbnRseSB3aXRoIG5vIGxhYmVsLCBpZiBsYWJlbCBhbmQgY3lhX2xhYmVsIGFyZSBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgX1BBR0VTID0gWyAuLi5VU0VSX1BST0ZJTEUucGFnZXMgXTtcbiAgICAgIGNvbnN0IF9DT01QT05FTlRTID0gWyAuLi5VU0VSX1BST0ZJTEUuY29tcG9uZW50cyBdO1xuICAgICAgX0NPTVBPTkVOVFNbMF0gPSB7IC4uLl9DT01QT05FTlRTWzBdLCBcbiAgICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGN5YV9sYWJlbDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgY29uc3QgVF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChfUEFHRVMsIF9DT01QT05FTlRTLCB7IC4uLkRBVEEgfSk7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17VF9QQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgY3lhQ2hpbGROb2RlXSA9IGN5YS5jaGlsZE5vZGVzO1xuICAgICAgY29uc3QgbmFtZXMgPSBjeWFDaGlsZE5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChuYW1lcy50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdChuYW1lcy5jbGFzc0xpc3QpLnRvQ29udGFpbihgZ292dWstIS1tYXJnaW4tYm90dG9tLSR7REVGQVVMVF9NQVJHSU5fQk9UVE9NfWApO1xuICAgICAgY29uc3QgW2ZpcnN0TmFtZSwgc3VybmFtZV0gPSBuYW1lcy5jaGlsZE5vZGVzO1xuICAgICAgY29uc3QgW2xhYmVsXSA9IGZpcnN0TmFtZS5jaGlsZE5vZGVzO1xuICAgICAgZXhwZWN0KGxhYmVsLnRleHRDb250ZW50KS50b0VxdWFsKFwiXCIpO1xuICAgICAgY2hlY2tSb3coc3VybmFtZSwgJ0xhc3QgbmFtZScsICdTbWl0aCcsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2hvdyB0YXNrIGxpc3QgaW4gQ1lBIHN0eWxlIGFuZCBoaWRlIHBhZ2VzIGZyb20gc2tpcHBlZCB0YXNrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIHN0YXRlOiAnc2tpcHBlZCcsIHBhZ2VzOiBbJ2dyYWRlJ10gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtQQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgc2VjdGlvbnM9e3NlY3Rpb25zfSB0eXBlPVwidGFzay1saXN0LWN5YVwiIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRhZ05hbWUpLnRvRXF1YWwoJ0gyJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRleHRDb250ZW50KS50b0VxdWFsKCdUYXNrIDEnKTtcbiAgICAgIGV4cGVjdCh0YXNrSGVhZGluZzEuY2xhc3NMaXN0KS50b0NvbnRhaW4oXCJnb3Z1ay1oZWFkaW5nLW1cIik7XG5cbiAgICAgIGNvbnN0IG5hbWVzUGFnZUhlYWRpbmcgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QobmFtZXNQYWdlSGVhZGluZy50ZXh0Q29udGVudCkudG9Db250YWluKCdKb2huJyk7XG4gICAgICBleHBlY3QobmFtZXNQYWdlSGVhZGluZy5jbGFzc0xpc3QpLnRvQ29udGFpbihcImdyb3VwLW9mLXJvd3NcIik7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gc2Vjb25kIHRhc2sgc2tpcHBlZCBzbyBub3Qgc2hvd24gXG5cbiAgICB9KTtcblxuICAgIGl0KCdTaG93IGFuc3dlcnMgZnJvbSBtdWx0aXBsZSBhZGRyZXNzIGZpZWxkcyBpbnRvIGluIG9uZSBETCBjb3JyZWN0bHkgd2hlbiBoaWRlQmxhbmtSb3dzIGlzIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBBRERSRVNTX0RBVEEgPSBVdGlscy5EYXRhLnNldHVwRm9ybShHUk9VUEVEX0FERFJFU1MucGFnZXMsIEdST1VQRURfQUREUkVTUy5jb21wb25lbnRzLCBHUk9VUEVEX0FERFJFU1NfREFUQV9KU09OKVxuICAgICAgY29uc3QgR1JPVVBfUEFHRVMgPSBVdGlscy5Gb3JtUGFnZS5nZXRBbGwoR1JPVVBFRF9BRERSRVNTLnBhZ2VzLCBHUk9VUEVEX0FERFJFU1MuY29tcG9uZW50cywgeyAuLi5BRERSRVNTX0RBVEEgfSk7XG5cbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtHUk9VUF9QQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgaGlkZUJsYW5rUm93cy8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBncm91cGVkQ29tcG9uZW50ID0gY3lhLmNoaWxkTm9kZXNbNl07XG4gICAgICBjb25zdCBrZXlHcm91cCA9IGdyb3VwZWRDb21wb25lbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3Qoa2V5R3JvdXAudGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChrZXlHcm91cC50ZXh0Q29udGVudCkudG9FcXVhbCgnQWRkcmVzcyBkZXRhaWxzJyk7XG5cbiAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlcy5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgICBleHBlY3QodmFsdWVHcm91cC50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9Db250YWluKCcxMCBEb3duaW5nIFN0cmVldCcpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9Db250YWluKCdDaXR5IG9mIFdlc3RtaW5zdGVyJyk7XG4gICAgICBleHBlY3QodmFsdWVHcm91cC5jaGlsZE5vZGVzWzJdLnRleHRDb250ZW50KS50b0NvbnRhaW4oJ0xvbmRvbicpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1szXS50ZXh0Q29udGVudCkudG9Db250YWluKCdTVzFBIDJBQScpO1xuXG4gICAgICBjb25zdCBjaGFuZ2VCdXR0b25EaXYgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zJyk7XG4gICAgICBjb25zdCBjaGFuZ2VCdXR0b24gPSBjaGFuZ2VCdXR0b25EaXYuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQScpO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnQ2hhbmdlIGFkZHJlc3MgZGV0YWlscycpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG59KTtcbiJdLCJt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
|