@ukhomeoffice/cop-react-form-renderer 7.3.2-alpha.5 → 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.
Files changed (761) hide show
  1. package/README.md +106 -32
  2. package/dist/components/CheckYourAnswers/Answer.d.ts +10 -0
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.d.ts +35 -0
  4. package/dist/components/CheckYourAnswers/index.d.ts +2 -0
  5. package/dist/components/CollectionPage/CollectionPage.d.ts +24 -0
  6. package/dist/components/CollectionPage/index.d.ts +1 -0
  7. package/dist/components/CollectionSummary/BannerStrip.d.ts +9 -0
  8. package/dist/components/CollectionSummary/CollectionSummary.d.ts +53 -0
  9. package/dist/components/CollectionSummary/Confirmation.d.ts +15 -0
  10. package/dist/components/CollectionSummary/RenderListView.d.ts +42 -0
  11. package/dist/components/CollectionSummary/SummaryCard.d.ts +62 -0
  12. package/dist/components/CollectionSummary/SummaryCardButtons.d.ts +21 -0
  13. package/dist/components/CollectionSummary/SummaryCardDetails.d.ts +14 -0
  14. package/dist/components/CollectionSummary/SummaryCardValidationContext.d.ts +9 -0
  15. package/dist/components/CollectionSummary/index.d.ts +2 -0
  16. package/dist/components/FormComponent/Collection.d.ts +39 -0
  17. package/dist/components/FormComponent/Container.d.ts +26 -0
  18. package/dist/components/FormComponent/FormComponent.d.ts +39 -0
  19. package/dist/components/FormComponent/helpers/addLabel.d.ts +7 -0
  20. package/dist/components/FormComponent/helpers/getComponentDisabled.d.ts +2 -0
  21. package/dist/components/FormComponent/helpers/getComponentError.d.ts +4 -0
  22. package/dist/components/FormComponent/helpers/getComponentFieldSet.d.ts +2 -0
  23. package/dist/components/FormComponent/helpers/index.d.ts +5 -0
  24. package/dist/components/FormComponent/index.d.ts +2 -0
  25. package/dist/components/FormPage/FormPage.d.ts +36 -0
  26. package/dist/components/FormPage/index.d.ts +2 -0
  27. package/dist/components/FormRenderer/FormRenderer.d.ts +39 -0
  28. package/dist/components/FormRenderer/handlers/cyaAction.d.ts +9 -0
  29. package/dist/components/FormRenderer/handlers/getPageId.d.ts +8 -0
  30. package/dist/components/FormRenderer/handlers/index.d.ts +6 -0
  31. package/dist/components/FormRenderer/handlers/navigate.d.ts +10 -0
  32. package/dist/components/FormRenderer/handlers/submissionError.d.ts +7 -0
  33. package/dist/components/FormRenderer/helpers/canActionProceed.d.ts +12 -0
  34. package/dist/components/FormRenderer/helpers/canCYASubmit.d.ts +10 -0
  35. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.d.ts +2 -0
  36. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.d.ts +51 -0
  37. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.d.ts +179 -0
  38. package/dist/components/FormRenderer/helpers/getCYA.d.ts +20 -0
  39. package/dist/components/FormRenderer/helpers/getFormState.d.ts +25 -0
  40. package/dist/components/FormRenderer/helpers/getNextPageId.d.ts +2 -0
  41. package/dist/components/FormRenderer/helpers/getPage.d.ts +9 -0
  42. package/dist/components/FormRenderer/helpers/getRelevantPages.d.ts +2 -0
  43. package/dist/components/FormRenderer/helpers/getSubmissionStatus.d.ts +2 -0
  44. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.d.ts +10 -0
  45. package/dist/components/FormRenderer/helpers/index.d.ts +29 -0
  46. package/dist/components/FormRenderer/index.d.ts +2 -0
  47. package/dist/components/FormRenderer/onCYAAction.d.ts +6 -0
  48. package/dist/components/FormRenderer/onPageAction.d.ts +2 -0
  49. package/dist/components/FormRenderer/onTaskAction.d.ts +2 -0
  50. package/dist/components/PageActions/ActionButton.d.ts +7 -0
  51. package/dist/components/PageActions/PageActions.d.ts +7 -0
  52. package/dist/components/PageActions/index.d.ts +2 -0
  53. package/dist/components/SummaryList/GroupAction.d.ts +12 -0
  54. package/dist/components/SummaryList/RowAction.d.ts +12 -0
  55. package/dist/components/SummaryList/SummaryList.d.ts +28 -0
  56. package/dist/components/SummaryList/SummaryList.stories.d.ts +10 -0
  57. package/dist/components/SummaryList/SummaryListHeadingRow.d.ts +7 -0
  58. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.d.ts +16 -0
  59. package/dist/components/SummaryList/SummaryListRow.d.ts +19 -0
  60. package/dist/components/SummaryList/SummaryListTitleRow.d.ts +7 -0
  61. package/dist/components/SummaryList/helpers/getGroupActionAttributes.d.ts +17 -0
  62. package/dist/components/SummaryList/helpers/getRowActionAttributes.d.ts +17 -0
  63. package/dist/components/SummaryList/helpers/index.d.ts +2 -0
  64. package/dist/components/SummaryList/index.d.ts +2 -0
  65. package/dist/components/TaskList/Task.d.ts +12 -0
  66. package/dist/components/TaskList/TaskList.d.ts +40 -0
  67. package/dist/components/TaskList/TaskState.d.ts +6 -0
  68. package/dist/components/TaskList/index.d.ts +2 -0
  69. package/dist/components/index.d.ts +8 -0
  70. package/dist/context/HooksContext/HooksContext.d.ts +23 -0
  71. package/dist/context/HooksContext/index.d.ts +3 -0
  72. package/dist/context/ValidationContext/ValidationContext.d.ts +7 -0
  73. package/dist/context/ValidationContext/index.d.ts +3 -0
  74. package/dist/context/index.d.ts +3 -0
  75. package/dist/hooks/index.d.ts +6 -0
  76. package/dist/hooks/useAxios.d.ts +2 -0
  77. package/dist/hooks/useGetRequest.d.ts +12 -0
  78. package/dist/hooks/useHooks.d.ts +2 -0
  79. package/dist/hooks/useRefData.d.ts +7 -0
  80. package/dist/hooks/useValidation.d.ts +2 -0
  81. package/dist/index.cjs +5 -0
  82. package/dist/index.css +1 -0
  83. package/dist/index.d.ts +6 -0
  84. package/dist/index.js +6124 -81
  85. package/dist/models/CollectionLabels.d.ts +7 -0
  86. package/dist/models/ComponentTypes.d.ts +27 -0
  87. package/dist/models/EventTypes.d.ts +6 -0
  88. package/dist/models/FormPages.d.ts +6 -0
  89. package/dist/models/FormTypes.d.ts +10 -0
  90. package/dist/models/HubFormats.d.ts +5 -0
  91. package/dist/models/PageAction.d.ts +89 -0
  92. package/dist/models/TaskStates.d.ts +39 -0
  93. package/dist/models/index.d.ts +143 -0
  94. package/dist/setupTests.d.ts +14 -0
  95. package/dist/utils/CheckYourAnswers/getCYAAction.d.ts +20 -0
  96. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.d.ts +22 -0
  97. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.d.ts +22 -0
  98. package/dist/utils/CheckYourAnswers/getCYARow.d.ts +26 -0
  99. package/dist/utils/CheckYourAnswers/getCYARowForGroup.d.ts +17 -0
  100. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.d.ts +2 -0
  101. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.d.ts +23 -0
  102. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.d.ts +2 -0
  103. package/dist/utils/CheckYourAnswers/getCYARowsForPage.d.ts +11 -0
  104. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.d.ts +3 -0
  105. package/dist/utils/CheckYourAnswers/index.d.ts +5 -0
  106. package/dist/utils/CheckYourAnswers/showComponentCYA.d.ts +11 -0
  107. package/dist/utils/CollectionPage/addCollectionPageEntry.d.ts +12 -0
  108. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.d.ts +13 -0
  109. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.d.ts +13 -0
  110. package/dist/utils/CollectionPage/getCollectionPageActiveId.d.ts +14 -0
  111. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.d.ts +15 -0
  112. package/dist/utils/CollectionPage/getCollectionPageData.d.ts +15 -0
  113. package/dist/utils/CollectionPage/getErrorsForCollection.d.ts +2 -0
  114. package/dist/utils/CollectionPage/getQuickEditPage.d.ts +40 -0
  115. package/dist/utils/CollectionPage/index.d.ts +13 -0
  116. package/dist/utils/CollectionPage/mergeCollectionPages.d.ts +13 -0
  117. package/dist/utils/CollectionPage/removeCollectionPageEntry.d.ts +11 -0
  118. package/dist/utils/CollectionPage/setCollectionPageData.d.ts +16 -0
  119. package/dist/utils/Component/addShowWhen.d.ts +13 -0
  120. package/dist/utils/Component/applyToComponentTree.d.ts +15 -0
  121. package/dist/utils/Component/cleanAttributes.d.ts +14 -0
  122. package/dist/utils/Component/elevateNestedComponents.d.ts +28 -0
  123. package/dist/utils/Component/getDefaultValue.d.ts +2 -0
  124. package/dist/utils/Component/getDefaultValueFromConfig.d.ts +2 -0
  125. package/dist/utils/Component/index.d.ts +12 -0
  126. package/dist/utils/Component/isEditable.d.ts +3 -0
  127. package/dist/utils/Component/optionIsSelected.d.ts +10 -0
  128. package/dist/utils/Component/setupContainerComponentsPath.d.ts +2 -0
  129. package/dist/utils/Component/showComponent.d.ts +2 -0
  130. package/dist/utils/Condition/index.d.ts +6 -0
  131. package/dist/utils/Condition/meetsAllConditions.d.ts +8 -0
  132. package/dist/utils/Condition/meetsCondition.d.ts +14 -0
  133. package/dist/utils/Condition/meetsOneCondition.d.ts +8 -0
  134. package/dist/utils/Condition/setupConditions.d.ts +2 -0
  135. package/dist/utils/Container/getEditableComponents.d.ts +7 -0
  136. package/dist/utils/Container/index.d.ts +6 -0
  137. package/dist/utils/Container/setupNesting.d.ts +2 -0
  138. package/dist/utils/Container/showContainer.d.ts +8 -0
  139. package/dist/utils/Data/applyFormula.d.ts +2 -0
  140. package/dist/utils/Data/deleteValues.d.ts +8 -0
  141. package/dist/utils/Data/getAutocompleteSource.d.ts +2 -0
  142. package/dist/utils/Data/getDataPath.d.ts +21 -0
  143. package/dist/utils/Data/getOptions.d.ts +2 -0
  144. package/dist/utils/Data/getSourceData.d.ts +17 -0
  145. package/dist/utils/Data/index.d.ts +15 -0
  146. package/dist/utils/Data/nestInRefdataOptions.d.ts +10 -0
  147. package/dist/utils/Data/refDataToOptions.d.ts +8 -0
  148. package/dist/utils/Data/setDataItem.d.ts +2 -0
  149. package/dist/utils/Data/setupFormData.d.ts +15 -0
  150. package/dist/utils/Data/setupRefDataUrlForComponent.d.ts +2 -0
  151. package/dist/utils/FormPage/applyConditionalProperties.d.ts +8 -0
  152. package/dist/utils/FormPage/getConditionalText.d.ts +23 -0
  153. package/dist/utils/FormPage/getFormPage.d.ts +9 -0
  154. package/dist/utils/FormPage/getFormPages.d.ts +9 -0
  155. package/dist/utils/FormPage/getPageActions.d.ts +13 -0
  156. package/dist/utils/FormPage/getParagraphFromText.d.ts +11 -0
  157. package/dist/utils/FormPage/index.d.ts +10 -0
  158. package/dist/utils/FormPage/showFormPage.d.ts +8 -0
  159. package/dist/utils/FormPage/showFormPageCYA.d.ts +8 -0
  160. package/dist/utils/FormPage/useComponent.d.ts +9 -0
  161. package/dist/utils/Format/formatData.d.ts +8 -0
  162. package/dist/utils/Format/formatDataForComponent.d.ts +15 -0
  163. package/dist/utils/Format/formatDataForForm.d.ts +8 -0
  164. package/dist/utils/Format/formatDataForPage.d.ts +15 -0
  165. package/dist/utils/Format/index.d.ts +7 -0
  166. package/dist/utils/Hub/getFormHub.d.ts +15 -0
  167. package/dist/utils/Hub/index.d.ts +4 -0
  168. package/dist/utils/Meta/constants.d.ts +2 -0
  169. package/dist/utils/Meta/documents/getDocuments.d.ts +2 -0
  170. package/dist/utils/Meta/documents/index.d.ts +6 -0
  171. package/dist/utils/Meta/documents/setDocumentsForField.d.ts +2 -0
  172. package/dist/utils/Meta/index.d.ts +9 -0
  173. package/dist/utils/Operate/checkValueIsTruthy.d.ts +9 -0
  174. package/dist/utils/Operate/deleteValueInFormData.d.ts +8 -0
  175. package/dist/utils/Operate/doesContainValue.d.ts +11 -0
  176. package/dist/utils/Operate/getFirstOf.d.ts +2 -0
  177. package/dist/utils/Operate/getIndexOfMatchingValueIn.d.ts +11 -0
  178. package/dist/utils/Operate/getLength.d.ts +11 -0
  179. package/dist/utils/Operate/index.d.ts +4 -0
  180. package/dist/utils/Operate/persistValueInFormData.d.ts +9 -0
  181. package/dist/utils/Operate/runPageOperations.d.ts +19 -0
  182. package/dist/utils/Operate/setValueInFormData.d.ts +2 -0
  183. package/dist/utils/Operate/shouldRun.d.ts +9 -0
  184. package/dist/utils/Validate/additional/conditionallyPermittedChange.d.ts +14 -0
  185. package/dist/utils/Validate/additional/conditionallyRequired.d.ts +11 -0
  186. package/dist/utils/Validate/additional/index.d.ts +2 -0
  187. package/dist/utils/Validate/additional/mustBeAfter.d.ts +14 -0
  188. package/dist/utils/Validate/additional/mustBeBefore.d.ts +14 -0
  189. package/dist/utils/Validate/additional/mustBeEarlierDateTime.d.ts +15 -0
  190. package/dist/utils/Validate/additional/mustBeGreaterThan.d.ts +7 -0
  191. package/dist/utils/Validate/additional/mustBeInTheFuture.d.ts +8 -0
  192. package/dist/utils/Validate/additional/mustBeInThePast.d.ts +9 -0
  193. package/dist/utils/Validate/additional/mustBeLessThan.d.ts +7 -0
  194. package/dist/utils/Validate/additional/mustBeLongerThan.d.ts +9 -0
  195. package/dist/utils/Validate/additional/mustBeNumbersOnly.d.ts +9 -0
  196. package/dist/utils/Validate/additional/mustBeOneOf.d.ts +8 -0
  197. package/dist/utils/Validate/additional/mustBeShorterThan.d.ts +9 -0
  198. package/dist/utils/Validate/additional/mustBeUniqueInCollection.d.ts +10 -0
  199. package/dist/utils/Validate/additional/mustEnterAtLeastOne.d.ts +9 -0
  200. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.d.ts +7 -0
  201. package/dist/utils/Validate/additional/mustNotContainSql.d.ts +2 -0
  202. package/dist/utils/Validate/additional/mustSelectOnlyOne.d.ts +8 -0
  203. package/dist/utils/Validate/additional/utils.d.ts +4 -0
  204. package/dist/utils/Validate/index.d.ts +42 -0
  205. package/dist/utils/Validate/validateCollection.d.ts +9 -0
  206. package/dist/utils/Validate/validateComponent.d.ts +16 -0
  207. package/dist/utils/Validate/validateContainer.d.ts +12 -0
  208. package/dist/utils/Validate/validateDate.d.ts +29 -0
  209. package/dist/utils/Validate/validateEmail.d.ts +13 -0
  210. package/dist/utils/Validate/validateMultifile.d.ts +3 -0
  211. package/dist/utils/Validate/validateOnPageLoad.d.ts +1 -0
  212. package/dist/utils/Validate/validatePage.d.ts +8 -0
  213. package/dist/utils/Validate/validateRegex.d.ts +13 -0
  214. package/dist/utils/Validate/validateRequired.d.ts +9 -0
  215. package/dist/utils/Validate/validateTextArea.d.ts +13 -0
  216. package/dist/utils/Validate/validateTime.d.ts +20 -0
  217. package/dist/utils/canOverrideFieldRequired.d.ts +9 -0
  218. package/dist/utils/index.d.ts +140 -0
  219. package/package.json +81 -170
  220. package/LICENCE.md +0 -21
  221. package/dist/components/CheckYourAnswers/Answer.js +0 -59
  222. package/dist/components/CheckYourAnswers/Answer.test.js +0 -142
  223. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +0 -252
  224. package/dist/components/CheckYourAnswers/CheckYourAnswers.scss +0 -43
  225. package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +0 -409
  226. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +0 -603
  227. package/dist/components/CheckYourAnswers/index.js +0 -10
  228. package/dist/components/CollectionPage/CollectionPage.js +0 -178
  229. package/dist/components/CollectionPage/CollectionPage.test.js +0 -507
  230. package/dist/components/CollectionPage/index.js +0 -10
  231. package/dist/components/CollectionSummary/BannerStrip.js +0 -65
  232. package/dist/components/CollectionSummary/BannerStrip.scss +0 -60
  233. package/dist/components/CollectionSummary/BannerStrip.test.js +0 -167
  234. package/dist/components/CollectionSummary/CollectionSummary.js +0 -362
  235. package/dist/components/CollectionSummary/CollectionSummary.scss +0 -26
  236. package/dist/components/CollectionSummary/CollectionSummary.test.js +0 -368
  237. package/dist/components/CollectionSummary/Confirmation.js +0 -65
  238. package/dist/components/CollectionSummary/Confirmation.scss +0 -26
  239. package/dist/components/CollectionSummary/Confirmation.test.js +0 -109
  240. package/dist/components/CollectionSummary/RenderListView.js +0 -162
  241. package/dist/components/CollectionSummary/RenderListView.scss +0 -295
  242. package/dist/components/CollectionSummary/RenderListView.test.js +0 -303
  243. package/dist/components/CollectionSummary/SummaryCard.js +0 -277
  244. package/dist/components/CollectionSummary/SummaryCard.scss +0 -114
  245. package/dist/components/CollectionSummary/SummaryCard.test.js +0 -1442
  246. package/dist/components/CollectionSummary/SummaryCardButtons.js +0 -76
  247. package/dist/components/CollectionSummary/SummaryCardButtons.test.js +0 -87
  248. package/dist/components/CollectionSummary/SummaryCardDetails.js +0 -206
  249. package/dist/components/CollectionSummary/SummaryCardDetails.scss +0 -216
  250. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +0 -654
  251. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +0 -79
  252. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +0 -104
  253. package/dist/components/CollectionSummary/index.js +0 -10
  254. package/dist/components/FormComponent/Collection.js +0 -234
  255. package/dist/components/FormComponent/Collection.scss +0 -24
  256. package/dist/components/FormComponent/Collection.test.js +0 -934
  257. package/dist/components/FormComponent/Container.js +0 -130
  258. package/dist/components/FormComponent/Container.scss +0 -15
  259. package/dist/components/FormComponent/Container.test.js +0 -456
  260. package/dist/components/FormComponent/FormComponent.js +0 -238
  261. package/dist/components/FormComponent/FormComponent.stories.mdx +0 -186
  262. package/dist/components/FormComponent/FormComponent.test.js +0 -436
  263. package/dist/components/FormComponent/helpers/addLabel.js +0 -25
  264. package/dist/components/FormComponent/helpers/getComponentDisabled.js +0 -15
  265. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +0 -27
  266. package/dist/components/FormComponent/helpers/getComponentError.js +0 -23
  267. package/dist/components/FormComponent/helpers/getComponentError.test.js +0 -51
  268. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +0 -11
  269. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +0 -30
  270. package/dist/components/FormComponent/helpers/index.js +0 -35
  271. package/dist/components/FormComponent/index.js +0 -10
  272. package/dist/components/FormPage/FormPage.js +0 -212
  273. package/dist/components/FormPage/FormPage.scss +0 -7
  274. package/dist/components/FormPage/FormPage.stories.mdx +0 -157
  275. package/dist/components/FormPage/FormPage.test.js +0 -454
  276. package/dist/components/FormPage/index.js +0 -10
  277. package/dist/components/FormRenderer/FormRenderer.js +0 -426
  278. package/dist/components/FormRenderer/FormRenderer.scss +0 -5
  279. package/dist/components/FormRenderer/FormRenderer.stories.mdx +0 -178
  280. package/dist/components/FormRenderer/FormRenderer.test.js +0 -799
  281. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/cop-reassign-task-to-rcc.json +0 -446
  282. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +0 -120
  283. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +0 -113
  284. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +0 -106
  285. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +0 -106
  286. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +0 -99
  287. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +0 -106
  288. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +0 -113
  289. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +0 -26408
  290. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +0 -9405
  291. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +0 -158
  292. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +0 -86
  293. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +0 -173
  294. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +0 -202
  295. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +0 -63
  296. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions-visible-elsewhere.json +0 -118
  297. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +0 -112
  298. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +0 -58
  299. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +0 -97
  300. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +0 -83
  301. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +0 -55
  302. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-entire-collection.json +0 -114
  303. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +0 -106
  304. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +0 -106
  305. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +0 -99
  306. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +0 -128
  307. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +0 -109
  308. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +0 -62
  309. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +0 -96
  310. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option-visible-elsewhere.json +0 -113
  311. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +0 -112
  312. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-component.json +0 -26003
  313. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-radio-component.json +0 -201
  314. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +0 -75
  315. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-variance-breach.json +0 -4272
  316. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-carrier.json +0 -407
  317. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +0 -300
  318. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +0 -384
  319. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +0 -140
  320. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +0 -186
  321. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +0 -143
  322. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-variance-breach-with-upload-files.json +0 -1264
  323. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +0 -11
  324. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +0 -10
  325. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +0 -9
  326. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +0 -11
  327. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +0 -9
  328. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +0 -9
  329. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +0 -9
  330. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +0 -26
  331. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +0 -15
  332. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +0 -25
  333. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +0 -26
  334. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +0 -6
  335. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions-visible-elsewhere.json +0 -12
  336. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +0 -12
  337. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +0 -5
  338. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +0 -11
  339. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +0 -15
  340. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +0 -5
  341. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-entire-collection.json +0 -20
  342. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +0 -14
  343. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +0 -14
  344. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +0 -10
  345. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +0 -18
  346. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +0 -9
  347. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +0 -6
  348. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +0 -9
  349. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option-visible-elsewhere.json +0 -12
  350. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +0 -12
  351. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-component.json +0 -63
  352. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-radio-component.json +0 -45
  353. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +0 -8
  354. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/reassign-to-rcc.json +0 -72
  355. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +0 -280
  356. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +0 -355
  357. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +0 -80
  358. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +0 -122
  359. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +0 -86
  360. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +0 -127
  361. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +0 -11
  362. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +0 -7
  363. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +0 -7
  364. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +0 -7
  365. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +0 -7
  366. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +0 -6
  367. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +0 -6
  368. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +0 -23
  369. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +0 -4
  370. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +0 -21
  371. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +0 -6
  372. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +0 -4
  373. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +0 -5
  374. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +0 -10
  375. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-visible-elsewhere-removed.json +0 -11
  376. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +0 -10
  377. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +0 -4
  378. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +0 -4
  379. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-entire-collection-removed.json +0 -3
  380. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +0 -13
  381. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +0 -10
  382. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +0 -8
  383. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +0 -15
  384. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +0 -5
  385. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +0 -4
  386. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +0 -5
  387. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +0 -11
  388. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-visible-elsewhere-removed.json +0 -12
  389. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-component.json +0 -63
  390. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-radio-component-removed.json +0 -45
  391. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +0 -7
  392. package/dist/components/FormRenderer/handlers/cyaAction.js +0 -23
  393. package/dist/components/FormRenderer/handlers/getPageId.js +0 -15
  394. package/dist/components/FormRenderer/handlers/getPageId.test.js +0 -35
  395. package/dist/components/FormRenderer/handlers/handlers.test.js +0 -81
  396. package/dist/components/FormRenderer/handlers/index.js +0 -17
  397. package/dist/components/FormRenderer/handlers/navigate.js +0 -25
  398. package/dist/components/FormRenderer/handlers/submissionError.js +0 -18
  399. package/dist/components/FormRenderer/helpers/canActionProceed.js +0 -27
  400. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +0 -84
  401. package/dist/components/FormRenderer/helpers/canCYASubmit.js +0 -17
  402. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +0 -75
  403. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +0 -63
  404. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +0 -191
  405. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -338
  406. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -434
  407. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +0 -399
  408. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +0 -559
  409. package/dist/components/FormRenderer/helpers/getCYA.js +0 -42
  410. package/dist/components/FormRenderer/helpers/getCYA.test.js +0 -46
  411. package/dist/components/FormRenderer/helpers/getFormState.js +0 -25
  412. package/dist/components/FormRenderer/helpers/getFormState.test.js +0 -60
  413. package/dist/components/FormRenderer/helpers/getNextPageId.js +0 -76
  414. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +0 -292
  415. package/dist/components/FormRenderer/helpers/getPage.js +0 -27
  416. package/dist/components/FormRenderer/helpers/getPage.test.js +0 -45
  417. package/dist/components/FormRenderer/helpers/getRelevantPages.js +0 -27
  418. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +0 -70
  419. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +0 -65
  420. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +0 -309
  421. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +0 -201
  422. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +0 -473
  423. package/dist/components/FormRenderer/helpers/index.js +0 -33
  424. package/dist/components/FormRenderer/index.js +0 -10
  425. package/dist/components/FormRenderer/onCYAAction.js +0 -150
  426. package/dist/components/FormRenderer/onCYAAction.test.js +0 -741
  427. package/dist/components/FormRenderer/onPageAction.js +0 -227
  428. package/dist/components/FormRenderer/onPageAction.test.js +0 -960
  429. package/dist/components/FormRenderer/onTaskAction.js +0 -47
  430. package/dist/components/FormRenderer/onTaskAction.test.js +0 -247
  431. package/dist/components/PageActions/ActionButton.js +0 -48
  432. package/dist/components/PageActions/ActionButton.test.js +0 -73
  433. package/dist/components/PageActions/PageActions.js +0 -37
  434. package/dist/components/PageActions/PageActions.stories.mdx +0 -74
  435. package/dist/components/PageActions/PageActions.test.js +0 -106
  436. package/dist/components/PageActions/index.js +0 -10
  437. package/dist/components/SummaryList/GroupAction.js +0 -50
  438. package/dist/components/SummaryList/GroupAction.test.js +0 -86
  439. package/dist/components/SummaryList/RowAction.js +0 -48
  440. package/dist/components/SummaryList/RowAction.test.js +0 -86
  441. package/dist/components/SummaryList/SummaryList.js +0 -128
  442. package/dist/components/SummaryList/SummaryList.scss +0 -79
  443. package/dist/components/SummaryList/SummaryList.stories.mdx +0 -84
  444. package/dist/components/SummaryList/SummaryList.test.js +0 -504
  445. package/dist/components/SummaryList/SummaryListHeadingRow.js +0 -39
  446. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +0 -65
  447. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +0 -38
  448. package/dist/components/SummaryList/SummaryListRow.js +0 -58
  449. package/dist/components/SummaryList/SummaryListTitleRow.js +0 -32
  450. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +0 -29
  451. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +0 -72
  452. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +0 -29
  453. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +0 -72
  454. package/dist/components/SummaryList/helpers/index.js +0 -14
  455. package/dist/components/SummaryList/index.js +0 -10
  456. package/dist/components/TaskList/Task.js +0 -62
  457. package/dist/components/TaskList/Task.test.js +0 -176
  458. package/dist/components/TaskList/TaskList.js +0 -175
  459. package/dist/components/TaskList/TaskList.scss +0 -123
  460. package/dist/components/TaskList/TaskList.stories.mdx +0 -164
  461. package/dist/components/TaskList/TaskList.test.js +0 -535
  462. package/dist/components/TaskList/TaskState.js +0 -37
  463. package/dist/components/TaskList/TaskState.test.js +0 -95
  464. package/dist/components/TaskList/index.js +0 -10
  465. package/dist/components/index.js +0 -56
  466. package/dist/context/HooksContext/HooksContext.js +0 -122
  467. package/dist/context/HooksContext/HooksContext.test.js +0 -45
  468. package/dist/context/HooksContext/index.js +0 -16
  469. package/dist/context/ValidationContext/ValidationContext.js +0 -98
  470. package/dist/context/ValidationContext/ValidationContext.test.js +0 -107
  471. package/dist/context/ValidationContext/index.js +0 -16
  472. package/dist/context/index.js +0 -21
  473. package/dist/hooks/index.js +0 -55
  474. package/dist/hooks/useAxios.js +0 -36
  475. package/dist/hooks/useGetRequest.js +0 -89
  476. package/dist/hooks/useHooks.js +0 -15
  477. package/dist/hooks/useRefData.js +0 -62
  478. package/dist/hooks/useValidation.js +0 -15
  479. package/dist/json/actions.json +0 -17
  480. package/dist/json/actionsNoSave.json +0 -17
  481. package/dist/json/addressDetails.json +0 -149
  482. package/dist/json/areYouACivilServant.json +0 -7
  483. package/dist/json/firstForm.json +0 -94
  484. package/dist/json/grade.json +0 -108
  485. package/dist/json/group.data.json +0 -21
  486. package/dist/json/group.json +0 -402
  487. package/dist/json/groupOfRow.json +0 -137
  488. package/dist/json/groupOfRowData.json +0 -15
  489. package/dist/json/port.json +0 -346
  490. package/dist/json/saveAndContinue.json +0 -98
  491. package/dist/json/sublocation.json +0 -859
  492. package/dist/json/taskList.json +0 -265
  493. package/dist/json/team.json +0 -17351
  494. package/dist/json/terminal.json +0 -81
  495. package/dist/json/userProfile.data.json +0 -21
  496. package/dist/json/userProfile.json +0 -276
  497. package/dist/models/CollectionLabels.js +0 -15
  498. package/dist/models/ComponentTypes.js +0 -58
  499. package/dist/models/EventTypes.js +0 -16
  500. package/dist/models/FormPages.js +0 -16
  501. package/dist/models/FormTypes.js +0 -24
  502. package/dist/models/HubFormats.js +0 -14
  503. package/dist/models/PageAction.js +0 -65
  504. package/dist/models/TaskStates.js +0 -46
  505. package/dist/models/index.js +0 -77
  506. package/dist/setupTests.js +0 -54
  507. package/dist/utils/CheckYourAnswers/getCYAAction.js +0 -44
  508. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +0 -120
  509. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +0 -57
  510. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +0 -162
  511. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +0 -66
  512. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +0 -198
  513. package/dist/utils/CheckYourAnswers/getCYARow.js +0 -58
  514. package/dist/utils/CheckYourAnswers/getCYARow.test.js +0 -373
  515. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +0 -69
  516. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +0 -70
  517. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +0 -71
  518. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +0 -285
  519. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +0 -237
  520. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +0 -844
  521. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +0 -45
  522. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +0 -535
  523. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +0 -72
  524. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +0 -343
  525. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +0 -42
  526. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +0 -56
  527. package/dist/utils/CheckYourAnswers/index.js +0 -15
  528. package/dist/utils/CheckYourAnswers/showComponentCYA.js +0 -53
  529. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +0 -149
  530. package/dist/utils/CollectionPage/addCollectionPageEntry.js +0 -23
  531. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +0 -17
  532. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +0 -26
  533. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +0 -70
  534. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +0 -51
  535. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +0 -125
  536. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +0 -24
  537. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +0 -26
  538. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +0 -44
  539. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +0 -88
  540. package/dist/utils/CollectionPage/getCollectionPageData.js +0 -53
  541. package/dist/utils/CollectionPage/getCollectionPageData.test.js +0 -103
  542. package/dist/utils/CollectionPage/getErrorsForCollection.js +0 -55
  543. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +0 -154
  544. package/dist/utils/CollectionPage/getQuickEditPage.js +0 -122
  545. package/dist/utils/CollectionPage/getQuickEditPage.test.js +0 -143
  546. package/dist/utils/CollectionPage/index.js +0 -33
  547. package/dist/utils/CollectionPage/mergeCollectionPages.js +0 -128
  548. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +0 -198
  549. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +0 -36
  550. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +0 -62
  551. package/dist/utils/CollectionPage/setCollectionPageData.js +0 -60
  552. package/dist/utils/CollectionPage/setCollectionPageData.test.js +0 -182
  553. package/dist/utils/Component/addShowWhen.js +0 -43
  554. package/dist/utils/Component/addShowWhen.test.js +0 -217
  555. package/dist/utils/Component/applyToComponentTree.js +0 -68
  556. package/dist/utils/Component/applyToComponentTree.test.js +0 -125
  557. package/dist/utils/Component/cleanAttributes.js +0 -42
  558. package/dist/utils/Component/cleanAttributes.test.js +0 -67
  559. package/dist/utils/Component/elevateNestedComponents.js +0 -58
  560. package/dist/utils/Component/elevateNestedComponents.test.js +0 -305
  561. package/dist/utils/Component/getComponent.js +0 -305
  562. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +0 -73
  563. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +0 -251
  564. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +0 -156
  565. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +0 -104
  566. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +0 -56
  567. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +0 -60
  568. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +0 -60
  569. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +0 -31
  570. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +0 -42
  571. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +0 -29
  572. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +0 -47
  573. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +0 -66
  574. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +0 -211
  575. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +0 -46
  576. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +0 -60
  577. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +0 -221
  578. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +0 -62
  579. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +0 -60
  580. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +0 -104
  581. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +0 -80
  582. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +0 -14
  583. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +0 -29
  584. package/dist/utils/Component/getDefaultValue.js +0 -22
  585. package/dist/utils/Component/getDefaultValue.test.js +0 -62
  586. package/dist/utils/Component/getDefaultValueFromConfig.js +0 -106
  587. package/dist/utils/Component/getDefaultValueFromConfig.test.js +0 -141
  588. package/dist/utils/Component/index.js +0 -29
  589. package/dist/utils/Component/isEditable.js +0 -13
  590. package/dist/utils/Component/isEditable.test.js +0 -42
  591. package/dist/utils/Component/optionIsSelected.js +0 -25
  592. package/dist/utils/Component/optionIsSelected.test.js +0 -69
  593. package/dist/utils/Component/setupContainerComponentsPath.js +0 -35
  594. package/dist/utils/Component/setupContainerComponentsPath.test.js +0 -79
  595. package/dist/utils/Component/showComponent.js +0 -25
  596. package/dist/utils/Component/showComponent.test.js +0 -157
  597. package/dist/utils/Component/wrapInFormGroup.js +0 -26
  598. package/dist/utils/Condition/index.js +0 -17
  599. package/dist/utils/Condition/meetsAllConditions.js +0 -44
  600. package/dist/utils/Condition/meetsAllConditions.test.js +0 -109
  601. package/dist/utils/Condition/meetsCondition.js +0 -165
  602. package/dist/utils/Condition/meetsCondition.test.js +0 -899
  603. package/dist/utils/Condition/meetsOneCondition.js +0 -32
  604. package/dist/utils/Condition/meetsOneCondition.test.js +0 -101
  605. package/dist/utils/Condition/setupConditions.js +0 -36
  606. package/dist/utils/Condition/setupConditions.test.js +0 -34
  607. package/dist/utils/Container/getEditableComponents.js +0 -29
  608. package/dist/utils/Container/getEditableComponents.test.js +0 -134
  609. package/dist/utils/Container/index.js +0 -17
  610. package/dist/utils/Container/setupNesting.js +0 -53
  611. package/dist/utils/Container/setupNesting.test.js +0 -143
  612. package/dist/utils/Container/showContainer.js +0 -52
  613. package/dist/utils/Container/showContainer.test.js +0 -179
  614. package/dist/utils/Data/applyFormula.js +0 -90
  615. package/dist/utils/Data/applyFormula.test.js +0 -264
  616. package/dist/utils/Data/deleteValues.js +0 -19
  617. package/dist/utils/Data/deleteValues.test.js +0 -58
  618. package/dist/utils/Data/getAutocompleteSource.js +0 -87
  619. package/dist/utils/Data/getAutocompleteSource.test.js +0 -335
  620. package/dist/utils/Data/getDataPath.js +0 -66
  621. package/dist/utils/Data/getDataPath.test.js +0 -49
  622. package/dist/utils/Data/getOptions.js +0 -86
  623. package/dist/utils/Data/getOptions.test.js +0 -279
  624. package/dist/utils/Data/getSourceData.js +0 -44
  625. package/dist/utils/Data/getSourceData.test.js +0 -158
  626. package/dist/utils/Data/index.js +0 -35
  627. package/dist/utils/Data/nestInRefdataOptions.js +0 -47
  628. package/dist/utils/Data/nestInRefdataOptions.test.js +0 -237
  629. package/dist/utils/Data/refDataToOptions.js +0 -44
  630. package/dist/utils/Data/refDataToOptions.test.js +0 -197
  631. package/dist/utils/Data/setDataItem.js +0 -26
  632. package/dist/utils/Data/setDataItem.test.js +0 -136
  633. package/dist/utils/Data/setupFormData.js +0 -49
  634. package/dist/utils/Data/setupFormData.test.js +0 -215
  635. package/dist/utils/Data/setupRefDataUrlForComponent.js +0 -44
  636. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +0 -150
  637. package/dist/utils/FormPage/applyConditionalProperties.js +0 -34
  638. package/dist/utils/FormPage/applyConditionalProperties.test.js +0 -61
  639. package/dist/utils/FormPage/getConditionalText.js +0 -55
  640. package/dist/utils/FormPage/getConditionalText.test.js +0 -163
  641. package/dist/utils/FormPage/getFormPage.js +0 -54
  642. package/dist/utils/FormPage/getFormPage.test.js +0 -206
  643. package/dist/utils/FormPage/getFormPages.js +0 -30
  644. package/dist/utils/FormPage/getFormPages.test.js +0 -97
  645. package/dist/utils/FormPage/getPageActions.js +0 -58
  646. package/dist/utils/FormPage/getPageActions.test.js +0 -115
  647. package/dist/utils/FormPage/getParagraphFromText.js +0 -21
  648. package/dist/utils/FormPage/getParagraphFromText.test.js +0 -28
  649. package/dist/utils/FormPage/index.js +0 -24
  650. package/dist/utils/FormPage/showFormPage.js +0 -52
  651. package/dist/utils/FormPage/showFormPage.test.js +0 -181
  652. package/dist/utils/FormPage/showFormPageCYA.js +0 -23
  653. package/dist/utils/FormPage/showFormPageCYA.test.js +0 -29
  654. package/dist/utils/FormPage/useComponent.js +0 -83
  655. package/dist/utils/FormPage/useComponent.test.js +0 -216
  656. package/dist/utils/Format/formatData.js +0 -27
  657. package/dist/utils/Format/formatData.test.js +0 -46
  658. package/dist/utils/Format/formatDataForComponent.js +0 -35
  659. package/dist/utils/Format/formatDataForComponent.test.js +0 -114
  660. package/dist/utils/Format/formatDataForForm.js +0 -27
  661. package/dist/utils/Format/formatDataForForm.test.js +0 -79
  662. package/dist/utils/Format/formatDataForPage.js +0 -31
  663. package/dist/utils/Format/formatDataForPage.test.js +0 -94
  664. package/dist/utils/Format/index.js +0 -21
  665. package/dist/utils/Hub/getFormHub.js +0 -40
  666. package/dist/utils/Hub/getFormHub.test.js +0 -105
  667. package/dist/utils/Hub/index.js +0 -15
  668. package/dist/utils/Meta/constants.js +0 -9
  669. package/dist/utils/Meta/documents/getDocuments.js +0 -15
  670. package/dist/utils/Meta/documents/getDocuments.test.js +0 -46
  671. package/dist/utils/Meta/documents/index.js +0 -19
  672. package/dist/utils/Meta/documents/setDocumentsForField.js +0 -30
  673. package/dist/utils/Meta/documents/setDocumentsForField.test.js +0 -97
  674. package/dist/utils/Meta/index.js +0 -17
  675. package/dist/utils/Operate/checkValueIsTruthy.js +0 -29
  676. package/dist/utils/Operate/checkValueIsTruthy.test.js +0 -43
  677. package/dist/utils/Operate/deleteValueInFormData.js +0 -27
  678. package/dist/utils/Operate/deleteValueInFormData.test.js +0 -61
  679. package/dist/utils/Operate/doesContainValue.js +0 -35
  680. package/dist/utils/Operate/doesContainValue.test.js +0 -76
  681. package/dist/utils/Operate/getFirstOf.js +0 -31
  682. package/dist/utils/Operate/getFirstOf.test.js +0 -87
  683. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +0 -68
  684. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +0 -158
  685. package/dist/utils/Operate/getLength.js +0 -51
  686. package/dist/utils/Operate/getLength.test.js +0 -90
  687. package/dist/utils/Operate/index.js +0 -13
  688. package/dist/utils/Operate/persistValueInFormData.js +0 -40
  689. package/dist/utils/Operate/persistValueInFormData.test.js +0 -118
  690. package/dist/utils/Operate/runPageOperations.js +0 -75
  691. package/dist/utils/Operate/runPageOperations.test.js +0 -105
  692. package/dist/utils/Operate/setValueInFormData.js +0 -22
  693. package/dist/utils/Operate/setValueInFormData.test.js +0 -45
  694. package/dist/utils/Operate/shouldRun.js +0 -57
  695. package/dist/utils/Operate/shouldRun.test.js +0 -65
  696. package/dist/utils/Validate/additional/conditionallyPermittedChange.js +0 -26
  697. package/dist/utils/Validate/additional/conditionallyPermittedChange.test.js +0 -34
  698. package/dist/utils/Validate/additional/conditionallyRequired.js +0 -24
  699. package/dist/utils/Validate/additional/conditionallyRequired.test.js +0 -74
  700. package/dist/utils/Validate/additional/index.js +0 -74
  701. package/dist/utils/Validate/additional/index.test.js +0 -130
  702. package/dist/utils/Validate/additional/mustBeAfter.js +0 -34
  703. package/dist/utils/Validate/additional/mustBeAfter.test.js +0 -109
  704. package/dist/utils/Validate/additional/mustBeBefore.js +0 -34
  705. package/dist/utils/Validate/additional/mustBeBefore.test.js +0 -77
  706. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +0 -57
  707. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +0 -128
  708. package/dist/utils/Validate/additional/mustBeGreaterThan.js +0 -22
  709. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +0 -57
  710. package/dist/utils/Validate/additional/mustBeInTheFuture.js +0 -33
  711. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +0 -32
  712. package/dist/utils/Validate/additional/mustBeInThePast.js +0 -36
  713. package/dist/utils/Validate/additional/mustBeInThePast.test.js +0 -32
  714. package/dist/utils/Validate/additional/mustBeLessThan.js +0 -22
  715. package/dist/utils/Validate/additional/mustBeLessThan.test.js +0 -53
  716. package/dist/utils/Validate/additional/mustBeLongerThan.js +0 -23
  717. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +0 -49
  718. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +0 -24
  719. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +0 -45
  720. package/dist/utils/Validate/additional/mustBeOneOf.js +0 -22
  721. package/dist/utils/Validate/additional/mustBeOneOf.test.js +0 -37
  722. package/dist/utils/Validate/additional/mustBeShorterThan.js +0 -23
  723. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +0 -49
  724. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +0 -40
  725. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +0 -163
  726. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +0 -26
  727. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +0 -37
  728. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +0 -19
  729. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +0 -37
  730. package/dist/utils/Validate/additional/mustNotContainSql.js +0 -19
  731. package/dist/utils/Validate/additional/mustNotContainSql.test.js +0 -33
  732. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +0 -29
  733. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +0 -55
  734. package/dist/utils/Validate/additional/utils.js +0 -35
  735. package/dist/utils/Validate/index.js +0 -33
  736. package/dist/utils/Validate/validateCollection.js +0 -50
  737. package/dist/utils/Validate/validateCollection.test.js +0 -134
  738. package/dist/utils/Validate/validateComponent.js +0 -126
  739. package/dist/utils/Validate/validateComponent.test.js +0 -435
  740. package/dist/utils/Validate/validateContainer.js +0 -52
  741. package/dist/utils/Validate/validateContainer.test.js +0 -115
  742. package/dist/utils/Validate/validateDate.js +0 -112
  743. package/dist/utils/Validate/validateDate.test.js +0 -133
  744. package/dist/utils/Validate/validateEmail.js +0 -45
  745. package/dist/utils/Validate/validateEmail.test.js +0 -78
  746. package/dist/utils/Validate/validateMultifile.js +0 -29
  747. package/dist/utils/Validate/validateMultifile.test.js +0 -46
  748. package/dist/utils/Validate/validateOnPageLoad.js +0 -24
  749. package/dist/utils/Validate/validateOnPageLoad.test.js +0 -89
  750. package/dist/utils/Validate/validatePage.js +0 -56
  751. package/dist/utils/Validate/validatePage.test.js +0 -795
  752. package/dist/utils/Validate/validateRegex.js +0 -41
  753. package/dist/utils/Validate/validateRegex.test.js +0 -43
  754. package/dist/utils/Validate/validateRequired.js +0 -37
  755. package/dist/utils/Validate/validateRequired.test.js +0 -64
  756. package/dist/utils/Validate/validateTextArea.js +0 -36
  757. package/dist/utils/Validate/validateTextArea.test.js +0 -71
  758. package/dist/utils/Validate/validateTime.js +0 -76
  759. package/dist/utils/Validate/validateTime.test.js +0 -116
  760. package/dist/utils/canOverrideFieldRequired.js +0 -23
  761. package/dist/utils/index.js +0 -42
@@ -1,603 +0,0 @@
1
- "use strict";
2
-
3
- var _axios = _interopRequireDefault(require("axios"));
4
- var _axiosMockAdapter = _interopRequireDefault(require("axios-mock-adapter"));
5
- var _react = _interopRequireDefault(require("react"));
6
- var _reactDom = require("react-dom");
7
- var _testUtils = require("react-dom/test-utils");
8
- var _areYouACivilServant = _interopRequireDefault(require("../../json/areYouACivilServant.json"));
9
- var _grade = _interopRequireDefault(require("../../json/grade.json"));
10
- var _team = _interopRequireDefault(require("../../json/team.json"));
11
- var _userProfileData = _interopRequireDefault(require("../../json/userProfile.data.json"));
12
- var _userProfile = _interopRequireDefault(require("../../json/userProfile.json"));
13
- var _groupData = _interopRequireDefault(require("../../json/group.data.json"));
14
- var _group = _interopRequireDefault(require("../../json/group.json"));
15
- var _groupOfRow = _interopRequireDefault(require("../../json/groupOfRow.json"));
16
- var _actions = _interopRequireDefault(require("../../json/actions.json"));
17
- var _actionsNoSave = _interopRequireDefault(require("../../json/actionsNoSave.json"));
18
- var _models = require("../../models");
19
- var _setupTests = require("../../setupTests");
20
- var _utils = _interopRequireDefault(require("../../utils"));
21
- var _CheckYourAnswers = _interopRequireWildcard(require("./CheckYourAnswers"));
22
- var _jsxRuntime = require("react/jsx-runtime");
23
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
24
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
28
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
29
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // Global imports
30
- // Local imports
31
- describe('components', () => {
32
- describe('CheckYourAnswers', () => {
33
- const mockAxios = new _axiosMockAdapter.default(_axios.default);
34
- const DATA = _utils.default.Data.setupForm(_userProfile.default.pages, _userProfile.default.components, _userProfileData.default);
35
- const PAGES = _utils.default.FormPage.getAll(_userProfile.default.pages, _userProfile.default.components, _objectSpread({}, DATA));
36
- const ON_ROW_ACTION_CALLS = [];
37
- const ON_ROW_ACTION = row => {
38
- ON_ROW_ACTION_CALLS.push(row);
39
- };
40
- const ON_ACTION_CALLS = [];
41
- const ON_ACTION = (action, onError) => {
42
- ON_ACTION_CALLS.push({
43
- action,
44
- onError
45
- });
46
- };
47
- let container = null;
48
- const refDataUrl = suffix => "".concat(_userProfileData.default.urls.refData, "/").concat(suffix);
49
- beforeEach(() => {
50
- ON_ROW_ACTION_CALLS.length = 0;
51
- ON_ACTION_CALLS.length = 0;
52
- container = document.createElement('div');
53
- document.body.appendChild(container);
54
- mockAxios.reset();
55
- mockAxios.onGet(refDataUrl('areYouACivilServant')).reply(200, _areYouACivilServant.default);
56
- mockAxios.onGet(refDataUrl('grade')).reply(200, _grade.default);
57
- mockAxios.onGet(refDataUrl('team')).reply(200, _team.default);
58
- });
59
- afterEach(() => {
60
- (0, _reactDom.unmountComponentAtNode)(container);
61
- container.remove();
62
- container = null;
63
- });
64
- const checkCYA = cyaContainer => {
65
- const checkCYAContainer = cyaContainer;
66
- const cya = checkCYAContainer.childNodes[0];
67
- expect(cya.tagName).toEqual('DIV');
68
- expect(cya.classList).toContain(_CheckYourAnswers.DEFAULT_CLASS);
69
- return cya;
70
- };
71
- const checkRow = (row, key, value, action) => {
72
- expect(row.textContent).toContain(key);
73
- expect(row.textContent).toContain(value);
74
- if (action) {
75
- expect(row.textContent).toContain('Change');
76
- } else {
77
- expect(row.textContent).not.toContain('Change');
78
- }
79
- };
80
- it('should show default title if none is provided', async () => {
81
- await (0, _testUtils.act)(async () => {
82
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
83
- pages: PAGES,
84
- onRowAction: ON_ROW_ACTION,
85
- onAction: ON_ACTION
86
- }), container);
87
- });
88
- const cya = checkCYA(container);
89
- const title = cya.childNodes[0];
90
- expect(title.classList).toContain('govuk-heading-l');
91
- expect(title.textContent).toEqual(_CheckYourAnswers.DEFAULT_TITLE);
92
- });
93
- it('should allow title to be overridden', async () => {
94
- const TITLE = 'Alpha Bravo Charlie';
95
- await (0, _testUtils.act)(async () => {
96
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
97
- title: TITLE,
98
- pages: PAGES,
99
- onRowAction: ON_ROW_ACTION,
100
- onAction: ON_ACTION
101
- }), container);
102
- });
103
- const cya = checkCYA(container);
104
- const title = cya.childNodes[0];
105
- expect(title.classList).toContain('govuk-heading-l');
106
- expect(title.textContent).toEqual(TITLE);
107
- });
108
- it('should show readonly page components correctly', async () => {
109
- await (0, _testUtils.act)(async () => {
110
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
111
- pages: PAGES,
112
- onRowAction: ON_ROW_ACTION,
113
- onAction: ON_ACTION
114
- }), container);
115
- });
116
- const cya = checkCYA(container);
117
- const [, cyaChildNode] = cya.childNodes;
118
- const names = cyaChildNode.childNodes[0];
119
- expect(names.tagName).toEqual('DIV');
120
- expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
121
- const [firstName, surname] = names.childNodes;
122
- checkRow(firstName, 'First name', 'John', false);
123
- checkRow(surname, 'Last name', 'Smith', false);
124
- });
125
- it('should show editable page components correctly', async () => {
126
- await (0, _testUtils.act)(async () => {
127
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
128
- pages: PAGES,
129
- onRowAction: ON_ROW_ACTION,
130
- onAction: ON_ACTION
131
- }), container);
132
- });
133
- const cya = checkCYA(container);
134
- const [,, title, cyaChildNode] = cya.childNodes;
135
- const civilServant = cyaChildNode.childNodes[0];
136
- expect(title.textContent).toEqual('Are you a civil servant?');
137
- expect(civilServant.tagName).toEqual('DIV');
138
- expect(civilServant.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
139
- const [status] = civilServant.childNodes;
140
- checkRow(status, 'Are you a civil servant?', 'Yes', true);
141
- });
142
- it('should show editable page components correctly with page titles hidden', async () => {
143
- await (0, _testUtils.act)(async () => {
144
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
145
- pages: PAGES,
146
- onRowAction: ON_ROW_ACTION,
147
- onAction: ON_ACTION,
148
- hide_page_titles: true
149
- }), container);
150
- });
151
- const cya = checkCYA(container);
152
- const [,, cyaChildNode] = cya.childNodes; // The title simply isn't returned
153
- const civilServant = cyaChildNode.childNodes[0];
154
- expect(civilServant.tagName).toEqual('DIV');
155
- expect(civilServant.classList).toContain("govuk-!-margin-bottom-0"); // Changed margin if no titles
156
- const [status] = civilServant.childNodes;
157
- checkRow(status, 'Are you a civil servant?', 'Yes', true);
158
- });
159
- it('should only show change link next to the heading when the page is configured to only have a single change link', async () => {
160
- const CUSTOM_PAGES = PAGES.map(page => _objectSpread(_objectSpread({}, page), {}, {
161
- cya_link: {
162
- page: page.id,
163
- aria_suffix: 'page details',
164
- singleChangeLink: true
165
- }
166
- }));
167
- await (0, _testUtils.act)(async () => {
168
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
169
- pages: CUSTOM_PAGES,
170
- onRowAction: ON_ROW_ACTION,
171
- onAction: ON_ACTION
172
- }), container);
173
- });
174
- const cya = checkCYA(container);
175
- const [,, title, cyaChildNode] = cya.childNodes;
176
- expect(title.tagName).toEqual('DIV');
177
- expect(title.classList).toContain('heading-with-action');
178
- const titleText = title.children[0];
179
- expect(titleText.tagName).toEqual('DIV');
180
- expect(titleText.classList).toContain('heading-text');
181
- expect(titleText.textContent).toEqual('Are you a civil servant?');
182
- const titleAction = title.children[1];
183
- expect(titleAction.tagName).toEqual('DIV');
184
- expect(titleAction.classList).toContain('heading-action');
185
- expect(titleAction.textContent).toEqual("Change page details");
186
- const civilServant = cyaChildNode.childNodes[0];
187
- expect(civilServant.tagName).toEqual('DIV');
188
- const [status] = civilServant.childNodes;
189
- checkRow(status, 'Are you a civil servant?', 'Yes', false);
190
- });
191
- it('should only show change link next to the heading when the page is configured to have a single change link and form is a task list', async () => {
192
- const CUSTOM_PAGES = PAGES.map(page => _objectSpread(_objectSpread({}, page), {}, {
193
- cya_link: {
194
- page: page.id,
195
- aria_suffix: 'page details',
196
- singleChangeLink: true
197
- }
198
- }));
199
- const SECTIONS = [{
200
- name: 'These are your tasks',
201
- tasks: [{
202
- name: 'Task 1',
203
- state: 'complete',
204
- pages: ['civil-servant-status']
205
- }]
206
- }];
207
- await (0, _testUtils.act)(async () => {
208
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
209
- pages: CUSTOM_PAGES,
210
- onRowAction: ON_ROW_ACTION,
211
- onAction: ON_ACTION,
212
- hide_title: true,
213
- sections: SECTIONS,
214
- type: _models.FormTypes.TASK_CYA
215
- }), container);
216
- });
217
- const taskHeading1 = container.childNodes[0].childNodes[0];
218
- expect(taskHeading1.tagName).toEqual('H2');
219
- expect(taskHeading1.textContent).toEqual('Task 1');
220
- expect(taskHeading1.classList).toContain("govuk-heading-m");
221
- const cya = checkCYA(container);
222
- const [, title, cyaChildNode] = cya.childNodes;
223
- expect(title.tagName).toEqual('DIV');
224
- expect(title.classList).toContain('heading-with-action');
225
- const titleText = title.children[0];
226
- expect(titleText.tagName).toEqual('DIV');
227
- expect(titleText.classList).toContain('heading-text');
228
- expect(titleText.textContent).toEqual('Are you a civil servant?');
229
- const titleAction = title.children[1];
230
- expect(titleAction.tagName).toEqual('DIV');
231
- expect(titleAction.classList).toContain('heading-action');
232
- expect(titleAction.textContent).toEqual("Change page details");
233
- const civilServant = cyaChildNode.childNodes[0];
234
- expect(civilServant.tagName).toEqual('DIV');
235
- const [status] = civilServant.childNodes;
236
- checkRow(status, 'Are you a civil servant?', 'Yes', false);
237
- });
238
- it('should show no title if is set to hidden', async () => {
239
- await (0, _testUtils.act)(async () => {
240
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
241
- pages: PAGES,
242
- onRowAction: ON_ROW_ACTION,
243
- onAction: ON_ACTION,
244
- hide_title: true
245
- }), container);
246
- });
247
- const cya = checkCYA(container);
248
- const [cyaChildNode] = cya.childNodes;
249
- const names = cyaChildNode.childNodes[0];
250
- expect(names.tagName).toEqual('DIV');
251
- expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
252
- const [firstName, surname] = names.childNodes;
253
- checkRow(firstName, 'First name', 'John', false);
254
- checkRow(surname, 'Last name', 'Smith', false);
255
- });
256
- it('should show task list in CYA style', async () => {
257
- const sections = [{
258
- name: 'These are your tasks',
259
- tasks: [{
260
- name: 'Task 1',
261
- state: 'complete',
262
- pages: ['names']
263
- }, {
264
- name: 'Task 2',
265
- state: 'complete',
266
- pages: ['grade']
267
- }]
268
- }];
269
- await (0, _testUtils.act)(async () => {
270
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
271
- pages: PAGES,
272
- onRowAction: ON_ROW_ACTION,
273
- onAction: ON_ACTION,
274
- hide_title: true,
275
- sections: sections,
276
- type: "task-list-cya"
277
- }), container);
278
- });
279
- const taskHeading1 = container.childNodes[0].childNodes[0];
280
- expect(taskHeading1.tagName).toEqual('H2');
281
- expect(taskHeading1.textContent).toEqual('Task 1');
282
- expect(taskHeading1.classList).toContain("govuk-heading-m");
283
- const namesPageHeading = container.childNodes[0].childNodes[1];
284
- expect(namesPageHeading.tagName).toEqual('DIV');
285
- expect(namesPageHeading.textContent).toContain('John');
286
- expect(namesPageHeading.classList).toContain("group-of-rows");
287
- const taskHeading2 = container.childNodes[0].childNodes[2];
288
- expect(taskHeading2.tagName).toEqual('H2');
289
- expect(taskHeading2.textContent).toEqual('Task 2');
290
- expect(taskHeading2.classList).toContain("govuk-heading-m");
291
- const gradePageHeading = container.childNodes[0].childNodes[3];
292
- expect(gradePageHeading.tagName).toEqual('H3');
293
- expect(gradePageHeading.textContent).toEqual("What's your grade?");
294
- expect(gradePageHeading.classList).toContain("govuk-heading-s");
295
- });
296
- it('should show task list in CYA style and priotitise displayName over name for a task', async () => {
297
- const sections = [{
298
- name: 'These are your tasks',
299
- tasks: [{
300
- name: 'Task 1',
301
- displayName: 'Blue',
302
- state: 'complete',
303
- pages: ['names']
304
- }, {
305
- name: 'Task 2',
306
- displayName: 'Red',
307
- state: 'complete',
308
- pages: ['grade']
309
- }]
310
- }];
311
- await (0, _testUtils.act)(async () => {
312
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
313
- pages: PAGES,
314
- onRowAction: ON_ROW_ACTION,
315
- onAction: ON_ACTION,
316
- hide_title: true,
317
- sections: sections,
318
- type: "task-list-cya"
319
- }), container);
320
- });
321
- const taskHeading1 = container.childNodes[0].childNodes[0];
322
- expect(taskHeading1.textContent).toEqual('Blue');
323
- const taskHeading2 = container.childNodes[0].childNodes[2];
324
- expect(taskHeading2.textContent).toEqual('Red');
325
- });
326
- it('should show task list in CYA style and not show sections without any pages', async () => {
327
- const sections = [{
328
- name: 'These are your tasks',
329
- tasks: [{
330
- name: 'Task 1',
331
- displayName: 'Blue',
332
- state: 'complete',
333
- pages: []
334
- }, {
335
- name: 'Task 2',
336
- displayName: 'Red',
337
- state: 'complete',
338
- pages: ['grade']
339
- }]
340
- }];
341
- await (0, _testUtils.act)(async () => {
342
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
343
- pages: PAGES,
344
- onRowAction: ON_ROW_ACTION,
345
- onAction: ON_ACTION,
346
- hide_title: true,
347
- sections: sections,
348
- type: "task-list-cya"
349
- }), container);
350
- });
351
- const taskHeading1 = container.childNodes[0].childNodes[0];
352
- expect(taskHeading1.textContent).toEqual('');
353
- const taskHeading2 = container.childNodes[0].childNodes[1];
354
- expect(taskHeading2.textContent).toEqual('Red');
355
- });
356
- it('Show answers from multiple address fields into in one DL', async () => {
357
- const ADDRESS_DATA = _utils.default.Data.setupForm(_group.default.pages, _group.default.components, _groupData.default);
358
- const GROUP_PAGES = _utils.default.FormPage.getAll(_group.default.pages, _group.default.components, _objectSpread({}, ADDRESS_DATA));
359
- await (0, _testUtils.act)(async () => {
360
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
361
- pages: GROUP_PAGES,
362
- onRowAction: ON_ROW_ACTION,
363
- onAction: ON_ACTION,
364
- hide_title: true
365
- }), container);
366
- });
367
- const cya = checkCYA(container);
368
- const groupedComponent = cya.childNodes[10];
369
- const keyGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[0];
370
- expect(keyGroup.tagName).toEqual('DT');
371
- expect(keyGroup.textContent).toEqual('Address details');
372
- const valueGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[1];
373
- expect(valueGroup.childNodes.length).toEqual(4);
374
- expect(valueGroup.tagName).toEqual('DD');
375
- expect(valueGroup.childNodes[0].textContent).toContain('10 Downing Street');
376
- expect(valueGroup.childNodes[1].textContent).toContain('City of Westminster');
377
- expect(valueGroup.childNodes[2].textContent).toContain('London');
378
- expect(valueGroup.childNodes[3].textContent).toContain('SW1A 2AA');
379
- const changeButtonDiv = groupedComponent.childNodes[0].childNodes[0].childNodes[2];
380
- expect(changeButtonDiv.classList).toContain('govuk-summary-list__actions');
381
- const changeButton = changeButtonDiv.childNodes[0];
382
- expect(changeButton.tagName).toEqual('A');
383
- expect(changeButton.textContent).toEqual('Change address details');
384
- });
385
- it('should render a group with one action button', async () => {
386
- const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
387
- await (0, _testUtils.act)(async () => {
388
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
389
- pages: GROUP_PAGES,
390
- onRowAction: ON_ROW_ACTION,
391
- onAction: ON_ACTION,
392
- groups: _groupOfRow.default.cya.groups
393
- }), container);
394
- });
395
- const cya = checkCYA(container);
396
- const namesGroup = cya.childNodes[2];
397
- const firstNameRow = namesGroup.childNodes[0].childNodes[0];
398
- expect(firstNameRow.childNodes.length).toEqual(2);
399
- expect(firstNameRow.childNodes[0].textContent).toEqual('First name (optional)');
400
- expect(firstNameRow.childNodes[0].tagName).toEqual('DT');
401
- expect(firstNameRow.childNodes[1].textContent).toEqual('John');
402
- expect(firstNameRow.childNodes[1].tagName).toEqual('DD');
403
- const surname = namesGroup.childNodes[0].childNodes[1];
404
- expect(surname.childNodes.length).toEqual(2);
405
- expect(surname.childNodes[0].textContent).toEqual('Last name (optional)');
406
- expect(surname.childNodes[0].tagName).toEqual('DT');
407
- expect(surname.childNodes[1].textContent).toEqual('Smith');
408
- expect(surname.childNodes[1].tagName).toEqual('DD');
409
- const changeButtonDiv = namesGroup.childNodes[0].childNodes[2];
410
- expect(changeButtonDiv.classList).toContain('change-group-button');
411
- const changeButton = changeButtonDiv.childNodes[0];
412
- expect(changeButton.tagName).toEqual('A');
413
- expect(changeButton.textContent).toEqual('Change names');
414
- });
415
- it('should show a conditional button', async () => {
416
- const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
417
- await (0, _testUtils.act)(async () => {
418
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
419
- pages: GROUP_PAGES,
420
- onRowAction: ON_ROW_ACTION,
421
- onAction: ON_ACTION,
422
- groups: _groupOfRow.default.cya.groups,
423
- actions: _actions.default
424
- }), container);
425
- });
426
- const cya = checkCYA(container);
427
- const hodsButtonDiv = cya.childNodes[7];
428
- expect(hodsButtonDiv.classList).toContain('hods-button-group');
429
- const submitButton = hodsButtonDiv.childNodes[0];
430
- expect(submitButton.tagName).toEqual('BUTTON');
431
- expect(submitButton.textContent).toEqual('Submit');
432
- const saveButton = hodsButtonDiv.childNodes[1];
433
- expect(saveButton.tagName).toEqual('BUTTON');
434
- expect(saveButton.textContent).toEqual('Save and return later');
435
- });
436
- it('should not show a conditional button', async () => {
437
- const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, _objectSpread({}, DATA));
438
- await (0, _testUtils.act)(async () => {
439
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
440
- pages: GROUP_PAGES,
441
- onRowAction: ON_ROW_ACTION,
442
- onAction: ON_ACTION,
443
- groups: _groupOfRow.default.cya.groups,
444
- actions: _actionsNoSave.default
445
- }), container);
446
- });
447
- const cya = checkCYA(container);
448
- const hodsButtonDiv = cya.childNodes[7];
449
- expect(hodsButtonDiv.classList).toContain('hods-button-group');
450
- const submitButton = hodsButtonDiv.childNodes[0];
451
- expect(submitButton.tagName).toEqual('BUTTON');
452
- expect(submitButton.textContent).toEqual('Submit');
453
- const saveButton = hodsButtonDiv.childNodes[1];
454
- expect(saveButton).toEqual(undefined);
455
- });
456
- it('should render empty optional fields with a placeholder value when provided', async () => {
457
- const GROUP_PAGES = _utils.default.FormPage.getAll(_groupOfRow.default.pages, _groupOfRow.default.components, {});
458
- await (0, _testUtils.act)(async () => {
459
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
460
- pages: GROUP_PAGES,
461
- groups: _groupOfRow.default.cya.groups,
462
- optionalFieldPlaceholder: "Not entered"
463
- }), container);
464
- });
465
- const cya = checkCYA(container);
466
- const namesGroup = cya.childNodes[2];
467
- const firstNameRow = namesGroup.childNodes[0].childNodes[0];
468
- expect(firstNameRow.childNodes.length).toEqual(2);
469
- expect(firstNameRow.childNodes[0].textContent).toEqual('First name (optional)');
470
- expect(firstNameRow.childNodes[0].tagName).toEqual('DT');
471
- expect(firstNameRow.childNodes[1].textContent).toEqual('Not entered');
472
- expect(firstNameRow.childNodes[1].tagName).toEqual('DD');
473
- const surname = namesGroup.childNodes[0].childNodes[1];
474
- expect(surname.childNodes.length).toEqual(2);
475
- expect(surname.childNodes[0].textContent).toEqual('Last name (optional)');
476
- expect(surname.childNodes[0].tagName).toEqual('DT');
477
- expect(surname.childNodes[1].textContent).toEqual('Not entered');
478
- expect(surname.childNodes[1].tagName).toEqual('DD');
479
- });
480
- it('should show page components corrently with interpolated title and cya_label, if label is missing', async () => {
481
- const _PAGES = [].concat(_userProfile.default.pages);
482
- // eslint-disable-next-line no-template-curly-in-string
483
- _PAGES[0] = _objectSpread(_objectSpread({}, _PAGES[0]), {}, {
484
- title: 'Alpha ID: ${businessKey}'
485
- });
486
- const _COMPONENTS = [].concat(_userProfile.default.components);
487
- _COMPONENTS[0] = _objectSpread(_objectSpread({}, _COMPONENTS[0]), {}, {
488
- label: undefined,
489
- required: true,
490
- // eslint-disable-next-line no-template-curly-in-string
491
- cya_label: "Text ${currentUser.familyName}"
492
- });
493
- const T_PAGES = _utils.default.FormPage.getAll(_PAGES, _COMPONENTS, DATA);
494
- await (0, _testUtils.act)(async () => {
495
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
496
- pages: T_PAGES,
497
- onRowAction: ON_ROW_ACTION,
498
- onAction: ON_ACTION
499
- }), container);
500
- });
501
- const cya = checkCYA(container);
502
- const [, cyaTitle, cyaChildNode] = cya.childNodes;
503
- expect(cyaTitle.textContent).toEqual('Alpha ID: 123456789');
504
- const names = cyaChildNode.childNodes[0];
505
- expect(names.tagName).toEqual('DIV');
506
- expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
507
- const [firstName, surname] = names.childNodes;
508
- const [label] = firstName.childNodes;
509
- expect(label.textContent).toEqual('Text Smith');
510
- checkRow(surname, 'Last name', 'Smith', false);
511
- });
512
- it('should show page components corrently with no label, if label and cya_label are missing', async () => {
513
- const _PAGES = [].concat(_userProfile.default.pages);
514
- const _COMPONENTS = [].concat(_userProfile.default.components);
515
- _COMPONENTS[0] = _objectSpread(_objectSpread({}, _COMPONENTS[0]), {}, {
516
- label: undefined,
517
- required: true,
518
- cya_label: undefined
519
- });
520
- const T_PAGES = _utils.default.FormPage.getAll(_PAGES, _COMPONENTS, _objectSpread({}, DATA));
521
- await (0, _testUtils.act)(async () => {
522
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
523
- pages: T_PAGES,
524
- onRowAction: ON_ROW_ACTION,
525
- onAction: ON_ACTION
526
- }), container);
527
- });
528
- const cya = checkCYA(container);
529
- const [, cyaChildNode] = cya.childNodes;
530
- const names = cyaChildNode.childNodes[0];
531
- expect(names.tagName).toEqual('DIV');
532
- expect(names.classList).toContain("govuk-!-margin-bottom-".concat(_CheckYourAnswers.DEFAULT_MARGIN_BOTTOM));
533
- const [firstName, surname] = names.childNodes;
534
- const [label] = firstName.childNodes;
535
- expect(label.textContent).toEqual("");
536
- checkRow(surname, 'Last name', 'Smith', false);
537
- });
538
- it('should show task list in CYA style and hide pages from skipped tasks', async () => {
539
- const sections = [{
540
- name: 'These are your tasks',
541
- tasks: [{
542
- name: 'Task 1',
543
- state: 'complete',
544
- pages: ['names']
545
- }, {
546
- name: 'Task 2',
547
- state: 'skipped',
548
- pages: ['grade']
549
- }]
550
- }];
551
- await (0, _testUtils.act)(async () => {
552
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
553
- pages: PAGES,
554
- onRowAction: ON_ROW_ACTION,
555
- onAction: ON_ACTION,
556
- hide_title: true,
557
- sections: sections,
558
- type: "task-list-cya"
559
- }), container);
560
- });
561
- const taskHeading1 = container.childNodes[0].childNodes[0];
562
- expect(taskHeading1.tagName).toEqual('H2');
563
- expect(taskHeading1.textContent).toEqual('Task 1');
564
- expect(taskHeading1.classList).toContain("govuk-heading-m");
565
- const namesPageHeading = container.childNodes[0].childNodes[1];
566
- expect(namesPageHeading.tagName).toEqual('DIV');
567
- expect(namesPageHeading.textContent).toContain('John');
568
- expect(namesPageHeading.classList).toContain("group-of-rows");
569
- expect(container.childNodes[0].childNodes.length).toEqual(2); // second task skipped so not shown
570
- });
571
- it('Show answers from multiple address fields into in one DL correctly when hideBlankRows is true', async () => {
572
- const ADDRESS_DATA = _utils.default.Data.setupForm(_group.default.pages, _group.default.components, _groupData.default);
573
- const GROUP_PAGES = _utils.default.FormPage.getAll(_group.default.pages, _group.default.components, _objectSpread({}, ADDRESS_DATA));
574
- await (0, _testUtils.act)(async () => {
575
- (0, _setupTests.renderDomWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_CheckYourAnswers.default, {
576
- pages: GROUP_PAGES,
577
- onRowAction: ON_ROW_ACTION,
578
- onAction: ON_ACTION,
579
- hide_title: true,
580
- hideBlankRows: true
581
- }), container);
582
- });
583
- const cya = checkCYA(container);
584
- const groupedComponent = cya.childNodes[6];
585
- const keyGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[0];
586
- expect(keyGroup.tagName).toEqual('DT');
587
- expect(keyGroup.textContent).toEqual('Address details');
588
- const valueGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[1];
589
- expect(valueGroup.childNodes.length).toEqual(4);
590
- expect(valueGroup.tagName).toEqual('DD');
591
- expect(valueGroup.childNodes[0].textContent).toContain('10 Downing Street');
592
- expect(valueGroup.childNodes[1].textContent).toContain('City of Westminster');
593
- expect(valueGroup.childNodes[2].textContent).toContain('London');
594
- expect(valueGroup.childNodes[3].textContent).toContain('SW1A 2AA');
595
- const changeButtonDiv = groupedComponent.childNodes[0].childNodes[0].childNodes[2];
596
- expect(changeButtonDiv.classList).toContain('govuk-summary-list__actions');
597
- const changeButton = changeButtonDiv.childNodes[0];
598
- expect(changeButton.tagName).toEqual('A');
599
- expect(changeButton.textContent).toEqual('Change address details');
600
- });
601
- });
602
- });
603
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9heGlvc01vY2tBZGFwdGVyIiwiX3JlYWN0IiwiX3JlYWN0RG9tIiwiX3Rlc3RVdGlscyIsIl9hcmVZb3VBQ2l2aWxTZXJ2YW50IiwiX2dyYWRlIiwiX3RlYW0iLCJfdXNlclByb2ZpbGVEYXRhIiwiX3VzZXJQcm9maWxlIiwiX2dyb3VwRGF0YSIsIl9ncm91cCIsIl9ncm91cE9mUm93IiwiX2FjdGlvbnMiLCJfYWN0aW9uc05vU2F2ZSIsIl9tb2RlbHMiLCJfc2V0dXBUZXN0cyIsIl91dGlscyIsIl9DaGVja1lvdXJBbnN3ZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfanN4UnVudGltZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImRlc2NyaWJlIiwibW9ja0F4aW9zIiwiTW9ja0FkYXB0ZXIiLCJheGlvcyIsIkRBVEEiLCJVdGlscyIsIkRhdGEiLCJzZXR1cEZvcm0iLCJVU0VSX1BST0ZJTEUiLCJwYWdlcyIsImNvbXBvbmVudHMiLCJVU0VSX1BST0ZJTEVfREFUQSIsIlBBR0VTIiwiRm9ybVBhZ2UiLCJnZXRBbGwiLCJPTl9ST1dfQUNUSU9OX0NBTExTIiwiT05fUk9XX0FDVElPTiIsInJvdyIsIk9OX0FDVElPTl9DQUxMUyIsIk9OX0FDVElPTiIsImFjdGlvbiIsIm9uRXJyb3IiLCJjb250YWluZXIiLCJyZWZEYXRhVXJsIiwic3VmZml4IiwiY29uY2F0IiwidXJscyIsInJlZkRhdGEiLCJiZWZvcmVFYWNoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwicmVzZXQiLCJvbkdldCIsInJlcGx5IiwiQ0lWSUxfU0VSVkFOVCIsIkdSQURFIiwiVEVBTVMiLCJhZnRlckVhY2giLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicmVtb3ZlIiwiY2hlY2tDWUEiLCJjeWFDb250YWluZXIiLCJjaGVja0NZQUNvbnRhaW5lciIsImN5YSIsImNoaWxkTm9kZXMiLCJleHBlY3QiLCJ0YWdOYW1lIiwidG9FcXVhbCIsImNsYXNzTGlzdCIsInRvQ29udGFpbiIsIkRFRkFVTFRfQ0xBU1MiLCJjaGVja1JvdyIsImtleSIsInRleHRDb250ZW50Iiwibm90IiwiaXQiLCJhY3QiLCJyZW5kZXJEb21XaXRoVmFsaWRhdGlvbiIsImpzeCIsIm9uUm93QWN0aW9uIiwib25BY3Rpb24iLCJ0aXRsZSIsIkRFRkFVTFRfVElUTEUiLCJUSVRMRSIsImN5YUNoaWxkTm9kZSIsIm5hbWVzIiwiREVGQVVMVF9NQVJHSU5fQk9UVE9NIiwiZmlyc3ROYW1lIiwic3VybmFtZSIsImNpdmlsU2VydmFudCIsInN0YXR1cyIsImhpZGVfcGFnZV90aXRsZXMiLCJDVVNUT01fUEFHRVMiLCJtYXAiLCJwYWdlIiwiY3lhX2xpbmsiLCJpZCIsImFyaWFfc3VmZml4Iiwic2luZ2xlQ2hhbmdlTGluayIsInRpdGxlVGV4dCIsImNoaWxkcmVuIiwidGl0bGVBY3Rpb24iLCJTRUNUSU9OUyIsIm5hbWUiLCJ0YXNrcyIsInN0YXRlIiwiaGlkZV90aXRsZSIsInNlY3Rpb25zIiwidHlwZSIsIkZvcm1UeXBlcyIsIlRBU0tfQ1lBIiwidGFza0hlYWRpbmcxIiwibmFtZXNQYWdlSGVhZGluZyIsInRhc2tIZWFkaW5nMiIsImdyYWRlUGFnZUhlYWRpbmciLCJkaXNwbGF5TmFtZSIsIkFERFJFU1NfREFUQSIsIkdST1VQRURfQUREUkVTUyIsIkdST1VQRURfQUREUkVTU19EQVRBX0pTT04iLCJHUk9VUF9QQUdFUyIsImdyb3VwZWRDb21wb25lbnQiLCJrZXlHcm91cCIsInZhbHVlR3JvdXAiLCJjaGFuZ2VCdXR0b25EaXYiLCJjaGFuZ2VCdXR0b24iLCJHUk9VUF9ST1dTIiwiZ3JvdXBzIiwibmFtZXNHcm91cCIsImZpcnN0TmFtZVJvdyIsImFjdGlvbnMiLCJBQ1RJT05TIiwiaG9kc0J1dHRvbkRpdiIsInN1Ym1pdEJ1dHRvbiIsInNhdmVCdXR0b24iLCJBQ1RJT05TTk9TQVZFIiwidW5kZWZpbmVkIiwib3B0aW9uYWxGaWVsZFBsYWNlaG9sZGVyIiwiX1BBR0VTIiwiX0NPTVBPTkVOVFMiLCJsYWJlbCIsInJlcXVpcmVkIiwiY3lhX2xhYmVsIiwiVF9QQUdFUyIsImN5YVRpdGxlIiwiaGlkZUJsYW5rUm93cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0NoZWNrWW91ckFuc3dlcnMvQ2hlY2tZb3VyQW5zd2Vycy50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdsb2JhbCBpbXBvcnRzXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IE1vY2tBZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBhY3QgfSBmcm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XG5cbi8vIExvY2FsIGltcG9ydHNcbmltcG9ydCBDSVZJTF9TRVJWQU5UIGZyb20gJy4uLy4uL2pzb24vYXJlWW91QUNpdmlsU2VydmFudC5qc29uJztcbmltcG9ydCBHUkFERSBmcm9tICcuLi8uLi9qc29uL2dyYWRlLmpzb24nO1xuaW1wb3J0IFRFQU1TIGZyb20gJy4uLy4uL2pzb24vdGVhbS5qc29uJztcbmltcG9ydCBVU0VSX1BST0ZJTEVfREFUQSBmcm9tICcuLi8uLi9qc29uL3VzZXJQcm9maWxlLmRhdGEuanNvbic7XG5pbXBvcnQgVVNFUl9QUk9GSUxFIGZyb20gJy4uLy4uL2pzb24vdXNlclByb2ZpbGUuanNvbic7XG5pbXBvcnQgR1JPVVBFRF9BRERSRVNTX0RBVEFfSlNPTiBmcm9tICcuLi8uLi9qc29uL2dyb3VwLmRhdGEuanNvbic7XG5pbXBvcnQgR1JPVVBFRF9BRERSRVNTIGZyb20gJy4uLy4uL2pzb24vZ3JvdXAuanNvbic7XG5pbXBvcnQgR1JPVVBfUk9XUyBmcm9tICcuLi8uLi9qc29uL2dyb3VwT2ZSb3cuanNvbic7XG5pbXBvcnQgQUNUSU9OUyBmcm9tICcuLi8uLi9qc29uL2FjdGlvbnMuanNvbic7XG5pbXBvcnQgQUNUSU9OU05PU0FWRSBmcm9tICcuLi8uLi9qc29uL2FjdGlvbnNOb1NhdmUuanNvbic7XG5pbXBvcnQgeyBGb3JtVHlwZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9zZXR1cFRlc3RzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgQ2hlY2tZb3VyQW5zd2VycywgeyBERUZBVUxUX0NMQVNTLCBERUZBVUxUX01BUkdJTl9CT1RUT00sIERFRkFVTFRfVElUTEUgfSBmcm9tICcuL0NoZWNrWW91ckFuc3dlcnMnO1xuXG5kZXNjcmliZSgnY29tcG9uZW50cycsICgpID0+IHtcblxuICBkZXNjcmliZSgnQ2hlY2tZb3VyQW5zd2VycycsICgpID0+IHtcbiAgICBjb25zdCBtb2NrQXhpb3MgPSBuZXcgTW9ja0FkYXB0ZXIoYXhpb3MpO1xuICAgIGNvbnN0IERBVEEgPSBVdGlscy5EYXRhLnNldHVwRm9ybShVU0VSX1BST0ZJTEUucGFnZXMsIFVTRVJfUFJPRklMRS5jb21wb25lbnRzLCBVU0VSX1BST0ZJTEVfREFUQSlcbiAgICBjb25zdCBQQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChVU0VSX1BST0ZJTEUucGFnZXMsIFVTRVJfUFJPRklMRS5jb21wb25lbnRzLCB7IC4uLkRBVEEgfSk7XG4gICAgY29uc3QgT05fUk9XX0FDVElPTl9DQUxMUyA9IFtdO1xuICAgIGNvbnN0IE9OX1JPV19BQ1RJT04gPSAocm93KSA9PiB7XG4gICAgICBPTl9ST1dfQUNUSU9OX0NBTExTLnB1c2gocm93KTtcbiAgICB9O1xuICAgIGNvbnN0IE9OX0FDVElPTl9DQUxMUyA9IFtdO1xuICAgIGNvbnN0IE9OX0FDVElPTiA9IChhY3Rpb24sIG9uRXJyb3IpID0+IHtcbiAgICAgIE9OX0FDVElPTl9DQUxMUy5wdXNoKHsgYWN0aW9uLCBvbkVycm9yIH0pO1xuICAgIH07XG4gICAgbGV0IGNvbnRhaW5lciA9IG51bGw7XG5cbiAgICBjb25zdCByZWZEYXRhVXJsID0gKHN1ZmZpeCkgPT4gXG4gICAgICBgJHtVU0VSX1BST0ZJTEVfREFUQS51cmxzLnJlZkRhdGF9LyR7c3VmZml4fWBcbiAgICBcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIE9OX1JPV19BQ1RJT05fQ0FMTFMubGVuZ3RoID0gMDtcbiAgICAgIE9OX0FDVElPTl9DQUxMUy5sZW5ndGggPSAwO1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICBtb2NrQXhpb3MucmVzZXQoKTtcblxuICAgICAgbW9ja0F4aW9zLm9uR2V0KHJlZkRhdGFVcmwoJ2FyZVlvdUFDaXZpbFNlcnZhbnQnKSkucmVwbHkoMjAwLCBDSVZJTF9TRVJWQU5UKTtcbiAgICAgIG1vY2tBeGlvcy5vbkdldChyZWZEYXRhVXJsKCdncmFkZScpKS5yZXBseSgyMDAsIEdSQURFKTtcbiAgICAgIG1vY2tBeGlvcy5vbkdldChyZWZEYXRhVXJsKCd0ZWFtJykpLnJlcGx5KDIwMCwgVEVBTVMpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGVja0NZQSA9IChjeWFDb250YWluZXIpID0+IHtcbiAgICAgIGNvbnN0IGNoZWNrQ1lBQ29udGFpbmVyID0gY3lhQ29udGFpbmVyO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUFDb250YWluZXIuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChjeWEudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QoY3lhLmNsYXNzTGlzdCkudG9Db250YWluKERFRkFVTFRfQ0xBU1MpO1xuICAgICAgcmV0dXJuIGN5YTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tSb3cgPSAocm93LCBrZXksIHZhbHVlLCBhY3Rpb24pID0+IHtcbiAgICAgIGV4cGVjdChyb3cudGV4dENvbnRlbnQpLnRvQ29udGFpbihrZXkpO1xuICAgICAgZXhwZWN0KHJvdy50ZXh0Q29udGVudCkudG9Db250YWluKHZhbHVlKTtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgZXhwZWN0KHJvdy50ZXh0Q29udGVudCkudG9Db250YWluKCdDaGFuZ2UnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGVjdChyb3cudGV4dENvbnRlbnQpLm5vdC50b0NvbnRhaW4oJ0NoYW5nZScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgZGVmYXVsdCB0aXRsZSBpZiBub25lIGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCB0aXRsZSA9IGN5YS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRpdGxlLmNsYXNzTGlzdCkudG9Db250YWluKCdnb3Z1ay1oZWFkaW5nLWwnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS50ZXh0Q29udGVudCkudG9FcXVhbChERUZBVUxUX1RJVExFKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgdGl0bGUgdG8gYmUgb3ZlcnJpZGRlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFRJVExFID0gJ0FscGhhIEJyYXZvIENoYXJsaWUnO1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgdGl0bGU9e1RJVExFfSBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gY3lhLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGl0bGUuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2dvdnVrLWhlYWRpbmctbCcpO1xuICAgICAgZXhwZWN0KHRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKFRJVExFKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2hvdyByZWFkb25seSBwYWdlIGNvbXBvbmVudHMgY29ycmVjdGx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBbLCBjeWFDaGlsZE5vZGVdID0gY3lhLmNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBuYW1lcyA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KG5hbWVzLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzLmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBzdXJuYW1lXSA9IG5hbWVzLmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhmaXJzdE5hbWUsICdGaXJzdCBuYW1lJywgJ0pvaG4nLCBmYWxzZSk7XG4gICAgICBjaGVja1JvdyhzdXJuYW1lLCAnTGFzdCBuYW1lJywgJ1NtaXRoJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGVkaXRhYmxlIHBhZ2UgY29tcG9uZW50cyBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IFssICwgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGV4cGVjdChjaXZpbFNlcnZhbnQudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QoY2l2aWxTZXJ2YW50LmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbc3RhdHVzXSA9IGNpdmlsU2VydmFudC5jaGlsZE5vZGVzO1xuICAgICAgY2hlY2tSb3coc3RhdHVzLCAnQXJlIHlvdSBhIGNpdmlsIHNlcnZhbnQ/JywgJ1llcycsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGVkaXRhYmxlIHBhZ2UgY29tcG9uZW50cyBjb3JyZWN0bHkgd2l0aCBwYWdlIHRpdGxlcyBoaWRkZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3BhZ2VfdGl0bGVzIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgLCBjeWFDaGlsZE5vZGVdID0gY3lhLmNoaWxkTm9kZXM7IC8vIFRoZSB0aXRsZSBzaW1wbHkgaXNuJ3QgcmV0dXJuZWRcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdChjaXZpbFNlcnZhbnQuY2xhc3NMaXN0KS50b0NvbnRhaW4oYGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wYCk7IC8vIENoYW5nZWQgbWFyZ2luIGlmIG5vIHRpdGxlc1xuICAgICAgY29uc3QgW3N0YXR1c10gPSBjaXZpbFNlcnZhbnQuY2hpbGROb2RlcztcbiAgICAgIGNoZWNrUm93KHN0YXR1cywgJ0FyZSB5b3UgYSBjaXZpbCBzZXJ2YW50PycsICdZZXMnLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgb25seSBzaG93IGNoYW5nZSBsaW5rIG5leHQgdG8gdGhlIGhlYWRpbmcgd2hlbiB0aGUgcGFnZSBpcyBjb25maWd1cmVkIHRvIG9ubHkgaGF2ZSBhIHNpbmdsZSBjaGFuZ2UgbGluaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IENVU1RPTV9QQUdFUyA9IFBBR0VTLm1hcChwYWdlID0+IChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgY3lhX2xpbms6IHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UuaWQsXG4gICAgICAgICAgICBhcmlhX3N1ZmZpeDogJ3BhZ2UgZGV0YWlscycsXG4gICAgICAgICAgICBzaW5nbGVDaGFuZ2VMaW5rOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtDVVNUT01fUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IFssICwgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGV4cGVjdCh0aXRsZS50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy13aXRoLWFjdGlvbicpO1xuICAgICAgY29uc3QgdGl0bGVUZXh0ID0gdGl0bGUuY2hpbGRyZW5bMF07XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KHRpdGxlVGV4dC5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy10ZXh0Jyk7XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGNvbnN0IHRpdGxlQWN0aW9uID0gdGl0bGUuY2hpbGRyZW5bMV07XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24uY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hlYWRpbmctYWN0aW9uJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGV4dENvbnRlbnQpLnRvRXF1YWwoYENoYW5nZSBwYWdlIGRldGFpbHNgKTtcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGNvbnN0IFtzdGF0dXNdID0gY2l2aWxTZXJ2YW50LmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhzdGF0dXMsICdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nLCAnWWVzJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBvbmx5IHNob3cgY2hhbmdlIGxpbmsgbmV4dCB0byB0aGUgaGVhZGluZyB3aGVuIHRoZSBwYWdlIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIHNpbmdsZSBjaGFuZ2UgbGluayBhbmQgZm9ybSBpcyBhIHRhc2sgbGlzdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IENVU1RPTV9QQUdFUyA9IFBBR0VTLm1hcChwYWdlID0+IChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgY3lhX2xpbms6IHtcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UuaWQsXG4gICAgICAgICAgICBhcmlhX3N1ZmZpeDogJ3BhZ2UgZGV0YWlscycsXG4gICAgICAgICAgICBzaW5nbGVDaGFuZ2VMaW5rOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKTtcbiAgICAgIGNvbnN0IFNFQ1RJT05TID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ2NpdmlsLXNlcnZhbnQtc3RhdHVzJ10gfSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtDVVNUT01fUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtTRUNUSU9OU30gdHlwZT17Rm9ybVR5cGVzLlRBU0tfQ1lBfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAxJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgdGl0bGUsIGN5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGV4cGVjdCh0aXRsZS50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdCh0aXRsZS5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy13aXRoLWFjdGlvbicpO1xuICAgICAgY29uc3QgdGl0bGVUZXh0ID0gdGl0bGUuY2hpbGRyZW5bMF07XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KHRpdGxlVGV4dC5jbGFzc0xpc3QpLnRvQ29udGFpbignaGVhZGluZy10ZXh0Jyk7XG4gICAgICBleHBlY3QodGl0bGVUZXh0LnRleHRDb250ZW50KS50b0VxdWFsKCdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nKTtcbiAgICAgIGNvbnN0IHRpdGxlQWN0aW9uID0gdGl0bGUuY2hpbGRyZW5bMV07XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24uY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hlYWRpbmctYWN0aW9uJyk7XG4gICAgICBleHBlY3QodGl0bGVBY3Rpb24udGV4dENvbnRlbnQpLnRvRXF1YWwoYENoYW5nZSBwYWdlIGRldGFpbHNgKTtcbiAgICAgIGNvbnN0IGNpdmlsU2VydmFudCA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGNpdmlsU2VydmFudC50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGNvbnN0IFtzdGF0dXNdID0gY2l2aWxTZXJ2YW50LmNoaWxkTm9kZXM7XG4gICAgICBjaGVja1JvdyhzdGF0dXMsICdBcmUgeW91IGEgY2l2aWwgc2VydmFudD8nLCAnWWVzJywgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IG5vIHRpdGxlIGlmIGlzIHNldCB0byBoaWRkZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgW2N5YUNoaWxkTm9kZV0gPSBjeWEuY2hpbGROb2RlcztcbiAgICAgIGNvbnN0IG5hbWVzID0gY3lhQ2hpbGROb2RlLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QobmFtZXMudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QobmFtZXMuY2xhc3NMaXN0KS50b0NvbnRhaW4oYGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0ke0RFRkFVTFRfTUFSR0lOX0JPVFRPTX1gKTtcbiAgICAgIGNvbnN0IFtmaXJzdE5hbWUsIHN1cm5hbWVdID0gbmFtZXMuY2hpbGROb2RlcztcbiAgICAgIGNoZWNrUm93KGZpcnN0TmFtZSwgJ0ZpcnN0IG5hbWUnLCAnSm9obicsIGZhbHNlKTtcbiAgICAgIGNoZWNrUm93KHN1cm5hbWUsICdMYXN0IG5hbWUnLCAnU21pdGgnLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgdGFzayBsaXN0IGluIENZQSBzdHlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIHN0YXRlOiAnY29tcGxldGUnLCBwYWdlczogWydncmFkZSddIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtzZWN0aW9uc30gdHlwZT1cInRhc2stbGlzdC1jeWFcIiAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAxJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBuYW1lc1BhZ2VIZWFkaW5nID0gY29udGFpbmVyLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdChuYW1lc1BhZ2VIZWFkaW5nLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcudGV4dENvbnRlbnQpLnRvQ29udGFpbignSm9obicpO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcuY2xhc3NMaXN0KS50b0NvbnRhaW4oXCJncm91cC1vZi1yb3dzXCIpO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzIgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMi50YWdOYW1lKS50b0VxdWFsKCdIMicpO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMi50ZXh0Q29udGVudCkudG9FcXVhbCgnVGFzayAyJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1tXCIpO1xuXG4gICAgICBjb25zdCBncmFkZVBhZ2VIZWFkaW5nID0gY29udGFpbmVyLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1szXTtcbiAgICAgIGV4cGVjdChncmFkZVBhZ2VIZWFkaW5nLnRhZ05hbWUpLnRvRXF1YWwoJ0gzJyk7XG4gICAgICBleHBlY3QoZ3JhZGVQYWdlSGVhZGluZy50ZXh0Q29udGVudCkudG9FcXVhbChcIldoYXQncyB5b3VyIGdyYWRlP1wiKTtcbiAgICAgIGV4cGVjdChncmFkZVBhZ2VIZWFkaW5nLmNsYXNzTGlzdCkudG9Db250YWluKFwiZ292dWstaGVhZGluZy1zXCIpO1xuXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgdGFzayBsaXN0IGluIENZQSBzdHlsZSBhbmQgcHJpb3RpdGlzZSBkaXNwbGF5TmFtZSBvdmVyIG5hbWUgZm9yIGEgdGFzaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgZGlzcGxheU5hbWU6ICdCbHVlJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIGRpc3BsYXlOYW1lOiAnUmVkJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ2dyYWRlJ10gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtQQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgc2VjdGlvbnM9e3NlY3Rpb25zfSB0eXBlPVwidGFzay1saXN0LWN5YVwiIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRleHRDb250ZW50KS50b0VxdWFsKCdCbHVlJyk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMiA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMl07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLnRleHRDb250ZW50KS50b0VxdWFsKCdSZWQnKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IHRhc2sgbGlzdCBpbiBDWUEgc3R5bGUgYW5kIG5vdCBzaG93IHNlY3Rpb25zIHdpdGhvdXQgYW55IHBhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnVGhlc2UgYXJlIHlvdXIgdGFza3MnLFxuICAgICAgICAgIHRhc2tzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdUYXNrIDEnLCBkaXNwbGF5TmFtZTogJ0JsdWUnLCBzdGF0ZTogJ2NvbXBsZXRlJywgcGFnZXM6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdUYXNrIDInLCBkaXNwbGF5TmFtZTogJ1JlZCcsIHN0YXRlOiAnY29tcGxldGUnLCBwYWdlczogWydncmFkZSddIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17UEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIHNlY3Rpb25zPXtzZWN0aW9uc30gdHlwZT1cInRhc2stbGlzdC1jeWFcIiAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0YXNrSGVhZGluZzEgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KHRhc2tIZWFkaW5nMS50ZXh0Q29udGVudCkudG9FcXVhbCgnJyk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMiA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcyLnRleHRDb250ZW50KS50b0VxdWFsKCdSZWQnKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3cgYW5zd2VycyBmcm9tIG11bHRpcGxlIGFkZHJlc3MgZmllbGRzIGludG8gaW4gb25lIERMJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgQUREUkVTU19EQVRBID0gVXRpbHMuRGF0YS5zZXR1cEZvcm0oR1JPVVBFRF9BRERSRVNTLnBhZ2VzLCBHUk9VUEVEX0FERFJFU1MuY29tcG9uZW50cywgR1JPVVBFRF9BRERSRVNTX0RBVEFfSlNPTilcbiAgICAgIGNvbnN0IEdST1VQX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKEdST1VQRURfQUREUkVTUy5wYWdlcywgR1JPVVBFRF9BRERSRVNTLmNvbXBvbmVudHMsIHsgLi4uQUREUkVTU19EQVRBIH0pO1xuXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17R1JPVVBfUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBoaWRlX3RpdGxlIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBncm91cGVkQ29tcG9uZW50ID0gY3lhLmNoaWxkTm9kZXNbMTBdO1xuICAgICAgY29uc3Qga2V5R3JvdXAgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGtleUdyb3VwLnRhZ05hbWUpLnRvRXF1YWwoJ0RUJyk7XG4gICAgICBleHBlY3Qoa2V5R3JvdXAudGV4dENvbnRlbnQpLnRvRXF1YWwoJ0FkZHJlc3MgZGV0YWlscycpO1xuXG4gICAgICBjb25zdCB2YWx1ZUdyb3VwID0gZ3JvdXBlZENvbXBvbmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXMubGVuZ3RoKS50b0VxdWFsKDQpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAudGFnTmFtZSkudG9FcXVhbCgnREQnKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQpLnRvQ29udGFpbignMTAgRG93bmluZyBTdHJlZXQnKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpLnRvQ29udGFpbignQ2l0eSBvZiBXZXN0bWluc3RlcicpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1syXS50ZXh0Q29udGVudCkudG9Db250YWluKCdMb25kb24nKTtcbiAgICAgIGV4cGVjdCh2YWx1ZUdyb3VwLmNoaWxkTm9kZXNbM10udGV4dENvbnRlbnQpLnRvQ29udGFpbignU1cxQSAyQUEnKTtcblxuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uRGl2ID0gZ3JvdXBlZENvbXBvbmVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1syXTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b25EaXYuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2dvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9ucycpO1xuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uID0gY2hhbmdlQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QoY2hhbmdlQnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0EnKTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0NoYW5nZSBhZGRyZXNzIGRldGFpbHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGEgZ3JvdXAgd2l0aCBvbmUgYWN0aW9uIGJ1dHRvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IEdST1VQX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKEdST1VQX1JPV1MucGFnZXMsIEdST1VQX1JPV1MuY29tcG9uZW50cywgeyAuLi5EQVRBIH0pO1xuXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17R1JPVVBfUEFHRVN9IG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfSBvbkFjdGlvbj17T05fQUNUSU9OfSBncm91cHM9e0dST1VQX1JPV1MuY3lhLmdyb3Vwc30gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBuYW1lc0dyb3VwID0gY3lhLmNoaWxkTm9kZXNbMl07XG5cbiAgICAgIGNvbnN0IGZpcnN0TmFtZVJvdyA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnRmlyc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3QoZmlyc3ROYW1lUm93LmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9FcXVhbCgnSm9obicpO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzWzFdLnRhZ05hbWUpLnRvRXF1YWwoJ0REJyk7XG5cbiAgICAgIGNvbnN0IHN1cm5hbWUgPSBuYW1lc0dyb3VwLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgICAgZXhwZWN0KHN1cm5hbWUuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnTGFzdCBuYW1lIChvcHRpb25hbCknKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpLnRvRXF1YWwoJ1NtaXRoJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzFdLnRhZ05hbWUpLnRvRXF1YWwoJ0REJyk7XG5cbiAgICAgIGNvbnN0IGNoYW5nZUJ1dHRvbkRpdiA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignY2hhbmdlLWdyb3VwLWJ1dHRvbicpO1xuICAgICAgY29uc3QgY2hhbmdlQnV0dG9uID0gY2hhbmdlQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QoY2hhbmdlQnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0EnKTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0NoYW5nZSBuYW1lcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IGEgY29uZGl0aW9uYWwgYnV0dG9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgR1JPVVBfUEFHRVMgPSBVdGlscy5Gb3JtUGFnZS5nZXRBbGwoR1JPVVBfUk9XUy5wYWdlcywgR1JPVVBfUk9XUy5jb21wb25lbnRzLCB7IC4uLkRBVEEgfSk7XG4gIFxuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnNcbiAgICAgICAgICAgIHBhZ2VzPXtHUk9VUF9QQUdFU31cbiAgICAgICAgICAgIG9uUm93QWN0aW9uPXtPTl9ST1dfQUNUSU9OfVxuICAgICAgICAgICAgb25BY3Rpb249e09OX0FDVElPTn1cbiAgICAgICAgICAgIGdyb3Vwcz17R1JPVVBfUk9XUy5jeWEuZ3JvdXBzfVxuICAgICAgICAgICAgYWN0aW9ucz17QUNUSU9OU30gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gIFxuICAgICAgY29uc3QgaG9kc0J1dHRvbkRpdiA9IGN5YS5jaGlsZE5vZGVzWzddO1xuICAgICAgZXhwZWN0KGhvZHNCdXR0b25EaXYuY2xhc3NMaXN0KS50b0NvbnRhaW4oJ2hvZHMtYnV0dG9uLWdyb3VwJyk7XG4gICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSBob2RzQnV0dG9uRGl2LmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3Qoc3VibWl0QnV0dG9uLnRhZ05hbWUpLnRvRXF1YWwoJ0JVVFRPTicpO1xuICAgICAgZXhwZWN0KHN1Ym1pdEJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnU3VibWl0Jyk7XG4gICAgICBjb25zdCBzYXZlQnV0dG9uID0gaG9kc0J1dHRvbkRpdi5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KHNhdmVCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQlVUVE9OJyk7XG4gICAgICBleHBlY3Qoc2F2ZUJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnU2F2ZSBhbmQgcmV0dXJuIGxhdGVyJyk7XG4gICAgICBcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNob3cgYSBjb25kaXRpb25hbCBidXR0b24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBHUk9VUF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChHUk9VUF9ST1dTLnBhZ2VzLCBHUk9VUF9ST1dTLmNvbXBvbmVudHMsIHsgLi4uREFUQSB9KTtcbiAgXG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2Vyc1xuICAgICAgICAgICAgcGFnZXM9e0dST1VQX1BBR0VTfVxuICAgICAgICAgICAgb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059XG4gICAgICAgICAgICBvbkFjdGlvbj17T05fQUNUSU9OfVxuICAgICAgICAgICAgZ3JvdXBzPXtHUk9VUF9ST1dTLmN5YS5ncm91cHN9XG4gICAgICAgICAgICBhY3Rpb25zPXtBQ1RJT05TTk9TQVZFfSAvPixcbiAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3lhID0gY2hlY2tDWUEoY29udGFpbmVyKTtcbiAgXG4gICAgICBjb25zdCBob2RzQnV0dG9uRGl2ID0gY3lhLmNoaWxkTm9kZXNbN107XG4gICAgICBleHBlY3QoaG9kc0J1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignaG9kcy1idXR0b24tZ3JvdXAnKTtcbiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IGhvZHNCdXR0b25EaXYuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChzdWJtaXRCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQlVUVE9OJyk7XG4gICAgICBleHBlY3Qoc3VibWl0QnV0dG9uLnRleHRDb250ZW50KS50b0VxdWFsKCdTdWJtaXQnKTtcbiAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBob2RzQnV0dG9uRGl2LmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3Qoc2F2ZUJ1dHRvbikudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBlbXB0eSBvcHRpb25hbCBmaWVsZHMgd2l0aCBhIHBsYWNlaG9sZGVyIHZhbHVlIHdoZW4gcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBHUk9VUF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChHUk9VUF9ST1dTLnBhZ2VzLCBHUk9VUF9ST1dTLmNvbXBvbmVudHMsIHt9KTtcblxuICAgICAgYXdhaXQgYWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgcmVuZGVyRG9tV2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgPENoZWNrWW91ckFuc3dlcnMgcGFnZXM9e0dST1VQX1BBR0VTfSBncm91cHM9e0dST1VQX1JPV1MuY3lhLmdyb3Vwc30gb3B0aW9uYWxGaWVsZFBsYWNlaG9sZGVyPSdOb3QgZW50ZXJlZCcgLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBuYW1lc0dyb3VwID0gY3lhLmNoaWxkTm9kZXNbMl07XG5cbiAgICAgIGNvbnN0IGZpcnN0TmFtZVJvdyA9IG5hbWVzR3JvdXAuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KGZpcnN0TmFtZVJvdy5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9FcXVhbCgnRmlyc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3QoZmlyc3ROYW1lUm93LmNoaWxkTm9kZXNbMF0udGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9FcXVhbCgnTm90IGVudGVyZWQnKTtcbiAgICAgIGV4cGVjdChmaXJzdE5hbWVSb3cuY2hpbGROb2Rlc1sxXS50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuXG4gICAgICBjb25zdCBzdXJuYW1lID0gbmFtZXNHcm91cC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV07XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICAgIGV4cGVjdChzdXJuYW1lLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQpLnRvRXF1YWwoJ0xhc3QgbmFtZSAob3B0aW9uYWwpJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpLnRvRXF1YWwoJ0RUJyk7XG4gICAgICBleHBlY3Qoc3VybmFtZS5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KS50b0VxdWFsKCdOb3QgZW50ZXJlZCcpO1xuICAgICAgZXhwZWN0KHN1cm5hbWUuY2hpbGROb2Rlc1sxXS50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaG93IHBhZ2UgY29tcG9uZW50cyBjb3JyZW50bHkgd2l0aCBpbnRlcnBvbGF0ZWQgdGl0bGUgYW5kIGN5YV9sYWJlbCwgaWYgbGFiZWwgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IF9QQUdFUyA9IFsgLi4uVVNFUl9QUk9GSUxFLnBhZ2VzIF07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nXG4gICAgICBfUEFHRVNbMF0gPSB7IC4uLl9QQUdFU1swXSwgdGl0bGU6ICdBbHBoYSBJRDogJHtidXNpbmVzc0tleX0nfVxuICAgICAgY29uc3QgX0NPTVBPTkVOVFMgPSBbIC4uLlVTRVJfUFJPRklMRS5jb21wb25lbnRzIF07XG4gICAgICBfQ09NUE9ORU5UU1swXSA9IHsgLi4uX0NPTVBPTkVOVFNbMF0sIFxuICAgICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuICAgICAgICBjeWFfbGFiZWw6IFwiVGV4dCAke2N1cnJlbnRVc2VyLmZhbWlseU5hbWV9XCJcbiAgICAgIH07XG4gICAgICBjb25zdCBUX1BBR0VTID0gVXRpbHMuRm9ybVBhZ2UuZ2V0QWxsKF9QQUdFUywgX0NPTVBPTkVOVFMsIERBVEEgKTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtUX1BBR0VTfSBvblJvd0FjdGlvbj17T05fUk9XX0FDVElPTn0gb25BY3Rpb249e09OX0FDVElPTn0gLz4sXG4gICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBbLCBjeWFUaXRsZSwgY3lhQ2hpbGROb2RlXSA9IGN5YS5jaGlsZE5vZGVzO1xuICAgICAgZXhwZWN0KGN5YVRpdGxlLnRleHRDb250ZW50KS50b0VxdWFsKCdBbHBoYSBJRDogMTIzNDU2Nzg5Jyk7XG4gICAgICBjb25zdCBuYW1lcyA9IGN5YUNoaWxkTm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgZXhwZWN0KG5hbWVzLnRhZ05hbWUpLnRvRXF1YWwoJ0RJVicpO1xuICAgICAgZXhwZWN0KG5hbWVzLmNsYXNzTGlzdCkudG9Db250YWluKGBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tJHtERUZBVUxUX01BUkdJTl9CT1RUT019YCk7XG4gICAgICBjb25zdCBbZmlyc3ROYW1lLCBzdXJuYW1lXSA9IG5hbWVzLmNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBbbGFiZWxdID0gZmlyc3ROYW1lLmNoaWxkTm9kZXM7XG4gICAgICBleHBlY3QobGFiZWwudGV4dENvbnRlbnQpLnRvRXF1YWwoJ1RleHQgU21pdGgnKTtcbiAgICAgIGNoZWNrUm93KHN1cm5hbWUsICdMYXN0IG5hbWUnLCAnU21pdGgnLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNob3cgcGFnZSBjb21wb25lbnRzIGNvcnJlbnRseSB3aXRoIG5vIGxhYmVsLCBpZiBsYWJlbCBhbmQgY3lhX2xhYmVsIGFyZSBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgX1BBR0VTID0gWyAuLi5VU0VSX1BST0ZJTEUucGFnZXMgXTtcbiAgICAgIGNvbnN0IF9DT01QT05FTlRTID0gWyAuLi5VU0VSX1BST0ZJTEUuY29tcG9uZW50cyBdO1xuICAgICAgX0NPTVBPTkVOVFNbMF0gPSB7IC4uLl9DT01QT05FTlRTWzBdLCBcbiAgICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGN5YV9sYWJlbDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgY29uc3QgVF9QQUdFUyA9IFV0aWxzLkZvcm1QYWdlLmdldEFsbChfUEFHRVMsIF9DT01QT05FTlRTLCB7IC4uLkRBVEEgfSk7XG4gICAgICBhd2FpdCBhY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgICByZW5kZXJEb21XaXRoVmFsaWRhdGlvbihcbiAgICAgICAgICA8Q2hlY2tZb3VyQW5zd2VycyBwYWdlcz17VF9QQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjeWEgPSBjaGVja0NZQShjb250YWluZXIpO1xuICAgICAgY29uc3QgWywgY3lhQ2hpbGROb2RlXSA9IGN5YS5jaGlsZE5vZGVzO1xuICAgICAgY29uc3QgbmFtZXMgPSBjeWFDaGlsZE5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChuYW1lcy50YWdOYW1lKS50b0VxdWFsKCdESVYnKTtcbiAgICAgIGV4cGVjdChuYW1lcy5jbGFzc0xpc3QpLnRvQ29udGFpbihgZ292dWstIS1tYXJnaW4tYm90dG9tLSR7REVGQVVMVF9NQVJHSU5fQk9UVE9NfWApO1xuICAgICAgY29uc3QgW2ZpcnN0TmFtZSwgc3VybmFtZV0gPSBuYW1lcy5jaGlsZE5vZGVzO1xuICAgICAgY29uc3QgW2xhYmVsXSA9IGZpcnN0TmFtZS5jaGlsZE5vZGVzO1xuICAgICAgZXhwZWN0KGxhYmVsLnRleHRDb250ZW50KS50b0VxdWFsKFwiXCIpO1xuICAgICAgY2hlY2tSb3coc3VybmFtZSwgJ0xhc3QgbmFtZScsICdTbWl0aCcsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2hvdyB0YXNrIGxpc3QgaW4gQ1lBIHN0eWxlIGFuZCBoaWRlIHBhZ2VzIGZyb20gc2tpcHBlZCB0YXNrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1RoZXNlIGFyZSB5b3VyIHRhc2tzJyxcbiAgICAgICAgICB0YXNrczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVGFzayAxJywgc3RhdGU6ICdjb21wbGV0ZScsIHBhZ2VzOiBbJ25hbWVzJ10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1Rhc2sgMicsIHN0YXRlOiAnc2tpcHBlZCcsIHBhZ2VzOiBbJ2dyYWRlJ10gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtQQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgc2VjdGlvbnM9e3NlY3Rpb25zfSB0eXBlPVwidGFzay1saXN0LWN5YVwiIC8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRhc2tIZWFkaW5nMSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRhZ05hbWUpLnRvRXF1YWwoJ0gyJyk7XG4gICAgICBleHBlY3QodGFza0hlYWRpbmcxLnRleHRDb250ZW50KS50b0VxdWFsKCdUYXNrIDEnKTtcbiAgICAgIGV4cGVjdCh0YXNrSGVhZGluZzEuY2xhc3NMaXN0KS50b0NvbnRhaW4oXCJnb3Z1ay1oZWFkaW5nLW1cIik7XG5cbiAgICAgIGNvbnN0IG5hbWVzUGFnZUhlYWRpbmcgPSBjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KG5hbWVzUGFnZUhlYWRpbmcudGFnTmFtZSkudG9FcXVhbCgnRElWJyk7XG4gICAgICBleHBlY3QobmFtZXNQYWdlSGVhZGluZy50ZXh0Q29udGVudCkudG9Db250YWluKCdKb2huJyk7XG4gICAgICBleHBlY3QobmFtZXNQYWdlSGVhZGluZy5jbGFzc0xpc3QpLnRvQ29udGFpbihcImdyb3VwLW9mLXJvd3NcIik7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gc2Vjb25kIHRhc2sgc2tpcHBlZCBzbyBub3Qgc2hvd24gXG5cbiAgICB9KTtcblxuICAgIGl0KCdTaG93IGFuc3dlcnMgZnJvbSBtdWx0aXBsZSBhZGRyZXNzIGZpZWxkcyBpbnRvIGluIG9uZSBETCBjb3JyZWN0bHkgd2hlbiBoaWRlQmxhbmtSb3dzIGlzIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBBRERSRVNTX0RBVEEgPSBVdGlscy5EYXRhLnNldHVwRm9ybShHUk9VUEVEX0FERFJFU1MucGFnZXMsIEdST1VQRURfQUREUkVTUy5jb21wb25lbnRzLCBHUk9VUEVEX0FERFJFU1NfREFUQV9KU09OKVxuICAgICAgY29uc3QgR1JPVVBfUEFHRVMgPSBVdGlscy5Gb3JtUGFnZS5nZXRBbGwoR1JPVVBFRF9BRERSRVNTLnBhZ2VzLCBHUk9VUEVEX0FERFJFU1MuY29tcG9uZW50cywgeyAuLi5BRERSRVNTX0RBVEEgfSk7XG5cbiAgICAgIGF3YWl0IGFjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbmRlckRvbVdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIDxDaGVja1lvdXJBbnN3ZXJzIHBhZ2VzPXtHUk9VUF9QQUdFU30gb25Sb3dBY3Rpb249e09OX1JPV19BQ1RJT059IG9uQWN0aW9uPXtPTl9BQ1RJT059IGhpZGVfdGl0bGUgaGlkZUJsYW5rUm93cy8+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN5YSA9IGNoZWNrQ1lBKGNvbnRhaW5lcik7XG4gICAgICBjb25zdCBncm91cGVkQ29tcG9uZW50ID0gY3lhLmNoaWxkTm9kZXNbNl07XG4gICAgICBjb25zdCBrZXlHcm91cCA9IGdyb3VwZWRDb21wb25lbnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF07XG4gICAgICBleHBlY3Qoa2V5R3JvdXAudGFnTmFtZSkudG9FcXVhbCgnRFQnKTtcbiAgICAgIGV4cGVjdChrZXlHcm91cC50ZXh0Q29udGVudCkudG9FcXVhbCgnQWRkcmVzcyBkZXRhaWxzJyk7XG5cbiAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlcy5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgICBleHBlY3QodmFsdWVHcm91cC50YWdOYW1lKS50b0VxdWFsKCdERCcpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCkudG9Db250YWluKCcxMCBEb3duaW5nIFN0cmVldCcpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCkudG9Db250YWluKCdDaXR5IG9mIFdlc3RtaW5zdGVyJyk7XG4gICAgICBleHBlY3QodmFsdWVHcm91cC5jaGlsZE5vZGVzWzJdLnRleHRDb250ZW50KS50b0NvbnRhaW4oJ0xvbmRvbicpO1xuICAgICAgZXhwZWN0KHZhbHVlR3JvdXAuY2hpbGROb2Rlc1szXS50ZXh0Q29udGVudCkudG9Db250YWluKCdTVzFBIDJBQScpO1xuXG4gICAgICBjb25zdCBjaGFuZ2VCdXR0b25EaXYgPSBncm91cGVkQ29tcG9uZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzJdO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbkRpdi5jbGFzc0xpc3QpLnRvQ29udGFpbignZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zJyk7XG4gICAgICBjb25zdCBjaGFuZ2VCdXR0b24gPSBjaGFuZ2VCdXR0b25EaXYuY2hpbGROb2Rlc1swXTtcbiAgICAgIGV4cGVjdChjaGFuZ2VCdXR0b24udGFnTmFtZSkudG9FcXVhbCgnQScpO1xuICAgICAgZXhwZWN0KGNoYW5nZUJ1dHRvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnQ2hhbmdlIGFkZHJlc3MgZGV0YWlscycpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG59KTtcbiJdLCJt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