@marinoscar/platform-web 0.0.0-stage → 0.1.0-next.3

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 (356) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +96 -2
  4. package/dist/core/api-client.d.ts +112 -0
  5. package/dist/core/api-client.d.ts.map +1 -0
  6. package/dist/core/api-client.js +24 -0
  7. package/dist/core/api-client.js.map +1 -0
  8. package/dist/core/host.d.ts +74 -0
  9. package/dist/core/host.d.ts.map +1 -0
  10. package/dist/core/host.js +84 -0
  11. package/dist/core/host.js.map +1 -0
  12. package/dist/core/index.d.ts +7 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +5 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/core/settings-page.d.ts +47 -0
  17. package/dist/core/settings-page.d.ts.map +1 -0
  18. package/dist/core/settings-page.js +5 -0
  19. package/dist/core/settings-page.js.map +1 -0
  20. package/dist/core/viewer.d.ts +14 -0
  21. package/dist/core/viewer.d.ts.map +1 -0
  22. package/dist/core/viewer.js +4 -0
  23. package/dist/core/viewer.js.map +1 -0
  24. package/dist/doctor/headless/categories.d.ts +31 -0
  25. package/dist/doctor/headless/categories.d.ts.map +1 -0
  26. package/dist/doctor/headless/categories.js +41 -0
  27. package/dist/doctor/headless/categories.js.map +1 -0
  28. package/dist/doctor/headless/client.d.ts +33 -0
  29. package/dist/doctor/headless/client.d.ts.map +1 -0
  30. package/dist/doctor/headless/client.js +31 -0
  31. package/dist/doctor/headless/client.js.map +1 -0
  32. package/dist/doctor/headless/contract.d.ts +18 -0
  33. package/dist/doctor/headless/contract.d.ts.map +1 -0
  34. package/dist/doctor/headless/contract.js +15 -0
  35. package/dist/doctor/headless/contract.js.map +1 -0
  36. package/dist/doctor/headless/index.d.ts +12 -0
  37. package/dist/doctor/headless/index.d.ts.map +1 -0
  38. package/dist/doctor/headless/index.js +8 -0
  39. package/dist/doctor/headless/index.js.map +1 -0
  40. package/dist/doctor/headless/use-doctor.d.ts +36 -0
  41. package/dist/doctor/headless/use-doctor.d.ts.map +1 -0
  42. package/dist/doctor/headless/use-doctor.js +80 -0
  43. package/dist/doctor/headless/use-doctor.js.map +1 -0
  44. package/dist/doctor/headless/use-support-bundle-download.d.ts +68 -0
  45. package/dist/doctor/headless/use-support-bundle-download.d.ts.map +1 -0
  46. package/dist/doctor/headless/use-support-bundle-download.js +135 -0
  47. package/dist/doctor/headless/use-support-bundle-download.js.map +1 -0
  48. package/dist/doctor/internal/relative-time.d.ts +2 -0
  49. package/dist/doctor/internal/relative-time.d.ts.map +1 -0
  50. package/dist/doctor/internal/relative-time.js +29 -0
  51. package/dist/doctor/internal/relative-time.js.map +1 -0
  52. package/dist/doctor/internal/status-colors.d.ts +5 -0
  53. package/dist/doctor/internal/status-colors.d.ts.map +1 -0
  54. package/dist/doctor/internal/status-colors.js +29 -0
  55. package/dist/doctor/internal/status-colors.js.map +1 -0
  56. package/dist/doctor/internal/use-is-mounted.d.ts +2 -0
  57. package/dist/doctor/internal/use-is-mounted.d.ts.map +1 -0
  58. package/dist/doctor/internal/use-is-mounted.js +15 -0
  59. package/dist/doctor/internal/use-is-mounted.js.map +1 -0
  60. package/dist/doctor/ui/check-row.d.ts +54 -0
  61. package/dist/doctor/ui/check-row.d.ts.map +1 -0
  62. package/dist/doctor/ui/check-row.js +100 -0
  63. package/dist/doctor/ui/check-row.js.map +1 -0
  64. package/dist/doctor/ui/copy.d.ts +3 -0
  65. package/dist/doctor/ui/copy.d.ts.map +1 -0
  66. package/dist/doctor/ui/copy.js +6 -0
  67. package/dist/doctor/ui/copy.js.map +1 -0
  68. package/dist/doctor/ui/doctor-page.d.ts +50 -0
  69. package/dist/doctor/ui/doctor-page.d.ts.map +1 -0
  70. package/dist/doctor/ui/doctor-page.js +152 -0
  71. package/dist/doctor/ui/doctor-page.js.map +1 -0
  72. package/dist/doctor/ui/index.d.ts +8 -0
  73. package/dist/doctor/ui/index.d.ts.map +1 -0
  74. package/dist/doctor/ui/index.js +7 -0
  75. package/dist/doctor/ui/index.js.map +1 -0
  76. package/dist/doctor/ui/settings-page.d.ts +20 -0
  77. package/dist/doctor/ui/settings-page.d.ts.map +1 -0
  78. package/dist/doctor/ui/settings-page.js +32 -0
  79. package/dist/doctor/ui/settings-page.js.map +1 -0
  80. package/dist/doctor/ui/support-bundle-button.d.ts +37 -0
  81. package/dist/doctor/ui/support-bundle-button.d.ts.map +1 -0
  82. package/dist/doctor/ui/support-bundle-button.js +39 -0
  83. package/dist/doctor/ui/support-bundle-button.js.map +1 -0
  84. package/dist/index.d.ts +11 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +11 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts +106 -0
  89. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts.map +1 -0
  90. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js +58 -0
  91. package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js.map +1 -0
  92. package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts +43 -0
  93. package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts.map +1 -0
  94. package/dist/telemetry/headless/context/TelemetryConfigProvider.js +24 -0
  95. package/dist/telemetry/headless/context/TelemetryConfigProvider.js.map +1 -0
  96. package/dist/telemetry/headless/context/telemetryConfig.d.ts +68 -0
  97. package/dist/telemetry/headless/context/telemetryConfig.d.ts.map +1 -0
  98. package/dist/telemetry/headless/context/telemetryConfig.js +119 -0
  99. package/dist/telemetry/headless/context/telemetryConfig.js.map +1 -0
  100. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts +35 -0
  101. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts.map +1 -0
  102. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js +44 -0
  103. package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js.map +1 -0
  104. package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts +40 -0
  105. package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts.map +1 -0
  106. package/dist/telemetry/headless/hooks/useTelemetryAdmin.js +111 -0
  107. package/dist/telemetry/headless/hooks/useTelemetryAdmin.js.map +1 -0
  108. package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts +120 -0
  109. package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts.map +1 -0
  110. package/dist/telemetry/headless/hooks/useTelemetryAssistant.js +185 -0
  111. package/dist/telemetry/headless/hooks/useTelemetryAssistant.js.map +1 -0
  112. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts +12 -0
  113. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts.map +1 -0
  114. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js +36 -0
  115. package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js.map +1 -0
  116. package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts +46 -0
  117. package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts.map +1 -0
  118. package/dist/telemetry/headless/hooks/useTelemetryConnection.js +133 -0
  119. package/dist/telemetry/headless/hooks/useTelemetryConnection.js.map +1 -0
  120. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +147 -0
  121. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts.map +1 -0
  122. package/dist/telemetry/headless/hooks/useTelemetryDashboard.js +231 -0
  123. package/dist/telemetry/headless/hooks/useTelemetryDashboard.js.map +1 -0
  124. package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts +95 -0
  125. package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts.map +1 -0
  126. package/dist/telemetry/headless/hooks/useTelemetryExplorer.js +197 -0
  127. package/dist/telemetry/headless/hooks/useTelemetryExplorer.js.map +1 -0
  128. package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts +69 -0
  129. package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts.map +1 -0
  130. package/dist/telemetry/headless/hooks/useTelemetryStack.js +129 -0
  131. package/dist/telemetry/headless/hooks/useTelemetryStack.js.map +1 -0
  132. package/dist/telemetry/headless/index.d.ts +34 -0
  133. package/dist/telemetry/headless/index.d.ts.map +1 -0
  134. package/dist/telemetry/headless/index.js +34 -0
  135. package/dist/telemetry/headless/index.js.map +1 -0
  136. package/dist/telemetry/headless/lib/assistantExport.d.ts +12 -0
  137. package/dist/telemetry/headless/lib/assistantExport.d.ts.map +1 -0
  138. package/dist/telemetry/headless/lib/assistantExport.js +116 -0
  139. package/dist/telemetry/headless/lib/assistantExport.js.map +1 -0
  140. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts +91 -0
  141. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts.map +1 -0
  142. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js +246 -0
  143. package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js.map +1 -0
  144. package/dist/telemetry/headless/lib/dashboardState.d.ts +58 -0
  145. package/dist/telemetry/headless/lib/dashboardState.d.ts.map +1 -0
  146. package/dist/telemetry/headless/lib/dashboardState.js +153 -0
  147. package/dist/telemetry/headless/lib/dashboardState.js.map +1 -0
  148. package/dist/telemetry/headless/lib/explorerHandoff.d.ts +62 -0
  149. package/dist/telemetry/headless/lib/explorerHandoff.d.ts.map +1 -0
  150. package/dist/telemetry/headless/lib/explorerHandoff.js +77 -0
  151. package/dist/telemetry/headless/lib/explorerHandoff.js.map +1 -0
  152. package/dist/telemetry/headless/lib/format.d.ts +113 -0
  153. package/dist/telemetry/headless/lib/format.d.ts.map +1 -0
  154. package/dist/telemetry/headless/lib/format.js +280 -0
  155. package/dist/telemetry/headless/lib/format.js.map +1 -0
  156. package/dist/telemetry/headless/lib/metrics/metricSections.d.ts +44 -0
  157. package/dist/telemetry/headless/lib/metrics/metricSections.d.ts.map +1 -0
  158. package/dist/telemetry/headless/lib/metrics/metricSections.js +61 -0
  159. package/dist/telemetry/headless/lib/metrics/metricSections.js.map +1 -0
  160. package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts +15 -0
  161. package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts.map +1 -0
  162. package/dist/telemetry/headless/lib/metrics/topNPreference.js +33 -0
  163. package/dist/telemetry/headless/lib/metrics/topNPreference.js.map +1 -0
  164. package/dist/telemetry/headless/lib/queryHistory.d.ts +20 -0
  165. package/dist/telemetry/headless/lib/queryHistory.d.ts.map +1 -0
  166. package/dist/telemetry/headless/lib/queryHistory.js +53 -0
  167. package/dist/telemetry/headless/lib/queryHistory.js.map +1 -0
  168. package/dist/telemetry/headless/lib/starterQueries.d.ts +48 -0
  169. package/dist/telemetry/headless/lib/starterQueries.d.ts.map +1 -0
  170. package/dist/telemetry/headless/lib/starterQueries.js +84 -0
  171. package/dist/telemetry/headless/lib/starterQueries.js.map +1 -0
  172. package/dist/telemetry/headless/lib/traceLink.d.ts +26 -0
  173. package/dist/telemetry/headless/lib/traceLink.d.ts.map +1 -0
  174. package/dist/telemetry/headless/lib/traceLink.js +32 -0
  175. package/dist/telemetry/headless/lib/traceLink.js.map +1 -0
  176. package/dist/telemetry/headless/lib/unknownRoutes.d.ts +23 -0
  177. package/dist/telemetry/headless/lib/unknownRoutes.d.ts.map +1 -0
  178. package/dist/telemetry/headless/lib/unknownRoutes.js +35 -0
  179. package/dist/telemetry/headless/lib/unknownRoutes.js.map +1 -0
  180. package/dist/telemetry/headless/services/client.d.ts +144 -0
  181. package/dist/telemetry/headless/services/client.d.ts.map +1 -0
  182. package/dist/telemetry/headless/services/client.js +144 -0
  183. package/dist/telemetry/headless/services/client.js.map +1 -0
  184. package/dist/telemetry/headless/services/telemetry.d.ts +483 -0
  185. package/dist/telemetry/headless/services/telemetry.d.ts.map +1 -0
  186. package/dist/telemetry/headless/services/telemetry.js +190 -0
  187. package/dist/telemetry/headless/services/telemetry.js.map +1 -0
  188. package/dist/telemetry/headless/services/telemetryDashboard.d.ts +321 -0
  189. package/dist/telemetry/headless/services/telemetryDashboard.d.ts.map +1 -0
  190. package/dist/telemetry/headless/services/telemetryDashboard.js +103 -0
  191. package/dist/telemetry/headless/services/telemetryDashboard.js.map +1 -0
  192. package/dist/telemetry/internal/useIsMounted.d.ts +9 -0
  193. package/dist/telemetry/internal/useIsMounted.d.ts.map +1 -0
  194. package/dist/telemetry/internal/useIsMounted.js +19 -0
  195. package/dist/telemetry/internal/useIsMounted.js.map +1 -0
  196. package/dist/telemetry/internal/useVisiblePolling.d.ts +55 -0
  197. package/dist/telemetry/internal/useVisiblePolling.d.ts.map +1 -0
  198. package/dist/telemetry/internal/useVisiblePolling.js +96 -0
  199. package/dist/telemetry/internal/useVisiblePolling.js.map +1 -0
  200. package/dist/telemetry/internal/visuallyHidden.d.ts +12 -0
  201. package/dist/telemetry/internal/visuallyHidden.d.ts.map +1 -0
  202. package/dist/telemetry/internal/visuallyHidden.js +15 -0
  203. package/dist/telemetry/internal/visuallyHidden.js.map +1 -0
  204. package/dist/telemetry/theme/augment.d.ts +65 -0
  205. package/dist/telemetry/theme/augment.d.ts.map +1 -0
  206. package/dist/telemetry/theme/augment.js +37 -0
  207. package/dist/telemetry/theme/augment.js.map +1 -0
  208. package/dist/telemetry/theme/telemetryTokens.d.ts +121 -0
  209. package/dist/telemetry/theme/telemetryTokens.d.ts.map +1 -0
  210. package/dist/telemetry/theme/telemetryTokens.js +129 -0
  211. package/dist/telemetry/theme/telemetryTokens.js.map +1 -0
  212. package/dist/telemetry/ui/admin.d.ts +35 -0
  213. package/dist/telemetry/ui/admin.d.ts.map +1 -0
  214. package/dist/telemetry/ui/admin.js +58 -0
  215. package/dist/telemetry/ui/admin.js.map +1 -0
  216. package/dist/telemetry/ui/components/AssistantContainer.d.ts +35 -0
  217. package/dist/telemetry/ui/components/AssistantContainer.d.ts.map +1 -0
  218. package/dist/telemetry/ui/components/AssistantContainer.js +83 -0
  219. package/dist/telemetry/ui/components/AssistantContainer.js.map +1 -0
  220. package/dist/telemetry/ui/components/AssistantPanel.d.ts +22 -0
  221. package/dist/telemetry/ui/components/AssistantPanel.d.ts.map +1 -0
  222. package/dist/telemetry/ui/components/AssistantPanel.js +150 -0
  223. package/dist/telemetry/ui/components/AssistantPanel.js.map +1 -0
  224. package/dist/telemetry/ui/components/AssistantReport.d.ts +13 -0
  225. package/dist/telemetry/ui/components/AssistantReport.d.ts.map +1 -0
  226. package/dist/telemetry/ui/components/AssistantReport.js +89 -0
  227. package/dist/telemetry/ui/components/AssistantReport.js.map +1 -0
  228. package/dist/telemetry/ui/components/AssistantTimeline.d.ts +10 -0
  229. package/dist/telemetry/ui/components/AssistantTimeline.d.ts.map +1 -0
  230. package/dist/telemetry/ui/components/AssistantTimeline.js +84 -0
  231. package/dist/telemetry/ui/components/AssistantTimeline.js.map +1 -0
  232. package/dist/telemetry/ui/components/ResultsGrid.d.ts +10 -0
  233. package/dist/telemetry/ui/components/ResultsGrid.d.ts.map +1 -0
  234. package/dist/telemetry/ui/components/ResultsGrid.js +71 -0
  235. package/dist/telemetry/ui/components/ResultsGrid.js.map +1 -0
  236. package/dist/telemetry/ui/components/SchemaPanel.d.ts +9 -0
  237. package/dist/telemetry/ui/components/SchemaPanel.d.ts.map +1 -0
  238. package/dist/telemetry/ui/components/SchemaPanel.js +42 -0
  239. package/dist/telemetry/ui/components/SchemaPanel.js.map +1 -0
  240. package/dist/telemetry/ui/components/SqlEditor.d.ts +21 -0
  241. package/dist/telemetry/ui/components/SqlEditor.d.ts.map +1 -0
  242. package/dist/telemetry/ui/components/SqlEditor.js +60 -0
  243. package/dist/telemetry/ui/components/SqlEditor.js.map +1 -0
  244. package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts +14 -0
  245. package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts.map +1 -0
  246. package/dist/telemetry/ui/components/TelemetryConnectionSection.js +243 -0
  247. package/dist/telemetry/ui/components/TelemetryConnectionSection.js.map +1 -0
  248. package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts +12 -0
  249. package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts.map +1 -0
  250. package/dist/telemetry/ui/components/TelemetryCrossLink.js +21 -0
  251. package/dist/telemetry/ui/components/TelemetryCrossLink.js.map +1 -0
  252. package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts +23 -0
  253. package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts.map +1 -0
  254. package/dist/telemetry/ui/components/TelemetryServicesSection.js +138 -0
  255. package/dist/telemetry/ui/components/TelemetryServicesSection.js.map +1 -0
  256. package/dist/telemetry/ui/components/TelemetrySpinner.d.ts +3 -0
  257. package/dist/telemetry/ui/components/TelemetrySpinner.d.ts.map +1 -0
  258. package/dist/telemetry/ui/components/TelemetrySpinner.js +14 -0
  259. package/dist/telemetry/ui/components/TelemetrySpinner.js.map +1 -0
  260. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts +17 -0
  261. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts.map +1 -0
  262. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js +70 -0
  263. package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js.map +1 -0
  264. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts +39 -0
  265. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts.map +1 -0
  266. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js +143 -0
  267. package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js.map +1 -0
  268. package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts +58 -0
  269. package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts.map +1 -0
  270. package/dist/telemetry/ui/components/dashboard/DashboardPanel.js +62 -0
  271. package/dist/telemetry/ui/components/dashboard/DashboardPanel.js.map +1 -0
  272. package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts +21 -0
  273. package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts.map +1 -0
  274. package/dist/telemetry/ui/components/dashboard/EventsFeed.js +96 -0
  275. package/dist/telemetry/ui/components/dashboard/EventsFeed.js.map +1 -0
  276. package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts +13 -0
  277. package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts.map +1 -0
  278. package/dist/telemetry/ui/components/dashboard/KpiTiles.js +82 -0
  279. package/dist/telemetry/ui/components/dashboard/KpiTiles.js.map +1 -0
  280. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts +8 -0
  281. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts.map +1 -0
  282. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js +34 -0
  283. package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js.map +1 -0
  284. package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts +19 -0
  285. package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts.map +1 -0
  286. package/dist/telemetry/ui/components/dashboard/TopProblems.js +61 -0
  287. package/dist/telemetry/ui/components/dashboard/TopProblems.js.map +1 -0
  288. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts +12 -0
  289. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts.map +1 -0
  290. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js +36 -0
  291. package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js.map +1 -0
  292. package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts +35 -0
  293. package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts.map +1 -0
  294. package/dist/telemetry/ui/components/dashboard/VerdictBanner.js +68 -0
  295. package/dist/telemetry/ui/components/dashboard/VerdictBanner.js.map +1 -0
  296. package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts +9 -0
  297. package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts.map +1 -0
  298. package/dist/telemetry/ui/components/dashboard/ZoomBrush.js +96 -0
  299. package/dist/telemetry/ui/components/dashboard/ZoomBrush.js.map +1 -0
  300. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +75 -0
  301. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -0
  302. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +247 -0
  303. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -0
  304. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts +19 -0
  305. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts.map +1 -0
  306. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js +64 -0
  307. package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js.map +1 -0
  308. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts +74 -0
  309. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts.map +1 -0
  310. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js +126 -0
  311. package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js.map +1 -0
  312. package/dist/telemetry/ui/components/dashboard/severity.d.ts +43 -0
  313. package/dist/telemetry/ui/components/dashboard/severity.d.ts.map +1 -0
  314. package/dist/telemetry/ui/components/dashboard/severity.js +66 -0
  315. package/dist/telemetry/ui/components/dashboard/severity.js.map +1 -0
  316. package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts +11 -0
  317. package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts.map +1 -0
  318. package/dist/telemetry/ui/components/dashboard/timelineAxis.js +20 -0
  319. package/dist/telemetry/ui/components/dashboard/timelineAxis.js.map +1 -0
  320. package/dist/telemetry/ui/dashboard-page.d.ts +2 -0
  321. package/dist/telemetry/ui/dashboard-page.d.ts.map +1 -0
  322. package/dist/telemetry/ui/dashboard-page.js +6 -0
  323. package/dist/telemetry/ui/dashboard-page.js.map +1 -0
  324. package/dist/telemetry/ui/explorer-page.d.ts +2 -0
  325. package/dist/telemetry/ui/explorer-page.d.ts.map +1 -0
  326. package/dist/telemetry/ui/explorer-page.js +6 -0
  327. package/dist/telemetry/ui/explorer-page.js.map +1 -0
  328. package/dist/telemetry/ui/index.d.ts +6 -0
  329. package/dist/telemetry/ui/index.d.ts.map +1 -0
  330. package/dist/telemetry/ui/index.js +10 -0
  331. package/dist/telemetry/ui/index.js.map +1 -0
  332. package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts +14 -0
  333. package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts.map +1 -0
  334. package/dist/telemetry/ui/pages/TelemetryDashboardPage.js +286 -0
  335. package/dist/telemetry/ui/pages/TelemetryDashboardPage.js.map +1 -0
  336. package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts +15 -0
  337. package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts.map +1 -0
  338. package/dist/telemetry/ui/pages/TelemetryExplorerPage.js +197 -0
  339. package/dist/telemetry/ui/pages/TelemetryExplorerPage.js.map +1 -0
  340. package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts +28 -0
  341. package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts.map +1 -0
  342. package/dist/telemetry/ui/pages/TelemetrySettingsPage.js +278 -0
  343. package/dist/telemetry/ui/pages/TelemetrySettingsPage.js.map +1 -0
  344. package/dist/telemetry/ui/settings-page.d.ts +2 -0
  345. package/dist/telemetry/ui/settings-page.d.ts.map +1 -0
  346. package/dist/telemetry/ui/settings-page.js +6 -0
  347. package/dist/telemetry/ui/settings-page.js.map +1 -0
  348. package/dist/testing/index.d.ts +3 -0
  349. package/dist/testing/index.d.ts.map +1 -0
  350. package/dist/testing/index.js +4 -0
  351. package/dist/testing/index.js.map +1 -0
  352. package/dist/testing/test-platform-host.d.ts +108 -0
  353. package/dist/testing/test-platform-host.d.ts.map +1 -0
  354. package/dist/testing/test-platform-host.js +101 -0
  355. package/dist/testing/test-platform-host.js.map +1 -0
  356. package/package.json +132 -4
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The shipped categories, in display order, with their labels. The default of
3
+ * `DoctorPage`'s `categories` prop; a category an app adds renders after these,
4
+ * title-cased, unless the app passes its own list.
5
+ *
6
+ * @stability stable
7
+ */
8
+ export const PLATFORM_DOCTOR_CATEGORY_LABELS = [
9
+ { key: 'core', label: 'Core' },
10
+ { key: 'auth', label: 'Authentication' },
11
+ { key: 'maintenance', label: 'Maintenance' },
12
+ { key: 'storage', label: 'Object storage' },
13
+ { key: 'email', label: 'Email' },
14
+ { key: 'push', label: 'Web Push' },
15
+ { key: 'ai', label: 'AI' },
16
+ { key: 'jobs', label: 'Job queue' },
17
+ { key: 'nodes', label: 'Worker nodes' },
18
+ { key: 'backup', label: 'Database backup' },
19
+ { key: 'telemetry', label: 'Telemetry' },
20
+ ];
21
+ /**
22
+ * The label of a category: from `labels` when listed, otherwise the key
23
+ * title-cased (`fork_widgets` becomes `Fork Widgets`).
24
+ *
25
+ * @param key - the category key.
26
+ * @param labels - the known labels. Default {@link PLATFORM_DOCTOR_CATEGORY_LABELS}.
27
+ * @returns the label.
28
+ *
29
+ * @stability stable
30
+ */
31
+ export function categoryLabel(key, labels = PLATFORM_DOCTOR_CATEGORY_LABELS) {
32
+ const known = labels.find((category) => category.key === key);
33
+ if (known)
34
+ return known.label;
35
+ return key
36
+ .split(/[-_\s]+/)
37
+ .filter(Boolean)
38
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
39
+ .join(' ');
40
+ }
41
+ //# sourceMappingURL=categories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.js","sourceRoot":"","sources":["../../../src/doctor/headless/categories.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAmC;IAC7E,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAC9B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACxC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC5C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC3C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IAClC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;IACnC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;IACvC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC3C,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;CACzC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,SAAyC,+BAA+B;IAExE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IAC9B,OAAO,GAAG;SACP,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { DoctorReport, DoctorReportQueryInput } from '@marinoscar/platform-contract/doctor';
2
+ import type { PlatformApiClient } from '../../core/index.js';
3
+ /**
4
+ * The Doctor's API calls.
5
+ *
6
+ * @stability stable
7
+ */
8
+ export interface DoctorClient {
9
+ /**
10
+ * `GET /admin/doctor`. Rejects only when the CALL fails (403, 500, the
11
+ * connection dropped); a failing check is a resolved report.
12
+ */
13
+ getReport(query?: DoctorReportQueryInput): Promise<DoctorReport>;
14
+ }
15
+ /**
16
+ * The Doctor client over the app's transport.
17
+ *
18
+ * @param api - the app's transport (`usePlatformApi()`).
19
+ * @param path - the route, relative to the API base. Default `'/admin/doctor'`;
20
+ * pass the app's own when `DoctorModule.forRoot({ path })` moved it.
21
+ * @returns the client.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const client = createDoctorClient(usePlatformApi());
26
+ * const report = await client.getReport({ refresh: true });
27
+ * ```
28
+ *
29
+ * @extensionPoint hook
30
+ * @stability stable
31
+ */
32
+ export declare function createDoctorClient(api: PlatformApiClient, path?: string): DoctorClient;
33
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/doctor/headless/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,SAAkB,GAAG,YAAY,CAU/F"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The Doctor client over the app's transport.
3
+ *
4
+ * @param api - the app's transport (`usePlatformApi()`).
5
+ * @param path - the route, relative to the API base. Default `'/admin/doctor'`;
6
+ * pass the app's own when `DoctorModule.forRoot({ path })` moved it.
7
+ * @returns the client.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const client = createDoctorClient(usePlatformApi());
12
+ * const report = await client.getReport({ refresh: true });
13
+ * ```
14
+ *
15
+ * @extensionPoint hook
16
+ * @stability stable
17
+ */
18
+ export function createDoctorClient(api, path = '/admin/doctor') {
19
+ return {
20
+ getReport(query = {}) {
21
+ const params = new URLSearchParams();
22
+ if (query.category)
23
+ params.set('category', query.category);
24
+ if (query.refresh)
25
+ params.set('refresh', 'true');
26
+ const qs = params.toString();
27
+ return api.get(qs ? `${path}?${qs}` : path);
28
+ },
29
+ };
30
+ }
31
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/doctor/headless/client.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAsB,EAAE,IAAI,GAAG,eAAe;IAC/E,OAAO;QACL,SAAS,CAAC,QAAgC,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,OAAO;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,GAAG,CAAC,GAAG,CAAe,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { DoctorReportQueryInput, DoctorStatus } from '@marinoscar/platform-contract/doctor';
2
+ /**
3
+ * Every status, lowest severity first (`pass < skip < warn < fail`).
4
+ *
5
+ * @deprecated Use `DOCTOR_STATUSES` from `@marinoscar/platform-contract/doctor`
6
+ * (same values, same order), or `DOCTOR_STATUS_RANK` to compare two statuses.
7
+ * @stability stable
8
+ */
9
+ export declare const DOCTOR_STATUS_ORDER: readonly DoctorStatus[];
10
+ /**
11
+ * What a report request may ask for: one `category`, or `refresh` to bypass the
12
+ * server-side cache.
13
+ *
14
+ * @deprecated Use `DoctorReportQueryInput` from `@marinoscar/platform-contract/doctor`.
15
+ * @stability stable
16
+ */
17
+ export type DoctorReportQuery = DoctorReportQueryInput;
18
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/doctor/headless/contract.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEjG;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAAoB,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ // The Doctor's wire types come from `@marinoscar/platform-contract/doctor`
2
+ // (#701), the same schemas the API validates with. Type-only imports plus the
3
+ // zod-free constants module, so the web bundle never carries zod for them.
4
+ // This file keeps the two names the headless entry exported before the
5
+ // contract existed.
6
+ import { DOCTOR_STATUSES } from '@marinoscar/platform-contract/doctor';
7
+ /**
8
+ * Every status, lowest severity first (`pass < skip < warn < fail`).
9
+ *
10
+ * @deprecated Use `DOCTOR_STATUSES` from `@marinoscar/platform-contract/doctor`
11
+ * (same values, same order), or `DOCTOR_STATUS_RANK` to compare two statuses.
12
+ * @stability stable
13
+ */
14
+ export const DOCTOR_STATUS_ORDER = DOCTOR_STATUSES;
15
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/doctor/headless/contract.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,oBAAoB;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4B,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { DOCTOR_STATUS_ORDER } from './contract.js';
2
+ export type { DoctorReportQuery } from './contract.js';
3
+ export type { DoctorCheckReport, DoctorReport, DoctorStatus } from '@marinoscar/platform-contract/doctor';
4
+ export { createDoctorClient } from './client.js';
5
+ export type { DoctorClient } from './client.js';
6
+ export { useDoctor } from './use-doctor.js';
7
+ export type { UseDoctorReturn } from './use-doctor.js';
8
+ export { PLATFORM_DOCTOR_CATEGORY_LABELS, categoryLabel } from './categories.js';
9
+ export type { DoctorCategoryLabel } from './categories.js';
10
+ export { SUPPORT_BUNDLE_PATH, filenameFromContentDisposition, useSupportBundleDownload, } from './use-support-bundle-download.js';
11
+ export type { UseSupportBundleDownloadOptions, UseSupportBundleDownloadReturn, } from './use-support-bundle-download.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/headless/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,+BAA+B,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjF,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,8 @@
1
+ // `@marinoscar/platform-web/doctor/headless`: the Doctor's types, client, hook
2
+ // and category labels, with no component (issue #696). Documented in ../README.md.
3
+ export { DOCTOR_STATUS_ORDER } from './contract.js';
4
+ export { createDoctorClient } from './client.js';
5
+ export { useDoctor } from './use-doctor.js';
6
+ export { PLATFORM_DOCTOR_CATEGORY_LABELS, categoryLabel } from './categories.js';
7
+ export { SUPPORT_BUNDLE_PATH, filenameFromContentDisposition, useSupportBundleDownload, } from './use-support-bundle-download.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/headless/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mFAAmF;AAEnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAKpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,+BAA+B,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { DoctorReport } from '@marinoscar/platform-contract/doctor';
2
+ import type { DoctorClient } from './client.js';
3
+ /**
4
+ * What {@link useDoctor} returns.
5
+ *
6
+ * @stability stable
7
+ */
8
+ export interface UseDoctorReturn {
9
+ /** `null` until the first run resolves. Never a signal about the deployment itself. */
10
+ report: DoctorReport | null;
11
+ /** A run is in flight. The previous report stays while a rerun runs. */
12
+ isLoading: boolean;
13
+ /** The REQUEST failed (403, network, maintenance). Never a failing check. */
14
+ error: string | null;
15
+ /** Run every check again, bypassing any cache (`refresh=true`). */
16
+ rerun: () => Promise<void>;
17
+ }
18
+ /**
19
+ * Loads the Doctor report on mount (possibly from the API's short cache);
20
+ * `rerun` sends `refresh=true` so every probe runs again.
21
+ *
22
+ * @param client - the client to use. Default: `createDoctorClient(usePlatformApi())`.
23
+ * Pass one (and keep its identity stable) to use the hook without a host.
24
+ * @returns the report, the loading flag, the request error and `rerun`.
25
+ * @throws Error when no `client` is given and no `PlatformHostProvider` is mounted.
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * const { report, isLoading, error, rerun } = useDoctor();
30
+ * ```
31
+ *
32
+ * @extensionPoint hook
33
+ * @stability stable
34
+ */
35
+ export declare function useDoctor(client?: DoctorClient): UseDoctorReturn;
36
+ //# sourceMappingURL=use-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-doctor.d.ts","sourceRoot":"","sources":["../../../src/doctor/headless/use-doctor.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAMzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,eAAe,CA0ChE"}
@@ -0,0 +1,80 @@
1
+ // Run the admin Doctor (`GET /admin/doctor`), issue #634; packaged by #696.
2
+ //
3
+ // The house fetch-hook contract:
4
+ // - a mounted guard on every `setState` past an `await`;
5
+ // - an API error becomes its message, with 403 named explicitly;
6
+ // - `rerun` RESOLVES rather than throwing: the caller is a click handler and
7
+ // the error has already been captured for rendering.
8
+ //
9
+ // ⚠ `error` MEANS THE REQUEST FAILED. A report whose verdict is `fail` is a
10
+ // successful read and lands in `report`.
11
+ import { useCallback, useEffect, useMemo, useState } from 'react';
12
+ import { isPlatformApiError, useOptionalPlatformHost } from '../../core/index.js';
13
+ import { useIsMounted } from '../internal/use-is-mounted.js';
14
+ import { createDoctorClient } from './client.js';
15
+ function messageFor(err) {
16
+ if (isPlatformApiError(err)) {
17
+ if (err.status === 403) {
18
+ return 'You do not have permission to run the Doctor';
19
+ }
20
+ return err.message || 'Failed to run the Doctor checks';
21
+ }
22
+ return 'Failed to run the Doctor checks';
23
+ }
24
+ /**
25
+ * Loads the Doctor report on mount (possibly from the API's short cache);
26
+ * `rerun` sends `refresh=true` so every probe runs again.
27
+ *
28
+ * @param client - the client to use. Default: `createDoctorClient(usePlatformApi())`.
29
+ * Pass one (and keep its identity stable) to use the hook without a host.
30
+ * @returns the report, the loading flag, the request error and `rerun`.
31
+ * @throws Error when no `client` is given and no `PlatformHostProvider` is mounted.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * const { report, isLoading, error, rerun } = useDoctor();
36
+ * ```
37
+ *
38
+ * @extensionPoint hook
39
+ * @stability stable
40
+ */
41
+ export function useDoctor(client) {
42
+ const host = useOptionalPlatformHost();
43
+ const api = host?.api;
44
+ const resolved = useMemo(() => {
45
+ if (client)
46
+ return client;
47
+ if (!api) {
48
+ throw new Error('useDoctor: no PlatformHostProvider above this component and no client was passed. ' +
49
+ 'Mount PlatformHostProvider (from @marinoscar/platform-web/core) or pass createDoctorClient(api).');
50
+ }
51
+ return createDoctorClient(api);
52
+ }, [client, api]);
53
+ const [report, setReport] = useState(null);
54
+ const [isLoading, setIsLoading] = useState(true);
55
+ const [error, setError] = useState(null);
56
+ const isMounted = useIsMounted();
57
+ const run = useCallback(async (refresh) => {
58
+ try {
59
+ setIsLoading(true);
60
+ setError(null);
61
+ const response = await resolved.getReport(refresh ? { refresh: true } : {});
62
+ if (isMounted())
63
+ setReport(response);
64
+ }
65
+ catch (err) {
66
+ if (isMounted())
67
+ setError(messageFor(err));
68
+ }
69
+ finally {
70
+ if (isMounted())
71
+ setIsLoading(false);
72
+ }
73
+ }, [resolved, isMounted]);
74
+ useEffect(() => {
75
+ void run(false);
76
+ }, [run]);
77
+ const rerun = useCallback(() => run(true), [run]);
78
+ return { report, isLoading, error, rerun };
79
+ }
80
+ //# sourceMappingURL=use-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-doctor.js","sourceRoot":"","sources":["../../../src/doctor/headless/use-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { PlatformApiClient } from '../../core/index.js';
2
+ /**
3
+ * The route, relative to the API base, unless `DoctorModule.forRoot({ path })` moved it.
4
+ *
5
+ * @stability experimental
6
+ */
7
+ export declare const SUPPORT_BUNDLE_PATH = "/admin/doctor/support-bundle";
8
+ /**
9
+ * What {@link useSupportBundleDownload} takes.
10
+ *
11
+ * @stability experimental
12
+ */
13
+ export interface UseSupportBundleDownloadOptions {
14
+ /** The transport. Default: the host's (`usePlatformApi()`). */
15
+ api?: PlatformApiClient;
16
+ /** The route. Default {@link SUPPORT_BUNDLE_PATH}. */
17
+ path?: string;
18
+ /**
19
+ * Hands the file to the browser. Default: an object URL clicked through a
20
+ * hidden anchor. Replace it to save elsewhere, or in a test.
21
+ */
22
+ save?: (blob: Blob, filename: string) => void;
23
+ }
24
+ /**
25
+ * What {@link useSupportBundleDownload} returns.
26
+ *
27
+ * @stability experimental
28
+ */
29
+ export interface UseSupportBundleDownloadReturn {
30
+ /** Fetch the bundle and save it. Resolves even when it fails (see `error`). */
31
+ download: () => Promise<void>;
32
+ /** A download is in flight. */
33
+ isDownloading: boolean;
34
+ /** Why the last download failed, or `null`. */
35
+ error: string | null;
36
+ /** The name of the last file saved, or `null`. */
37
+ filename: string | null;
38
+ }
39
+ /**
40
+ * The filename from a `Content-Disposition` header (`filename*=UTF-8''…`,
41
+ * `filename="…"` or `filename=…`), or `null`. Path separators are replaced.
42
+ *
43
+ * @param header - the header value, or `null`.
44
+ * @returns the filename, or `null`.
45
+ *
46
+ * @stability experimental
47
+ */
48
+ export declare function filenameFromContentDisposition(header: string | null): string | null;
49
+ /**
50
+ * Downloads the support bundle (the doctor report, versions and a 24-hour
51
+ * telemetry summary, redacted by the API) and saves it under the server's
52
+ * filename (`support-bundle-<slug>-<timestamp>.json`).
53
+ *
54
+ * @param options - the transport, route and save function; every one optional.
55
+ * @returns `download`, the in-flight flag, the last error and the last filename.
56
+ * @throws Error when no `api` is given and no `PlatformHostProvider` is mounted.
57
+ *
58
+ * @example
59
+ * ```tsx
60
+ * const { download, isDownloading, error } = useSupportBundleDownload();
61
+ * <Button onClick={() => void download()} disabled={isDownloading}>Download support bundle</Button>
62
+ * ```
63
+ *
64
+ * @extensionPoint hook
65
+ * @stability experimental
66
+ */
67
+ export declare function useSupportBundleDownload(options?: UseSupportBundleDownloadOptions): UseSupportBundleDownloadReturn;
68
+ //# sourceMappingURL=use-support-bundle-download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-support-bundle-download.d.ts","sourceRoot":"","sources":["../../../src/doctor/headless/use-support-bundle-download.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC9C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,+BAA+B;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAiBnF;AA8BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,+BAAoC,GAAG,8BAA8B,CAoCtH"}
@@ -0,0 +1,135 @@
1
+ // Download the support bundle (`GET /admin/doctor/support-bundle`), issue #772.
2
+ //
3
+ // The house fetch-hook contract (see use-doctor.ts): a mounted guard on every
4
+ // `setState` past an `await`, an API error becomes its message (403 named
5
+ // explicitly), and `download` RESOLVES rather than throwing: the caller is a
6
+ // click handler and the error has already been captured for rendering.
7
+ //
8
+ // The file is fetched through the app's transport (`PlatformApiClient.getBlob`,
9
+ // so the bearer token, the refresh and the maintenance handling stay the
10
+ // app's) and handed to the browser under the name the server chose in
11
+ // `Content-Disposition`.
12
+ import { useCallback, useState } from 'react';
13
+ import { isPlatformApiError, useOptionalPlatformHost } from '../../core/index.js';
14
+ import { useIsMounted } from '../internal/use-is-mounted.js';
15
+ /**
16
+ * The route, relative to the API base, unless `DoctorModule.forRoot({ path })` moved it.
17
+ *
18
+ * @stability experimental
19
+ */
20
+ export const SUPPORT_BUNDLE_PATH = '/admin/doctor/support-bundle';
21
+ /**
22
+ * The filename from a `Content-Disposition` header (`filename*=UTF-8''…`,
23
+ * `filename="…"` or `filename=…`), or `null`. Path separators are replaced.
24
+ *
25
+ * @param header - the header value, or `null`.
26
+ * @returns the filename, or `null`.
27
+ *
28
+ * @stability experimental
29
+ */
30
+ export function filenameFromContentDisposition(header) {
31
+ if (!header)
32
+ return null;
33
+ let name = null;
34
+ const extended = /filename\*\s*=\s*(?:UTF-8|utf-8)''([^;]+)/.exec(header);
35
+ if (extended?.[1]) {
36
+ try {
37
+ name = decodeURIComponent(extended[1].trim().replace(/^"|"$/g, ''));
38
+ }
39
+ catch {
40
+ name = null;
41
+ }
42
+ }
43
+ if (!name) {
44
+ const plain = /filename\s*=\s*("([^"]*)"|[^;]+)/i.exec(header);
45
+ name = plain ? (plain[2] ?? plain[1] ?? '').trim() : null;
46
+ }
47
+ const safe = name?.replace(/[/\\]/g, '_').trim();
48
+ return safe ? safe : null;
49
+ }
50
+ /** The default `save`: an object URL clicked through a hidden anchor, revoked afterwards. */
51
+ function saveWithAnchor(blob, filename) {
52
+ if (typeof document === 'undefined' || typeof URL.createObjectURL !== 'function')
53
+ return;
54
+ const url = URL.createObjectURL(blob);
55
+ try {
56
+ const anchor = document.createElement('a');
57
+ anchor.href = url;
58
+ anchor.download = filename;
59
+ anchor.rel = 'noopener';
60
+ anchor.style.display = 'none';
61
+ document.body.appendChild(anchor);
62
+ anchor.click();
63
+ anchor.remove();
64
+ }
65
+ finally {
66
+ // Deferred: revoking synchronously can cancel the download in some browsers.
67
+ setTimeout(() => URL.revokeObjectURL(url), 0);
68
+ }
69
+ }
70
+ function messageFor(err) {
71
+ if (isPlatformApiError(err)) {
72
+ if (err.status === 403)
73
+ return 'You do not have permission to download the support bundle';
74
+ return err.message || 'Failed to download the support bundle';
75
+ }
76
+ if (err instanceof Error && err.message)
77
+ return err.message;
78
+ return 'Failed to download the support bundle';
79
+ }
80
+ /**
81
+ * Downloads the support bundle (the doctor report, versions and a 24-hour
82
+ * telemetry summary, redacted by the API) and saves it under the server's
83
+ * filename (`support-bundle-<slug>-<timestamp>.json`).
84
+ *
85
+ * @param options - the transport, route and save function; every one optional.
86
+ * @returns `download`, the in-flight flag, the last error and the last filename.
87
+ * @throws Error when no `api` is given and no `PlatformHostProvider` is mounted.
88
+ *
89
+ * @example
90
+ * ```tsx
91
+ * const { download, isDownloading, error } = useSupportBundleDownload();
92
+ * <Button onClick={() => void download()} disabled={isDownloading}>Download support bundle</Button>
93
+ * ```
94
+ *
95
+ * @extensionPoint hook
96
+ * @stability experimental
97
+ */
98
+ export function useSupportBundleDownload(options = {}) {
99
+ const host = useOptionalPlatformHost();
100
+ const api = options.api ?? host?.api;
101
+ if (!api) {
102
+ throw new Error('useSupportBundleDownload: no PlatformHostProvider above this component and no api was passed. ' +
103
+ 'Mount PlatformHostProvider (from @marinoscar/platform-web/core) or pass { api }.');
104
+ }
105
+ const path = options.path ?? SUPPORT_BUNDLE_PATH;
106
+ const save = options.save ?? saveWithAnchor;
107
+ const [isDownloading, setIsDownloading] = useState(false);
108
+ const [error, setError] = useState(null);
109
+ const [filename, setFilename] = useState(null);
110
+ const isMounted = useIsMounted();
111
+ const download = useCallback(async () => {
112
+ try {
113
+ setIsDownloading(true);
114
+ setError(null);
115
+ if (typeof api.getBlob !== 'function') {
116
+ throw new Error("This app's transport cannot download files (PlatformApiClient.getBlob is missing)");
117
+ }
118
+ const { blob, headers } = await api.getBlob(path);
119
+ const name = filenameFromContentDisposition(headers.get('Content-Disposition')) ?? 'support-bundle.json';
120
+ save(blob, name);
121
+ if (isMounted())
122
+ setFilename(name);
123
+ }
124
+ catch (err) {
125
+ if (isMounted())
126
+ setError(messageFor(err));
127
+ }
128
+ finally {
129
+ if (isMounted())
130
+ setIsDownloading(false);
131
+ }
132
+ }, [api, path, save, isMounted]);
133
+ return { download, isDownloading, error, filename };
134
+ }
135
+ //# sourceMappingURL=use-support-bundle-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-support-bundle-download.js","sourceRoot":"","sources":["../../../src/doctor/headless/use-support-bundle-download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function formatRelativeTime(iso: string, now?: Date): string;
2
+ //# sourceMappingURL=relative-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../../src/doctor/internal/relative-time.ts"],"names":[],"mappings":"AAiBA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAY9E"}
@@ -0,0 +1,29 @@
1
+ // The fallback "3 minutes ago" formatter, used when the host supplies no
2
+ // `formatRelativeTime`. Same rules as the reference app's
3
+ // `utils/relativeTime.ts`: Intl.RelativeTimeFormat, "Just now" under 45 s (a
4
+ // clock-skew guard), the ISO string on an unparseable input. Not exported.
5
+ const UNITS = [
6
+ { limit: 60_000, ms: 1_000, unit: 'second' },
7
+ { limit: 3_600_000, ms: 60_000, unit: 'minute' },
8
+ { limit: 86_400_000, ms: 3_600_000, unit: 'hour' },
9
+ { limit: 604_800_000, ms: 86_400_000, unit: 'day' },
10
+ { limit: 2_629_800_000, ms: 604_800_000, unit: 'week' },
11
+ { limit: 31_557_600_000, ms: 2_629_800_000, unit: 'month' },
12
+ { limit: Infinity, ms: 31_557_600_000, unit: 'year' },
13
+ ];
14
+ const JUST_NOW_MS = 45_000;
15
+ export function formatRelativeTime(iso, now = new Date()) {
16
+ const time = new Date(iso).getTime();
17
+ if (Number.isNaN(time))
18
+ return iso;
19
+ const elapsed = now.getTime() - time;
20
+ if (elapsed < JUST_NOW_MS)
21
+ return 'Just now';
22
+ const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });
23
+ for (const { limit, ms, unit } of UNITS) {
24
+ if (elapsed < limit)
25
+ return formatter.format(-Math.floor(elapsed / ms), unit);
26
+ }
27
+ return iso;
28
+ }
29
+ //# sourceMappingURL=relative-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-time.js","sourceRoot":"","sources":["../../../src/doctor/internal/relative-time.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,0DAA0D;AAC1D,6EAA6E;AAC7E,2EAA2E;AAE3E,MAAM,KAAK,GAAuE;IAChF,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC5C,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChD,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IAClD,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;IACnD,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;IACvD,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3D,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;CACtD,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,MAAY,IAAI,IAAI,EAAE;IACpE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAEnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IACrC,IAAI,OAAO,GAAG,WAAW;QAAE,OAAO,UAAU,CAAC;IAE7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,KAAK,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Theme } from '@mui/material/styles';
2
+ import type { DoctorStatus } from '@marinoscar/platform-contract/doctor';
3
+ /** The colour of `status` in `theme`: its `palette.status` token, else the token's default. */
4
+ export declare function statusColor(theme: Theme, status: DoctorStatus): string;
5
+ //# sourceMappingURL=status-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-colors.d.ts","sourceRoot":"","sources":["../../../src/doctor/internal/status-colors.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAWzE,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAetE"}
@@ -0,0 +1,29 @@
1
+ // The Doctor's status colours come from the theme-token contract
2
+ // `palette.status.{ok,warn,crit,neutral}` (issue #686, PP-1.15): packages own
3
+ // structure, apps own appearance. An app restyles the Doctor by setting those
4
+ // tokens in its theme; a theme that sets none falls back to the MUI palette
5
+ // roles the tokens default to, so it looks as it always did. Not exported.
6
+ const TOKEN_OF = {
7
+ pass: 'ok',
8
+ warn: 'warn',
9
+ fail: 'crit',
10
+ skip: 'neutral',
11
+ };
12
+ /** The colour of `status` in `theme`: its `palette.status` token, else the token's default. */
13
+ export function statusColor(theme, status) {
14
+ const token = TOKEN_OF[status];
15
+ const own = theme.palette.status?.[token];
16
+ if (typeof own === 'string' && own !== '')
17
+ return own;
18
+ switch (token) {
19
+ case 'ok':
20
+ return theme.palette.success.main;
21
+ case 'warn':
22
+ return theme.palette.warning.main;
23
+ case 'crit':
24
+ return theme.palette.error.main;
25
+ default:
26
+ return theme.palette.grey[500];
27
+ }
28
+ }
29
+ //# sourceMappingURL=status-colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-colors.js","sourceRoot":"","sources":["../../../src/doctor/internal/status-colors.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAO3E,MAAM,QAAQ,GAAsC;IAClD,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,+FAA+F;AAC/F,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,MAAoB;IAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAI,KAAK,CAAC,OAAyE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7G,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAEtD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC;YACE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useIsMounted(): () => boolean;
2
+ //# sourceMappingURL=use-is-mounted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-is-mounted.d.ts","sourceRoot":"","sources":["../../../src/doctor/internal/use-is-mounted.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,IAAI,MAAM,OAAO,CAW5C"}