drizzle-cube 0.5.6 → 0.5.8

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 (405) hide show
  1. package/dist/{server/dist-DxegvyZF.cjs → adapters/dist-BOdf-GQO.cjs} +1 -1
  2. package/dist/adapters/express/index.cjs +1 -1
  3. package/dist/adapters/express/index.js +4 -4
  4. package/dist/adapters/fastify/index.cjs +2 -2
  5. package/dist/adapters/fastify/index.js +4 -4
  6. package/dist/{server/google-BXwMolCu.js → adapters/google-CFYljAOF.js} +1 -1
  7. package/dist/adapters/{google-Dgo9-Kb5.cjs → google-DUlXeeDA.cjs} +1 -1
  8. package/dist/adapters/{handler-Odsi9_Rd.js → handler-Cx8QYLk6.js} +20 -6
  9. package/dist/adapters/{handler-C0nUppAK.cjs → handler-CzbCuS6_.cjs} +4 -4
  10. package/dist/adapters/hono/index.cjs +1 -1
  11. package/dist/adapters/hono/index.js +7 -7
  12. package/dist/adapters/{locale-Dy3LcTwN.js → locale-BPB7flIG.js} +16 -1
  13. package/dist/adapters/{locale-Dv6bl_eU.cjs → locale-tIMrNcCr.cjs} +6 -6
  14. package/dist/adapters/mcp-tools.cjs +1 -1
  15. package/dist/adapters/mcp-tools.js +2 -2
  16. package/dist/adapters/mcp-transport-C2QzXm6h.cjs +40 -0
  17. package/dist/adapters/mcp-transport-D0B3S1tB.js +579 -0
  18. package/dist/adapters/nextjs/index.cjs +1 -1
  19. package/dist/adapters/nextjs/index.js +4 -4
  20. package/dist/{server/openai-zpXlGbbF.js → adapters/openai-B5jEiqiB.js} +2139 -948
  21. package/dist/{server/openai-CLWSwD-D.js → adapters/openai-BZdAA7Ji.js} +1 -1
  22. package/dist/adapters/openai-D0musiYP.cjs +17 -0
  23. package/dist/adapters/{openai-BjLV_Wjx.cjs → openai-D_U4V0kT.cjs} +1 -1
  24. package/dist/adapters/{utils-Bd5mzZfk.js → utils-D9JPLmfl.js} +24 -10
  25. package/dist/adapters/{utils-DklqMBHn.cjs → utils-KV37IBIv.cjs} +4 -4
  26. package/dist/adapters/utils.cjs +1 -1
  27. package/dist/adapters/utils.js +1 -1
  28. package/dist/client/charts/ChartLoader.d.ts +1 -1
  29. package/dist/client/charts.js +13 -13
  30. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js +9682 -0
  31. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +1 -0
  32. package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js → RetentionCombinedChart-BPkfcTa8.js} +4 -4
  33. package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js.map → RetentionCombinedChart-BPkfcTa8.js.map} +1 -1
  34. package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js → RetentionHeatmap-DGzLzr7h.js} +3 -3
  35. package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js.map → RetentionHeatmap-DGzLzr7h.js.map} +1 -1
  36. package/dist/client/chunks/{af-ZA-BdL6DOWy.js → af-ZA-BTaChuqI.js} +1 -1
  37. package/dist/client/chunks/{af-ZA-BdL6DOWy.js.map → af-ZA-BTaChuqI.js.map} +1 -1
  38. package/dist/client/chunks/{analysis-builder-MoGvbMRe.js → analysis-builder-MuMIzoRq.js} +244 -244
  39. package/dist/client/chunks/{analysis-builder-MoGvbMRe.js.map → analysis-builder-MuMIzoRq.js.map} +1 -1
  40. package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js → analysis-builder-shared-CYVwSPqt.js} +289 -289
  41. package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js.map → analysis-builder-shared-CYVwSPqt.js.map} +1 -1
  42. package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js → chart-activity-grid-DmruKPab.js} +13 -8
  43. package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js.map → chart-activity-grid-DmruKPab.js.map} +1 -1
  44. package/dist/client/chunks/{chart-area-BZEnT-tf.js → chart-area-DHCPM4Em.js} +3 -3
  45. package/dist/client/chunks/{chart-area-BZEnT-tf.js.map → chart-area-DHCPM4Em.js.map} +1 -1
  46. package/dist/client/chunks/{chart-bar-CTmdv_v0.js → chart-bar-KddciGDv.js} +4 -4
  47. package/dist/client/chunks/{chart-bar-CTmdv_v0.js.map → chart-bar-KddciGDv.js.map} +1 -1
  48. package/dist/client/chunks/{chart-box-plot-CYObdFtp.js → chart-box-plot-DYKfyOI8.js} +3 -3
  49. package/dist/client/chunks/{chart-box-plot-CYObdFtp.js.map → chart-box-plot-DYKfyOI8.js.map} +1 -1
  50. package/dist/client/chunks/{chart-bubble-CjFprySz.js → chart-bubble-CfqiB538.js} +3 -3
  51. package/dist/client/chunks/{chart-bubble-CjFprySz.js.map → chart-bubble-CfqiB538.js.map} +1 -1
  52. package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js → chart-candlestick-Dwc92Mrj.js} +3 -3
  53. package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js.map → chart-candlestick-Dwc92Mrj.js.map} +1 -1
  54. package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js → chart-config-activity-grid-D_UX4NHC.js} +2 -2
  55. package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js.map → chart-config-activity-grid-D_UX4NHC.js.map} +1 -1
  56. package/dist/client/chunks/{chart-config-area-DtYTKZxS.js → chart-config-area-Bq_UsW3x.js} +2 -2
  57. package/dist/client/chunks/{chart-config-area-DtYTKZxS.js.map → chart-config-area-Bq_UsW3x.js.map} +1 -1
  58. package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js → chart-config-bar-_JEGZnAu.js} +2 -2
  59. package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js.map → chart-config-bar-_JEGZnAu.js.map} +1 -1
  60. package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js → chart-config-box-plot-DJ-dWWXA.js} +2 -2
  61. package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js.map → chart-config-box-plot-DJ-dWWXA.js.map} +1 -1
  62. package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js → chart-config-bubble-gIoqVyjZ.js} +2 -2
  63. package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js.map → chart-config-bubble-gIoqVyjZ.js.map} +1 -1
  64. package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js → chart-config-candlestick-N6DchAA3.js} +2 -2
  65. package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js.map → chart-config-candlestick-N6DchAA3.js.map} +1 -1
  66. package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js → chart-config-data-table-d7VBY-y_.js} +2 -2
  67. package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js.map → chart-config-data-table-d7VBY-y_.js.map} +1 -1
  68. package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js → chart-config-funnel-DEYMcxsD.js} +2 -2
  69. package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js.map → chart-config-funnel-DEYMcxsD.js.map} +1 -1
  70. package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js → chart-config-gauge-DSwC04l0.js} +2 -2
  71. package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js.map → chart-config-gauge-DSwC04l0.js.map} +1 -1
  72. package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js → chart-config-heat-map-CfRnRNcw.js} +2 -2
  73. package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js.map → chart-config-heat-map-CfRnRNcw.js.map} +1 -1
  74. package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js → chart-config-kpi-delta-D6BIkHL3.js} +2 -2
  75. package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js.map → chart-config-kpi-delta-D6BIkHL3.js.map} +1 -1
  76. package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js → chart-config-kpi-number-Bx-V9a62.js} +2 -2
  77. package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js.map → chart-config-kpi-number-Bx-V9a62.js.map} +1 -1
  78. package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js → chart-config-kpi-text-CcqC1u-8.js} +2 -2
  79. package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js.map → chart-config-kpi-text-CcqC1u-8.js.map} +1 -1
  80. package/dist/client/chunks/{chart-config-line-BFeCqmKH.js → chart-config-line-Db3jDsWc.js} +2 -2
  81. package/dist/client/chunks/{chart-config-line-BFeCqmKH.js.map → chart-config-line-Db3jDsWc.js.map} +1 -1
  82. package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js → chart-config-markdown-BtRIe8JN.js} +2 -2
  83. package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js.map → chart-config-markdown-BtRIe8JN.js.map} +1 -1
  84. package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js → chart-config-measure-profile-DxRGa-zf.js} +2 -2
  85. package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js.map → chart-config-measure-profile-DxRGa-zf.js.map} +1 -1
  86. package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js → chart-config-pie-DD4SmRTF.js} +2 -2
  87. package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js.map → chart-config-pie-DD4SmRTF.js.map} +1 -1
  88. package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js → chart-config-radar-CC2XAaGr.js} +2 -2
  89. package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js.map → chart-config-radar-CC2XAaGr.js.map} +1 -1
  90. package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js → chart-config-radial-bar-DmxKx1R0.js} +2 -2
  91. package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js.map → chart-config-radial-bar-DmxKx1R0.js.map} +1 -1
  92. package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js → chart-config-sankey-BTnWA7EW.js} +2 -2
  93. package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js.map → chart-config-sankey-BTnWA7EW.js.map} +1 -1
  94. package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js → chart-config-scatter-DSYTjwRb.js} +2 -2
  95. package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js.map → chart-config-scatter-DSYTjwRb.js.map} +1 -1
  96. package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js → chart-config-sunburst-Bwjtdf7X.js} +2 -2
  97. package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js.map → chart-config-sunburst-Bwjtdf7X.js.map} +1 -1
  98. package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js → chart-config-tree-map-BI-oQStO.js} +2 -2
  99. package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js.map → chart-config-tree-map-BI-oQStO.js.map} +1 -1
  100. package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js → chart-config-waterfall-DSnyixbI.js} +2 -2
  101. package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js.map → chart-config-waterfall-DSnyixbI.js.map} +1 -1
  102. package/dist/client/chunks/{chart-data-table-DT4uBZaq.js → chart-data-table-BO4sXsim.js} +842 -834
  103. package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +1 -0
  104. package/dist/client/chunks/{chart-funnel-B9crR3b3.js → chart-funnel-DnWRsmnS.js} +3 -3
  105. package/dist/client/chunks/{chart-funnel-B9crR3b3.js.map → chart-funnel-DnWRsmnS.js.map} +1 -1
  106. package/dist/client/chunks/{chart-gauge-DAMFsicz.js → chart-gauge-CgMeqeGb.js} +3 -3
  107. package/dist/client/chunks/{chart-gauge-DAMFsicz.js.map → chart-gauge-CgMeqeGb.js.map} +1 -1
  108. package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js → chart-heat-map-DcGm9SWK.js} +3 -3
  109. package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js.map → chart-heat-map-DcGm9SWK.js.map} +1 -1
  110. package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js → chart-kpi-delta-C2wKPqCb.js} +6 -6
  111. package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js.map → chart-kpi-delta-C2wKPqCb.js.map} +1 -1
  112. package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js → chart-kpi-number-gWYF44ol.js} +8 -8
  113. package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js.map → chart-kpi-number-gWYF44ol.js.map} +1 -1
  114. package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js → chart-kpi-text-DIYtJtk4.js} +4 -4
  115. package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js.map → chart-kpi-text-DIYtJtk4.js.map} +1 -1
  116. package/dist/client/chunks/{chart-line-BZhzOjRl.js → chart-line-9BEGN5Ti.js} +4 -4
  117. package/dist/client/chunks/{chart-line-BZhzOjRl.js.map → chart-line-9BEGN5Ti.js.map} +1 -1
  118. package/dist/client/chunks/chart-markdown-dgUetjyM.js +3654 -0
  119. package/dist/client/chunks/chart-markdown-dgUetjyM.js.map +1 -0
  120. package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js → chart-measure-profile-ClfpLs4q.js} +4 -4
  121. package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js.map → chart-measure-profile-ClfpLs4q.js.map} +1 -1
  122. package/dist/client/chunks/{chart-pie-CsdzxmSK.js → chart-pie-BjAIhyOi.js} +4 -4
  123. package/dist/client/chunks/{chart-pie-CsdzxmSK.js.map → chart-pie-BjAIhyOi.js.map} +1 -1
  124. package/dist/client/chunks/{chart-radar-C_9RwMKw.js → chart-radar-Dgkcl2bN.js} +4 -4
  125. package/dist/client/chunks/{chart-radar-C_9RwMKw.js.map → chart-radar-Dgkcl2bN.js.map} +1 -1
  126. package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js → chart-radial-bar-DdWJjAhK.js} +4 -4
  127. package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js.map → chart-radial-bar-DdWJjAhK.js.map} +1 -1
  128. package/dist/client/chunks/{chart-sankey-ItraHWH1.js → chart-sankey-M3XpO_ah.js} +3 -3
  129. package/dist/client/chunks/{chart-sankey-ItraHWH1.js.map → chart-sankey-M3XpO_ah.js.map} +1 -1
  130. package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js → chart-scatter-DaHYP_OL.js} +4 -4
  131. package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js.map → chart-scatter-DaHYP_OL.js.map} +1 -1
  132. package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js → chart-sunburst-A_u6lqlS.js} +4 -4
  133. package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js.map → chart-sunburst-A_u6lqlS.js.map} +1 -1
  134. package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js → chart-tree-map-uiwUU4nb.js} +4 -4
  135. package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js.map → chart-tree-map-uiwUU4nb.js.map} +1 -1
  136. package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js → chart-waterfall-BuhMoagf.js} +4 -4
  137. package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js.map → chart-waterfall-BuhMoagf.js.map} +1 -1
  138. package/dist/client/chunks/{charts-core-vZA3zPKb.js → charts-core-jRtb0S2M.js} +2 -2
  139. package/dist/client/chunks/{charts-core-vZA3zPKb.js.map → charts-core-jRtb0S2M.js.map} +1 -1
  140. package/dist/client/chunks/{core-Su6tIYhp.js → core-D7vPfUIe.js} +84 -84
  141. package/dist/client/chunks/{core-Su6tIYhp.js.map → core-D7vPfUIe.js.map} +1 -1
  142. package/dist/client/chunks/{dist-BTq3NoG3.js → dist-zPWyTBdU.js} +1 -1
  143. package/dist/client/chunks/{dist-BTq3NoG3.js.map → dist-zPWyTBdU.js.map} +1 -1
  144. package/dist/client/chunks/{en-US-D-1JPTPv.js → en-US-BE6VoG0o.js} +1 -1
  145. package/dist/client/chunks/{en-US-D-1JPTPv.js.map → en-US-BE6VoG0o.js.map} +1 -1
  146. package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js → exceljs.min-CIqBqwTW.js} +2 -2
  147. package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js.map → exceljs.min-CIqBqwTW.js.map} +1 -1
  148. package/dist/client/chunks/{javascript-YXkoOgWa.js → javascript-DFnKaHmQ.js} +3 -3
  149. package/dist/client/chunks/{javascript-YXkoOgWa.js.map → javascript-DFnKaHmQ.js.map} +1 -1
  150. package/dist/client/chunks/{json-O7MKB_4V.js → json-Cu6rbgWf.js} +1 -1
  151. package/dist/client/chunks/{json-O7MKB_4V.js.map → json-Cu6rbgWf.js.map} +1 -1
  152. package/dist/client/chunks/{nl-NL-BErZMygi.js → nl-NL-CpVs7ox3.js} +7 -2
  153. package/dist/client/chunks/{nl-NL-BErZMygi.js.map → nl-NL-CpVs7ox3.js.map} +1 -1
  154. package/dist/client/chunks/{providers-DX3Vw5kc.js → providers-DwQCKdGW.js} +1 -1
  155. package/dist/client/chunks/{providers-DX3Vw5kc.js.map → providers-DwQCKdGW.js.map} +1 -1
  156. package/dist/client/chunks/{retention-YhT1Oohi.js → retention-ChW9jYdy.js} +1 -1
  157. package/dist/client/chunks/{retention-YhT1Oohi.js.map → retention-ChW9jYdy.js.map} +1 -1
  158. package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js → schema-visualization-DE09kQE3.js} +5 -5
  159. package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js.map → schema-visualization-DE09kQE3.js.map} +1 -1
  160. package/dist/client/chunks/{sql-r2a-9CCK.js → sql-CmVzGP4w.js} +1 -1
  161. package/dist/client/chunks/{sql-r2a-9CCK.js.map → sql-CmVzGP4w.js.map} +1 -1
  162. package/dist/client/chunks/{useDebounce-DGfYXtkm.js → useDirtyStateTracking-CoeQbprt.js} +99 -37
  163. package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +1 -0
  164. package/dist/client/chunks/{useExplainAI-CD0KuKwY.js → useExplainAI-DlnXWdmz.js} +19 -19
  165. package/dist/client/chunks/{useExplainAI-CD0KuKwY.js.map → useExplainAI-DlnXWdmz.js.map} +1 -1
  166. package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js → useNotebookLayout-Ck3Z3uzg.js} +2 -2
  167. package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js.map → useNotebookLayout-Ck3Z3uzg.js.map} +1 -1
  168. package/dist/client/chunks/{utils-D2SCtAkZ.js → utils-CTKNaXS8.js} +40 -13
  169. package/dist/client/chunks/utils-CTKNaXS8.js.map +1 -0
  170. package/dist/client/chunks/{vendor-CfR5hJGc.js → vendor-CPIYyeuD.js} +102 -97
  171. package/dist/client/chunks/vendor-CPIYyeuD.js.map +1 -0
  172. package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +1 -1
  173. package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
  174. package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +1 -1
  175. package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
  176. package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +1 -1
  177. package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +1 -1
  178. package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +1 -1
  179. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
  180. package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +2 -1
  181. package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
  182. package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
  183. package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
  184. package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -1
  185. package/dist/client/components/AnalysisBuilder/LimitSection.d.ts +1 -1
  186. package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +1 -1
  187. package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
  188. package/dist/client/components/AnalyticsPage.d.ts +1 -1
  189. package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
  190. package/dist/client/components/ChartTypeSelector.d.ts +1 -1
  191. package/dist/client/components/ColorPaletteSelector.d.ts +1 -1
  192. package/dist/client/components/DashboardEditModal.d.ts +2 -1
  193. package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +1 -1
  194. package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +1 -1
  195. package/dist/client/components/DashboardGrid.d.ts +3 -1
  196. package/dist/client/components/DashboardThumbnailPlaceholder.d.ts +1 -1
  197. package/dist/client/components/DataBrowser/DataBrowserSidebar.d.ts +1 -1
  198. package/dist/client/components/DataBrowser/DataBrowserToolbar.d.ts +1 -1
  199. package/dist/client/components/DataBrowser/index.d.ts +1 -1
  200. package/dist/client/components/DataHistogram.d.ts +1 -1
  201. package/dist/client/components/DebugModal.d.ts +1 -1
  202. package/dist/client/components/DrillBreadcrumb.d.ts +2 -1
  203. package/dist/client/components/LoadingIndicator.d.ts +1 -1
  204. package/dist/client/components/MobileStackedLayout.d.ts +1 -1
  205. package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
  206. package/dist/client/components/PortletContainer.d.ts +1 -1
  207. package/dist/client/components/PortletFilterConfigModal.d.ts +6 -4
  208. package/dist/client/components/RowManagedLayout.d.ts +1 -1
  209. package/dist/client/components/ScaledGridWrapper.d.ts +1 -1
  210. package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
  211. package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
  212. package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
  213. package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
  214. package/dist/client/components/SchemaVisualization/index.d.ts +1 -1
  215. package/dist/client/components/TextPortletModal.d.ts +1 -1
  216. package/dist/client/components/charts/AxisFormatControls.d.ts +2 -2
  217. package/dist/client/components/charts/ChartContainer.d.ts +1 -1
  218. package/dist/client/components/charts/ChartLegend.d.ts +1 -1
  219. package/dist/client/components/charts/ChartTooltip.d.ts +1 -1
  220. package/dist/client/components/charts/MissingDependencyFallback.d.ts +1 -1
  221. package/dist/client/components/dashboard/DashboardContext.d.ts +113 -0
  222. package/dist/client/components/dashboard/DashboardCoordinator.d.ts +2 -0
  223. package/dist/client/components/dashboard/DashboardFilterBar.d.ts +8 -0
  224. package/dist/client/components/dashboard/DashboardGridSurface.d.ts +8 -0
  225. package/dist/client/components/dashboard/DashboardModals.d.ts +8 -0
  226. package/dist/client/components/dashboard/DashboardProvider.d.ts +2 -0
  227. package/dist/client/components/dashboard/DashboardToolbar.d.ts +11 -0
  228. package/dist/client/components/dashboard/dashboardGridUtils.d.ts +17 -0
  229. package/dist/client/components/dashboard/index.d.ts +13 -0
  230. package/dist/client/components.d.ts +2 -0
  231. package/dist/client/components.js +3 -4
  232. package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
  233. package/dist/client/hooks/useDashboardHook.d.ts +2 -2
  234. package/dist/client/hooks.js +5 -6
  235. package/dist/client/icons.d.ts +1 -1
  236. package/dist/client/icons.js +2 -2
  237. package/dist/client/index.d.ts +2 -0
  238. package/dist/client/index.js +161 -163
  239. package/dist/client/index.js.map +1 -1
  240. package/dist/client/providers/CubeApiProvider.d.ts +1 -1
  241. package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
  242. package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
  243. package/dist/client/providers/CubeProvider.d.ts +1 -1
  244. package/dist/client/providers/I18nProvider.d.ts +1 -1
  245. package/dist/client/providers.js +3 -3
  246. package/dist/client/schema.js +1 -1
  247. package/dist/client/stores/analysisBuilderStore.d.ts +1 -1
  248. package/dist/client/stores/dashboardStore.d.ts +1 -1
  249. package/dist/client/stores/dataBrowserStore.d.ts +1 -1
  250. package/dist/client/stores/notebookStore.d.ts +1 -1
  251. package/dist/client/styles.css +1 -1
  252. package/dist/client/types/drill.d.ts +1 -1
  253. package/dist/client/types.d.ts +7 -2
  254. package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
  255. package/dist/client/utils/filterUtils.d.ts +33 -5
  256. package/dist/client/utils/joinReachability.d.ts +27 -0
  257. package/dist/client/utils.js +6 -7
  258. package/dist/client-bundle-stats.html +1 -1
  259. package/dist/mcp-app/mcp-app.html +78 -52
  260. package/dist/{adapters/dist-Boc63-1q.cjs → server/dist-BOdf-GQO.cjs} +1 -1
  261. package/dist/{adapters/google-CT4kgmBf.js → server/google-CFYljAOF.js} +1 -1
  262. package/dist/server/{google-DzQWXFwF.cjs → google-DUlXeeDA.cjs} +1 -1
  263. package/dist/server/index.cjs +11 -11
  264. package/dist/server/index.d.ts +2 -5050
  265. package/dist/server/index.js +58 -15
  266. package/dist/{adapters/openai-CuUGrKaK.js → server/openai-B5jEiqiB.js} +2139 -948
  267. package/dist/{adapters/openai-DQawCWQb.js → server/openai-BZdAA7Ji.js} +1 -1
  268. package/dist/server/openai-D0musiYP.cjs +17 -0
  269. package/dist/server/{openai-BfiZU0rG.cjs → openai-D_U4V0kT.cjs} +1 -1
  270. package/dist/server/server/adapters/base-adapter.d.ts +287 -0
  271. package/dist/server/server/adapters/databend-adapter.d.ts +114 -0
  272. package/dist/server/server/adapters/duckdb-adapter.d.ts +122 -0
  273. package/dist/server/server/adapters/mysql-adapter.d.ts +122 -0
  274. package/dist/server/server/adapters/postgres-adapter.d.ts +119 -0
  275. package/dist/server/server/adapters/singlestore-adapter.d.ts +4 -0
  276. package/dist/server/server/adapters/snowflake-adapter.d.ts +116 -0
  277. package/dist/server/server/adapters/sqlite-adapter.d.ts +140 -0
  278. package/dist/server/server/agent/chart-validation.d.ts +27 -0
  279. package/dist/server/server/agent/handler.d.ts +25 -0
  280. package/dist/server/server/agent/index.d.ts +11 -0
  281. package/dist/server/server/agent/providers/anthropic.d.ts +24 -0
  282. package/dist/server/server/agent/providers/factory.d.ts +12 -0
  283. package/dist/server/server/agent/providers/google.d.ts +23 -0
  284. package/dist/server/server/agent/providers/index.d.ts +6 -0
  285. package/dist/server/server/agent/providers/openai.d.ts +26 -0
  286. package/dist/server/server/agent/providers/types.d.ts +95 -0
  287. package/dist/server/server/agent/system-prompt.d.ts +5 -0
  288. package/dist/server/server/agent/tools.d.ts +28 -0
  289. package/dist/server/server/agent/types.d.ts +192 -0
  290. package/dist/server/server/ai/discovery.d.ts +62 -0
  291. package/dist/server/server/ai/index.d.ts +10 -0
  292. package/dist/server/server/ai/mcp-prompts.d.ts +83 -0
  293. package/dist/server/server/ai/query-schema.d.ts +258 -0
  294. package/dist/server/server/ai/schemas.d.ts +63 -0
  295. package/dist/server/server/ai/suggestion.d.ts +19 -0
  296. package/dist/server/server/ai/validation.d.ts +34 -0
  297. package/dist/server/server/builders/comparison-query-builder.d.ts +70 -0
  298. package/dist/server/server/builders/cte-builder.d.ts +62 -0
  299. package/dist/server/server/builders/date-time-builder.d.ts +29 -0
  300. package/dist/server/server/builders/filter-builder.d.ts +23 -0
  301. package/dist/server/server/builders/flow-query-builder.d.ts +109 -0
  302. package/dist/server/server/builders/funnel-query-builder.d.ts +134 -0
  303. package/dist/server/server/builders/group-by-builder.d.ts +27 -0
  304. package/dist/server/server/builders/index.d.ts +13 -0
  305. package/dist/server/server/builders/measure-builder.d.ts +142 -0
  306. package/dist/server/server/builders/retention-query-builder.d.ts +100 -0
  307. package/dist/server/server/cache-providers/index.d.ts +5 -0
  308. package/dist/server/server/cache-providers/memory.d.ts +105 -0
  309. package/dist/server/server/cache-utils.d.ts +65 -0
  310. package/dist/server/server/compiler.d.ts +218 -0
  311. package/dist/server/server/cube-utils.d.ts +133 -0
  312. package/dist/server/server/database-utils.d.ts +18 -0
  313. package/dist/server/server/executor.d.ts +183 -0
  314. package/dist/server/server/executors/base-executor.d.ts +16 -0
  315. package/dist/server/server/executors/databend-executor.d.ts +33 -0
  316. package/dist/server/server/executors/duckdb-executor.d.ts +33 -0
  317. package/dist/server/server/executors/index.d.ts +21 -0
  318. package/dist/server/server/executors/mysql-executor.d.ts +27 -0
  319. package/dist/server/server/executors/postgres-executor.d.ts +27 -0
  320. package/dist/server/server/executors/singlestore-executor.d.ts +9 -0
  321. package/dist/server/server/executors/snowflake-executor.d.ts +33 -0
  322. package/dist/server/server/executors/sqlite-executor.d.ts +28 -0
  323. package/dist/server/server/explain/databend-parser.d.ts +16 -0
  324. package/dist/server/server/explain/duckdb-parser.d.ts +28 -0
  325. package/dist/server/server/explain/index.d.ts +9 -0
  326. package/dist/server/server/explain/mysql-parser.d.ts +38 -0
  327. package/dist/server/server/explain/postgres-parser.d.ts +18 -0
  328. package/dist/server/server/explain/snowflake-parser.d.ts +17 -0
  329. package/dist/server/server/explain/sqlite-parser.d.ts +23 -0
  330. package/dist/server/server/filter-cache.d.ts +73 -0
  331. package/dist/server/server/gap-filler.d.ts +42 -0
  332. package/dist/server/server/index.d.ts +36 -0
  333. package/dist/server/server/logical-plan/index.d.ts +14 -0
  334. package/dist/server/server/logical-plan/logical-plan-builder.d.ts +58 -0
  335. package/dist/server/server/logical-plan/logical-planner.d.ts +232 -0
  336. package/dist/server/server/logical-plan/optimiser.d.ts +32 -0
  337. package/dist/server/server/logical-plan/types.d.ts +191 -0
  338. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
  339. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +107 -0
  340. package/dist/server/server/physical-plan/index.d.ts +2 -0
  341. package/dist/server/server/physical-plan/processors/cte-processor.d.ts +6 -0
  342. package/dist/server/server/physical-plan/processors/index.d.ts +6 -0
  343. package/dist/server/server/physical-plan/processors/joins-processor.d.ts +6 -0
  344. package/dist/server/server/physical-plan/processors/predicates-processor.d.ts +6 -0
  345. package/dist/server/server/physical-plan/processors/selection-processor.d.ts +6 -0
  346. package/dist/server/server/physical-plan/processors/shared.d.ts +33 -0
  347. package/dist/server/server/physical-plan/processors/window-processor.d.ts +6 -0
  348. package/dist/server/server/prompts/explain-analysis-prompt.d.ts +47 -0
  349. package/dist/server/server/prompts/index.d.ts +27 -0
  350. package/dist/server/server/prompts/single-step-prompt.d.ts +31 -0
  351. package/dist/server/server/prompts/step0-validation-prompt.d.ts +39 -0
  352. package/dist/server/server/prompts/step1-shape-prompt.d.ts +29 -0
  353. package/dist/server/server/prompts/step2-complete-prompt.d.ts +19 -0
  354. package/dist/server/server/prompts/types.d.ts +37 -0
  355. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +93 -0
  356. package/dist/server/server/resolvers/index.d.ts +6 -0
  357. package/dist/server/server/resolvers/join-path-resolver.d.ts +152 -0
  358. package/dist/server/server/template-substitution.d.ts +57 -0
  359. package/dist/server/server/types/analysis.d.ts +189 -0
  360. package/dist/server/server/types/cache.d.ts +132 -0
  361. package/dist/server/server/types/core.d.ts +164 -0
  362. package/dist/server/server/types/cube.d.ts +530 -0
  363. package/dist/server/server/types/executor.d.ts +156 -0
  364. package/dist/server/server/types/flow.d.ts +143 -0
  365. package/dist/server/server/types/funnel.d.ts +118 -0
  366. package/dist/server/server/types/index.d.ts +11 -0
  367. package/dist/server/server/types/metadata.d.ts +113 -0
  368. package/dist/server/server/types/query.d.ts +153 -0
  369. package/dist/server/server/types/retention.d.ts +141 -0
  370. package/dist/server/server/types/utils.d.ts +11 -0
  371. package/package.json +6 -6
  372. package/dist/adapters/mcp-transport-BCtjU0lC.cjs +0 -40
  373. package/dist/adapters/mcp-transport-DW_Uks-O.js +0 -579
  374. package/dist/adapters/openai-Bgri5TJc.cjs +0 -16
  375. package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js +0 -6696
  376. package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js.map +0 -1
  377. package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js +0 -2660
  378. package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js.map +0 -1
  379. package/dist/client/chunks/chart-data-table-DT4uBZaq.js.map +0 -1
  380. package/dist/client/chunks/chart-markdown-DEtjn8gx.js +0 -3539
  381. package/dist/client/chunks/chart-markdown-DEtjn8gx.js.map +0 -1
  382. package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js +0 -30
  383. package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js.map +0 -1
  384. package/dist/client/chunks/useDebounce-DGfYXtkm.js.map +0 -1
  385. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js +0 -66
  386. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js.map +0 -1
  387. package/dist/client/chunks/utils-D2SCtAkZ.js.map +0 -1
  388. package/dist/client/chunks/vendor-CfR5hJGc.js.map +0 -1
  389. package/dist/server/openai-BwsBio1K.cjs +0 -16
  390. /package/dist/adapters/{express → adapters/express}/index.d.ts +0 -0
  391. /package/dist/adapters/{fastify → adapters/fastify}/index.d.ts +0 -0
  392. /package/dist/adapters/{hono → adapters/hono}/index.d.ts +0 -0
  393. /package/dist/adapters/{locale.d.ts → adapters/locale.d.ts} +0 -0
  394. /package/dist/adapters/{mcp-tools.d.ts → adapters/mcp-tools.d.ts} +0 -0
  395. /package/dist/adapters/{mcp-transport.d.ts → adapters/mcp-transport.d.ts} +0 -0
  396. /package/dist/adapters/{nextjs → adapters/nextjs}/index.d.ts +0 -0
  397. /package/dist/adapters/{types.d.ts → adapters/types.d.ts} +0 -0
  398. /package/dist/adapters/{utils.d.ts → adapters/utils.d.ts} +0 -0
  399. /package/dist/adapters/{anthropic-B_rg0BhK.js → anthropic-CZh4hB-m.js} +0 -0
  400. /package/dist/adapters/{anthropic-BIva8k1r.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  401. /package/dist/adapters/{dist-De5fzUEM.js → dist-CH3hwAUk.js} +0 -0
  402. /package/dist/client/chunks/{rolldown-runtime-CKnJJeip.js → rolldown-runtime-CWhphoD1.js} +0 -0
  403. /package/dist/server/{anthropic-BsNspi1r.js → anthropic-CZh4hB-m.js} +0 -0
  404. /package/dist/server/{anthropic-DsCEX6Fm.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  405. /package/dist/server/{dist-CMWZC51B.js → dist-CH3hwAUk.js} +0 -0
@@ -0,0 +1,530 @@
1
+ import { SQL, AnyColumn, Table, Subquery, View } from 'drizzle-orm';
2
+ import { SecurityContext, DrizzleDatabase, QueryResult, MeasureType, DimensionType, TimeGranularity } from './core';
3
+ import { SemanticQuery } from './query';
4
+ import { FilterCacheManager } from '../filter-cache';
5
+ /**
6
+ * Any queryable relation that can be used in FROM/JOIN clauses
7
+ * Supports tables, views, subqueries, and raw SQL expressions
8
+ */
9
+ export type QueryableRelation = Table | View | Subquery | SQL;
10
+ /**
11
+ * Base query definition that can be extended dynamically
12
+ * Returns just the FROM/JOIN/WHERE setup, not a complete SELECT
13
+ */
14
+ export interface BaseQueryDefinition {
15
+ /** Main table to query from */
16
+ from: QueryableRelation;
17
+ /** Optional joins to other tables */
18
+ joins?: Array<{
19
+ table: QueryableRelation;
20
+ on: SQL;
21
+ type?: 'left' | 'right' | 'inner' | 'full';
22
+ }>;
23
+ /** Base WHERE conditions (typically security context filtering) */
24
+ where?: SQL;
25
+ }
26
+ /**
27
+ * Query context passed to cube SQL functions
28
+ * Provides access to database, schema, and security context
29
+ */
30
+ export interface QueryContext {
31
+ /** Drizzle database instance */
32
+ db: DrizzleDatabase;
33
+ /** Database schema (tables, columns, etc.) */
34
+ schema?: any;
35
+ /** Security context for filtering */
36
+ securityContext: SecurityContext;
37
+ /** The semantic query being executed */
38
+ query?: SemanticQuery;
39
+ /** The compiled cube being queried */
40
+ cube?: Cube;
41
+ /**
42
+ * Filter cache for parameter deduplication across CTEs
43
+ * Created at query start and used throughout query building
44
+ */
45
+ filterCache?: FilterCacheManager;
46
+ /**
47
+ * When true, measures should be rendered as raw column expressions
48
+ * without aggregation wrappers. Set from SemanticQuery.ungrouped.
49
+ */
50
+ ungrouped?: boolean;
51
+ }
52
+ /**
53
+ * Multi-cube query context for cross-cube operations
54
+ */
55
+ export interface MultiCubeQueryContext extends QueryContext {
56
+ /** Available cubes for cross-cube operations */
57
+ cubes: Map<string, Cube>;
58
+ /** Current cube being processed */
59
+ currentCube: Cube;
60
+ }
61
+ /**
62
+ * Hierarchy definition for grouped drill-down paths
63
+ * Groups dimensions into ordered levels for structured navigation
64
+ */
65
+ export interface Hierarchy {
66
+ /** Unique identifier for the hierarchy */
67
+ name: string;
68
+ /** Display title for the hierarchy */
69
+ title?: string;
70
+ /**
71
+ * Dimension names in order from least to most granular
72
+ * @example ['country', 'region', 'city'] for geographic hierarchy
73
+ * @example ['category', 'subcategory', 'product'] for product hierarchy
74
+ */
75
+ levels: string[];
76
+ }
77
+ /**
78
+ * Cube definition focused on Drizzle query building
79
+ */
80
+ export interface Cube {
81
+ name: string;
82
+ title?: string;
83
+ description?: string;
84
+ /**
85
+ * Example questions that can be answered using this cube
86
+ * Used by AI agents to understand cube capabilities
87
+ * @example ['What was total revenue last month?', 'Show me sales by category']
88
+ */
89
+ exampleQuestions?: string[];
90
+ /**
91
+ * Base query setup - returns the foundation that can be extended
92
+ * Should return FROM/JOIN/WHERE setup, NOT a complete SELECT
93
+ */
94
+ sql: (ctx: QueryContext) => BaseQueryDefinition;
95
+ /** Cube dimensions using direct column references */
96
+ dimensions: Record<string, Dimension>;
97
+ /** Cube measures using direct column references */
98
+ measures: Record<string, Measure>;
99
+ /** Optional joins to other cubes for multi-cube queries */
100
+ joins?: Record<string, CubeJoin>;
101
+ /**
102
+ * Hierarchies for structured drill-down paths
103
+ * Groups dimensions into levels for navigation (e.g., country -> region -> city)
104
+ * A dimension can appear in multiple hierarchies
105
+ */
106
+ hierarchies?: Record<string, Hierarchy>;
107
+ /** Whether cube is publicly accessible */
108
+ public?: boolean;
109
+ /** SQL alias for the cube */
110
+ sqlAlias?: string;
111
+ /** Data source identifier */
112
+ dataSource?: string;
113
+ /** Additional metadata */
114
+ meta?: Record<string, any>;
115
+ }
116
+ /**
117
+ * Dimension definition
118
+ */
119
+ export interface Dimension {
120
+ name: string;
121
+ title?: string;
122
+ description?: string;
123
+ /**
124
+ * Alternative names for this dimension
125
+ * Used by AI agents for natural language matching
126
+ * @example ['date', 'day', 'timestamp'] for a createdAt dimension
127
+ */
128
+ synonyms?: string[];
129
+ type: DimensionType;
130
+ /** Direct column reference or SQL expression */
131
+ sql: AnyColumn | SQL | ((ctx: QueryContext) => AnyColumn | SQL);
132
+ /** Whether this is a primary key */
133
+ primaryKey?: boolean;
134
+ /** Whether to show in UI */
135
+ shown?: boolean;
136
+ /** Display format */
137
+ format?: string;
138
+ /** Additional metadata */
139
+ meta?: Record<string, any>;
140
+ /**
141
+ * Supported granularities for time dimensions
142
+ * If not specified for time dimensions, defaults to ['year', 'quarter', 'month', 'week', 'day']
143
+ * Only applies when type is 'time'
144
+ * @example ['year', 'quarter', 'month', 'day'] for a custom subset
145
+ */
146
+ granularities?: TimeGranularity[];
147
+ }
148
+ /**
149
+ * Measure definition
150
+ */
151
+ export interface Measure {
152
+ name: string;
153
+ title?: string;
154
+ description?: string;
155
+ /**
156
+ * Alternative names for this measure
157
+ * Used by AI agents for natural language matching
158
+ * @example ['revenue', 'sales', 'income'] for a totalRevenue measure
159
+ */
160
+ synonyms?: string[];
161
+ type: MeasureType;
162
+ /**
163
+ * Column to aggregate or SQL expression
164
+ * Optional for calculated measures (type: 'calculated') which use calculatedSql instead
165
+ */
166
+ sql?: AnyColumn | SQL | ((ctx: QueryContext) => AnyColumn | SQL);
167
+ /** Display format */
168
+ format?: string;
169
+ /** Whether to show in UI */
170
+ shown?: boolean;
171
+ /** Filters applied to this measure */
172
+ filters?: Array<(ctx: QueryContext) => SQL>;
173
+ /** Rolling window configuration */
174
+ rollingWindow?: {
175
+ trailing?: string;
176
+ leading?: string;
177
+ offset?: string;
178
+ };
179
+ /**
180
+ * Calculated measure template with {member} references
181
+ * Only used when type === 'calculated'
182
+ * Example: "1.0 * {completed} / NULLIF({total}, 0)"
183
+ */
184
+ calculatedSql?: string;
185
+ /**
186
+ * List of measure dependencies for calculated measures
187
+ * Auto-detected from calculatedSql if not provided
188
+ * Example: ['completed', 'total']
189
+ */
190
+ dependencies?: string[];
191
+ /** Additional metadata */
192
+ meta?: Record<string, any>;
193
+ /**
194
+ * Dimension names shown when drilling into this measure
195
+ * Can include cross-cube dimensions via joins (e.g., 'Products.name', 'Users.email')
196
+ * If not specified, drilling is disabled for this measure
197
+ * @example ['id', 'status', 'createdAt'] for same-cube dimensions
198
+ * @example ['Orders.id', 'Products.name', 'Users.city'] for cross-cube dimensions
199
+ */
200
+ drillMembers?: string[];
201
+ /**
202
+ * Statistical function configuration
203
+ * Used for percentile, stddev, variance measure types
204
+ */
205
+ statisticalConfig?: {
206
+ /** Percentile value (0-100) for percentile measures. Default: 50 for median */
207
+ percentile?: number;
208
+ /** Use sample vs population calculation for stddev/variance. Default: false (population) */
209
+ useSample?: boolean;
210
+ };
211
+ /**
212
+ * Window function configuration
213
+ * Used for lag, lead, rank, movingAvg, and other window function measure types
214
+ *
215
+ * Post-aggregation window functions:
216
+ * When `measure` is specified, the window function operates on AGGREGATED data.
217
+ * The base measure is first aggregated (grouped by query dimensions), then the
218
+ * window function is applied to the aggregated results.
219
+ *
220
+ * Example: Month-over-month revenue change
221
+ * ```typescript
222
+ * revenueChange: {
223
+ * type: 'lag',
224
+ * windowConfig: {
225
+ * measure: 'totalRevenue', // Reference to aggregate measure
226
+ * operation: 'difference', // current - previous
227
+ * orderBy: [{ field: 'date', direction: 'asc' }]
228
+ * }
229
+ * }
230
+ * ```
231
+ */
232
+ windowConfig?: {
233
+ /**
234
+ * Reference to the measure this window function operates on.
235
+ * The referenced measure will be aggregated first, then the window function applied.
236
+ * Can be a simple name ('totalRevenue') or fully qualified ('Sales.totalRevenue').
237
+ */
238
+ measure?: string;
239
+ /**
240
+ * Operation to perform after getting the window result:
241
+ * - 'raw': Return the window function result directly (default for rank, rowNumber, ntile)
242
+ * - 'difference': Subtract window result from current value (current - window)
243
+ * - 'ratio': Divide current value by window result (current / window)
244
+ * - 'percentChange': Calculate percentage change ((current - window) / window * 100)
245
+ *
246
+ * Default: 'difference' for lag/lead, 'raw' for rank/rowNumber/ntile/firstValue/lastValue
247
+ */
248
+ operation?: 'raw' | 'difference' | 'ratio' | 'percentChange';
249
+ /** Dimension references to partition by (e.g., ['employeeId']) */
250
+ partitionBy?: string[];
251
+ /** Columns to order by with direction */
252
+ orderBy?: Array<{
253
+ field: string;
254
+ direction: 'asc' | 'desc';
255
+ }>;
256
+ /** Number of rows to offset for lag/lead. Default: 1 */
257
+ offset?: number;
258
+ /** Default value when offset is out of bounds for lag/lead */
259
+ defaultValue?: any;
260
+ /** Number of buckets for ntile. Default: 4 */
261
+ nTile?: number;
262
+ /** Window frame specification for moving aggregates */
263
+ frame?: {
264
+ type: 'rows' | 'range';
265
+ start: number | 'unbounded';
266
+ end: number | 'current' | 'unbounded';
267
+ };
268
+ };
269
+ }
270
+ /**
271
+ * Relationship types supported by cube joins
272
+ */
273
+ export type CubeRelationship = 'belongsTo' | 'hasOne' | 'hasMany' | 'belongsToMany';
274
+ /**
275
+ * Type-safe cube join definition with lazy loading support
276
+ */
277
+ export interface CubeJoin {
278
+ /** Target cube reference - lazy loaded to avoid circular dependencies, or string name resolved from registry */
279
+ targetCube: Cube | (() => Cube) | string;
280
+ /** Semantic relationship - determines join behavior */
281
+ relationship: CubeRelationship;
282
+ /** Array of join conditions - supports multi-column joins */
283
+ on: Array<{
284
+ /** Column from source cube */
285
+ source: AnyColumn;
286
+ /** Column from target cube */
287
+ target: AnyColumn;
288
+ /** Comparison operator - defaults to eq */
289
+ as?: (source: AnyColumn, target: AnyColumn) => SQL;
290
+ }>;
291
+ /** Override default SQL join type (derived from relationship) */
292
+ sqlJoinType?: 'inner' | 'left' | 'right' | 'full';
293
+ /**
294
+ * Preferred path targets - marks this join as the canonical route to reach specific cubes.
295
+ * When multiple paths exist to a target cube, paths using preferred joins are prioritized.
296
+ *
297
+ * Example: EmployeeTeams join with `preferredFor: ['Teams']` ensures employee-team
298
+ * queries use the junction table path rather than going through Departments.
299
+ */
300
+ preferredFor?: string[];
301
+ /**
302
+ * Many-to-many relationship configuration through a junction table
303
+ * Only used when relationship is 'belongsToMany'
304
+ */
305
+ through?: {
306
+ /** Junction/join table (Drizzle table reference) */
307
+ table: Table;
308
+ /** Join conditions from source cube to junction table */
309
+ sourceKey: Array<{
310
+ source: AnyColumn;
311
+ target: AnyColumn;
312
+ as?: (source: AnyColumn, target: AnyColumn) => SQL;
313
+ }>;
314
+ /** Join conditions from junction table to target cube */
315
+ targetKey: Array<{
316
+ source: AnyColumn;
317
+ target: AnyColumn;
318
+ as?: (source: AnyColumn, target: AnyColumn) => SQL;
319
+ }>;
320
+ /** Optional security context SQL for junction table */
321
+ securitySql?: (securityContext: SecurityContext) => SQL | SQL[];
322
+ };
323
+ }
324
+ /**
325
+ * Compiled cube with execution function
326
+ */
327
+ export interface CompiledCube extends Cube {
328
+ /** Execute a query against this cube */
329
+ queryFn: (query: SemanticQuery, securityContext: SecurityContext) => Promise<QueryResult>;
330
+ }
331
+ /**
332
+ * Join key information for CTE joins
333
+ * Describes how a CTE should be joined to the main query
334
+ */
335
+ export interface JoinKeyInfo {
336
+ /** Column name in the source table */
337
+ sourceColumn: string;
338
+ /** Column name in the target table (CTE) */
339
+ targetColumn: string;
340
+ /** Optional Drizzle column object for source */
341
+ sourceColumnObj?: AnyColumn;
342
+ /** Optional Drizzle column object for target */
343
+ targetColumnObj?: AnyColumn;
344
+ }
345
+ /**
346
+ * Single join key pair for composite key support
347
+ */
348
+ export interface JoinKeyPair {
349
+ /** Primary key column on source cube */
350
+ source: AnyColumn;
351
+ /** Foreign key column on target cube (CTE cube) */
352
+ target: AnyColumn;
353
+ }
354
+ /**
355
+ * Propagating filter information for cross-cube filter propagation
356
+ * When cube A has filters and cube B (with hasMany from A) needs a CTE,
357
+ * A's filters should propagate into B's CTE via a subquery
358
+ */
359
+ export interface PropagatingFilter {
360
+ /** The source cube whose filters need to propagate */
361
+ sourceCube: Cube;
362
+ /** Filters from the source cube to apply */
363
+ filters: import('./query').Filter[];
364
+ /** Join conditions linking source cube PK(s) to target cube FK(s) - supports composite keys */
365
+ joinConditions: JoinKeyPair[];
366
+ /** Pre-built filter SQL for parameter deduplication (optional, built during query planning) */
367
+ preBuiltFilterSQL?: SQL;
368
+ }
369
+ /**
370
+ * Intermediate join information for multi-hop CTE paths
371
+ * When a CTE cube joins to primary through intermediate tables that have hasMany,
372
+ * these intermediate tables are absorbed into the CTE to prevent fan-out.
373
+ */
374
+ export interface IntermediateJoinInfo {
375
+ /** The intermediate cube that's being absorbed into the CTE */
376
+ cube: Cube;
377
+ /** The join definition from the intermediate cube to this CTE cube */
378
+ joinDef: CubeJoin;
379
+ /** Security filter to apply to the intermediate table within the CTE */
380
+ securityFilter?: SQL;
381
+ /** The column on the intermediate table that connects to the primary cube */
382
+ primaryJoinColumn: AnyColumn;
383
+ /** The column on the intermediate table that connects to the CTE cube */
384
+ cteJoinColumn: AnyColumn;
385
+ }
386
+ /**
387
+ * Pre-aggregation CTE information
388
+ * Describes a Common Table Expression used for pre-aggregating hasMany relationships
389
+ */
390
+ export interface PreAggregationCTEInfo {
391
+ /** The cube being pre-aggregated */
392
+ cube: Cube;
393
+ /** Table alias for this cube in the main query */
394
+ alias: string;
395
+ /** CTE alias (WITH clause name) */
396
+ cteAlias: string;
397
+ /** Join keys to connect CTE back to main query (e.g., employee_id for Employees → EmployeeTeams) */
398
+ joinKeys: JoinKeyInfo[];
399
+ /** List of measure names included in this CTE (aggregate measures + window base measures) */
400
+ measures: string[];
401
+ /** Propagating filters from related cubes (for cross-cube filter propagation) */
402
+ propagatingFilters?: PropagatingFilter[];
403
+ /**
404
+ * Downstream join keys for cubes that need to be joined through this CTE.
405
+ * When a query has dimensions from a cube (e.g., Teams) that should be joined
406
+ * through this CTE cube (e.g., EmployeeTeams), we include those join keys here
407
+ * so the CTE includes them in SELECT and GROUP BY, allowing downstream joins.
408
+ */
409
+ downstreamJoinKeys?: DownstreamJoinKeyInfo[];
410
+ /**
411
+ * Intermediate joins that need to be absorbed into this CTE.
412
+ * When the path from primary cube to CTE cube goes through intermediate tables
413
+ * with hasMany relationships, those joins are included IN the CTE rather than
414
+ * in the main query to prevent fan-out.
415
+ *
416
+ * Example: Departments → Employees → EmployeeTeams
417
+ * - Primary: Departments
418
+ * - CTE: EmployeeTeams
419
+ * - Intermediate: Employees (has hasMany to EmployeeTeams)
420
+ *
421
+ * The CTE will JOIN to employees and GROUP BY employees.department_id,
422
+ * then join directly to Departments.
423
+ */
424
+ intermediateJoins?: IntermediateJoinInfo[];
425
+ /**
426
+ * Type of CTE:
427
+ * - 'aggregate': Standard CTE with GROUP BY for count/sum/avg measures
428
+ *
429
+ * Note: Window function CTEs are no longer used. Post-aggregation window
430
+ * functions (lag, lead, rank, etc.) operate on aggregated data and are
431
+ * applied in the outer query SELECT clause, not in separate CTEs.
432
+ */
433
+ cteType?: 'aggregate';
434
+ /**
435
+ * Reason for creating this CTE:
436
+ * - 'hasMany': Direct hasMany relationship target - requires SUM in outer query
437
+ * - 'fanOutPrevention': Cube affected by hasMany elsewhere - requires MAX in outer query
438
+ *
439
+ * This determines how the outer query aggregates CTE values:
440
+ * - hasMany CTEs have multiple rows per join key, so SUM combines them
441
+ * - fanOutPrevention CTEs have one row per key, but get duplicated by joins,
442
+ * so MAX retrieves the value without re-summing
443
+ */
444
+ cteReason?: 'hasMany' | 'fanOutPrevention';
445
+ }
446
+ /**
447
+ * Information about downstream join keys for CTE building.
448
+ * Used when a cube (e.g., Teams) needs to be joined through a CTE cube (e.g., EmployeeTeams)
449
+ */
450
+ export interface DownstreamJoinKeyInfo {
451
+ /** The downstream cube name (e.g., 'Teams') */
452
+ targetCubeName: string;
453
+ /** Join keys from CTE cube to downstream cube */
454
+ joinKeys: JoinKeyInfo[];
455
+ }
456
+ /**
457
+ * Planned join entry used by runtime physical builders.
458
+ */
459
+ export interface JoinCubePlanEntry {
460
+ cube: Cube;
461
+ alias: string;
462
+ joinType: 'inner' | 'left' | 'right' | 'full';
463
+ joinCondition: SQL;
464
+ /** Relationship type from the join definition that produced this entry */
465
+ relationship?: 'belongsTo' | 'hasOne' | 'hasMany' | 'belongsToMany';
466
+ /** Junction table information for belongsToMany relationships */
467
+ junctionTable?: {
468
+ table: Table;
469
+ alias: string;
470
+ joinType: 'inner' | 'left' | 'right' | 'full';
471
+ joinCondition: SQL;
472
+ /** Optional security SQL function to apply to junction table */
473
+ securitySql?: (securityContext: SecurityContext) => SQL | SQL[];
474
+ /** Source cube name for the belongsToMany relationship (needed for CTE rewriting) */
475
+ sourceCubeName?: string;
476
+ };
477
+ }
478
+ /**
479
+ * Runtime physical-plan context used by query execution builders.
480
+ * This is the only runtime plan context consumed by SQL builders.
481
+ */
482
+ export interface PhysicalQueryPlan {
483
+ /** Primary cube that drives the query */
484
+ primaryCube: Cube;
485
+ /** Additional cubes to join (empty for single-cube queries) */
486
+ joinCubes: JoinCubePlanEntry[];
487
+ /** Pre-aggregation CTEs for hasMany relationships to prevent fan-out */
488
+ preAggregationCTEs?: PreAggregationCTEInfo[];
489
+ /**
490
+ * Optional keys-based deduplication metadata.
491
+ * When present, physical builders may choose a keys+aggregate execution path.
492
+ */
493
+ keysDeduplication?: {
494
+ multipliedCubeName: string;
495
+ primaryKeyDimensions: string[];
496
+ /** Measure names NOT from the multiplied cube (pre-aggregated in keys CTE) */
497
+ regularMeasures?: string[];
498
+ };
499
+ /**
500
+ * Optional multi-fact merge metadata.
501
+ * When present, SQL builders execute independent grouped subqueries and
502
+ * merge them by shared dimension keys.
503
+ */
504
+ multiFactMerge?: {
505
+ mergeStrategy: 'fullJoin' | 'leftJoin' | 'innerJoin';
506
+ sharedDimensions: string[];
507
+ groups: Array<{
508
+ alias: string;
509
+ query: SemanticQuery;
510
+ queryPlan: PhysicalQueryPlan;
511
+ measures: string[];
512
+ }>;
513
+ };
514
+ /** Warnings about potential query issues (e.g., fan-out without dimensions) */
515
+ warnings?: import('./core').QueryWarning[];
516
+ }
517
+ /**
518
+ * Utility type for cube definition with schema inference
519
+ */
520
+ export type CubeDefinition = Omit<Cube, 'name'> & {
521
+ name?: string;
522
+ };
523
+ /**
524
+ * Helper type for creating type-safe cubes
525
+ */
526
+ export interface CubeDefiner {
527
+ <TName extends string>(name: TName, definition: CubeDefinition): Cube & {
528
+ name: TName;
529
+ };
530
+ }
@@ -0,0 +1,156 @@
1
+ import { SQL } from 'drizzle-orm';
2
+ import { DrizzleDatabase } from './core';
3
+ import { DatabaseAdapter } from '../adapters/base-adapter';
4
+ /**
5
+ * Database executor interface that wraps Drizzle ORM
6
+ * Provides type-safe SQL execution with engine-specific implementations
7
+ */
8
+ export interface DatabaseExecutor {
9
+ /** The Drizzle database instance */
10
+ db: DrizzleDatabase;
11
+ /** Optional schema for type inference */
12
+ schema?: any;
13
+ /** Database adapter for SQL dialect-specific operations */
14
+ databaseAdapter: DatabaseAdapter;
15
+ /** Execute a Drizzle SQL query or query object */
16
+ execute<T = any[]>(query: SQL | any, numericFields?: string[]): Promise<T>;
17
+ /** Get the database engine type */
18
+ getEngineType(): 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake';
19
+ /** Execute EXPLAIN on a SQL query to get the execution plan */
20
+ explainQuery(sqlString: string, params: unknown[], options?: ExplainOptions): Promise<ExplainResult>;
21
+ /** Get existing indexes for the specified tables */
22
+ getTableIndexes(tableNames: string[]): Promise<IndexInfo[]>;
23
+ }
24
+ /**
25
+ * Options for EXPLAIN query execution
26
+ */
27
+ export interface ExplainOptions {
28
+ /** Use EXPLAIN ANALYZE to actually execute the query and get real timing (PostgreSQL, MySQL 8.0.18+) */
29
+ analyze?: boolean;
30
+ }
31
+ /**
32
+ * A single operation/node in the query execution plan
33
+ * Normalized structure across all databases
34
+ */
35
+ export interface ExplainOperation {
36
+ /** Operation type (e.g., 'Seq Scan', 'Index Scan', 'Hash Join', 'Sort') */
37
+ type: string;
38
+ /** Table name if applicable */
39
+ table?: string;
40
+ /** Index name if used */
41
+ index?: string;
42
+ /** Estimated row count from planner */
43
+ estimatedRows?: number;
44
+ /** Actual row count (if ANALYZE was used) */
45
+ actualRows?: number;
46
+ /** Estimated cost (database-specific units) */
47
+ estimatedCost?: number;
48
+ /** Filter condition if any */
49
+ filter?: string;
50
+ /** Additional details specific to this operation */
51
+ details?: string;
52
+ /** Nested/child operations */
53
+ children?: ExplainOperation[];
54
+ }
55
+ /**
56
+ * Result of an EXPLAIN query
57
+ * Provides both normalized structure and raw output
58
+ */
59
+ export interface ExplainResult {
60
+ /** Normalized hierarchical plan as operations */
61
+ operations: ExplainOperation[];
62
+ /** Summary statistics */
63
+ summary: ExplainSummary;
64
+ /** Raw EXPLAIN output as text (for display) */
65
+ raw: string;
66
+ /** Original SQL query */
67
+ sql: {
68
+ sql: string;
69
+ params?: unknown[];
70
+ };
71
+ }
72
+ /**
73
+ * Summary statistics from the execution plan
74
+ */
75
+ export interface ExplainSummary {
76
+ /** Database engine type */
77
+ database: 'postgres' | 'mysql' | 'sqlite' | 'duckdb' | 'databend' | 'snowflake';
78
+ /** Planning time in milliseconds (if available) */
79
+ planningTime?: number;
80
+ /** Execution time in milliseconds (if ANALYZE was used) */
81
+ executionTime?: number;
82
+ /** Total estimated cost */
83
+ totalCost?: number;
84
+ /** Quick flag: true if any sequential scans detected */
85
+ hasSequentialScans: boolean;
86
+ /** List of indexes used in the plan */
87
+ usedIndexes: string[];
88
+ }
89
+ /**
90
+ * A recommendation from AI analysis of an execution plan
91
+ */
92
+ export interface ExplainRecommendation {
93
+ /** Type of recommendation */
94
+ type: 'index' | 'table' | 'cube' | 'general';
95
+ /** Severity/priority of the recommendation */
96
+ severity: 'critical' | 'warning' | 'suggestion';
97
+ /** Short actionable title */
98
+ title: string;
99
+ /** Detailed explanation of why this helps */
100
+ description: string;
101
+ /** Actionable SQL statement (e.g., CREATE INDEX) - for index/table recommendations */
102
+ sql?: string;
103
+ /** TypeScript code snippet to add to cube definition - for cube recommendations */
104
+ cubeCode?: string;
105
+ /** Which cube to modify - for cube recommendations */
106
+ cubeName?: string;
107
+ /** Affected database table */
108
+ table?: string;
109
+ /** Affected columns */
110
+ columns?: string[];
111
+ /** Expected performance improvement */
112
+ estimatedImpact?: string;
113
+ }
114
+ /**
115
+ * Issue identified in the execution plan
116
+ */
117
+ export interface ExplainIssue {
118
+ /** Type of issue */
119
+ type: 'sequential_scan' | 'missing_index' | 'high_cost' | 'sort_operation' | string;
120
+ /** Description of the issue */
121
+ description: string;
122
+ /** Severity level */
123
+ severity: 'high' | 'medium' | 'low';
124
+ }
125
+ /**
126
+ * AI-generated analysis of an execution plan
127
+ */
128
+ export interface AIExplainAnalysis {
129
+ /** One-sentence description of what the query does */
130
+ summary: string;
131
+ /** Overall performance assessment */
132
+ assessment: 'good' | 'warning' | 'critical';
133
+ /** Reason for the assessment */
134
+ assessmentReason: string;
135
+ /** Detailed explanation of the query's purpose and structure */
136
+ queryUnderstanding: string;
137
+ /** Issues identified in the execution plan */
138
+ issues: ExplainIssue[];
139
+ /** Actionable recommendations for improvement */
140
+ recommendations: ExplainRecommendation[];
141
+ }
142
+ /**
143
+ * Information about a database index
144
+ */
145
+ export interface IndexInfo {
146
+ /** Table the index belongs to */
147
+ table_name: string;
148
+ /** Name of the index */
149
+ index_name: string;
150
+ /** Columns included in the index (in order) */
151
+ columns: string[];
152
+ /** Whether the index enforces uniqueness */
153
+ is_unique: boolean;
154
+ /** Whether this is the primary key index */
155
+ is_primary: boolean;
156
+ }