@ukhomeoffice/cop-react-form-renderer 7.3.2 → 8.0.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +80 -167
  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,654 +0,0 @@
1
- "use strict";
2
-
3
- var _react = _interopRequireDefault(require("react"));
4
- var _copReactComponents = require("@ukhomeoffice/cop-react-components");
5
- var _setupTests = require("../../setupTests");
6
- var _SummaryCardDetails = _interopRequireWildcard(require("./SummaryCardDetails"));
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- 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); }
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- 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; }
11
- 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; }
12
- 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; }
13
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
- 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.
15
- // Local imports.
16
- describe('components.CollectionSummary.SummaryCardDetails', () => {
17
- const classes = _copReactComponents.Utils.classBuilder(_SummaryCardDetails.DEFAULT_CLASS, [], '');
18
- const ENTRY = {
19
- id: '001',
20
- bannerText: 'A banner',
21
- titleText: 'A title',
22
- detailsText: 'Some details',
23
- index: 0,
24
- summaryText: 'Full details',
25
- childCollection: [{
26
- id: '001',
27
- childField1: 'alpha',
28
- childField2: 'bravo'
29
- }, {
30
- id: '002',
31
- childField1: 'alpha',
32
- childField2: 'bravo'
33
- }]
34
- };
35
- it('should render sections and fields based on summaryLayout config', () => {
36
- const CHILD_PAGES = [{
37
- summaryLayout: {
38
- sections: [{
39
- title: 'Section 1',
40
- columns: [{
41
- fields: ['fieldA']
42
- }, {
43
- fields: ['fieldB']
44
- }]
45
- }, {
46
- title: 'Section 2',
47
- columns: [{
48
- fields: ['fieldC']
49
- }]
50
- }]
51
- },
52
- components: [{
53
- fieldId: 'fieldA'
54
- }, {
55
- fieldId: 'fieldB'
56
- }, {
57
- fieldId: 'fieldC'
58
- }]
59
- }];
60
- const MASTER_PAGE = {
61
- childPages: CHILD_PAGES
62
- };
63
- const {
64
- container
65
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
66
- masterPage: MASTER_PAGE,
67
- childMasterPages: [],
68
- formData: {},
69
- entryData: ENTRY
70
- }));
71
-
72
- // Function to find an element by its text content
73
- function getByTextContent(parent, text) {
74
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
75
- }
76
-
77
- // Check for section titles
78
- const section1Title = getByTextContent(container, 'Section 1');
79
- const section2Title = getByTextContent(container, 'Section 2');
80
- expect(section1Title).not.toBeUndefined();
81
- expect(section2Title).not.toBeUndefined();
82
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
83
- expect(section1Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(2);
84
- const section2Content = section2Title.parentNode.querySelector(".".concat(classes('section-content')));
85
- expect(section2Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1);
86
- });
87
- it('should render sections containing containers based on summaryLayout config', () => {
88
- const CHILD_PAGES = [{
89
- summaryLayout: {
90
- sections: [{
91
- title: 'Section 1',
92
- columns: [{
93
- fields: ['containerComponent']
94
- }]
95
- }]
96
- },
97
- components: [{
98
- fieldId: 'containerComponent',
99
- type: 'container',
100
- label: 'container',
101
- components: [{
102
- fieldId: 'subOne',
103
- label: 'subOneLabel'
104
- }, {
105
- fieldId: 'subTwo',
106
- label: 'subTwoLabel'
107
- }, {
108
- fieldId: 'subThree',
109
- label: 'subThreeLabel'
110
- }]
111
- }]
112
- }];
113
- const CONTAINER_ENTRY = {
114
- id: '001',
115
- bannerText: 'A banner',
116
- titleText: 'A title',
117
- detailsText: 'Some details',
118
- index: 0,
119
- summaryText: 'Full details',
120
- containerComponent: {
121
- subOne: 'alpha',
122
- subTwo: 'bravo',
123
- subThree: 'charlie'
124
- }
125
- };
126
- const MASTER_PAGE = {
127
- childPages: CHILD_PAGES
128
- };
129
- const {
130
- container
131
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
132
- masterPage: MASTER_PAGE,
133
- childMasterPages: [],
134
- formData: {},
135
- entryData: CONTAINER_ENTRY
136
- }));
137
-
138
- // Function to find an element by its text content
139
- function getByTextContent(parent, text) {
140
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
141
- }
142
-
143
- // Check for section title
144
- const section1Title = getByTextContent(container, 'Section 1');
145
- expect(section1Title).not.toBeUndefined();
146
-
147
- // All three subcomponents from the container should have labels and values displayed
148
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
149
- expect(section1Content.textContent).toContain('subOneLabel');
150
- expect(section1Content.textContent).toContain('alpha');
151
- expect(section1Content.textContent).toContain('subTwoLabel');
152
- expect(section1Content.textContent).toContain('bravo');
153
- expect(section1Content.textContent).toContain('subThreeLabel');
154
- expect(section1Content.textContent).toContain('charlie');
155
- });
156
- it('should render sections containing collections with dynamic titles based on summaryLayout config', () => {
157
- const FORM_DATA = {
158
- dummyTitleContent: "Kellogg's"
159
- };
160
- const CHILD_PAGES = [{
161
- summaryLayout: {
162
- sections: [{
163
- // eslint-disable-next-line no-template-curly-in-string
164
- title: 'Section 1 - ${dummyTitleContent}',
165
- columns: [{
166
- fields: ['collectionComponent']
167
- }]
168
- }]
169
- },
170
- formData: FORM_DATA,
171
- components: [{
172
- fieldId: 'collectionComponent',
173
- id: 'collectionComponent',
174
- type: 'collection',
175
- label: 'Collection',
176
- labels: {
177
- item: 'north'
178
- },
179
- item: [{
180
- id: 'north',
181
- fieldId: 'north',
182
- type: 'text',
183
- label: 'North',
184
- required: true
185
- }, {
186
- id: 'east',
187
- fieldId: 'east',
188
- type: 'text',
189
- label: 'East',
190
- required: true
191
- }, {
192
- id: 'south',
193
- fieldId: 'south',
194
- type: 'text',
195
- label: 'South',
196
- required: true
197
- }, {
198
- id: 'west',
199
- fieldId: 'west',
200
- type: 'text',
201
- label: 'West',
202
- required: true
203
- }]
204
- }]
205
- }];
206
- const COLLECTION_ENTRY = {
207
- summaryText: 'Full details',
208
- collectionComponent: [{
209
- north: 'Never',
210
- east: 'Eat',
211
- south: 'Shredded',
212
- west: 'Wheat'
213
- }]
214
- };
215
- const MASTER_PAGE = {
216
- childPages: CHILD_PAGES
217
- };
218
- const {
219
- container
220
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
221
- masterPage: MASTER_PAGE,
222
- childMasterPages: [],
223
- formData: {},
224
- entryData: COLLECTION_ENTRY
225
- }));
226
-
227
- // Check for section title
228
- const section1Title = container.querySelector(".".concat(classes('section-title')));
229
- expect(section1Title).not.toBeUndefined();
230
-
231
- // Check for embedded variables in title
232
- expect(section1Title.textContent).toEqual("Section 1 - Kellogg's");
233
-
234
- // All four subcomponents from the container should have labels and values displayed
235
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
236
- expect(section1Content.textContent).toContain('North');
237
- expect(section1Content.textContent).toContain('Never');
238
- expect(section1Content.textContent).toContain('East');
239
- expect(section1Content.textContent).toContain('Eat');
240
- expect(section1Content.textContent).toContain('South');
241
- expect(section1Content.textContent).toContain('Shredded');
242
- expect(section1Content.textContent).toContain('West');
243
- expect(section1Content.textContent).toContain('Wheat');
244
- });
245
- it('should render sections if they have show_when checks and pass them', () => {
246
- const CHILD_PAGES = [{
247
- summaryLayout: {
248
- sections: [{
249
- title: 'Section 1',
250
- columns: [{
251
- fields: ['fieldA']
252
- }, {
253
- fields: ['fieldB']
254
- }],
255
- show_when: [{
256
- field: 'showSection1',
257
- op: "=",
258
- value: true
259
- }]
260
- }, {
261
- title: 'Section 2',
262
- columns: [{
263
- fields: ['fieldC']
264
- }]
265
- }]
266
- },
267
- components: [{
268
- fieldId: 'fieldA'
269
- }, {
270
- fieldId: 'fieldB'
271
- }, {
272
- fieldId: 'fieldC'
273
- }]
274
- }];
275
- const MASTER_PAGE = {
276
- childPages: CHILD_PAGES
277
- };
278
- const CUSTOM_ENTRY = _objectSpread(_objectSpread({}, ENTRY), {}, {
279
- showSection1: true
280
- });
281
- const {
282
- container
283
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
284
- masterPage: MASTER_PAGE,
285
- childMasterPages: [],
286
- formData: {},
287
- entryData: CUSTOM_ENTRY
288
- }));
289
-
290
- // Function to find an element by its text content
291
- function getByTextContent(parent, text) {
292
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
293
- }
294
-
295
- // Check for section titles
296
- const section1Title = getByTextContent(container, 'Section 1');
297
- const section2Title = getByTextContent(container, 'Section 2');
298
- expect(section1Title).not.toBeUndefined();
299
- expect(section2Title).not.toBeUndefined();
300
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
301
- expect(section1Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(2);
302
- const section2Content = section2Title.parentNode.querySelector(".".concat(classes('section-content')));
303
- expect(section2Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1);
304
- });
305
- it('should not render sections if they have show_when checks and fail them', () => {
306
- const CHILD_PAGES = [{
307
- summaryLayout: {
308
- sections: [{
309
- title: 'Section 1',
310
- columns: [{
311
- fields: ['fieldA']
312
- }, {
313
- fields: ['fieldB']
314
- }],
315
- show_when: [{
316
- field: 'showSection1',
317
- op: "=",
318
- value: true
319
- }]
320
- }, {
321
- title: 'Section 2',
322
- columns: [{
323
- fields: ['fieldC']
324
- }]
325
- }]
326
- },
327
- components: [{
328
- fieldId: 'fieldA'
329
- }, {
330
- fieldId: 'fieldB'
331
- }, {
332
- fieldId: 'fieldC'
333
- }]
334
- }];
335
- const MASTER_PAGE = {
336
- childPages: CHILD_PAGES
337
- };
338
- const CUSTOM_ENTRY = _objectSpread(_objectSpread({}, ENTRY), {}, {
339
- showSection1: false
340
- });
341
- const {
342
- container
343
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
344
- masterPage: MASTER_PAGE,
345
- childMasterPages: [],
346
- formData: {},
347
- entryData: CUSTOM_ENTRY
348
- }));
349
-
350
- // Function to find an element by its text content
351
- function getByTextContent(parent, text) {
352
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
353
- }
354
-
355
- // Check for section titles
356
- const section1Title = getByTextContent(container, 'Section 1');
357
- const section2Title = getByTextContent(container, 'Section 2');
358
- expect(section1Title).toBeUndefined();
359
- expect(section2Title).not.toBeUndefined();
360
- const section2Content = section2Title.parentNode.querySelector(".".concat(classes('section-content')));
361
- expect(section2Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1);
362
- });
363
- it('should not render components that fail show_when checks', () => {
364
- const CHILD_PAGES = [{
365
- summaryLayout: {
366
- sections: [{
367
- title: 'Section 1',
368
- columns: [{
369
- fields: ['fieldA']
370
- }, {
371
- fields: ['fieldB']
372
- }]
373
- }, {
374
- title: 'Section 2',
375
- columns: [{
376
- fields: ['fieldC']
377
- }]
378
- }]
379
- },
380
- components: [{
381
- fieldId: 'fieldA'
382
- }, {
383
- fieldId: 'fieldB',
384
- show_when: [{
385
- field: 'fieldA',
386
- op: '=',
387
- value: 'notTheRightValue'
388
- }]
389
- }, {
390
- fieldId: 'fieldC'
391
- }]
392
- }];
393
- const MASTER_PAGE = {
394
- childPages: CHILD_PAGES
395
- };
396
- const {
397
- container
398
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
399
- masterPage: MASTER_PAGE,
400
- childMasterPages: [],
401
- formData: {},
402
- entryData: ENTRY
403
- }));
404
-
405
- // Function to find an element by its text content
406
- function getByTextContent(parent, text) {
407
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
408
- }
409
-
410
- // Check for section titles
411
- const section1Title = getByTextContent(container, 'Section 1');
412
- const section2Title = getByTextContent(container, 'Section 2');
413
- expect(section1Title).not.toBeUndefined();
414
- expect(section2Title).not.toBeUndefined();
415
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
416
- expect(section1Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1); // Just Field A, Field B should be hidden.
417
-
418
- const section2Content = section2Title.parentNode.querySelector(".".concat(classes('section-content')));
419
- expect(section2Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1);
420
- });
421
- it('should not render sections on pages that fail show_when checks', () => {
422
- const CHILD_PAGES = [{
423
- show_when: [{
424
- field: 'testField',
425
- op: '=',
426
- value: true
427
- }],
428
- summaryLayout: {
429
- sections: [{
430
- title: 'Section 1',
431
- columns: [{
432
- fields: ['fieldA']
433
- }, {
434
- fields: ['fieldB']
435
- }],
436
- show_when: [{
437
- field: 'showSection1',
438
- op: "=",
439
- value: true
440
- }]
441
- }, {
442
- title: 'Section 2',
443
- columns: [{
444
- fields: ['fieldC']
445
- }]
446
- }]
447
- },
448
- components: [{
449
- fieldId: 'fieldA'
450
- }, {
451
- fieldId: 'fieldB'
452
- }, {
453
- fieldId: 'fieldC'
454
- }]
455
- }];
456
- const MASTER_PAGE = {
457
- childPages: CHILD_PAGES
458
- };
459
- const CUSTOM_ENTRY = _objectSpread(_objectSpread({}, ENTRY), {}, {
460
- showSection1: false
461
- });
462
- const {
463
- container
464
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
465
- masterPage: MASTER_PAGE,
466
- childMasterPages: [],
467
- formData: {
468
- testField: false
469
- },
470
- entryData: CUSTOM_ENTRY
471
- }));
472
-
473
- // Function to find an element by its text content
474
- function getByTextContent(parent, text) {
475
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
476
- }
477
-
478
- // Check for section titles
479
- const section1Title = getByTextContent(container, 'Section 1');
480
- const section2Title = getByTextContent(container, 'Section 2');
481
- expect(section1Title).toBeUndefined();
482
- expect(section2Title).toBeUndefined();
483
- });
484
- it('should not render columns that fail show_when checks', () => {
485
- const CHILD_PAGES = [{
486
- summaryLayout: {
487
- sections: [{
488
- title: 'Section 1',
489
- columns: [{
490
- fields: ['fieldA'],
491
- show_when: [{
492
- field: 'showSection1',
493
- op: '=',
494
- value: true
495
- }]
496
- }, {
497
- fields: ['fieldB']
498
- }]
499
- }]
500
- },
501
- components: [{
502
- fieldId: 'fieldA',
503
- label: 'fieldA'
504
- }, {
505
- fieldId: 'fieldB',
506
- label: 'fieldB'
507
- }]
508
- }];
509
- const MASTER_PAGE = {
510
- childPages: CHILD_PAGES
511
- };
512
- const {
513
- container
514
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
515
- masterPage: MASTER_PAGE,
516
- childMasterPages: [],
517
- formData: {
518
- testField: false
519
- },
520
- entryData: ENTRY
521
- }));
522
-
523
- // Function to find an element by its text content
524
- function getByTextContent(parent, text) {
525
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
526
- }
527
-
528
- // Check for section titles
529
- const section1Title = getByTextContent(container, 'Section 1');
530
- expect(section1Title).toBeDefined();
531
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
532
- expect(section1Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(1);
533
- });
534
- it('should render child collections', () => {
535
- const CHILD_MASTER_PAGES = [{
536
- collection: {
537
- name: 'childCollection'
538
- },
539
- childPages: [{
540
- components: [{
541
- fieldId: 'childField1'
542
- }, {
543
- fieldId: 'childField2'
544
- }],
545
- summaryLayout: {
546
- sections: [{
547
- title: 'Hidden Title',
548
- columns: [{
549
- fields: ['childfield1']
550
- }, {
551
- fields: ['childfield2']
552
- }]
553
- }]
554
- }
555
- }]
556
- }];
557
- const CHILD_PAGES = [{
558
- summaryLayout: {
559
- sections: [{
560
- type: 'childCollection',
561
- collectionName: 'childCollection',
562
- title: 'Children'
563
- }]
564
- },
565
- components: [{
566
- fieldId: 'fieldA'
567
- }, {
568
- fieldId: 'fieldB'
569
- }, {
570
- fieldId: 'fieldC'
571
- }]
572
- }];
573
- const MASTER_PAGE = {
574
- childPages: [].concat(CHILD_PAGES, CHILD_MASTER_PAGES)
575
- };
576
- const CHILD_COLLECTIONS = ['childCollection'];
577
- const {
578
- container
579
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
580
- masterPage: MASTER_PAGE,
581
- childCollections: CHILD_COLLECTIONS,
582
- formData: {},
583
- entryData: ENTRY
584
- }));
585
-
586
- // Function to find an element by its text content
587
- function getByTextContent(parent, text) {
588
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
589
- }
590
- const childCollectionSectionTitle = getByTextContent(container, 'Children');
591
- expect(childCollectionSectionTitle).not.toBeUndefined();
592
- const childSectionTitles = getByTextContent(container, 'Hidden Title');
593
- expect(childSectionTitles).toBeUndefined(); // Individual section title for child collections should be hidden.
594
-
595
- const childFields = container.querySelectorAll(".".concat(classes('section')));
596
- expect(childFields.length).toEqual(2); // One for each entry in the child collection.
597
- });
598
- it('should render components if a component with the same ID has already failed a show_when', () => {
599
- const CHILD_PAGES = [{
600
- summaryLayout: {
601
- sections: [{
602
- title: 'Section 1',
603
- columns: [{
604
- fields: ['fieldA']
605
- }, {
606
- fields: ['fieldB']
607
- }]
608
- }]
609
- },
610
- components: [{
611
- fieldId: 'fieldA'
612
- }, {
613
- fieldId: 'fieldB',
614
- label: 'first',
615
- show_when: [{
616
- field: 'fieldA',
617
- op: '=',
618
- value: 'notTheRightValue'
619
- }]
620
- }, {
621
- fieldId: 'fieldB',
622
- label: 'second',
623
- show_when: [{
624
- field: 'fieldA',
625
- op: '!=',
626
- value: 'notTheRightValue'
627
- }]
628
- }]
629
- }];
630
- const MASTER_PAGE = {
631
- childPages: CHILD_PAGES
632
- };
633
- const {
634
- container
635
- } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SummaryCardDetails.default, {
636
- masterPage: MASTER_PAGE,
637
- childMasterPages: [],
638
- formData: {},
639
- entryData: _objectSpread(_objectSpread({}, ENTRY), {}, {
640
- fieldA: 'notTheRightValue'
641
- })
642
- }));
643
-
644
- // Function to find an element by its text content
645
- function getByTextContent(parent, text) {
646
- return Array.from(parent.getElementsByClassName(classes('section-title'))).find(el => el.textContent === text);
647
- }
648
- const section1Title = getByTextContent(container, 'Section 1');
649
- expect(section1Title).not.toBeUndefined();
650
- const section1Content = section1Title.parentNode.querySelector(".".concat(classes('section-content')));
651
- expect(section1Content.querySelectorAll(".".concat(classes('field'))).length).toEqual(2);
652
- });
653
- });
654
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb3BSZWFjdENvbXBvbmVudHMiLCJfc2V0dXBUZXN0cyIsIl9TdW1tYXJ5Q2FyZERldGFpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9qc3hSdW50aW1lIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiZGVzY3JpYmUiLCJjbGFzc2VzIiwiVXRpbHMiLCJjbGFzc0J1aWxkZXIiLCJERUZBVUxUX0NMQVNTIiwiRU5UUlkiLCJpZCIsImJhbm5lclRleHQiLCJ0aXRsZVRleHQiLCJkZXRhaWxzVGV4dCIsImluZGV4Iiwic3VtbWFyeVRleHQiLCJjaGlsZENvbGxlY3Rpb24iLCJjaGlsZEZpZWxkMSIsImNoaWxkRmllbGQyIiwiaXQiLCJDSElMRF9QQUdFUyIsInN1bW1hcnlMYXlvdXQiLCJzZWN0aW9ucyIsInRpdGxlIiwiY29sdW1ucyIsImZpZWxkcyIsImNvbXBvbmVudHMiLCJmaWVsZElkIiwiTUFTVEVSX1BBR0UiLCJjaGlsZFBhZ2VzIiwiY29udGFpbmVyIiwicmVuZGVyV2l0aFZhbGlkYXRpb24iLCJqc3giLCJtYXN0ZXJQYWdlIiwiY2hpbGRNYXN0ZXJQYWdlcyIsImZvcm1EYXRhIiwiZW50cnlEYXRhIiwiZ2V0QnlUZXh0Q29udGVudCIsInBhcmVudCIsInRleHQiLCJBcnJheSIsImZyb20iLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZmluZCIsImVsIiwidGV4dENvbnRlbnQiLCJzZWN0aW9uMVRpdGxlIiwic2VjdGlvbjJUaXRsZSIsImV4cGVjdCIsIm5vdCIsInRvQmVVbmRlZmluZWQiLCJzZWN0aW9uMUNvbnRlbnQiLCJwYXJlbnROb2RlIiwicXVlcnlTZWxlY3RvciIsImNvbmNhdCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ0b0VxdWFsIiwic2VjdGlvbjJDb250ZW50IiwidHlwZSIsImxhYmVsIiwiQ09OVEFJTkVSX0VOVFJZIiwiY29udGFpbmVyQ29tcG9uZW50Iiwic3ViT25lIiwic3ViVHdvIiwic3ViVGhyZWUiLCJ0b0NvbnRhaW4iLCJGT1JNX0RBVEEiLCJkdW1teVRpdGxlQ29udGVudCIsImxhYmVscyIsIml0ZW0iLCJyZXF1aXJlZCIsIkNPTExFQ1RJT05fRU5UUlkiLCJjb2xsZWN0aW9uQ29tcG9uZW50Iiwibm9ydGgiLCJlYXN0Iiwic291dGgiLCJ3ZXN0Iiwic2hvd193aGVuIiwiZmllbGQiLCJvcCIsIkNVU1RPTV9FTlRSWSIsInNob3dTZWN0aW9uMSIsInRlc3RGaWVsZCIsInRvQmVEZWZpbmVkIiwiQ0hJTERfTUFTVEVSX1BBR0VTIiwiY29sbGVjdGlvbiIsIm5hbWUiLCJjb2xsZWN0aW9uTmFtZSIsIkNISUxEX0NPTExFQ1RJT05TIiwiY2hpbGRDb2xsZWN0aW9ucyIsImNoaWxkQ29sbGVjdGlvblNlY3Rpb25UaXRsZSIsImNoaWxkU2VjdGlvblRpdGxlcyIsImNoaWxkRmllbGRzIiwiZmllbGRBIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvQ29sbGVjdGlvblN1bW1hcnkvU3VtbWFyeUNhcmREZXRhaWxzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gR2xvYmFsIGltcG9ydHMuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICdAdWtob21lb2ZmaWNlL2NvcC1yZWFjdC1jb21wb25lbnRzJztcblxuLy8gTG9jYWwgaW1wb3J0cy5cbmltcG9ydCB7IHJlbmRlcldpdGhWYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vc2V0dXBUZXN0cyc7XG5pbXBvcnQgU3VtbWFyeUNhcmREZXRhaWxzLCB7REVGQVVMVF9DTEFTU30gZnJvbSBcIi4vU3VtbWFyeUNhcmREZXRhaWxzXCI7XG5cbmRlc2NyaWJlKCdjb21wb25lbnRzLkNvbGxlY3Rpb25TdW1tYXJ5LlN1bW1hcnlDYXJkRGV0YWlscycsICgpID0+IHtcblxuICBjb25zdCBjbGFzc2VzID0gVXRpbHMuY2xhc3NCdWlsZGVyKERFRkFVTFRfQ0xBU1MsIFtdLCAnJyk7XG4gIGNvbnN0IEVOVFJZID0ge1xuICAgIGlkOiAnMDAxJyxcbiAgICBiYW5uZXJUZXh0OiAnQSBiYW5uZXInLFxuICAgIHRpdGxlVGV4dDogJ0EgdGl0bGUnLFxuICAgIGRldGFpbHNUZXh0OiAnU29tZSBkZXRhaWxzJyxcbiAgICBpbmRleDogMCxcbiAgICBzdW1tYXJ5VGV4dDogJ0Z1bGwgZGV0YWlscycsXG4gICAgY2hpbGRDb2xsZWN0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMDAxJyxcbiAgICAgICAgY2hpbGRGaWVsZDE6ICdhbHBoYScsXG4gICAgICAgIGNoaWxkRmllbGQyOiAnYnJhdm8nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzAwMicsXG4gICAgICAgIGNoaWxkRmllbGQxOiAnYWxwaGEnLFxuICAgICAgICBjaGlsZEZpZWxkMjogJ2JyYXZvJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBpdCgnc2hvdWxkIHJlbmRlciBzZWN0aW9ucyBhbmQgZmllbGRzIGJhc2VkIG9uIHN1bW1hcnlMYXlvdXQgY29uZmlnJywgKCkgPT4ge1xuICAgIGNvbnN0IENISUxEX1BBR0VTID0gW1xuICAgICAge1xuICAgICAgICBzdW1tYXJ5TGF5b3V0OiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdTZWN0aW9uIDEnLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRBJ10gfSxcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEInXSB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ1NlY3Rpb24gMicsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEMnXSB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdmaWVsZEEnIH0sXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRCJyB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgICAgY2hpbGRQYWdlczogQ0hJTERfUEFHRVNcbiAgICB9O1xuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhWYWxpZGF0aW9uKFxuICAgICAgPFN1bW1hcnlDYXJkRGV0YWlscyBtYXN0ZXJQYWdlPXtNQVNURVJfUEFHRX0gY2hpbGRNYXN0ZXJQYWdlcz17W119IGZvcm1EYXRhPXt7fX0gZW50cnlEYXRhPXtFTlRSWX0gLz5cbiAgICApO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gZmluZCBhbiBlbGVtZW50IGJ5IGl0cyB0ZXh0IGNvbnRlbnRcbiAgICBmdW5jdGlvbiBnZXRCeVRleHRDb250ZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcygnc2VjdGlvbi10aXRsZScpKSkuZmluZChlbCA9PiBlbC50ZXh0Q29udGVudCA9PT0gdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNlY3Rpb24gdGl0bGVzXG4gICAgY29uc3Qgc2VjdGlvbjFUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAxJyk7XG4gICAgY29uc3Qgc2VjdGlvbjJUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAyJyk7XG5cbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHNlY3Rpb24xQ29udGVudCA9IHNlY3Rpb24xVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDIpO1xuXG4gICAgY29uc3Qgc2VjdGlvbjJDb250ZW50ID0gc2VjdGlvbjJUaXRsZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYC4ke2NsYXNzZXMoJ3NlY3Rpb24tY29udGVudCcpfWApO1xuICAgIGV4cGVjdChzZWN0aW9uMkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Y2xhc3NlcygnZmllbGQnKX1gKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVuZGVyIHNlY3Rpb25zIGNvbnRhaW5pbmcgY29udGFpbmVycyBiYXNlZCBvbiBzdW1tYXJ5TGF5b3V0IGNvbmZpZycsICgpID0+IHtcbiAgICBjb25zdCBDSElMRF9QQUdFUyA9IFtcbiAgICAgIHtcbiAgICAgICAgc3VtbWFyeUxheW91dDoge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnU2VjdGlvbiAxJyxcbiAgICAgICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAgICAgIHsgZmllbGRzOiBbJ2NvbnRhaW5lckNvbXBvbmVudCddIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGRJZDogJ2NvbnRhaW5lckNvbXBvbmVudCcsXG4gICAgICAgICAgICB0eXBlOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIGxhYmVsOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpZWxkSWQ6ICdzdWJPbmUnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnc3ViT25lTGFiZWwnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWVsZElkOiAnc3ViVHdvJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ3N1YlR3b0xhYmVsJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmllbGRJZDogJ3N1YlRocmVlJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ3N1YlRocmVlTGFiZWwnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBDT05UQUlORVJfRU5UUlkgPSB7XG4gICAgICBpZDogJzAwMScsXG4gICAgICBiYW5uZXJUZXh0OiAnQSBiYW5uZXInLFxuICAgICAgdGl0bGVUZXh0OiAnQSB0aXRsZScsXG4gICAgICBkZXRhaWxzVGV4dDogJ1NvbWUgZGV0YWlscycsXG4gICAgICBpbmRleDogMCxcbiAgICAgIHN1bW1hcnlUZXh0OiAnRnVsbCBkZXRhaWxzJyxcbiAgICAgIGNvbnRhaW5lckNvbXBvbmVudDoge1xuICAgICAgICBzdWJPbmU6ICdhbHBoYScsXG4gICAgICAgIHN1YlR3bzogJ2JyYXZvJyxcbiAgICAgICAgc3ViVGhyZWU6ICdjaGFybGllJyxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgTUFTVEVSX1BBR0UgPSB7XG4gICAgICBjaGlsZFBhZ2VzOiBDSElMRF9QQUdFU1xuICAgIH07XG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFZhbGlkYXRpb24oXG4gICAgICA8U3VtbWFyeUNhcmREZXRhaWxzIG1hc3RlclBhZ2U9e01BU1RFUl9QQUdFfSBjaGlsZE1hc3RlclBhZ2VzPXtbXX0gZm9ybURhdGE9e3t9fSBlbnRyeURhdGE9e0NPTlRBSU5FUl9FTlRSWX0gLz5cbiAgICApO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gZmluZCBhbiBlbGVtZW50IGJ5IGl0cyB0ZXh0IGNvbnRlbnRcbiAgICBmdW5jdGlvbiBnZXRCeVRleHRDb250ZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcygnc2VjdGlvbi10aXRsZScpKSkuZmluZChlbCA9PiBlbC50ZXh0Q29udGVudCA9PT0gdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNlY3Rpb24gdGl0bGVcbiAgICBjb25zdCBzZWN0aW9uMVRpdGxlID0gZ2V0QnlUZXh0Q29udGVudChjb250YWluZXIsICdTZWN0aW9uIDEnKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIC8vIEFsbCB0aHJlZSBzdWJjb21wb25lbnRzIGZyb20gdGhlIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBsYWJlbHMgYW5kIHZhbHVlcyBkaXNwbGF5ZWRcbiAgICBjb25zdCBzZWN0aW9uMUNvbnRlbnQgPSBzZWN0aW9uMVRpdGxlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3Nlcygnc2VjdGlvbi1jb250ZW50Jyl9YCk7XG4gICAgZXhwZWN0KHNlY3Rpb24xQ29udGVudC50ZXh0Q29udGVudCkudG9Db250YWluKCdzdWJPbmVMYWJlbCcpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignYWxwaGEnKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnRleHRDb250ZW50KS50b0NvbnRhaW4oJ3N1YlR3b0xhYmVsJyk7XG4gICAgZXhwZWN0KHNlY3Rpb24xQ29udGVudC50ZXh0Q29udGVudCkudG9Db250YWluKCdicmF2bycpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignc3ViVGhyZWVMYWJlbCcpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignY2hhcmxpZScpO1xuXG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVuZGVyIHNlY3Rpb25zIGNvbnRhaW5pbmcgY29sbGVjdGlvbnMgd2l0aCBkeW5hbWljIHRpdGxlcyBiYXNlZCBvbiBzdW1tYXJ5TGF5b3V0IGNvbmZpZycsICgpID0+IHtcblxuICAgIGNvbnN0IEZPUk1fREFUQSA9IHtcbiAgICAgIGR1bW15VGl0bGVDb250ZW50OiBcIktlbGxvZ2cnc1wiXG4gICAgfVxuXG4gICAgY29uc3QgQ0hJTERfUEFHRVMgPSBbXG4gICAgICB7XG4gICAgICAgIHN1bW1hcnlMYXlvdXQ6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nXG4gICAgICAgICAgICAgIHRpdGxlOiAnU2VjdGlvbiAxIC0gJHtkdW1teVRpdGxlQ29udGVudH0nLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnY29sbGVjdGlvbkNvbXBvbmVudCddIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBmb3JtRGF0YTogRk9STV9EQVRBLFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGRJZDogJ2NvbGxlY3Rpb25Db21wb25lbnQnLFxuICAgICAgICAgICAgaWQ6ICdjb2xsZWN0aW9uQ29tcG9uZW50JyxcbiAgICAgICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGxhYmVsOiAnQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgICAgaXRlbTogJ25vcnRoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW06IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnbm9ydGgnLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6ICdub3J0aCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnTm9ydGgnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ2Vhc3QnLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6ICdlYXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFYXN0JyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICdzb3V0aCcsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogJ3NvdXRoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdTb3V0aCcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnd2VzdCcsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogJ3dlc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1dlc3QnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IENPTExFQ1RJT05fRU5UUlkgPSB7XG4gICAgICBzdW1tYXJ5VGV4dDogJ0Z1bGwgZGV0YWlscycsXG4gICAgICBjb2xsZWN0aW9uQ29tcG9uZW50OiBbe1xuICAgICAgICBub3J0aDogJ05ldmVyJyxcbiAgICAgICAgZWFzdDogJ0VhdCcsXG4gICAgICAgIHNvdXRoOiAnU2hyZWRkZWQnLFxuICAgICAgICB3ZXN0OiAnV2hlYXQnXG4gICAgICB9XVxuICAgIH07XG5cbiAgICBjb25zdCBNQVNURVJfUEFHRSA9IHtcbiAgICAgIGNoaWxkUGFnZXM6IENISUxEX1BBR0VTLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFZhbGlkYXRpb24oXG4gICAgICA8U3VtbWFyeUNhcmREZXRhaWxzIG1hc3RlclBhZ2U9e01BU1RFUl9QQUdFfSBjaGlsZE1hc3RlclBhZ2VzPXtbXX0gZm9ybURhdGE9e3t9fSBlbnRyeURhdGE9e0NPTExFQ1RJT05fRU5UUll9IC8+XG4gICAgKTtcblxuICAgIC8vIENoZWNrIGZvciBzZWN0aW9uIHRpdGxlXG4gICAgY29uc3Qgc2VjdGlvbjFUaXRsZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLXRpdGxlJyl9YClcbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIC8vIENoZWNrIGZvciBlbWJlZGRlZCB2YXJpYWJsZXMgaW4gdGl0bGVcbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZS50ZXh0Q29udGVudCkudG9FcXVhbChgU2VjdGlvbiAxIC0gS2VsbG9nZydzYClcblxuICAgIC8vIEFsbCBmb3VyIHN1YmNvbXBvbmVudHMgZnJvbSB0aGUgY29udGFpbmVyIHNob3VsZCBoYXZlIGxhYmVscyBhbmQgdmFsdWVzIGRpc3BsYXllZFxuICAgIGNvbnN0IHNlY3Rpb24xQ29udGVudCA9IHNlY3Rpb24xVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnRleHRDb250ZW50KS50b0NvbnRhaW4oJ05vcnRoJyk7XG4gICAgZXhwZWN0KHNlY3Rpb24xQ29udGVudC50ZXh0Q29udGVudCkudG9Db250YWluKCdOZXZlcicpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignRWFzdCcpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignRWF0Jyk7XG4gICAgZXhwZWN0KHNlY3Rpb24xQ29udGVudC50ZXh0Q29udGVudCkudG9Db250YWluKCdTb3V0aCcpO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQudGV4dENvbnRlbnQpLnRvQ29udGFpbignU2hyZWRkZWQnKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnRleHRDb250ZW50KS50b0NvbnRhaW4oJ1dlc3QnKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnRleHRDb250ZW50KS50b0NvbnRhaW4oJ1doZWF0Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVuZGVyIHNlY3Rpb25zIGlmIHRoZXkgaGF2ZSBzaG93X3doZW4gY2hlY2tzIGFuZCBwYXNzIHRoZW0nLCAoKSA9PiB7XG4gICAgY29uc3QgQ0hJTERfUEFHRVMgPSBbXG4gICAgICB7XG4gICAgICAgIHN1bW1hcnlMYXlvdXQ6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ1NlY3Rpb24gMScsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEEnXSB9LFxuICAgICAgICAgICAgICAgIHsgZmllbGRzOiBbJ2ZpZWxkQiddIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHNob3dfd2hlbjogW3tcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3Nob3dTZWN0aW9uMScsXG4gICAgICAgICAgICAgICAgb3A6IFwiPVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ1NlY3Rpb24gMicsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEMnXSB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdmaWVsZEEnIH0sXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRCJyB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgICAgY2hpbGRQYWdlczogQ0hJTERfUEFHRVNcbiAgICB9O1xuXG4gICAgY29uc3QgQ1VTVE9NX0VOVFJZID0geyAuLi5FTlRSWSwgc2hvd1NlY3Rpb24xOiB0cnVlIH07XG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFZhbGlkYXRpb24oXG4gICAgICA8U3VtbWFyeUNhcmREZXRhaWxzIG1hc3RlclBhZ2U9e01BU1RFUl9QQUdFfSBjaGlsZE1hc3RlclBhZ2VzPXtbXX0gZm9ybURhdGE9e3t9fSBlbnRyeURhdGE9e0NVU1RPTV9FTlRSWX0gLz5cbiAgICApO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gZmluZCBhbiBlbGVtZW50IGJ5IGl0cyB0ZXh0IGNvbnRlbnRcbiAgICBmdW5jdGlvbiBnZXRCeVRleHRDb250ZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcygnc2VjdGlvbi10aXRsZScpKSkuZmluZChlbCA9PiBlbC50ZXh0Q29udGVudCA9PT0gdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNlY3Rpb24gdGl0bGVzXG4gICAgY29uc3Qgc2VjdGlvbjFUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAxJyk7XG4gICAgY29uc3Qgc2VjdGlvbjJUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAyJyk7XG5cbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHNlY3Rpb24xQ29udGVudCA9IHNlY3Rpb24xVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDIpO1xuXG4gICAgY29uc3Qgc2VjdGlvbjJDb250ZW50ID0gc2VjdGlvbjJUaXRsZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYC4ke2NsYXNzZXMoJ3NlY3Rpb24tY29udGVudCcpfWApO1xuICAgIGV4cGVjdChzZWN0aW9uMkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Y2xhc3NlcygnZmllbGQnKX1gKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IHJlbmRlciBzZWN0aW9ucyBpZiB0aGV5IGhhdmUgc2hvd193aGVuIGNoZWNrcyBhbmQgZmFpbCB0aGVtJywgKCkgPT4ge1xuICAgIGNvbnN0IENISUxEX1BBR0VTID0gW1xuICAgICAge1xuICAgICAgICBzdW1tYXJ5TGF5b3V0OiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdTZWN0aW9uIDEnLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRBJ10gfSxcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEInXSB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHNob3dfd2hlbjogW3tcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3Nob3dTZWN0aW9uMScsXG4gICAgICAgICAgICAgICAgb3A6IFwiPVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ1NlY3Rpb24gMicsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEMnXSB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdmaWVsZEEnIH0sXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRCJyB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgICAgY2hpbGRQYWdlczogQ0hJTERfUEFHRVNcbiAgICB9O1xuXG4gICAgY29uc3QgQ1VTVE9NX0VOVFJZID0geyAuLi5FTlRSWSwgc2hvd1NlY3Rpb24xOiBmYWxzZSB9O1xuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhWYWxpZGF0aW9uKFxuICAgICAgPFN1bW1hcnlDYXJkRGV0YWlscyBtYXN0ZXJQYWdlPXtNQVNURVJfUEFHRX0gY2hpbGRNYXN0ZXJQYWdlcz17W119IGZvcm1EYXRhPXt7fX0gZW50cnlEYXRhPXtDVVNUT01fRU5UUll9IC8+XG4gICAgKTtcblxuICAgIC8vIEZ1bmN0aW9uIHRvIGZpbmQgYW4gZWxlbWVudCBieSBpdHMgdGV4dCBjb250ZW50XG4gICAgZnVuY3Rpb24gZ2V0QnlUZXh0Q29udGVudChwYXJlbnQsIHRleHQpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzZXMoJ3NlY3Rpb24tdGl0bGUnKSkpLmZpbmQoZWwgPT4gZWwudGV4dENvbnRlbnQgPT09IHRleHQpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBzZWN0aW9uIHRpdGxlc1xuICAgIGNvbnN0IHNlY3Rpb24xVGl0bGUgPSBnZXRCeVRleHRDb250ZW50KGNvbnRhaW5lciwgJ1NlY3Rpb24gMScpO1xuICAgIGNvbnN0IHNlY3Rpb24yVGl0bGUgPSBnZXRCeVRleHRDb250ZW50KGNvbnRhaW5lciwgJ1NlY3Rpb24gMicpO1xuXG4gICAgZXhwZWN0KHNlY3Rpb24xVGl0bGUpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHNlY3Rpb24yQ29udGVudCA9IHNlY3Rpb24yVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCByZW5kZXIgY29tcG9uZW50cyB0aGF0IGZhaWwgc2hvd193aGVuIGNoZWNrcycsICgpID0+IHtcbiAgICBjb25zdCBDSElMRF9QQUdFUyA9IFtcbiAgICAgIHtcbiAgICAgICAgc3VtbWFyeUxheW91dDoge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnU2VjdGlvbiAxJyxcbiAgICAgICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAgICAgIHsgZmllbGRzOiBbJ2ZpZWxkQSddIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRCJ10gfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdTZWN0aW9uIDInLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRDJ10gfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRBJyB9LFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICBmaWVsZElkOiAnZmllbGRCJyxcbiAgICAgICAgICAgIHNob3dfd2hlbjogW3tcbiAgICAgICAgICAgICAgZmllbGQ6ICdmaWVsZEEnLFxuICAgICAgICAgICAgICBvcDogJz0nLFxuICAgICAgICAgICAgICB2YWx1ZTogJ25vdFRoZVJpZ2h0VmFsdWUnXG4gICAgICAgICAgICB9XSBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgICAgY2hpbGRQYWdlczogQ0hJTERfUEFHRVNcbiAgICB9O1xuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhWYWxpZGF0aW9uKFxuICAgICAgPFN1bW1hcnlDYXJkRGV0YWlscyBtYXN0ZXJQYWdlPXtNQVNURVJfUEFHRX0gY2hpbGRNYXN0ZXJQYWdlcz17W119IGZvcm1EYXRhPXt7fX0gZW50cnlEYXRhPXtFTlRSWX0gLz5cbiAgICApO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gZmluZCBhbiBlbGVtZW50IGJ5IGl0cyB0ZXh0IGNvbnRlbnRcbiAgICBmdW5jdGlvbiBnZXRCeVRleHRDb250ZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcygnc2VjdGlvbi10aXRsZScpKSkuZmluZChlbCA9PiBlbC50ZXh0Q29udGVudCA9PT0gdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNlY3Rpb24gdGl0bGVzXG4gICAgY29uc3Qgc2VjdGlvbjFUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAxJyk7XG4gICAgY29uc3Qgc2VjdGlvbjJUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAyJyk7XG5cbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJUaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHNlY3Rpb24xQ29udGVudCA9IHNlY3Rpb24xVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDEpOyAvLyBKdXN0IEZpZWxkIEEsIEZpZWxkIEIgc2hvdWxkIGJlIGhpZGRlbi5cblxuICAgIGNvbnN0IHNlY3Rpb24yQ29udGVudCA9IHNlY3Rpb24yVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCByZW5kZXIgc2VjdGlvbnMgb24gcGFnZXMgdGhhdCBmYWlsIHNob3dfd2hlbiBjaGVja3MnLCAoKSA9PiB7XG4gICAgY29uc3QgQ0hJTERfUEFHRVMgPSBbXG4gICAgICB7XG4gICAgICAgIHNob3dfd2hlbjogW3tcbiAgICAgICAgICBmaWVsZDogJ3Rlc3RGaWVsZCcsXG4gICAgICAgICAgb3A6ICc9JyxcbiAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgc3VtbWFyeUxheW91dDoge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnU2VjdGlvbiAxJyxcbiAgICAgICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAgICAgIHsgZmllbGRzOiBbJ2ZpZWxkQSddIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRCJ10gfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzaG93X3doZW46IFt7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzaG93U2VjdGlvbjEnLFxuICAgICAgICAgICAgICAgIG9wOiBcIj1cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdTZWN0aW9uIDInLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRDJ10gfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRBJyB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQicgfSxcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdmaWVsZEMnIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF07XG5cbiAgICBjb25zdCBNQVNURVJfUEFHRSA9IHsgXG4gICAgICBjaGlsZFBhZ2VzOiBDSElMRF9QQUdFU1xuICAgIH07XG4gICAgXG4gICAgY29uc3QgQ1VTVE9NX0VOVFJZID0geyAuLi5FTlRSWSwgc2hvd1NlY3Rpb24xOiBmYWxzZSB9O1xuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhWYWxpZGF0aW9uKFxuICAgICAgPFN1bW1hcnlDYXJkRGV0YWlscyBtYXN0ZXJQYWdlPXtNQVNURVJfUEFHRX0gY2hpbGRNYXN0ZXJQYWdlcz17W119IGZvcm1EYXRhPXt7IHRlc3RGaWVsZDogZmFsc2UgfX0gZW50cnlEYXRhPXtDVVNUT01fRU5UUll9IC8+XG4gICAgKTtcblxuICAgIC8vIEZ1bmN0aW9uIHRvIGZpbmQgYW4gZWxlbWVudCBieSBpdHMgdGV4dCBjb250ZW50XG4gICAgZnVuY3Rpb24gZ2V0QnlUZXh0Q29udGVudChwYXJlbnQsIHRleHQpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHBhcmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzZXMoJ3NlY3Rpb24tdGl0bGUnKSkpLmZpbmQoZWwgPT4gZWwudGV4dENvbnRlbnQgPT09IHRleHQpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBzZWN0aW9uIHRpdGxlc1xuICAgIGNvbnN0IHNlY3Rpb24xVGl0bGUgPSBnZXRCeVRleHRDb250ZW50KGNvbnRhaW5lciwgJ1NlY3Rpb24gMScpO1xuICAgIGNvbnN0IHNlY3Rpb24yVGl0bGUgPSBnZXRCeVRleHRDb250ZW50KGNvbnRhaW5lciwgJ1NlY3Rpb24gMicpO1xuXG4gICAgZXhwZWN0KHNlY3Rpb24xVGl0bGUpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2VjdGlvbjJUaXRsZSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCByZW5kZXIgY29sdW1ucyB0aGF0IGZhaWwgc2hvd193aGVuIGNoZWNrcycsICgpID0+IHtcbiAgICBjb25zdCBDSElMRF9QQUdFUyA9IFtcbiAgICAgIHtcbiAgICAgICAgc3VtbWFyeUxheW91dDoge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnU2VjdGlvbiAxJyxcbiAgICAgICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkczogWydmaWVsZEEnXSxcbiAgICAgICAgICAgICAgICAgIHNob3dfd2hlbjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzaG93U2VjdGlvbjEnLFxuICAgICAgICAgICAgICAgICAgICAgIG9wOiAnPScsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRCJ10gfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbeyBmaWVsZElkOiAnZmllbGRBJywgbGFiZWw6ICdmaWVsZEEnIH0sIHsgZmllbGRJZDogJ2ZpZWxkQicsIGxhYmVsOiAnZmllbGRCJyB9XSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0geyBcbiAgICAgIGNoaWxkUGFnZXM6IENISUxEX1BBR0VTXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFZhbGlkYXRpb24oXG4gICAgICA8U3VtbWFyeUNhcmREZXRhaWxzIG1hc3RlclBhZ2U9e01BU1RFUl9QQUdFfSBjaGlsZE1hc3RlclBhZ2VzPXtbXX0gZm9ybURhdGE9e3sgdGVzdEZpZWxkOiBmYWxzZSB9fSBlbnRyeURhdGE9e0VOVFJZfSAvPlxuICAgICk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBmaW5kIGFuIGVsZW1lbnQgYnkgaXRzIHRleHQgY29udGVudFxuICAgIGZ1bmN0aW9uIGdldEJ5VGV4dENvbnRlbnQocGFyZW50LCB0ZXh0KSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShwYXJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc2VzKCdzZWN0aW9uLXRpdGxlJykpKS5maW5kKGVsID0+IGVsLnRleHRDb250ZW50ID09PSB0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc2VjdGlvbiB0aXRsZXNcbiAgICBjb25zdCBzZWN0aW9uMVRpdGxlID0gZ2V0QnlUZXh0Q29udGVudChjb250YWluZXIsICdTZWN0aW9uIDEnKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFUaXRsZSkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IHNlY3Rpb24xQ29udGVudCA9IHNlY3Rpb24xVGl0bGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKGAuJHtjbGFzc2VzKCdzZWN0aW9uLWNvbnRlbnQnKX1gKTtcbiAgICBleHBlY3Qoc2VjdGlvbjFDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2NsYXNzZXMoJ2ZpZWxkJyl9YCkubGVuZ3RoKS50b0VxdWFsKDEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbmRlciBjaGlsZCBjb2xsZWN0aW9ucycsICgpID0+IHtcbiAgICBjb25zdCBDSElMRF9NQVNURVJfUEFHRVMgPSBbe1xuICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICBuYW1lOiAnY2hpbGRDb2xsZWN0aW9uJ1xuICAgICAgfSxcbiAgICAgIGNoaWxkUGFnZXM6IFt7XG4gICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdjaGlsZEZpZWxkMScgfSxcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdjaGlsZEZpZWxkMicgfVxuICAgICAgICBdLFxuICAgICAgICBzdW1tYXJ5TGF5b3V0OiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdIaWRkZW4gVGl0bGUnLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICB7IGZpZWxkczogWydjaGlsZGZpZWxkMSddIH0sXG4gICAgICAgICAgICAgICB7IGZpZWxkczogWydjaGlsZGZpZWxkMiddIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9XTtcblxuICAgIGNvbnN0IENISUxEX1BBR0VTID0gW1xuICAgICAge1xuICAgICAgICBzdW1tYXJ5TGF5b3V0OiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2NoaWxkQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25OYW1lOiAnY2hpbGRDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdDaGlsZHJlbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRBJyB9LFxuICAgICAgICAgIHsgZmllbGRJZDogJ2ZpZWxkQicgfSxcbiAgICAgICAgICB7IGZpZWxkSWQ6ICdmaWVsZEMnIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF07XG5cbiAgICBjb25zdCBNQVNURVJfUEFHRSA9IHtcbiAgICAgIGNoaWxkUGFnZXM6IFsgXG4gICAgICAgIC4uLkNISUxEX1BBR0VTLFxuICAgICAgICAuLi5DSElMRF9NQVNURVJfUEFHRVNcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgY29uc3QgQ0hJTERfQ09MTEVDVElPTlMgPSBbICdjaGlsZENvbGxlY3Rpb24nIF07XG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFZhbGlkYXRpb24oXG4gICAgICA8U3VtbWFyeUNhcmREZXRhaWxzIG1hc3RlclBhZ2U9e01BU1RFUl9QQUdFfSBjaGlsZENvbGxlY3Rpb25zPXtDSElMRF9DT0xMRUNUSU9OU30gZm9ybURhdGE9e3t9fSBlbnRyeURhdGE9e0VOVFJZfSAvPlxuICAgICk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBmaW5kIGFuIGVsZW1lbnQgYnkgaXRzIHRleHQgY29udGVudFxuICAgIGZ1bmN0aW9uIGdldEJ5VGV4dENvbnRlbnQocGFyZW50LCB0ZXh0KSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShwYXJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc2VzKCdzZWN0aW9uLXRpdGxlJykpKS5maW5kKGVsID0+IGVsLnRleHRDb250ZW50ID09PSB0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZENvbGxlY3Rpb25TZWN0aW9uVGl0bGUgPSBnZXRCeVRleHRDb250ZW50KGNvbnRhaW5lciwgJ0NoaWxkcmVuJyk7XG4gICAgZXhwZWN0KGNoaWxkQ29sbGVjdGlvblNlY3Rpb25UaXRsZSkubm90LnRvQmVVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IGNoaWxkU2VjdGlvblRpdGxlcyA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnSGlkZGVuIFRpdGxlJyk7XG4gICAgZXhwZWN0KGNoaWxkU2VjdGlvblRpdGxlcykudG9CZVVuZGVmaW5lZCgpOyAvLyBJbmRpdmlkdWFsIHNlY3Rpb24gdGl0bGUgZm9yIGNoaWxkIGNvbGxlY3Rpb25zIHNob3VsZCBiZSBoaWRkZW4uXG5cbiAgICBjb25zdCBjaGlsZEZpZWxkcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtjbGFzc2VzKCdzZWN0aW9uJyl9YCk7XG4gICAgZXhwZWN0KGNoaWxkRmllbGRzLmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gT25lIGZvciBlYWNoIGVudHJ5IGluIHRoZSBjaGlsZCBjb2xsZWN0aW9uLlxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlbmRlciBjb21wb25lbnRzIGlmIGEgY29tcG9uZW50IHdpdGggdGhlIHNhbWUgSUQgaGFzIGFscmVhZHkgZmFpbGVkIGEgc2hvd193aGVuJywgKCkgPT4ge1xuICAgIGNvbnN0IENISUxEX1BBR0VTID0gW1xuICAgICAge1xuICAgICAgICBzdW1tYXJ5TGF5b3V0OiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdTZWN0aW9uIDEnLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgICAgICAgeyBmaWVsZHM6IFsnZmllbGRBJ10gfSxcbiAgICAgICAgICAgICAgICB7IGZpZWxkczogWydmaWVsZEInXSB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgeyBmaWVsZElkOiAnZmllbGRBJyB9LFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICBmaWVsZElkOiAnZmllbGRCJyxcbiAgICAgICAgICAgIGxhYmVsOiAnZmlyc3QnLFxuICAgICAgICAgICAgc2hvd193aGVuOiBbe1xuICAgICAgICAgICAgICBmaWVsZDogJ2ZpZWxkQScsXG4gICAgICAgICAgICAgIG9wOiAnPScsXG4gICAgICAgICAgICAgIHZhbHVlOiAnbm90VGhlUmlnaHRWYWx1ZSdcbiAgICAgICAgICAgIH1dIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBcbiAgICAgICAgICAgIGZpZWxkSWQ6ICdmaWVsZEInLFxuICAgICAgICAgICAgbGFiZWw6ICdzZWNvbmQnLFxuICAgICAgICAgICAgc2hvd193aGVuOiBbe1xuICAgICAgICAgICAgICBmaWVsZDogJ2ZpZWxkQScsXG4gICAgICAgICAgICAgIG9wOiAnIT0nLFxuICAgICAgICAgICAgICB2YWx1ZTogJ25vdFRoZVJpZ2h0VmFsdWUnXG4gICAgICAgICAgICB9XSBcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcblxuICAgIGNvbnN0IE1BU1RFUl9QQUdFID0ge1xuICAgICAgY2hpbGRQYWdlczogQ0hJTERfUEFHRVNcbiAgICB9O1xuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhWYWxpZGF0aW9uKFxuICAgICAgPFN1bW1hcnlDYXJkRGV0YWlscyBtYXN0ZXJQYWdlPXtNQVNURVJfUEFHRX0gY2hpbGRNYXN0ZXJQYWdlcz17W119IGZvcm1EYXRhPXt7fX0gZW50cnlEYXRhPXt7Li4uRU5UUlksIGZpZWxkQTogJ25vdFRoZVJpZ2h0VmFsdWUnfX0gLz5cbiAgICApO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gZmluZCBhbiBlbGVtZW50IGJ5IGl0cyB0ZXh0IGNvbnRlbnRcbiAgICBmdW5jdGlvbiBnZXRCeVRleHRDb250ZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3Nlcygnc2VjdGlvbi10aXRsZScpKSkuZmluZChlbCA9PiBlbC50ZXh0Q29udGVudCA9PT0gdGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbjFUaXRsZSA9IGdldEJ5VGV4dENvbnRlbnQoY29udGFpbmVyLCAnU2VjdGlvbiAxJyk7XG4gICAgZXhwZWN0KHNlY3Rpb24xVGl0bGUpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gICAgY29uc3Qgc2VjdGlvbjFDb250ZW50ID0gc2VjdGlvbjFUaXRsZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYC4ke2NsYXNzZXMoJ3NlY3Rpb24tY29udGVudCcpfWApO1xuICAgIGV4cGVjdChzZWN0aW9uMUNvbnRlbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Y2xhc3NlcygnZmllbGQnKX1gKS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIH0pO1xuXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxtQkFBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUMsdUJB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