@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,844 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _getCYARowsForCollectionPage = _interopRequireDefault(require("./getCYARowsForCollectionPage"));
|
|
4
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
5
|
-
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; }
|
|
6
|
-
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; }
|
|
7
|
-
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; }
|
|
8
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
9
|
-
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); } // Local imports
|
|
10
|
-
describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', () => {
|
|
11
|
-
const TEXT_COMP = {
|
|
12
|
-
id: 'testText',
|
|
13
|
-
fieldId: 'testText',
|
|
14
|
-
label: 'Test text',
|
|
15
|
-
type: 'text'
|
|
16
|
-
};
|
|
17
|
-
const DATE_COMP = {
|
|
18
|
-
id: 'testDate',
|
|
19
|
-
fieldId: 'testDate',
|
|
20
|
-
label: 'Test date',
|
|
21
|
-
type: 'date'
|
|
22
|
-
};
|
|
23
|
-
const PAGES = [{
|
|
24
|
-
id: 'page1',
|
|
25
|
-
collection: {
|
|
26
|
-
name: 'collection'
|
|
27
|
-
},
|
|
28
|
-
components: [TEXT_COMP]
|
|
29
|
-
}, {
|
|
30
|
-
id: 'page2',
|
|
31
|
-
collection: {
|
|
32
|
-
name: 'collection'
|
|
33
|
-
},
|
|
34
|
-
components: [DATE_COMP]
|
|
35
|
-
}];
|
|
36
|
-
const MASTER_PAGE = {
|
|
37
|
-
id: 'page1',
|
|
38
|
-
collection: {
|
|
39
|
-
name: 'collection',
|
|
40
|
-
labels: {
|
|
41
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
42
|
-
item: 'Collection entry ${index}'
|
|
43
|
-
},
|
|
44
|
-
actions: [{
|
|
45
|
-
type: 'change'
|
|
46
|
-
}, {
|
|
47
|
-
type: 'remove',
|
|
48
|
-
label: 'custom remove label'
|
|
49
|
-
}, {
|
|
50
|
-
type: 'change',
|
|
51
|
-
label: 'custom change label',
|
|
52
|
-
page: 'confirmDelete'
|
|
53
|
-
}]
|
|
54
|
-
},
|
|
55
|
-
childPages: PAGES
|
|
56
|
-
};
|
|
57
|
-
it('should return no rows for a collection if it does not exist in formData', () => {
|
|
58
|
-
const FORM_DATA = {};
|
|
59
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
60
|
-
formData: FORM_DATA
|
|
61
|
-
});
|
|
62
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
63
|
-
expect(ROWS.length).toEqual(0);
|
|
64
|
-
});
|
|
65
|
-
it('should return no rows for a collection if it has no entries', () => {
|
|
66
|
-
const FORM_DATA = {
|
|
67
|
-
collection: []
|
|
68
|
-
};
|
|
69
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
70
|
-
formData: FORM_DATA
|
|
71
|
-
});
|
|
72
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
73
|
-
expect(ROWS.length).toEqual(0);
|
|
74
|
-
});
|
|
75
|
-
it('should accept the hideNameFromCYA collection flag', () => {
|
|
76
|
-
const FORM_DATA = {
|
|
77
|
-
collection: [{
|
|
78
|
-
testText: 'hello'
|
|
79
|
-
}]
|
|
80
|
-
};
|
|
81
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
82
|
-
formData: FORM_DATA,
|
|
83
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
84
|
-
hideNameFromCYA: true
|
|
85
|
-
})
|
|
86
|
-
});
|
|
87
|
-
const TITLE_FIELD_ID = "".concat(PAGE.collection.name, "Title");
|
|
88
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
89
|
-
expect(ROWS[0].fieldId).not.toEqual(TITLE_FIELD_ID);
|
|
90
|
-
});
|
|
91
|
-
it('should format titles correctly when collection.labels.item is specified', () => {
|
|
92
|
-
const FORM_DATA = {
|
|
93
|
-
collection: [{
|
|
94
|
-
id: '01',
|
|
95
|
-
testText: 'value'
|
|
96
|
-
}]
|
|
97
|
-
};
|
|
98
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
99
|
-
formData: FORM_DATA
|
|
100
|
-
});
|
|
101
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
102
|
-
expect(ROWS.length).toEqual(7); // Collection title, item title, action rows & component rows
|
|
103
|
-
expect(ROWS[1].key).toEqual('Collection entry 1');
|
|
104
|
-
});
|
|
105
|
-
it('should hide titles when hideItemTitles is true', () => {
|
|
106
|
-
const FORM_DATA = {
|
|
107
|
-
collection: [{
|
|
108
|
-
id: '01',
|
|
109
|
-
testText: 'value'
|
|
110
|
-
}]
|
|
111
|
-
};
|
|
112
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
113
|
-
formData: FORM_DATA,
|
|
114
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
115
|
-
hideItemTitles: true
|
|
116
|
-
})
|
|
117
|
-
});
|
|
118
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
119
|
-
expect(ROWS.length).toEqual(6); // Collection title, NO item title, action rows & component rows
|
|
120
|
-
});
|
|
121
|
-
it('should hide titles when hideItemTitles is a show_when that is true', () => {
|
|
122
|
-
const FORM_DATA = {
|
|
123
|
-
shouldShow: false,
|
|
124
|
-
collection: [{
|
|
125
|
-
id: '01',
|
|
126
|
-
testText: 'value'
|
|
127
|
-
}]
|
|
128
|
-
};
|
|
129
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
130
|
-
formData: FORM_DATA,
|
|
131
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
132
|
-
hideItemTitles: [{
|
|
133
|
-
field: 'shouldShow',
|
|
134
|
-
op: '=',
|
|
135
|
-
value: false
|
|
136
|
-
}]
|
|
137
|
-
})
|
|
138
|
-
});
|
|
139
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
140
|
-
expect(ROWS.length).toEqual(6); // Collection title, NO item title, action rows & component rows
|
|
141
|
-
});
|
|
142
|
-
it('should provide default titles if collection.labels.item is not specified', () => {
|
|
143
|
-
const FORM_DATA = {
|
|
144
|
-
collection: [{
|
|
145
|
-
id: '01',
|
|
146
|
-
testText: 'value'
|
|
147
|
-
}]
|
|
148
|
-
};
|
|
149
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
150
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
151
|
-
labels: {}
|
|
152
|
-
}),
|
|
153
|
-
formData: FORM_DATA
|
|
154
|
-
});
|
|
155
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
156
|
-
expect(ROWS.length).toEqual(7); // Collection title, item title, action rows & component rows
|
|
157
|
-
expect(ROWS[1].key).toEqual('Item 1');
|
|
158
|
-
});
|
|
159
|
-
it('should return correctly formatted rows for mutliple entries', () => {
|
|
160
|
-
const FORM_DATA = {
|
|
161
|
-
collection: [{
|
|
162
|
-
id: '01',
|
|
163
|
-
testText: 'value'
|
|
164
|
-
}, {
|
|
165
|
-
id: '02',
|
|
166
|
-
testText: 'value'
|
|
167
|
-
}]
|
|
168
|
-
};
|
|
169
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
170
|
-
formData: FORM_DATA
|
|
171
|
-
});
|
|
172
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
173
|
-
expect(ROWS.length).toEqual(13); // Title row + component row for each item
|
|
174
|
-
expect(ROWS[0]).toMatchObject({
|
|
175
|
-
type: 'heading',
|
|
176
|
-
key: 'Collection'
|
|
177
|
-
});
|
|
178
|
-
expect(ROWS[1]).toMatchObject({
|
|
179
|
-
type: 'heading',
|
|
180
|
-
key: 'Collection entry 1'
|
|
181
|
-
});
|
|
182
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
183
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
184
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
185
|
-
expect(ROWS[5]).toMatchObject({
|
|
186
|
-
value: 'value',
|
|
187
|
-
key: 'Test text'
|
|
188
|
-
});
|
|
189
|
-
expect(ROWS[6]).toMatchObject({
|
|
190
|
-
value: '',
|
|
191
|
-
key: 'Test date'
|
|
192
|
-
});
|
|
193
|
-
expect(ROWS[7]).toMatchObject({
|
|
194
|
-
type: 'heading',
|
|
195
|
-
key: 'Collection entry 2'
|
|
196
|
-
});
|
|
197
|
-
expect(ROWS[8].action.label).toEqual('Change');
|
|
198
|
-
expect(ROWS[9].action.label).toEqual('custom remove label');
|
|
199
|
-
expect(ROWS[10].action.label).toEqual('custom change label');
|
|
200
|
-
expect(ROWS[11]).toMatchObject({
|
|
201
|
-
value: 'value',
|
|
202
|
-
key: 'Test text'
|
|
203
|
-
});
|
|
204
|
-
expect(ROWS[12]).toMatchObject({
|
|
205
|
-
value: '',
|
|
206
|
-
key: 'Test date'
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
it('should use values from top-level formData if they don\'t exist in the item', () => {
|
|
210
|
-
const FORM_DATA = {
|
|
211
|
-
testText: 'value',
|
|
212
|
-
collection: [{
|
|
213
|
-
id: '01'
|
|
214
|
-
}]
|
|
215
|
-
};
|
|
216
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
217
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
218
|
-
formData: FORM_DATA
|
|
219
|
-
}), PAGES[1]],
|
|
220
|
-
formData: FORM_DATA
|
|
221
|
-
});
|
|
222
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
223
|
-
expect(ROWS.length).toEqual(7); // Title row + component row for each item
|
|
224
|
-
expect(ROWS[0]).toMatchObject({
|
|
225
|
-
type: 'heading',
|
|
226
|
-
key: 'Collection'
|
|
227
|
-
});
|
|
228
|
-
expect(ROWS[1]).toMatchObject({
|
|
229
|
-
type: 'heading',
|
|
230
|
-
key: 'Collection entry 1'
|
|
231
|
-
});
|
|
232
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
233
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
234
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
235
|
-
expect(ROWS[5]).toMatchObject({
|
|
236
|
-
value: 'value',
|
|
237
|
-
key: 'Test text'
|
|
238
|
-
});
|
|
239
|
-
expect(ROWS[6]).toMatchObject({
|
|
240
|
-
value: '',
|
|
241
|
-
key: 'Test date'
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
it('should return correctly formatted rows for only the active entry when page.collection.onlyShowActiveEntryOnCYA is defined', () => {
|
|
245
|
-
const FORM_DATA = {
|
|
246
|
-
collectionActiveId: '02',
|
|
247
|
-
collection: [{
|
|
248
|
-
id: '01',
|
|
249
|
-
testText: 'value'
|
|
250
|
-
}, {
|
|
251
|
-
id: '02',
|
|
252
|
-
testText: 'value'
|
|
253
|
-
}]
|
|
254
|
-
};
|
|
255
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
256
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
257
|
-
onlyShowActiveEntryOnCYA: true
|
|
258
|
-
}),
|
|
259
|
-
formData: FORM_DATA
|
|
260
|
-
});
|
|
261
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
262
|
-
expect(ROWS.length).toEqual(7); // Title row + component row for only the active item.
|
|
263
|
-
expect(ROWS[0]).toMatchObject({
|
|
264
|
-
type: 'heading',
|
|
265
|
-
key: 'Collection'
|
|
266
|
-
});
|
|
267
|
-
expect(ROWS[1]).toMatchObject({
|
|
268
|
-
type: 'heading',
|
|
269
|
-
key: 'Collection entry 2'
|
|
270
|
-
});
|
|
271
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
272
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
273
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
274
|
-
expect(ROWS[5]).toMatchObject({
|
|
275
|
-
value: 'value',
|
|
276
|
-
key: 'Test text'
|
|
277
|
-
});
|
|
278
|
-
expect(ROWS[6]).toMatchObject({
|
|
279
|
-
value: '',
|
|
280
|
-
key: 'Test date'
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
it('should return correctly formatted rows for only the active entry when page.collection.onlyShowActiveEntryOnCYA is an array', () => {
|
|
284
|
-
const FORM_DATA = {
|
|
285
|
-
text: 'blue',
|
|
286
|
-
collectionActiveId: '02',
|
|
287
|
-
collection: [{
|
|
288
|
-
id: '01',
|
|
289
|
-
testText: 'value'
|
|
290
|
-
}, {
|
|
291
|
-
id: '02',
|
|
292
|
-
testText: 'value'
|
|
293
|
-
}]
|
|
294
|
-
};
|
|
295
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
296
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
297
|
-
onlyShowActiveEntryOnCYA: [{
|
|
298
|
-
field: 'text',
|
|
299
|
-
op: 'eq',
|
|
300
|
-
value: 'blue'
|
|
301
|
-
}]
|
|
302
|
-
}),
|
|
303
|
-
formData: FORM_DATA
|
|
304
|
-
});
|
|
305
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
306
|
-
expect(ROWS.length).toEqual(7); // Title row + component row for only the active item.
|
|
307
|
-
expect(ROWS[0]).toMatchObject({
|
|
308
|
-
type: 'heading',
|
|
309
|
-
key: 'Collection'
|
|
310
|
-
});
|
|
311
|
-
expect(ROWS[1]).toMatchObject({
|
|
312
|
-
type: 'heading',
|
|
313
|
-
key: 'Collection entry 2'
|
|
314
|
-
});
|
|
315
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
316
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
317
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
318
|
-
expect(ROWS[5]).toMatchObject({
|
|
319
|
-
value: 'value',
|
|
320
|
-
key: 'Test text'
|
|
321
|
-
});
|
|
322
|
-
expect(ROWS[6]).toMatchObject({
|
|
323
|
-
value: '',
|
|
324
|
-
key: 'Test date'
|
|
325
|
-
});
|
|
326
|
-
});
|
|
327
|
-
it('should exclude components that should not be shown', () => {
|
|
328
|
-
const FD = {
|
|
329
|
-
collection: [{
|
|
330
|
-
id: '01',
|
|
331
|
-
otherField: 'yes',
|
|
332
|
-
testText: 'testing'
|
|
333
|
-
}, {
|
|
334
|
-
id: '02',
|
|
335
|
-
otherField: 'no',
|
|
336
|
-
testText: 'testing'
|
|
337
|
-
}]
|
|
338
|
-
};
|
|
339
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
340
|
-
collection: {
|
|
341
|
-
name: 'collection'
|
|
342
|
-
},
|
|
343
|
-
formData: FD,
|
|
344
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
345
|
-
components: [{
|
|
346
|
-
id: 'testText',
|
|
347
|
-
fieldId: 'testText',
|
|
348
|
-
label: 'Test text',
|
|
349
|
-
type: 'text',
|
|
350
|
-
show_when: {
|
|
351
|
-
field: "otherField",
|
|
352
|
-
op: "!=",
|
|
353
|
-
value: "yes"
|
|
354
|
-
}
|
|
355
|
-
}]
|
|
356
|
-
})]
|
|
357
|
-
});
|
|
358
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FD);
|
|
359
|
-
expect(ROWS.length).toEqual(4);
|
|
360
|
-
expect(ROWS[0]).toMatchObject({
|
|
361
|
-
type: 'heading',
|
|
362
|
-
key: 'Collection'
|
|
363
|
-
});
|
|
364
|
-
expect(ROWS[1]).toMatchObject({
|
|
365
|
-
type: 'heading',
|
|
366
|
-
key: 'Item 1'
|
|
367
|
-
});
|
|
368
|
-
expect(ROWS[2]).toMatchObject({
|
|
369
|
-
type: 'heading',
|
|
370
|
-
key: 'Item 2'
|
|
371
|
-
});
|
|
372
|
-
expect(ROWS[3]).toMatchObject({
|
|
373
|
-
value: 'testing',
|
|
374
|
-
key: 'Test text'
|
|
375
|
-
});
|
|
376
|
-
});
|
|
377
|
-
it('should exclude pages that should not be shown', () => {
|
|
378
|
-
const FD = {
|
|
379
|
-
collection: [{
|
|
380
|
-
id: '01',
|
|
381
|
-
otherField: 'yes',
|
|
382
|
-
testText: 'testing'
|
|
383
|
-
}]
|
|
384
|
-
};
|
|
385
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
386
|
-
collection: {
|
|
387
|
-
name: 'collection'
|
|
388
|
-
},
|
|
389
|
-
formData: FD,
|
|
390
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
391
|
-
show_when: {
|
|
392
|
-
field: "otherField",
|
|
393
|
-
op: "!=",
|
|
394
|
-
value: "yes"
|
|
395
|
-
}
|
|
396
|
-
}), PAGES[1]]
|
|
397
|
-
});
|
|
398
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FD);
|
|
399
|
-
expect(ROWS.length).toEqual(3); // Missing the page with the text component on.
|
|
400
|
-
expect(ROWS[0]).toMatchObject({
|
|
401
|
-
type: 'heading',
|
|
402
|
-
key: 'Collection'
|
|
403
|
-
});
|
|
404
|
-
expect(ROWS[1]).toMatchObject({
|
|
405
|
-
type: 'heading',
|
|
406
|
-
key: 'Item 1'
|
|
407
|
-
});
|
|
408
|
-
expect(ROWS[2]).toMatchObject({
|
|
409
|
-
value: '',
|
|
410
|
-
key: 'Test date'
|
|
411
|
-
});
|
|
412
|
-
});
|
|
413
|
-
it('should include rows for custom headings', () => {
|
|
414
|
-
const FORM_DATA = {
|
|
415
|
-
collection: [{
|
|
416
|
-
id: '01',
|
|
417
|
-
testText: 'value'
|
|
418
|
-
}]
|
|
419
|
-
};
|
|
420
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
421
|
-
formData: FORM_DATA,
|
|
422
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
423
|
-
collection: _objectSpread(_objectSpread({}, PAGES[0].collection), {}, {
|
|
424
|
-
heading: {
|
|
425
|
-
size: 'm',
|
|
426
|
-
text: 'Custom page heading'
|
|
427
|
-
}
|
|
428
|
-
})
|
|
429
|
-
})]
|
|
430
|
-
});
|
|
431
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
432
|
-
expect(ROWS.length).toEqual(7);
|
|
433
|
-
expect(ROWS[0]).toMatchObject({
|
|
434
|
-
type: 'heading',
|
|
435
|
-
key: 'Collection'
|
|
436
|
-
});
|
|
437
|
-
expect(ROWS[1]).toMatchObject({
|
|
438
|
-
type: 'heading',
|
|
439
|
-
key: 'Collection entry 1'
|
|
440
|
-
});
|
|
441
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
442
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
443
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
444
|
-
expect(ROWS[5]).toMatchObject({
|
|
445
|
-
type: 'heading',
|
|
446
|
-
key: 'Custom page heading',
|
|
447
|
-
size: 'm'
|
|
448
|
-
});
|
|
449
|
-
expect(ROWS[6]).toMatchObject({
|
|
450
|
-
value: 'value',
|
|
451
|
-
key: 'Test text'
|
|
452
|
-
});
|
|
453
|
-
});
|
|
454
|
-
it('should allow interpolation of custom headings', () => {
|
|
455
|
-
const FORM_DATA = {
|
|
456
|
-
collection: [{
|
|
457
|
-
id: '01',
|
|
458
|
-
testText: 'value'
|
|
459
|
-
}]
|
|
460
|
-
};
|
|
461
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
462
|
-
formData: FORM_DATA,
|
|
463
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
464
|
-
collection: _objectSpread(_objectSpread({}, PAGES[0].collection), {}, {
|
|
465
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
466
|
-
heading: {
|
|
467
|
-
size: 'm',
|
|
468
|
-
text: 'interpolated text: ${testText}'
|
|
469
|
-
}
|
|
470
|
-
})
|
|
471
|
-
})]
|
|
472
|
-
});
|
|
473
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
474
|
-
expect(ROWS.length).toEqual(7);
|
|
475
|
-
expect(ROWS[0]).toMatchObject({
|
|
476
|
-
type: 'heading',
|
|
477
|
-
key: 'Collection'
|
|
478
|
-
});
|
|
479
|
-
expect(ROWS[1]).toMatchObject({
|
|
480
|
-
type: 'heading',
|
|
481
|
-
key: 'Collection entry 1'
|
|
482
|
-
});
|
|
483
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
484
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
485
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
486
|
-
expect(ROWS[5]).toMatchObject({
|
|
487
|
-
type: 'heading',
|
|
488
|
-
key: 'interpolated text: value',
|
|
489
|
-
size: 'm'
|
|
490
|
-
});
|
|
491
|
-
expect(ROWS[6]).toMatchObject({
|
|
492
|
-
value: 'value',
|
|
493
|
-
key: 'Test text'
|
|
494
|
-
});
|
|
495
|
-
});
|
|
496
|
-
it('should alow configuration of collection name headings', () => {
|
|
497
|
-
const FORM_DATA = {
|
|
498
|
-
collection: [{
|
|
499
|
-
id: '01',
|
|
500
|
-
testText: 'value'
|
|
501
|
-
}]
|
|
502
|
-
};
|
|
503
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
504
|
-
formData: FORM_DATA,
|
|
505
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
506
|
-
collectionHeading: {
|
|
507
|
-
text: 'Custom collection heading',
|
|
508
|
-
size: 'm',
|
|
509
|
-
changeLinkPage: PAGES[0].id
|
|
510
|
-
}
|
|
511
|
-
}),
|
|
512
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
513
|
-
collection: _objectSpread({}, PAGES[0].collection)
|
|
514
|
-
})]
|
|
515
|
-
});
|
|
516
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
517
|
-
expect(ROWS.length).toEqual(6);
|
|
518
|
-
expect(ROWS[0]).toMatchObject({
|
|
519
|
-
type: 'headingWithAction',
|
|
520
|
-
key: 'Custom collection heading'
|
|
521
|
-
});
|
|
522
|
-
});
|
|
523
|
-
it('should default to a title size of small if one is not specified', () => {
|
|
524
|
-
const FORM_DATA = {
|
|
525
|
-
collection: [{
|
|
526
|
-
id: '01',
|
|
527
|
-
testText: 'value'
|
|
528
|
-
}]
|
|
529
|
-
};
|
|
530
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
531
|
-
formData: FORM_DATA,
|
|
532
|
-
childPages: [_objectSpread(_objectSpread({}, PAGES[0]), {}, {
|
|
533
|
-
collection: _objectSpread(_objectSpread({}, PAGES[0].collection), {}, {
|
|
534
|
-
heading: {
|
|
535
|
-
text: 'Custom page heading'
|
|
536
|
-
}
|
|
537
|
-
})
|
|
538
|
-
})]
|
|
539
|
-
});
|
|
540
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
541
|
-
expect(ROWS[5]).toMatchObject({
|
|
542
|
-
type: 'heading',
|
|
543
|
-
key: 'Custom page heading',
|
|
544
|
-
size: 's'
|
|
545
|
-
});
|
|
546
|
-
});
|
|
547
|
-
it('should position actions under the title if actionPosition flag is not specified', () => {
|
|
548
|
-
const FORM_DATA = {
|
|
549
|
-
collection: [{
|
|
550
|
-
id: '01',
|
|
551
|
-
testText: 'value'
|
|
552
|
-
}]
|
|
553
|
-
};
|
|
554
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
555
|
-
formData: FORM_DATA
|
|
556
|
-
});
|
|
557
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
558
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
559
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
560
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
561
|
-
});
|
|
562
|
-
it('should position actions under the title if actionPosition flag is top', () => {
|
|
563
|
-
const FORM_DATA = {
|
|
564
|
-
collection: [{
|
|
565
|
-
id: '01',
|
|
566
|
-
testText: 'value'
|
|
567
|
-
}]
|
|
568
|
-
};
|
|
569
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
570
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
571
|
-
actionPosition: 'top'
|
|
572
|
-
}),
|
|
573
|
-
formData: FORM_DATA
|
|
574
|
-
});
|
|
575
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
576
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
577
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
578
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
579
|
-
});
|
|
580
|
-
it('should position actions under all other rows if actionPosition flag is bottom', () => {
|
|
581
|
-
const FORM_DATA = {
|
|
582
|
-
collection: [{
|
|
583
|
-
id: '01',
|
|
584
|
-
testText: 'value'
|
|
585
|
-
}]
|
|
586
|
-
};
|
|
587
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
588
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
589
|
-
actionPosition: 'bottom'
|
|
590
|
-
}),
|
|
591
|
-
formData: FORM_DATA
|
|
592
|
-
});
|
|
593
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
594
|
-
expect(ROWS[ROWS.length - 3].action.label).toEqual('Change');
|
|
595
|
-
expect(ROWS[ROWS.length - 2].action.label).toEqual('custom remove label');
|
|
596
|
-
expect(ROWS[ROWS.length - 1].action.label).toEqual('custom change label');
|
|
597
|
-
});
|
|
598
|
-
it('Show show the collection action when show_when condition is true', () => {
|
|
599
|
-
const FORM_DATA = {
|
|
600
|
-
collection: [{
|
|
601
|
-
id: '01',
|
|
602
|
-
testText: 'value'
|
|
603
|
-
}]
|
|
604
|
-
};
|
|
605
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
606
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
607
|
-
// Add a show_when to the colleciton action.
|
|
608
|
-
actions: MASTER_PAGE.collection.actions.map((action, index) => index === 1 ? _objectSpread(_objectSpread({}, action), {}, {
|
|
609
|
-
show_when: [{
|
|
610
|
-
field: "collection.length",
|
|
611
|
-
op: "=",
|
|
612
|
-
value: 1
|
|
613
|
-
}]
|
|
614
|
-
}) : action)
|
|
615
|
-
}),
|
|
616
|
-
formData: FORM_DATA
|
|
617
|
-
});
|
|
618
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
619
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
620
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
621
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
622
|
-
});
|
|
623
|
-
it('Should hide the collection action when show_when condition is false', () => {
|
|
624
|
-
const FORM_DATA = {
|
|
625
|
-
collection: [{
|
|
626
|
-
id: '01',
|
|
627
|
-
testText: 'value'
|
|
628
|
-
}]
|
|
629
|
-
};
|
|
630
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
631
|
-
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
632
|
-
// Add a show_when to the colleciton action.
|
|
633
|
-
actions: MASTER_PAGE.collection.actions.map((action, index) => index === 1 ? _objectSpread(_objectSpread({}, action), {}, {
|
|
634
|
-
show_when: [{
|
|
635
|
-
field: "collection.length",
|
|
636
|
-
op: "=",
|
|
637
|
-
value: 10
|
|
638
|
-
}]
|
|
639
|
-
}) : action)
|
|
640
|
-
}),
|
|
641
|
-
formData: FORM_DATA
|
|
642
|
-
});
|
|
643
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, FORM_DATA);
|
|
644
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
645
|
-
expect(ROWS[3].action.label).toEqual('custom change label');
|
|
646
|
-
});
|
|
647
|
-
it('should ignore the result of the override function if it returns nullish', () => {
|
|
648
|
-
const FORM_DATA = {
|
|
649
|
-
collection: [{
|
|
650
|
-
id: '01',
|
|
651
|
-
testText: 'value'
|
|
652
|
-
}]
|
|
653
|
-
};
|
|
654
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
655
|
-
formData: FORM_DATA
|
|
656
|
-
});
|
|
657
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, () => null, FORM_DATA);
|
|
658
|
-
expect(ROWS.length).toEqual(7); // Collection title, item title, action rows & component rows
|
|
659
|
-
expect(ROWS[5].key).toEqual("Test text");
|
|
660
|
-
});
|
|
661
|
-
it('should use the rows produced by the override function if provided', () => {
|
|
662
|
-
const FORM_DATA = {
|
|
663
|
-
collection: [{
|
|
664
|
-
id: '01',
|
|
665
|
-
testText: 'value'
|
|
666
|
-
}]
|
|
667
|
-
};
|
|
668
|
-
|
|
669
|
-
// eslint-disable-next-line arrow-body-style
|
|
670
|
-
const OVERRIDE = (page, comp) => {
|
|
671
|
-
// This will be called for each component on the page,
|
|
672
|
-
// returning a custom row object.
|
|
673
|
-
return {
|
|
674
|
-
key: "CustomRowFor".concat(comp.label)
|
|
675
|
-
};
|
|
676
|
-
};
|
|
677
|
-
const PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
678
|
-
formData: FORM_DATA
|
|
679
|
-
});
|
|
680
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, OVERRIDE, FORM_DATA);
|
|
681
|
-
expect(ROWS.length).toEqual(7); // Collection title, item title, action rows & component rows
|
|
682
|
-
expect(ROWS[5].key).toEqual("CustomRowFor".concat(TEXT_COMP.label));
|
|
683
|
-
});
|
|
684
|
-
it('should create rows for nested collections correctly', () => {
|
|
685
|
-
const CUSTOM_FORM_DATA = {
|
|
686
|
-
parentActiveId: '001',
|
|
687
|
-
childActiveId: '001',
|
|
688
|
-
parent: [{
|
|
689
|
-
id: '001',
|
|
690
|
-
testText: 'alpha',
|
|
691
|
-
child: [{
|
|
692
|
-
id: '001',
|
|
693
|
-
testText: 'bravo'
|
|
694
|
-
}]
|
|
695
|
-
}]
|
|
696
|
-
};
|
|
697
|
-
const CHILD_MASTER_PAGE = {
|
|
698
|
-
id: 'childPage',
|
|
699
|
-
collection: {
|
|
700
|
-
name: 'parent.child',
|
|
701
|
-
masterPage: true,
|
|
702
|
-
labels: {
|
|
703
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
704
|
-
item: 'Child number ${index}'
|
|
705
|
-
},
|
|
706
|
-
actions: [{
|
|
707
|
-
type: 'change'
|
|
708
|
-
}, {
|
|
709
|
-
type: 'remove',
|
|
710
|
-
label: 'custom remove label'
|
|
711
|
-
}]
|
|
712
|
-
},
|
|
713
|
-
childPages: [{
|
|
714
|
-
id: 'childPage',
|
|
715
|
-
collection: {
|
|
716
|
-
name: 'parent.child'
|
|
717
|
-
},
|
|
718
|
-
components: [TEXT_COMP]
|
|
719
|
-
}]
|
|
720
|
-
};
|
|
721
|
-
const PARENT_MASTER_PAGE = {
|
|
722
|
-
id: 'parentPage',
|
|
723
|
-
collection: {
|
|
724
|
-
name: 'parent',
|
|
725
|
-
masterPage: true
|
|
726
|
-
},
|
|
727
|
-
childPages: [{
|
|
728
|
-
id: 'parentPage',
|
|
729
|
-
collection: {
|
|
730
|
-
name: 'parent'
|
|
731
|
-
},
|
|
732
|
-
components: [TEXT_COMP]
|
|
733
|
-
}, CHILD_MASTER_PAGE]
|
|
734
|
-
};
|
|
735
|
-
const PAGE = _objectSpread(_objectSpread({}, PARENT_MASTER_PAGE), {}, {
|
|
736
|
-
formData: CUSTOM_FORM_DATA
|
|
737
|
-
});
|
|
738
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null, null, CUSTOM_FORM_DATA);
|
|
739
|
-
expect(ROWS.length).toEqual(8);
|
|
740
|
-
expect(ROWS[0]).toMatchObject({
|
|
741
|
-
type: 'heading',
|
|
742
|
-
key: 'Parent'
|
|
743
|
-
});
|
|
744
|
-
expect(ROWS[1]).toMatchObject({
|
|
745
|
-
type: 'heading',
|
|
746
|
-
key: 'Item 1'
|
|
747
|
-
});
|
|
748
|
-
expect(ROWS[2]).toMatchObject({
|
|
749
|
-
value: 'alpha',
|
|
750
|
-
key: 'Test text'
|
|
751
|
-
});
|
|
752
|
-
expect(ROWS[3]).toMatchObject({
|
|
753
|
-
type: 'heading',
|
|
754
|
-
key: 'Child'
|
|
755
|
-
});
|
|
756
|
-
expect(ROWS[4]).toMatchObject({
|
|
757
|
-
type: 'heading',
|
|
758
|
-
key: 'Child number 1'
|
|
759
|
-
});
|
|
760
|
-
expect(ROWS[5].action.label).toEqual('Change');
|
|
761
|
-
expect(ROWS[6].action.label).toEqual('custom remove label');
|
|
762
|
-
expect(ROWS[7]).toMatchObject({
|
|
763
|
-
value: 'bravo',
|
|
764
|
-
key: 'Test text'
|
|
765
|
-
});
|
|
766
|
-
});
|
|
767
|
-
it('should create rows for the Collection component correctly', () => {
|
|
768
|
-
const FORM_DATA = {
|
|
769
|
-
collection: [{
|
|
770
|
-
id: '01',
|
|
771
|
-
testCollection: [{
|
|
772
|
-
testText: 'collection value'
|
|
773
|
-
}],
|
|
774
|
-
otherComp: 'one'
|
|
775
|
-
}]
|
|
776
|
-
};
|
|
777
|
-
const COLLECTION_COMP = {
|
|
778
|
-
id: 'testCollection',
|
|
779
|
-
fieldId: 'testCollection',
|
|
780
|
-
label: 'Test collection',
|
|
781
|
-
type: 'collection',
|
|
782
|
-
item: [{
|
|
783
|
-
id: 'testText',
|
|
784
|
-
fieldId: 'testText',
|
|
785
|
-
type: 'text',
|
|
786
|
-
label: 'Some nice text'
|
|
787
|
-
}],
|
|
788
|
-
show_when: [{
|
|
789
|
-
field: 'otherComp',
|
|
790
|
-
op: 'eq',
|
|
791
|
-
value: 'one'
|
|
792
|
-
}]
|
|
793
|
-
};
|
|
794
|
-
const MASTER_PAGE_WITH_COLLECTION = {
|
|
795
|
-
id: 'page1',
|
|
796
|
-
collection: {
|
|
797
|
-
name: 'collection',
|
|
798
|
-
labels: {
|
|
799
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
800
|
-
item: 'Collection entry ${index}'
|
|
801
|
-
},
|
|
802
|
-
actions: [{
|
|
803
|
-
type: 'change'
|
|
804
|
-
}, {
|
|
805
|
-
type: 'remove',
|
|
806
|
-
label: 'custom remove label'
|
|
807
|
-
}, {
|
|
808
|
-
type: 'change',
|
|
809
|
-
label: 'custom change label',
|
|
810
|
-
page: 'confirmDelete'
|
|
811
|
-
}]
|
|
812
|
-
},
|
|
813
|
-
childPages: [{
|
|
814
|
-
id: 'page1',
|
|
815
|
-
collection: {
|
|
816
|
-
name: 'collection'
|
|
817
|
-
},
|
|
818
|
-
components: [COLLECTION_COMP]
|
|
819
|
-
}],
|
|
820
|
-
formData: FORM_DATA
|
|
821
|
-
};
|
|
822
|
-
const ROWS = (0, _getCYARowsForCollectionPage.default)(MASTER_PAGE_WITH_COLLECTION, null, null, FORM_DATA);
|
|
823
|
-
expect(ROWS.length).toEqual(7); // Title row + component row for each item
|
|
824
|
-
expect(ROWS[0]).toMatchObject({
|
|
825
|
-
type: 'heading',
|
|
826
|
-
key: 'Collection'
|
|
827
|
-
});
|
|
828
|
-
expect(ROWS[1]).toMatchObject({
|
|
829
|
-
type: 'heading',
|
|
830
|
-
key: 'Collection entry 1'
|
|
831
|
-
});
|
|
832
|
-
expect(ROWS[2].action.label).toEqual('Change');
|
|
833
|
-
expect(ROWS[3].action.label).toEqual('custom remove label');
|
|
834
|
-
expect(ROWS[4].action.label).toEqual('custom change label');
|
|
835
|
-
expect(ROWS[5]).toMatchObject({
|
|
836
|
-
key: 'Item 1'
|
|
837
|
-
});
|
|
838
|
-
expect(ROWS[6]).toMatchObject({
|
|
839
|
-
value: 'collection value',
|
|
840
|
-
key: 'Some nice text'
|
|
841
|
-
});
|
|
842
|
-
});
|
|
843
|
-
});
|
|
844
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiZGVzY3JpYmUiLCJURVhUX0NPTVAiLCJpZCIsImZpZWxkSWQiLCJsYWJlbCIsInR5cGUiLCJEQVRFX0NPTVAiLCJQQUdFUyIsImNvbGxlY3Rpb24iLCJuYW1lIiwiY29tcG9uZW50cyIsIk1BU1RFUl9QQUdFIiwibGFiZWxzIiwiaXRlbSIsImFjdGlvbnMiLCJwYWdlIiwiY2hpbGRQYWdlcyIsIml0IiwiRk9STV9EQVRBIiwiUEFHRSIsImZvcm1EYXRhIiwiUk9XUyIsImdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZSIsImV4cGVjdCIsInRvRXF1YWwiLCJ0ZXN0VGV4dCIsImhpZGVOYW1lRnJvbUNZQSIsIlRJVExFX0ZJRUxEX0lEIiwiY29uY2F0Iiwibm90Iiwia2V5IiwiaGlkZUl0ZW1UaXRsZXMiLCJzaG91bGRTaG93IiwiZmllbGQiLCJvcCIsInRvTWF0Y2hPYmplY3QiLCJhY3Rpb24iLCJjb2xsZWN0aW9uQWN0aXZlSWQiLCJvbmx5U2hvd0FjdGl2ZUVudHJ5T25DWUEiLCJ0ZXh0IiwiRkQiLCJvdGhlckZpZWxkIiwic2hvd193aGVuIiwiaGVhZGluZyIsInNpemUiLCJjb2xsZWN0aW9uSGVhZGluZyIsImNoYW5nZUxpbmtQYWdlIiwiYWN0aW9uUG9zaXRpb24iLCJtYXAiLCJpbmRleCIsIk9WRVJSSURFIiwiY29tcCIsIkNVU1RPTV9GT1JNX0RBVEEiLCJwYXJlbnRBY3RpdmVJZCIsImNoaWxkQWN0aXZlSWQiLCJwYXJlbnQiLCJjaGlsZCIsIkNISUxEX01BU1RFUl9QQUdFIiwibWFzdGVyUGFnZSIsIlBBUkVOVF9NQVNURVJfUEFHRSIsInRlc3RDb2xsZWN0aW9uIiwib3RoZXJDb21wIiwiQ09MTEVDVElPTl9DT01QIiwiTUFTVEVSX1BBR0VfV0lUSF9DT0xMRUNUSU9OIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0NoZWNrWW91ckFuc3dlcnMvZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTG9jYWwgaW1wb3J0c1xuaW1wb3J0IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZSBmcm9tICcuL2dldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZSc7XG5cbmRlc2NyaWJlKCd1dGlscy5DaGVja1lvdXJBbnN3ZXJzLmdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZScsICgpID0+IHtcbiAgY29uc3QgVEVYVF9DT01QID0ge1xuICAgIGlkOiAndGVzdFRleHQnLFxuICAgIGZpZWxkSWQ6ICd0ZXN0VGV4dCcsXG4gICAgbGFiZWw6ICdUZXN0IHRleHQnLFxuICAgIHR5cGU6ICd0ZXh0J1xuICB9O1xuICBjb25zdCBEQVRFX0NPTVAgPSB7XG4gICAgaWQ6ICd0ZXN0RGF0ZScsXG4gICAgZmllbGRJZDogJ3Rlc3REYXRlJyxcbiAgICBsYWJlbDogJ1Rlc3QgZGF0ZScsXG4gICAgdHlwZTogJ2RhdGUnXG4gIH07XG4gIGNvbnN0IFBBR0VTID0gW1xuICAgIHtcbiAgICAgIGlkOiAncGFnZTEnLFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICBuYW1lOiAnY29sbGVjdGlvbicsXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czogW1xuICAgICAgICBURVhUX0NPTVAsXG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3BhZ2UyJyxcbiAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgREFURV9DT01QLFxuICAgICAgXVxuICAgIH0sXG4gIF07XG4gIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgIGlkOiAncGFnZTEnLFxuICAgIGNvbGxlY3Rpb246IHtcbiAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgIGxhYmVsczoge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nXG4gICAgICAgIGl0ZW06ICdDb2xsZWN0aW9uIGVudHJ5ICR7aW5kZXh9J1xuICAgICAgfSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjaGFuZ2UnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlJyxcbiAgICAgICAgICBsYWJlbDogJ2N1c3RvbSByZW1vdmUgbGFiZWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnY2hhbmdlJyxcbiAgICAgICAgICBsYWJlbDogJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnLFxuICAgICAgICAgIHBhZ2U6ICdjb25maXJtRGVsZXRlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICBjaGlsZFBhZ2VzOiBQQUdFU1xuICB9O1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIG5vIHJvd3MgZm9yIGEgY29sbGVjdGlvbiBpZiBpdCBkb2VzIG5vdCBleGlzdCBpbiBmb3JtRGF0YScsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7fTtcbiAgICBjb25zdCBQQUdFID0geyAuLi5NQVNURVJfUEFHRSwgZm9ybURhdGE6IEZPUk1fREFUQSB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XUy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIG5vIHJvd3MgZm9yIGEgY29sbGVjdGlvbiBpZiBpdCBoYXMgbm8gZW50cmllcycsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7IGNvbGxlY3Rpb246IFsgXSB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IC4uLk1BU1RFUl9QQUdFLCBmb3JtRGF0YTogRk9STV9EQVRBIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQgdGhlIGhpZGVOYW1lRnJvbUNZQSBjb2xsZWN0aW9uIGZsYWcnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0geyBcbiAgICAgIGNvbGxlY3Rpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlc3RUZXh0OiAnaGVsbG8nXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQSwgXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIC4uLk1BU1RFUl9QQUdFLmNvbGxlY3Rpb24sXG4gICAgICAgIGhpZGVOYW1lRnJvbUNZQTogdHJ1ZVxuICAgICAgfSBcbiAgICB9O1xuICAgIGNvbnN0IFRJVExFX0ZJRUxEX0lEID0gYCR7UEFHRS5jb2xsZWN0aW9uLm5hbWV9VGl0bGVgO1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XU1swXS5maWVsZElkKS5ub3QudG9FcXVhbChUSVRMRV9GSUVMRF9JRCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9ybWF0IHRpdGxlcyBjb3JyZWN0bHkgd2hlbiBjb2xsZWN0aW9uLmxhYmVscy5pdGVtIGlzIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgLi4uTUFTVEVSX1BBR0UsIGZvcm1EYXRhOiBGT1JNX0RBVEEgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDcpOyAvLyBDb2xsZWN0aW9uIHRpdGxlLCBpdGVtIHRpdGxlLCBhY3Rpb24gcm93cyAmIGNvbXBvbmVudCByb3dzXG4gICAgZXhwZWN0KFJPV1NbMV0ua2V5KS50b0VxdWFsKCdDb2xsZWN0aW9uIGVudHJ5IDEnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoaWRlIHRpdGxlcyB3aGVuIGhpZGVJdGVtVGl0bGVzIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZScsXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQSxcbiAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgLi4uTUFTVEVSX1BBR0UuY29sbGVjdGlvbixcbiAgICAgICAgaGlkZUl0ZW1UaXRsZXM6IHRydWVcbiAgICAgIH0gXG4gICAgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDYpOyAvLyBDb2xsZWN0aW9uIHRpdGxlLCBOTyBpdGVtIHRpdGxlLCBhY3Rpb24gcm93cyAmIGNvbXBvbmVudCByb3dzXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaGlkZSB0aXRsZXMgd2hlbiBoaWRlSXRlbVRpdGxlcyBpcyBhIHNob3dfd2hlbiB0aGF0IGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgc2hvdWxkU2hvdzogZmFsc2UsXG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAuLi5NQVNURVJfUEFHRS5jb2xsZWN0aW9uLFxuICAgICAgICBoaWRlSXRlbVRpdGxlczogW3tcbiAgICAgICAgICBmaWVsZDogJ3Nob3VsZFNob3cnLFxuICAgICAgICAgIG9wOiAnPScsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH1dXG4gICAgICB9IFxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg2KTsgLy8gQ29sbGVjdGlvbiB0aXRsZSwgTk8gaXRlbSB0aXRsZSwgYWN0aW9uIHJvd3MgJiBjb21wb25lbnQgcm93c1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3ZpZGUgZGVmYXVsdCB0aXRsZXMgaWYgY29sbGVjdGlvbi5sYWJlbHMuaXRlbSBpcyBub3Qgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IEZPUk1fREFUQSA9IHtcbiAgICAgIGNvbGxlY3Rpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMDEnLFxuICAgICAgICAgIHRlc3RUZXh0OiAndmFsdWUnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBQQUdFID0geyAuLi5NQVNURVJfUEFHRSwgY29sbGVjdGlvbjogey4uLk1BU1RFUl9QQUdFLmNvbGxlY3Rpb24sIGxhYmVsczoge30gfSwgZm9ybURhdGE6IEZPUk1fREFUQSB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XUy5sZW5ndGgpLnRvRXF1YWwoNyk7IC8vIENvbGxlY3Rpb24gdGl0bGUsIGl0ZW0gdGl0bGUsIGFjdGlvbiByb3dzICYgY29tcG9uZW50IHJvd3NcbiAgICBleHBlY3QoUk9XU1sxXS5rZXkpLnRvRXF1YWwoJ0l0ZW0gMScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0bHkgZm9ybWF0dGVkIHJvd3MgZm9yIG11dGxpcGxlIGVudHJpZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAyJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJ1xuICAgICAgICB9LFxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgLi4uTUFTVEVSX1BBR0UsIGZvcm1EYXRhOiBGT1JNX0RBVEEgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDEzKTsgLy8gVGl0bGUgcm93ICsgY29tcG9uZW50IHJvdyBmb3IgZWFjaCBpdGVtXG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uIGVudHJ5IDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1szXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s0XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s1XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBrZXk6ICdUZXN0IGRhdGUnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbN10pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbiBlbnRyeSAyJ1xuICAgIH0pO1xuICAgIGV4cGVjdChST1dTWzhdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnQ2hhbmdlJyk7XG4gICAgZXhwZWN0KFJPV1NbOV0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdjdXN0b20gcmVtb3ZlIGxhYmVsJyk7XG4gICAgZXhwZWN0KFJPV1NbMTBdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzExXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxMl0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdmFsdWU6ICcnLFxuICAgICAga2V5OiAnVGVzdCBkYXRlJ1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSB2YWx1ZXMgZnJvbSB0b3AtbGV2ZWwgZm9ybURhdGEgaWYgdGhleSBkb25cXCd0IGV4aXN0IGluIHRoZSBpdGVtJywgKCkgPT4ge1xuICAgIGNvbnN0IEZPUk1fREFUQSA9IHtcbiAgICAgIHRlc3RUZXh0OiAndmFsdWUnLFxuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBQQUdFID0ge1xuICAgICAgLi4uTUFTVEVSX1BBR0UsXG4gICAgICBjaGlsZFBhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5QQUdFU1swXSxcbiAgICAgICAgICBmb3JtRGF0YTogRk9STV9EQVRBXG4gICAgICAgIH0sXG4gICAgICAgIFBBR0VTWzFdXG4gICAgICBdLFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQVxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg3KTsgLy8gVGl0bGUgcm93ICsgY29tcG9uZW50IHJvdyBmb3IgZWFjaCBpdGVtXG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uIGVudHJ5IDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1szXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s0XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s1XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBrZXk6ICdUZXN0IGRhdGUnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3RseSBmb3JtYXR0ZWQgcm93cyBmb3Igb25seSB0aGUgYWN0aXZlIGVudHJ5IHdoZW4gcGFnZS5jb2xsZWN0aW9uLm9ubHlTaG93QWN0aXZlRW50cnlPbkNZQSBpcyBkZWZpbmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IEZPUk1fREFUQSA9IHtcbiAgICAgIGNvbGxlY3Rpb25BY3RpdmVJZDogJzAyJyxcbiAgICAgIGNvbGxlY3Rpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMDEnLFxuICAgICAgICAgIHRlc3RUZXh0OiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMicsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZSdcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAuLi5NQVNURVJfUEFHRS5jb2xsZWN0aW9uLFxuICAgICAgICBvbmx5U2hvd0FjdGl2ZUVudHJ5T25DWUE6IHRydWVcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBIFxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg3KTsgLy8gVGl0bGUgcm93ICsgY29tcG9uZW50IHJvdyBmb3Igb25seSB0aGUgYWN0aXZlIGl0ZW0uXG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uIGVudHJ5IDInXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1szXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s0XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s1XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBrZXk6ICdUZXN0IGRhdGUnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3RseSBmb3JtYXR0ZWQgcm93cyBmb3Igb25seSB0aGUgYWN0aXZlIGVudHJ5IHdoZW4gcGFnZS5jb2xsZWN0aW9uLm9ubHlTaG93QWN0aXZlRW50cnlPbkNZQSBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICB0ZXh0OiAnYmx1ZScsXG4gICAgICBjb2xsZWN0aW9uQWN0aXZlSWQ6ICcwMicsXG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMDInLFxuICAgICAgICAgIHRlc3RUZXh0OiAndmFsdWUnXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBQQUdFID0ge1xuICAgICAgLi4uTUFTVEVSX1BBR0UsXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIC4uLk1BU1RFUl9QQUdFLmNvbGxlY3Rpb24sXG4gICAgICAgIG9ubHlTaG93QWN0aXZlRW50cnlPbkNZQTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndGV4dCcsXG4gICAgICAgICAgICBvcDogJ2VxJyxcbiAgICAgICAgICAgIHZhbHVlOiAnYmx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg3KTsgLy8gVGl0bGUgcm93ICsgY29tcG9uZW50IHJvdyBmb3Igb25seSB0aGUgYWN0aXZlIGl0ZW0uXG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uIGVudHJ5IDInXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1szXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s0XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s1XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBrZXk6ICdUZXN0IGRhdGUnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhjbHVkZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBzaG93bicsICgpID0+IHtcbiAgICBjb25zdCBGRD0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgb3RoZXJGaWVsZDogJ3llcycsXG4gICAgICAgICAgdGVzdFRleHQ6ICd0ZXN0aW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMicsXG4gICAgICAgICAgb3RoZXJGaWVsZDogJ25vJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3Rlc3RpbmcnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJ1xuICAgICAgfSxcbiAgICAgIGZvcm1EYXRhOiBGRCxcbiAgICAgIGNoaWxkUGFnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIC4uLlBBR0VTWzBdLFxuICAgICAgICAgIGNvbXBvbmVudHM6IFt7XG4gICAgICAgICAgICBpZDogJ3Rlc3RUZXh0JyxcbiAgICAgICAgICAgIGZpZWxkSWQ6ICd0ZXN0VGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1Rlc3QgdGV4dCcsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBzaG93X3doZW46IHtcbiAgICAgICAgICAgICAgZmllbGQ6IFwib3RoZXJGaWVsZFwiLFxuICAgICAgICAgICAgICBvcDogXCIhPVwiLFxuICAgICAgICAgICAgICB2YWx1ZTogXCJ5ZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIF0gXG4gICAgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZEKTtcbiAgICBleHBlY3QoUk9XUy5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdJdGVtIDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnSXRlbSAyJ1xuICAgIH0pO1xuICAgIGV4cGVjdChST1dTWzNdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHZhbHVlOiAndGVzdGluZycsXG4gICAgICBrZXk6ICdUZXN0IHRleHQnXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhjbHVkZSBwYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgc2hvd24nLCAoKSA9PiB7XG4gICAgY29uc3QgRkQ9IHtcbiAgICAgIGNvbGxlY3Rpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMDEnLFxuICAgICAgICAgIG90aGVyRmllbGQ6ICd5ZXMnLFxuICAgICAgICAgIHRlc3RUZXh0OiAndGVzdGluZydcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgICBjb25zdCBQQUdFID0geyBcbiAgICAgIC4uLk1BU1RFUl9QQUdFLCBcbiAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nXG4gICAgICB9LFxuICAgICAgZm9ybURhdGE6IEZELFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uUEFHRVNbMF0sXG4gICAgICAgICAgc2hvd193aGVuOiB7XG4gICAgICAgICAgICBmaWVsZDogXCJvdGhlckZpZWxkXCIsXG4gICAgICAgICAgICBvcDogXCIhPVwiLFxuICAgICAgICAgICAgdmFsdWU6IFwieWVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFBBR0VTWzFdXG4gICAgICBdIFxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGRCk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDMpOyAvLyBNaXNzaW5nIHRoZSBwYWdlIHdpdGggdGhlIHRleHQgY29tcG9uZW50IG9uLlxuICAgIGV4cGVjdChST1dTWzBdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgIGtleTogJ0NvbGxlY3Rpb24nXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMV0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnSXRlbSAxJ1xuICAgIH0pO1xuICAgIGV4cGVjdChST1dTWzJdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGtleTogJ1Rlc3QgZGF0ZSdcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbmNsdWRlIHJvd3MgZm9yIGN1c3RvbSBoZWFkaW5ncycsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uUEFHRVNbMF0sXG4gICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgLi4uUEFHRVNbMF0uY29sbGVjdGlvbixcbiAgICAgICAgICAgIGhlYWRpbmc6IHsgc2l6ZTogJ20nLCB0ZXh0OiAnQ3VzdG9tIHBhZ2UgaGVhZGluZycgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XUy5sZW5ndGgpLnRvRXF1YWwoNyk7IFxuICAgIGV4cGVjdChST1dTWzBdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgIGtleTogJ0NvbGxlY3Rpb24nXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMV0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbiBlbnRyeSAxJ1xuICAgIH0pO1xuICAgIGV4cGVjdChST1dTWzJdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnQ2hhbmdlJyk7XG4gICAgZXhwZWN0KFJPV1NbM10uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdjdXN0b20gcmVtb3ZlIGxhYmVsJyk7XG4gICAgZXhwZWN0KFJPV1NbNF0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdjdXN0b20gY2hhbmdlIGxhYmVsJyk7XG4gICAgZXhwZWN0KFJPV1NbNV0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ3VzdG9tIHBhZ2UgaGVhZGluZycsXG4gICAgICBzaXplOiAnbSdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7IFxuICAgICAgdmFsdWU6ICd2YWx1ZScsIFxuICAgICAga2V5OiAnVGVzdCB0ZXh0JyBcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBpbnRlcnBvbGF0aW9uIG9mIGN1c3RvbSBoZWFkaW5ncycsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uUEFHRVNbMF0sXG4gICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgLi4uUEFHRVNbMF0uY29sbGVjdGlvbixcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcbiAgICAgICAgICAgIGhlYWRpbmc6IHsgc2l6ZTogJ20nLCB0ZXh0OiAnaW50ZXJwb2xhdGVkIHRleHQ6ICR7dGVzdFRleHR9JyB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg3KTsgXG4gICAgZXhwZWN0KFJPV1NbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ29sbGVjdGlvbidcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uIGVudHJ5IDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1szXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s0XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s1XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdpbnRlcnBvbGF0ZWQgdGV4dDogdmFsdWUnLFxuICAgICAgc2l6ZTogJ20nXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbNl0pLnRvTWF0Y2hPYmplY3QoeyBcbiAgICAgIHZhbHVlOiAndmFsdWUnLCBcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCcgXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxvdyBjb25maWd1cmF0aW9uIG9mIGNvbGxlY3Rpb24gbmFtZSBoZWFkaW5ncycsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAuLi5NQVNURVJfUEFHRS5jb2xsZWN0aW9uLFxuICAgICAgICBjb2xsZWN0aW9uSGVhZGluZzoge1xuICAgICAgICAgIHRleHQ6ICdDdXN0b20gY29sbGVjdGlvbiBoZWFkaW5nJyxcbiAgICAgICAgICBzaXplOiAnbScsXG4gICAgICAgICAgY2hhbmdlTGlua1BhZ2U6IFBBR0VTWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjaGlsZFBhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5QQUdFU1swXSxcbiAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAuLi5QQUdFU1swXS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDYpOyBcbiAgICBleHBlY3QoUk9XU1swXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZ1dpdGhBY3Rpb24nLFxuICAgICAga2V5OiAnQ3VzdG9tIGNvbGxlY3Rpb24gaGVhZGluZydcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGEgdGl0bGUgc2l6ZSBvZiBzbWFsbCBpZiBvbmUgaXMgbm90IHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uUEFHRVNbMF0sXG4gICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgLi4uUEFHRVNbMF0uY29sbGVjdGlvbixcbiAgICAgICAgICAgIGhlYWRpbmc6IHsgdGV4dDogJ0N1c3RvbSBwYWdlIGhlYWRpbmcnIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBST1dTID0gZ2V0Q1lBUm93c0ZvckNvbGxlY3Rpb25QYWdlKFBBR0UsIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1NbNV0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ3VzdG9tIHBhZ2UgaGVhZGluZycsXG4gICAgICBzaXplOiAncydcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwb3NpdGlvbiBhY3Rpb25zIHVuZGVyIHRoZSB0aXRsZSBpZiBhY3Rpb25Qb3NpdGlvbiBmbGFnIGlzIG5vdCBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZScsXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQSxcbiAgICB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XU1syXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ0NoYW5nZScpO1xuICAgIGV4cGVjdChST1dTWzNdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIHJlbW92ZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzRdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBvc2l0aW9uIGFjdGlvbnMgdW5kZXIgdGhlIHRpdGxlIGlmIGFjdGlvblBvc2l0aW9uIGZsYWcgaXMgdG9wJywgKCkgPT4ge1xuICAgIGNvbnN0IEZPUk1fREFUQSA9IHtcbiAgICAgIGNvbGxlY3Rpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMDEnLFxuICAgICAgICAgIHRlc3RUZXh0OiAndmFsdWUnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICBjb25zdCBQQUdFID0geyBcbiAgICAgIC4uLk1BU1RFUl9QQUdFLCBcbiAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgLi4uTUFTVEVSX1BBR0UuY29sbGVjdGlvbixcbiAgICAgICAgYWN0aW9uUG9zaXRpb246ICd0b3AnXG4gICAgICB9LFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQSxcbiAgICB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XU1syXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ0NoYW5nZScpO1xuICAgIGV4cGVjdChST1dTWzNdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIHJlbW92ZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzRdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBvc2l0aW9uIGFjdGlvbnMgdW5kZXIgYWxsIG90aGVyIHJvd3MgaWYgYWN0aW9uUG9zaXRpb24gZmxhZyBpcyBib3R0b20nLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZScsXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAuLi5NQVNURVJfUEFHRS5jb2xsZWN0aW9uLFxuICAgICAgICBhY3Rpb25Qb3NpdGlvbjogJ2JvdHRvbSdcbiAgICAgIH0sXG4gICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTW1JPV1MubGVuZ3RoIC0gM10uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1tST1dTLmxlbmd0aCAtIDJdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIHJlbW92ZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTW1JPV1MubGVuZ3RoIC0gMV0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdjdXN0b20gY2hhbmdlIGxhYmVsJyk7XG4gIH0pO1xuXG4gICBpdCgnU2hvdyBzaG93IHRoZSBjb2xsZWN0aW9uIGFjdGlvbiB3aGVuIHNob3dfd2hlbiBjb25kaXRpb24gaXMgdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgXG4gICAgICAuLi5NQVNURVJfUEFHRSwgXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIC4uLk1BU1RFUl9QQUdFLmNvbGxlY3Rpb24sXG4gICAgICAgIC8vIEFkZCBhIHNob3dfd2hlbiB0byB0aGUgY29sbGVjaXRvbiBhY3Rpb24uXG4gICAgICAgIGFjdGlvbnM6IE1BU1RFUl9QQUdFLmNvbGxlY3Rpb24uYWN0aW9ucy5tYXAoKGFjdGlvbiwgaW5kZXgpID0+XG4gICAgICAgICAgaW5kZXggPT09IDFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgICAgICAgICBzaG93X3doZW46IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IFwiY29sbGVjdGlvbi5sZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgb3A6IFwiPVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBhY3Rpb25cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGZvcm1EYXRhOiBGT1JNX0RBVEEsXG4gICAgfTtcblxuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XU1syXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ0NoYW5nZScpO1xuICAgIGV4cGVjdChST1dTWzNdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIHJlbW92ZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzRdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICB9KTtcblxuICBpdCgnU2hvdWxkIGhpZGUgdGhlIGNvbGxlY3Rpb24gYWN0aW9uIHdoZW4gc2hvd193aGVuIGNvbmRpdGlvbiBpcyBmYWxzZScsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgICAgIGNvbnN0IFBBR0UgPSB7IFxuICAgICAgLi4uTUFTVEVSX1BBR0UsIFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAuLi5NQVNURVJfUEFHRS5jb2xsZWN0aW9uLFxuICAgICAgICAvLyBBZGQgYSBzaG93X3doZW4gdG8gdGhlIGNvbGxlY2l0b24gYWN0aW9uLlxuICAgICAgICBhY3Rpb25zOiBNQVNURVJfUEFHRS5jb2xsZWN0aW9uLmFjdGlvbnMubWFwKChhY3Rpb24sIGluZGV4KSA9PlxuICAgICAgICAgIGluZGV4ID09PSAxXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgICAgICAgICAgc2hvd193aGVuOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBcImNvbGxlY3Rpb24ubGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wOiBcIj1cIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEwXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGFjdGlvblxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQSxcbiAgICB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XU1syXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ0NoYW5nZScpO1xuICAgIGV4cGVjdChST1dTWzNdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoZSBvdmVycmlkZSBmdW5jdGlvbiBpZiBpdCByZXR1cm5zIG51bGxpc2gnLCAoKSA9PiB7XG4gICAgY29uc3QgRk9STV9EQVRBID0ge1xuICAgICAgY29sbGVjdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMScsXG4gICAgICAgICAgdGVzdFRleHQ6ICd2YWx1ZScsXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IC4uLk1BU1RFUl9QQUdFLCBmb3JtRGF0YTogRk9STV9EQVRBIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCAoKSA9PiBudWxsLCBGT1JNX0RBVEEpO1xuICAgIGV4cGVjdChST1dTLmxlbmd0aCkudG9FcXVhbCg3KTsgLy8gQ29sbGVjdGlvbiB0aXRsZSwgaXRlbSB0aXRsZSwgYWN0aW9uIHJvd3MgJiBjb21wb25lbnQgcm93c1xuICAgIGV4cGVjdChST1dTWzVdLmtleSkudG9FcXVhbChgVGVzdCB0ZXh0YCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIHRoZSByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdmVycmlkZSBmdW5jdGlvbiBpZiBwcm92aWRlZCcsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0VGV4dDogJ3ZhbHVlJyxcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuICAgIGNvbnN0IE9WRVJSSURFID0gKHBhZ2UsIGNvbXApID0+IHtcbiAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggY29tcG9uZW50IG9uIHRoZSBwYWdlLFxuICAgICAgLy8gcmV0dXJuaW5nIGEgY3VzdG9tIHJvdyBvYmplY3QuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGBDdXN0b21Sb3dGb3Ike2NvbXAubGFiZWx9YFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IFBBR0UgPSB7IC4uLk1BU1RFUl9QQUdFLCBmb3JtRGF0YTogRk9STV9EQVRBIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShQQUdFLCBudWxsLCBPVkVSUklERSwgRk9STV9EQVRBKTtcbiAgICBleHBlY3QoUk9XUy5sZW5ndGgpLnRvRXF1YWwoNyk7IC8vIENvbGxlY3Rpb24gdGl0bGUsIGl0ZW0gdGl0bGUsIGFjdGlvbiByb3dzICYgY29tcG9uZW50IHJvd3NcbiAgICBleHBlY3QoUk9XU1s1XS5rZXkpLnRvRXF1YWwoYEN1c3RvbVJvd0ZvciR7VEVYVF9DT01QLmxhYmVsfWApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSByb3dzIGZvciBuZXN0ZWQgY29sbGVjdGlvbnMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbnN0IENVU1RPTV9GT1JNX0RBVEEgPSB7XG4gICAgICBwYXJlbnRBY3RpdmVJZDogJzAwMScsXG4gICAgICBjaGlsZEFjdGl2ZUlkOiAnMDAxJyxcbiAgICAgIHBhcmVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcwMDEnLFxuICAgICAgICAgIHRlc3RUZXh0OiAnYWxwaGEnLFxuICAgICAgICAgIGNoaWxkOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnMDAxJyxcbiAgICAgICAgICAgICAgdGVzdFRleHQ6ICdicmF2bydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IENISUxEX01BU1RFUl9QQUdFID0ge1xuICAgICAgaWQ6ICdjaGlsZFBhZ2UnLFxuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICBuYW1lOiAncGFyZW50LmNoaWxkJyxcbiAgICAgICAgbWFzdGVyUGFnZTogdHJ1ZSxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuICAgICAgICAgIGl0ZW06ICdDaGlsZCBudW1iZXIgJHtpbmRleH0nXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY2hhbmdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3JlbW92ZScsXG4gICAgICAgICAgICBsYWJlbDogJ2N1c3RvbSByZW1vdmUgbGFiZWwnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjaGlsZFBhZ2UnLFxuICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgIG5hbWU6ICdwYXJlbnQuY2hpbGQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICBURVhUX0NPTVBcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIGNvbnN0IFBBUkVOVF9NQVNURVJfUEFHRSA9IHtcbiAgICAgIGlkOiAncGFyZW50UGFnZScsXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIG5hbWU6ICdwYXJlbnQnLFxuICAgICAgICBtYXN0ZXJQYWdlOiB0cnVlXG4gICAgICB9LFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdwYXJlbnRQYWdlJyxcbiAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBuYW1lOiAncGFyZW50J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgVEVYVF9DT01QXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBDSElMRF9NQVNURVJfUEFHRVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgUEFHRSA9IHsgLi4uUEFSRU5UX01BU1RFUl9QQUdFLCBmb3JtRGF0YTogQ1VTVE9NX0ZPUk1fREFUQSB9O1xuICAgIGNvbnN0IFJPV1MgPSBnZXRDWUFSb3dzRm9yQ29sbGVjdGlvblBhZ2UoUEFHRSwgbnVsbCwgbnVsbCwgQ1VTVE9NX0ZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDgpO1xuICAgIGV4cGVjdChST1dTWzBdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgIGtleTogJ1BhcmVudCdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1sxXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdJdGVtIDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbMl0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdmFsdWU6ICdhbHBoYScsXG4gICAgICBrZXk6ICdUZXN0IHRleHQnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbM10pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ2hpbGQnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbNF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAga2V5OiAnQ2hpbGQgbnVtYmVyIDEnXG4gICAgfSk7XG4gICAgZXhwZWN0KFJPV1NbNV0uYWN0aW9uLmxhYmVsKS50b0VxdWFsKCdDaGFuZ2UnKTtcbiAgICBleHBlY3QoUk9XU1s2XS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ2N1c3RvbSByZW1vdmUgbGFiZWwnKTtcbiAgICBleHBlY3QoUk9XU1s3XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ2JyYXZvJyxcbiAgICAgIGtleTogJ1Rlc3QgdGV4dCdcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgcm93cyBmb3IgdGhlIENvbGxlY3Rpb24gY29tcG9uZW50IGNvcnJlY3RseScsICgpID0+IHtcbiAgICBjb25zdCBGT1JNX0RBVEEgPSB7XG4gICAgICBjb2xsZWN0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzAxJyxcbiAgICAgICAgICB0ZXN0Q29sbGVjdGlvbjogW3t0ZXN0VGV4dDogJ2NvbGxlY3Rpb24gdmFsdWUnfV0sXG4gICAgICAgICAgb3RoZXJDb21wOiAnb25lJ1xuICAgICAgICB9XG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgQ09MTEVDVElPTl9DT01QID0ge1xuICAgICAgaWQ6ICd0ZXN0Q29sbGVjdGlvbicsXG4gICAgICBmaWVsZElkOiAndGVzdENvbGxlY3Rpb24nLFxuICAgICAgbGFiZWw6ICdUZXN0IGNvbGxlY3Rpb24nLFxuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgaXRlbTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICd0ZXN0VGV4dCcsXG4gICAgICAgICAgZmllbGRJZDogJ3Rlc3RUZXh0JyxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgbGFiZWw6ICdTb21lIG5pY2UgdGV4dCcsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzaG93X3doZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnb3RoZXJDb21wJyxcbiAgICAgICAgICBvcDogJ2VxJyxcbiAgICAgICAgICB2YWx1ZTogJ29uZSdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgTUFTVEVSX1BBR0VfV0lUSF9DT0xMRUNUSU9OID0ge1xuICAgICAgaWQ6ICdwYWdlMScsXG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuICAgICAgICAgIGl0ZW06ICdDb2xsZWN0aW9uIGVudHJ5ICR7aW5kZXh9J1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NoYW5nZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgbGFiZWw6ICdjdXN0b20gcmVtb3ZlIGxhYmVsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NoYW5nZScsXG4gICAgICAgICAgICBsYWJlbDogJ2N1c3RvbSBjaGFuZ2UgbGFiZWwnLFxuICAgICAgICAgICAgcGFnZTogJ2NvbmZpcm1EZWxldGUnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgY2hpbGRQYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdwYWdlMScsXG4gICAgICAgICAgY29sbGVjdGlvbjogeyBcbiAgICAgICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgIENPTExFQ1RJT05fQ09NUCxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgZm9ybURhdGE6IEZPUk1fREFUQVxuICAgIH07XG4gICAgY29uc3QgUk9XUyA9IGdldENZQVJvd3NGb3JDb2xsZWN0aW9uUGFnZShNQVNURVJfUEFHRV9XSVRIX0NPTExFQ1RJT04sIG51bGwsIG51bGwsIEZPUk1fREFUQSk7XG4gICAgZXhwZWN0KFJPV1MubGVuZ3RoKS50b0VxdWFsKDcpOyAvLyBUaXRsZSByb3cgKyBjb21wb25lbnQgcm93IGZvciBlYWNoIGl0ZW1cbiAgICBleHBlY3QoUk9XU1swXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICBrZXk6ICdDb2xsZWN0aW9uJ1xuICAgIH0pO1xuICAgIGV4cGVjdChST1dTWzFdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgIGtleTogJ0NvbGxlY3Rpb24gZW50cnkgMSdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1syXS5hY3Rpb24ubGFiZWwpLnRvRXF1YWwoJ0NoYW5nZScpO1xuICAgIGV4cGVjdChST1dTWzNdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIHJlbW92ZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzRdLmFjdGlvbi5sYWJlbCkudG9FcXVhbCgnY3VzdG9tIGNoYW5nZSBsYWJlbCcpO1xuICAgIGV4cGVjdChST1dTWzVdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIGtleTogJ0l0ZW0gMSdcbiAgICB9KTtcbiAgICBleHBlY3QoUk9XU1s2XSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB2YWx1ZTogJ2NvbGxlY3Rpb24gdmFsdWUnLFxuICAgICAga2V5OiAnU29tZSBuaWNlIHRleHQnXG4gICAgfSk7XG4gIH0pO1xuXG5cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUNBLElBQUFBLDRCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBd0UsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRyxRQUFBSCxDQUFBLEVBQUFJLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQVAsQ0FBQSxPQUFBTSxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBUixDQUFBLEdBQUFJLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFYLENBQUEsRUFBQUksQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQWYsQ0FBQSxhQUFBSSxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEs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
|