synapse-react-client 4.0.45 → 4.0.47

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 (842) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
  3. package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
  4. package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
  5. package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
  6. package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
  7. package/dist/aridhia-queries/index.d.ts +1 -0
  8. package/dist/aridhia-queries/index.d.ts.map +1 -1
  9. package/dist/aridhia-queries/index.js +11 -10
  10. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
  11. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
  12. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
  13. package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
  14. package/dist/aridhia-queries/useSubmitAridhiaDar.js +2 -2
  15. package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
  16. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
  18. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  19. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  29. package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
  30. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  31. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
  32. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  33. package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
  34. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  35. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
  36. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  37. package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
  38. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  39. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  40. package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
  41. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  42. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
  43. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
  44. package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
  45. package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -1
  46. package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
  47. package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
  48. package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
  49. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
  50. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
  51. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
  52. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  53. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +11 -9
  54. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
  55. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
  56. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  57. package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
  58. package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
  59. package/dist/components/Authentication/LastLoginInfo.js +3 -3
  60. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  61. package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
  62. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  63. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  64. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  65. package/dist/components/Authentication/TOTPForm.js +3 -3
  66. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  67. package/dist/components/Authentication/index.d.ts +6 -6
  68. package/dist/components/Authentication/index.d.ts.map +1 -1
  69. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
  70. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  71. package/dist/components/CardContainer/CardContainer.js +7 -7
  72. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  73. package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
  74. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  75. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
  76. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  77. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
  78. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  79. package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
  80. package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
  81. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  82. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
  83. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  84. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
  85. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  86. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
  87. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
  88. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  89. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
  90. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  91. package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
  92. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  93. package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
  94. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  95. package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
  96. package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
  97. package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
  98. package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
  99. package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
  100. package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
  101. package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
  102. package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
  103. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
  104. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
  105. package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
  106. package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
  107. package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
  108. package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
  109. package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
  110. package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
  111. package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
  112. package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
  113. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  114. package/dist/components/ComponentCollapse.d.ts.map +1 -1
  115. package/dist/components/ComponentCollapse.js +2 -1
  116. package/dist/components/ComponentCollapse.js.map +1 -1
  117. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
  118. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  119. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  120. package/dist/components/DataGrid/SynapseGrid.js +231 -219
  121. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  122. package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
  123. package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
  124. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  125. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +11 -2
  126. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  127. package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
  128. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  129. package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
  130. package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
  131. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
  132. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
  133. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
  134. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
  135. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  136. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
  137. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  138. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
  139. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  140. package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
  141. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
  142. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  143. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
  144. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  145. package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
  146. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  147. package/dist/components/DataGrid/components/contextMenu.js +3 -3
  148. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  149. package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
  150. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +14 -12
  151. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  152. package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
  153. package/dist/components/DataGrid/hooks/useStack.js +2 -2
  154. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  155. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  156. package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
  157. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  158. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  159. package/dist/components/DataGrid/utils/columnFactory.js +47 -42
  160. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  161. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
  162. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  163. package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
  164. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  165. package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
  166. package/dist/components/DataGrid/utils/splitPatch.js +22 -13
  167. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  168. package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
  169. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  170. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  171. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +3 -2
  172. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  173. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
  174. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
  175. package/dist/components/DownloadCart/MeetAccessRequirementCard.js +1 -1
  176. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  177. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  178. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
  179. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  180. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
  181. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  182. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
  183. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  184. package/dist/components/EntityFinder/EntityFinder.js +4 -4
  185. package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
  186. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  187. package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
  188. package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
  189. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  190. package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
  191. package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
  192. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  193. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +4 -4
  194. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  195. package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
  196. package/dist/components/EntityHeaderTable/Filter.js +1 -1
  197. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  198. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  199. package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
  200. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  201. package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
  202. package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
  203. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  204. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  205. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
  206. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
  207. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  208. package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
  209. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  210. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
  211. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  212. package/dist/components/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
  213. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
  214. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  215. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
  216. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
  217. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
  218. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  219. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
  220. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  221. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
  222. package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
  223. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
  224. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
  225. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
  226. package/dist/components/FormTemplateEditor/FormStructurePanel.js +7 -7
  227. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
  228. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
  229. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
  230. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
  231. package/dist/components/FormTemplateEditor/StepCard.js +15 -10
  232. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
  233. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
  234. package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
  235. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
  236. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
  237. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
  238. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
  239. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +2 -2
  240. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
  241. package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
  242. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  243. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +46 -46
  244. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
  245. package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
  246. package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
  247. package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
  248. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  249. package/dist/components/GenericCard/TableRowGenericCard.js +38 -38
  250. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  251. package/dist/components/GoalsV3/GoalsV3.js +1 -1
  252. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  253. package/dist/components/HelpPopover/HelpPopover.js +1 -1
  254. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  255. package/dist/components/HexGrid/HexGrid.d.ts +3 -1
  256. package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
  257. package/dist/components/HexGrid/HexGrid.js +14 -13
  258. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  259. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  260. package/dist/components/IconSvg/IconSvg.js +154 -47
  261. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  262. package/dist/components/IconSvg/index.d.ts +1 -1
  263. package/dist/components/IconSvg/index.d.ts.map +1 -1
  264. package/dist/components/IconSvg/index.js.map +1 -1
  265. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
  266. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
  267. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  268. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
  269. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
  270. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  271. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  272. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
  273. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  274. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
  275. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
  276. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
  277. package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
  278. package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
  279. package/dist/components/Markdown/MarkdownCollapse.js +3 -1
  280. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  281. package/dist/components/Markdown/MarkdownEditor.js +1 -1
  282. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/components/Markdown/widget/index.d.ts +1 -1
  284. package/dist/components/Markdown/widget/index.d.ts.map +1 -1
  285. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
  286. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  287. package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
  288. package/dist/components/ModalDownload/ModalDownload.js +2 -1
  289. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  290. package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
  291. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  292. package/dist/components/Plot/BarPlot.js +1 -1
  293. package/dist/components/Plot/BarPlot.js.map +1 -1
  294. package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
  295. package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
  296. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  297. package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
  298. package/dist/components/PortalList/PortalCard.js +6 -5
  299. package/dist/components/PortalList/PortalCard.js.map +1 -1
  300. package/dist/components/PortalList/PortalList.js +4 -4
  301. package/dist/components/PortalList/PortalList.js.map +1 -1
  302. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
  303. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  304. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
  305. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
  306. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  307. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  308. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
  309. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  310. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  311. package/dist/components/QueryBuilder/FilterConditionRow.js +31 -30
  312. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  313. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
  314. package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
  315. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
  316. package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
  317. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  318. package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
  319. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  320. package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
  321. package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
  322. package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
  323. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
  324. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  325. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  326. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
  327. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
  328. package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
  329. package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
  330. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
  331. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  332. package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
  333. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  334. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
  335. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
  336. package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
  337. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
  338. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
  339. package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
  340. package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
  341. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
  342. package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
  343. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
  344. package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
  345. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  346. package/dist/components/QuerySortSelector.js +5 -5
  347. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
  348. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  349. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
  350. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
  351. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
  352. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
  353. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
  354. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
  355. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
  356. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  357. package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
  358. package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
  359. package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
  360. package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
  361. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
  362. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
  363. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
  364. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
  365. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
  366. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
  367. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
  368. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  369. package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
  370. package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
  371. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  372. package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
  373. package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
  374. package/dist/components/QueryWrapperErrorBoundary.js +26 -21
  375. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  376. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
  377. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
  378. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  379. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
  380. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  381. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
  382. package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
  383. package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
  384. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  385. package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
  386. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  387. package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
  388. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
  389. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
  390. package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
  391. package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
  392. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
  393. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
  394. package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
  395. package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
  396. package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
  397. package/dist/components/RowDataTable/RowDataTable.js +25 -8
  398. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  399. package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
  400. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  401. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
  402. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
  403. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  404. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
  405. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  406. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
  407. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  408. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
  409. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  410. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
  411. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  412. package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
  413. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  414. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
  415. package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
  416. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  417. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
  418. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  419. package/dist/components/SynapseChat/SynapseChat.js +1 -1
  420. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  421. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  422. package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
  423. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  424. package/dist/components/SynapseChat/SynapseChatMessage.js +1 -1
  425. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  426. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
  427. package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
  428. package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
  429. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  430. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  431. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  432. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
  433. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  434. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
  435. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
  436. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  437. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
  438. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  439. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
  440. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  441. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  442. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
  443. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  444. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  445. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  446. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js +1 -1
  447. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  448. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
  449. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
  450. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  451. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
  452. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  453. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
  454. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
  455. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  456. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.d.ts.map +1 -1
  457. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
  458. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  459. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
  460. package/dist/components/SynapseTable/SqlEditor.js +7 -7
  461. package/dist/components/SynapseTable/SynapseTable.js +8 -8
  462. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  463. package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
  464. package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
  465. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  466. package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
  467. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  468. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  469. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
  470. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  471. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
  472. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  473. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
  474. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +6 -6
  475. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  476. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
  477. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
  478. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  479. package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
  480. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
  481. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
  482. package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
  483. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  484. package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
  485. package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
  486. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  487. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +2 -2
  488. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  489. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
  490. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  491. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js +1 -1
  492. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  493. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  494. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
  495. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  496. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +59 -59
  497. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  498. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
  499. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
  500. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  501. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
  502. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  503. package/dist/components/TanStackTable/ColumnHeader.js +1 -1
  504. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  505. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
  506. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  507. package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
  508. package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
  509. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  510. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
  511. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  512. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
  513. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
  514. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  515. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  516. package/dist/components/TotalQueryResults.js +14 -14
  517. package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
  518. package/dist/components/Webhook/WebhookDashboard.js +3 -3
  519. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  520. package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
  521. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  522. package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
  523. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  524. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
  525. package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
  526. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
  527. package/dist/components/dataaccess/FormTemplateTable.js +6 -6
  528. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
  529. package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
  530. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  531. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
  532. package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
  533. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  534. package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
  535. package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
  536. package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
  537. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  538. package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
  539. package/dist/components/download_list/DownloadDetails.js +12 -10
  540. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  541. package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
  542. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  543. package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
  544. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  545. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  546. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  547. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
  548. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  549. package/dist/components/error/ErrorBanner.d.ts.map +1 -1
  550. package/dist/components/error/ErrorBanner.js +49 -46
  551. package/dist/components/error/ErrorBanner.js.map +1 -1
  552. package/dist/components/error/ErrorChip.d.ts.map +1 -1
  553. package/dist/components/error/ErrorChip.js +2 -1
  554. package/dist/components/error/ErrorChip.js.map +1 -1
  555. package/dist/components/file/upload/MultiFileUploadProgress.js +5 -5
  556. package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
  557. package/dist/components/row_renderers/Dataset.js +6 -6
  558. package/dist/components/row_renderers/Dataset.js.map +1 -1
  559. package/dist/components/row_renderers/Funder.js +1 -1
  560. package/dist/components/row_renderers/Funder.js.map +1 -1
  561. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
  562. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
  563. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  564. package/dist/components/widgets/ElementWithTooltip.d.ts +6 -1
  565. package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
  566. package/dist/components/widgets/ElementWithTooltip.js +22 -14
  567. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  568. package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
  569. package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
  570. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  571. package/dist/components/widgets/SynapseImage.js +1 -1
  572. package/dist/components/widgets/SynapseImage.js.map +1 -1
  573. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
  574. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  575. package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
  576. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  577. package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
  578. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
  579. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  580. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
  581. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  582. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
  583. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
  584. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  585. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
  586. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  587. package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
  588. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  589. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
  590. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
  591. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  592. package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
  593. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  594. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
  595. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
  596. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  597. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
  598. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  599. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
  600. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
  601. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
  602. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  603. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
  604. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  605. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
  606. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  607. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
  608. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
  609. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  610. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
  611. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
  612. package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
  613. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  614. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
  615. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
  616. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  617. package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
  618. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
  619. package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
  620. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  621. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
  622. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  623. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
  624. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  625. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
  626. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  627. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  628. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  629. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
  630. package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
  631. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
  632. package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
  633. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
  634. package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
  635. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
  636. package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
  637. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
  638. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  639. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
  640. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
  641. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
  642. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
  643. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
  644. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
  645. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
  646. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
  647. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
  648. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
  649. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
  650. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
  651. package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
  652. package/dist/mocks/mockAnnotationColumns.js +1 -1
  653. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  654. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +17 -0
  655. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  656. package/dist/mocks/msw/handlers/aridhiaHandlers.js +62 -42
  657. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  658. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
  659. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  660. package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
  661. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  662. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
  663. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
  664. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
  665. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
  666. package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
  667. package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
  668. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  669. package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
  670. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  671. package/dist/mocks/msw/handlers/subscriptionHandlers.js +1 -1
  672. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  673. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  674. package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
  675. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  676. package/dist/mocks/msw/server.d.ts.map +1 -1
  677. package/dist/mocks/msw/server.js +4 -2
  678. package/dist/mocks/msw/server.js.map +1 -1
  679. package/dist/mocks/query/mockColumnCategoryTable.d.ts +19 -0
  680. package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
  681. package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
  682. package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
  683. package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
  684. package/dist/stories/ColorPaletteInspector.js +2 -2
  685. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  686. package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
  687. package/dist/style/main.css +1 -1
  688. package/dist/synapse-queries/auth/useOIDC.js +2 -2
  689. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  690. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
  691. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
  692. package/dist/synapse-queries/challenge/useChallenge.js +2 -2
  693. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  694. package/dist/synapse-queries/chat/useChat.js +8 -8
  695. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  696. package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
  697. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  698. package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
  699. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  700. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
  701. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  702. package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
  703. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  704. package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
  705. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
  706. package/dist/synapse-queries/download/index.js +2 -2
  707. package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
  708. package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
  709. package/dist/synapse-queries/download/useDownloadList.js +14 -13
  710. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  711. package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
  712. package/dist/synapse-queries/entity/useEntity.js +20 -20
  713. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  714. package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
  715. package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
  716. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  717. package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
  718. package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
  719. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  720. package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
  721. package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
  722. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  723. package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
  724. package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
  725. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  726. package/dist/synapse-queries/forum/useReply.js +6 -6
  727. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  728. package/dist/synapse-queries/forum/useThread.js +14 -14
  729. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  730. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  731. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  732. package/dist/synapse-queries/grid/useGridSession.js +4 -4
  733. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  734. package/dist/synapse-queries/index.js +177 -176
  735. package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
  736. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  737. package/dist/synapse-queries/portal/usePortal.js +7 -7
  738. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  739. package/dist/synapse-queries/subscription/useSubscription.js +4 -4
  740. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  741. package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
  742. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  743. package/dist/synapse-queries/team/useTeam.js +2 -2
  744. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  745. package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
  746. package/dist/synapse-queries/team/useTeamList.js +3 -3
  747. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  748. package/dist/synapse-queries/team/useTeamMembers.js +8 -8
  749. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  750. package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
  751. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  752. package/dist/synapse-queries/trash/useTrashCan.js +4 -4
  753. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  754. package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
  755. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  756. package/dist/synapse-queries/user/useFavorites.js +4 -4
  757. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  758. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  759. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  760. package/dist/synapse-queries/user/useRevokeCertification.js +2 -2
  761. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  762. package/dist/synapse-queries/wiki/useWiki.js +10 -10
  763. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  764. package/dist/theme/DefaultTheme.d.ts.map +1 -1
  765. package/dist/theme/DefaultTheme.js +4 -1
  766. package/dist/theme/DefaultTheme.js.map +1 -1
  767. package/dist/tsconfig.build.tsbuildinfo +1 -1
  768. package/dist/utils/APIConstants.d.ts.map +1 -1
  769. package/dist/utils/APIConstants.js.map +1 -1
  770. package/dist/utils/AppUtils/AppUtils.js +1 -1
  771. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  772. package/dist/utils/ContentTypeUtils.js +4 -4
  773. package/dist/utils/ContentTypeUtils.js.map +1 -1
  774. package/dist/utils/PermissionLevelToAccessType.js +1 -1
  775. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  776. package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
  777. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  778. package/dist/utils/context/DocumentMetadataContext.js +1 -1
  779. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  780. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  781. package/dist/utils/functions/AccessControlListUtils.js +3 -3
  782. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  783. package/dist/utils/functions/ArrayUtils.js +2 -2
  784. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  785. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  786. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  787. package/dist/utils/functions/FileHandleUtils.js +1 -1
  788. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  789. package/dist/utils/functions/RegularExpressions.js +1 -1
  790. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  791. package/dist/utils/functions/StringUtils.d.ts.map +1 -1
  792. package/dist/utils/functions/StringUtils.js +1 -2
  793. package/dist/utils/functions/StringUtils.js.map +1 -1
  794. package/dist/utils/functions/deepLinkingUtils.js +2 -2
  795. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  796. package/dist/utils/functions/enumerationFacet.d.ts +26 -0
  797. package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
  798. package/dist/utils/functions/enumerationFacet.js +27 -0
  799. package/dist/utils/functions/enumerationFacet.js.map +1 -0
  800. package/dist/utils/functions/facetCountUtils.d.ts +12 -0
  801. package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
  802. package/dist/utils/functions/facetCountUtils.js +9 -0
  803. package/dist/utils/functions/facetCountUtils.js.map +1 -0
  804. package/dist/utils/functions/getEndpoint.js.map +1 -1
  805. package/dist/utils/functions/getUserData.js +1 -1
  806. package/dist/utils/functions/getUserData.js.map +1 -1
  807. package/dist/utils/functions/queryUtils.d.ts +1 -1
  808. package/dist/utils/functions/queryUtils.d.ts.map +1 -1
  809. package/dist/utils/functions/queryUtils.js +26 -22
  810. package/dist/utils/functions/queryUtils.js.map +1 -1
  811. package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
  812. package/dist/utils/functions/testDownloadSpeed.js +17 -26
  813. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  814. package/dist/utils/functions/unCamelCase.js +1 -1
  815. package/dist/utils/functions/unCamelCase.js.map +1 -1
  816. package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
  817. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  818. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
  819. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  820. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  821. package/dist/utils/hooks/useLogin.js +5 -5
  822. package/dist/utils/hooks/useLogin.js.map +1 -1
  823. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  824. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
  825. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
  826. package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
  827. package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
  828. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
  829. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
  830. package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
  831. package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
  832. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
  833. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
  834. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
  835. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  836. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
  837. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
  838. package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
  839. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  840. package/dist/utils/jsonschema/submissionContext.js +2 -2
  841. package/dist/utils/jsonschema/submissionContext.js.map +1 -1
  842. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"useGetInfoFromIds.js","names":[],"sources":["../../../src/utils/hooks/useGetInfoFromIds.ts"],"sourcesContent":["import {\n getEntityHeaders,\n getEvaluations,\n getGroupHeadersBatch,\n} from '@/synapse-client'\nimport {\n EntityHeader,\n Evaluation,\n Reference,\n ReferenceList,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { chunk, uniq, without } from 'lodash-es'\nimport { useEffect, useState } from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\nimport { useSynapseContext } from '../context/SynapseContext'\nimport { SynapseConstants } from '../index'\n\nexport type UseGetInfoFromIdsProps<\n T extends EntityHeader | UserGroupHeader | Evaluation,\n THookType = T extends EntityHeader\n ? 'ENTITY_HEADER'\n : T extends UserGroupHeader\n ? 'USER_PROFILE'\n : T extends Evaluation\n ? 'EVALUATION_QUEUE'\n : never,\n> = {\n ids: string[]\n type: THookType\n}\n\ntype LookupRequestType = string | Reference\n\nconst UserGroupHeaderTemplate: UserGroupHeader = {\n ownerId: '', // A foreign key to the ID of the 'principal' object for the user\n firstName: 'Unknown', // This person's given name (forename)\n lastName: 'Unknown', // This person's family name (surname)\n userName: 'Unknown', // A name chosen by the user that uniquely identifies them\n isIndividual: false,\n}\n\nconst entityHeaderTemplate: EntityHeader = {\n name: 'Unknown', //\tThe name of the entity\n id: 'unknown', //\tThe id of the entity\n type: 'org.sagebionetworks.repo.model.FileEntity', //\tThe type of the entity\n versionNumber: 0, //\tThe version number of the entity\n versionLabel: 'placeholder', //\tThe user defined version label of the entity\n benefactorId: 0, //\tThe ID of the entity that this Entity's ACL is inherited from.\n createdOn: 'null', //\tThe date this entity was created.\n modifiedOn: 'null', //\tThe date this entity was last modified.\n createdBy: 'null', //\tThe ID of the user that created this entity.\n modifiedBy: 'null', //\tThe ID of the user that last modified this entity.\n isLatestVersion: true, // If this version is the latest version of the entity\n}\n\nconst evaluationTemplate: Evaluation = {\n id: 'unknown', // The unique immutable ID for this Evaluation.\n etag: 'Unknown', // Synapse employs an Optimistic Concurrency Control (OCC) scheme to handle concurrent updates. The eTag changes every time an Evaluation is updated; it is used to detect when a client's copy of an Evaluation is out-of-date.\n name: 'Unknown', // The name of this Evaluation\n description: 'Unknown', // A text description of this Evaluation.\n ownerId: 'null', // The ID of the Synapse user who created this Evaluation.\n createdOn: 'null', //\tThe date on which Evaluation was created.\n contentSource: 'Unknown', // The Synapse ID of the Entity to which this Evaluation belongs, e.g. a reference to a Synapse project.\n submissionInstructionsMessage: 'Unknown', // Message to display to users detailing acceptable formatting for Submissions to this Evaluation.\n submissionReceiptMessage: 'Unknown', // Message to display to users upon successful submission to this Evaluation.\n}\n\nconst getEntityHeaderItems = async (\n lookupList: ReferenceList,\n accessToken: string | undefined,\n): Promise<EntityHeader[]> => {\n const newData = await getEntityHeaders(lookupList, accessToken)\n const notFound = lookupList.filter(\n item => newData.results.map(item => item.id).indexOf(item.targetId) === -1,\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...entityHeaderTemplate,\n id: item.targetId,\n name: `${item.targetId}`,\n }))\n\n return [...newData.results, ...notFoundPlaceholders]\n}\n\nconst getUserGroupHeaderItems = async (\n lookupList: string[],\n accessToken: string | undefined,\n): Promise<UserGroupHeader[]> => {\n const newData = (await getGroupHeadersBatch(lookupList, accessToken)).children\n const notFound = lookupList.filter(\n item => newData.map(item => item.ownerId).indexOf(item) === -1,\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...UserGroupHeaderTemplate,\n ownerId: item,\n name: `Unknown User (${item})`,\n }))\n\n return [...newData, ...notFoundPlaceholders]\n}\n\nconst getEvaluationItems = async (\n lookupList: string[],\n accessToken: string | undefined,\n): Promise<Evaluation[]> => {\n const newData = await getEvaluations(\n { evaluationIds: lookupList },\n accessToken,\n )\n const notFound = lookupList.filter(\n item => newData.results.map(item => item.id).indexOf(item) === -1,\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...evaluationTemplate,\n id: item,\n name: item,\n }))\n\n return [...newData.results, ...notFoundPlaceholders]\n}\n\n/**\n * React hook to get user profiles or entities or evaluation queues. Utilizes a custom cache in sessionStorage.\n *\n * For fetching just one entity or usergroup, see useGetEntity/useGetUserGroupHeader hooks powered by react-query\n * @returns\n */\nexport default function useGetInfoFromIds<\n T extends EntityHeader | UserGroupHeader | Evaluation,\n>(props: UseGetInfoFromIdsProps<T>): T[] {\n const { ids, type } = props\n const { accessToken } = useSynapseContext()\n\n const [data, setData] = useState<Array<T>>([])\n\n const idKey = (type === 'USER_PROFILE' ? 'ownerId' : 'id') as keyof T\n\n const getStorageKey = (type: UseGetInfoFromIdsProps<T>['type']) => {\n switch (type) {\n case 'USER_PROFILE':\n return SynapseConstants.USER_PROFILE_STORAGE_KEY\n case 'ENTITY_HEADER':\n return SynapseConstants.ENTITY_HEADER_STORAGE_KEY\n case 'EVALUATION_QUEUE':\n return SynapseConstants.EVALUATIONS_STORAGE_KEY\n default:\n return ''\n }\n }\n const storageKey: string = getStorageKey(type)\n\n // look at current list of data, see if incoming ids has new data,\n // if so grab those ids\n const curList = data.map(el => el[idKey]) as string[]\n const incomingList = ids.filter(el => el !== SynapseConstants.VALUE_NOT_SET)\n const newValues = uniq(without(incomingList, ...curList))\n\n useEffect(() => {\n const saveToSessionStorage = (data: T[]) => {\n if (!data.length) {\n return\n }\n //get what's there\n const dataInStorage = sessionStorage.getItem(storageKey)\n try {\n const dataInStorageAsObjectArr: T[] = dataInStorage\n ? JSON.parse(dataInStorage)\n : []\n //get an array of ids for items already in storage\n const ids = dataInStorageAsObjectArr.map(item => item[idKey])\n //push all the new data if ids are new\n for (const dataObject of data) {\n if (!ids.includes(dataObject[idKey])) {\n dataInStorageAsObjectArr.push(dataObject)\n }\n }\n sessionStorage.setItem(\n storageKey,\n JSON.stringify(dataInStorageAsObjectArr),\n )\n } catch (e) {\n sessionStorage.setItem(storageKey, JSON.stringify(data))\n }\n }\n saveToSessionStorage(data)\n }, [data, idKey, storageKey])\n\n // Alina TODO: check if the items are already in Local Storage before making server call.\n\n // Michael TODO: There's a bug where the data held in useGetInfoFromIds will be stale if the user token changes,\n // this can be solved by using the useCompare hook on the token to track when it changes\n useDeepCompareEffect(() => {\n let isCancelled = false\n const getData = async () => {\n if (newValues.length > 0) {\n try {\n const newIds = Array.from<string>(newValues)\n const newReferences: LookupRequestType[] =\n type === 'ENTITY_HEADER'\n ? newIds.map(el => ({ targetId: el }))\n : newIds\n const newReferencesChunks = chunk(newReferences, 45)\n const totalData: T[] = []\n for (const newReferences of newReferencesChunks) {\n let newData: T[] = []\n switch (type) {\n case 'USER_PROFILE':\n newData = (await getUserGroupHeaderItems(\n newReferences as string[],\n accessToken,\n )) as T[]\n break\n case 'ENTITY_HEADER':\n newData = (await getEntityHeaderItems(\n newReferences as ReferenceList,\n accessToken,\n )) as T[]\n break\n case 'EVALUATION_QUEUE':\n newData = (await getEvaluationItems(\n newReferences as string[],\n accessToken,\n )) as T[]\n break\n }\n totalData.push(...newData)\n }\n if (!isCancelled) {\n setData(oldData => oldData.concat(...totalData))\n }\n } catch (error) {\n console.error('Error on data retrieval', error)\n }\n }\n }\n getData()\n return () => {\n isCancelled = true\n }\n }, [accessToken, type, newValues])\n return data\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useGetInfoFromIds.js","names":[],"sources":["../../../src/utils/hooks/useGetInfoFromIds.ts"],"sourcesContent":["import {\n getEntityHeaders,\n getEvaluations,\n getGroupHeadersBatch,\n} from '@/synapse-client'\nimport {\n EntityHeader,\n Evaluation,\n Reference,\n ReferenceList,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { chunk, uniq, without } from 'lodash-es'\nimport { useEffect, useState } from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\nimport { useSynapseContext } from '../context/SynapseContext'\nimport { SynapseConstants } from '../index'\n\nexport type UseGetInfoFromIdsProps<\n T extends EntityHeader | UserGroupHeader | Evaluation,\n THookType = T extends EntityHeader\n ? 'ENTITY_HEADER'\n : T extends UserGroupHeader\n ? 'USER_PROFILE'\n : T extends Evaluation\n ? 'EVALUATION_QUEUE'\n : never,\n> = {\n ids: string[]\n type: THookType\n}\n\ntype LookupRequestType = string | Reference\n\nconst UserGroupHeaderTemplate: UserGroupHeader = {\n ownerId: '', // A foreign key to the ID of the 'principal' object for the user\n firstName: 'Unknown', // This person's given name (forename)\n lastName: 'Unknown', // This person's family name (surname)\n userName: 'Unknown', // A name chosen by the user that uniquely identifies them\n isIndividual: false,\n}\n\nconst entityHeaderTemplate: EntityHeader = {\n name: 'Unknown', //\tThe name of the entity\n id: 'unknown', //\tThe id of the entity\n type: 'org.sagebionetworks.repo.model.FileEntity', //\tThe type of the entity\n versionNumber: 0, //\tThe version number of the entity\n versionLabel: 'placeholder', //\tThe user defined version label of the entity\n benefactorId: 0, //\tThe ID of the entity that this Entity's ACL is inherited from.\n createdOn: 'null', //\tThe date this entity was created.\n modifiedOn: 'null', //\tThe date this entity was last modified.\n createdBy: 'null', //\tThe ID of the user that created this entity.\n modifiedBy: 'null', //\tThe ID of the user that last modified this entity.\n isLatestVersion: true, // If this version is the latest version of the entity\n}\n\nconst evaluationTemplate: Evaluation = {\n id: 'unknown', // The unique immutable ID for this Evaluation.\n etag: 'Unknown', // Synapse employs an Optimistic Concurrency Control (OCC) scheme to handle concurrent updates. The eTag changes every time an Evaluation is updated; it is used to detect when a client's copy of an Evaluation is out-of-date.\n name: 'Unknown', // The name of this Evaluation\n description: 'Unknown', // A text description of this Evaluation.\n ownerId: 'null', // The ID of the Synapse user who created this Evaluation.\n createdOn: 'null', //\tThe date on which Evaluation was created.\n contentSource: 'Unknown', // The Synapse ID of the Entity to which this Evaluation belongs, e.g. a reference to a Synapse project.\n submissionInstructionsMessage: 'Unknown', // Message to display to users detailing acceptable formatting for Submissions to this Evaluation.\n submissionReceiptMessage: 'Unknown', // Message to display to users upon successful submission to this Evaluation.\n}\n\nconst getEntityHeaderItems = async (\n lookupList: ReferenceList,\n accessToken: string | undefined,\n): Promise<EntityHeader[]> => {\n const newData = await getEntityHeaders(lookupList, accessToken)\n const notFound = lookupList.filter(\n item => !newData.results.map(item => item.id).includes(item.targetId),\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...entityHeaderTemplate,\n id: item.targetId,\n name: `${item.targetId}`,\n }))\n\n return [...newData.results, ...notFoundPlaceholders]\n}\n\nconst getUserGroupHeaderItems = async (\n lookupList: string[],\n accessToken: string | undefined,\n): Promise<UserGroupHeader[]> => {\n const newData = (await getGroupHeadersBatch(lookupList, accessToken)).children\n const notFound = lookupList.filter(\n item => !newData.map(item => item.ownerId).includes(item),\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...UserGroupHeaderTemplate,\n ownerId: item,\n name: `Unknown User (${item})`,\n }))\n\n return [...newData, ...notFoundPlaceholders]\n}\n\nconst getEvaluationItems = async (\n lookupList: string[],\n accessToken: string | undefined,\n): Promise<Evaluation[]> => {\n const newData = await getEvaluations(\n { evaluationIds: lookupList },\n accessToken,\n )\n const notFound = lookupList.filter(\n item => !newData.results.map(item => item.id).includes(item),\n )\n const notFoundPlaceholders = notFound.map(item => ({\n ...evaluationTemplate,\n id: item,\n name: item,\n }))\n\n return [...newData.results, ...notFoundPlaceholders]\n}\n\n/**\n * React hook to get user profiles or entities or evaluation queues. Utilizes a custom cache in sessionStorage.\n *\n * For fetching just one entity or usergroup, see useGetEntity/useGetUserGroupHeader hooks powered by react-query\n * @returns\n */\nexport default function useGetInfoFromIds<\n T extends EntityHeader | UserGroupHeader | Evaluation,\n>(props: UseGetInfoFromIdsProps<T>): T[] {\n const { ids, type } = props\n const { accessToken } = useSynapseContext()\n\n const [data, setData] = useState<Array<T>>([])\n\n const idKey = (type === 'USER_PROFILE' ? 'ownerId' : 'id') as keyof T\n\n const getStorageKey = (type: UseGetInfoFromIdsProps<T>['type']) => {\n switch (type) {\n case 'USER_PROFILE':\n return SynapseConstants.USER_PROFILE_STORAGE_KEY\n case 'ENTITY_HEADER':\n return SynapseConstants.ENTITY_HEADER_STORAGE_KEY\n case 'EVALUATION_QUEUE':\n return SynapseConstants.EVALUATIONS_STORAGE_KEY\n default:\n return ''\n }\n }\n const storageKey: string = getStorageKey(type)\n\n // look at current list of data, see if incoming ids has new data,\n // if so grab those ids\n const curList = data.map(el => el[idKey]) as string[]\n const incomingList = ids.filter(el => el !== SynapseConstants.VALUE_NOT_SET)\n const newValues = uniq(without(incomingList, ...curList))\n\n useEffect(() => {\n const saveToSessionStorage = (data: T[]) => {\n if (!data.length) {\n return\n }\n //get what's there\n const dataInStorage = sessionStorage.getItem(storageKey)\n try {\n const dataInStorageAsObjectArr: T[] = dataInStorage\n ? JSON.parse(dataInStorage)\n : []\n //get an array of ids for items already in storage\n const ids = new Set(dataInStorageAsObjectArr.map(item => item[idKey]))\n //push all the new data if ids are new\n for (const dataObject of data) {\n if (!ids.has(dataObject[idKey])) {\n dataInStorageAsObjectArr.push(dataObject)\n }\n }\n sessionStorage.setItem(\n storageKey,\n JSON.stringify(dataInStorageAsObjectArr),\n )\n } catch (e) {\n sessionStorage.setItem(storageKey, JSON.stringify(data))\n }\n }\n saveToSessionStorage(data)\n }, [data, idKey, storageKey])\n\n // Alina TODO: check if the items are already in Local Storage before making server call.\n\n // Michael TODO: There's a bug where the data held in useGetInfoFromIds will be stale if the user token changes,\n // this can be solved by using the useCompare hook on the token to track when it changes\n useDeepCompareEffect(() => {\n let isCancelled = false\n const getData = async () => {\n if (newValues.length > 0) {\n try {\n const newIds = Array.from<string>(newValues)\n const newReferences: LookupRequestType[] =\n type === 'ENTITY_HEADER'\n ? newIds.map(el => ({ targetId: el }))\n : newIds\n const newReferencesChunks = chunk(newReferences, 45)\n const totalData: T[] = []\n for (const newReferences of newReferencesChunks) {\n let newData: T[] = []\n switch (type) {\n case 'USER_PROFILE':\n newData = (await getUserGroupHeaderItems(\n newReferences as string[],\n accessToken,\n )) as T[]\n break\n case 'ENTITY_HEADER':\n newData = (await getEntityHeaderItems(\n newReferences as ReferenceList,\n accessToken,\n )) as T[]\n break\n case 'EVALUATION_QUEUE':\n newData = (await getEvaluationItems(\n newReferences as string[],\n accessToken,\n )) as T[]\n break\n }\n totalData.push(...newData)\n }\n if (!isCancelled) {\n setData(oldData => oldData.concat(...totalData))\n }\n } catch (error) {\n console.error('Error on data retrieval', error)\n }\n }\n }\n getData()\n return () => {\n isCancelled = true\n }\n }, [accessToken, type, newValues])\n return data\n}\n"],"mappings":"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"}
@@ -18,7 +18,7 @@ function s(e, t) {
18
18
  }
19
19
  function c(e, t) {
20
20
  let n = i(t), { facetsToRemove: o } = e, s = Array.isArray(o);
21
- return n.query.selectedFacets = (n.query.selectedFacets ?? []).filter((e) => s ? !o.find((t) => r(t, e)) : !r(o, e)), a(n, t) || (n.query.offset = 0), n;
21
+ return n.query.selectedFacets = (n.query.selectedFacets ?? []).filter((e) => s ? !o.some((t) => r(t, e)) : !r(o, e)), a(n, t) || (n.query.offset = 0), n;
22
22
  }
23
23
  function l(e, t) {
24
24
  let n = i(t), { facet: o, min: s, max: c } = e, l = i(n.query.selectedFacets ?? []), u = l.find((e) => e.concreteType === "org.sagebionetworks.repo.model.table.FacetColumnRangeRequest" && r(o, e));
@@ -1 +1 @@
1
- {"version":3,"file":"TableQueryReducerActions.js","names":[],"sources":["../../../../src/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.ts"],"sourcesContent":["import {\n isColumnMultiValueFunctionQueryFilter,\n isColumnSingleValueQueryFilter,\n isFacetColumnValuesRequest,\n} from '@/utils/types/IsType'\nimport { UniqueFacetIdentifier } from '@/utils/types/UniqueFacetIdentifier'\nimport {\n FacetColumnRangeRequest,\n FacetColumnValuesRequest,\n QueryBundleRequest,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { cloneDeep, isEqual } from 'lodash-es'\nimport * as React from 'react'\nimport { facetObjectMatchesDefinition } from '../../functions/queryUtils'\nimport { DEFAULT_PAGE_SIZE } from '../../SynapseConstants'\nimport { QueryChangeCommitOptions } from './useTableQueryReducer'\n\nexport function getQueryFromSetStateAction(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setQuery'\n queryOrUpdater: React.SetStateAction<QueryBundleRequest>\n },\n queryRequest: QueryBundleRequest,\n): QueryBundleRequest {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryOrUpdater } = action\n if (typeof queryOrUpdater === 'function') {\n return queryOrUpdater(queryRequestClone)\n } else {\n return queryOrUpdater\n }\n}\n\nexport function addValueToSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'addValueToSelectedFacet'\n facet: UniqueFacetIdentifier\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, value } = action\n const newFacets = queryRequestClone.query.selectedFacets ?? []\n\n const existingFacetSelection = newFacets.find(\n (existingFacet): existingFacet is FacetColumnValuesRequest => {\n return (\n existingFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest' &&\n facetObjectMatchesDefinition(facet, existingFacet)\n )\n },\n )\n\n if (existingFacetSelection) {\n if (!existingFacetSelection.facetValues.includes(value)) {\n existingFacetSelection.facetValues.push(value)\n }\n } else {\n newFacets.push({\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n columnName: facet.columnName,\n jsonPath: facet.jsonPath,\n facetValues: [value],\n })\n }\n queryRequestClone.query.selectedFacets = newFacets\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeSelectedFacet'\n facetsToRemove: UniqueFacetIdentifier | UniqueFacetIdentifier[]\n },\n queryRequest: QueryBundleRequest,\n): QueryBundleRequest {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facetsToRemove } = action\n const isArray = Array.isArray(facetsToRemove)\n queryRequestClone.query.selectedFacets = (\n queryRequestClone.query.selectedFacets ?? []\n ).filter(facet => {\n // Use lodash for deep comparison\n if (isArray) {\n return !facetsToRemove.find(item => {\n return facetObjectMatchesDefinition(item, facet)\n })\n } else {\n return !facetObjectMatchesDefinition(facetsToRemove, facet)\n }\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function setRangeFacetValue(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setRangeFacetValue'\n facet: UniqueFacetIdentifier\n min?: string\n max?: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, min, max } = action\n const newFacets = cloneDeep(queryRequestClone.query.selectedFacets ?? [])\n\n const existingFacetSelection = newFacets.find(\n (existingFacet): existingFacet is FacetColumnRangeRequest => {\n return (\n existingFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest' &&\n facetObjectMatchesDefinition(facet, existingFacet)\n )\n },\n )\n if (existingFacetSelection && min == null && max == null) {\n // remove the facet\n newFacets.splice(newFacets.indexOf(existingFacetSelection), 1)\n } else if (existingFacetSelection) {\n existingFacetSelection.min = min\n existingFacetSelection.max = max\n } else {\n newFacets.push({\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest',\n columnName: facet.columnName,\n jsonPath: facet.jsonPath,\n min,\n max,\n })\n }\n queryRequestClone.query.selectedFacets = newFacets\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeValueFromSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeValueFromSelectedFacet'\n facet: UniqueFacetIdentifier\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, value } = action\n queryRequestClone.query.selectedFacets = (\n queryRequestClone.query.selectedFacets ?? []\n )\n // Modify the requested filter\n .map(facetColumnRequest => {\n if (\n isFacetColumnValuesRequest(facetColumnRequest) &&\n facetObjectMatchesDefinition(facet, facetColumnRequest)\n ) {\n // Remove the value from the filter\n facetColumnRequest.facetValues = facetColumnRequest.facetValues.filter(\n v => v !== value,\n )\n }\n return facetColumnRequest\n })\n // Remove filters that have no values\n .filter(facetColumnRequest => {\n if (isFacetColumnValuesRequest(facetColumnRequest)) {\n // Remove the value from the filter\n return (\n Array.isArray(facetColumnRequest.facetValues) &&\n facetColumnRequest.facetValues.length > 0\n )\n }\n return true\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeQueryFilter(\n action: {\n type: 'removeQueryFilter'\n queryFilter: QueryFilter\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryFilter } = action\n queryRequestClone.query.additionalFilters = (\n queryRequestClone.query.additionalFilters ?? []\n ).filter(qf => {\n // Use lodash for deep comparison\n return !isEqual(qf, queryFilter)\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeValueFromQueryFilter(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeValueFromQueryFilter'\n queryFilter: QueryFilter\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryFilter, value } = action\n queryRequestClone.query.additionalFilters = (\n queryRequestClone.query.additionalFilters ?? []\n )\n // Modify the requested filter\n .map(qf => {\n if (\n (isColumnSingleValueQueryFilter(qf) ||\n isColumnMultiValueFunctionQueryFilter(qf)) &&\n isEqual(qf, queryFilter)\n ) {\n // Remove the value from the filter\n qf.values = qf.values.filter(v => v !== value)\n }\n return qf\n })\n // Remove filters that have no values\n .filter(qf => {\n if (\n isColumnSingleValueQueryFilter(qf) ||\n isColumnMultiValueFunctionQueryFilter(qf)\n ) {\n // Remove the value from the filter\n return Array.isArray(qf.values) && qf.values.length > 0\n }\n return true\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function setPageSize(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setPageSize'\n pageSize: number\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { pageSize } = action\n queryRequestClone.query.limit = pageSize\n return queryRequestClone\n}\n\nexport function goToPage(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'goToPage'\n pageNumber: number\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { pageNumber } = action\n const pageSize = queryRequest.query.limit ?? DEFAULT_PAGE_SIZE\n queryRequestClone.query.offset = (pageNumber - 1) * pageSize\n return queryRequestClone\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableQueryReducerActions.js","names":[],"sources":["../../../../src/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.ts"],"sourcesContent":["import {\n isColumnMultiValueFunctionQueryFilter,\n isColumnSingleValueQueryFilter,\n isFacetColumnValuesRequest,\n} from '@/utils/types/IsType'\nimport { UniqueFacetIdentifier } from '@/utils/types/UniqueFacetIdentifier'\nimport {\n FacetColumnRangeRequest,\n FacetColumnValuesRequest,\n QueryBundleRequest,\n QueryFilter,\n} from '@sage-bionetworks/synapse-types'\nimport { cloneDeep, isEqual } from 'lodash-es'\nimport * as React from 'react'\nimport { facetObjectMatchesDefinition } from '../../functions/queryUtils'\nimport { DEFAULT_PAGE_SIZE } from '../../SynapseConstants'\nimport { QueryChangeCommitOptions } from './useTableQueryReducer'\n\nexport function getQueryFromSetStateAction(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setQuery'\n queryOrUpdater: React.SetStateAction<QueryBundleRequest>\n },\n queryRequest: QueryBundleRequest,\n): QueryBundleRequest {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryOrUpdater } = action\n if (typeof queryOrUpdater === 'function') {\n return queryOrUpdater(queryRequestClone)\n } else {\n return queryOrUpdater\n }\n}\n\nexport function addValueToSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'addValueToSelectedFacet'\n facet: UniqueFacetIdentifier\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, value } = action\n const newFacets = queryRequestClone.query.selectedFacets ?? []\n\n const existingFacetSelection = newFacets.find(\n (existingFacet): existingFacet is FacetColumnValuesRequest => {\n return (\n existingFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest' &&\n facetObjectMatchesDefinition(facet, existingFacet)\n )\n },\n )\n\n if (existingFacetSelection) {\n if (!existingFacetSelection.facetValues.includes(value)) {\n existingFacetSelection.facetValues.push(value)\n }\n } else {\n newFacets.push({\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnValuesRequest',\n columnName: facet.columnName,\n jsonPath: facet.jsonPath,\n facetValues: [value],\n })\n }\n queryRequestClone.query.selectedFacets = newFacets\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeSelectedFacet'\n facetsToRemove: UniqueFacetIdentifier | UniqueFacetIdentifier[]\n },\n queryRequest: QueryBundleRequest,\n): QueryBundleRequest {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facetsToRemove } = action\n const isArray = Array.isArray(facetsToRemove)\n queryRequestClone.query.selectedFacets = (\n queryRequestClone.query.selectedFacets ?? []\n ).filter(facet => {\n // Use lodash for deep comparison\n if (isArray) {\n return !facetsToRemove.some(item => {\n return facetObjectMatchesDefinition(item, facet)\n })\n } else {\n return !facetObjectMatchesDefinition(facetsToRemove, facet)\n }\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function setRangeFacetValue(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setRangeFacetValue'\n facet: UniqueFacetIdentifier\n min?: string\n max?: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, min, max } = action\n const newFacets = cloneDeep(queryRequestClone.query.selectedFacets ?? [])\n\n const existingFacetSelection = newFacets.find(\n (existingFacet): existingFacet is FacetColumnRangeRequest => {\n return (\n existingFacet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest' &&\n facetObjectMatchesDefinition(facet, existingFacet)\n )\n },\n )\n if (existingFacetSelection && min == null && max == null) {\n // remove the facet\n newFacets.splice(newFacets.indexOf(existingFacetSelection), 1)\n } else if (existingFacetSelection) {\n existingFacetSelection.min = min\n existingFacetSelection.max = max\n } else {\n newFacets.push({\n concreteType:\n 'org.sagebionetworks.repo.model.table.FacetColumnRangeRequest',\n columnName: facet.columnName,\n jsonPath: facet.jsonPath,\n min,\n max,\n })\n }\n queryRequestClone.query.selectedFacets = newFacets\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeValueFromSelectedFacet(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeValueFromSelectedFacet'\n facet: UniqueFacetIdentifier\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { facet, value } = action\n queryRequestClone.query.selectedFacets = (\n queryRequestClone.query.selectedFacets ?? []\n )\n // Modify the requested filter\n .map(facetColumnRequest => {\n if (\n isFacetColumnValuesRequest(facetColumnRequest) &&\n facetObjectMatchesDefinition(facet, facetColumnRequest)\n ) {\n // Remove the value from the filter\n facetColumnRequest.facetValues = facetColumnRequest.facetValues.filter(\n v => v !== value,\n )\n }\n return facetColumnRequest\n })\n // Remove filters that have no values\n .filter(facetColumnRequest => {\n if (isFacetColumnValuesRequest(facetColumnRequest)) {\n // Remove the value from the filter\n return (\n Array.isArray(facetColumnRequest.facetValues) &&\n facetColumnRequest.facetValues.length > 0\n )\n }\n return true\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeQueryFilter(\n action: {\n type: 'removeQueryFilter'\n queryFilter: QueryFilter\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryFilter } = action\n queryRequestClone.query.additionalFilters = (\n queryRequestClone.query.additionalFilters ?? []\n ).filter(qf => {\n // Use lodash for deep comparison\n return !isEqual(qf, queryFilter)\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function removeValueFromQueryFilter(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'removeValueFromQueryFilter'\n queryFilter: QueryFilter\n value: string\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { queryFilter, value } = action\n queryRequestClone.query.additionalFilters = (\n queryRequestClone.query.additionalFilters ?? []\n )\n // Modify the requested filter\n .map(qf => {\n if (\n (isColumnSingleValueQueryFilter(qf) ||\n isColumnMultiValueFunctionQueryFilter(qf)) &&\n isEqual(qf, queryFilter)\n ) {\n // Remove the value from the filter\n qf.values = qf.values.filter(v => v !== value)\n }\n return qf\n })\n // Remove filters that have no values\n .filter(qf => {\n if (\n isColumnSingleValueQueryFilter(qf) ||\n isColumnMultiValueFunctionQueryFilter(qf)\n ) {\n // Remove the value from the filter\n return Array.isArray(qf.values) && qf.values.length > 0\n }\n return true\n })\n if (!isEqual(queryRequestClone, queryRequest)) {\n queryRequestClone.query.offset = 0\n }\n return queryRequestClone\n}\n\nexport function setPageSize(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'setPageSize'\n pageSize: number\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { pageSize } = action\n queryRequestClone.query.limit = pageSize\n return queryRequestClone\n}\n\nexport function goToPage(\n action: { commitOptions?: QueryChangeCommitOptions } & {\n type: 'goToPage'\n pageNumber: number\n },\n queryRequest: QueryBundleRequest,\n) {\n const queryRequestClone = cloneDeep(queryRequest)\n const { pageNumber } = action\n const pageSize = queryRequest.query.limit ?? DEFAULT_PAGE_SIZE\n queryRequestClone.query.offset = (pageNumber - 1) * pageSize\n return queryRequestClone\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLogin.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useLogin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,0BAA0B,EAC3B,MAAM,8EAA8E,CAAA;AAErF,OAAO,EAIL,oBAAoB,EAErB,MAAM,iCAAiC,CAAA;AAGxC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAA;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAA;AAGxF,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,kBAAkB,CAAC,EAAE,0BAA0B,CAAA;IAE/C,uBAAuB,CAAC,EAAE,CACxB,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,YAAY,GAAG,QAAQ,CAAC,KAClE,IAAI,CAAA;CACV,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EACA,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,WAAW,CAAA;IACf,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9D,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvE,qBAAqB,EAAE,CACrB,IAAI,EAAE,MAAM,EAEZ,OAAO,CAAC,EAAE,oBAAoB,KAC3B,IAAI,CAAA;IAET,uBAAuB,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7D,2BAA2B,EAAE,OAAO,CAAA;IACpC,2BAA2B,EAAE,OAAO,CAAA;IACpC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAUD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CA0PtE"}
1
+ {"version":3,"file":"useLogin.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useLogin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,0BAA0B,EAC3B,MAAM,8EAA8E,CAAA;AAErF,OAAO,EAIL,oBAAoB,EAErB,MAAM,iCAAiC,CAAA;AAGxC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAA;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAA;AAGxF,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,kBAAkB,CAAC,EAAE,0BAA0B,CAAA;IAE/C,uBAAuB,CAAC,EAAE,CACxB,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,YAAY,GAAG,QAAQ,CAAC,KAClE,IAAI,CAAA;CACV,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EACA,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,WAAW,CAAA;IACf,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9D,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvE,qBAAqB,EAAE,CACrB,IAAI,EAAE,MAAM,EAEZ,OAAO,CAAC,EAAE,oBAAoB,KAC3B,IAAI,CAAA;IAET,uBAAuB,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7D,2BAA2B,EAAE,OAAO,CAAA;IACpC,2BAA2B,EAAE,OAAO,CAAA;IACpC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAWD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CA0PtE"}
@@ -10,12 +10,12 @@ import { ErrorResponseCode as c } from "@sage-bionetworks/synapse-types";
10
10
  import { instanceOfTwoFactorAuthErrorResponse as l } from "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
11
11
  import { useMutation as u } from "@tanstack/react-query";
12
12
  //#region src/utils/hooks/useLogin.ts
13
- var d = [
13
+ var d = new Set([
14
14
  "VERIFICATION_CODE",
15
15
  "RECOVERY_CODE",
16
16
  "LOGGED_IN",
17
17
  "DISABLE_2FA_PROMPT"
18
- ];
18
+ ]);
19
19
  function f(f) {
20
20
  let { sessionCallback: p = s, twoFaErrorResponse: m, onTwoFactorAuthRequired: h = s } = f, [g, _] = o("CHOOSE_AUTH_METHOD"), [v, y] = o(), [b, x] = o(), S = n("/changePassword");
21
21
  a(() => {
@@ -30,10 +30,10 @@ function f(f) {
30
30
  userId: parseInt(t, 10),
31
31
  twoFaToken: n,
32
32
  concreteType: "org.sagebionetworks.repo.model.auth.TwoFactorAuthErrorResponse"
33
- }), d.includes(g) || _("VERIFICATION_CODE"));
33
+ }), d.has(g) || _("VERIFICATION_CODE"));
34
34
  }
35
35
  }, [g]), a(() => {
36
- b && (x(b), d.includes(g) || _("VERIFICATION_CODE"));
36
+ b && (x(b), d.has(g) || _("VERIFICATION_CODE"));
37
37
  }, [b]), a(() => {
38
38
  b && h(b);
39
39
  }, [h, b]), a(() => {
@@ -53,7 +53,7 @@ function f(f) {
53
53
  e && (l(e) ? (_("VERIFICATION_CODE"), x(e)) : await C(e));
54
54
  }
55
55
  }), { mutate: E, isPending: D } = u({
56
- mutationFn: t.loginWith2fa,
56
+ mutationFn: (e) => t.loginWith2fa(e),
57
57
  onError: (e) => {
58
58
  y(e.reason), e.reason.includes("The provided code is invalid") ? y(`${e.reason} ${r}`) : (e.reason.includes("The provided twoFaToken is invalid") || e.reason.includes("Token has expired")) && (console.warn(e), y("Something went wrong. Refresh the page and try again."), window.location.href.includes("twoFaToken") && window.history.replaceState({}, document.title, window.location.href.replaceAll(/(twoFaToken|userId)=[^&]*&?/g, "")));
59
59
  },
@@ -1 +1 @@
1
- {"version":3,"file":"useLogin.js","names":[],"sources":["../../../src/utils/hooks/useLogin.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useResetTwoFactorAuth } from '@/synapse-queries'\nimport {\n instanceOfTwoFactorAuthErrorResponse,\n TwoFactorAuthErrorResponse,\n} from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n ErrorResponseCode,\n LoginResponse,\n TwoFactorAuthLoginRequest,\n TwoFactorAuthOtpType,\n TwoFactorAuthResetRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { useMutation } from '@tanstack/react-query'\nimport { noop } from 'lodash-es'\nimport { Dispatch, SetStateAction, useEffect, useState } from 'react'\nimport { AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY } from '../SynapseConstants'\nimport { useOneSageURL } from './useOneSageURL'\nimport { ONE_TIME_PASSWORD_STEP } from '@/components/Authentication/OneTimePasswordForm'\nimport { TOTP_CLOCK_SKEW_ERROR_APPENDAGE } from '@/components/Authentication/Constants'\n\nexport type UseLoginOptions = {\n sessionCallback?: () => void\n twoFaErrorResponse?: TwoFactorAuthErrorResponse\n /* If a twoFactorAuthError is encountered (including passed in the twoFactorAuthenticationRequired arg), this callback will be invoked */\n onTwoFactorAuthRequired?: (\n twoFaToken: Pick<TwoFactorAuthErrorResponse, 'twoFaToken' | 'userId'>,\n ) => void\n}\n\nexport type UseLoginReturn = {\n step:\n | 'CHOOSE_AUTH_METHOD'\n | 'USERNAME_PASSWORD'\n | ONE_TIME_PASSWORD_STEP\n | 'LOGGED_IN'\n onStepChange: Dispatch<SetStateAction<UseLoginReturn['step']>>\n submitUsernameAndPassword: (username: string, password: string) => void\n submitOneTimePassword: (\n code: string,\n /* The type of one time password code that can be used to authenticate through two-factor authentication. Default is based on current value of `step` */\n otpType?: TwoFactorAuthOtpType,\n ) => void\n /* Trigger sending an email which can be used to disable 2FA */\n beginTwoFactorAuthReset: (twoFaResetEndpoint: string) => void\n twoFactorAuthResetIsPending: boolean\n twoFactorAuthResetIsSuccess: boolean\n errorMessage: string | undefined\n loginIsPending: boolean\n}\n\n// When prompting the user for a 2FA code, allow the UI to show only these steps\nconst VALID_STEPS_DURING_2FA_PROMPT: Array<UseLoginReturn['step']> = [\n 'VERIFICATION_CODE',\n 'RECOVERY_CODE',\n 'LOGGED_IN',\n 'DISABLE_2FA_PROMPT',\n]\n\n/**\n * Stateful hook that manages logging into Synapse\n */\nexport default function useLogin(opts: UseLoginOptions): UseLoginReturn {\n const {\n sessionCallback = noop,\n twoFaErrorResponse: twoFaErrorResponseFromProps,\n onTwoFactorAuthRequired = noop,\n } = opts\n const [step, setStep] = useState<UseLoginReturn['step']>('CHOOSE_AUTH_METHOD')\n const [errorMessage, setErrorMessage] = useState<string | undefined>()\n const [twoFaErrorResponse, setTwoFaErrorResponse] = useState<\n TwoFactorAuthErrorResponse | undefined\n >()\n\n const changePasswordUrl = useOneSageURL('/changePassword')\n /**\n * Update state variable if optional prop changes\n */\n useEffect(() => {\n if (twoFaErrorResponseFromProps) {\n setTwoFaErrorResponse(twoFaErrorResponseFromProps)\n }\n }, [twoFaErrorResponseFromProps])\n\n /*\n * In SWC, if logging in with OAuth, the servlet will call POST /oauth2/session2 to get the access token.\n *\n * If the user has 2FA enabled, the servlet will receive a 401 with the userId and twoFaToken in the response.\n * The servlet will then redirect the user to the login page with the userId and twoFaToken in the searchParams.\n *\n * This effect will check if the search params are present, and change the step to 'VERIFICATION_CODE' if they are.\n */\n useEffect(() => {\n const fullUrl: URL = new URL(window.location.href)\n\n const { searchParams } = fullUrl\n if (searchParams) {\n const userId = searchParams.get('userId')\n const twoFaToken = searchParams.get('twoFaToken')\n if (userId && twoFaToken) {\n setTwoFaErrorResponse({\n errorCode: ErrorResponseCode.TWO_FA_REQUIRED,\n reason: '',\n userId: parseInt(userId, 10),\n twoFaToken,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.TwoFactorAuthErrorResponse',\n })\n if (!VALID_STEPS_DURING_2FA_PROMPT.includes(step)) {\n setStep('VERIFICATION_CODE')\n }\n }\n }\n }, [step])\n\n /*\n * In client-only apps (like Portals), if logging in with OAuth, the client app will call POST /oauth2/session2 to get the access token.\n *\n * If the user has 2FA enabled, the client app will receive a 401 with the userId and twoFaToken in the response.\n *\n * The app can pass the error response as a prop/argument, and we'll use it here to jump straight to the VERIFICATION_CODE step.\n */\n useEffect(() => {\n if (twoFaErrorResponse) {\n setTwoFaErrorResponse(twoFaErrorResponse)\n if (!VALID_STEPS_DURING_2FA_PROMPT.includes(step)) {\n setStep('VERIFICATION_CODE')\n }\n }\n // We do NOT want to rerun this effect on step change. It should only run once, when we get the error.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [twoFaErrorResponse])\n\n /**\n * Call the onTwoFactorAuthRequired callback when a twoFaToken is present\n */\n useEffect(() => {\n if (twoFaErrorResponse) {\n onTwoFactorAuthRequired(twoFaErrorResponse)\n }\n }, [onTwoFactorAuthRequired, twoFaErrorResponse])\n\n /* When the step changes, clear the old error message. */\n useEffect(() => {\n setErrorMessage(undefined)\n }, [step])\n\n async function finishLogin(loginResponse: LoginResponse) {\n await SynapseClient.setAccessTokenCookie(loginResponse.accessToken)\n localStorage.setItem(\n AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY,\n loginResponse.authenticationReceipt ?? '',\n )\n setStep('LOGGED_IN')\n\n if (sessionCallback) {\n sessionCallback()\n }\n }\n\n const {\n mutate: mutateLoginWithUsernameAndPassword,\n isPending: loginWithUsernameAndPasswordIsPending,\n } = useMutation<\n LoginResponse | TwoFactorAuthErrorResponse,\n SynapseClientError,\n { username: string; password: string; authenticationReceipt: string | null }\n >({\n mutationFn: ({ username, password, authenticationReceipt }) =>\n SynapseClient.login(username, password, authenticationReceipt),\n onError: error => {\n setErrorMessage(error.reason)\n const { errorResponse } = error\n if (\n errorResponse &&\n 'errorCode' in errorResponse &&\n errorResponse.errorCode ==\n ErrorResponseCode.PASSWORD_RESET_VIA_EMAIL_REQUIRED\n ) {\n window.location.assign(changePasswordUrl.toString())\n }\n },\n onSuccess: async loginResponse => {\n if (loginResponse) {\n if (instanceOfTwoFactorAuthErrorResponse(loginResponse)) {\n setStep('VERIFICATION_CODE')\n setTwoFaErrorResponse(loginResponse)\n } else {\n await finishLogin(loginResponse)\n }\n }\n },\n })\n\n const {\n mutate: mutateLoginWith2FACode,\n isPending: loginWith2FACodeIsPending,\n } = useMutation<LoginResponse, SynapseClientError, TwoFactorAuthLoginRequest>(\n {\n mutationFn: SynapseClient.loginWith2fa,\n onError: e => {\n setErrorMessage(e.reason)\n if (e.reason.includes('The provided code is invalid')) {\n // The most common cause of an invalid TOTP code is clock skew between the user's device and the server.\n setErrorMessage(`${e.reason} ${TOTP_CLOCK_SKEW_ERROR_APPENDAGE}`)\n } else if (\n // The twoFaToken wasn't transmitted correctly\n e.reason.includes('The provided twoFaToken is invalid') ||\n // The user waited too long to enter the code.\n e.reason.includes('Token has expired')\n ) {\n console.warn(e)\n // Instruct the user refresh to start over.\n setErrorMessage(\n 'Something went wrong. Refresh the page and try again.',\n )\n // If the 2FA token is in the search parameters, remove it so the user doesn't just get the same error again.\n if (window.location.href.includes('twoFaToken')) {\n window.history.replaceState(\n {},\n document.title,\n // using regex because SWC hashbang doesn't work with URLSearchParams\n window.location.href.replaceAll(\n /(twoFaToken|userId)=[^&]*&?/g,\n '',\n ),\n )\n }\n }\n },\n onSuccess: finishLogin,\n },\n )\n\n const {\n mutate: resetTwoFactorAuth,\n isSuccess: twoFactorAuthResetIsSuccess,\n isPending: twoFactorAuthResetIsPending,\n } = useResetTwoFactorAuth({\n onError: e => {\n setErrorMessage(e.reason)\n },\n })\n\n const submitUsernameAndPassword: UseLoginReturn['submitUsernameAndPassword'] =\n (username, password) => {\n setErrorMessage(undefined)\n const authenticationReceipt = localStorage.getItem(\n AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY,\n )\n mutateLoginWithUsernameAndPassword({\n username,\n password,\n authenticationReceipt,\n })\n }\n\n function verifyTwoFaErrorIsPresent(\n twoFaErrorResponse: TwoFactorAuthErrorResponse | null | undefined,\n ): twoFaErrorResponse is TwoFactorAuthErrorResponse {\n if (twoFaErrorResponse == null) {\n // This type of error could happen if the 2FA component exists on its own route, and the user directly navigates to it without first logging in with credentials/OAuth\n setErrorMessage(\n 'You did not first log in with your password or a third-party identity provider.',\n )\n return false\n }\n return true\n }\n\n const submitOneTimePassword: UseLoginReturn['submitOneTimePassword'] = (\n code,\n otpType = step === 'RECOVERY_CODE' ? 'RECOVERY_CODE' : 'TOTP',\n ) => {\n setErrorMessage(undefined)\n if (verifyTwoFaErrorIsPresent(twoFaErrorResponse)) {\n const request: TwoFactorAuthLoginRequest = {\n userId: twoFaErrorResponse.userId!,\n twoFaToken: twoFaErrorResponse.twoFaToken!,\n otpCode: code,\n otpType: otpType,\n }\n mutateLoginWith2FACode(request)\n }\n }\n\n const beginTwoFactorAuthReset: UseLoginReturn['beginTwoFactorAuthReset'] = (\n twoFaResetEndpoint: string,\n ) => {\n setErrorMessage(undefined)\n if (verifyTwoFaErrorIsPresent(twoFaErrorResponse)) {\n const request: TwoFactorAuthResetRequest = {\n userId: twoFaErrorResponse.userId!,\n twoFaToken: twoFaErrorResponse.twoFaToken,\n twoFaResetEndpoint: twoFaResetEndpoint,\n }\n resetTwoFactorAuth(request)\n }\n }\n\n return {\n step,\n onStepChange: setStep,\n submitUsernameAndPassword,\n submitOneTimePassword: submitOneTimePassword,\n errorMessage,\n loginIsPending:\n loginWithUsernameAndPasswordIsPending || loginWith2FACodeIsPending,\n beginTwoFactorAuthReset,\n twoFactorAuthResetIsPending,\n twoFactorAuthResetIsSuccess,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useLogin.js","names":[],"sources":["../../../src/utils/hooks/useLogin.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useResetTwoFactorAuth } from '@/synapse-queries'\nimport {\n instanceOfTwoFactorAuthErrorResponse,\n TwoFactorAuthErrorResponse,\n} from '@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n ErrorResponseCode,\n LoginResponse,\n TwoFactorAuthLoginRequest,\n TwoFactorAuthOtpType,\n TwoFactorAuthResetRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { useMutation } from '@tanstack/react-query'\nimport { noop } from 'lodash-es'\nimport { Dispatch, SetStateAction, useEffect, useState } from 'react'\nimport { AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY } from '../SynapseConstants'\nimport { useOneSageURL } from './useOneSageURL'\nimport { ONE_TIME_PASSWORD_STEP } from '@/components/Authentication/OneTimePasswordForm'\nimport { TOTP_CLOCK_SKEW_ERROR_APPENDAGE } from '@/components/Authentication/Constants'\n\nexport type UseLoginOptions = {\n sessionCallback?: () => void\n twoFaErrorResponse?: TwoFactorAuthErrorResponse\n /* If a twoFactorAuthError is encountered (including passed in the twoFactorAuthenticationRequired arg), this callback will be invoked */\n onTwoFactorAuthRequired?: (\n twoFaToken: Pick<TwoFactorAuthErrorResponse, 'twoFaToken' | 'userId'>,\n ) => void\n}\n\nexport type UseLoginReturn = {\n step:\n | 'CHOOSE_AUTH_METHOD'\n | 'USERNAME_PASSWORD'\n | ONE_TIME_PASSWORD_STEP\n | 'LOGGED_IN'\n onStepChange: Dispatch<SetStateAction<UseLoginReturn['step']>>\n submitUsernameAndPassword: (username: string, password: string) => void\n submitOneTimePassword: (\n code: string,\n /* The type of one time password code that can be used to authenticate through two-factor authentication. Default is based on current value of `step` */\n otpType?: TwoFactorAuthOtpType,\n ) => void\n /* Trigger sending an email which can be used to disable 2FA */\n beginTwoFactorAuthReset: (twoFaResetEndpoint: string) => void\n twoFactorAuthResetIsPending: boolean\n twoFactorAuthResetIsSuccess: boolean\n errorMessage: string | undefined\n loginIsPending: boolean\n}\n\n// When prompting the user for a 2FA code, allow the UI to show only these steps\nconst VALID_STEPS_DURING_2FA_PROMPT: ReadonlySet<UseLoginReturn['step']> =\n new Set([\n 'VERIFICATION_CODE',\n 'RECOVERY_CODE',\n 'LOGGED_IN',\n 'DISABLE_2FA_PROMPT',\n ])\n\n/**\n * Stateful hook that manages logging into Synapse\n */\nexport default function useLogin(opts: UseLoginOptions): UseLoginReturn {\n const {\n sessionCallback = noop,\n twoFaErrorResponse: twoFaErrorResponseFromProps,\n onTwoFactorAuthRequired = noop,\n } = opts\n const [step, setStep] = useState<UseLoginReturn['step']>('CHOOSE_AUTH_METHOD')\n const [errorMessage, setErrorMessage] = useState<string | undefined>()\n const [twoFaErrorResponse, setTwoFaErrorResponse] = useState<\n TwoFactorAuthErrorResponse | undefined\n >()\n\n const changePasswordUrl = useOneSageURL('/changePassword')\n /**\n * Update state variable if optional prop changes\n */\n useEffect(() => {\n if (twoFaErrorResponseFromProps) {\n setTwoFaErrorResponse(twoFaErrorResponseFromProps)\n }\n }, [twoFaErrorResponseFromProps])\n\n /*\n * In SWC, if logging in with OAuth, the servlet will call POST /oauth2/session2 to get the access token.\n *\n * If the user has 2FA enabled, the servlet will receive a 401 with the userId and twoFaToken in the response.\n * The servlet will then redirect the user to the login page with the userId and twoFaToken in the searchParams.\n *\n * This effect will check if the search params are present, and change the step to 'VERIFICATION_CODE' if they are.\n */\n useEffect(() => {\n const fullUrl: URL = new URL(window.location.href)\n\n const { searchParams } = fullUrl\n if (searchParams) {\n const userId = searchParams.get('userId')\n const twoFaToken = searchParams.get('twoFaToken')\n if (userId && twoFaToken) {\n setTwoFaErrorResponse({\n errorCode: ErrorResponseCode.TWO_FA_REQUIRED,\n reason: '',\n userId: parseInt(userId, 10),\n twoFaToken,\n concreteType:\n 'org.sagebionetworks.repo.model.auth.TwoFactorAuthErrorResponse',\n })\n if (!VALID_STEPS_DURING_2FA_PROMPT.has(step)) {\n setStep('VERIFICATION_CODE')\n }\n }\n }\n }, [step])\n\n /*\n * In client-only apps (like Portals), if logging in with OAuth, the client app will call POST /oauth2/session2 to get the access token.\n *\n * If the user has 2FA enabled, the client app will receive a 401 with the userId and twoFaToken in the response.\n *\n * The app can pass the error response as a prop/argument, and we'll use it here to jump straight to the VERIFICATION_CODE step.\n */\n useEffect(() => {\n if (twoFaErrorResponse) {\n setTwoFaErrorResponse(twoFaErrorResponse)\n if (!VALID_STEPS_DURING_2FA_PROMPT.has(step)) {\n setStep('VERIFICATION_CODE')\n }\n }\n // We do NOT want to rerun this effect on step change. It should only run once, when we get the error.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [twoFaErrorResponse])\n\n /**\n * Call the onTwoFactorAuthRequired callback when a twoFaToken is present\n */\n useEffect(() => {\n if (twoFaErrorResponse) {\n onTwoFactorAuthRequired(twoFaErrorResponse)\n }\n }, [onTwoFactorAuthRequired, twoFaErrorResponse])\n\n /* When the step changes, clear the old error message. */\n useEffect(() => {\n setErrorMessage(undefined)\n }, [step])\n\n async function finishLogin(loginResponse: LoginResponse) {\n await SynapseClient.setAccessTokenCookie(loginResponse.accessToken)\n localStorage.setItem(\n AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY,\n loginResponse.authenticationReceipt ?? '',\n )\n setStep('LOGGED_IN')\n\n if (sessionCallback) {\n sessionCallback()\n }\n }\n\n const {\n mutate: mutateLoginWithUsernameAndPassword,\n isPending: loginWithUsernameAndPasswordIsPending,\n } = useMutation<\n LoginResponse | TwoFactorAuthErrorResponse,\n SynapseClientError,\n { username: string; password: string; authenticationReceipt: string | null }\n >({\n mutationFn: ({ username, password, authenticationReceipt }) =>\n SynapseClient.login(username, password, authenticationReceipt),\n onError: error => {\n setErrorMessage(error.reason)\n const { errorResponse } = error\n if (\n errorResponse &&\n 'errorCode' in errorResponse &&\n errorResponse.errorCode ==\n ErrorResponseCode.PASSWORD_RESET_VIA_EMAIL_REQUIRED\n ) {\n window.location.assign(changePasswordUrl.toString())\n }\n },\n onSuccess: async loginResponse => {\n if (loginResponse) {\n if (instanceOfTwoFactorAuthErrorResponse(loginResponse)) {\n setStep('VERIFICATION_CODE')\n setTwoFaErrorResponse(loginResponse)\n } else {\n await finishLogin(loginResponse)\n }\n }\n },\n })\n\n const {\n mutate: mutateLoginWith2FACode,\n isPending: loginWith2FACodeIsPending,\n } = useMutation<LoginResponse, SynapseClientError, TwoFactorAuthLoginRequest>(\n {\n mutationFn: request => SynapseClient.loginWith2fa(request),\n onError: e => {\n setErrorMessage(e.reason)\n if (e.reason.includes('The provided code is invalid')) {\n // The most common cause of an invalid TOTP code is clock skew between the user's device and the server.\n setErrorMessage(`${e.reason} ${TOTP_CLOCK_SKEW_ERROR_APPENDAGE}`)\n } else if (\n // The twoFaToken wasn't transmitted correctly\n e.reason.includes('The provided twoFaToken is invalid') ||\n // The user waited too long to enter the code.\n e.reason.includes('Token has expired')\n ) {\n console.warn(e)\n // Instruct the user refresh to start over.\n setErrorMessage(\n 'Something went wrong. Refresh the page and try again.',\n )\n // If the 2FA token is in the search parameters, remove it so the user doesn't just get the same error again.\n if (window.location.href.includes('twoFaToken')) {\n window.history.replaceState(\n {},\n document.title,\n // using regex because SWC hashbang doesn't work with URLSearchParams\n window.location.href.replaceAll(\n /(twoFaToken|userId)=[^&]*&?/g,\n '',\n ),\n )\n }\n }\n },\n onSuccess: finishLogin,\n },\n )\n\n const {\n mutate: resetTwoFactorAuth,\n isSuccess: twoFactorAuthResetIsSuccess,\n isPending: twoFactorAuthResetIsPending,\n } = useResetTwoFactorAuth({\n onError: e => {\n setErrorMessage(e.reason)\n },\n })\n\n const submitUsernameAndPassword: UseLoginReturn['submitUsernameAndPassword'] =\n (username, password) => {\n setErrorMessage(undefined)\n const authenticationReceipt = localStorage.getItem(\n AUTHENTICATION_RECEIPT_LOCALSTORAGE_KEY,\n )\n mutateLoginWithUsernameAndPassword({\n username,\n password,\n authenticationReceipt,\n })\n }\n\n function verifyTwoFaErrorIsPresent(\n twoFaErrorResponse: TwoFactorAuthErrorResponse | null | undefined,\n ): twoFaErrorResponse is TwoFactorAuthErrorResponse {\n if (twoFaErrorResponse == null) {\n // This type of error could happen if the 2FA component exists on its own route, and the user directly navigates to it without first logging in with credentials/OAuth\n setErrorMessage(\n 'You did not first log in with your password or a third-party identity provider.',\n )\n return false\n }\n return true\n }\n\n const submitOneTimePassword: UseLoginReturn['submitOneTimePassword'] = (\n code,\n otpType = step === 'RECOVERY_CODE' ? 'RECOVERY_CODE' : 'TOTP',\n ) => {\n setErrorMessage(undefined)\n if (verifyTwoFaErrorIsPresent(twoFaErrorResponse)) {\n const request: TwoFactorAuthLoginRequest = {\n userId: twoFaErrorResponse.userId!,\n twoFaToken: twoFaErrorResponse.twoFaToken!,\n otpCode: code,\n otpType: otpType,\n }\n mutateLoginWith2FACode(request)\n }\n }\n\n const beginTwoFactorAuthReset: UseLoginReturn['beginTwoFactorAuthReset'] = (\n twoFaResetEndpoint: string,\n ) => {\n setErrorMessage(undefined)\n if (verifyTwoFaErrorIsPresent(twoFaErrorResponse)) {\n const request: TwoFactorAuthResetRequest = {\n userId: twoFaErrorResponse.userId!,\n twoFaToken: twoFaErrorResponse.twoFaToken,\n twoFaResetEndpoint: twoFaResetEndpoint,\n }\n resetTwoFactorAuth(request)\n }\n }\n\n return {\n step,\n onStepChange: setStep,\n submitUsernameAndPassword,\n submitOneTimePassword: submitOneTimePassword,\n errorMessage,\n loginIsPending:\n loginWithUsernameAndPasswordIsPending || loginWith2FACodeIsPending,\n beginTwoFactorAuthReset,\n twoFactorAuthResetIsPending,\n twoFactorAuthResetIsSuccess,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateFolderPath.js","names":[],"sources":["../../../../src/utils/hooks/useUploadFileEntity/useCreateFolderPath.ts"],"sourcesContent":["import {\n useCreateEntity,\n useGetEntityLookupQueryOptions,\n useGetEntityQueryOptions,\n} from '@/synapse-queries/entity/useEntity'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport {\n convertToEntityType,\n entityTypeToFriendlyName,\n} from '../../functions/EntityTypeUtils'\n\n/**\n * Given the ID of a container entity and a path string array, create the folder structure as necessary and return the ID of the final folder in the path.\n * @returns The ID of the final folder in the path.\n */\nexport function useCreateFolderPath() {\n const { mutateAsync: createEntity } = useCreateEntity()\n\n const queryClient = useQueryClient()\n const getEntityLookupQueryOptions = useGetEntityLookupQueryOptions()\n const getEntityQueryOptions = useGetEntityQueryOptions()\n\n return useMutation({\n mutationFn: async (args: { rootContainerId: string; path: string[] }) => {\n const { rootContainerId: rootContainerId, path } = args\n let parentId = rootContainerId\n for (const pathElement of path) {\n const foundEntityId = await queryClient.fetchQuery(\n getEntityLookupQueryOptions({\n parentId: parentId,\n entityName: pathElement,\n }),\n )\n\n if (foundEntityId) {\n // Verify that this entity is a folder\n const entity = await queryClient.fetchQuery(\n getEntityQueryOptions(foundEntityId),\n )\n\n if (entity.concreteType != 'org.sagebionetworks.repo.model.Folder') {\n const typeOfExistingEntity = convertToEntityType(\n entity.concreteType,\n )\n throw new Error(\n `A(n) ${entityTypeToFriendlyName(\n typeOfExistingEntity,\n )} named \"${pathElement}\" already exists in this location (${parentId}). A folder could not be created.`,\n )\n }\n\n parentId = foundEntityId\n } else {\n // Create a new folder\n const { id } = await createEntity({\n concreteType: 'org.sagebionetworks.repo.model.Folder',\n name: pathElement,\n parentId: parentId,\n })\n parentId = id!\n }\n }\n\n return parentId\n },\n })\n}\n"],"mappings":";;;;AAeA,SAAgB,IAAsB;CACpC,IAAM,EAAE,aAAa,MAAiB,EAAgB,GAEhD,IAAc,EAAe,GAC7B,IAA8B,EAA+B,GAC7D,IAAwB,EAAyB;CAEvD,OAAO,EAAY,EACjB,YAAY,OAAO,MAAsD;EACvE,IAAM,EAAmB,oBAAiB,YAAS,GAC/C,IAAW;EACf,KAAK,IAAM,KAAe,GAAM;GAC9B,IAAM,IAAgB,MAAM,EAAY,WACtC,EAA4B;IAChB;IACV,YAAY;GACd,CAAC,CACH;GAEA,IAAI,GAAe;IAEjB,IAAM,IAAS,MAAM,EAAY,WAC/B,EAAsB,CAAa,CACrC;IAEA,IAAI,EAAO,gBAAgB,yCAAyC;KAClE,IAAM,IAAuB,EAC3B,EAAO,YACT;KACA,MAAU,MACR,QAAQ,EACN,CACF,EAAE,UAAU,EAAY,qCAAqC,EAAS,kCACxE;IACF;IAEA,IAAW;GACb,OAAO;IAEL,IAAM,EAAE,UAAO,MAAM,EAAa;KAChC,cAAc;KACd,MAAM;KACI;IACZ,CAAC;IACD,IAAW;GACb;EACF;EAEA,OAAO;CACT,EACF,CAAC;AACH"}
1
+ {"version":3,"file":"useCreateFolderPath.js","names":[],"sources":["../../../../src/utils/hooks/useUploadFileEntity/useCreateFolderPath.ts"],"sourcesContent":["import {\n useCreateEntity,\n useGetEntityLookupQueryOptions,\n useGetEntityQueryOptions,\n} from '@/synapse-queries/entity/useEntity'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport {\n convertToEntityType,\n entityTypeToFriendlyName,\n} from '../../functions/EntityTypeUtils'\n\n/**\n * Given the ID of a container entity and a path string array, create the folder structure as necessary and return the ID of the final folder in the path.\n * @returns The ID of the final folder in the path.\n */\nexport function useCreateFolderPath() {\n const { mutateAsync: createEntity } = useCreateEntity()\n\n const queryClient = useQueryClient()\n const getEntityLookupQueryOptions = useGetEntityLookupQueryOptions()\n const getEntityQueryOptions = useGetEntityQueryOptions()\n\n return useMutation({\n mutationFn: async (args: { rootContainerId: string; path: string[] }) => {\n const { rootContainerId, path } = args\n let parentId = rootContainerId\n for (const pathElement of path) {\n const foundEntityId = await queryClient.fetchQuery(\n getEntityLookupQueryOptions({\n parentId: parentId,\n entityName: pathElement,\n }),\n )\n\n if (foundEntityId) {\n // Verify that this entity is a folder\n const entity = await queryClient.fetchQuery(\n getEntityQueryOptions(foundEntityId),\n )\n\n if (entity.concreteType != 'org.sagebionetworks.repo.model.Folder') {\n const typeOfExistingEntity = convertToEntityType(\n entity.concreteType,\n )\n throw new Error(\n `A(n) ${entityTypeToFriendlyName(\n typeOfExistingEntity,\n )} named \"${pathElement}\" already exists in this location (${parentId}). A folder could not be created.`,\n )\n }\n\n parentId = foundEntityId\n } else {\n // Create a new folder\n const { id } = await createEntity({\n concreteType: 'org.sagebionetworks.repo.model.Folder',\n name: pathElement,\n parentId: parentId,\n })\n parentId = id!\n }\n }\n\n return parentId\n },\n })\n}\n"],"mappings":";;;;AAeA,SAAgB,IAAsB;CACpC,IAAM,EAAE,aAAa,MAAiB,EAAgB,GAEhD,IAAc,EAAe,GAC7B,IAA8B,EAA+B,GAC7D,IAAwB,EAAyB;CAEvD,OAAO,EAAY,EACjB,YAAY,OAAO,MAAsD;EACvE,IAAM,EAAE,oBAAiB,YAAS,GAC9B,IAAW;EACf,KAAK,IAAM,KAAe,GAAM;GAC9B,IAAM,IAAgB,MAAM,EAAY,WACtC,EAA4B;IAChB;IACV,YAAY;GACd,CAAC,CACH;GAEA,IAAI,GAAe;IAEjB,IAAM,IAAS,MAAM,EAAY,WAC/B,EAAsB,CAAa,CACrC;IAEA,IAAI,EAAO,gBAAgB,yCAAyC;KAClE,IAAM,IAAuB,EAC3B,EAAO,YACT;KACA,MAAU,MACR,QAAQ,EACN,CACF,EAAE,UAAU,EAAY,qCAAqC,EAAS,kCACxE;IACF;IAEA,IAAW;GACb,OAAO;IAEL,IAAM,EAAE,UAAO,MAAM,EAAa;KAChC,cAAc;KACd,MAAM;KACI;IACZ,CAAC;IACD,IAAW;GACb;EACF;EAEA,OAAO;CACT,EACF,CAAC;AACH"}
@@ -1,5 +1,11 @@
1
1
  import { JSONSchema7, JSONSchema7Definition } from 'json-schema';
2
+ type Definitions = NonNullable<JSONSchema7['definitions']>;
2
3
  type TopLevelProperties = Record<string, JSONSchema7Definition>;
4
+ /**
5
+ * Resolve a local `#/definitions/X` reference (or bare `X` key) against the root schema's `definitions`.
6
+ * Returns undefined for a dangling reference or a boolean schema.
7
+ */
8
+ export declare function resolveRef(ref: string, definitions: Definitions | undefined): JSONSchema7 | undefined;
3
9
  /**
4
10
  * Collects the names that could appear as a top-level property of an instance validated by the given
5
11
  * JSON Schema, keyed by property name. Each value is the `$ref`-resolved schema for that property.
@@ -1 +1 @@
1
- {"version":3,"file":"collectTopLevelProperties.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAKhE,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;AAmF/D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,kBAAkB,CAOpB"}
1
+ {"version":3,"file":"collectTopLevelProperties.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAIhE,KAAK,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAA;AAC1D,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;AAY/D;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,WAAW,GAAG,SAAS,CAIzB;AAgED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,kBAAkB,CAOpB"}
@@ -26,6 +26,6 @@ function a(e) {
26
26
  return e && i(e, e.definitions, /* @__PURE__ */ new Set(), t), t;
27
27
  }
28
28
  //#endregion
29
- export { a as collectTopLevelProperties };
29
+ export { a as collectTopLevelProperties, n as resolveRef };
30
30
 
31
31
  //# sourceMappingURL=collectTopLevelProperties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collectTopLevelProperties.js","names":[],"sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"sourcesContent":["import { JSONSchema7, JSONSchema7Definition } from 'json-schema'\n\nconst DEFINITIONS_PREFIX = '#/definitions/'\n\ntype Definitions = NonNullable<JSONSchema7['definitions']>\ntype TopLevelProperties = Record<string, JSONSchema7Definition>\n\n/**\n * Given a full `#/definitions/X` reference, return the relative key (`X`) used in the definitions\n * map. A reference that is already a bare key is returned as-is.\n */\nfunction getRelativeRef(ref: string): string {\n return ref.startsWith(DEFINITIONS_PREFIX)\n ? ref.substring(DEFINITIONS_PREFIX.length)\n : ref\n}\n\nfunction resolveRef(\n ref: string,\n definitions: Definitions | undefined,\n): JSONSchema7 | undefined {\n const resolved = definitions?.[getRelativeRef(ref)]\n // A boolean schema (`true`/`false`) carries no properties to collect\n return typeof resolved === 'object' ? resolved : undefined\n}\n\n/**\n * Resolve a property value: if it is a `$ref` it is replaced with the referenced schema. A dangling\n * or unresolvable `$ref` returns the raw node so the property name is preserved with an unknown type.\n */\nfunction resolveProperty(\n property: JSONSchema7Definition,\n definitions: Definitions | undefined,\n): JSONSchema7Definition {\n if (typeof property !== 'object' || !property.$ref) {\n return property\n }\n return resolveRef(property.$ref, definitions) ?? property\n}\n\nfunction collect(\n node: JSONSchema7Definition | undefined,\n definitions: Definitions | undefined,\n visitedRefs: Set<string>,\n result: TopLevelProperties,\n): void {\n if (typeof node !== 'object') {\n return\n }\n\n // Follow a combination $ref to the schema it references. Nothing else on a $ref node contributes.\n if (node.$ref) {\n if (visitedRefs.has(node.$ref)) {\n return\n }\n visitedRefs.add(node.$ref)\n collect(\n resolveRef(node.$ref, definitions),\n definitions,\n visitedRefs,\n result,\n )\n return\n }\n\n if (node.properties) {\n for (const [name, propertySchema] of Object.entries(node.properties)) {\n if (!(name in result)) {\n result[name] = resolveProperty(propertySchema, definitions)\n }\n }\n }\n\n // Recurse through combination keywords in a fixed, deterministic order.\n node.allOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.anyOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.oneOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n collect(node.if, definitions, visitedRefs, result)\n collect(node.then, definitions, visitedRefs, result)\n collect(node.else, definitions, visitedRefs, result)\n}\n\n/**\n * Collects the names that could appear as a top-level property of an instance validated by the given\n * JSON Schema, keyed by property name. Each value is the `$ref`-resolved schema for that property.\n *\n * The walk follows schema combination keywords (`$ref`, `allOf`, `anyOf`, `oneOf`, `if`, `then`,\n * `else`) so that properties declared in referenced or composed sub-schemas are included. It does\n * NOT descend into a property's own value, `items`, `contains`, `additionalProperties`, or `not`, so\n * the nested properties of an object or the elements of an array are never surfaced as top-level\n * properties.\n *\n * Insertion order is the order in which properties were first encountered, and the first occurrence\n * of a name wins -- so a schema's own properties take precedence over composed/inherited ones.\n *\n * This mirrors the backend's `JsonSchemaProperties.collectTopLevelProperties`, which is what defines\n * a RecordSet's schema columns. Only draft-07 `definitions` references are resolved (not `$defs`),\n * matching that implementation.\n */\nexport function collectTopLevelProperties(\n root: JSONSchema7 | undefined,\n): TopLevelProperties {\n const result: TopLevelProperties = {}\n if (!root) {\n return result\n }\n collect(root, root.definitions, new Set<string>(), result)\n return result\n}\n"],"mappings":";AAEA,IAAM,IAAqB;AAS3B,SAAS,EAAe,GAAqB;CAC3C,OAAO,EAAI,WAAW,CAAkB,IACpC,EAAI,UAAU,EAAyB,IACvC;AACN;AAEA,SAAS,EACP,GACA,GACyB;CACzB,IAAM,IAAW,IAAc,EAAe,CAAG;CAEjD,OAAO,OAAO,KAAa,WAAW,IAAW,KAAA;AACnD;AAMA,SAAS,EACP,GACA,GACuB;CAIvB,OAHI,OAAO,KAAa,YAAY,CAAC,EAAS,OACrC,IAEF,EAAW,EAAS,MAAM,CAAW,KAAK;AACnD;AAEA,SAAS,EACP,GACA,GACA,GACA,GACM;CACF,WAAO,KAAS,UAKpB;MAAI,EAAK,MAAM;GACb,IAAI,EAAY,IAAI,EAAK,IAAI,GAC3B;GAGF,AADA,EAAY,IAAI,EAAK,IAAI,GACzB,EACE,EAAW,EAAK,MAAM,CAAW,GACjC,GACA,GACA,CACF;GACA;EACF;EAEA,IAAI,EAAK,iBACF,IAAM,CAAC,GAAM,MAAmB,OAAO,QAAQ,EAAK,UAAU,GACjE,AAAM,KAAQ,MACZ,EAAO,KAAQ,EAAgB,GAAgB,CAAW;EAiBhE,AAXA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAQ,EAAK,IAAI,GAAa,GAAa,CAAM,GACjD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM,GACnD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM;CAtBnD;AAuBF;AAmBA,SAAgB,EACd,GACoB;CACpB,IAAM,IAA6B,CAAC;CAKpC,OAJK,KAGL,EAAQ,GAAM,EAAK,6BAAa,IAAI,IAAY,GAAG,CAAM,GAFhD;AAIX"}
1
+ {"version":3,"file":"collectTopLevelProperties.js","names":[],"sources":["../../../src/utils/jsonschema/collectTopLevelProperties.ts"],"sourcesContent":["import { JSONSchema7, JSONSchema7Definition } from 'json-schema'\n\nconst DEFINITIONS_PREFIX = '#/definitions/'\n\ntype Definitions = NonNullable<JSONSchema7['definitions']>\ntype TopLevelProperties = Record<string, JSONSchema7Definition>\n\n/**\n * Given a full `#/definitions/X` reference, return the relative key (`X`) used in the definitions\n * map. A reference that is already a bare key is returned as-is.\n */\nfunction getRelativeRef(ref: string): string {\n return ref.startsWith(DEFINITIONS_PREFIX)\n ? ref.substring(DEFINITIONS_PREFIX.length)\n : ref\n}\n\n/**\n * Resolve a local `#/definitions/X` reference (or bare `X` key) against the root schema's `definitions`.\n * Returns undefined for a dangling reference or a boolean schema.\n */\nexport function resolveRef(\n ref: string,\n definitions: Definitions | undefined,\n): JSONSchema7 | undefined {\n const resolved = definitions?.[getRelativeRef(ref)]\n // A boolean schema (`true`/`false`) carries no properties to collect\n return typeof resolved === 'object' ? resolved : undefined\n}\n\n/**\n * Resolve a property value: if it is a `$ref` it is replaced with the referenced schema. A dangling\n * or unresolvable `$ref` returns the raw node so the property name is preserved with an unknown type.\n */\nfunction resolveProperty(\n property: JSONSchema7Definition,\n definitions: Definitions | undefined,\n): JSONSchema7Definition {\n if (typeof property !== 'object' || !property.$ref) {\n return property\n }\n return resolveRef(property.$ref, definitions) ?? property\n}\n\nfunction collect(\n node: JSONSchema7Definition | undefined,\n definitions: Definitions | undefined,\n visitedRefs: Set<string>,\n result: TopLevelProperties,\n): void {\n if (typeof node !== 'object') {\n return\n }\n\n // Follow a combination $ref to the schema it references. Nothing else on a $ref node contributes.\n if (node.$ref) {\n if (visitedRefs.has(node.$ref)) {\n return\n }\n visitedRefs.add(node.$ref)\n collect(\n resolveRef(node.$ref, definitions),\n definitions,\n visitedRefs,\n result,\n )\n return\n }\n\n if (node.properties) {\n for (const [name, propertySchema] of Object.entries(node.properties)) {\n if (!(name in result)) {\n result[name] = resolveProperty(propertySchema, definitions)\n }\n }\n }\n\n // Recurse through combination keywords in a fixed, deterministic order.\n node.allOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.anyOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n node.oneOf?.forEach(member =>\n collect(member, definitions, visitedRefs, result),\n )\n collect(node.if, definitions, visitedRefs, result)\n collect(node.then, definitions, visitedRefs, result)\n collect(node.else, definitions, visitedRefs, result)\n}\n\n/**\n * Collects the names that could appear as a top-level property of an instance validated by the given\n * JSON Schema, keyed by property name. Each value is the `$ref`-resolved schema for that property.\n *\n * The walk follows schema combination keywords (`$ref`, `allOf`, `anyOf`, `oneOf`, `if`, `then`,\n * `else`) so that properties declared in referenced or composed sub-schemas are included. It does\n * NOT descend into a property's own value, `items`, `contains`, `additionalProperties`, or `not`, so\n * the nested properties of an object or the elements of an array are never surfaced as top-level\n * properties.\n *\n * Insertion order is the order in which properties were first encountered, and the first occurrence\n * of a name wins -- so a schema's own properties take precedence over composed/inherited ones.\n *\n * This mirrors the backend's `JsonSchemaProperties.collectTopLevelProperties`, which is what defines\n * a RecordSet's schema columns. Only draft-07 `definitions` references are resolved (not `$defs`),\n * matching that implementation.\n */\nexport function collectTopLevelProperties(\n root: JSONSchema7 | undefined,\n): TopLevelProperties {\n const result: TopLevelProperties = {}\n if (!root) {\n return result\n }\n collect(root, root.definitions, new Set<string>(), result)\n return result\n}\n"],"mappings":";AAEA,IAAM,IAAqB;AAS3B,SAAS,EAAe,GAAqB;CAC3C,OAAO,EAAI,WAAW,CAAkB,IACpC,EAAI,UAAU,EAAyB,IACvC;AACN;AAMA,SAAgB,EACd,GACA,GACyB;CACzB,IAAM,IAAW,IAAc,EAAe,CAAG;CAEjD,OAAO,OAAO,KAAa,WAAW,IAAW,KAAA;AACnD;AAMA,SAAS,EACP,GACA,GACuB;CAIvB,OAHI,OAAO,KAAa,YAAY,CAAC,EAAS,OACrC,IAEF,EAAW,EAAS,MAAM,CAAW,KAAK;AACnD;AAEA,SAAS,EACP,GACA,GACA,GACA,GACM;CACF,WAAO,KAAS,UAKpB;MAAI,EAAK,MAAM;GACb,IAAI,EAAY,IAAI,EAAK,IAAI,GAC3B;GAGF,AADA,EAAY,IAAI,EAAK,IAAI,GACzB,EACE,EAAW,EAAK,MAAM,CAAW,GACjC,GACA,GACA,CACF;GACA;EACF;EAEA,IAAI,EAAK,iBACF,IAAM,CAAC,GAAM,MAAmB,OAAO,QAAQ,EAAK,UAAU,GACjE,AAAM,KAAQ,MACZ,EAAO,KAAQ,EAAgB,GAAgB,CAAW;EAiBhE,AAXA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAK,OAAO,SAAQ,MAClB,EAAQ,GAAQ,GAAa,GAAa,CAAM,CAClD,GACA,EAAQ,EAAK,IAAI,GAAa,GAAa,CAAM,GACjD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM,GACnD,EAAQ,EAAK,MAAM,GAAa,GAAa,CAAM;CAtBnD;AAuBF;AAmBA,SAAgB,EACd,GACoB;CACpB,IAAM,IAA6B,CAAC;CAKpC,OAJK,KAGL,EAAQ,GAAM,EAAK,6BAAa,IAAI,IAAY,GAAG,CAAM,GAFhD;AAIX"}
@@ -0,0 +1,22 @@
1
+ import { JSONSchema7, JSONSchema7Definition } from 'json-schema';
2
+ export type NumberOrEnumInfo = {
3
+ numericType: 'number' | 'integer';
4
+ enumValues: string[];
5
+ };
6
+ type Definitions = JSONSchema7['definitions'];
7
+ /**
8
+ * Detects a property whose values are either a number or one of a closed set of
9
+ * strings, such as a masked age (`43` or ">= 90") or a measurement that may be
10
+ * "N/A". The property must be an `anyOf` (or `oneOf`) with exactly one `number`
11
+ * or `integer` branch and one or more branches that each allow only strings,
12
+ * through an `enum` or a `const`. Branches may appear in any order, may be local
13
+ * `#/definitions/` references, and may be accompanied by `null` branches.
14
+ *
15
+ * @param propertySchema the schema of a single property
16
+ * @param definitions the root schema's `definitions`, used to resolve `$ref` branches
17
+ * @returns the numeric branch's type and the allowed strings, or null if the
18
+ * property is not such a union
19
+ */
20
+ export declare function getNumberOrEnumInfo(propertySchema: JSONSchema7Definition | undefined, definitions?: Definitions): NumberOrEnumInfo | null;
21
+ export {};
22
+ //# sourceMappingURL=getNumberOrEnumInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNumberOrEnumInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getNumberOrEnumInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAIhE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAA;IACjC,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED,KAAK,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;AA+B7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,qBAAqB,GAAG,SAAS,EACjD,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB,GAAG,IAAI,CAoCzB"}
@@ -0,0 +1,39 @@
1
+ import { resolveRef as e } from "./collectTopLevelProperties.js";
2
+ import { isSchemaDescribingNullType as t } from "./getOnlyNonNullOneOfOption.js";
3
+ //#region src/utils/jsonschema/getNumberOrEnumInfo.ts
4
+ function n(t, n) {
5
+ if (typeof t == "object") return t.$ref ? e(t.$ref, n) : t;
6
+ }
7
+ function r(e) {
8
+ return e.type === "number" || e.type === "integer" ? e.type : void 0;
9
+ }
10
+ function i(e) {
11
+ if (e.type !== void 0 && e.type !== "string") return;
12
+ let t = e.enum ?? (e.const === void 0 ? [] : [e.const]);
13
+ return t.length > 0 && t.every((e) => typeof e == "string") ? t : void 0;
14
+ }
15
+ function a(e, a) {
16
+ if (typeof e != "object") return null;
17
+ let o = e.anyOf ?? e.oneOf;
18
+ if (!o) return null;
19
+ let s, c = /* @__PURE__ */ new Set(), l = o.map((e) => n(e, a)).filter((e) => !t(e));
20
+ for (let e of l) {
21
+ if (!e) return null;
22
+ let t = r(e);
23
+ if (t && !s) {
24
+ s = t;
25
+ continue;
26
+ }
27
+ let n = i(e);
28
+ if (!n) return null;
29
+ n.forEach((e) => c.add(e));
30
+ }
31
+ return s && c.size > 0 ? {
32
+ numericType: s,
33
+ enumValues: [...c]
34
+ } : null;
35
+ }
36
+ //#endregion
37
+ export { a as getNumberOrEnumInfo };
38
+
39
+ //# sourceMappingURL=getNumberOrEnumInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNumberOrEnumInfo.js","names":[],"sources":["../../../src/utils/jsonschema/getNumberOrEnumInfo.ts"],"sourcesContent":["import { JSONSchema7, JSONSchema7Definition } from 'json-schema'\nimport { resolveRef } from './collectTopLevelProperties'\nimport { isSchemaDescribingNullType } from './getOnlyNonNullOneOfOption'\n\nexport type NumberOrEnumInfo = {\n numericType: 'number' | 'integer'\n enumValues: string[]\n}\n\ntype Definitions = JSONSchema7['definitions']\n\nfunction resolveBranch(\n branch: JSONSchema7Definition,\n definitions: Definitions,\n): JSONSchema7 | undefined {\n if (typeof branch !== 'object') {\n return undefined\n }\n return branch.$ref ? resolveRef(branch.$ref, definitions) : branch\n}\n\nfunction getNumericType(\n branch: JSONSchema7,\n): NumberOrEnumInfo['numericType'] | undefined {\n return branch.type === 'number' || branch.type === 'integer'\n ? branch.type\n : undefined\n}\n\nfunction getStringEnumValues(branch: JSONSchema7): string[] | undefined {\n if (branch.type !== undefined && branch.type !== 'string') {\n return undefined\n }\n const values =\n branch.enum ?? (branch.const !== undefined ? [branch.const] : [])\n return values.length > 0 && values.every(value => typeof value === 'string')\n ? values\n : undefined\n}\n\n/**\n * Detects a property whose values are either a number or one of a closed set of\n * strings, such as a masked age (`43` or \">= 90\") or a measurement that may be\n * \"N/A\". The property must be an `anyOf` (or `oneOf`) with exactly one `number`\n * or `integer` branch and one or more branches that each allow only strings,\n * through an `enum` or a `const`. Branches may appear in any order, may be local\n * `#/definitions/` references, and may be accompanied by `null` branches.\n *\n * @param propertySchema the schema of a single property\n * @param definitions the root schema's `definitions`, used to resolve `$ref` branches\n * @returns the numeric branch's type and the allowed strings, or null if the\n * property is not such a union\n */\nexport function getNumberOrEnumInfo(\n propertySchema: JSONSchema7Definition | undefined,\n definitions?: Definitions,\n): NumberOrEnumInfo | null {\n if (typeof propertySchema !== 'object') {\n return null\n }\n const branches = propertySchema.anyOf ?? propertySchema.oneOf\n if (!branches) {\n return null\n }\n\n let numericType: NumberOrEnumInfo['numericType'] | undefined\n const enumValues = new Set<string>()\n const nonNullBranches = branches\n .map(branch => resolveBranch(branch, definitions))\n .filter(branch => !isSchemaDescribingNullType(branch))\n\n for (const branch of nonNullBranches) {\n if (!branch) {\n return null\n }\n const branchNumericType = getNumericType(branch)\n if (branchNumericType && !numericType) {\n numericType = branchNumericType\n continue\n }\n // Any branch that is neither the numeric branch nor a closed set of strings\n // (including a second numeric branch) makes the union something else\n const branchValues = getStringEnumValues(branch)\n if (!branchValues) {\n return null\n }\n branchValues.forEach(value => enumValues.add(value))\n }\n\n return numericType && enumValues.size > 0\n ? { numericType, enumValues: [...enumValues] }\n : null\n}\n"],"mappings":";;;AAWA,SAAS,EACP,GACA,GACyB;CACrB,WAAO,KAAW,UAGtB,OAAO,EAAO,OAAO,EAAW,EAAO,MAAM,CAAW,IAAI;AAC9D;AAEA,SAAS,EACP,GAC6C;CAC7C,OAAO,EAAO,SAAS,YAAY,EAAO,SAAS,YAC/C,EAAO,OACP,KAAA;AACN;AAEA,SAAS,EAAoB,GAA2C;CACtE,IAAI,EAAO,SAAS,KAAA,KAAa,EAAO,SAAS,UAC/C;CAEF,IAAM,IACJ,EAAO,SAAS,EAAO,UAAU,KAAA,IAA6B,CAAC,IAAlB,CAAC,EAAO,KAAK;CAC5D,OAAO,EAAO,SAAS,KAAK,EAAO,OAAM,MAAS,OAAO,KAAU,QAAQ,IACvE,IACA,KAAA;AACN;AAeA,SAAgB,EACd,GACA,GACyB;CACzB,IAAI,OAAO,KAAmB,UAC5B,OAAO;CAET,IAAM,IAAW,EAAe,SAAS,EAAe;CACxD,IAAI,CAAC,GACH,OAAO;CAGT,IAAI,GACE,oBAAa,IAAI,IAAY,GAC7B,IAAkB,EACrB,KAAI,MAAU,EAAc,GAAQ,CAAW,CAAC,EAChD,QAAO,MAAU,CAAC,EAA2B,CAAM,CAAC;CAEvD,KAAK,IAAM,KAAU,GAAiB;EACpC,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAoB,EAAe,CAAM;EAC/C,IAAI,KAAqB,CAAC,GAAa;GACrC,IAAc;GACd;EACF;EAGA,IAAM,IAAe,EAAoB,CAAM;EAC/C,IAAI,CAAC,GACH,OAAO;EAET,EAAa,SAAQ,MAAS,EAAW,IAAI,CAAK,CAAC;CACrD;CAEA,OAAO,KAAe,EAAW,OAAO,IACpC;EAAE;EAAa,YAAY,CAAC,GAAG,CAAU;CAAE,IAC3C;AACN"}
@@ -1,2 +1,3 @@
1
+ export declare function isSchemaDescribingNullType(s: any): boolean;
1
2
  export declare function getOnlyNonNullOneOfOption(jsonSchema: Record<string, unknown>): Record<string, unknown> | undefined;
2
3
  //# sourceMappingURL=getOnlyNonNullOneOfOption.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOnlyNonNullOneOfOption.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getOnlyNonNullOneOfOption.ts"],"names":[],"mappings":"AAYA,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgBrC"}
1
+ {"version":3,"file":"getOnlyNonNullOneOfOption.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getOnlyNonNullOneOfOption.ts"],"names":[],"mappings":"AAIA,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,GAAG,WAMhD;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgBrC"}
@@ -12,6 +12,6 @@ function i(e) {
12
12
  }
13
13
  }
14
14
  //#endregion
15
- export { i as getOnlyNonNullOneOfOption };
15
+ export { i as getOnlyNonNullOneOfOption, r as isSchemaDescribingNullType };
16
16
 
17
17
  //# sourceMappingURL=getOnlyNonNullOneOfOption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOnlyNonNullOneOfOption.js","names":[],"sources":["../../../src/utils/jsonschema/getOnlyNonNullOneOfOption.ts"],"sourcesContent":["import isArray from 'lodash-es/isArray'\nimport isEqual from 'lodash-es/isEqual'\nimport isObject from 'lodash-es/isObject'\n\nfunction isSchemaDescribingNullType(s: any) {\n return (\n isObject(s) &&\n 'type' in s &&\n (s.type == 'null' || isEqual(s.type, ['null']))\n )\n}\n\nexport function getOnlyNonNullOneOfOption(\n jsonSchema: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (jsonSchema?.oneOf && isArray(jsonSchema.oneOf)) {\n // PORTALS-3723\n // Also handle our special 'oneOf' enum case just like in `getEnumeratedValues`\n const oneOfSchemasOmitNulltype = jsonSchema.oneOf.filter(\n s => !isSchemaDescribingNullType(s),\n )\n if (\n oneOfSchemasOmitNulltype.length == 1 &&\n isObject(oneOfSchemasOmitNulltype[0])\n ) {\n return oneOfSchemasOmitNulltype[0] as Record<string, unknown>\n }\n }\n\n return undefined\n}\n"],"mappings":";;;;AAIA,SAAS,EAA2B,GAAQ;CAC1C,OACE,EAAS,CAAC,KACV,UAAU,MACT,EAAE,QAAQ,UAAU,EAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;AAEjD;AAEA,SAAgB,EACd,GACqC;CACrC,IAAI,GAAY,SAAS,EAAQ,EAAW,KAAK,GAAG;EAGlD,IAAM,IAA2B,EAAW,MAAM,QAChD,MAAK,CAAC,EAA2B,CAAC,CACpC;EACA,IACE,EAAyB,UAAU,KACnC,EAAS,EAAyB,EAAE,GAEpC,OAAO,EAAyB;CAEpC;AAGF"}
1
+ {"version":3,"file":"getOnlyNonNullOneOfOption.js","names":[],"sources":["../../../src/utils/jsonschema/getOnlyNonNullOneOfOption.ts"],"sourcesContent":["import isArray from 'lodash-es/isArray'\nimport isEqual from 'lodash-es/isEqual'\nimport isObject from 'lodash-es/isObject'\n\nexport function isSchemaDescribingNullType(s: any) {\n return (\n isObject(s) &&\n 'type' in s &&\n (s.type == 'null' || isEqual(s.type, ['null']))\n )\n}\n\nexport function getOnlyNonNullOneOfOption(\n jsonSchema: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (jsonSchema?.oneOf && isArray(jsonSchema.oneOf)) {\n // PORTALS-3723\n // Also handle our special 'oneOf' enum case just like in `getEnumeratedValues`\n const oneOfSchemasOmitNulltype = jsonSchema.oneOf.filter(\n s => !isSchemaDescribingNullType(s),\n )\n if (\n oneOfSchemasOmitNulltype.length == 1 &&\n isObject(oneOfSchemasOmitNulltype[0])\n ) {\n return oneOfSchemasOmitNulltype[0] as Record<string, unknown>\n }\n }\n\n return undefined\n}\n"],"mappings":";;;;AAIA,SAAgB,EAA2B,GAAQ;CACjD,OACE,EAAS,CAAC,KACV,UAAU,MACT,EAAE,QAAQ,UAAU,EAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;AAEjD;AAEA,SAAgB,EACd,GACqC;CACrC,IAAI,GAAY,SAAS,EAAQ,EAAW,KAAK,GAAG;EAGlD,IAAM,IAA2B,EAAW,MAAM,QAChD,MAAK,CAAC,EAA2B,CAAC,CACpC;EACA,IACE,EAAyB,UAAU,KACnC,EAAS,EAAyB,EAAE,GAEpC,OAAO,EAAyB;CAEpC;AAGF"}
@@ -6,6 +6,11 @@ export interface SchemaPropertyInfo {
6
6
  isRequired: boolean;
7
7
  enumeratedValues: EnumeratedValue[] | null;
8
8
  description?: string;
9
+ /**
10
+ * True when the property is either a number of the given `type` or one of the
11
+ * strings in `enumeratedValues`; see {@link getNumberOrEnumInfo}
12
+ */
13
+ isNumberOrEnum?: boolean;
9
14
  }
10
15
  export interface SchemaPropertiesMap {
11
16
  [propertyName: string]: SchemaPropertyInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"getSchemaPropertyInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"names":[],"mappings":"AAAA,OAA4B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG5E,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,mBAAmB,CAqCrB"}
1
+ {"version":3,"file":"getSchemaPropertyInfo.d.ts","sourceRoot":"","sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"names":[],"mappings":"AAAA,OAA4B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAI5E,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,mBAAmB,CA0DrB"}
@@ -1,22 +1,37 @@
1
1
  import e from "./getEnumeratedValues.js";
2
- import t from "./getRequiredAttributes.js";
3
- import n from "./getSchemaForProperty.js";
4
- import { getFlatTypeInfo as r } from "./getType.js";
2
+ import { getNumberOrEnumInfo as t } from "./getNumberOrEnumInfo.js";
3
+ import n from "./getRequiredAttributes.js";
4
+ import r from "./getSchemaForProperty.js";
5
+ import { getFlatTypeInfo as i } from "./getType.js";
5
6
  //#region src/utils/jsonschema/getSchemaPropertyInfo.ts
6
- function i(i) {
7
- if (!i) return {};
8
- let a = t(i), o = {};
9
- return i.properties && Object.keys(i.properties).forEach((t) => {
10
- let s = n(i, t), c = r(s), l = e(s).map((e) => e.value);
11
- l.length === 0 && s?.items && (l = e(Array.isArray(s.items) ? s.items[0] : s.items).map((e) => e.value)), o[t] = {
12
- type: c,
13
- isRequired: a.includes(t),
14
- enumeratedValues: l.length > 0 ? l : null,
15
- description: s?.description
7
+ function a(a) {
8
+ if (!a) return {};
9
+ let o = n(a), s = {};
10
+ return a.properties && Object.keys(a.properties).forEach((n) => {
11
+ let c = r(a, n), l = t(c, a.definitions);
12
+ if (l) {
13
+ s[n] = {
14
+ type: {
15
+ ...i(c),
16
+ type: l.numericType
17
+ },
18
+ isRequired: o.includes(n),
19
+ enumeratedValues: l.enumValues,
20
+ description: c?.description,
21
+ isNumberOrEnum: !0
22
+ };
23
+ return;
24
+ }
25
+ let u = i(c), d = e(c).map((e) => e.value);
26
+ d.length === 0 && c?.items && (d = e(Array.isArray(c.items) ? c.items[0] : c.items).map((e) => e.value)), s[n] = {
27
+ type: u,
28
+ isRequired: o.includes(n),
29
+ enumeratedValues: d.length > 0 ? d : null,
30
+ description: c?.description
16
31
  };
17
- }), o;
32
+ }), s;
18
33
  }
19
34
  //#endregion
20
- export { i as getSchemaPropertiesInfo };
35
+ export { a as getSchemaPropertiesInfo };
21
36
 
22
37
  //# sourceMappingURL=getSchemaPropertyInfo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getSchemaPropertyInfo.js","names":[],"sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"sourcesContent":["import getEnumeratedValues, { EnumeratedValue } from './getEnumeratedValues'\nimport getSchemaForProperty from './getSchemaForProperty'\nimport getRequiredAttributes from './getRequiredAttributes'\nimport { FlatTypeInfo, getFlatTypeInfo } from './getType'\nimport { JSONSchema7 } from 'json-schema'\n\nexport interface SchemaPropertyInfo {\n type: FlatTypeInfo | undefined\n isRequired: boolean\n enumeratedValues: EnumeratedValue[] | null\n description?: string\n}\n\nexport interface SchemaPropertiesMap {\n [propertyName: string]: SchemaPropertyInfo\n}\n\n/**\n * Processes a JSON schema once and returns information for all properties\n * @param schema The JSON schema to process\n * @returns A map of property names to their schema information\n */\nexport function getSchemaPropertiesInfo(\n schema: JSONSchema7 | null,\n): SchemaPropertiesMap {\n if (!schema) {\n return {}\n }\n\n const requiredFields = getRequiredAttributes(schema)\n const propertiesMap: SchemaPropertiesMap = {}\n\n // Process each property in the schema\n if (schema.properties) {\n Object.keys(schema.properties).forEach(propertyName => {\n const propertySchema = getSchemaForProperty(schema, propertyName)\n const type = getFlatTypeInfo(propertySchema)\n let enumeratedValues = getEnumeratedValues(propertySchema).map(\n item => item.value,\n )\n\n // Check for nested enums in array items\n if (enumeratedValues.length === 0 && propertySchema?.items) {\n const itemsSchema = Array.isArray(propertySchema.items)\n ? propertySchema.items[0]\n : propertySchema.items\n enumeratedValues = getEnumeratedValues(itemsSchema).map(\n item => item.value,\n )\n }\n\n propertiesMap[propertyName] = {\n type,\n isRequired: requiredFields.includes(propertyName),\n enumeratedValues: enumeratedValues.length > 0 ? enumeratedValues : null,\n description: propertySchema?.description,\n }\n })\n }\n\n return propertiesMap\n}\n"],"mappings":";;;;;AAsBA,SAAgB,EACd,GACqB;CACrB,IAAI,CAAC,GACH,OAAO,CAAC;CAGV,IAAM,IAAiB,EAAsB,CAAM,GAC7C,IAAqC,CAAC;CA8B5C,OA3BI,EAAO,cACT,OAAO,KAAK,EAAO,UAAU,EAAE,SAAQ,MAAgB;EACrD,IAAM,IAAiB,EAAqB,GAAQ,CAAY,GAC1D,IAAO,EAAgB,CAAc,GACvC,IAAmB,EAAoB,CAAc,EAAE,KACzD,MAAQ,EAAK,KACf;EAYA,AATI,EAAiB,WAAW,KAAK,GAAgB,UAInD,IAAmB,EAHC,MAAM,QAAQ,EAAe,KAAK,IAClD,EAAe,MAAM,KACrB,EAAe,KAC+B,EAAE,KAClD,MAAQ,EAAK,KACf,IAGF,EAAc,KAAgB;GAC5B;GACA,YAAY,EAAe,SAAS,CAAY;GAChD,kBAAkB,EAAiB,SAAS,IAAI,IAAmB;GACnE,aAAa,GAAgB;EAC/B;CACF,CAAC,GAGI;AACT"}
1
+ {"version":3,"file":"getSchemaPropertyInfo.js","names":[],"sources":["../../../src/utils/jsonschema/getSchemaPropertyInfo.ts"],"sourcesContent":["import getEnumeratedValues, { EnumeratedValue } from './getEnumeratedValues'\nimport { getNumberOrEnumInfo } from './getNumberOrEnumInfo'\nimport getSchemaForProperty from './getSchemaForProperty'\nimport getRequiredAttributes from './getRequiredAttributes'\nimport { FlatTypeInfo, getFlatTypeInfo } from './getType'\nimport { JSONSchema7 } from 'json-schema'\n\nexport interface SchemaPropertyInfo {\n type: FlatTypeInfo | undefined\n isRequired: boolean\n enumeratedValues: EnumeratedValue[] | null\n description?: string\n /**\n * True when the property is either a number of the given `type` or one of the\n * strings in `enumeratedValues`; see {@link getNumberOrEnumInfo}\n */\n isNumberOrEnum?: boolean\n}\n\nexport interface SchemaPropertiesMap {\n [propertyName: string]: SchemaPropertyInfo\n}\n\n/**\n * Processes a JSON schema once and returns information for all properties\n * @param schema The JSON schema to process\n * @returns A map of property names to their schema information\n */\nexport function getSchemaPropertiesInfo(\n schema: JSONSchema7 | null,\n): SchemaPropertiesMap {\n if (!schema) {\n return {}\n }\n\n const requiredFields = getRequiredAttributes(schema)\n const propertiesMap: SchemaPropertiesMap = {}\n\n // Process each property in the schema\n if (schema.properties) {\n Object.keys(schema.properties).forEach(propertyName => {\n const propertySchema = getSchemaForProperty(schema, propertyName)\n\n const numberOrEnum = getNumberOrEnumInfo(\n propertySchema,\n schema.definitions,\n )\n if (numberOrEnum) {\n // A number-or-enum union describes neither a single type nor an\n // enumeration, so both come from its detected branches.\n propertiesMap[propertyName] = {\n type: {\n ...getFlatTypeInfo(propertySchema),\n type: numberOrEnum.numericType,\n },\n isRequired: requiredFields.includes(propertyName),\n enumeratedValues: numberOrEnum.enumValues,\n description: propertySchema?.description,\n isNumberOrEnum: true,\n }\n return\n }\n\n const type = getFlatTypeInfo(propertySchema)\n let enumeratedValues = getEnumeratedValues(propertySchema).map(\n item => item.value,\n )\n\n // Check for nested enums in array items\n if (enumeratedValues.length === 0 && propertySchema?.items) {\n const itemsSchema = Array.isArray(propertySchema.items)\n ? propertySchema.items[0]\n : propertySchema.items\n enumeratedValues = getEnumeratedValues(itemsSchema).map(\n item => item.value,\n )\n }\n\n propertiesMap[propertyName] = {\n type,\n isRequired: requiredFields.includes(propertyName),\n enumeratedValues: enumeratedValues.length > 0 ? enumeratedValues : null,\n description: propertySchema?.description,\n }\n })\n }\n\n return propertiesMap\n}\n"],"mappings":";;;;;;AA4BA,SAAgB,EACd,GACqB;CACrB,IAAI,CAAC,GACH,OAAO,CAAC;CAGV,IAAM,IAAiB,EAAsB,CAAM,GAC7C,IAAqC,CAAC;CAmD5C,OAhDI,EAAO,cACT,OAAO,KAAK,EAAO,UAAU,EAAE,SAAQ,MAAgB;EACrD,IAAM,IAAiB,EAAqB,GAAQ,CAAY,GAE1D,IAAe,EACnB,GACA,EAAO,WACT;EACA,IAAI,GAAc;GAGhB,EAAc,KAAgB;IAC5B,MAAM;KACJ,GAAG,EAAgB,CAAc;KACjC,MAAM,EAAa;IACrB;IACA,YAAY,EAAe,SAAS,CAAY;IAChD,kBAAkB,EAAa;IAC/B,aAAa,GAAgB;IAC7B,gBAAgB;GAClB;GACA;EACF;EAEA,IAAM,IAAO,EAAgB,CAAc,GACvC,IAAmB,EAAoB,CAAc,EAAE,KACzD,MAAQ,EAAK,KACf;EAYA,AATI,EAAiB,WAAW,KAAK,GAAgB,UAInD,IAAmB,EAHC,MAAM,QAAQ,EAAe,KAAK,IAClD,EAAe,MAAM,KACrB,EAAe,KAC+B,EAAE,KAClD,MAAQ,EAAK,KACf,IAGF,EAAc,KAAgB;GAC5B;GACA,YAAY,EAAe,SAAS,CAAY;GAChD,kBAAkB,EAAiB,SAAS,IAAI,IAAmB;GACnE,aAAa,GAAgB;EAC/B;CACF,CAAC,GAGI;AACT"}
@@ -38,10 +38,10 @@ function i(e) {
38
38
  function a(e) {
39
39
  if (!e.startsWith("/")) return null;
40
40
  let t = e.slice(1);
41
- return !t || t.includes("/") ? null : t.replace(/~1/g, "/").replace(/~0/g, "~");
41
+ return !t || t.includes("/") ? null : t.replaceAll("~1", "/").replaceAll("~0", "~");
42
42
  }
43
43
  function o(e) {
44
- return `/${e.replace(/~/g, "~0").replace(/\//g, "~1")}`;
44
+ return `/${e.replaceAll("~", "~0").replaceAll("/", "~1")}`;
45
45
  }
46
46
  function s(e, t) {
47
47
  let n = a(t);