@sqlrooms/mosaic 0.29.0-rc.1 → 0.29.0-rc.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 (398) hide show
  1. package/README.md +161 -2
  2. package/dist/MosaicChart.d.ts +20 -0
  3. package/dist/MosaicChart.d.ts.map +1 -0
  4. package/dist/MosaicChart.js +25 -0
  5. package/dist/MosaicChart.js.map +1 -0
  6. package/dist/MosaicChartBuilder.d.ts +67 -0
  7. package/dist/MosaicChartBuilder.d.ts.map +1 -0
  8. package/dist/MosaicChartBuilder.js +33 -0
  9. package/dist/MosaicChartBuilder.js.map +1 -0
  10. package/dist/MosaicColorLegend.d.ts +18 -0
  11. package/dist/MosaicColorLegend.d.ts.map +1 -0
  12. package/dist/MosaicColorLegend.js +117 -0
  13. package/dist/MosaicColorLegend.js.map +1 -0
  14. package/dist/MosaicSlice.d.ts +27 -13
  15. package/dist/MosaicSlice.d.ts.map +1 -1
  16. package/dist/MosaicSlice.js +140 -42
  17. package/dist/MosaicSlice.js.map +1 -1
  18. package/dist/ResponsivePlot.d.ts +23 -0
  19. package/dist/ResponsivePlot.d.ts.map +1 -0
  20. package/dist/ResponsivePlot.js +43 -0
  21. package/dist/ResponsivePlot.js.map +1 -0
  22. package/dist/VgPlotChart.d.ts +24 -0
  23. package/dist/VgPlotChart.d.ts.map +1 -1
  24. package/dist/VgPlotChart.js +127 -21
  25. package/dist/VgPlotChart.js.map +1 -1
  26. package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
  27. package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
  28. package/dist/chart-builders/ChartBuilderActions.js +28 -0
  29. package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
  30. package/dist/chart-builders/ChartBuilderContent.d.ts +28 -0
  31. package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -0
  32. package/dist/chart-builders/ChartBuilderContent.js +28 -0
  33. package/dist/chart-builders/ChartBuilderContent.js.map +1 -0
  34. package/dist/chart-builders/ChartBuilderContext.d.ts +16 -0
  35. package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -0
  36. package/dist/chart-builders/ChartBuilderContext.js +15 -0
  37. package/dist/chart-builders/ChartBuilderContext.js.map +1 -0
  38. package/dist/chart-builders/ChartBuilderDialog.d.ts +48 -0
  39. package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -0
  40. package/dist/chart-builders/ChartBuilderDialog.js +30 -0
  41. package/dist/chart-builders/ChartBuilderDialog.js.map +1 -0
  42. package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
  43. package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
  44. package/dist/chart-builders/ChartBuilderFields.js +25 -0
  45. package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
  46. package/dist/chart-builders/ChartBuilderRoot.d.ts +27 -0
  47. package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
  48. package/dist/chart-builders/ChartBuilderRoot.js +61 -0
  49. package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
  50. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
  51. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
  52. package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
  53. package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
  54. package/dist/chart-builders/FieldSelectorInput.d.ts +13 -0
  55. package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -0
  56. package/dist/chart-builders/FieldSelectorInput.js +19 -0
  57. package/dist/chart-builders/FieldSelectorInput.js.map +1 -0
  58. package/dist/chart-builders/builders.d.ts +34 -0
  59. package/dist/chart-builders/builders.d.ts.map +1 -0
  60. package/dist/chart-builders/builders.js +51 -0
  61. package/dist/chart-builders/builders.js.map +1 -0
  62. package/dist/chart-builders/chartSpecTitle.d.ts +6 -0
  63. package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -0
  64. package/dist/chart-builders/chartSpecTitle.js +8 -0
  65. package/dist/chart-builders/chartSpecTitle.js.map +1 -0
  66. package/dist/chart-builders/chartTypeUtils.d.ts +17 -0
  67. package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
  68. package/dist/chart-builders/chartTypeUtils.js +55 -0
  69. package/dist/chart-builders/chartTypeUtils.js.map +1 -0
  70. package/dist/chart-builders/constants.d.ts +7 -0
  71. package/dist/chart-builders/constants.d.ts.map +1 -0
  72. package/dist/chart-builders/constants.js +34 -0
  73. package/dist/chart-builders/constants.js.map +1 -0
  74. package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
  75. package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
  76. package/dist/chart-builders/createChartBuilderStore.js +26 -0
  77. package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
  78. package/dist/chart-builders/describeChartSpecs.d.ts +9 -0
  79. package/dist/chart-builders/describeChartSpecs.d.ts.map +1 -0
  80. package/dist/chart-builders/describeChartSpecs.js +41 -0
  81. package/dist/chart-builders/describeChartSpecs.js.map +1 -0
  82. package/dist/chart-builders/hooks/useChartFieldForm.d.ts +13 -0
  83. package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +1 -0
  84. package/dist/chart-builders/hooks/useChartFieldForm.js +12 -0
  85. package/dist/chart-builders/hooks/useChartFieldForm.js.map +1 -0
  86. package/dist/chart-builders/types.d.ts +23 -0
  87. package/dist/chart-builders/types.d.ts.map +1 -0
  88. package/dist/chart-builders/types.js +17 -0
  89. package/dist/chart-builders/types.js.map +1 -0
  90. package/dist/chart-types/base-types.d.ts +54 -0
  91. package/dist/chart-types/base-types.d.ts.map +1 -0
  92. package/dist/chart-types/base-types.js +6 -0
  93. package/dist/chart-types/base-types.js.map +1 -0
  94. package/dist/chart-types/box-plot/definition.d.ts +4 -0
  95. package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
  96. package/dist/chart-types/box-plot/definition.js +45 -0
  97. package/dist/chart-types/box-plot/definition.js.map +1 -0
  98. package/dist/chart-types/box-plot/index.d.ts +3 -0
  99. package/dist/chart-types/box-plot/index.d.ts.map +1 -0
  100. package/dist/chart-types/box-plot/index.js +3 -0
  101. package/dist/chart-types/box-plot/index.js.map +1 -0
  102. package/dist/chart-types/box-plot/schema.d.ts +17 -0
  103. package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
  104. package/dist/chart-types/box-plot/schema.js +12 -0
  105. package/dist/chart-types/box-plot/schema.js.map +1 -0
  106. package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
  107. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
  108. package/dist/chart-types/bubble-chart/definition.js +48 -0
  109. package/dist/chart-types/bubble-chart/definition.js.map +1 -0
  110. package/dist/chart-types/bubble-chart/index.d.ts +3 -0
  111. package/dist/chart-types/bubble-chart/index.d.ts.map +1 -0
  112. package/dist/chart-types/bubble-chart/index.js +3 -0
  113. package/dist/chart-types/bubble-chart/index.js.map +1 -0
  114. package/dist/chart-types/bubble-chart/schema.d.ts +17 -0
  115. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
  116. package/dist/chart-types/bubble-chart/schema.js +12 -0
  117. package/dist/chart-types/bubble-chart/schema.js.map +1 -0
  118. package/dist/chart-types/count-plot/definition.d.ts +4 -0
  119. package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
  120. package/dist/chart-types/count-plot/definition.js +50 -0
  121. package/dist/chart-types/count-plot/definition.js.map +1 -0
  122. package/dist/chart-types/count-plot/index.d.ts +3 -0
  123. package/dist/chart-types/count-plot/index.d.ts.map +1 -0
  124. package/dist/chart-types/count-plot/index.js +3 -0
  125. package/dist/chart-types/count-plot/index.js.map +1 -0
  126. package/dist/chart-types/count-plot/schema.d.ts +15 -0
  127. package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
  128. package/dist/chart-types/count-plot/schema.js +11 -0
  129. package/dist/chart-types/count-plot/schema.js.map +1 -0
  130. package/dist/chart-types/custom-spec/definition.d.ts +4 -0
  131. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
  132. package/dist/chart-types/custom-spec/definition.js +28 -0
  133. package/dist/chart-types/custom-spec/definition.js.map +1 -0
  134. package/dist/chart-types/custom-spec/index.d.ts +3 -0
  135. package/dist/chart-types/custom-spec/index.d.ts.map +1 -0
  136. package/dist/chart-types/custom-spec/index.js +3 -0
  137. package/dist/chart-types/custom-spec/index.js.map +1 -0
  138. package/dist/chart-types/custom-spec/schema.d.ts +11 -0
  139. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
  140. package/dist/chart-types/custom-spec/schema.js +9 -0
  141. package/dist/chart-types/custom-spec/schema.js.map +1 -0
  142. package/dist/chart-types/ecdf/definition.d.ts +4 -0
  143. package/dist/chart-types/ecdf/definition.d.ts.map +1 -0
  144. package/dist/chart-types/ecdf/definition.js +47 -0
  145. package/dist/chart-types/ecdf/definition.js.map +1 -0
  146. package/dist/chart-types/ecdf/index.d.ts +3 -0
  147. package/dist/chart-types/ecdf/index.d.ts.map +1 -0
  148. package/dist/chart-types/ecdf/index.js +3 -0
  149. package/dist/chart-types/ecdf/index.js.map +1 -0
  150. package/dist/chart-types/ecdf/schema.d.ts +15 -0
  151. package/dist/chart-types/ecdf/schema.d.ts.map +1 -0
  152. package/dist/chart-types/ecdf/schema.js +11 -0
  153. package/dist/chart-types/ecdf/schema.js.map +1 -0
  154. package/dist/chart-types/heatmap/definition.d.ts +4 -0
  155. package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
  156. package/dist/chart-types/heatmap/definition.js +49 -0
  157. package/dist/chart-types/heatmap/definition.js.map +1 -0
  158. package/dist/chart-types/heatmap/index.d.ts +3 -0
  159. package/dist/chart-types/heatmap/index.d.ts.map +1 -0
  160. package/dist/chart-types/heatmap/index.js +3 -0
  161. package/dist/chart-types/heatmap/index.js.map +1 -0
  162. package/dist/chart-types/heatmap/schema.d.ts +17 -0
  163. package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
  164. package/dist/chart-types/heatmap/schema.js +12 -0
  165. package/dist/chart-types/heatmap/schema.js.map +1 -0
  166. package/dist/chart-types/histogram/definition.d.ts +4 -0
  167. package/dist/chart-types/histogram/definition.d.ts.map +1 -0
  168. package/dist/chart-types/histogram/definition.js +49 -0
  169. package/dist/chart-types/histogram/definition.js.map +1 -0
  170. package/dist/chart-types/histogram/index.d.ts +3 -0
  171. package/dist/chart-types/histogram/index.d.ts.map +1 -0
  172. package/dist/chart-types/histogram/index.js +3 -0
  173. package/dist/chart-types/histogram/index.js.map +1 -0
  174. package/dist/chart-types/histogram/schema.d.ts +15 -0
  175. package/dist/chart-types/histogram/schema.d.ts.map +1 -0
  176. package/dist/chart-types/histogram/schema.js +11 -0
  177. package/dist/chart-types/histogram/schema.js.map +1 -0
  178. package/dist/chart-types/index.d.ts +109 -0
  179. package/dist/chart-types/index.d.ts.map +1 -0
  180. package/dist/chart-types/index.js +70 -0
  181. package/dist/chart-types/index.js.map +1 -0
  182. package/dist/chart-types/line-chart/definition.d.ts +4 -0
  183. package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
  184. package/dist/chart-types/line-chart/definition.js +46 -0
  185. package/dist/chart-types/line-chart/definition.js.map +1 -0
  186. package/dist/chart-types/line-chart/index.d.ts +3 -0
  187. package/dist/chart-types/line-chart/index.d.ts.map +1 -0
  188. package/dist/chart-types/line-chart/index.js +3 -0
  189. package/dist/chart-types/line-chart/index.js.map +1 -0
  190. package/dist/chart-types/line-chart/schema.d.ts +17 -0
  191. package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
  192. package/dist/chart-types/line-chart/schema.js +12 -0
  193. package/dist/chart-types/line-chart/schema.js.map +1 -0
  194. package/dist/chart-types/registry.d.ts +5 -0
  195. package/dist/chart-types/registry.d.ts.map +1 -0
  196. package/dist/chart-types/registry.js +28 -0
  197. package/dist/chart-types/registry.js.map +1 -0
  198. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
  199. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
  200. package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
  201. package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
  202. package/dist/dashboard/MosaicDashboard.d.ts +18 -0
  203. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -0
  204. package/dist/dashboard/MosaicDashboard.js +91 -0
  205. package/dist/dashboard/MosaicDashboard.js.map +1 -0
  206. package/dist/dashboard/MosaicDashboardContext.d.ts +12 -0
  207. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -0
  208. package/dist/dashboard/MosaicDashboardContext.js +10 -0
  209. package/dist/dashboard/MosaicDashboardContext.js.map +1 -0
  210. package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
  211. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
  212. package/dist/dashboard/MosaicDashboardPanel.js +26 -0
  213. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
  214. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
  215. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
  216. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
  217. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
  218. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
  219. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
  220. package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
  221. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
  222. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
  223. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
  224. package/dist/dashboard/MosaicDashboardPanelLayout.js +25 -0
  225. package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
  226. package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
  227. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
  228. package/dist/dashboard/MosaicDashboardPanels.js +52 -0
  229. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
  230. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
  231. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
  232. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js +32 -0
  233. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
  234. package/dist/dashboard/MosaicDashboardSlice.d.ts +523 -0
  235. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -0
  236. package/dist/dashboard/MosaicDashboardSlice.js +615 -0
  237. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -0
  238. package/dist/dashboard/MosaicDashboardToolbar.d.ts +3 -0
  239. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -0
  240. package/dist/dashboard/MosaicDashboardToolbar.js +81 -0
  241. package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -0
  242. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +4 -0
  243. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +1 -0
  244. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +29 -0
  245. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +1 -0
  246. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +3 -0
  247. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +1 -0
  248. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +68 -0
  249. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +1 -0
  250. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +8 -0
  251. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +1 -0
  252. package/dist/dashboard/VgPlotSpecPopoverEditor.js +40 -0
  253. package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +1 -0
  254. package/dist/dashboard/chart-settings/ChartSettings.d.ts +39 -0
  255. package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +1 -0
  256. package/dist/dashboard/chart-settings/ChartSettings.js +90 -0
  257. package/dist/dashboard/chart-settings/ChartSettings.js.map +1 -0
  258. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +20 -0
  259. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +1 -0
  260. package/dist/dashboard/chart-settings/ChartSettingsContext.js +14 -0
  261. package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +1 -0
  262. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +11 -0
  263. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
  264. package/dist/dashboard/chart-settings/ChartSettingsPanel.js +8 -0
  265. package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +1 -0
  266. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +11 -0
  267. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +1 -0
  268. package/dist/dashboard/chart-settings/ChartTypeSelector.js +17 -0
  269. package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +1 -0
  270. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +11 -0
  271. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +1 -0
  272. package/dist/dashboard/chart-settings/DynamicChartSettings.js +19 -0
  273. package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +1 -0
  274. package/dist/dashboard/chart-settings/index.d.ts +6 -0
  275. package/dist/dashboard/chart-settings/index.d.ts.map +1 -0
  276. package/dist/dashboard/chart-settings/index.js +6 -0
  277. package/dist/dashboard/chart-settings/index.js.map +1 -0
  278. package/dist/dashboard/chart-settings/useTableColumns.d.ts +3 -0
  279. package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +1 -0
  280. package/dist/dashboard/chart-settings/useTableColumns.js +12 -0
  281. package/dist/dashboard/chart-settings/useTableColumns.js.map +1 -0
  282. package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
  283. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
  284. package/dist/dashboard/defaultPanelRenderers.js +11 -0
  285. package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
  286. package/dist/dashboard/generateMosaicChartSpec.d.ts +15 -0
  287. package/dist/dashboard/generateMosaicChartSpec.d.ts.map +1 -0
  288. package/dist/dashboard/generateMosaicChartSpec.js +30 -0
  289. package/dist/dashboard/generateMosaicChartSpec.js.map +1 -0
  290. package/dist/editor/MosaicChartContainer.d.ts +51 -0
  291. package/dist/editor/MosaicChartContainer.d.ts.map +1 -0
  292. package/dist/editor/MosaicChartContainer.js +39 -0
  293. package/dist/editor/MosaicChartContainer.js.map +1 -0
  294. package/dist/editor/MosaicChartDisplay.d.ts +18 -0
  295. package/dist/editor/MosaicChartDisplay.d.ts.map +1 -0
  296. package/dist/editor/MosaicChartDisplay.js +26 -0
  297. package/dist/editor/MosaicChartDisplay.js.map +1 -0
  298. package/dist/editor/MosaicChartEditorActions.d.ts +20 -0
  299. package/dist/editor/MosaicChartEditorActions.d.ts.map +1 -0
  300. package/dist/editor/MosaicChartEditorActions.js +18 -0
  301. package/dist/editor/MosaicChartEditorActions.js.map +1 -0
  302. package/dist/editor/MosaicCodeMirrorEditor.d.ts +15 -0
  303. package/dist/editor/MosaicCodeMirrorEditor.d.ts.map +1 -0
  304. package/dist/editor/MosaicCodeMirrorEditor.js +26 -0
  305. package/dist/editor/MosaicCodeMirrorEditor.js.map +1 -0
  306. package/dist/editor/MosaicEditorContext.d.ts +8 -0
  307. package/dist/editor/MosaicEditorContext.d.ts.map +1 -0
  308. package/dist/editor/MosaicEditorContext.js +14 -0
  309. package/dist/editor/MosaicEditorContext.js.map +1 -0
  310. package/dist/editor/MosaicSpecEditorPanel.d.ts +20 -0
  311. package/dist/editor/MosaicSpecEditorPanel.d.ts.map +1 -0
  312. package/dist/editor/MosaicSpecEditorPanel.js +25 -0
  313. package/dist/editor/MosaicSpecEditorPanel.js.map +1 -0
  314. package/dist/editor/mosaicSchema.d.ts +20 -0
  315. package/dist/editor/mosaicSchema.d.ts.map +1 -0
  316. package/dist/editor/mosaicSchema.js +57 -0
  317. package/dist/editor/mosaicSchema.js.map +1 -0
  318. package/dist/editor/types.d.ts +72 -0
  319. package/dist/editor/types.d.ts.map +1 -0
  320. package/dist/editor/types.js +2 -0
  321. package/dist/editor/types.js.map +1 -0
  322. package/dist/editor/useMosaicChartEditor.d.ts +9 -0
  323. package/dist/editor/useMosaicChartEditor.d.ts.map +1 -0
  324. package/dist/editor/useMosaicChartEditor.js +199 -0
  325. package/dist/editor/useMosaicChartEditor.js.map +1 -0
  326. package/dist/index.d.ts +53 -2
  327. package/dist/index.d.ts.map +1 -1
  328. package/dist/index.js +37 -1
  329. package/dist/index.js.map +1 -1
  330. package/dist/profiler/MosaicProfiler.d.ts +32 -0
  331. package/dist/profiler/MosaicProfiler.d.ts.map +1 -0
  332. package/dist/profiler/MosaicProfiler.js +57 -0
  333. package/dist/profiler/MosaicProfiler.js.map +1 -0
  334. package/dist/profiler/MosaicProfilerHeader.d.ts +7 -0
  335. package/dist/profiler/MosaicProfilerHeader.d.ts.map +1 -0
  336. package/dist/profiler/MosaicProfilerHeader.js +196 -0
  337. package/dist/profiler/MosaicProfilerHeader.js.map +1 -0
  338. package/dist/profiler/MosaicProfilerRows.d.ts +9 -0
  339. package/dist/profiler/MosaicProfilerRows.d.ts.map +1 -0
  340. package/dist/profiler/MosaicProfilerRows.js +65 -0
  341. package/dist/profiler/MosaicProfilerRows.js.map +1 -0
  342. package/dist/profiler/MosaicProfilerStatusBar.d.ts +9 -0
  343. package/dist/profiler/MosaicProfilerStatusBar.d.ts.map +1 -0
  344. package/dist/profiler/MosaicProfilerStatusBar.js +28 -0
  345. package/dist/profiler/MosaicProfilerStatusBar.js.map +1 -0
  346. package/dist/profiler/ProfilerCategoryClient.d.ts +50 -0
  347. package/dist/profiler/ProfilerCategoryClient.d.ts.map +1 -0
  348. package/dist/profiler/ProfilerCategoryClient.js +121 -0
  349. package/dist/profiler/ProfilerCategoryClient.js.map +1 -0
  350. package/dist/profiler/ProfilerCountClient.d.ts +28 -0
  351. package/dist/profiler/ProfilerCountClient.d.ts.map +1 -0
  352. package/dist/profiler/ProfilerCountClient.js +51 -0
  353. package/dist/profiler/ProfilerCountClient.js.map +1 -0
  354. package/dist/profiler/ProfilerHistogramClient.d.ts +69 -0
  355. package/dist/profiler/ProfilerHistogramClient.d.ts.map +1 -0
  356. package/dist/profiler/ProfilerHistogramClient.js +179 -0
  357. package/dist/profiler/ProfilerHistogramClient.js.map +1 -0
  358. package/dist/profiler/ProfilerPageClient.d.ts +37 -0
  359. package/dist/profiler/ProfilerPageClient.d.ts.map +1 -0
  360. package/dist/profiler/ProfilerPageClient.js +65 -0
  361. package/dist/profiler/ProfilerPageClient.js.map +1 -0
  362. package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts +24 -0
  363. package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts.map +1 -0
  364. package/dist/profiler/ProfilerUnsupportedSummaryClient.js +51 -0
  365. package/dist/profiler/ProfilerUnsupportedSummaryClient.js.map +1 -0
  366. package/dist/profiler/createProfilerStore.d.ts +45 -0
  367. package/dist/profiler/createProfilerStore.d.ts.map +1 -0
  368. package/dist/profiler/createProfilerStore.js +120 -0
  369. package/dist/profiler/createProfilerStore.js.map +1 -0
  370. package/dist/profiler/layout.d.ts +7 -0
  371. package/dist/profiler/layout.d.ts.map +1 -0
  372. package/dist/profiler/layout.js +13 -0
  373. package/dist/profiler/layout.js.map +1 -0
  374. package/dist/profiler/profilerController.d.ts +64 -0
  375. package/dist/profiler/profilerController.d.ts.map +1 -0
  376. package/dist/profiler/profilerController.js +123 -0
  377. package/dist/profiler/profilerController.js.map +1 -0
  378. package/dist/profiler/types.d.ts +86 -0
  379. package/dist/profiler/types.d.ts.map +1 -0
  380. package/dist/profiler/types.js +2 -0
  381. package/dist/profiler/types.js.map +1 -0
  382. package/dist/profiler/useMosaicProfiler.d.ts +7 -0
  383. package/dist/profiler/useMosaicProfiler.d.ts.map +1 -0
  384. package/dist/profiler/useMosaicProfiler.js +339 -0
  385. package/dist/profiler/useMosaicProfiler.js.map +1 -0
  386. package/dist/profiler/utils.d.ts +61 -0
  387. package/dist/profiler/utils.d.ts.map +1 -0
  388. package/dist/profiler/utils.js +347 -0
  389. package/dist/profiler/utils.js.map +1 -0
  390. package/dist/tableInterop.d.ts +30 -0
  391. package/dist/tableInterop.d.ts.map +1 -0
  392. package/dist/tableInterop.js +85 -0
  393. package/dist/tableInterop.js.map +1 -0
  394. package/dist/useMosaicClient.d.ts +5 -15
  395. package/dist/useMosaicClient.d.ts.map +1 -1
  396. package/dist/useMosaicClient.js +22 -6
  397. package/dist/useMosaicClient.js.map +1 -1
  398. package/package.json +30 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMosaicProfiler.js","sourceRoot":"","sources":["../../src/profiler/useMosaicProfiler.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {useDebounce} from '@sqlrooms/ui';\nimport {\n Selection as MosaicSelection,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport {\n useEffect,\n useMemo,\n useState,\n type Dispatch,\n type SetStateAction,\n} from 'react';\nimport {useStore} from 'zustand';\nimport {useStoreWithMosaic, type MosaicSliceState} from '../MosaicSlice';\nimport {\n createProfilerStore,\n type ProfilerStore,\n type ProfilerStoreState,\n} from './createProfilerStore';\nimport {\n connectProfilerCountClient,\n connectProfilerPageClient,\n connectProfilerSummaryClients,\n loadProfilerSchema,\n} from './profilerController';\nimport type {\n MosaicProfilerColumnState,\n MosaicProfilerOptions,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n UseMosaicProfilerReturn,\n} from './types';\nimport {\n buildProfilerBaseQuery,\n buildProfilerPageQuery,\n createEmptySummaryState,\n isProfilerHistogramType,\n isProfilerUnsupportedSummaryType,\n} from './utils';\n\ntype ProfilerSelectionState = {\n selection: Selection;\n selectionVersion: number;\n};\n\ntype ProfilerStoreSlice = {\n filteredCount: ProfilerStoreState['filteredCount'];\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n page: ProfilerStoreState['page'];\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n schema: ProfilerStoreState['schema'];\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n sorting: MosaicProfilerSorting;\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n};\n\ntype ProfilerQueryState = {\n baseQuery: ReturnType<typeof buildProfilerBaseQuery>;\n datasetId: string;\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n hasFilters: boolean;\n pageQuery: string;\n rowFilter: ReturnType<Selection['predicate']>;\n};\n\n/**\n * Tracks Mosaic selection updates as a monotonically increasing version so\n * memoized queries and lifecycle effects can respond to crossfilter changes.\n */\nfunction useSelectionVersion(selection: Selection) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const handleChange = () => setVersion((value) => value + 1);\n selection.addEventListener('value', handleChange);\n return () => selection.removeEventListener('value', handleChange);\n }, [selection]);\n\n return version;\n}\n\n/**\n * Resolves the profiler selection, creating a crossfilter selection when the\n * caller does not supply one, and exposes a version that changes with it.\n */\nfunction useProfilerSelection(\n options: Pick<MosaicProfilerOptions, 'selection' | 'selectionName'>,\n): ProfilerSelectionState {\n const {selection: providedSelection, selectionName} = options;\n const generatedSelectionName = useMemo(\n () => `mosaic-profiler-${createId()}`,\n [],\n );\n const selectionKey = selectionName ?? generatedSelectionName;\n const existingSelection = useStoreWithMosaic(\n (state) => state.mosaic.selections[selectionKey],\n );\n const getSelection = useStoreWithMosaic((state) => state.mosaic.getSelection);\n const [fallbackSelection] = useState(() => MosaicSelection.crossfilter());\n\n useEffect(() => {\n if (!providedSelection && !existingSelection) {\n getSelection(selectionKey, 'crossfilter');\n }\n }, [existingSelection, getSelection, providedSelection, selectionKey]);\n\n const selection = providedSelection ?? existingSelection ?? fallbackSelection;\n\n return {\n selection,\n selectionVersion: useSelectionVersion(selection),\n };\n}\n\n/**\n * Creates the per-profiler local store and subscribes to the raw state slices\n * that the public profiler hook exposes.\n */\nfunction useProfilerStoreState(options: {\n initialSorting: MosaicProfilerSorting;\n pageSize: number;\n}): ProfilerStoreSlice {\n const [profilerStore] = useState(() =>\n createProfilerStore({\n initialSorting: options.initialSorting,\n pageSize: options.pageSize,\n }),\n );\n\n return {\n filteredCount: useStore(profilerStore, (state) => state.filteredCount),\n lastNonEmptyPageTable: useStore(\n profilerStore,\n (state) => state.lastNonEmptyPageTable,\n ),\n page: useStore(profilerStore, (state) => state.page),\n pagination: useStore(profilerStore, (state) => state.pagination),\n profilerStore,\n schema: useStore(profilerStore, (state) => state.schema),\n setPagination: useStore(profilerStore, (state) => state.setPagination),\n setSorting: useStore(profilerStore, (state) => state.setSorting),\n sorting: useStore(profilerStore, (state) => state.sorting),\n summaries: useStore(profilerStore, (state) => state.summaries),\n totalCount: useStore(profilerStore, (state) => state.totalCount),\n };\n}\n\n/**\n * Derives the profiler's field and SQL state from the current schema,\n * selection, sorting, and pagination state.\n */\nfunction useProfilerQueryState(options: {\n pagination: MosaicProfilerPaginationState;\n rowSelectionVersion: number;\n schema: ProfilerStoreState['schema'];\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n tableName: string;\n}): ProfilerQueryState {\n const {\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n } = options;\n const fields = schema.fields;\n const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);\n const filter = useMemo(() => {\n void selectionVersion;\n return selection.predicate();\n }, [selection, selectionVersion]);\n const rowFilter = useMemo(() => {\n void rowSelectionVersion;\n return selection.predicate();\n }, [rowSelectionVersion, selection]);\n const baseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter,\n sorting,\n tableName,\n }),\n [fieldNames, filter, sorting, tableName],\n );\n const pageBaseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter: rowFilter,\n sorting,\n tableName,\n }),\n [fieldNames, rowFilter, sorting, tableName],\n );\n\n return {\n baseQuery,\n datasetId: [tableName, ...fieldNames].join('\\u0001'),\n fieldNames,\n fields,\n hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),\n pageQuery: buildProfilerPageQuery(pageBaseQuery, pagination).toString(),\n rowFilter,\n };\n}\n\n/**\n * Owns the coordinator-backed schema, row, count, and summary client\n * lifecycles for a profiler instance.\n */\nfunction useProfilerLifecycles(options: {\n categoryLimit: number;\n columns?: string[];\n connection: MosaicSliceState['mosaic']['connection'];\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n pageSize: number;\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n rowFilter: ReturnType<Selection['predicate']>;\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n summaryBins: number;\n tableName: string;\n}) {\n const {\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n } = options;\n\n useEffect(() => {\n profilerStore.getState().syncPageSize(pageSize);\n }, [pageSize, profilerStore]);\n\n useEffect(() => {\n profilerStore.getState().resetPageIndex();\n }, [profilerStore, selectionVersion, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setSchemaSuccess([]);\n profilerStore.getState().setSchemaError(undefined);\n profilerStore\n .getState()\n .setSchemaLoading(connection.status === 'loading');\n return;\n }\n\n void loadProfilerSchema({\n columns,\n coordinator: connection.coordinator,\n store: profilerStore,\n tableName,\n });\n }, [columns, connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName || !fieldNames.length) {\n profilerStore.getState().setPage({isLoading: false});\n return;\n }\n\n return connectProfilerPageClient({\n connection,\n fieldNames,\n filter: rowFilter,\n pagination,\n sorting,\n store: profilerStore,\n tableName,\n });\n }, [\n connection,\n fieldNames,\n pagination,\n profilerStore,\n rowFilter,\n sorting,\n tableName,\n ]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setFilteredCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n filterStable: true,\n selection,\n store: profilerStore,\n tableName,\n target: 'filtered',\n });\n }, [connection, profilerStore, selection, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setTotalCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n store: profilerStore,\n tableName,\n target: 'total',\n });\n }, [connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !fields.length) {\n profilerStore.getState().clearSummaries();\n return;\n }\n\n return connectProfilerSummaryClients({\n categoryLimit,\n connection,\n fields,\n selection,\n store: profilerStore,\n summaryBins,\n tableName,\n });\n }, [\n categoryLimit,\n connection,\n fields,\n profilerStore,\n selection,\n summaryBins,\n tableName,\n ]);\n}\n\n/**\n * Maps the schema fields and summary state into the column model consumed by\n * the profiler header and summary cells.\n */\nfunction useProfilerColumns(options: {\n fields: ProfilerStoreState['schema']['fields'];\n summaries: ProfilerStoreState['summaries'];\n}) {\n const {fields, summaries} = options;\n\n return useMemo<MosaicProfilerColumnState[]>(\n () =>\n fields.map((field) => ({\n field,\n kind: isProfilerUnsupportedSummaryType(field.type)\n ? 'unsupported'\n : isProfilerHistogramType(field.type)\n ? 'histogram'\n : 'category',\n name: field.name,\n summary: summaries[field.name] ?? createEmptySummaryState(field),\n })),\n [fields, summaries],\n );\n}\n\n/**\n * Collapses the aggregated profiler client state into the loading and error\n * signals exposed from the public hook.\n */\nfunction useProfilerStatus(options: {\n filteredCount: ProfilerStoreState['filteredCount'];\n fields: ProfilerStoreState['schema']['fields'];\n page: ProfilerStoreState['page'];\n schema: ProfilerStoreState['schema'];\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n}) {\n const {fields, filteredCount, page, schema, summaries, totalCount} = options;\n const hasPendingSummaryInitialization =\n fields.length > 0 && Object.keys(summaries).length < fields.length;\n\n return {\n isLoading:\n schema.isLoading ||\n page.isLoading ||\n filteredCount.isLoading ||\n totalCount.isLoading ||\n hasPendingSummaryInitialization ||\n Object.values(summaries).some((summary) => summary.isLoading),\n tableError:\n schema.error ??\n page.error ??\n filteredCount.error ??\n totalCount.error ??\n Object.values(summaries).find((summary) => summary.error)?.error,\n };\n}\n\n/**\n * Keeps the last non-empty page result visible while live brushing has moved\n * ahead of the deferred row query, avoiding transient \"No rows\" flashes.\n */\nfunction useProfilerVisiblePageState(options: {\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n pageDatasetId: string;\n page: ProfilerStoreState['page'];\n rowSelectionVersion: number;\n selectionVersion: number;\n}) {\n const {\n lastNonEmptyPageTable,\n page,\n pageDatasetId,\n rowSelectionVersion,\n selectionVersion,\n } = options;\n const isRowDisplayStale = selectionVersion !== rowSelectionVersion;\n const hasCurrentRows = !!page.pageTable && page.pageTable.numRows > 0;\n const canReuseLastNonEmptyPage =\n !!lastNonEmptyPageTable &&\n lastNonEmptyPageTable.datasetId === pageDatasetId;\n const canShowStableEmpty =\n !page.isLoading &&\n !isRowDisplayStale &&\n (!page.pageTable || page.pageTable.numRows === 0);\n const showStableEmpty = useDebounce(canShowStableEmpty, 120);\n\n if (hasCurrentRows || !canReuseLastNonEmptyPage) {\n return page.pageTable;\n }\n\n return showStableEmpty ? page.pageTable : lastNonEmptyPageTable.pageTable;\n}\n\n/**\n * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable\n * public profiler API consumed by the React table UI.\n */\nexport function useMosaicProfiler(\n options: MosaicProfilerOptions,\n): UseMosaicProfilerReturn {\n const {\n categoryLimit = 20,\n columns,\n initialSorting = [],\n pageSize = 100,\n selection: providedSelection,\n selectionName,\n summaryBins = 18,\n tableName,\n } = options;\n\n const connection = useStoreWithMosaic((state) => state.mosaic.connection);\n const {selection, selectionVersion} = useProfilerSelection({\n selection: providedSelection,\n selectionName,\n });\n const rowSelectionVersion = useDebounce(selectionVersion, 100);\n const {\n filteredCount,\n lastNonEmptyPageTable,\n page,\n pagination,\n profilerStore,\n schema,\n setPagination,\n setSorting,\n sorting,\n summaries,\n totalCount,\n } = useProfilerStoreState({\n initialSorting,\n pageSize,\n });\n const {\n baseQuery,\n datasetId,\n fieldNames,\n fields,\n hasFilters,\n pageQuery,\n rowFilter,\n } = useProfilerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n });\n useProfilerLifecycles({\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n });\n const profilerColumns = useProfilerColumns({fields, summaries});\n const {isLoading, tableError} = useProfilerStatus({\n fields,\n filteredCount,\n page,\n schema,\n summaries,\n totalCount,\n });\n const visiblePage = useProfilerVisiblePageState({\n lastNonEmptyPageTable,\n page,\n pageDatasetId: datasetId,\n rowSelectionVersion,\n selectionVersion,\n });\n\n return {\n columns: profilerColumns,\n filteredRowCount: filteredCount.count,\n hasFilters,\n isLoading,\n pageQuery,\n pageTable: visiblePage,\n pagination,\n reset: () => selection.reset(),\n selection,\n setPagination,\n setSorting,\n sorting,\n sql: baseQuery.toString(),\n tableError,\n totalRowCount: totalCount.count,\n };\n}\n"]}
@@ -0,0 +1,61 @@
1
+ import type { FieldInfo } from '@uwdata/mosaic-core';
2
+ import { Query } from '@uwdata/mosaic-sql';
3
+ import * as arrow from 'apache-arrow';
4
+ import type { MosaicProfilerBin, MosaicProfilerCategoryBucket, MosaicProfilerPaginationState, MosaicProfilerSorting, MosaicProfilerSummaryState } from './types';
5
+ export type CategoryCountRow = {
6
+ bucketKind: 'null' | 'unique' | 'value';
7
+ total: number;
8
+ typedValue: unknown;
9
+ };
10
+ type QueryWhereInput = Parameters<ReturnType<typeof Query.from>['where']>[0];
11
+ export declare function isProfilerHistogramType(type: arrow.DataType): boolean;
12
+ export declare function isProfilerUnsupportedSummaryType(type: arrow.DataType): boolean;
13
+ export declare function getProfilerValueType(type: arrow.DataType): 'date' | 'number' | 'string';
14
+ export declare function buildSchemaQuery(tableName: string, columns?: string[]): ReturnType<typeof Query.from>;
15
+ export declare function fieldInfoToProfilerField(info: FieldInfo): arrow.Field;
16
+ export declare function buildProfilerBaseQuery(args: {
17
+ columns?: string[];
18
+ filter?: QueryWhereInput;
19
+ sorting?: MosaicProfilerSorting;
20
+ tableName: string;
21
+ }): import("@uwdata/mosaic-sql").SelectQuery;
22
+ export declare function buildProfilerPageQuery(baseQuery: ReturnType<typeof buildProfilerBaseQuery>, pagination: MosaicProfilerPaginationState): import("@uwdata/mosaic-sql").SelectQuery;
23
+ export declare function normalizeProfilerPagination(pagination: Partial<MosaicProfilerPaginationState> | undefined): MosaicProfilerPaginationState;
24
+ export declare function buildCountQuery(args: {
25
+ filter?: QueryWhereInput;
26
+ tableName: string;
27
+ }): import("@uwdata/mosaic-sql").SelectQuery;
28
+ export declare function buildDistinctCountQuery(args: {
29
+ filter?: QueryWhereInput;
30
+ fieldName: string;
31
+ tableName: string;
32
+ }): import("@uwdata/mosaic-sql").SelectQuery;
33
+ export declare function readCountData(data: unknown): number | undefined;
34
+ export declare function rowsFromQueryResult<T>(data: unknown): T[];
35
+ export declare function buildCategorySummaryQuery(tableName: string, fieldName: string, filter?: QueryWhereInput): import("@uwdata/mosaic-sql").SelectQuery;
36
+ export declare function splitHistogramBins(rows: Array<{
37
+ x1: MosaicProfilerBin['x0'] | null;
38
+ x2: MosaicProfilerBin['x1'] | null;
39
+ y: number;
40
+ }>): {
41
+ bins: MosaicProfilerBin[];
42
+ nullCount: number;
43
+ };
44
+ export declare function buildCategoryBuckets(filteredRows: CategoryCountRow[], totalRows: CategoryCountRow[], categoryLimit: number, selectedKey?: string): {
45
+ bucketCount: number;
46
+ buckets: MosaicProfilerCategoryBucket[];
47
+ selectedKey: string | undefined;
48
+ };
49
+ export declare function isSelectableCategoryKey(key: string): boolean;
50
+ export declare function categoryKeyToSelectionValue(key?: string): unknown;
51
+ export declare function serializeCategoryBucketKey(row: {
52
+ bucketKind: CategoryCountRow['bucketKind'];
53
+ typedValue: unknown;
54
+ }): string;
55
+ export declare function parseCategoryBucketKey(key: string): {
56
+ bucketKind: CategoryCountRow['bucketKind'];
57
+ typedValue: unknown;
58
+ } | undefined;
59
+ export declare function createEmptySummaryState(field: arrow.Field): MosaicProfilerSummaryState;
60
+ export {};
61
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/profiler/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,347 @@
1
+ import { asc, column, count, desc, Query, sql, sum } from '@uwdata/mosaic-sql';
2
+ import * as arrow from 'apache-arrow';
3
+ export function isProfilerHistogramType(type) {
4
+ return (arrow.DataType.isDate(type) ||
5
+ arrow.DataType.isTimestamp(type) ||
6
+ arrow.DataType.isDecimal(type) ||
7
+ arrow.DataType.isFloat(type) ||
8
+ arrow.DataType.isInt(type));
9
+ }
10
+ export function isProfilerUnsupportedSummaryType(type) {
11
+ return (arrow.DataType.isBinary(type) ||
12
+ type.toString().toLowerCase().includes('geometry'));
13
+ }
14
+ export function getProfilerValueType(type) {
15
+ if (arrow.DataType.isDate(type) || arrow.DataType.isTimestamp(type)) {
16
+ return 'date';
17
+ }
18
+ if (arrow.DataType.isDecimal(type) ||
19
+ arrow.DataType.isFloat(type) ||
20
+ arrow.DataType.isInt(type)) {
21
+ return 'number';
22
+ }
23
+ return 'string';
24
+ }
25
+ export function buildSchemaQuery(tableName, columns) {
26
+ return Query.from(tableName)
27
+ .select(columns?.length ? columns.map((name) => column(name)) : ['*'])
28
+ .limit(1);
29
+ }
30
+ function createProfilerArrowType(sqlType) {
31
+ const type = sqlType.toLowerCase();
32
+ if (/^bool(ean)?/.test(type)) {
33
+ return new arrow.Bool();
34
+ }
35
+ if (/^date$/.test(type)) {
36
+ return new arrow.DateDay();
37
+ }
38
+ if (/^time$|^timestamp|^timestamptz/.test(type)) {
39
+ return new arrow.TimestampMillisecond();
40
+ }
41
+ if (/^(tinyint|smallint|integer|bigint|hugeint|utinyint|usmallint|uinteger|ubigint|uhugeint)/.test(type)) {
42
+ return new arrow.Int64();
43
+ }
44
+ if (/^(decimal|numeric)/.test(type)) {
45
+ return new arrow.Decimal(38, 9);
46
+ }
47
+ if (/^(double|float|real)/.test(type)) {
48
+ return new arrow.Float64();
49
+ }
50
+ if (/^(blob|bytea|binary|varbinary)/.test(type)) {
51
+ return new arrow.Binary();
52
+ }
53
+ if (/^geometry/.test(type)) {
54
+ return {
55
+ toString() {
56
+ return sqlType;
57
+ },
58
+ };
59
+ }
60
+ return new arrow.Utf8();
61
+ }
62
+ export function fieldInfoToProfilerField(info) {
63
+ return new arrow.Field(info.column, createProfilerArrowType(info.sqlType), info.nullable);
64
+ }
65
+ export function buildProfilerBaseQuery(args) {
66
+ const { columns, filter, sorting, tableName } = args;
67
+ const query = Query.from(tableName)
68
+ .select(columns?.length ? columns.map((name) => column(name)) : ['*'])
69
+ .where(filter ?? []);
70
+ if (sorting?.length) {
71
+ query.orderby(sorting.map((entry) => (entry.desc ? desc(entry.id) : asc(entry.id))));
72
+ }
73
+ return query;
74
+ }
75
+ export function buildProfilerPageQuery(baseQuery, pagination) {
76
+ const { pageIndex, pageSize } = normalizeProfilerPagination(pagination);
77
+ return baseQuery
78
+ .clone()
79
+ .limit(pageSize)
80
+ .offset(pageIndex * pageSize);
81
+ }
82
+ export function normalizeProfilerPagination(pagination) {
83
+ const pageSize = Math.min(1000, Math.max(1, Math.trunc(Number(pagination?.pageSize) || 0) || 100));
84
+ const pageIndex = Math.max(0, Math.trunc(Number(pagination?.pageIndex) || 0));
85
+ return { pageIndex, pageSize };
86
+ }
87
+ export function buildCountQuery(args) {
88
+ return Query.from(args.tableName)
89
+ .select({ count: count() })
90
+ .where(args.filter ?? []);
91
+ }
92
+ export function buildDistinctCountQuery(args) {
93
+ return Query.from(args.tableName)
94
+ .select({
95
+ count: count(column(args.fieldName)).distinct(),
96
+ })
97
+ .where(args.filter ?? []);
98
+ }
99
+ export function readCountData(data) {
100
+ if (!data || typeof data !== 'object') {
101
+ return undefined;
102
+ }
103
+ if ('toArray' in data && typeof data.toArray === 'function') {
104
+ return data.toArray()[0]?.count;
105
+ }
106
+ if ('get' in data && typeof data.get === 'function') {
107
+ return data.get(0)?.count;
108
+ }
109
+ return undefined;
110
+ }
111
+ export function rowsFromQueryResult(data) {
112
+ if (!data ||
113
+ typeof data !== 'object' ||
114
+ !('toArray' in data) ||
115
+ typeof data.toArray !== 'function') {
116
+ return [];
117
+ }
118
+ return Array.from(data.toArray());
119
+ }
120
+ export function buildCategorySummaryQuery(tableName, fieldName, filter) {
121
+ const col = column(fieldName);
122
+ const counts = Query.from({ source: tableName })
123
+ .select({
124
+ bucket_kind: sql `CASE
125
+ WHEN ${col} IS NULL THEN 'null'
126
+ ELSE 'value'
127
+ END`,
128
+ typed_value: col,
129
+ count: count(),
130
+ })
131
+ .groupby([
132
+ sql `CASE
133
+ WHEN ${col} IS NULL THEN 'null'
134
+ ELSE 'value'
135
+ END`,
136
+ col,
137
+ ])
138
+ .where(filter ?? []);
139
+ return Query.with({ counts })
140
+ .select({
141
+ bucketKind: sql `CASE
142
+ WHEN "count" = 1 AND "bucket_kind" = 'value' THEN 'unique'
143
+ ELSE "bucket_kind"
144
+ END`,
145
+ typedValue: sql `CASE
146
+ WHEN "count" = 1 AND "bucket_kind" = 'value' THEN NULL
147
+ ELSE "typed_value"
148
+ END`,
149
+ total: sum('count'),
150
+ })
151
+ .from('counts')
152
+ .groupby([
153
+ sql `CASE
154
+ WHEN "count" = 1 AND "bucket_kind" = 'value' THEN 'unique'
155
+ ELSE "bucket_kind"
156
+ END`,
157
+ sql `CASE
158
+ WHEN "count" = 1 AND "bucket_kind" = 'value' THEN NULL
159
+ ELSE "typed_value"
160
+ END`,
161
+ ]);
162
+ }
163
+ export function splitHistogramBins(rows) {
164
+ let nullCount = 0;
165
+ const bins = [];
166
+ for (const row of rows) {
167
+ if (row.x1 == null || row.x2 == null) {
168
+ nullCount += row.y;
169
+ continue;
170
+ }
171
+ bins.push({
172
+ x0: row.x1,
173
+ x1: row.x2,
174
+ length: row.y,
175
+ });
176
+ }
177
+ bins.sort((left, right) => {
178
+ const leftValue = left.x0 instanceof Date ? left.x0.getTime() : left.x0;
179
+ const rightValue = right.x0 instanceof Date ? right.x0.getTime() : right.x0;
180
+ return leftValue - rightValue;
181
+ });
182
+ return { bins, nullCount };
183
+ }
184
+ export function buildCategoryBuckets(filteredRows, totalRows, categoryLimit, selectedKey) {
185
+ const totalByKey = new Map(totalRows.map((row) => [serializeCategoryBucketKey(row), row.total]));
186
+ const filteredByKey = new Map(filteredRows.map((row) => [serializeCategoryBucketKey(row), row.total]));
187
+ const baseRows = totalRows
188
+ .filter((row) => row.bucketKind === 'value')
189
+ .slice()
190
+ .sort((left, right) => right.total - left.total);
191
+ const visibleRows = baseRows.slice(0, categoryLimit);
192
+ const overflowRows = baseRows.slice(categoryLimit);
193
+ const buckets = visibleRows.map((row) => ({
194
+ filteredCount: filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0,
195
+ key: serializeCategoryBucketKey(row),
196
+ kind: 'value',
197
+ label: String(row.typedValue),
198
+ selectable: true,
199
+ totalCount: row.total,
200
+ }));
201
+ const overflowTotalCount = overflowRows.reduce((acc, row) => acc + row.total, 0);
202
+ const overflowFilteredCount = overflowRows.reduce((acc, row) => acc + (filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0), 0);
203
+ if (overflowTotalCount > 0) {
204
+ buckets.push({
205
+ filteredCount: overflowFilteredCount,
206
+ key: serializeCategoryBucketKey({
207
+ bucketKind: 'unique',
208
+ typedValue: '__sqlrooms_overflow__',
209
+ }),
210
+ kind: 'overflow',
211
+ label: `${overflowRows.length} more`,
212
+ selectable: false,
213
+ totalCount: overflowTotalCount,
214
+ });
215
+ }
216
+ const uniqueKey = serializeCategoryBucketKey({
217
+ bucketKind: 'unique',
218
+ typedValue: null,
219
+ });
220
+ const uniqueTotalCount = totalByKey.get(uniqueKey) ?? 0;
221
+ if (uniqueTotalCount > 0) {
222
+ buckets.push({
223
+ filteredCount: filteredByKey.get(uniqueKey) ?? 0,
224
+ key: uniqueKey,
225
+ kind: 'unique',
226
+ label: 'unique',
227
+ selectable: false,
228
+ totalCount: uniqueTotalCount,
229
+ });
230
+ }
231
+ const nullKey = serializeCategoryBucketKey({
232
+ bucketKind: 'null',
233
+ typedValue: null,
234
+ });
235
+ const nullTotalCount = totalByKey.get(nullKey) ?? 0;
236
+ if (nullTotalCount > 0) {
237
+ buckets.push({
238
+ filteredCount: filteredByKey.get(nullKey) ?? 0,
239
+ key: nullKey,
240
+ kind: 'null',
241
+ label: 'null',
242
+ selectable: true,
243
+ totalCount: nullTotalCount,
244
+ });
245
+ }
246
+ return {
247
+ bucketCount: filteredRows.length,
248
+ buckets,
249
+ selectedKey,
250
+ };
251
+ }
252
+ export function isSelectableCategoryKey(key) {
253
+ const parsedKey = parseCategoryBucketKey(key);
254
+ return (parsedKey?.bucketKind !== 'unique' &&
255
+ parsedKey?.typedValue !== '__sqlrooms_overflow__');
256
+ }
257
+ export function categoryKeyToSelectionValue(key) {
258
+ if (key === undefined)
259
+ return undefined;
260
+ const parsedKey = parseCategoryBucketKey(key);
261
+ if (!parsedKey || parsedKey.bucketKind === 'unique') {
262
+ return undefined;
263
+ }
264
+ return parsedKey.bucketKind === 'null' ? null : parsedKey.typedValue;
265
+ }
266
+ function normalizeCategoryBucketValue(value) {
267
+ if (value instanceof Date) {
268
+ return {
269
+ type: 'date',
270
+ value: value.toISOString(),
271
+ };
272
+ }
273
+ if (typeof value === 'bigint') {
274
+ return {
275
+ type: 'bigint',
276
+ value: value.toString(),
277
+ };
278
+ }
279
+ return value;
280
+ }
281
+ function denormalizeCategoryBucketValue(value) {
282
+ if (!value || typeof value !== 'object') {
283
+ return value;
284
+ }
285
+ if ('type' in value &&
286
+ 'value' in value &&
287
+ value.type === 'date' &&
288
+ typeof value.value === 'string') {
289
+ return new Date(value.value);
290
+ }
291
+ if ('type' in value &&
292
+ 'value' in value &&
293
+ value.type === 'bigint' &&
294
+ typeof value.value === 'string') {
295
+ return BigInt(value.value);
296
+ }
297
+ return value;
298
+ }
299
+ export function serializeCategoryBucketKey(row) {
300
+ return JSON.stringify([
301
+ row.bucketKind,
302
+ normalizeCategoryBucketValue(row.typedValue),
303
+ ]);
304
+ }
305
+ export function parseCategoryBucketKey(key) {
306
+ try {
307
+ const parsed = JSON.parse(key);
308
+ if (!Array.isArray(parsed) || parsed.length !== 2) {
309
+ return undefined;
310
+ }
311
+ return {
312
+ bucketKind: parsed[0],
313
+ typedValue: denormalizeCategoryBucketValue(parsed[1]),
314
+ };
315
+ }
316
+ catch {
317
+ return undefined;
318
+ }
319
+ }
320
+ export function createEmptySummaryState(field) {
321
+ if (isProfilerUnsupportedSummaryType(field.type)) {
322
+ return {
323
+ isLoading: false,
324
+ kind: 'unsupported',
325
+ label: 'No summary',
326
+ };
327
+ }
328
+ return isProfilerHistogramType(field.type)
329
+ ? {
330
+ filteredBins: [],
331
+ filteredNullCount: 0,
332
+ interactor: null,
333
+ isLoading: true,
334
+ kind: 'histogram',
335
+ totalBins: [],
336
+ totalNullCount: 0,
337
+ valueType: getProfilerValueType(field.type) === 'date' ? 'date' : 'number',
338
+ }
339
+ : {
340
+ bucketCount: 0,
341
+ buckets: [],
342
+ isLoading: true,
343
+ kind: 'category',
344
+ toggleValue: () => { },
345
+ };
346
+ }
347
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/profiler/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {FieldInfo} from '@uwdata/mosaic-core';\nimport {asc, column, count, desc, Query, sql, sum} from '@uwdata/mosaic-sql';\nimport * as arrow from 'apache-arrow';\nimport type {\n MosaicProfilerBin,\n MosaicProfilerCategoryBucket,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n MosaicProfilerSummaryState,\n} from './types';\n\nexport type CategoryCountRow = {\n bucketKind: 'null' | 'unique' | 'value';\n total: number;\n typedValue: unknown;\n};\n\ntype QueryWhereInput = Parameters<ReturnType<typeof Query.from>['where']>[0];\n\nexport function isProfilerHistogramType(type: arrow.DataType): boolean {\n return (\n arrow.DataType.isDate(type) ||\n arrow.DataType.isTimestamp(type) ||\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n );\n}\n\nexport function isProfilerUnsupportedSummaryType(\n type: arrow.DataType,\n): boolean {\n return (\n arrow.DataType.isBinary(type) ||\n type.toString().toLowerCase().includes('geometry')\n );\n}\n\nexport function getProfilerValueType(\n type: arrow.DataType,\n): 'date' | 'number' | 'string' {\n if (arrow.DataType.isDate(type) || arrow.DataType.isTimestamp(type)) {\n return 'date';\n }\n if (\n arrow.DataType.isDecimal(type) ||\n arrow.DataType.isFloat(type) ||\n arrow.DataType.isInt(type)\n ) {\n return 'number';\n }\n return 'string';\n}\n\nexport function buildSchemaQuery(\n tableName: string,\n columns?: string[],\n): ReturnType<typeof Query.from> {\n return Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .limit(1);\n}\n\nfunction createProfilerArrowType(sqlType: string): arrow.DataType {\n const type = sqlType.toLowerCase();\n\n if (/^bool(ean)?/.test(type)) {\n return new arrow.Bool();\n }\n\n if (/^date$/.test(type)) {\n return new arrow.DateDay();\n }\n\n if (/^time$|^timestamp|^timestamptz/.test(type)) {\n return new arrow.TimestampMillisecond();\n }\n\n if (\n /^(tinyint|smallint|integer|bigint|hugeint|utinyint|usmallint|uinteger|ubigint|uhugeint)/.test(\n type,\n )\n ) {\n return new arrow.Int64();\n }\n\n if (/^(decimal|numeric)/.test(type)) {\n return new arrow.Decimal(38, 9);\n }\n\n if (/^(double|float|real)/.test(type)) {\n return new arrow.Float64();\n }\n\n if (/^(blob|bytea|binary|varbinary)/.test(type)) {\n return new arrow.Binary();\n }\n\n if (/^geometry/.test(type)) {\n return {\n toString() {\n return sqlType;\n },\n } as arrow.DataType;\n }\n\n return new arrow.Utf8();\n}\n\nexport function fieldInfoToProfilerField(info: FieldInfo): arrow.Field {\n return new arrow.Field(\n info.column,\n createProfilerArrowType(info.sqlType),\n info.nullable,\n );\n}\n\nexport function buildProfilerBaseQuery(args: {\n columns?: string[];\n filter?: QueryWhereInput;\n sorting?: MosaicProfilerSorting;\n tableName: string;\n}) {\n const {columns, filter, sorting, tableName} = args;\n const query = Query.from(tableName)\n .select(columns?.length ? columns.map((name) => column(name)) : ['*'])\n .where(filter ?? []);\n\n if (sorting?.length) {\n query.orderby(\n sorting.map((entry) => (entry.desc ? desc(entry.id) : asc(entry.id))),\n );\n }\n\n return query;\n}\n\nexport function buildProfilerPageQuery(\n baseQuery: ReturnType<typeof buildProfilerBaseQuery>,\n pagination: MosaicProfilerPaginationState,\n) {\n const {pageIndex, pageSize} = normalizeProfilerPagination(pagination);\n\n return baseQuery\n .clone()\n .limit(pageSize)\n .offset(pageIndex * pageSize);\n}\n\nexport function normalizeProfilerPagination(\n pagination: Partial<MosaicProfilerPaginationState> | undefined,\n): MosaicProfilerPaginationState {\n const pageSize = Math.min(\n 1000,\n Math.max(1, Math.trunc(Number(pagination?.pageSize) || 0) || 100),\n );\n const pageIndex = Math.max(0, Math.trunc(Number(pagination?.pageIndex) || 0));\n\n return {pageIndex, pageSize};\n}\n\nexport function buildCountQuery(args: {\n filter?: QueryWhereInput;\n tableName: string;\n}) {\n return Query.from(args.tableName)\n .select({count: count()})\n .where(args.filter ?? []);\n}\n\nexport function buildDistinctCountQuery(args: {\n filter?: QueryWhereInput;\n fieldName: string;\n tableName: string;\n}) {\n return Query.from(args.tableName)\n .select({\n count: count(column(args.fieldName)).distinct(),\n })\n .where(args.filter ?? []);\n}\n\nexport function readCountData(data: unknown): number | undefined {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n if ('toArray' in data && typeof data.toArray === 'function') {\n return (data.toArray() as Array<{count?: number}>)[0]?.count;\n }\n\n if ('get' in data && typeof data.get === 'function') {\n return (data.get(0) as {count?: number} | undefined)?.count;\n }\n\n return undefined;\n}\n\nexport function rowsFromQueryResult<T>(data: unknown): T[] {\n if (\n !data ||\n typeof data !== 'object' ||\n !('toArray' in data) ||\n typeof (data as {toArray?: unknown}).toArray !== 'function'\n ) {\n return [];\n }\n\n return Array.from((data as {toArray(): T[]}).toArray());\n}\n\nexport function buildCategorySummaryQuery(\n tableName: string,\n fieldName: string,\n filter?: QueryWhereInput,\n) {\n const col = column(fieldName);\n const counts = Query.from({source: tableName})\n .select({\n bucket_kind: sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n typed_value: col,\n count: count(),\n })\n .groupby([\n sql`CASE\n WHEN ${col} IS NULL THEN 'null'\n ELSE 'value'\n END`,\n col,\n ])\n .where(filter ?? []);\n\n return Query.with({counts})\n .select({\n bucketKind: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n typedValue: sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n total: sum('count'),\n })\n .from('counts')\n .groupby([\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN 'unique'\n ELSE \"bucket_kind\"\n END`,\n sql`CASE\n WHEN \"count\" = 1 AND \"bucket_kind\" = 'value' THEN NULL\n ELSE \"typed_value\"\n END`,\n ]);\n}\n\nexport function splitHistogramBins(\n rows: Array<{\n x1: MosaicProfilerBin['x0'] | null;\n x2: MosaicProfilerBin['x1'] | null;\n y: number;\n }>,\n) {\n let nullCount = 0;\n const bins: MosaicProfilerBin[] = [];\n\n for (const row of rows) {\n if (row.x1 == null || row.x2 == null) {\n nullCount += row.y;\n continue;\n }\n\n bins.push({\n x0: row.x1,\n x1: row.x2,\n length: row.y,\n });\n }\n\n bins.sort((left, right) => {\n const leftValue = left.x0 instanceof Date ? left.x0.getTime() : left.x0;\n const rightValue = right.x0 instanceof Date ? right.x0.getTime() : right.x0;\n return leftValue - rightValue;\n });\n\n return {bins, nullCount};\n}\n\nexport function buildCategoryBuckets(\n filteredRows: CategoryCountRow[],\n totalRows: CategoryCountRow[],\n categoryLimit: number,\n selectedKey?: string,\n) {\n const totalByKey = new Map(\n totalRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n const filteredByKey = new Map(\n filteredRows.map((row) => [serializeCategoryBucketKey(row), row.total]),\n );\n\n const baseRows = totalRows\n .filter((row) => row.bucketKind === 'value')\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n\n const visibleRows = baseRows.slice(0, categoryLimit);\n const overflowRows = baseRows.slice(categoryLimit);\n const buckets: MosaicProfilerCategoryBucket[] = visibleRows.map((row) => ({\n filteredCount: filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0,\n key: serializeCategoryBucketKey(row),\n kind: 'value',\n label: String(row.typedValue),\n selectable: true,\n totalCount: row.total,\n }));\n\n const overflowTotalCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) => acc + row.total,\n 0,\n );\n const overflowFilteredCount = overflowRows.reduce(\n (acc: number, row: CategoryCountRow) =>\n acc + (filteredByKey.get(serializeCategoryBucketKey(row)) ?? 0),\n 0,\n );\n if (overflowTotalCount > 0) {\n buckets.push({\n filteredCount: overflowFilteredCount,\n key: serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: '__sqlrooms_overflow__',\n }),\n kind: 'overflow',\n label: `${overflowRows.length} more`,\n selectable: false,\n totalCount: overflowTotalCount,\n });\n }\n\n const uniqueKey = serializeCategoryBucketKey({\n bucketKind: 'unique',\n typedValue: null,\n });\n const uniqueTotalCount = totalByKey.get(uniqueKey) ?? 0;\n if (uniqueTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(uniqueKey) ?? 0,\n key: uniqueKey,\n kind: 'unique',\n label: 'unique',\n selectable: false,\n totalCount: uniqueTotalCount,\n });\n }\n\n const nullKey = serializeCategoryBucketKey({\n bucketKind: 'null',\n typedValue: null,\n });\n const nullTotalCount = totalByKey.get(nullKey) ?? 0;\n if (nullTotalCount > 0) {\n buckets.push({\n filteredCount: filteredByKey.get(nullKey) ?? 0,\n key: nullKey,\n kind: 'null',\n label: 'null',\n selectable: true,\n totalCount: nullTotalCount,\n });\n }\n\n return {\n bucketCount: filteredRows.length,\n buckets,\n selectedKey,\n };\n}\n\nexport function isSelectableCategoryKey(key: string) {\n const parsedKey = parseCategoryBucketKey(key);\n return (\n parsedKey?.bucketKind !== 'unique' &&\n parsedKey?.typedValue !== '__sqlrooms_overflow__'\n );\n}\n\nexport function categoryKeyToSelectionValue(key?: string) {\n if (key === undefined) return undefined;\n const parsedKey = parseCategoryBucketKey(key);\n if (!parsedKey || parsedKey.bucketKind === 'unique') {\n return undefined;\n }\n return parsedKey.bucketKind === 'null' ? null : parsedKey.typedValue;\n}\n\nfunction normalizeCategoryBucketValue(value: unknown): unknown {\n if (value instanceof Date) {\n return {\n type: 'date',\n value: value.toISOString(),\n };\n }\n if (typeof value === 'bigint') {\n return {\n type: 'bigint',\n value: value.toString(),\n };\n }\n return value;\n}\n\nfunction denormalizeCategoryBucketValue(value: unknown): unknown {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'date' &&\n typeof value.value === 'string'\n ) {\n return new Date(value.value);\n }\n\n if (\n 'type' in value &&\n 'value' in value &&\n value.type === 'bigint' &&\n typeof value.value === 'string'\n ) {\n return BigInt(value.value);\n }\n\n return value;\n}\n\nexport function serializeCategoryBucketKey(row: {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n}) {\n return JSON.stringify([\n row.bucketKind,\n normalizeCategoryBucketValue(row.typedValue),\n ]);\n}\n\nexport function parseCategoryBucketKey(key: string):\n | {\n bucketKind: CategoryCountRow['bucketKind'];\n typedValue: unknown;\n }\n | undefined {\n try {\n const parsed = JSON.parse(key) as [CategoryCountRow['bucketKind'], unknown];\n if (!Array.isArray(parsed) || parsed.length !== 2) {\n return undefined;\n }\n\n return {\n bucketKind: parsed[0],\n typedValue: denormalizeCategoryBucketValue(parsed[1]),\n };\n } catch {\n return undefined;\n }\n}\n\nexport function createEmptySummaryState(\n field: arrow.Field,\n): MosaicProfilerSummaryState {\n if (isProfilerUnsupportedSummaryType(field.type)) {\n return {\n isLoading: false,\n kind: 'unsupported',\n label: 'No summary',\n };\n }\n\n return isProfilerHistogramType(field.type)\n ? {\n filteredBins: [],\n filteredNullCount: 0,\n interactor: null,\n isLoading: true,\n kind: 'histogram',\n totalBins: [],\n totalNullCount: 0,\n valueType:\n getProfilerValueType(field.type) === 'date' ? 'date' : 'number',\n }\n : {\n bucketCount: 0,\n buckets: [],\n isLoading: true,\n kind: 'category',\n toggleValue: () => {},\n };\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { type Table as MosaicTable } from '@uwdata/flechette';
2
+ import { type Table as ArrowTable } from 'apache-arrow';
3
+ type TableInterop = {
4
+ ipcBytes: Uint8Array;
5
+ getArrowTable: () => ArrowTable;
6
+ getMosaicTable: () => object;
7
+ };
8
+ export declare function getTableInterop(value: unknown): TableInterop | undefined;
9
+ export declare function getArrowTableFromInterop(value: unknown): ArrowTable | undefined;
10
+ /**
11
+ * Convert an Apache Arrow table into the Mosaic-native table shape while
12
+ * attaching Mosaic-internal IPC-backed interop metadata.
13
+ *
14
+ * Mosaic core expects Flechette tables, while SQLRooms public client APIs
15
+ * expose Apache Arrow. IPC remains the durable bridge. The original Arrow
16
+ * table is referenced weakly so Arrow-native callers can often reuse it
17
+ * without forcing Mosaic-only consumers to retain both table runtimes.
18
+ */
19
+ export declare function createMosaicTableFromArrowTable(arrowTable: ArrowTable): MosaicTable;
20
+ /**
21
+ * Convert a raw Mosaic client result to the Apache Arrow shape exposed by
22
+ * SQLRooms public hooks.
23
+ *
24
+ * Results produced by {@link createMosaicTableFromArrowTable} use the
25
+ * interop fast path. Plain third-party Flechette tables are still accepted as
26
+ * a compatibility fallback, but that path has to re-encode through IPC.
27
+ */
28
+ export declare function toArrowClientResult(value: unknown): ArrowTable;
29
+ export {};
30
+ //# sourceMappingURL=tableInterop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableInterop.d.ts","sourceRoot":"","sources":["../src/tableInterop.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,KAAK,IAAI,WAAW,EAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA2B,KAAK,KAAK,IAAI,UAAU,EAAC,MAAM,cAAc,CAAC;AAIhF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,MAAM,UAAU,CAAC;IAChC,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B,CAAC;AAmCF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAMxE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,GACb,UAAU,GAAG,SAAS,CAExB;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,UAAU,GACrB,WAAW,CASb;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAiB9D"}
@@ -0,0 +1,85 @@
1
+ import { decodeIPC } from '@uwdata/mosaic-core';
2
+ import { tableToIPC as mosaicTableToIPC, } from '@uwdata/flechette';
3
+ import { tableFromIPC, tableToIPC } from 'apache-arrow';
4
+ const TABLE_INTEROP = Symbol.for('@sqlrooms/mosaic-table-interop');
5
+ function attachTableInterop(table, options) {
6
+ if (getTableInterop(table)) {
7
+ return table;
8
+ }
9
+ const { ipcBytes, decodeArrowTable = (bytes) => tableFromIPC(bytes) } = options;
10
+ let arrowTable;
11
+ const interop = {
12
+ ipcBytes,
13
+ getArrowTable: () => {
14
+ arrowTable ??= decodeArrowTable(ipcBytes);
15
+ return arrowTable;
16
+ },
17
+ getMosaicTable: () => table,
18
+ };
19
+ Object.defineProperty(table, TABLE_INTEROP, {
20
+ value: interop,
21
+ enumerable: false,
22
+ configurable: false,
23
+ writable: false,
24
+ });
25
+ return table;
26
+ }
27
+ export function getTableInterop(value) {
28
+ if (!value || typeof value !== 'object') {
29
+ return undefined;
30
+ }
31
+ return value[TABLE_INTEROP];
32
+ }
33
+ export function getArrowTableFromInterop(value) {
34
+ return getTableInterop(value)?.getArrowTable();
35
+ }
36
+ function isArrowTable(value) {
37
+ return Boolean(value &&
38
+ typeof value === 'object' &&
39
+ Array.isArray(value.batches));
40
+ }
41
+ function isMosaicTable(value) {
42
+ return Boolean(value &&
43
+ typeof value === 'object' &&
44
+ typeof value.toColumns === 'function' &&
45
+ typeof value.getChild === 'function');
46
+ }
47
+ /**
48
+ * Convert an Apache Arrow table into the Mosaic-native table shape while
49
+ * attaching Mosaic-internal IPC-backed interop metadata.
50
+ *
51
+ * Mosaic core expects Flechette tables, while SQLRooms public client APIs
52
+ * expose Apache Arrow. IPC remains the durable bridge. The original Arrow
53
+ * table is referenced weakly so Arrow-native callers can often reuse it
54
+ * without forcing Mosaic-only consumers to retain both table runtimes.
55
+ */
56
+ export function createMosaicTableFromArrowTable(arrowTable) {
57
+ const ipcBytes = tableToIPC(arrowTable, 'stream');
58
+ const arrowTableRef = typeof WeakRef === 'undefined' ? undefined : new WeakRef(arrowTable);
59
+ return attachTableInterop(decodeIPC(ipcBytes), {
60
+ ipcBytes,
61
+ decodeArrowTable: (bytes) => arrowTableRef?.deref() ?? tableFromIPC(bytes),
62
+ });
63
+ }
64
+ /**
65
+ * Convert a raw Mosaic client result to the Apache Arrow shape exposed by
66
+ * SQLRooms public hooks.
67
+ *
68
+ * Results produced by {@link createMosaicTableFromArrowTable} use the
69
+ * interop fast path. Plain third-party Flechette tables are still accepted as
70
+ * a compatibility fallback, but that path has to re-encode through IPC.
71
+ */
72
+ export function toArrowClientResult(value) {
73
+ if (isArrowTable(value)) {
74
+ return value;
75
+ }
76
+ const interopArrowTable = getArrowTableFromInterop(value);
77
+ if (interopArrowTable) {
78
+ return interopArrowTable;
79
+ }
80
+ if (isMosaicTable(value)) {
81
+ return tableFromIPC(mosaicTableToIPC(value, { format: 'stream' }));
82
+ }
83
+ throw new Error('useMosaicClient expected a Mosaic table result that can be converted to Apache Arrow.');
84
+ }
85
+ //# sourceMappingURL=tableInterop.js.map