@nocios/crudify-components 2.0.60 → 2.0.81

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 (362) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/coverage/components/CrudiaAutoGenerate.tsx.html +616 -0
  3. package/coverage/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
  4. package/coverage/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
  5. package/coverage/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
  6. package/coverage/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
  7. package/coverage/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
  8. package/coverage/components/CrudiaFileField/components/index.html +176 -0
  9. package/coverage/components/CrudiaFileField/components/index.ts.html +115 -0
  10. package/coverage/components/CrudiaFileField/hooks/index.html +146 -0
  11. package/coverage/components/CrudiaFileField/hooks/index.ts.html +112 -0
  12. package/coverage/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
  13. package/coverage/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
  14. package/coverage/components/CrudiaFileField/index.html +131 -0
  15. package/coverage/components/CrudiaFileField/index.ts.html +112 -0
  16. package/coverage/components/CrudiaFileField/utils/formatters.ts.html +169 -0
  17. package/coverage/components/CrudiaFileField/utils/icons.tsx.html +253 -0
  18. package/coverage/components/CrudiaFileField/utils/index.html +146 -0
  19. package/coverage/components/CrudiaFileField/utils/index.ts.html +103 -0
  20. package/coverage/components/CrudiaMarkdownField.tsx.html +676 -0
  21. package/coverage/components/CrudifyInitializer.tsx.html +712 -0
  22. package/coverage/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
  23. package/coverage/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
  24. package/coverage/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
  25. package/coverage/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
  26. package/coverage/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
  27. package/coverage/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
  28. package/coverage/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
  29. package/coverage/components/CrudifyLogin/Forms/components/index.html +161 -0
  30. package/coverage/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
  31. package/coverage/components/CrudifyLogin/Forms/index.html +176 -0
  32. package/coverage/components/CrudifyLogin/Forms/index.ts.html +145 -0
  33. package/coverage/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
  34. package/coverage/components/CrudifyLogin/Forms/utils/index.html +161 -0
  35. package/coverage/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
  36. package/coverage/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
  37. package/coverage/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
  38. package/coverage/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
  39. package/coverage/components/CrudifyLogin/components/index.html +116 -0
  40. package/coverage/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
  41. package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
  42. package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
  43. package/coverage/components/CrudifyLogin/context/index.html +161 -0
  44. package/coverage/components/CrudifyLogin/context/index.ts.html +91 -0
  45. package/coverage/components/CrudifyLogin/hooks/index.html +131 -0
  46. package/coverage/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
  47. package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
  48. package/coverage/components/CrudifyLogin/index.html +116 -0
  49. package/coverage/components/CrudifyLogin/index.tsx.html +466 -0
  50. package/coverage/components/CrudifyLogin/utils/index.html +116 -0
  51. package/coverage/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
  52. package/coverage/components/GlobalNotificationProvider.tsx.html +844 -0
  53. package/coverage/components/LoginComponent.tsx.html +676 -0
  54. package/coverage/components/PasswordRequirements/index.html +116 -0
  55. package/coverage/components/PasswordRequirements/index.tsx.html +232 -0
  56. package/coverage/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
  57. package/coverage/components/PublicPolicies/FieldSelector/index.html +131 -0
  58. package/coverage/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
  59. package/coverage/components/PublicPolicies/Policies.tsx.html +625 -0
  60. package/coverage/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
  61. package/coverage/components/PublicPolicies/PolicyItem/index.html +131 -0
  62. package/coverage/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
  63. package/coverage/components/PublicPolicies/constants.ts.html +106 -0
  64. package/coverage/components/PublicPolicies/index.html +146 -0
  65. package/coverage/components/PublicPolicies/index.ts.html +88 -0
  66. package/coverage/components/Routing/AuthRoute.tsx.html +382 -0
  67. package/coverage/components/Routing/GuestRoute.tsx.html +352 -0
  68. package/coverage/components/Routing/ProtectedRoute.tsx.html +316 -0
  69. package/coverage/components/Routing/index.html +161 -0
  70. package/coverage/components/Routing/index.ts.html +109 -0
  71. package/coverage/components/SessionLoadingScreen/index.html +116 -0
  72. package/coverage/components/SessionLoadingScreen/index.tsx.html +379 -0
  73. package/coverage/components/SessionTimeIndicator/index.html +116 -0
  74. package/coverage/components/SessionTimeIndicator/index.tsx.html +523 -0
  75. package/coverage/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
  76. package/coverage/components/UserProfile/index.html +131 -0
  77. package/coverage/components/UserProfile/index.ts.html +88 -0
  78. package/coverage/components/index.html +191 -0
  79. package/coverage/components/index.ts.html +178 -0
  80. package/coverage/core/CrossTabSyncManager.ts.html +853 -0
  81. package/coverage/core/CrudifyInitializationManager.ts.html +1279 -0
  82. package/coverage/core/SessionManager.ts.html +3064 -0
  83. package/coverage/core/index.html +146 -0
  84. package/coverage/coverage-final.json +76 -79
  85. package/coverage/hooks/index.html +191 -0
  86. package/coverage/hooks/index.ts.html +136 -0
  87. package/coverage/hooks/useAuth.ts.html +529 -0
  88. package/coverage/hooks/useAutoGenerate.ts.html +571 -0
  89. package/coverage/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
  90. package/coverage/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
  91. package/coverage/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
  92. package/coverage/hooks/useCrudifyWithNotifications/index.html +146 -0
  93. package/coverage/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
  94. package/coverage/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
  95. package/coverage/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
  96. package/coverage/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
  97. package/coverage/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
  98. package/coverage/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
  99. package/coverage/hooks/useData.ts.html +829 -0
  100. package/coverage/hooks/useFileUpload/index.html +131 -0
  101. package/coverage/hooks/useFileUpload/index.ts.html +112 -0
  102. package/coverage/hooks/useFileUpload/services/index.html +131 -0
  103. package/coverage/hooks/useFileUpload/services/index.ts.html +106 -0
  104. package/coverage/hooks/useFileUpload/services/uploadService.ts.html +610 -0
  105. package/coverage/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
  106. package/coverage/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
  107. package/coverage/hooks/useFileUpload/utils/index.html +161 -0
  108. package/coverage/hooks/useFileUpload/utils/index.ts.html +109 -0
  109. package/coverage/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
  110. package/coverage/hooks/useFileUpload/utils/validation.ts.html +403 -0
  111. package/coverage/hooks/useSession/constants.ts.html +217 -0
  112. package/coverage/hooks/useSession/hooks/index.html +176 -0
  113. package/coverage/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
  114. package/coverage/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
  115. package/coverage/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
  116. package/coverage/hooks/useSession/hooks/useSessionState.ts.html +295 -0
  117. package/coverage/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
  118. package/coverage/hooks/useSession/index.html +161 -0
  119. package/coverage/hooks/useSession/index.ts.html +127 -0
  120. package/coverage/hooks/useSession/types.ts.html +427 -0
  121. package/coverage/hooks/useSession/useSession.ts.html +526 -0
  122. package/coverage/hooks/useSession/utils/index.html +131 -0
  123. package/coverage/hooks/useSession/utils/initializeSession.ts.html +424 -0
  124. package/coverage/hooks/useSession/utils/tokenUtils.ts.html +298 -0
  125. package/coverage/hooks/useUserData.ts.html +1210 -0
  126. package/coverage/hooks/useUserProfile.ts.html +820 -0
  127. package/coverage/index.html +205 -235
  128. package/coverage/lcov-report/components/CrudiaAutoGenerate.tsx.html +616 -0
  129. package/coverage/lcov-report/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
  130. package/coverage/lcov-report/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
  131. package/coverage/lcov-report/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
  132. package/coverage/lcov-report/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
  133. package/coverage/lcov-report/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
  134. package/coverage/lcov-report/components/CrudiaFileField/components/index.html +176 -0
  135. package/coverage/lcov-report/components/CrudiaFileField/components/index.ts.html +115 -0
  136. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.html +146 -0
  137. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.ts.html +112 -0
  138. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
  139. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
  140. package/coverage/lcov-report/components/CrudiaFileField/index.html +131 -0
  141. package/coverage/lcov-report/components/CrudiaFileField/index.ts.html +112 -0
  142. package/coverage/lcov-report/components/CrudiaFileField/utils/formatters.ts.html +169 -0
  143. package/coverage/lcov-report/components/CrudiaFileField/utils/icons.tsx.html +253 -0
  144. package/coverage/lcov-report/components/CrudiaFileField/utils/index.html +146 -0
  145. package/coverage/lcov-report/components/CrudiaFileField/utils/index.ts.html +103 -0
  146. package/coverage/lcov-report/components/CrudiaMarkdownField.tsx.html +676 -0
  147. package/coverage/lcov-report/components/CrudifyInitializer.tsx.html +712 -0
  148. package/coverage/lcov-report/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
  149. package/coverage/lcov-report/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
  150. package/coverage/lcov-report/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
  151. package/coverage/lcov-report/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
  152. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
  153. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
  154. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
  155. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.html +161 -0
  156. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
  157. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.html +176 -0
  158. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.ts.html +145 -0
  159. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
  160. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.html +161 -0
  161. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
  162. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
  163. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
  164. package/coverage/lcov-report/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
  165. package/coverage/lcov-report/components/CrudifyLogin/components/index.html +116 -0
  166. package/coverage/lcov-report/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
  167. package/coverage/lcov-report/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
  168. package/coverage/lcov-report/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
  169. package/coverage/lcov-report/components/CrudifyLogin/context/index.html +161 -0
  170. package/coverage/lcov-report/components/CrudifyLogin/context/index.ts.html +91 -0
  171. package/coverage/lcov-report/components/CrudifyLogin/hooks/index.html +131 -0
  172. package/coverage/lcov-report/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
  173. package/coverage/lcov-report/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
  174. package/coverage/lcov-report/components/CrudifyLogin/index.html +116 -0
  175. package/coverage/lcov-report/components/CrudifyLogin/index.tsx.html +466 -0
  176. package/coverage/lcov-report/components/CrudifyLogin/utils/index.html +116 -0
  177. package/coverage/lcov-report/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
  178. package/coverage/lcov-report/components/GlobalNotificationProvider.tsx.html +844 -0
  179. package/coverage/lcov-report/components/LoginComponent.tsx.html +676 -0
  180. package/coverage/lcov-report/components/PasswordRequirements/index.html +116 -0
  181. package/coverage/lcov-report/components/PasswordRequirements/index.tsx.html +232 -0
  182. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
  183. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.html +131 -0
  184. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
  185. package/coverage/lcov-report/components/PublicPolicies/Policies.tsx.html +625 -0
  186. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
  187. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.html +131 -0
  188. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
  189. package/coverage/lcov-report/components/PublicPolicies/constants.ts.html +106 -0
  190. package/coverage/lcov-report/components/PublicPolicies/index.html +146 -0
  191. package/coverage/lcov-report/components/PublicPolicies/index.ts.html +88 -0
  192. package/coverage/lcov-report/components/Routing/AuthRoute.tsx.html +382 -0
  193. package/coverage/lcov-report/components/Routing/GuestRoute.tsx.html +352 -0
  194. package/coverage/lcov-report/components/Routing/ProtectedRoute.tsx.html +316 -0
  195. package/coverage/lcov-report/components/Routing/index.html +161 -0
  196. package/coverage/lcov-report/components/Routing/index.ts.html +109 -0
  197. package/coverage/lcov-report/components/SessionLoadingScreen/index.html +116 -0
  198. package/coverage/lcov-report/components/SessionLoadingScreen/index.tsx.html +379 -0
  199. package/coverage/lcov-report/components/SessionTimeIndicator/index.html +116 -0
  200. package/coverage/lcov-report/components/SessionTimeIndicator/index.tsx.html +523 -0
  201. package/coverage/lcov-report/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
  202. package/coverage/lcov-report/components/UserProfile/index.html +131 -0
  203. package/coverage/lcov-report/components/UserProfile/index.ts.html +88 -0
  204. package/coverage/lcov-report/components/index.html +191 -0
  205. package/coverage/lcov-report/components/index.ts.html +178 -0
  206. package/coverage/lcov-report/core/CrossTabSyncManager.ts.html +853 -0
  207. package/coverage/lcov-report/core/CrudifyInitializationManager.ts.html +1279 -0
  208. package/coverage/lcov-report/core/SessionManager.ts.html +3064 -0
  209. package/coverage/lcov-report/core/index.html +146 -0
  210. package/coverage/lcov-report/hooks/index.html +191 -0
  211. package/coverage/lcov-report/hooks/index.ts.html +136 -0
  212. package/coverage/lcov-report/hooks/useAuth.ts.html +529 -0
  213. package/coverage/lcov-report/hooks/useAutoGenerate.ts.html +571 -0
  214. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
  215. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
  216. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
  217. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.html +146 -0
  218. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
  219. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
  220. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
  221. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
  222. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
  223. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
  224. package/coverage/lcov-report/hooks/useData.ts.html +829 -0
  225. package/coverage/lcov-report/hooks/useFileUpload/index.html +131 -0
  226. package/coverage/lcov-report/hooks/useFileUpload/index.ts.html +112 -0
  227. package/coverage/lcov-report/hooks/useFileUpload/services/index.html +131 -0
  228. package/coverage/lcov-report/hooks/useFileUpload/services/index.ts.html +106 -0
  229. package/coverage/lcov-report/hooks/useFileUpload/services/uploadService.ts.html +610 -0
  230. package/coverage/lcov-report/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
  231. package/coverage/lcov-report/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
  232. package/coverage/lcov-report/hooks/useFileUpload/utils/index.html +161 -0
  233. package/coverage/lcov-report/hooks/useFileUpload/utils/index.ts.html +109 -0
  234. package/coverage/lcov-report/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
  235. package/coverage/lcov-report/hooks/useFileUpload/utils/validation.ts.html +403 -0
  236. package/coverage/lcov-report/hooks/useSession/constants.ts.html +217 -0
  237. package/coverage/lcov-report/hooks/useSession/hooks/index.html +176 -0
  238. package/coverage/lcov-report/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
  239. package/coverage/lcov-report/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
  240. package/coverage/lcov-report/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
  241. package/coverage/lcov-report/hooks/useSession/hooks/useSessionState.ts.html +295 -0
  242. package/coverage/lcov-report/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
  243. package/coverage/lcov-report/hooks/useSession/index.html +161 -0
  244. package/coverage/lcov-report/hooks/useSession/index.ts.html +127 -0
  245. package/coverage/lcov-report/hooks/useSession/types.ts.html +427 -0
  246. package/coverage/lcov-report/hooks/useSession/useSession.ts.html +526 -0
  247. package/coverage/lcov-report/hooks/useSession/utils/index.html +131 -0
  248. package/coverage/lcov-report/hooks/useSession/utils/initializeSession.ts.html +424 -0
  249. package/coverage/lcov-report/hooks/useSession/utils/tokenUtils.ts.html +298 -0
  250. package/coverage/lcov-report/hooks/useUserData.ts.html +1210 -0
  251. package/coverage/lcov-report/hooks/useUserProfile.ts.html +820 -0
  252. package/coverage/lcov-report/index.html +205 -235
  253. package/coverage/lcov-report/providers/CrudifyThemeProvider.tsx.html +316 -0
  254. package/coverage/lcov-report/providers/SessionProvider.tsx.html +1120 -0
  255. package/coverage/lcov-report/providers/TranslationsProvider.tsx.html +1756 -0
  256. package/coverage/lcov-report/providers/index.html +146 -0
  257. package/coverage/lcov-report/services/credentialsEventBus.ts.html +319 -0
  258. package/coverage/lcov-report/services/crudifyAdminWrapper.ts.html +754 -0
  259. package/coverage/lcov-report/services/index.html +146 -0
  260. package/coverage/lcov-report/services/translationService.ts.html +1558 -0
  261. package/coverage/lcov-report/translations/critical.ts.html +1216 -0
  262. package/coverage/lcov-report/translations/index.html +116 -0
  263. package/coverage/lcov-report/types/index.html +116 -0
  264. package/coverage/lcov-report/types/password.ts.html +178 -0
  265. package/coverage/lcov-report/utils/authErrorDetector.ts.html +793 -0
  266. package/coverage/lcov-report/utils/authEventBus.ts.html +454 -0
  267. package/coverage/lcov-report/utils/configResolver.ts.html +460 -0
  268. package/coverage/lcov-report/utils/cookieSync.ts.html +595 -0
  269. package/coverage/lcov-report/utils/errorHandler.ts.html +1480 -0
  270. package/coverage/lcov-report/utils/errorTranslation.ts.html +868 -0
  271. package/coverage/lcov-report/utils/index.html +341 -0
  272. package/coverage/lcov-report/utils/index.ts.html +193 -0
  273. package/coverage/lcov-report/utils/jwtUtils.ts.html +325 -0
  274. package/coverage/lcov-report/utils/logger.ts.html +952 -0
  275. package/coverage/lcov-report/utils/navigationTracker.ts.html +562 -0
  276. package/coverage/lcov-report/utils/passwordValidation.ts.html +259 -0
  277. package/coverage/lcov-report/utils/preAuthCheck.ts.html +442 -0
  278. package/coverage/lcov-report/utils/redirectSecurity.ts.html +733 -0
  279. package/coverage/lcov-report/utils/tenantConfig.ts.html +712 -0
  280. package/coverage/lcov-report/utils/tokenStorage.ts.html +1825 -0
  281. package/coverage/lcov-report/utils/webCrypto.ts.html +490 -0
  282. package/coverage/lcov.info +15262 -14283
  283. package/coverage/providers/CrudifyThemeProvider.tsx.html +316 -0
  284. package/coverage/providers/SessionProvider.tsx.html +1120 -0
  285. package/coverage/providers/TranslationsProvider.tsx.html +1756 -0
  286. package/coverage/providers/index.html +146 -0
  287. package/coverage/services/credentialsEventBus.ts.html +319 -0
  288. package/coverage/services/crudifyAdminWrapper.ts.html +754 -0
  289. package/coverage/services/index.html +146 -0
  290. package/coverage/services/translationService.ts.html +1558 -0
  291. package/coverage/translations/critical.ts.html +1216 -0
  292. package/coverage/translations/index.html +116 -0
  293. package/coverage/types/index.html +116 -0
  294. package/coverage/types/password.ts.html +178 -0
  295. package/coverage/utils/authErrorDetector.ts.html +793 -0
  296. package/coverage/utils/authEventBus.ts.html +454 -0
  297. package/coverage/utils/configResolver.ts.html +460 -0
  298. package/coverage/utils/cookieSync.ts.html +595 -0
  299. package/coverage/utils/errorHandler.ts.html +1480 -0
  300. package/coverage/utils/errorTranslation.ts.html +868 -0
  301. package/coverage/utils/index.html +341 -0
  302. package/coverage/utils/index.ts.html +193 -0
  303. package/coverage/utils/jwtUtils.ts.html +325 -0
  304. package/coverage/utils/logger.ts.html +952 -0
  305. package/coverage/utils/navigationTracker.ts.html +562 -0
  306. package/coverage/utils/passwordValidation.ts.html +259 -0
  307. package/coverage/utils/preAuthCheck.ts.html +442 -0
  308. package/coverage/utils/redirectSecurity.ts.html +733 -0
  309. package/coverage/utils/tenantConfig.ts.html +712 -0
  310. package/coverage/utils/tokenStorage.ts.html +1825 -0
  311. package/coverage/utils/webCrypto.ts.html +490 -0
  312. package/dist/{CrudiaMarkdownField-CkiBwG-U.d.ts → CrudiaMarkdownField-DM6NR8zw.d.mts} +22 -22
  313. package/dist/{CrudiaMarkdownField-D-DqiXMQ.d.mts → CrudiaMarkdownField-UJaiSq9_.d.ts} +22 -22
  314. package/dist/{GlobalNotificationProvider-CdwdNv_8.d.mts → GlobalNotificationProvider-Cx540WKg.d.mts} +15 -15
  315. package/dist/{GlobalNotificationProvider-CdwdNv_8.d.ts → GlobalNotificationProvider-Cx540WKg.d.ts} +15 -15
  316. package/dist/chunk-2DXLCBOT.mjs +1 -0
  317. package/dist/chunk-DYRZIARH.js +1 -0
  318. package/dist/chunk-GCSJXEGT.mjs +1 -0
  319. package/dist/chunk-GJUZD5ZN.js +1 -0
  320. package/dist/chunk-K47I475N.js +1 -0
  321. package/dist/chunk-OCYZGEM5.mjs +1 -0
  322. package/dist/chunk-PI7HPRDB.js +1 -0
  323. package/dist/chunk-QVEUGJBY.mjs +1 -0
  324. package/dist/chunk-UROR7G7N.mjs +1 -0
  325. package/dist/chunk-XFT47DEL.js +1 -0
  326. package/dist/components.d.mts +8 -8
  327. package/dist/components.d.ts +8 -8
  328. package/dist/components.js +1 -1
  329. package/dist/components.mjs +1 -1
  330. package/dist/{errorTranslation-CF-5JClP.d.ts → errorTranslation-BEWwDbCH.d.ts} +1 -1
  331. package/dist/{errorTranslation-BcX8AaK7.d.mts → errorTranslation-DsGZon0M.d.mts} +1 -1
  332. package/dist/hooks.d.mts +3 -3
  333. package/dist/hooks.d.ts +3 -3
  334. package/dist/hooks.js +1 -1
  335. package/dist/hooks.mjs +1 -1
  336. package/dist/{index-DEDnmsdO.d.ts → index-Dnmttf62.d.ts} +131 -114
  337. package/dist/{index-D06kTP0C.d.mts → index-ZcF6nJt4.d.mts} +131 -114
  338. package/dist/index.d.mts +153 -106
  339. package/dist/index.d.ts +153 -106
  340. package/dist/index.js +2 -2
  341. package/dist/index.mjs +2 -2
  342. package/dist/{tenantConfig-CYnS9TPV.d.mts → tenantConfig-DxpfrAof.d.mts} +1 -1
  343. package/dist/{tenantConfig-CYnS9TPV.d.ts → tenantConfig-DxpfrAof.d.ts} +1 -1
  344. package/dist/utils.d.mts +25 -25
  345. package/dist/utils.d.ts +25 -25
  346. package/dist/utils.js +1 -1
  347. package/dist/utils.mjs +1 -1
  348. package/eslint.config.mjs +2 -2
  349. package/package.json +3 -3
  350. package/tests/helpers/mockFactories.ts +218 -0
  351. package/tests/helpers/testUtils.tsx +66 -1
  352. package/vitest.config.ts +1 -0
  353. package/dist/chunk-2WAUZ6KI.js +0 -1
  354. package/dist/chunk-3IGZNZCT.mjs +0 -1
  355. package/dist/chunk-43L2PP77.mjs +0 -1
  356. package/dist/chunk-6VS5OT3A.mjs +0 -1
  357. package/dist/chunk-BWJTTMKS.js +0 -1
  358. package/dist/chunk-EMPPCCVU.js +0 -1
  359. package/dist/chunk-J43UPGBE.js +0 -1
  360. package/dist/chunk-K6ZRXOJ7.mjs +0 -1
  361. package/dist/chunk-RYQQZTEP.js +0 -1
  362. package/dist/chunk-VTMSOK4V.mjs +0 -1
@@ -0,0 +1,1210 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for hooks/useUserData.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">hooks</a> useUserData.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">93.33% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>350/375</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">82.6% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>57/69</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>7/7</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">93.33% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>350/375</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
442
+ <span class="cline-any cline-yes">1x</span>
443
+ <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">1x</span>
445
+ <span class="cline-any cline-yes">1x</span>
446
+ <span class="cline-any cline-yes">1x</span>
447
+ <span class="cline-any cline-yes">1x</span>
448
+ <span class="cline-any cline-yes">1x</span>
449
+ <span class="cline-any cline-yes">1x</span>
450
+ <span class="cline-any cline-yes">1x</span>
451
+ <span class="cline-any cline-yes">1x</span>
452
+ <span class="cline-any cline-yes">1x</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-yes">1x</span>
455
+ <span class="cline-any cline-yes">1x</span>
456
+ <span class="cline-any cline-yes">1x</span>
457
+ <span class="cline-any cline-yes">1x</span>
458
+ <span class="cline-any cline-yes">1x</span>
459
+ <span class="cline-any cline-yes">1x</span>
460
+ <span class="cline-any cline-yes">1x</span>
461
+ <span class="cline-any cline-yes">1x</span>
462
+ <span class="cline-any cline-yes">1x</span>
463
+ <span class="cline-any cline-yes">1x</span>
464
+ <span class="cline-any cline-yes">1x</span>
465
+ <span class="cline-any cline-yes">1x</span>
466
+ <span class="cline-any cline-yes">1x</span>
467
+ <span class="cline-any cline-yes">1x</span>
468
+ <span class="cline-any cline-yes">1x</span>
469
+ <span class="cline-any cline-yes">1x</span>
470
+ <span class="cline-any cline-yes">1x</span>
471
+ <span class="cline-any cline-yes">1x</span>
472
+ <span class="cline-any cline-yes">1x</span>
473
+ <span class="cline-any cline-yes">1x</span>
474
+ <span class="cline-any cline-yes">38x</span>
475
+ <span class="cline-any cline-yes">38x</span>
476
+ <span class="cline-any cline-yes">38x</span>
477
+ <span class="cline-any cline-yes">38x</span>
478
+ <span class="cline-any cline-yes">38x</span>
479
+ <span class="cline-any cline-yes">38x</span>
480
+ <span class="cline-any cline-yes">38x</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
+ <span class="cline-any cline-no">&nbsp;</span>
483
+ <span class="cline-any cline-yes">38x</span>
484
+ <span class="cline-any cline-no">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-yes">38x</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-yes">38x</span>
490
+ <span class="cline-any cline-yes">38x</span>
491
+ <span class="cline-any cline-yes">1x</span>
492
+ <span class="cline-any cline-yes">1x</span>
493
+ <span class="cline-any cline-yes">1x</span>
494
+ <span class="cline-any cline-yes">1x</span>
495
+ <span class="cline-any cline-yes">2x</span>
496
+ <span class="cline-any cline-yes">2x</span>
497
+ <span class="cline-any cline-yes">2x</span>
498
+ <span class="cline-any cline-yes">2x</span>
499
+ <span class="cline-any cline-yes">2x</span>
500
+ <span class="cline-any cline-yes">2x</span>
501
+ <span class="cline-any cline-yes">2x</span>
502
+ <span class="cline-any cline-yes">2x</span>
503
+ <span class="cline-any cline-yes">2x</span>
504
+ <span class="cline-any cline-yes">2x</span>
505
+ <span class="cline-any cline-yes">2x</span>
506
+ <span class="cline-any cline-yes">1x</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-yes">1x</span>
509
+ <span class="cline-any cline-yes">1x</span>
510
+ <span class="cline-any cline-yes">5x</span>
511
+ <span class="cline-any cline-yes">5x</span>
512
+ <span class="cline-any cline-yes">3x</span>
513
+ <span class="cline-any cline-yes">3x</span>
514
+ <span class="cline-any cline-yes">5x</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-yes">5x</span>
518
+ <span class="cline-any cline-yes">5x</span>
519
+ <span class="cline-any cline-yes">5x</span>
520
+ <span class="cline-any cline-yes">1x</span>
521
+ <span class="cline-any cline-yes">1x</span>
522
+ <span class="cline-any cline-yes">1x</span>
523
+ <span class="cline-any cline-yes">1x</span>
524
+ <span class="cline-any cline-yes">1x</span>
525
+ <span class="cline-any cline-yes">1x</span>
526
+ <span class="cline-any cline-yes">1x</span>
527
+ <span class="cline-any cline-yes">1x</span>
528
+ <span class="cline-any cline-yes">1x</span>
529
+ <span class="cline-any cline-yes">1x</span>
530
+ <span class="cline-any cline-yes">1x</span>
531
+ <span class="cline-any cline-yes">1x</span>
532
+ <span class="cline-any cline-yes">1x</span>
533
+ <span class="cline-any cline-yes">5x</span>
534
+ <span class="cline-any cline-yes">5x</span>
535
+ <span class="cline-any cline-yes">5x</span>
536
+ <span class="cline-any cline-yes">5x</span>
537
+ <span class="cline-any cline-yes">5x</span>
538
+ <span class="cline-any cline-yes">5x</span>
539
+ <span class="cline-any cline-yes">5x</span>
540
+ <span class="cline-any cline-yes">5x</span>
541
+ <span class="cline-any cline-yes">5x</span>
542
+ <span class="cline-any cline-yes">5x</span>
543
+ <span class="cline-any cline-yes">5x</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-yes">5x</span>
547
+ <span class="cline-any cline-yes">5x</span>
548
+ <span class="cline-any cline-yes">1x</span>
549
+ <span class="cline-any cline-yes">1x</span>
550
+ <span class="cline-any cline-yes">1x</span>
551
+ <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-yes">1x</span>
553
+ <span class="cline-any cline-yes">1x</span>
554
+ <span class="cline-any cline-yes">5x</span>
555
+ <span class="cline-any cline-yes">4x</span>
556
+ <span class="cline-any cline-yes">4x</span>
557
+ <span class="cline-any cline-yes">4x</span>
558
+ <span class="cline-any cline-yes">5x</span>
559
+ <span class="cline-any cline-yes">1x</span>
560
+ <span class="cline-any cline-yes">1x</span>
561
+ <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-yes">1x</span>
563
+ <span class="cline-any cline-yes">2x</span>
564
+ <span class="cline-any cline-yes">2x</span>
565
+ <span class="cline-any cline-yes">2x</span>
566
+ <span class="cline-any cline-yes">2x</span>
567
+ <span class="cline-any cline-yes">2x</span>
568
+ <span class="cline-any cline-yes">2x</span>
569
+ <span class="cline-any cline-yes">2x</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-yes">1x</span>
575
+ <span class="cline-any cline-yes">1x</span>
576
+ <span class="cline-any cline-yes">1x</span>
577
+ <span class="cline-any cline-yes">1x</span>
578
+ <span class="cline-any cline-yes">1x</span>
579
+ <span class="cline-any cline-yes">13x</span>
580
+ <span class="cline-any cline-yes">13x</span>
581
+ <span class="cline-any cline-yes">1x</span>
582
+ <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-yes">12x</span>
584
+ <span class="cline-any cline-yes">12x</span>
585
+ <span class="cline-any cline-yes">13x</span>
586
+ <span class="cline-any cline-yes">8x</span>
587
+ <span class="cline-any cline-yes">8x</span>
588
+ <span class="cline-any cline-yes">4x</span>
589
+ <span class="cline-any cline-yes">13x</span>
590
+ <span class="cline-any cline-yes">1x</span>
591
+ <span class="cline-any cline-yes">1x</span>
592
+ <span class="cline-any cline-yes">3x</span>
593
+ <span class="cline-any cline-yes">3x</span>
594
+ <span class="cline-any cline-yes">13x</span>
595
+ <span class="cline-any cline-yes">1x</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-yes">1x</span>
598
+ <span class="cline-any cline-yes">1x</span>
599
+ <span class="cline-any cline-yes">1x</span>
600
+ <span class="cline-any cline-yes">2x</span>
601
+ <span class="cline-any cline-yes">2x</span>
602
+ <span class="cline-any cline-yes">13x</span>
603
+ <span class="cline-any cline-yes">1x</span>
604
+ <span class="cline-any cline-yes">1x</span>
605
+ <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-yes">1x</span>
607
+ <span class="cline-any cline-yes">13x</span>
608
+ <span class="cline-any cline-yes">1x</span>
609
+ <span class="cline-any cline-yes">1x</span>
610
+ <span class="cline-any cline-yes">1x</span>
611
+ <span class="cline-any cline-yes">1x</span>
612
+ <span class="cline-any cline-yes">1x</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-yes">1x</span>
617
+ <span class="cline-any cline-yes">1x</span>
618
+ <span class="cline-any cline-yes">1x</span>
619
+ <span class="cline-any cline-yes">1x</span>
620
+ <span class="cline-any cline-yes">1x</span>
621
+ <span class="cline-any cline-yes">1x</span>
622
+ <span class="cline-any cline-yes">1x</span>
623
+ <span class="cline-any cline-yes">1x</span>
624
+ <span class="cline-any cline-yes">1x</span>
625
+ <span class="cline-any cline-yes">1x</span>
626
+ <span class="cline-any cline-yes">1x</span>
627
+ <span class="cline-any cline-yes">1x</span>
628
+ <span class="cline-any cline-yes">1x</span>
629
+ <span class="cline-any cline-yes">1x</span>
630
+ <span class="cline-any cline-yes">1x</span>
631
+ <span class="cline-any cline-yes">1x</span>
632
+ <span class="cline-any cline-yes">1x</span>
633
+ <span class="cline-any cline-yes">1x</span>
634
+ <span class="cline-any cline-yes">1x</span>
635
+ <span class="cline-any cline-yes">1x</span>
636
+ <span class="cline-any cline-yes">1x</span>
637
+ <span class="cline-any cline-yes">1x</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-yes">1x</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-yes">1x</span>
642
+ <span class="cline-any cline-yes">1x</span>
643
+ <span class="cline-any cline-yes">1x</span>
644
+ <span class="cline-any cline-yes">1x</span>
645
+ <span class="cline-any cline-yes">1x</span>
646
+ <span class="cline-any cline-yes">1x</span>
647
+ <span class="cline-any cline-yes">1x</span>
648
+ <span class="cline-any cline-yes">1x</span>
649
+ <span class="cline-any cline-yes">1x</span>
650
+ <span class="cline-any cline-yes">1x</span>
651
+ <span class="cline-any cline-yes">1x</span>
652
+ <span class="cline-any cline-yes">1x</span>
653
+ <span class="cline-any cline-yes">1x</span>
654
+ <span class="cline-any cline-yes">1x</span>
655
+ <span class="cline-any cline-yes">1x</span>
656
+ <span class="cline-any cline-yes">1x</span>
657
+ <span class="cline-any cline-yes">1x</span>
658
+ <span class="cline-any cline-yes">1x</span>
659
+ <span class="cline-any cline-yes">1x</span>
660
+ <span class="cline-any cline-yes">1x</span>
661
+ <span class="cline-any cline-yes">1x</span>
662
+ <span class="cline-any cline-yes">1x</span>
663
+ <span class="cline-any cline-yes">1x</span>
664
+ <span class="cline-any cline-yes">49x</span>
665
+ <span class="cline-any cline-yes">49x</span>
666
+ <span class="cline-any cline-yes">49x</span>
667
+ <span class="cline-any cline-yes">49x</span>
668
+ <span class="cline-any cline-yes">49x</span>
669
+ <span class="cline-any cline-yes">49x</span>
670
+ <span class="cline-any cline-yes">49x</span>
671
+ <span class="cline-any cline-yes">49x</span>
672
+ <span class="cline-any cline-yes">49x</span>
673
+ <span class="cline-any cline-yes">49x</span>
674
+ <span class="cline-any cline-yes">49x</span>
675
+ <span class="cline-any cline-yes">49x</span>
676
+ <span class="cline-any cline-yes">49x</span>
677
+ <span class="cline-any cline-yes">49x</span>
678
+ <span class="cline-any cline-yes">49x</span>
679
+ <span class="cline-any cline-yes">49x</span>
680
+ <span class="cline-any cline-yes">49x</span>
681
+ <span class="cline-any cline-yes">49x</span>
682
+ <span class="cline-any cline-yes">49x</span>
683
+ <span class="cline-any cline-yes">49x</span>
684
+ <span class="cline-any cline-yes">21x</span>
685
+ <span class="cline-any cline-yes">1x</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">20x</span>
688
+ <span class="cline-any cline-yes">21x</span>
689
+ <span class="cline-any cline-yes">49x</span>
690
+ <span class="cline-any cline-yes">49x</span>
691
+ <span class="cline-any cline-yes">49x</span>
692
+ <span class="cline-any cline-yes">49x</span>
693
+ <span class="cline-any cline-yes">49x</span>
694
+ <span class="cline-any cline-yes">49x</span>
695
+ <span class="cline-any cline-yes">3x</span>
696
+ <span class="cline-any cline-yes">3x</span>
697
+ <span class="cline-any cline-yes">3x</span>
698
+ <span class="cline-any cline-yes">3x</span>
699
+ <span class="cline-any cline-yes">49x</span>
700
+ <span class="cline-any cline-yes">49x</span>
701
+ <span class="cline-any cline-yes">49x</span>
702
+ <span class="cline-any cline-yes">49x</span>
703
+ <span class="cline-any cline-yes">49x</span>
704
+ <span class="cline-any cline-yes">49x</span>
705
+ <span class="cline-any cline-yes">49x</span>
706
+ <span class="cline-any cline-yes">21x</span>
707
+ <span class="cline-any cline-yes">21x</span>
708
+ <span class="cline-any cline-yes">21x</span>
709
+ <span class="cline-any cline-yes">2x</span>
710
+ <span class="cline-any cline-yes">2x</span>
711
+ <span class="cline-any cline-yes">2x</span>
712
+ <span class="cline-any cline-yes">19x</span>
713
+ <span class="cline-any cline-yes">21x</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-yes">19x</span>
718
+ <span class="cline-any cline-yes">19x</span>
719
+ <span class="cline-any cline-yes">21x</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-yes">19x</span>
723
+ <span class="cline-any cline-yes">19x</span>
724
+ <span class="cline-any cline-yes">19x</span>
725
+ <span class="cline-any cline-yes">19x</span>
726
+ <span class="cline-any cline-yes">19x</span>
727
+ <span class="cline-any cline-yes">19x</span>
728
+ <span class="cline-any cline-yes">19x</span>
729
+ <span class="cline-any cline-yes">19x</span>
730
+ <span class="cline-any cline-yes">19x</span>
731
+ <span class="cline-any cline-yes">19x</span>
732
+ <span class="cline-any cline-yes">19x</span>
733
+ <span class="cline-any cline-yes">19x</span>
734
+ <span class="cline-any cline-yes">19x</span>
735
+ <span class="cline-any cline-yes">19x</span>
736
+ <span class="cline-any cline-yes">19x</span>
737
+ <span class="cline-any cline-yes">14x</span>
738
+ <span class="cline-any cline-yes">14x</span>
739
+ <span class="cline-any cline-yes">14x</span>
740
+ <span class="cline-any cline-yes">14x</span>
741
+ <span class="cline-any cline-yes">13x</span>
742
+ <span class="cline-any cline-yes">1x</span>
743
+ <span class="cline-any cline-yes">14x</span>
744
+ <span class="cline-any cline-yes">14x</span>
745
+ <span class="cline-any cline-yes">11x</span>
746
+ <span class="cline-any cline-yes">11x</span>
747
+ <span class="cline-any cline-yes">11x</span>
748
+ <span class="cline-any cline-yes">14x</span>
749
+ <span class="cline-any cline-yes">3x</span>
750
+ <span class="cline-any cline-yes">3x</span>
751
+ <span class="cline-any cline-yes">3x</span>
752
+ <span class="cline-any cline-yes">14x</span>
753
+ <span class="cline-any cline-yes">21x</span>
754
+ <span class="cline-any cline-yes">5x</span>
755
+ <span class="cline-any cline-yes">5x</span>
756
+ <span class="cline-any cline-yes">5x</span>
757
+ <span class="cline-any cline-yes">5x</span>
758
+ <span class="cline-any cline-yes">5x</span>
759
+ <span class="cline-any cline-yes">5x</span>
760
+ <span class="cline-any cline-yes">5x</span>
761
+ <span class="cline-any cline-yes">5x</span>
762
+ <span class="cline-any cline-yes">5x</span>
763
+ <span class="cline-any cline-yes">5x</span>
764
+ <span class="cline-any cline-yes">21x</span>
765
+ <span class="cline-any cline-yes">19x</span>
766
+ <span class="cline-any cline-yes">19x</span>
767
+ <span class="cline-any cline-yes">19x</span>
768
+ <span class="cline-any cline-yes">19x</span>
769
+ <span class="cline-any cline-yes">19x</span>
770
+ <span class="cline-any cline-yes">19x</span>
771
+ <span class="cline-any cline-yes">19x</span>
772
+ <span class="cline-any cline-yes">19x</span>
773
+ <span class="cline-any cline-yes">49x</span>
774
+ <span class="cline-any cline-yes">49x</span>
775
+ <span class="cline-any cline-yes">49x</span>
776
+ <span class="cline-any cline-yes">49x</span>
777
+ <span class="cline-any cline-yes">49x</span>
778
+ <span class="cline-any cline-yes">49x</span>
779
+ <span class="cline-any cline-yes">28x</span>
780
+ <span class="cline-any cline-yes">19x</span>
781
+ <span class="cline-any cline-yes">28x</span>
782
+ <span class="cline-any cline-yes">2x</span>
783
+ <span class="cline-any cline-yes">2x</span>
784
+ <span class="cline-any cline-yes">49x</span>
785
+ <span class="cline-any cline-yes">49x</span>
786
+ <span class="cline-any cline-yes">49x</span>
787
+ <span class="cline-any cline-yes">49x</span>
788
+ <span class="cline-any cline-yes">49x</span>
789
+ <span class="cline-any cline-yes">49x</span>
790
+ <span class="cline-any cline-yes">27x</span>
791
+ <span class="cline-any cline-yes">27x</span>
792
+ <span class="cline-any cline-yes">27x</span>
793
+ <span class="cline-any cline-yes">27x</span>
794
+ <span class="cline-any cline-yes">27x</span>
795
+ <span class="cline-any cline-yes">27x</span>
796
+ <span class="cline-any cline-no">&nbsp;</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-yes">27x</span>
800
+ <span class="cline-any cline-yes">49x</span>
801
+ <span class="cline-any cline-yes">49x</span>
802
+ <span class="cline-any cline-yes">49x</span>
803
+ <span class="cline-any cline-yes">49x</span>
804
+ <span class="cline-any cline-yes">49x</span>
805
+ <span class="cline-any cline-yes">49x</span>
806
+ <span class="cline-any cline-yes">49x</span>
807
+ <span class="cline-any cline-yes">49x</span>
808
+ <span class="cline-any cline-yes">49x</span>
809
+ <span class="cline-any cline-yes">49x</span>
810
+ <span class="cline-any cline-yes">49x</span>
811
+ <span class="cline-any cline-yes">49x</span>
812
+ <span class="cline-any cline-yes">49x</span>
813
+ <span class="cline-any cline-yes">49x</span>
814
+ <span class="cline-any cline-yes">49x</span>
815
+ <span class="cline-any cline-yes">49x</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// =============================
817
+ // USE USER DATA HOOK (COMPLETE NEW SYSTEM)
818
+ // =============================
819
+ &nbsp;
820
+ /**
821
+ * Complete hook for user data management that combines:
822
+ * 1. Session data from the JWT (sessionData)
823
+ * 2. Full user data from the database (userData)
824
+ * 3. All functionality from the legacy useCrudifyUser system
825
+ *
826
+ * This hook fully replaces useCrudifyUser from the legacy system
827
+ * while maintaining 100% API compatibility but using the new SessionProvider
828
+ */
829
+ &nbsp;
830
+ import { useState, useEffect, useCallback, useRef } from 'react';
831
+ import { CrudifyInstance } from '@nocios/crudify-sdk';
832
+ import { useSessionContext } from '../providers/SessionProvider';
833
+ import type { UserProfile } from '../types/api';
834
+ &nbsp;
835
+ /**
836
+ * Dynamic response data structure for user queries
837
+ * The API can return data in multiple formats depending on the query type
838
+ */
839
+ interface UserDataResponseData {
840
+ response?: { data?: string | object };
841
+ data?: { response?: { data?: string | object } };
842
+ items?: UserProfile[];
843
+ [key: string]: unknown;
844
+ }
845
+ &nbsp;
846
+ /**
847
+ * Check if a request is still the current active request
848
+ */
849
+ function isStaleRequest(
850
+ currentRequestId: number,
851
+ requestIdRef: React.RefObject&lt;number&gt;,
852
+ mountedRef: React.RefObject&lt;boolean&gt;,
853
+ abortController?: AbortController
854
+ ): boolean {
855
+ if (currentRequestId !== requestIdRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
856
+ <span class="cstat-no" title="statement not covered" > return true;</span>
857
+ <span class="cstat-no" title="statement not covered" > }</span>
858
+ if (!mountedRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
859
+ <span class="cstat-no" title="statement not covered" > return true;</span>
860
+ <span class="cstat-no" title="statement not covered" > }</span>
861
+ if (abortController?.signal.aborted) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
862
+ <span class="cstat-no" title="statement not covered" > return true;</span>
863
+ <span class="cstat-no" title="statement not covered" > }</span>
864
+ return false;
865
+ }
866
+ &nbsp;
867
+ /**
868
+ * Set error state if the component is still mounted
869
+ */
870
+ function setErrorIfMounted(
871
+ mountedRef: React.RefObject&lt;boolean&gt;,
872
+ setError: React.Dispatch&lt;React.SetStateAction&lt;string | null&gt;&gt;,
873
+ setLoading: React.Dispatch&lt;React.SetStateAction&lt;boolean&gt;&gt;,
874
+ message: string
875
+ ): void {
876
+ if (mountedRef.current) {
877
+ setError(message);
878
+ setLoading(false);
879
+ }
880
+ }
881
+ &nbsp;
882
+ /**
883
+ * Determine whether a failed request should be retried based on error type and retry config
884
+ */
885
+ function shouldRetryRequest(error: Error, retryOnError: boolean, retryCount: number, maxRetries: number): boolean {
886
+ if (!retryOnError) {
887
+ return false;
888
+ }
889
+ if (retryCount &gt;= maxRetries) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
890
+ <span class="cstat-no" title="statement not covered" > return false;</span>
891
+ <span class="cstat-no" title="statement not covered" > }</span>
892
+ const message = error.<span class="branch-0 cbranch-no" title="branch not covered" >message ?? '';</span>
893
+ return message.includes('Network Error') || message.includes('Failed to fetch');
894
+ }
895
+ &nbsp;
896
+ /**
897
+ * Grouped retry-related parameters for handleRefreshError
898
+ */
899
+ interface RetryContext {
900
+ retryCountRef: React.RefObject&lt;number&gt;;
901
+ maxRetries: number;
902
+ mountedRef: React.RefObject&lt;boolean&gt;;
903
+ }
904
+ &nbsp;
905
+ /**
906
+ * Handle error cases with retry logic for refreshProfile
907
+ */
908
+ function handleRefreshError(
909
+ err: unknown,
910
+ retryOnError: boolean,
911
+ retryCtx: RetryContext,
912
+ setError: React.Dispatch&lt;React.SetStateAction&lt;string | null&gt;&gt;,
913
+ setUserData: React.Dispatch&lt;React.SetStateAction&lt;UserProfile | null&gt;&gt;,
914
+ refreshProfile: () =&gt; Promise&lt;void&gt;
915
+ ): void {
916
+ const error = err as Error;
917
+ &nbsp;
918
+ if (error.name === 'AbortError') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
919
+ <span class="cstat-no" title="statement not covered" > return;</span>
920
+ <span class="cstat-no" title="statement not covered" > }</span>
921
+ &nbsp;
922
+ if (shouldRetryRequest(error, retryOnError, retryCtx.retryCountRef.current, retryCtx.maxRetries)) {
923
+ retryCtx.retryCountRef.current++;
924
+ setTimeout(() =&gt; {
925
+ if (retryCtx.mountedRef.current) {
926
+ refreshProfile();
927
+ }
928
+ }, 1000 * retryCtx.retryCountRef.current);
929
+ } else {
930
+ setError('Failed to load user profile from database');
931
+ setUserData(null);
932
+ }
933
+ }
934
+ &nbsp;
935
+ /**
936
+ * Parse raw response data (string or object) to extract user items
937
+ */
938
+ function parseRawResponseData(rawData: string | object): UserProfile | null {
939
+ try {
940
+ const parsedData = typeof rawData === 'string' ? JSON.parse(rawData<span class="branch-0 cbranch-no" title="branch not covered" >) : rawData;</span>
941
+ if (parsedData?.items &amp;&amp; Array.isArray(parsedData.items) &amp;&amp; parsedData.items.length &gt; 0) {
942
+ return parsedData.items[0] as UserProfile;
943
+ }
944
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
945
+ <span class="cstat-no" title="statement not covered" > /* JSON parse error - ignored */</span>
946
+ <span class="cstat-no" title="statement not covered" > }</span>
947
+ <span class="cstat-no" title="statement not covered" > return null;</span>
948
+ <span class="cstat-no" title="statement not covered" >}</span>
949
+ &nbsp;
950
+ /**
951
+ * Extract user profile from various API response formats
952
+ * Handles: array, nested response.data, nested data.response.data, items array
953
+ */
954
+ function extractUserFromResponse(responseData: UserDataResponseData | UserProfile[] | null): UserProfile | null {
955
+ if (!responseData) {
956
+ return null;
957
+ }
958
+ &nbsp;
959
+ // Format 1: Direct array
960
+ if (Array.isArray(responseData) &amp;&amp; responseData.length &gt; 0) {
961
+ return responseData[0];
962
+ }
963
+ &nbsp;
964
+ if (typeof responseData !== 'object' || Array.isArray(responseData)) {
965
+ return null;
966
+ }
967
+ &nbsp;
968
+ // Format 2: Wrapped in response.data (string or object)
969
+ if (responseData.response?.data) {
970
+ const parsed = parseRawResponseData(responseData.response.data);
971
+ if (parsed) {
972
+ return parsed;
973
+ }
974
+ }
975
+ &nbsp;
976
+ // Format 3: Direct items array
977
+ if (responseData.items &amp;&amp; Array.isArray(responseData.items) &amp;&amp; responseData.items.length &gt; 0) {
978
+ return responseData.items[0];
979
+ }
980
+ &nbsp;
981
+ // Format 4: Nested data.response.data structure
982
+ if (responseData.data?.response?.data) {
983
+ const parsed = parseRawResponseData(responseData.data.response.data);
984
+ if (parsed) {
985
+ return parsed;
986
+ }
987
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
988
+ <span class="cstat-no" title="statement not covered" ></span>
989
+ <span class="cstat-no" title="statement not covered" > return null;</span>
990
+ <span class="cstat-no" title="statement not covered" >}</span>
991
+ &nbsp;
992
+ /**
993
+ * Complete user data structure (legacy-compatible)
994
+ */
995
+ export interface UserData {
996
+ session: Record&lt;string, unknown&gt; | null; // JWT token data (sessionData)
997
+ data: UserProfile | null; // Full data from the database
998
+ }
999
+ &nbsp;
1000
+ /**
1001
+ * Return type compatible with legacy useCrudifyUser
1002
+ */
1003
+ export interface UseUserDataReturn {
1004
+ // Complete user object (legacy-compatible)
1005
+ user: UserData;
1006
+ &nbsp;
1007
+ // Loading and error states (legacy-compatible)
1008
+ loading: boolean;
1009
+ error: string | null;
1010
+ &nbsp;
1011
+ // Actions (legacy-compatible)
1012
+ refreshProfile: () =&gt; Promise&lt;void&gt;;
1013
+ clearProfile: () =&gt; void;
1014
+ }
1015
+ &nbsp;
1016
+ /**
1017
+ * Options compatible with legacy useCrudifyUser
1018
+ */
1019
+ export interface UseUserDataOptions {
1020
+ autoFetch?: boolean;
1021
+ retryOnError?: boolean;
1022
+ maxRetries?: number;
1023
+ }
1024
+ &nbsp;
1025
+ /**
1026
+ * useUserData - Complete hook that replaces useCrudifyUser from the legacy system
1027
+ *
1028
+ * Full feature set:
1029
+ * - Auto-fetch of user data from the database
1030
+ * - Smart cache management and deduplication
1031
+ * - Retry mechanism for network errors
1032
+ * - Cross-tab synchronization via SessionProvider
1033
+ * - Extended data formatting for display
1034
+ * - Proper cleanup and memory management
1035
+ * - 100% compatible with the legacy useCrudifyUser API
1036
+ * - Uses the new refresh token system under the hood
1037
+ */
1038
+ export const useUserData = (options: UseUserDataOptions = {}): UseUserDataReturn =&gt; {
1039
+ const { autoFetch = true, retryOnError = false, maxRetries = 3 } = options;
1040
+ &nbsp;
1041
+ // Use the new SessionProvider instead of the legacy CrudifyDataProvider
1042
+ const { isAuthenticated, isInitialized, sessionData } = useSessionContext();
1043
+ &nbsp;
1044
+ // User data state
1045
+ const [userData, setUserData] = useState&lt;UserProfile | null&gt;(null);
1046
+ const [loading, setLoading] = useState(autoFetch &amp;&amp; isAuthenticated);
1047
+ const [error, setError] = useState&lt;string | null&gt;(null);
1048
+ &nbsp;
1049
+ // Request management (same as in legacy)
1050
+ const abortControllerRef = useRef&lt;AbortController | null&gt;(null);
1051
+ const mountedRef = useRef(true);
1052
+ const requestIdRef = useRef(0);
1053
+ const retryCountRef = useRef(0);
1054
+ &nbsp;
1055
+ /**
1056
+ * Extract user email from sessionData (replaces getUserEmailFromJWT from legacy)
1057
+ */
1058
+ const getUserEmail = useCallback((): string | null =&gt; {
1059
+ if (!sessionData) {
1060
+ return null;
1061
+ }
1062
+ const cognitoUsername = sessionData['cognito:username'];
1063
+ return sessionData.email || (typeof cognitoUsername === 'string' ? cognitoUsername : null);
1064
+ }, [sessionData]);
1065
+ &nbsp;
1066
+ /**
1067
+ * Clear all user data (legacy-compatible)
1068
+ */
1069
+ const clearProfile = useCallback(() =&gt; {
1070
+ setUserData(null);
1071
+ setError(null);
1072
+ setLoading(false);
1073
+ retryCountRef.current = 0;
1074
+ }, []);
1075
+ &nbsp;
1076
+ /**
1077
+ * Refresh user profile from database (legacy-compatible)
1078
+ * This function is identical to the legacy system but uses sessionData
1079
+ */
1080
+ const refreshProfile = useCallback(async (): Promise&lt;void&gt; =&gt; {
1081
+ const userEmail = getUserEmail();
1082
+ &nbsp;
1083
+ if (!userEmail) {
1084
+ setErrorIfMounted(mountedRef, setError, setLoading, 'No user email available from session data');
1085
+ return;
1086
+ }
1087
+ &nbsp;
1088
+ if (!isInitialized) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1089
+ <span class="cstat-no" title="statement not covered" > setErrorIfMounted(mountedRef, setError, setLoading, 'Session not initialized');</span>
1090
+ <span class="cstat-no" title="statement not covered" > return;</span>
1091
+ <span class="cstat-no" title="statement not covered" > }</span>
1092
+ &nbsp;
1093
+ // Cancel any ongoing request
1094
+ if (abortControllerRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1095
+ <span class="cstat-no" title="statement not covered" > abortControllerRef.current.abort();</span>
1096
+ <span class="cstat-no" title="statement not covered" > }</span>
1097
+ &nbsp;
1098
+ const abortController = new AbortController();
1099
+ abortControllerRef.current = abortController;
1100
+ const currentRequestId = ++requestIdRef.current;
1101
+ &nbsp;
1102
+ try {
1103
+ if (mountedRef.current) {
1104
+ setLoading(true);
1105
+ setError(null);
1106
+ }
1107
+ &nbsp;
1108
+ const response = await CrudifyInstance.readItems('users', {
1109
+ filter: { email: userEmail },
1110
+ pagination: { limit: 1 },
1111
+ });
1112
+ &nbsp;
1113
+ if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef, abortController)) {
1114
+ // Handle different response formats from crudify using extracted helper
1115
+ const extractedUserData = response.success
1116
+ ? extractUserFromResponse(response.data as UserDataResponseData | UserProfile[] | null)
1117
+ : null;
1118
+ &nbsp;
1119
+ if (extractedUserData) {
1120
+ setUserData(extractedUserData);
1121
+ setError(null);
1122
+ retryCountRef.current = 0;
1123
+ } else {
1124
+ setError('User profile not found in database');
1125
+ setUserData(null);
1126
+ }
1127
+ }
1128
+ } catch (err: unknown) {
1129
+ if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef)) {
1130
+ handleRefreshError(
1131
+ err,
1132
+ retryOnError,
1133
+ { retryCountRef, maxRetries, mountedRef },
1134
+ setError,
1135
+ setUserData,
1136
+ refreshProfile
1137
+ );
1138
+ }
1139
+ } finally {
1140
+ if (!isStaleRequest(currentRequestId, requestIdRef, mountedRef)) {
1141
+ setLoading(false);
1142
+ }
1143
+ &nbsp;
1144
+ if (abortControllerRef.current === abortController) {
1145
+ abortControllerRef.current = null;
1146
+ }
1147
+ }
1148
+ }, [isInitialized, getUserEmail, retryOnError, maxRetries]);
1149
+ &nbsp;
1150
+ /**
1151
+ * Auto-fetch profile when authenticated and initialized (legacy-compatible)
1152
+ */
1153
+ useEffect(() =&gt; {
1154
+ if (autoFetch &amp;&amp; isAuthenticated &amp;&amp; isInitialized) {
1155
+ refreshProfile();
1156
+ } else if (!isAuthenticated) {
1157
+ clearProfile();
1158
+ }
1159
+ }, [autoFetch, isAuthenticated, isInitialized, refreshProfile, clearProfile]);
1160
+ &nbsp;
1161
+ /**
1162
+ * Cleanup on unmount (identical to legacy)
1163
+ */
1164
+ useEffect(() =&gt; {
1165
+ mountedRef.current = true;
1166
+ &nbsp;
1167
+ return () =&gt; {
1168
+ mountedRef.current = false;
1169
+ &nbsp;
1170
+ if (abortControllerRef.current) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1171
+ <span class="cstat-no" title="statement not covered" > abortControllerRef.current.abort();</span>
1172
+ <span class="cstat-no" title="statement not covered" > abortControllerRef.current = null;</span>
1173
+ <span class="cstat-no" title="statement not covered" > }</span>
1174
+ };
1175
+ }, []);
1176
+ &nbsp;
1177
+ // Create the unified user object (legacy API-compatible)
1178
+ const user: UserData = {
1179
+ session: sessionData, // Use sessionData from the new system
1180
+ data: userData, // Keep userData from the database same as legacy
1181
+ };
1182
+ &nbsp;
1183
+ return {
1184
+ user,
1185
+ loading,
1186
+ error,
1187
+ refreshProfile,
1188
+ clearProfile,
1189
+ };
1190
+ };
1191
+ &nbsp;</pre></td></tr></table></pre>
1192
+
1193
+ <div class='push'></div><!-- for sticky footer -->
1194
+ </div><!-- /wrapper -->
1195
+ <div class='footer quiet pad2 space-top1 center small'>
1196
+ Code coverage generated by
1197
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1198
+ at 2026-02-07T06:55:20.810Z
1199
+ </div>
1200
+ <script src="../prettify.js"></script>
1201
+ <script>
1202
+ window.onload = function () {
1203
+ prettyPrint();
1204
+ };
1205
+ </script>
1206
+ <script src="../sorter.js"></script>
1207
+ <script src="../block-navigation.js"></script>
1208
+ </body>
1209
+ </html>
1210
+