@quillsql/react 2.12.35 → 2.12.37

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 (475) hide show
  1. package/dist/cjs/Chart.d.ts +2 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +3 -3
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +3 -3
  6. package/dist/cjs/Dashboard.d.ts.map +1 -1
  7. package/dist/cjs/Dashboard.js +2 -2
  8. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  9. package/dist/cjs/ReportBuilder.js +13 -0
  10. package/dist/cjs/SQLEditor.js +2 -1
  11. package/dist/cjs/components/Chart/BarList.d.ts +1 -0
  12. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  13. package/dist/cjs/components/Chart/BarList.js +3 -3
  14. package/dist/cjs/components/Chart/ChartError.js +1 -1
  15. package/dist/cjs/utils/dashboard.js +1 -1
  16. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  17. package/dist/cjs/utils/dataFetcher.js +7 -1
  18. package/dist/cjs/utils/dataProcessing.d.ts +1 -0
  19. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
  20. package/dist/cjs/utils/dataProcessing.js +20 -1
  21. package/dist/cjs/utils/queryConstructor.d.ts +1 -1
  22. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  23. package/dist/cjs/utils/queryConstructor.js +8 -5
  24. package/dist/cjs/utils/report.d.ts.map +1 -1
  25. package/dist/cjs/utils/report.js +17 -5
  26. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  27. package/dist/cjs/utils/tableProcessing.js +7 -0
  28. package/package.json +1 -1
  29. package/dist/esm/Chart.d.ts +0 -203
  30. package/dist/esm/Chart.d.ts.map +0 -1
  31. package/dist/esm/Chart.js +0 -431
  32. package/dist/esm/ChartBuilder.d.ts +0 -339
  33. package/dist/esm/ChartBuilder.d.ts.map +0 -1
  34. package/dist/esm/ChartBuilder.js +0 -1312
  35. package/dist/esm/ChartEditor.d.ts +0 -209
  36. package/dist/esm/ChartEditor.d.ts.map +0 -1
  37. package/dist/esm/ChartEditor.js +0 -182
  38. package/dist/esm/Context.d.ts +0 -14
  39. package/dist/esm/Context.d.ts.map +0 -1
  40. package/dist/esm/Context.js +0 -269
  41. package/dist/esm/Dashboard.d.ts +0 -279
  42. package/dist/esm/Dashboard.d.ts.map +0 -1
  43. package/dist/esm/Dashboard.js +0 -660
  44. package/dist/esm/DateRangePicker/Calendar.d.ts +0 -17
  45. package/dist/esm/DateRangePicker/Calendar.d.ts.map +0 -1
  46. package/dist/esm/DateRangePicker/Calendar.js +0 -164
  47. package/dist/esm/DateRangePicker/DateRangePicker.d.ts +0 -39
  48. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +0 -1
  49. package/dist/esm/DateRangePicker/DateRangePicker.js +0 -95
  50. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +0 -22
  51. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +0 -1
  52. package/dist/esm/DateRangePicker/DateRangePickerButton.js +0 -134
  53. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +0 -25
  54. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +0 -1
  55. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +0 -260
  56. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +0 -80
  57. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +0 -1
  58. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +0 -521
  59. package/dist/esm/DateRangePicker/index.d.ts +0 -3
  60. package/dist/esm/DateRangePicker/index.d.ts.map +0 -1
  61. package/dist/esm/DateRangePicker/index.js +0 -2
  62. package/dist/esm/QuillProvider.d.ts +0 -163
  63. package/dist/esm/QuillProvider.d.ts.map +0 -1
  64. package/dist/esm/QuillProvider.js +0 -104
  65. package/dist/esm/ReportBuilder.d.ts +0 -318
  66. package/dist/esm/ReportBuilder.d.ts.map +0 -1
  67. package/dist/esm/ReportBuilder.js +0 -3266
  68. package/dist/esm/SQLEditor.d.ts +0 -272
  69. package/dist/esm/SQLEditor.d.ts.map +0 -1
  70. package/dist/esm/SQLEditor.js +0 -509
  71. package/dist/esm/Table.d.ts +0 -167
  72. package/dist/esm/Table.d.ts.map +0 -1
  73. package/dist/esm/Table.js +0 -215
  74. package/dist/esm/TableChart.d.ts +0 -15
  75. package/dist/esm/TableChart.d.ts.map +0 -1
  76. package/dist/esm/TableChart.js +0 -95
  77. package/dist/esm/assets/ArrowDownHeadIcon.d.ts +0 -5
  78. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +0 -1
  79. package/dist/esm/assets/ArrowDownHeadIcon.js +0 -3
  80. package/dist/esm/assets/ArrowDownIcon.d.ts +0 -5
  81. package/dist/esm/assets/ArrowDownIcon.d.ts.map +0 -1
  82. package/dist/esm/assets/ArrowDownIcon.js +0 -3
  83. package/dist/esm/assets/ArrowDownRightIcon.d.ts +0 -5
  84. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +0 -1
  85. package/dist/esm/assets/ArrowDownRightIcon.js +0 -3
  86. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts +0 -5
  87. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +0 -1
  88. package/dist/esm/assets/ArrowLeftHeadIcon.js +0 -3
  89. package/dist/esm/assets/ArrowRightHeadIcon.d.ts +0 -5
  90. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +0 -1
  91. package/dist/esm/assets/ArrowRightHeadIcon.js +0 -3
  92. package/dist/esm/assets/ArrowRightIcon.d.ts +0 -5
  93. package/dist/esm/assets/ArrowRightIcon.d.ts.map +0 -1
  94. package/dist/esm/assets/ArrowRightIcon.js +0 -3
  95. package/dist/esm/assets/ArrowUpHeadIcon.d.ts +0 -5
  96. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +0 -1
  97. package/dist/esm/assets/ArrowUpHeadIcon.js +0 -3
  98. package/dist/esm/assets/ArrowUpIcon.d.ts +0 -5
  99. package/dist/esm/assets/ArrowUpIcon.d.ts.map +0 -1
  100. package/dist/esm/assets/ArrowUpIcon.js +0 -3
  101. package/dist/esm/assets/ArrowUpRightIcon.d.ts +0 -5
  102. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +0 -1
  103. package/dist/esm/assets/ArrowUpRightIcon.js +0 -3
  104. package/dist/esm/assets/CalendarIcon.d.ts +0 -5
  105. package/dist/esm/assets/CalendarIcon.d.ts.map +0 -1
  106. package/dist/esm/assets/CalendarIcon.js +0 -3
  107. package/dist/esm/assets/CalendarNormalIcon.d.ts +0 -5
  108. package/dist/esm/assets/CalendarNormalIcon.d.ts.map +0 -1
  109. package/dist/esm/assets/CalendarNormalIcon.js +0 -3
  110. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts +0 -5
  111. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +0 -1
  112. package/dist/esm/assets/DoubleArrowLeftHeadIcon.js +0 -3
  113. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts +0 -5
  114. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +0 -1
  115. package/dist/esm/assets/DoubleArrowRightHeadIcon.js +0 -3
  116. package/dist/esm/assets/ExclamationFilledIcon.d.ts +0 -5
  117. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +0 -1
  118. package/dist/esm/assets/ExclamationFilledIcon.js +0 -3
  119. package/dist/esm/assets/FilterIcon.d.ts +0 -5
  120. package/dist/esm/assets/FilterIcon.d.ts.map +0 -1
  121. package/dist/esm/assets/FilterIcon.js +0 -3
  122. package/dist/esm/assets/LoadingSpinner.d.ts +0 -5
  123. package/dist/esm/assets/LoadingSpinner.d.ts.map +0 -1
  124. package/dist/esm/assets/LoadingSpinner.js +0 -3
  125. package/dist/esm/assets/RefreshIcon.d.ts +0 -5
  126. package/dist/esm/assets/RefreshIcon.d.ts.map +0 -1
  127. package/dist/esm/assets/RefreshIcon.js +0 -3
  128. package/dist/esm/assets/SearchIcon.d.ts +0 -5
  129. package/dist/esm/assets/SearchIcon.d.ts.map +0 -1
  130. package/dist/esm/assets/SearchIcon.js +0 -3
  131. package/dist/esm/assets/UpLeftArrowsIcon.d.ts +0 -5
  132. package/dist/esm/assets/UpLeftArrowsIcon.d.ts.map +0 -1
  133. package/dist/esm/assets/UpLeftArrowsIcon.js +0 -3
  134. package/dist/esm/assets/XCircleIcon.d.ts +0 -5
  135. package/dist/esm/assets/XCircleIcon.d.ts.map +0 -1
  136. package/dist/esm/assets/XCircleIcon.js +0 -3
  137. package/dist/esm/assets/XIcon.d.ts +0 -5
  138. package/dist/esm/assets/XIcon.d.ts.map +0 -1
  139. package/dist/esm/assets/XIcon.js +0 -3
  140. package/dist/esm/assets/index.d.ts +0 -22
  141. package/dist/esm/assets/index.d.ts.map +0 -1
  142. package/dist/esm/assets/index.js +0 -21
  143. package/dist/esm/components/Banner/index.d.ts +0 -3
  144. package/dist/esm/components/Banner/index.d.ts.map +0 -1
  145. package/dist/esm/components/Banner/index.js +0 -24
  146. package/dist/esm/components/BigModal/BigModal.d.ts +0 -15
  147. package/dist/esm/components/BigModal/BigModal.d.ts.map +0 -1
  148. package/dist/esm/components/BigModal/BigModal.js +0 -56
  149. package/dist/esm/components/Chart/BarChart.d.ts +0 -23
  150. package/dist/esm/components/Chart/BarChart.d.ts.map +0 -1
  151. package/dist/esm/components/Chart/BarChart.js +0 -110
  152. package/dist/esm/components/Chart/BarList.d.ts +0 -26
  153. package/dist/esm/components/Chart/BarList.d.ts.map +0 -1
  154. package/dist/esm/components/Chart/BarList.js +0 -148
  155. package/dist/esm/components/Chart/ChartError.d.ts +0 -10
  156. package/dist/esm/components/Chart/ChartError.d.ts.map +0 -1
  157. package/dist/esm/components/Chart/ChartError.js +0 -65
  158. package/dist/esm/components/Chart/ChartSkeleton.d.ts +0 -8
  159. package/dist/esm/components/Chart/ChartSkeleton.d.ts.map +0 -1
  160. package/dist/esm/components/Chart/ChartSkeleton.js +0 -19
  161. package/dist/esm/components/Chart/ChartTooltip.d.ts +0 -31
  162. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +0 -1
  163. package/dist/esm/components/Chart/ChartTooltip.js +0 -234
  164. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +0 -6
  165. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +0 -1
  166. package/dist/esm/components/Chart/ChartTooltipFrame.js +0 -14
  167. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts +0 -11
  168. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts.map +0 -1
  169. package/dist/esm/components/Chart/ChartTooltipGroup.js +0 -23
  170. package/dist/esm/components/Chart/ChartTooltipRow.d.ts +0 -8
  171. package/dist/esm/components/Chart/ChartTooltipRow.d.ts.map +0 -1
  172. package/dist/esm/components/Chart/ChartTooltipRow.js +0 -41
  173. package/dist/esm/components/Chart/LineChart.d.ts +0 -29
  174. package/dist/esm/components/Chart/LineChart.d.ts.map +0 -1
  175. package/dist/esm/components/Chart/LineChart.js +0 -163
  176. package/dist/esm/components/Chart/PieChart.d.ts +0 -62
  177. package/dist/esm/components/Chart/PieChart.d.ts.map +0 -1
  178. package/dist/esm/components/Chart/PieChart.js +0 -195
  179. package/dist/esm/components/Dashboard/ChartComponent.d.ts +0 -4
  180. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +0 -1
  181. package/dist/esm/components/Dashboard/ChartComponent.js +0 -60
  182. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +0 -38
  183. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +0 -1
  184. package/dist/esm/components/Dashboard/DashboardFilter.js +0 -89
  185. package/dist/esm/components/Dashboard/DashboardSection.d.ts +0 -7
  186. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +0 -1
  187. package/dist/esm/components/Dashboard/DashboardSection.js +0 -22
  188. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +0 -3
  189. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +0 -1
  190. package/dist/esm/components/Dashboard/DashboardSectionContainer.js +0 -10
  191. package/dist/esm/components/Dashboard/DataLoader.d.ts +0 -44
  192. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +0 -1
  193. package/dist/esm/components/Dashboard/DataLoader.js +0 -190
  194. package/dist/esm/components/Dashboard/MetricComponent.d.ts +0 -4
  195. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +0 -1
  196. package/dist/esm/components/Dashboard/MetricComponent.js +0 -133
  197. package/dist/esm/components/Dashboard/TableComponent.d.ts +0 -15
  198. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +0 -1
  199. package/dist/esm/components/Dashboard/TableComponent.js +0 -62
  200. package/dist/esm/components/Dropdown/Dropdown.d.ts +0 -14
  201. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +0 -1
  202. package/dist/esm/components/Dropdown/Dropdown.js +0 -69
  203. package/dist/esm/components/Dropdown/DropdownItem.d.ts +0 -11
  204. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +0 -1
  205. package/dist/esm/components/Dropdown/DropdownItem.js +0 -37
  206. package/dist/esm/components/Dropdown/index.d.ts +0 -3
  207. package/dist/esm/components/Dropdown/index.d.ts.map +0 -1
  208. package/dist/esm/components/Dropdown/index.js +0 -2
  209. package/dist/esm/components/Modal/Modal.d.ts +0 -15
  210. package/dist/esm/components/Modal/Modal.d.ts.map +0 -1
  211. package/dist/esm/components/Modal/Modal.js +0 -64
  212. package/dist/esm/components/Modal/index.d.ts +0 -2
  213. package/dist/esm/components/Modal/index.d.ts.map +0 -1
  214. package/dist/esm/components/Modal/index.js +0 -1
  215. package/dist/esm/components/QuillCard.d.ts +0 -9
  216. package/dist/esm/components/QuillCard.d.ts.map +0 -1
  217. package/dist/esm/components/QuillCard.js +0 -56
  218. package/dist/esm/components/QuillMultiSelect.d.ts +0 -11
  219. package/dist/esm/components/QuillMultiSelect.d.ts.map +0 -1
  220. package/dist/esm/components/QuillMultiSelect.js +0 -193
  221. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +0 -11
  222. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +0 -1
  223. package/dist/esm/components/QuillMultiSelectWithCombo.js +0 -215
  224. package/dist/esm/components/QuillSelect.d.ts +0 -6
  225. package/dist/esm/components/QuillSelect.d.ts.map +0 -1
  226. package/dist/esm/components/QuillSelect.js +0 -136
  227. package/dist/esm/components/QuillSelectWithCombo.d.ts +0 -6
  228. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +0 -1
  229. package/dist/esm/components/QuillSelectWithCombo.js +0 -163
  230. package/dist/esm/components/QuillTable.d.ts +0 -31
  231. package/dist/esm/components/QuillTable.d.ts.map +0 -1
  232. package/dist/esm/components/QuillTable.js +0 -261
  233. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +0 -34
  234. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +0 -1
  235. package/dist/esm/components/ReportBuilder/AddColumnModal.js +0 -145
  236. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +0 -26
  237. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +0 -1
  238. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +0 -36
  239. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +0 -23
  240. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +0 -1
  241. package/dist/esm/components/ReportBuilder/AddSortPopover.js +0 -73
  242. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +0 -30
  243. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +0 -1
  244. package/dist/esm/components/ReportBuilder/FilterModal.js +0 -576
  245. package/dist/esm/components/ReportBuilder/ast.d.ts +0 -523
  246. package/dist/esm/components/ReportBuilder/ast.d.ts.map +0 -1
  247. package/dist/esm/components/ReportBuilder/ast.js +0 -230
  248. package/dist/esm/components/ReportBuilder/bigDateMap.d.ts +0 -7
  249. package/dist/esm/components/ReportBuilder/bigDateMap.d.ts.map +0 -1
  250. package/dist/esm/components/ReportBuilder/bigDateMap.js +0 -687
  251. package/dist/esm/components/ReportBuilder/constants.d.ts +0 -117
  252. package/dist/esm/components/ReportBuilder/constants.d.ts.map +0 -1
  253. package/dist/esm/components/ReportBuilder/constants.js +0 -161
  254. package/dist/esm/components/ReportBuilder/convert.d.ts +0 -65
  255. package/dist/esm/components/ReportBuilder/convert.d.ts.map +0 -1
  256. package/dist/esm/components/ReportBuilder/convert.js +0 -717
  257. package/dist/esm/components/ReportBuilder/operators.d.ts +0 -462
  258. package/dist/esm/components/ReportBuilder/operators.d.ts.map +0 -1
  259. package/dist/esm/components/ReportBuilder/operators.js +0 -581
  260. package/dist/esm/components/ReportBuilder/pivot.d.ts +0 -16
  261. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +0 -1
  262. package/dist/esm/components/ReportBuilder/pivot.js +0 -1
  263. package/dist/esm/components/ReportBuilder/postgres.d.ts +0 -150
  264. package/dist/esm/components/ReportBuilder/postgres.d.ts.map +0 -1
  265. package/dist/esm/components/ReportBuilder/postgres.js +0 -355
  266. package/dist/esm/components/ReportBuilder/schema.d.ts +0 -23
  267. package/dist/esm/components/ReportBuilder/schema.d.ts.map +0 -1
  268. package/dist/esm/components/ReportBuilder/schema.js +0 -1
  269. package/dist/esm/components/ReportBuilder/ui.d.ts +0 -119
  270. package/dist/esm/components/ReportBuilder/ui.d.ts.map +0 -1
  271. package/dist/esm/components/ReportBuilder/ui.js +0 -382
  272. package/dist/esm/components/ReportBuilder/util.d.ts +0 -76
  273. package/dist/esm/components/ReportBuilder/util.d.ts.map +0 -1
  274. package/dist/esm/components/ReportBuilder/util.js +0 -729
  275. package/dist/esm/components/UiComponents.d.ts +0 -221
  276. package/dist/esm/components/UiComponents.d.ts.map +0 -1
  277. package/dist/esm/components/UiComponents.js +0 -571
  278. package/dist/esm/components/selectUtils.d.ts +0 -9
  279. package/dist/esm/components/selectUtils.d.ts.map +0 -1
  280. package/dist/esm/components/selectUtils.js +0 -17
  281. package/dist/esm/contexts/BaseColorContext.d.ts +0 -4
  282. package/dist/esm/contexts/BaseColorContext.d.ts.map +0 -1
  283. package/dist/esm/contexts/BaseColorContext.js +0 -3
  284. package/dist/esm/contexts/HoveredValueContext.d.ts +0 -8
  285. package/dist/esm/contexts/HoveredValueContext.d.ts.map +0 -1
  286. package/dist/esm/contexts/HoveredValueContext.js +0 -5
  287. package/dist/esm/contexts/RootStylesContext.d.ts +0 -4
  288. package/dist/esm/contexts/RootStylesContext.d.ts.map +0 -1
  289. package/dist/esm/contexts/RootStylesContext.js +0 -3
  290. package/dist/esm/contexts/SelectedValueContext.d.ts +0 -8
  291. package/dist/esm/contexts/SelectedValueContext.d.ts.map +0 -1
  292. package/dist/esm/contexts/SelectedValueContext.js +0 -6
  293. package/dist/esm/contexts/index.d.ts +0 -5
  294. package/dist/esm/contexts/index.d.ts.map +0 -1
  295. package/dist/esm/contexts/index.js +0 -4
  296. package/dist/esm/hooks/index.d.ts +0 -6
  297. package/dist/esm/hooks/index.d.ts.map +0 -1
  298. package/dist/esm/hooks/index.js +0 -5
  299. package/dist/esm/hooks/useAstToFilterTree.d.ts +0 -11
  300. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +0 -1
  301. package/dist/esm/hooks/useAstToFilterTree.js +0 -24
  302. package/dist/esm/hooks/useDashboard.d.ts +0 -7
  303. package/dist/esm/hooks/useDashboard.d.ts.map +0 -1
  304. package/dist/esm/hooks/useDashboard.js +0 -69
  305. package/dist/esm/hooks/useExport.d.ts +0 -6
  306. package/dist/esm/hooks/useExport.d.ts.map +0 -1
  307. package/dist/esm/hooks/useExport.js +0 -125
  308. package/dist/esm/hooks/useFormat.d.ts +0 -5
  309. package/dist/esm/hooks/useFormat.d.ts.map +0 -1
  310. package/dist/esm/hooks/useFormat.js +0 -25
  311. package/dist/esm/hooks/useInternalState.d.ts +0 -4
  312. package/dist/esm/hooks/useInternalState.d.ts.map +0 -1
  313. package/dist/esm/hooks/useInternalState.js +0 -14
  314. package/dist/esm/hooks/useOnClickOutside.d.ts +0 -3
  315. package/dist/esm/hooks/useOnClickOutside.d.ts.map +0 -1
  316. package/dist/esm/hooks/useOnClickOutside.js +0 -18
  317. package/dist/esm/hooks/useOnWindowResize.d.ts +0 -5
  318. package/dist/esm/hooks/useOnWindowResize.d.ts.map +0 -1
  319. package/dist/esm/hooks/useOnWindowResize.js +0 -14
  320. package/dist/esm/hooks/useQuill.d.ts +0 -37
  321. package/dist/esm/hooks/useQuill.d.ts.map +0 -1
  322. package/dist/esm/hooks/useQuill.js +0 -182
  323. package/dist/esm/hooks/useSelectOnKeyDown.d.ts +0 -3
  324. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +0 -1
  325. package/dist/esm/hooks/useSelectOnKeyDown.js +0 -63
  326. package/dist/esm/hooks/useTheme.d.ts +0 -7
  327. package/dist/esm/hooks/useTheme.d.ts.map +0 -1
  328. package/dist/esm/hooks/useTheme.js +0 -10
  329. package/dist/esm/index.d.ts +0 -29
  330. package/dist/esm/index.d.ts.map +0 -1
  331. package/dist/esm/index.js +0 -16
  332. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +0 -28
  333. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +0 -1
  334. package/dist/esm/internals/ReportBuilder/PivotForm.js +0 -62
  335. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +0 -39
  336. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +0 -1
  337. package/dist/esm/internals/ReportBuilder/PivotList.js +0 -89
  338. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +0 -146
  339. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +0 -1
  340. package/dist/esm/internals/ReportBuilder/PivotModal.js +0 -1210
  341. package/dist/esm/lib/font.d.ts +0 -14
  342. package/dist/esm/lib/font.d.ts.map +0 -1
  343. package/dist/esm/lib/font.js +0 -13
  344. package/dist/esm/lib/index.d.ts +0 -4
  345. package/dist/esm/lib/index.d.ts.map +0 -1
  346. package/dist/esm/lib/index.js +0 -3
  347. package/dist/esm/lib/inputTypes.d.ts +0 -21
  348. package/dist/esm/lib/inputTypes.d.ts.map +0 -1
  349. package/dist/esm/lib/inputTypes.js +0 -55
  350. package/dist/esm/lib/utils.d.ts +0 -10
  351. package/dist/esm/lib/utils.d.ts.map +0 -1
  352. package/dist/esm/lib/utils.js +0 -35
  353. package/dist/esm/models/Columns.d.ts +0 -12
  354. package/dist/esm/models/Columns.d.ts.map +0 -1
  355. package/dist/esm/models/Columns.js +0 -1
  356. package/dist/esm/models/Filter.d.ts +0 -118
  357. package/dist/esm/models/Filter.d.ts.map +0 -1
  358. package/dist/esm/models/Filter.js +0 -98
  359. package/dist/esm/models/Pagination.d.ts +0 -10
  360. package/dist/esm/models/Pagination.d.ts.map +0 -1
  361. package/dist/esm/models/Pagination.js +0 -1
  362. package/dist/esm/models/Pivots.d.ts +0 -2
  363. package/dist/esm/models/Pivots.d.ts.map +0 -1
  364. package/dist/esm/models/Pivots.js +0 -1
  365. package/dist/esm/models/Report.d.ts +0 -103
  366. package/dist/esm/models/Report.d.ts.map +0 -1
  367. package/dist/esm/models/Report.js +0 -1
  368. package/dist/esm/models/Tables.d.ts +0 -8
  369. package/dist/esm/models/Tables.d.ts.map +0 -1
  370. package/dist/esm/models/Tables.js +0 -1
  371. package/dist/esm/utils/aggregate.d.ts +0 -4
  372. package/dist/esm/utils/aggregate.d.ts.map +0 -1
  373. package/dist/esm/utils/aggregate.js +0 -422
  374. package/dist/esm/utils/astFilterProcessing.d.ts +0 -36
  375. package/dist/esm/utils/astFilterProcessing.d.ts.map +0 -1
  376. package/dist/esm/utils/astFilterProcessing.js +0 -8084
  377. package/dist/esm/utils/astProcessing.d.ts +0 -26
  378. package/dist/esm/utils/astProcessing.d.ts.map +0 -1
  379. package/dist/esm/utils/astProcessing.js +0 -254
  380. package/dist/esm/utils/axisFormatter.d.ts +0 -20
  381. package/dist/esm/utils/axisFormatter.d.ts.map +0 -1
  382. package/dist/esm/utils/axisFormatter.js +0 -179
  383. package/dist/esm/utils/color.d.ts +0 -44
  384. package/dist/esm/utils/color.d.ts.map +0 -1
  385. package/dist/esm/utils/color.js +0 -425
  386. package/dist/esm/utils/columnProcessing.d.ts +0 -13
  387. package/dist/esm/utils/columnProcessing.d.ts.map +0 -1
  388. package/dist/esm/utils/columnProcessing.js +0 -260
  389. package/dist/esm/utils/constants.d.ts +0 -2
  390. package/dist/esm/utils/constants.d.ts.map +0 -1
  391. package/dist/esm/utils/constants.js +0 -1
  392. package/dist/esm/utils/crypto.d.ts +0 -2
  393. package/dist/esm/utils/crypto.d.ts.map +0 -1
  394. package/dist/esm/utils/crypto.js +0 -10
  395. package/dist/esm/utils/csv.d.ts +0 -6
  396. package/dist/esm/utils/csv.d.ts.map +0 -1
  397. package/dist/esm/utils/csv.js +0 -78
  398. package/dist/esm/utils/dashboard.d.ts +0 -13
  399. package/dist/esm/utils/dashboard.d.ts.map +0 -1
  400. package/dist/esm/utils/dashboard.js +0 -171
  401. package/dist/esm/utils/dataFetcher.d.ts +0 -3
  402. package/dist/esm/utils/dataFetcher.d.ts.map +0 -1
  403. package/dist/esm/utils/dataFetcher.js +0 -199
  404. package/dist/esm/utils/dataProcessing.d.ts +0 -10
  405. package/dist/esm/utils/dataProcessing.d.ts.map +0 -1
  406. package/dist/esm/utils/dataProcessing.js +0 -144
  407. package/dist/esm/utils/dates.d.ts +0 -20
  408. package/dist/esm/utils/dates.d.ts.map +0 -1
  409. package/dist/esm/utils/dates.js +0 -95
  410. package/dist/esm/utils/error.d.ts +0 -5
  411. package/dist/esm/utils/error.d.ts.map +0 -1
  412. package/dist/esm/utils/error.js +0 -8
  413. package/dist/esm/utils/errorProcessing.d.ts +0 -2
  414. package/dist/esm/utils/errorProcessing.d.ts.map +0 -1
  415. package/dist/esm/utils/errorProcessing.js +0 -5
  416. package/dist/esm/utils/filterConstants.d.ts +0 -34
  417. package/dist/esm/utils/filterConstants.d.ts.map +0 -1
  418. package/dist/esm/utils/filterConstants.js +0 -33
  419. package/dist/esm/utils/filterProcessing.d.ts +0 -10
  420. package/dist/esm/utils/filterProcessing.d.ts.map +0 -1
  421. package/dist/esm/utils/filterProcessing.js +0 -232
  422. package/dist/esm/utils/getDomain.d.ts +0 -8
  423. package/dist/esm/utils/getDomain.d.ts.map +0 -1
  424. package/dist/esm/utils/getDomain.js +0 -52
  425. package/dist/esm/utils/logging.d.ts +0 -2
  426. package/dist/esm/utils/logging.d.ts.map +0 -1
  427. package/dist/esm/utils/logging.js +0 -7
  428. package/dist/esm/utils/merge.d.ts +0 -2
  429. package/dist/esm/utils/merge.d.ts.map +0 -1
  430. package/dist/esm/utils/merge.js +0 -18
  431. package/dist/esm/utils/monacoConfig.d.ts +0 -21
  432. package/dist/esm/utils/monacoConfig.d.ts.map +0 -1
  433. package/dist/esm/utils/monacoConfig.js +0 -319
  434. package/dist/esm/utils/paginationProcessing.d.ts +0 -5
  435. package/dist/esm/utils/paginationProcessing.d.ts.map +0 -1
  436. package/dist/esm/utils/paginationProcessing.js +0 -25
  437. package/dist/esm/utils/parserBigQuery.d.ts +0 -6
  438. package/dist/esm/utils/parserBigQuery.d.ts.map +0 -1
  439. package/dist/esm/utils/parserBigQuery.js +0 -52
  440. package/dist/esm/utils/parserPostgres.d.ts +0 -3
  441. package/dist/esm/utils/parserPostgres.d.ts.map +0 -1
  442. package/dist/esm/utils/parserPostgres.js +0 -37
  443. package/dist/esm/utils/pivotConstructor.d.ts +0 -7
  444. package/dist/esm/utils/pivotConstructor.d.ts.map +0 -1
  445. package/dist/esm/utils/pivotConstructor.js +0 -151
  446. package/dist/esm/utils/pivotProcessing.d.ts +0 -17
  447. package/dist/esm/utils/pivotProcessing.d.ts.map +0 -1
  448. package/dist/esm/utils/pivotProcessing.js +0 -132
  449. package/dist/esm/utils/queryConstructor.d.ts +0 -7
  450. package/dist/esm/utils/queryConstructor.d.ts.map +0 -1
  451. package/dist/esm/utils/queryConstructor.js +0 -223
  452. package/dist/esm/utils/report.d.ts +0 -10
  453. package/dist/esm/utils/report.d.ts.map +0 -1
  454. package/dist/esm/utils/report.js +0 -174
  455. package/dist/esm/utils/schema.d.ts +0 -6
  456. package/dist/esm/utils/schema.d.ts.map +0 -1
  457. package/dist/esm/utils/schema.js +0 -153
  458. package/dist/esm/utils/styles.d.ts +0 -17
  459. package/dist/esm/utils/styles.d.ts.map +0 -1
  460. package/dist/esm/utils/styles.js +0 -16
  461. package/dist/esm/utils/tableProcessing.d.ts +0 -45
  462. package/dist/esm/utils/tableProcessing.d.ts.map +0 -1
  463. package/dist/esm/utils/tableProcessing.js +0 -293
  464. package/dist/esm/utils/textProcessing.d.ts +0 -6
  465. package/dist/esm/utils/textProcessing.d.ts.map +0 -1
  466. package/dist/esm/utils/textProcessing.js +0 -49
  467. package/dist/esm/utils/validation.d.ts +0 -9
  468. package/dist/esm/utils/validation.d.ts.map +0 -1
  469. package/dist/esm/utils/validation.js +0 -20
  470. package/dist/esm/utils/valueFormatter.d.ts +0 -29
  471. package/dist/esm/utils/valueFormatter.d.ts.map +0 -1
  472. package/dist/esm/utils/valueFormatter.js +0 -342
  473. package/dist/esm/utils/width.d.ts +0 -12
  474. package/dist/esm/utils/width.d.ts.map +0 -1
  475. package/dist/esm/utils/width.js +0 -21
@@ -1,729 +0,0 @@
1
- // A collection of reusable, pure, utility functions for the Report Builder.
2
- import { getQuarter, format, addMinutes } from 'date-fns';
3
- import { DATE_DESCRIPTION_MAP } from './bigDateMap';
4
- import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
5
- import { isAfterBigQuery, isBeforeBigQuery, isEqualsBigQuery, isInTheLastIntervalBigQuery, isTheCurrentIntervalBigQuery, } from '../../utils/parserBigQuery';
6
- import { isInTheLastIntervalPostgres, isTheCurrentIntervalPostgres, } from '../../utils/parserPostgres';
7
- /**
8
- * A node that is "in" or "not in" where none of the variants are selected.
9
- */
10
- export const isNodeEmptyCollection = (node) => {
11
- return (['IN', 'NOT IN'].includes(node.operator) &&
12
- node.right.type === 'expr_list' &&
13
- node.right.value.length === 1 &&
14
- node.right.value[0].type === 'function' &&
15
- ['lower', 'upper'].includes(node.right.value[0].name.toLowerCase()) &&
16
- node.right.value[0].args.type === 'expr_list' &&
17
- node.right.value[0].args.value.length === 1 &&
18
- node.right.value[0].args.value[0].value === '');
19
- };
20
- export function isTopLevelBoolean(node) {
21
- // override normal logic for conditions added by users
22
- if (node.isCondition !== undefined) {
23
- return true;
24
- }
25
- if (!node.parentheses &&
26
- node.type === 'binary_expr' &&
27
- (node.operator === 'AND' || node.operator === 'OR')) {
28
- return true;
29
- }
30
- return false;
31
- }
32
- export function hasTopLevelOrBoolean(ast) {
33
- if (ast.where && ast.where.operator === 'OR') {
34
- return true;
35
- }
36
- return false;
37
- }
38
- // Returns whether the node is a date_trunc function.
39
- export const isDateTrunc = (node) => {
40
- try {
41
- return node &&
42
- node.type === 'function' &&
43
- node.name === 'date_trunc' &&
44
- node.args &&
45
- node.args.type === 'expr_list' &&
46
- node.args?.value.length === 2 &&
47
- node.args?.value[0].type === 'single_quote_string' &&
48
- // The right-side value can either be a double-quoted string literal or
49
- // a cast to some sort of date-ish type. We handle these variants:
50
- // -> date_trunc('month', '2024-01-01'::DATE)
51
- // -> date_trunc('month', "2024-01-01")
52
- // -> date_trunc('month', TIMESTAMP '2024-01-01')
53
- // -> date_trunc('month', DATE '2024-01-01')
54
- node.args?.value[1].type === 'cast'
55
- ? node.args?.value[1].expr.type === 'single_quote_string'
56
- : ['timestamp', 'date', 'column_ref', 'double_quote_string'].includes(node.args?.value[1].type);
57
- }
58
- catch (e) {
59
- return false;
60
- }
61
- };
62
- // Returns whether the given node is a raw column reference.
63
- // TODO: This is a helpful function, let's use it!
64
- // eslint-disable-next-line no-unused-vars
65
- export const isColumnReferenceish = (node) => {
66
- return node && ['column_ref', 'double_quote_string'].includes(node.type);
67
- };
68
- export function generateColumnExpr(name) {
69
- return {
70
- type: 'expr',
71
- expr: {
72
- type: 'column_ref',
73
- table: null,
74
- column: name,
75
- },
76
- as: null,
77
- };
78
- }
79
- // Returns whether this column node is either a date_trunc or extract
80
- // function which implies that it is some sort of date/timestamp type.
81
- // TODO: replace me with actual code that checks against dbtype.
82
- export const isColumnDateish = (col) => {
83
- return (col &&
84
- col?.expr?.type === 'function' &&
85
- ['date_trunc', 'extract'].includes(col?.expr?.name?.toLowerCase()));
86
- };
87
- export function areObjectsEqualish(left, right) {
88
- if (left === null || right === null)
89
- return false;
90
- if (left === undefined || right === undefined)
91
- return false;
92
- if (typeof left !== 'object' || typeof right !== 'object')
93
- return false;
94
- for (const [key, value] of Object.entries(left)) {
95
- if (typeof value === 'string') {
96
- if (!right[key])
97
- return false;
98
- if (right[key].toLowerCase() !== value.toLowerCase())
99
- return false;
100
- }
101
- else if (typeof value === 'object') {
102
- if (!areObjectsEqualish(value, right[key]))
103
- return false;
104
- }
105
- else if (!value) {
106
- if (!right[key])
107
- return false;
108
- }
109
- else {
110
- console.error('unknown type: ', typeof value);
111
- }
112
- }
113
- return true;
114
- }
115
- export function formatDateComparisonNode(node) {
116
- for (const [key, callback] of Object.entries(DATE_DESCRIPTION_MAP)) {
117
- const partialObject = JSON.parse(key);
118
- if (areObjectsEqualish(partialObject, node)) {
119
- return callback(node);
120
- }
121
- }
122
- return null;
123
- }
124
- export function getInTheCurrentIntervalSentence(node, databaseType) {
125
- if (databaseType === 'BigQuery') {
126
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[0].column);
127
- const periodValue = node.left.args.value[1].column.toLowerCase();
128
- return `${dateColumn} in the current ${periodValue}`;
129
- }
130
- return null;
131
- }
132
- const BIG_QUERY_DAY_TO_INTERVAL_MAP = {
133
- '* 365 day': 'year',
134
- '* 30 day': 'month',
135
- '* 7 day': 'week',
136
- };
137
- export function getInTheLastIntervalSentence(node, databaseType) {
138
- if (databaseType === 'BigQuery') {
139
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left.column || node.left.args.value[0].columns || '');
140
- const amount = node.right.args.value[1].expr.value;
141
- let unit = node.right.args.value[1].unit.toLowerCase();
142
- if (unit.includes('*')) {
143
- unit = BIG_QUERY_DAY_TO_INTERVAL_MAP[unit];
144
- }
145
- return `${dateColumn} in the last ${amount} ${unit}${amount > 1 ? 's' : ''}`;
146
- }
147
- return null;
148
- }
149
- export function getInThePreviousIntervalSentence(node, databaseType) {
150
- if (databaseType === 'BigQuery') {
151
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[0].column);
152
- const periodValue = node.left.args.value[1].column.toLowerCase();
153
- return `${dateColumn} in the previous ${periodValue}`;
154
- }
155
- return null;
156
- }
157
- export function getIsEqualsSentence(node, databaseType) {
158
- if (databaseType === 'BigQuery') {
159
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[1].column);
160
- const type = node.right.args.value[1].column.toLowerCase();
161
- const value = node.right.args.value[0].value;
162
- // using date-fns can I parse the date to short month year
163
- const date = new Date(value);
164
- if (type === 'year') {
165
- return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'yyyy')}`;
166
- }
167
- else if (type === 'month') {
168
- return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'MMM yyyy')}`;
169
- }
170
- else if (type === 'quarter') {
171
- return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'QQQ yyyy')}`;
172
- }
173
- return `${dateColumn} is in the ${type} of ${value}`;
174
- }
175
- return null;
176
- }
177
- export function getIsAfterSentence(node, databaseType) {
178
- if (databaseType === 'BigQuery') {
179
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
180
- const value = node.right?.value || node.right?.args?.value[0]?.value || '';
181
- if (!dateColumn || !value) {
182
- return null;
183
- }
184
- return `${dateColumn} is after ${value}`;
185
- }
186
- return null;
187
- }
188
- export function getIsBeforeSentence(node, databaseType) {
189
- if (databaseType === 'BigQuery') {
190
- const dateColumn = snakeAndCamelCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
191
- const value = node.right?.value || node.right?.args?.value[0]?.value || '';
192
- if (!dateColumn || !value) {
193
- return null;
194
- }
195
- return `${dateColumn} is before ${value}`;
196
- }
197
- return null;
198
- }
199
- // "created_at" >= date_trunc ('year', CURRENT_DATE) - INTERVAL '1 year'
200
- // or
201
- // "created_at" >= CURRENT_DATE - INTERVAL '1 year'
202
- // in the last year aka one interval from today
203
- export const isInTheLastInterval = (node, databaseType) => {
204
- if (databaseType && databaseType.toLowerCase() === 'bigquery') {
205
- return isInTheLastIntervalBigQuery(node);
206
- }
207
- return isInTheLastIntervalPostgres(node);
208
- };
209
- export const isAfter = (node, databaseType) => {
210
- if (databaseType && databaseType.toLowerCase() === 'bigquery') {
211
- return isAfterBigQuery(node);
212
- }
213
- };
214
- export const isBefore = (node, databaseType) => {
215
- if (databaseType && databaseType.toLowerCase() === 'bigquery') {
216
- return isBeforeBigQuery(node);
217
- }
218
- };
219
- // "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
220
- // this year
221
- export const isTheCurrentInterval = (node, databaseType) => {
222
- if (databaseType && databaseType.toLowerCase() === 'bigquery') {
223
- return isTheCurrentIntervalBigQuery(node);
224
- }
225
- return isTheCurrentIntervalPostgres(node);
226
- };
227
- // "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
228
- // this year
229
- export const isEquals = (node, databaseType) => {
230
- if (databaseType && databaseType.toLowerCase() === 'bigquery') {
231
- return isEqualsBigQuery(node);
232
- }
233
- return false;
234
- };
235
- export const isThePreviousInterval = (node) => {
236
- const isInsideOfDateTrunc = ['='].includes(node.operator) &&
237
- node.left.name &&
238
- node.left.name.toLowerCase() === 'timestamp_trunc' &&
239
- node.left.type === 'function' &&
240
- node.right.name &&
241
- node.right.name.toLowerCase() === 'timestamp_trunc' &&
242
- node.right.args.value[0]?.name?.toLowerCase() === 'timestamp_sub' &&
243
- node.right.args.value[0].args.value[0].name.toLowerCase() ===
244
- 'current_timestamp';
245
- return isInsideOfDateTrunc;
246
- };
247
- /**
248
- * Returns whether this node is the root of a binary expression
249
- * where the left child is a string but really should be
250
- * interpreted as a column name.
251
- */
252
- export const isColumnComparison = (node) => {
253
- const ops = [
254
- '>=',
255
- '>',
256
- '<=',
257
- '<',
258
- 'AND',
259
- 'OR',
260
- '!=',
261
- '=',
262
- 'LIKE',
263
- 'NOT LIKE',
264
- 'IN',
265
- 'NOT IN',
266
- 'BETWEEN',
267
- '-',
268
- '+',
269
- 'IS NOT',
270
- 'IS',
271
- ];
272
- return (ops.includes(node.operator) &&
273
- node.left &&
274
- (node.left.type === 'column_ref' ||
275
- node.left.type === 'double_quote_string' ||
276
- (node.left.type === 'function' &&
277
- ['lower', 'upper'].includes(node.left.name.toLowerCase()))));
278
- };
279
- // Returns a new date object with timezone adjusted
280
- export const newUTCDate = (dateString) => {
281
- let date = new Date(dateString);
282
- // If the date is invalid, try appending a 1 (eg. "April" => "April 1")
283
- if (Number.isNaN(date.getDate())) {
284
- date = new Date(`${dateString} 1`);
285
- }
286
- date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); // TZ adjust
287
- // Default to using the current year, unless explicitly overridden
288
- const dateYear = date.getFullYear();
289
- if (!dateString.includes(dateYear.toString())) {
290
- date.setFullYear(new Date().getFullYear());
291
- }
292
- return date;
293
- };
294
- const getPeriod = (node, databaseType) => {
295
- if (databaseType === 'BigQuery') {
296
- return node.left.args.value[1]?.column.toLowerCase();
297
- }
298
- else {
299
- return node.left.args.value[0]?.value.toLowerCase();
300
- }
301
- };
302
- /**
303
- * Takes the right side of a dateTruncEquals expression (ie. the suffix)
304
- * and returns a pretty string representation of what that value means.
305
- *
306
- * eg. date_trunc('year', TIMESTAMP '2023-01-01') would be "in 2023"
307
- * eg. date_trunc('month', TIMESTAMP '2023-01-01') would be "in Jan 2023"
308
- * eg. date_trunc('quarter', TIMESTAMP '2023-01-01') would be "in Q1 2023"
309
- */
310
- export function dateTruncSuffixToString(node, databaseType) {
311
- const period = getPeriod(node, databaseType);
312
- const dateNode = node.right.value ? node.right : node.right.args.value[1];
313
- const rawDateStr = dateNode.type === 'cast' ? dateNode.expr.value : dateNode.value;
314
- const date = newUTCDate(rawDateStr);
315
- switch (period) {
316
- case 'year':
317
- return `in ${date.getFullYear()}`;
318
- case 'quarter':
319
- return `in Q${getQuarter(date)} ${date.getFullYear()}`;
320
- case 'month':
321
- return `in ${date.toLocaleString('default', { month: 'short', year: 'numeric' })}`;
322
- case 'week':
323
- return `week of ${date.toDateString()}`;
324
- case 'day':
325
- return `on ${date.toDateString()}`;
326
- case 'hour':
327
- return `hour of ${date.toLocaleString()}`;
328
- default:
329
- return `${period} of ${date}`;
330
- }
331
- }
332
- /**
333
- * Takes an extract binary expression and returns a string version
334
- * of what the AST means.
335
- *
336
- * eg. extract(YEAR FROM "created_at") = 2023 would be "in 2023"
337
- * eg. extract(MONTH FROM "created_at") = 1 would be "in January"
338
- * eg. TODO: add more variants as they come up
339
- */
340
- export function extractSuffixToString(node) {
341
- const period = node.left.args.field.toLowerCase();
342
- const value = node.right.value;
343
- switch (period) {
344
- case 'year': {
345
- return `is ${value}`;
346
- }
347
- case 'month': {
348
- const date = new Date(2000, value - 1, 1);
349
- date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); // TZ adjust
350
- return `in ${date.toLocaleString('default', { month: 'long' })}`;
351
- }
352
- default: {
353
- return `${period} is ${value}`;
354
- }
355
- }
356
- }
357
- export function tryConvertDateEquality(node, databaseType) {
358
- if (isDateTruncEquals(node)) {
359
- const columnNode = node.left.args.value[1];
360
- const columnName = columnNode.column ?? columnNode.value;
361
- const cleanColumnName = snakeAndCamelCaseToTitleCase(columnName.replaceAll('_at', ''));
362
- const prettyDateSuffix = dateTruncSuffixToString(node, databaseType);
363
- return `${cleanColumnName} ${prettyDateSuffix}`;
364
- }
365
- else if (isExtractEquals(node)) {
366
- const columnNode = node.left.args.source;
367
- const columnName = columnNode.column ?? columnNode.value;
368
- const cleanColumnName = snakeAndCamelCaseToTitleCase(columnName.replaceAll('_at', ''));
369
- const prettyDateSuffix = extractSuffixToString(node);
370
- return `${cleanColumnName} ${prettyDateSuffix}`;
371
- }
372
- return undefined;
373
- }
374
- /**
375
- * Returns whether this node is an equality of a date column with a
376
- * date trunc.
377
- */
378
- export const isDateTruncEquals = (node) => {
379
- return (node.type === 'binary_expr' &&
380
- node.operator === '=' &&
381
- isDateTrunc(node.left) &&
382
- (node.right.type === 'single_quote_string' || // is a string literal
383
- (node.right.type === 'cast' &&
384
- node.right.expr.type === 'single_quote_string') || // or is string casted to non-string
385
- isDateTrunc(node.right)) // or is a date_trunc
386
- );
387
- };
388
- /**
389
- * Returns whether this node is an equality of a date column with extract.
390
- */
391
- export const isExtractEquals = (node) => {
392
- return (node.type === 'binary_expr' &&
393
- node.operator === '=' &&
394
- node.left.type === 'extract' &&
395
- node.right.type === 'number');
396
- };
397
- export function showNodeAsRow(node, ast) {
398
- // if the expression is something like status = "completed"
399
- if (node.left.type === 'column_ref') {
400
- return true;
401
- }
402
- if (!['AND', 'OR'].includes(node.operator)) {
403
- return true;
404
- }
405
- if ((ast.left?.left?.left?.left || ast.right?.left?.left?.left) &&
406
- node.left.left?.type === 'column_ref') {
407
- return true;
408
- }
409
- return false;
410
- }
411
- export function getPostgresBasicType(column) {
412
- if (!column)
413
- return undefined;
414
- let format;
415
- if (column.dataTypeID) {
416
- switch (column.dataTypeID) {
417
- case 16: // boolean
418
- format = 'boolean';
419
- break;
420
- case 20: // int8
421
- case 21: // int2
422
- case 23: // int4
423
- case 700: // float4
424
- case 701: // float8
425
- case 1700: // numeric
426
- format = 'number';
427
- break;
428
- case 1082: // date
429
- case 1083: // time
430
- case 1184: // timestamptz
431
- case 1114: // timestamp
432
- format = 'date';
433
- break;
434
- case 1043: // varchar
435
- default:
436
- format = 'string';
437
- }
438
- }
439
- return format;
440
- }
441
- export const deepCopy = (obj) => JSON.parse(JSON.stringify(obj));
442
- export const trimEndS = (s) => (s.endsWith('s') ? s.slice(0, -1) : s);
443
- const getDateColumnAndPath = (node) => {
444
- // "created_at" <= ...
445
- if (node.left && node.left.type === 'column_ref') {
446
- return { dateColumn: node.left.column, dateColumnPath: 'left.column' };
447
- }
448
- // LOWER("created_at") <= ...
449
- if (node.left &&
450
- node.left.type === 'function' &&
451
- ['lower', 'upper'].includes(node.left.name.toLowerCase()) &&
452
- node.left.args.type == 'expr_list' &&
453
- node.left.args.value.length === 1 &&
454
- node.left.args.value[0].type === 'double_quote_string') {
455
- return {
456
- dateColumn: node.left.args.value[0].value,
457
- dateColumnPath: 'left.args.value.0.value',
458
- };
459
- }
460
- // LOWER("created_at") <= ...
461
- if (node.left &&
462
- node.left.type === 'function' &&
463
- ['lower', 'upper'].includes(node.left.name.toLowerCase()) &&
464
- node.left.args.type == 'expr_list' &&
465
- node.left.args.value.length === 1 &&
466
- node.left.args.value[0].type === 'column_ref') {
467
- return {
468
- dateColumn: node.left.args.value[0].column,
469
- dateColumnPath: 'left.args.value.0.column',
470
- };
471
- }
472
- // date_trunc('...', "...") = ...
473
- if (node.left &&
474
- node.left.type === 'function' &&
475
- node.left.name.toLowerCase() === 'date_trunc' &&
476
- node.left.args.type == 'expr_list' &&
477
- node.left.args.value.length === 2 &&
478
- node.left.args.value[1].type === 'column_ref') {
479
- return {
480
- dateColumn: node.left.args.value[1].column,
481
- dateColumnPath: 'left.args.value.1.column',
482
- };
483
- }
484
- // date_trunc('...', "...") = ...
485
- if (node.left &&
486
- node.left.type === 'function' &&
487
- node.left.name.toLowerCase() === 'date_trunc' &&
488
- node.left.args.type == 'expr_list' &&
489
- node.left.args.value.length === 2 &&
490
- node.left.args.value[1].type === 'double_quote_string') {
491
- return {
492
- dateColumn: node.left.args.value[1].value,
493
- dateColumnPath: 'left.args.value.1.value',
494
- };
495
- }
496
- // unknown
497
- return { dateColumn: null, dateColumnPath: '' };
498
- };
499
- const parseIntervalNode = (node) => {
500
- if (node.type !== 'interval')
501
- return null;
502
- if (node.unit && node.unit.length > 0) {
503
- return {
504
- intervalCount: parseInt(node.expr.value),
505
- intervalType: node.unit,
506
- };
507
- }
508
- const parts = node.expr.value.split(' ');
509
- return {
510
- intervalCount: parts.length > 1 ? parseInt(parts[0]) : 1,
511
- intervalType: trimEndS(parts.length > 1 ? parts[1] : 'year'),
512
- };
513
- };
514
- // Parses the interval and path to the interval (used to change the interval)
515
- // from a node using one of many pre-defined patterns. Otherwise null.
516
- const getIntervalAndPath = (node) => {
517
- if (node.right && node.right.right && node.right.right.type === 'interval') {
518
- const interval = parseIntervalNode(node.right.right);
519
- const { intervalCount, intervalType } = interval ?? {};
520
- return {
521
- intervalCount,
522
- intervalType,
523
- intervalPaths: ['right.right.expr.value'],
524
- };
525
- }
526
- // date_trunc('...', "...") = date_trunc('...', ...)
527
- if (node.left &&
528
- node.left.type === 'function' &&
529
- node.left.name.toLowerCase() === 'date_trunc' &&
530
- node.left.args.type == 'expr_list' &&
531
- node.left.args.value.length === 2 &&
532
- node.right &&
533
- node.right.type === 'function' &&
534
- node.right.name.toLowerCase() === 'date_trunc' &&
535
- node.right.args.type == 'expr_list' &&
536
- node.right.args.value.length === 2) {
537
- // date_trunc('day', "created_at") >= date_trunc('day', CURRENT_DATE - INTERVAL '90 days')
538
- if (node.right &&
539
- node.right.type === 'function' &&
540
- node.right.name.toLowerCase() === 'date_trunc' &&
541
- node.right.args.type == 'expr_list' &&
542
- node.right.args.value.length === 2 &&
543
- node.right.args.value[1].type === 'binary_expr' &&
544
- node.right.args.value[1].right.type === 'interval') {
545
- return parseIntervalNode(node.right.args.value[1].right);
546
- }
547
- const intervalType = node.right.args.value[0].value;
548
- return {
549
- intervalCount: null,
550
- intervalType: trimEndS(intervalType ?? 'year'),
551
- intervalPaths: ['right.args.value.0.value', 'left.args.value.0.value'],
552
- };
553
- }
554
- // "created_at" >= DATE_TRUNC('day', CURRENT_DATE - INTERVAL '90 days')
555
- if (node.left &&
556
- node.left.type === 'column_ref' &&
557
- node.right &&
558
- node.right.type === 'function' &&
559
- node.right.name.toLowerCase() === 'date_trunc' &&
560
- node.right.args.type == 'expr_list' &&
561
- node.right.args.value.length === 2 &&
562
- node.right.args.value[1].type === 'binary_expr' &&
563
- node.right.args.value[1].right &&
564
- node.right.args.value[1].right.type === 'interval') {
565
- const interval = parseIntervalNode(node.right.node.right.args.value[1].right);
566
- const { intervalCount, intervalType } = interval ?? {};
567
- return {
568
- intervalCount,
569
- intervalType,
570
- intervalPaths: ['right.args.value.0.value'],
571
- };
572
- }
573
- // unknown
574
- return { intervalCount: 1, intervalType: '', intervalPaths: [] };
575
- };
576
- const getDateFilterType = (node) => {
577
- if (isDateTruncEquals(node))
578
- return 'equals';
579
- if (node.operator === '>=' &&
580
- node.left &&
581
- node.left.type === 'column_ref' &&
582
- node.right &&
583
- node.right.type === 'binary_expr' &&
584
- node.right.operator == '-' &&
585
- node.right.right &&
586
- node.right.right.type == 'interval') {
587
- // ... >= ... - INTERVAL '...'
588
- return 'in the last';
589
- }
590
- else if (node.operator === '=' &&
591
- node.left?.type === 'function' &&
592
- node.left?.name === 'date_trunc' &&
593
- node.right?.type === 'function' &&
594
- node.right?.name === 'date_trunc' &&
595
- node.right.args.type === 'expr_list' &&
596
- node.right.args.value.length === 2 &&
597
- node.right.args.value[1].type === 'function' &&
598
- ['current_date', 'now'].includes(node.right.args.value[1].name.toLowerCase())) {
599
- // DATE_TRUNC('...', ...) = DATE_TRUNC('...', ...)
600
- return 'in the current';
601
- }
602
- else {
603
- // ... = DATE_TRUNC('...', ... - INTERVAL '...');
604
- return 'in the previous';
605
- }
606
- };
607
- export const getDateFilterInfo = (node) => {
608
- const { dateColumn, dateColumnPath } = getDateColumnAndPath(node);
609
- const interval = getIntervalAndPath(node);
610
- const { intervalCount, intervalType } = interval ?? {};
611
- const intervalPaths = interval?.intervalPaths;
612
- const dateFilterType = getDateFilterType(node);
613
- return {
614
- dateColumn,
615
- dateColumnPath,
616
- dateFilterType,
617
- intervalCount,
618
- intervalType,
619
- intervalPaths,
620
- };
621
- };
622
- // NEED TO UPDATE FOR MORE POTENTIAL CASES
623
- function getNodeTable(node) {
624
- if (node.table) {
625
- return node.table;
626
- }
627
- if (node.args && node.args.value?.[0]?.table) {
628
- return node.args.value[0].table;
629
- }
630
- return null;
631
- }
632
- // Recursively remove filters that don't apply to the given table
633
- function removeNonSelectedTableFilters(node, table, columns) {
634
- if (!node) {
635
- return null;
636
- }
637
- if (node.left && node.left.type !== 'binary_expr') {
638
- const referencedTable = getNodeTable(node.left);
639
- const referencedColumn = node.left.column?.expr?.value ||
640
- node.left.column ||
641
- node.left.value ||
642
- node.left.args?.value?.[0]?.value?.expr?.value ||
643
- node.left.args?.value?.[0]?.column?.expr?.value ||
644
- node.left.args?.value?.[0]?.column ||
645
- node.left.args?.value?.[0]?.value;
646
- if ((referencedTable && referencedTable !== table) ||
647
- !columns.includes(referencedColumn)) {
648
- return null;
649
- }
650
- else {
651
- if (node.left.value) {
652
- node.left.column = node.left.value;
653
- }
654
- else if (node.left.args?.value[0].value) {
655
- node.left.args.value[0].column = node.left.args.value[0].value;
656
- }
657
- return node;
658
- }
659
- }
660
- node.left = removeNonSelectedTableFilters(node.left, table, columns);
661
- node.right = removeNonSelectedTableFilters(node.right, table, columns);
662
- if (node.left && node.right) {
663
- return node;
664
- }
665
- else if (node.left) {
666
- return node.left;
667
- }
668
- else if (node.right) {
669
- return node.right;
670
- }
671
- else {
672
- return null;
673
- }
674
- }
675
- export function removeNonSelectedTableReferences(ast, table, columns) {
676
- ast.columns = ast.columns.filter((col) => {
677
- return col.table === table || col.expr.table === table || !col.expr.table;
678
- });
679
- if (!ast.where)
680
- return ast;
681
- ast.where = removeNonSelectedTableFilters(ast.where, table, columns);
682
- return ast;
683
- }
684
- export function allNumericNodesValidInTree(node) {
685
- if (!node)
686
- return true;
687
- if (node.type === 'number') {
688
- const value = parseFloat(node.value);
689
- if (Number.isNaN(value)) {
690
- return false;
691
- }
692
- else {
693
- node.value = value;
694
- return true;
695
- }
696
- }
697
- const isLeftValid = allNumericNodesValidInTree(node.left);
698
- const isRightValid = allNumericNodesValidInTree(node.right);
699
- return isLeftValid && isRightValid;
700
- }
701
- export function isIdColumn(columnName) {
702
- return (columnName &&
703
- (columnName.toLowerCase() === 'id' ||
704
- columnName.toLowerCase().endsWith('_id') ||
705
- columnName.endsWith('Id')));
706
- }
707
- // This function determines if a node is a custom node type.
708
- // This will parse out date filters and some numeric filters that are unique (between).
709
- export function getCustomSentence(node, databaseType) {
710
- if (isTheCurrentInterval(node, databaseType)) {
711
- return getInTheCurrentIntervalSentence(node, databaseType);
712
- }
713
- else if (isInTheLastInterval(node, databaseType)) {
714
- return getInTheLastIntervalSentence(node, databaseType);
715
- }
716
- else if (isAfter(node, databaseType)) {
717
- return getIsAfterSentence(node, databaseType);
718
- }
719
- else if (isBefore(node, databaseType)) {
720
- return getIsBeforeSentence(node, databaseType);
721
- }
722
- else if (isThePreviousInterval(node)) {
723
- return getInThePreviousIntervalSentence(node, databaseType);
724
- }
725
- else if (isEquals(node, databaseType)) {
726
- return getIsEqualsSentence(node, databaseType);
727
- }
728
- return null;
729
- }