drizzle-cube 0.9.5 → 0.9.6

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 (254) hide show
  1. package/dist/adapters/ActivityGridChart.config-BgAUfqKS.js +2 -0
  2. package/dist/adapters/ActivityGridChart.config-CGsjbfYL.cjs +1 -0
  3. package/dist/adapters/AreaChart.config-Bmj24k3G.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-DqJvquc-.js +2 -0
  5. package/dist/adapters/BarChart.config-CzGxsUq-.js +2 -0
  6. package/dist/adapters/BarChart.config-D1uQGV6T.cjs +1 -0
  7. package/dist/adapters/BoxPlotChart.config-I0S4-aNF.js +2 -0
  8. package/dist/adapters/BoxPlotChart.config-wfS4FxGI.cjs +1 -0
  9. package/dist/adapters/BubbleChart.config-BDSknEkc.js +2 -0
  10. package/dist/adapters/BubbleChart.config-CByvW3Rq.cjs +1 -0
  11. package/dist/adapters/CandlestickChart.config-08gqS1xj.cjs +1 -0
  12. package/dist/adapters/CandlestickChart.config-Bkr9bdwM.js +2 -0
  13. package/dist/adapters/DataTable.config-BFP6xnMc.cjs +1 -0
  14. package/dist/adapters/DataTable.config-DHYD7PA8.js +2 -0
  15. package/dist/adapters/DotStripChart.config-DRQybZZu.cjs +1 -0
  16. package/dist/adapters/DotStripChart.config-Sp0fOxfM.js +2 -0
  17. package/dist/adapters/FunnelChart.config-ByARozX6.cjs +1 -0
  18. package/dist/adapters/FunnelChart.config-DhCqap3P.js +2 -0
  19. package/dist/adapters/GaugeChart.config-CfRicB1o.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-PTQ85WM5.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-0tmGHwm2.cjs +1 -0
  22. package/dist/adapters/HeatMapChart.config-Devz5A5U.js +2 -0
  23. package/dist/adapters/KpiDelta.config-CGTdddOM.js +2 -0
  24. package/dist/adapters/KpiDelta.config-CjWmwXjk.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-Cd4jw22d.cjs +1 -0
  26. package/dist/adapters/KpiNumber.config-D3Et71Zn.js +2 -0
  27. package/dist/adapters/KpiText.config-B9VATPy2.js +2 -0
  28. package/dist/adapters/KpiText.config-B_dkrdHj.cjs +1 -0
  29. package/dist/adapters/LineChart.config-C3p-mc15.cjs +1 -0
  30. package/dist/adapters/LineChart.config-DXWLMWjn.js +2 -0
  31. package/dist/adapters/MarkdownChart.config-BQGmd6Iz.js +2 -0
  32. package/dist/adapters/MarkdownChart.config-CQFu4297.cjs +1 -0
  33. package/dist/adapters/MeasureProfileChart.config-CXLeprVS.js +2 -0
  34. package/dist/adapters/MeasureProfileChart.config-KpfD016N.cjs +1 -0
  35. package/dist/adapters/PieChart.config-j-syrhBx.js +2 -0
  36. package/dist/adapters/PieChart.config-zzBPh0tx.cjs +1 -0
  37. package/dist/adapters/ProportionBarChart.config-BD9bf-LZ.js +2 -0
  38. package/dist/adapters/ProportionBarChart.config-CBLcLV4Z.cjs +1 -0
  39. package/dist/adapters/RadarChart.config-CW9f_VxU.cjs +1 -0
  40. package/dist/adapters/RadarChart.config-yKvcZ49V.js +2 -0
  41. package/dist/adapters/RadialBarChart.config-DwQYejI6.cjs +1 -0
  42. package/dist/adapters/RadialBarChart.config-xK4AyoOF.js +2 -0
  43. package/dist/adapters/RecordsTable.config-CquV7Wi0.js +2 -0
  44. package/dist/adapters/RecordsTable.config-DzrQXBvh.cjs +1 -0
  45. package/dist/adapters/RetentionCombinedChart.config-BYAFkFb-.cjs +1 -0
  46. package/dist/adapters/RetentionCombinedChart.config-Ddmb-WwM.js +2 -0
  47. package/dist/adapters/RetentionHeatmap.config-CSHXD736.cjs +1 -0
  48. package/dist/adapters/RetentionHeatmap.config-DODcy3gK.js +2 -0
  49. package/dist/adapters/SankeyChart.config-B56o6GFu.js +2 -0
  50. package/dist/adapters/SankeyChart.config-DLnhr2k_.cjs +1 -0
  51. package/dist/adapters/ScatterChart.config-CrIFaC-s.js +2 -0
  52. package/dist/adapters/ScatterChart.config-Dfj1_af-.cjs +1 -0
  53. package/dist/adapters/SunburstChart.config-CuLsLj6v.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-CvuVUfkp.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-CvbDr1Ic.js +2 -0
  56. package/dist/adapters/TreeMapChart.config-Dqjhe8Xk.cjs +1 -0
  57. package/dist/adapters/WaterfallChart.config-DXFeGg7P.cjs +1 -0
  58. package/dist/adapters/WaterfallChart.config-MLHPNE5q.js +2 -0
  59. package/dist/adapters/{compiler-CJVo3oya.cjs → compiler-C5OSdfwn.cjs} +2 -2
  60. package/dist/adapters/{compiler-DYAP3l3U.js → compiler-CpvetSCm.js} +2 -2
  61. package/dist/adapters/core/index.cjs +1 -1
  62. package/dist/adapters/core/index.js +1 -1
  63. package/dist/adapters/{core-B05onvSN.js → core-BH_56XtM.js} +2 -2
  64. package/dist/adapters/{core-BkxueWec.cjs → core-CydD6oFu.cjs} +1 -1
  65. package/dist/adapters/express/index.cjs +1 -1
  66. package/dist/adapters/express/index.js +5 -5
  67. package/dist/adapters/fastify/index.cjs +1 -1
  68. package/dist/adapters/fastify/index.js +5 -5
  69. package/dist/adapters/{handler-mwSVmP0z.js → handler-CtcALGcY.js} +32 -32
  70. package/dist/adapters/{handler-CP-6A8X3.cjs → handler-Dp8fpSpk.cjs} +3 -3
  71. package/dist/adapters/hono/index.cjs +1 -1
  72. package/dist/adapters/hono/index.js +4 -4
  73. package/dist/adapters/mcp-app-html-C8vG9epH.js +5 -0
  74. package/dist/adapters/mcp-app-html-DRWnkcx4.cjs +1 -0
  75. package/dist/adapters/mcp-app-html.cjs +1 -1
  76. package/dist/adapters/mcp-app-html.js +1 -1
  77. package/dist/adapters/mcp-tools.cjs +1 -1
  78. package/dist/adapters/mcp-tools.js +3 -3
  79. package/dist/adapters/{mcp-transport-BH5avoaA.js → mcp-transport-DDxjqyuK.js} +1 -1
  80. package/dist/adapters/{mcp-transport-DXgZ-xcU.cjs → mcp-transport-QGYYYSgR.cjs} +1 -1
  81. package/dist/adapters/nextjs/index.cjs +1 -1
  82. package/dist/adapters/nextjs/index.js +5 -5
  83. package/dist/adapters/{openai-B82IDfp4.cjs → openai-Cm4JcLuF.cjs} +1 -1
  84. package/dist/adapters/{openai-BaNGQmmK.cjs → openai-CwKv0DD-.cjs} +3 -3
  85. package/dist/adapters/{openai-CeNMQU8r.js → openai-DH5InEPj.js} +3 -3
  86. package/dist/adapters/{openai-BKDrN7u0.js → openai-pCkHdDh4.js} +1 -1
  87. package/dist/adapters/{utils-iMkgJr10.cjs → utils-BFGzuSlF.cjs} +10 -10
  88. package/dist/adapters/{utils-dyUxCOWT.js → utils-C_Mc0qsk.js} +1259 -1279
  89. package/dist/adapters/utils.cjs +1 -1
  90. package/dist/adapters/utils.js +1 -1
  91. package/dist/cjs/client/hooks/queries/useExplainAI.d.ts +3 -2
  92. package/dist/cjs/client/types.d.ts +7 -0
  93. package/dist/client/charts.js +12 -12
  94. package/dist/client/chunks/{DashboardEditModal-3_odkGXU.js → DashboardEditModal-USQFytJw.js} +12 -12
  95. package/dist/client/chunks/DashboardEditModal-USQFytJw.js.map +1 -0
  96. package/dist/client/chunks/{DotStripChart-BGpjqpNU.js → DotStripChart-CjSsunHE.js} +3 -3
  97. package/dist/client/chunks/{DotStripChart-BGpjqpNU.js.map → DotStripChart-CjSsunHE.js.map} +1 -1
  98. package/dist/client/chunks/{ProportionBarChart-DuC16TT0.js → ProportionBarChart-B8UyZBO_.js} +3 -3
  99. package/dist/client/chunks/{ProportionBarChart-DuC16TT0.js.map → ProportionBarChart-B8UyZBO_.js.map} +1 -1
  100. package/dist/client/chunks/{RecordsTable-zy4EWyWx.js → RecordsTable-BSmkwdgd.js} +4 -4
  101. package/dist/client/chunks/{RecordsTable-zy4EWyWx.js.map → RecordsTable-BSmkwdgd.js.map} +1 -1
  102. package/dist/client/chunks/{RetentionCombinedChart-BrqSuLXT.js → RetentionCombinedChart-rOdIhUGH.js} +3 -3
  103. package/dist/client/chunks/{RetentionCombinedChart-BrqSuLXT.js.map → RetentionCombinedChart-rOdIhUGH.js.map} +1 -1
  104. package/dist/client/chunks/{RetentionHeatmap-DlGScG6X.js → RetentionHeatmap-DVm_7rph.js} +2 -2
  105. package/dist/client/chunks/{RetentionHeatmap-DlGScG6X.js.map → RetentionHeatmap-DVm_7rph.js.map} +1 -1
  106. package/dist/client/chunks/{analysis-builder-UhPaVPsn.js → analysis-builder-D_tw9BvU.js} +9 -9
  107. package/dist/client/chunks/{analysis-builder-UhPaVPsn.js.map → analysis-builder-D_tw9BvU.js.map} +1 -1
  108. package/dist/client/chunks/{analysis-builder-shared-DS_eJnM8.js → analysis-builder-shared-BSINKFr2.js} +9 -9
  109. package/dist/client/chunks/{analysis-builder-shared-DS_eJnM8.js.map → analysis-builder-shared-BSINKFr2.js.map} +1 -1
  110. package/dist/client/chunks/{chart-activity-grid-cJI-MF_M.js → chart-activity-grid-CSIsJ12e.js} +4 -4
  111. package/dist/client/chunks/{chart-activity-grid-cJI-MF_M.js.map → chart-activity-grid-CSIsJ12e.js.map} +1 -1
  112. package/dist/client/chunks/{chart-area-11vKdaTE.js → chart-area-BpvSKH5I.js} +2 -2
  113. package/dist/client/chunks/{chart-area-11vKdaTE.js.map → chart-area-BpvSKH5I.js.map} +1 -1
  114. package/dist/client/chunks/{chart-bar-ByOYTFZp.js → chart-bar-Cjzv-LvG.js} +3 -3
  115. package/dist/client/chunks/{chart-bar-ByOYTFZp.js.map → chart-bar-Cjzv-LvG.js.map} +1 -1
  116. package/dist/client/chunks/{chart-box-plot-DKTdhdjk.js → chart-box-plot-DHsHfMt6.js} +2 -2
  117. package/dist/client/chunks/{chart-box-plot-DKTdhdjk.js.map → chart-box-plot-DHsHfMt6.js.map} +1 -1
  118. package/dist/client/chunks/{chart-bubble-lCNFaxsr.js → chart-bubble-BtWm6x7L.js} +2 -2
  119. package/dist/client/chunks/{chart-bubble-lCNFaxsr.js.map → chart-bubble-BtWm6x7L.js.map} +1 -1
  120. package/dist/client/chunks/{chart-candlestick-DQJ8byvB.js → chart-candlestick-Bz0_fLuq.js} +2 -2
  121. package/dist/client/chunks/{chart-candlestick-DQJ8byvB.js.map → chart-candlestick-Bz0_fLuq.js.map} +1 -1
  122. package/dist/client/chunks/{chart-data-table-DkkQtuY6.js → chart-data-table-BH1A-1RN.js} +4 -4
  123. package/dist/client/chunks/{chart-data-table-DkkQtuY6.js.map → chart-data-table-BH1A-1RN.js.map} +1 -1
  124. package/dist/client/chunks/{chart-funnel-BtjUJRcf.js → chart-funnel-C_-K4RLj.js} +2 -2
  125. package/dist/client/chunks/{chart-funnel-BtjUJRcf.js.map → chart-funnel-C_-K4RLj.js.map} +1 -1
  126. package/dist/client/chunks/{chart-gauge-Da-29BzE.js → chart-gauge-F-vdq2BX.js} +3 -3
  127. package/dist/client/chunks/{chart-gauge-Da-29BzE.js.map → chart-gauge-F-vdq2BX.js.map} +1 -1
  128. package/dist/client/chunks/{chart-heat-map-DK0IR2al.js → chart-heat-map-D_8TluGo.js} +3 -3
  129. package/dist/client/chunks/{chart-heat-map-DK0IR2al.js.map → chart-heat-map-D_8TluGo.js.map} +1 -1
  130. package/dist/client/chunks/{chart-kpi-delta-Cih5Vh_Z.js → chart-kpi-delta-DGvQ0BHZ.js} +3 -3
  131. package/dist/client/chunks/{chart-kpi-delta-Cih5Vh_Z.js.map → chart-kpi-delta-DGvQ0BHZ.js.map} +1 -1
  132. package/dist/client/chunks/{chart-kpi-number-Z5zpxeKR.js → chart-kpi-number-DP6zCh-c.js} +5 -5
  133. package/dist/client/chunks/{chart-kpi-number-Z5zpxeKR.js.map → chart-kpi-number-DP6zCh-c.js.map} +1 -1
  134. package/dist/client/chunks/{chart-kpi-text-glMTySe4.js → chart-kpi-text-DDbWfMwK.js} +3 -3
  135. package/dist/client/chunks/{chart-kpi-text-glMTySe4.js.map → chart-kpi-text-DDbWfMwK.js.map} +1 -1
  136. package/dist/client/chunks/{chart-line-D6Xkq1eW.js → chart-line-DlhmQQ-X.js} +3 -3
  137. package/dist/client/chunks/{chart-line-D6Xkq1eW.js.map → chart-line-DlhmQQ-X.js.map} +1 -1
  138. package/dist/client/chunks/{chart-markdown-BHBjzgfc.js → chart-markdown-C5ldCjSN.js} +3 -3
  139. package/dist/client/chunks/{chart-markdown-BHBjzgfc.js.map → chart-markdown-C5ldCjSN.js.map} +1 -1
  140. package/dist/client/chunks/{chart-measure-profile-Cl5xQZLF.js → chart-measure-profile-CjErXQI4.js} +3 -3
  141. package/dist/client/chunks/{chart-measure-profile-Cl5xQZLF.js.map → chart-measure-profile-CjErXQI4.js.map} +1 -1
  142. package/dist/client/chunks/{chart-pie-X3wVYu9v.js → chart-pie-CmKhmUR-.js} +3 -3
  143. package/dist/client/chunks/{chart-pie-X3wVYu9v.js.map → chart-pie-CmKhmUR-.js.map} +1 -1
  144. package/dist/client/chunks/{chart-radar-BExajFiU.js → chart-radar-B2bYTyb0.js} +3 -3
  145. package/dist/client/chunks/{chart-radar-BExajFiU.js.map → chart-radar-B2bYTyb0.js.map} +1 -1
  146. package/dist/client/chunks/{chart-radial-bar-CgGmC8WE.js → chart-radial-bar-DvQ-xZS-.js} +3 -3
  147. package/dist/client/chunks/{chart-radial-bar-CgGmC8WE.js.map → chart-radial-bar-DvQ-xZS-.js.map} +1 -1
  148. package/dist/client/chunks/{chart-sankey-DKj417mA.js → chart-sankey-DHIrjmhj.js} +2 -2
  149. package/dist/client/chunks/{chart-sankey-DKj417mA.js.map → chart-sankey-DHIrjmhj.js.map} +1 -1
  150. package/dist/client/chunks/{chart-scatter-DSNgbnEu.js → chart-scatter-JnoA3CD5.js} +3 -3
  151. package/dist/client/chunks/{chart-scatter-DSNgbnEu.js.map → chart-scatter-JnoA3CD5.js.map} +1 -1
  152. package/dist/client/chunks/{chart-sunburst-IUrLGpyo.js → chart-sunburst-BtzRp5bg.js} +3 -3
  153. package/dist/client/chunks/{chart-sunburst-IUrLGpyo.js.map → chart-sunburst-BtzRp5bg.js.map} +1 -1
  154. package/dist/client/chunks/{chart-tree-map-DS5X1Wiw.js → chart-tree-map-HQitd39D.js} +3 -3
  155. package/dist/client/chunks/{chart-tree-map-DS5X1Wiw.js.map → chart-tree-map-HQitd39D.js.map} +1 -1
  156. package/dist/client/chunks/{chart-waterfall-C1GZfgHw.js → chart-waterfall-Dd3HMz3p.js} +3 -3
  157. package/dist/client/chunks/{chart-waterfall-C1GZfgHw.js.map → chart-waterfall-Dd3HMz3p.js.map} +1 -1
  158. package/dist/client/chunks/{charts-core-DQXx0Xk-.js → charts-core-CQFOTTPb.js} +2 -2
  159. package/dist/client/chunks/{charts-core-DQXx0Xk-.js.map → charts-core-CQFOTTPb.js.map} +1 -1
  160. package/dist/client/chunks/charts-loader-BlxEsp39.js +87 -0
  161. package/dist/client/chunks/{charts-loader-DuV9kYN8.js.map → charts-loader-BlxEsp39.js.map} +1 -1
  162. package/dist/client/chunks/core-BWRP9s8x.js.map +1 -1
  163. package/dist/client/chunks/dashboardExport-Db3rmUP1.js.map +1 -1
  164. package/dist/client/chunks/dist-COqN0-Yj.js.map +1 -1
  165. package/dist/client/chunks/exceljs.min-CdNVdwM3.js.map +1 -1
  166. package/dist/client/chunks/{schema-visualization-DIn9gy5O.js → schema-visualization-BspQ-XB8.js} +3 -3
  167. package/dist/client/chunks/{schema-visualization-DIn9gy5O.js.map → schema-visualization-BspQ-XB8.js.map} +1 -1
  168. package/dist/client/chunks/{useDirtyStateTracking-giMoYB90.js → useDirtyStateTracking-DY5sjvb6.js} +4 -4
  169. package/dist/client/chunks/{useDirtyStateTracking-giMoYB90.js.map → useDirtyStateTracking-DY5sjvb6.js.map} +1 -1
  170. package/dist/client/chunks/{useExplainAI-CpFZbdn-.js → useExplainAI-BY0Ti3FZ.js} +5 -5
  171. package/dist/client/chunks/{useExplainAI-CpFZbdn-.js.map → useExplainAI-BY0Ti3FZ.js.map} +1 -1
  172. package/dist/client/chunks/{vendor-wyAsikWW.js → vendor-C4pD7rZf.js} +2 -2
  173. package/dist/client/chunks/{vendor-wyAsikWW.js.map → vendor-C4pD7rZf.js.map} +1 -1
  174. package/dist/client/components.js +1 -1
  175. package/dist/client/hooks/queries/useExplainAI.d.ts +3 -2
  176. package/dist/client/hooks.js +3 -3
  177. package/dist/client/icons.js +1 -1
  178. package/dist/client/index.js +13 -13
  179. package/dist/client/index.js.map +1 -1
  180. package/dist/client/providers.js +1 -1
  181. package/dist/client/schema.js +1 -1
  182. package/dist/client/types.d.ts +7 -0
  183. package/dist/client/utils.js +4 -4
  184. package/dist/client-bundle-stats.html +1 -1
  185. package/dist/mcp-app/mcp-app.html +4 -4
  186. package/dist/server/index.cjs +42 -42
  187. package/dist/server/index.js +1083 -1103
  188. package/dist/server/{openai-Cxii1K2N.cjs → openai-C6tdx3yN.cjs} +2 -2
  189. package/dist/server/{openai-aLi6lmJs.js → openai-D0vh48Oi.js} +2 -2
  190. package/dist/server/{openai-DC2ye24o.cjs → openai-D346-vmt.cjs} +1 -1
  191. package/dist/server/{openai-Jt2WUOXm.js → openai-SILGL2q_.js} +1 -1
  192. package/package.json +2 -2
  193. package/dist/adapters/ActivityGridChart.config-BXelP_3e.cjs +0 -1
  194. package/dist/adapters/ActivityGridChart.config-BjOOT9bc.js +0 -2
  195. package/dist/adapters/AreaChart.config-B9PiH7Kt.js +0 -2
  196. package/dist/adapters/AreaChart.config-Bv39EDi8.cjs +0 -1
  197. package/dist/adapters/BarChart.config-CU-XGdDO.cjs +0 -1
  198. package/dist/adapters/BarChart.config-D9OIP1uN.js +0 -2
  199. package/dist/adapters/BoxPlotChart.config-C3cLagI6.js +0 -2
  200. package/dist/adapters/BoxPlotChart.config-CMwswa9H.cjs +0 -1
  201. package/dist/adapters/BubbleChart.config--rvyga9s.js +0 -2
  202. package/dist/adapters/BubbleChart.config-DOCLeg91.cjs +0 -1
  203. package/dist/adapters/CandlestickChart.config-B8h__isO.cjs +0 -1
  204. package/dist/adapters/CandlestickChart.config-DPzi-8B_.js +0 -2
  205. package/dist/adapters/DataTable.config-Dn2PyQdy.cjs +0 -1
  206. package/dist/adapters/DataTable.config-wtCGsLPw.js +0 -2
  207. package/dist/adapters/DotStripChart.config-BFshbpk0.cjs +0 -1
  208. package/dist/adapters/DotStripChart.config-c-tbauT6.js +0 -2
  209. package/dist/adapters/FunnelChart.config-CZYDI4k-.js +0 -2
  210. package/dist/adapters/FunnelChart.config-Dc2pIfJy.cjs +0 -1
  211. package/dist/adapters/GaugeChart.config-C9LYrKB1.cjs +0 -1
  212. package/dist/adapters/GaugeChart.config-DD73ueqk.js +0 -2
  213. package/dist/adapters/HeatMapChart.config-5DgOpgpV.js +0 -2
  214. package/dist/adapters/HeatMapChart.config-BZgQ255E.cjs +0 -1
  215. package/dist/adapters/KpiDelta.config-BEB3XqML.cjs +0 -1
  216. package/dist/adapters/KpiDelta.config-DeRkPIxD.js +0 -2
  217. package/dist/adapters/KpiNumber.config-CxpTAKzR.cjs +0 -1
  218. package/dist/adapters/KpiNumber.config-DM1dRQL-.js +0 -2
  219. package/dist/adapters/KpiText.config-Dt59uikm.js +0 -2
  220. package/dist/adapters/KpiText.config-Dt_pW6mK.cjs +0 -1
  221. package/dist/adapters/LineChart.config-YeXia1kV.cjs +0 -1
  222. package/dist/adapters/LineChart.config-jX2ulNmq.js +0 -2
  223. package/dist/adapters/MarkdownChart.config-BAXU79ec.js +0 -2
  224. package/dist/adapters/MarkdownChart.config-BP6_9ET2.cjs +0 -1
  225. package/dist/adapters/MeasureProfileChart.config-BW2gdPaM.cjs +0 -1
  226. package/dist/adapters/MeasureProfileChart.config-CSxeKHnS.js +0 -2
  227. package/dist/adapters/PieChart.config-Ci3ZPY9U.cjs +0 -1
  228. package/dist/adapters/PieChart.config-DtCSYlvx.js +0 -2
  229. package/dist/adapters/ProportionBarChart.config-B71wPMKX.js +0 -2
  230. package/dist/adapters/ProportionBarChart.config-Bihgdn8v.cjs +0 -1
  231. package/dist/adapters/RadarChart.config-CC8jIJ78.js +0 -2
  232. package/dist/adapters/RadarChart.config-D7dCuKRM.cjs +0 -1
  233. package/dist/adapters/RadialBarChart.config-DC2nQk5q.js +0 -2
  234. package/dist/adapters/RadialBarChart.config-Dumbvnj1.cjs +0 -1
  235. package/dist/adapters/RecordsTable.config-BRqLDmY3.cjs +0 -1
  236. package/dist/adapters/RecordsTable.config-D1wlIO1v.js +0 -2
  237. package/dist/adapters/RetentionCombinedChart.config-DejP7Hcc.cjs +0 -1
  238. package/dist/adapters/RetentionCombinedChart.config-yDEDWwJt.js +0 -2
  239. package/dist/adapters/RetentionHeatmap.config-BSqTkHB8.cjs +0 -1
  240. package/dist/adapters/RetentionHeatmap.config-GRJjblsW.js +0 -2
  241. package/dist/adapters/SankeyChart.config-9b1eT_2V.js +0 -2
  242. package/dist/adapters/SankeyChart.config-n8ro9EZU.cjs +0 -1
  243. package/dist/adapters/ScatterChart.config-BHqhTxPV.cjs +0 -1
  244. package/dist/adapters/ScatterChart.config-Bub2V8Ge.js +0 -2
  245. package/dist/adapters/SunburstChart.config-CxG0NFqN.js +0 -2
  246. package/dist/adapters/SunburstChart.config-PmN9LEb5.cjs +0 -1
  247. package/dist/adapters/TreeMapChart.config-D2S3rG6P.js +0 -2
  248. package/dist/adapters/TreeMapChart.config-TC4dciRa.cjs +0 -1
  249. package/dist/adapters/WaterfallChart.config-BirJq5VE.cjs +0 -1
  250. package/dist/adapters/WaterfallChart.config-DYMzte7F.js +0 -2
  251. package/dist/adapters/mcp-app-html-CUL2sMpA.js +0 -5
  252. package/dist/adapters/mcp-app-html-Ey6aj9WR.cjs +0 -1
  253. package/dist/client/chunks/DashboardEditModal-3_odkGXU.js.map +0 -1
  254. package/dist/client/chunks/charts-loader-DuV9kYN8.js +0 -87
@@ -0,0 +1,2 @@
1
+ import { v as e } from "./handler-CtcALGcY.js";
2
+ export { e as activityGridChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.activityGridChartConfig=e.v;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.areaChartConfig=e.D;
@@ -0,0 +1,2 @@
1
+ import { D as e } from "./handler-CtcALGcY.js";
2
+ export { e as areaChartConfig };
@@ -0,0 +1,2 @@
1
+ import { k as e } from "./handler-CtcALGcY.js";
2
+ export { e as barChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.barChartConfig=e.k;
@@ -0,0 +1,2 @@
1
+ import { s as e } from "./handler-CtcALGcY.js";
2
+ export { e as boxPlotChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.boxPlotChartConfig=e.s;
@@ -0,0 +1,2 @@
1
+ import { w as e } from "./handler-CtcALGcY.js";
2
+ export { e as bubbleChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.bubbleChartConfig=e.w;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.candlestickChartConfig=e.i;
@@ -0,0 +1,2 @@
1
+ import { i as e } from "./handler-CtcALGcY.js";
2
+ export { e as candlestickChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.dataTableConfig=e.b;
@@ -0,0 +1,2 @@
1
+ import { b as e } from "./handler-CtcALGcY.js";
2
+ export { e as dataTableConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.dotStripChartConfig=e.o;
@@ -0,0 +1,2 @@
1
+ import { o as e } from "./handler-CtcALGcY.js";
2
+ export { e as dotStripChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.funnelChartConfig=e.p;
@@ -0,0 +1,2 @@
1
+ import { p as e } from "./handler-CtcALGcY.js";
2
+ export { e as funnelChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.gaugeChartConfig=e.t;
@@ -0,0 +1,2 @@
1
+ import { t as e } from "./handler-CtcALGcY.js";
2
+ export { e as gaugeChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.heatmapChartConfig=e.u;
@@ -0,0 +1,2 @@
1
+ import { u as e } from "./handler-CtcALGcY.js";
2
+ export { e as heatmapChartConfig };
@@ -0,0 +1,2 @@
1
+ import { g as e } from "./handler-CtcALGcY.js";
2
+ export { e as kpiDeltaConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.kpiDeltaConfig=e.g;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.kpiNumberConfig=e._;
@@ -0,0 +1,2 @@
1
+ import { _ as e } from "./handler-CtcALGcY.js";
2
+ export { e as kpiNumberConfig };
@@ -0,0 +1,2 @@
1
+ import { h as e } from "./handler-CtcALGcY.js";
2
+ export { e as kpiTextConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.kpiTextConfig=e.h;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.lineChartConfig=e.O;
@@ -0,0 +1,2 @@
1
+ import { O as e } from "./handler-CtcALGcY.js";
2
+ export { e as lineChartConfig };
@@ -0,0 +1,2 @@
1
+ import { m as e } from "./handler-CtcALGcY.js";
2
+ export { e as markdownConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.markdownConfig=e.m;
@@ -0,0 +1,2 @@
1
+ import { r as e } from "./handler-CtcALGcY.js";
2
+ export { e as measureProfileChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.measureProfileChartConfig=e.r;
@@ -0,0 +1,2 @@
1
+ import { E as e } from "./handler-CtcALGcY.js";
2
+ export { e as pieChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.pieChartConfig=e.E;
@@ -0,0 +1,2 @@
1
+ import { n as e } from "./handler-CtcALGcY.js";
2
+ export { e as proportionBarChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.proportionBarChartConfig=e.n;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.radarChartConfig=e.C;
@@ -0,0 +1,2 @@
1
+ import { C as e } from "./handler-CtcALGcY.js";
2
+ export { e as radarChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.radialBarChartConfig=e.S;
@@ -0,0 +1,2 @@
1
+ import { S as e } from "./handler-CtcALGcY.js";
2
+ export { e as radialBarChartConfig };
@@ -0,0 +1,2 @@
1
+ import { y as e } from "./handler-CtcALGcY.js";
2
+ export { e as recordsTableConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.recordsTableConfig=e.y;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.retentionCombinedConfig=e.c;
@@ -0,0 +1,2 @@
1
+ import { c as e } from "./handler-CtcALGcY.js";
2
+ export { e as retentionCombinedConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.retentionHeatmapConfig=e.l;
@@ -0,0 +1,2 @@
1
+ import { l as e } from "./handler-CtcALGcY.js";
2
+ export { e as retentionHeatmapConfig };
@@ -0,0 +1,2 @@
1
+ import { f as e } from "./handler-CtcALGcY.js";
2
+ export { e as sankeyChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.sankeyChartConfig=e.f;
@@ -0,0 +1,2 @@
1
+ import { T as e } from "./handler-CtcALGcY.js";
2
+ export { e as scatterChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.scatterChartConfig=e.T;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.sunburstChartConfig=e.d;
@@ -0,0 +1,2 @@
1
+ import { d as e } from "./handler-CtcALGcY.js";
2
+ export { e as sunburstChartConfig };
@@ -0,0 +1,2 @@
1
+ import { x as e } from "./handler-CtcALGcY.js";
2
+ export { e as treemapChartConfig };
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.treemapChartConfig=e.x;
@@ -0,0 +1 @@
1
+ const e=require("./handler-Dp8fpSpk.cjs");exports.waterfallChartConfig=e.a;
@@ -0,0 +1,2 @@
1
+ import { a as e } from "./handler-CtcALGcY.js";
2
+ export { e as waterfallChartConfig };
@@ -1,4 +1,4 @@
1
- const e=require("./utils-iMkgJr10.cjs");function t(t){return e.nt`${t} asc`}function n(t){return e.nt`${t} desc`}function r(t){return e.nt`count(${t||e.nt.raw(`*`)})`.mapWith(Number)}function i(t){return e.nt`count(distinct ${t})`.mapWith(Number)}function a(t){return e.nt`sum(${t})`.mapWith(String)}function o(t){return e.nt`max(${t})`.mapWith(e.it(t,e.rt)?t:String)}function s(t){return e.nt`min(${t})`.mapWith(e.it(t,e.rt)?t:String)}function c(t){return t&&t.length>0?e.nt`PARTITION BY ${e.nt.join(t,e.nt`, `)}`:e.nt``}function l(t){return t&&t.length>0?e.nt`ORDER BY ${e.nt.join(t.map(t=>t.direction===`desc`?e.nt`${t.field} DESC`:e.nt`${t.field} ASC`),e.nt`, `)}`:e.nt``}function u(e){return e===`unbounded`?`UNBOUNDED PRECEDING`:typeof e==`number`?`${e} PRECEDING`:`CURRENT ROW`}function d(e){return e===`unbounded`?`UNBOUNDED FOLLOWING`:e===`current`?`CURRENT ROW`:typeof e==`number`?`${e} FOLLOWING`:`CURRENT ROW`}function f(t){if(!t)return e.nt``;let n=t.type.toUpperCase(),r=u(t.start),i=d(t.end);return e.nt`${e.nt.raw(n)} BETWEEN ${e.nt.raw(r)} AND ${e.nt.raw(i)}`}function p(t,n,r){let i=[];t&&t.length>0&&i.push(c(t)),n&&n.length>0&&i.push(l(n)),r?.frame&&i.push(f(r.frame));let a=i.length>0?e.nt.join(i,e.nt` `):e.nt``;return e.nt`OVER (${a})`}function m(t,n,r,i){let a=i?.defaultValue===void 0?e.nt``:e.nt`, ${i.defaultValue}`;return e.nt`${e.nt.raw(t)}(${n}, ${i?.offset??1}${a}) ${r}`}var h={rank:`RANK`,denseRank:`DENSE_RANK`,rowNumber:`ROW_NUMBER`},g={firstValue:`FIRST_VALUE`,lastValue:`LAST_VALUE`,movingAvg:`AVG`,movingSum:`SUM`};function _(t,n,r,i){if(t===`lag`||t===`lead`)return m(t===`lag`?`LAG`:`LEAD`,n,r,i);if(t===`ntile`)return e.nt`NTILE(${i?.nTile??4}) ${r}`;let a=h[t];if(a)return e.nt`${e.nt.raw(a)}() ${r}`;let o=g[t];if(o)return e.nt`${e.nt.raw(o)}(${n}) ${r}`;throw Error(`Unsupported window function: ${t}`)}var v=class{preprocessCalculatedTemplate(e){return e}nullToZero(t){return e.nt`COALESCE(${t}, 0)`}caseInsensitiveLike(t,n,r){return r?e.nt`${t} NOT ILIKE ${n}`:e.nt`${t} ILIKE ${n}`}regexCondition(t,n,r){return r?e.nt`${t} !~* ${n}`:e.nt`${t} ~* ${n}`}buildStringCondition(t,n,r){switch(n){case`contains`:return this.caseInsensitiveLike(t,`%${r}%`,!1);case`notContains`:return this.caseInsensitiveLike(t,`%${r}%`,!0);case`startsWith`:return this.caseInsensitiveLike(t,`${r}%`,!1);case`endsWith`:return this.caseInsensitiveLike(t,`%${r}`,!1);case`like`:return e.nt`${t} LIKE ${r}`;case`notLike`:return e.nt`${t} NOT LIKE ${r}`;case`ilike`:return this.caseInsensitiveLike(t,r,!1);case`regex`:return this.regexCondition(t,r,!1);case`notRegex`:return this.regexCondition(t,r,!0);default:throw Error(`Unsupported string operator: ${n}`)}}buildConditionalAggregation(t,n,r){let i=t.toUpperCase();return t===`count`&&!n?e.nt`${e.nt.raw(i)}(CASE WHEN ${r} THEN 1 END)`:e.nt`${e.nt.raw(i)}(CASE WHEN ${r} THEN ${n} END)`}buildAvg(t){return this.nullToZero(e.nt`AVG(${t})`)}buildCaseWhen(t,n){let r=t.map(t=>e.nt`WHEN ${t.when} THEN ${t.then}`).reduce((t,n)=>e.nt`${t} ${n}`);return n===void 0?e.nt`CASE ${r} END`:e.nt`CASE ${r} ELSE ${n} END`}buildBooleanLiteral(t){return t?e.nt`TRUE`:e.nt`FALSE`}convertFilterValue(e){return e}prepareDateValue(e){return e}isTimestampInteger(){return!1}convertTimeDimensionResult(e){return e}buildStddev(t,n=!1){let r=n?`STDDEV_SAMP`:`STDDEV_POP`;return this.nullToZero(e.nt`${e.nt.raw(r)}(${t})`)}buildVariance(t,n=!1){let r=n?`VAR_SAMP`:`VAR_POP`;return this.nullToZero(e.nt`${e.nt.raw(r)}(${t})`)}buildWindowFunction(e,t,n,r,i){return _(e,t,p(n,r,i),i)}decimalTryCastPattern(){return`^ *[+-]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+) *$`}integerTryCastPattern(){return`^ *[+-]?[0-9]+ *$`}timestampTryCastPattern(){return`^ *[0-9]{4}-[0-9]{2}-[0-9]{2}([ T][0-9]{2}:[0-9]{2}(:[0-9]{2}(\\.[0-9]+)?)?([+-][0-9]{2}:?[0-9]{2}|Z)?)? *$`}buildPattern(e,t){switch(e){case`contains`:case`notContains`:return`%${t}%`;case`startsWith`:return`${t}%`;case`endsWith`:return`%${t}`;default:return t}}parseISODuration(e){let t={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},n=e.match(/^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!n)throw Error(`Invalid ISO 8601 duration format: ${e}`);return t.years=parseInt(n[1]||`0`,10),t.months=parseInt(n[2]||`0`,10),t.days=parseInt(n[3]||`0`,10),t.hours=parseInt(n[4]||`0`,10),t.minutes=parseInt(n[5]||`0`,10),t.seconds=parseFloat(n[6]||`0`),t}durationToSeconds(e){let t=this.parseISODuration(e);return t.years*365*24*60*60+t.months*30*24*60*60+t.days*24*60*60+t.hours*60*60+t.minutes*60+t.seconds}},y=class extends v{getEngineType(){return`postgres`}buildIntervalFromISO(t){let n=this.parseISODuration(t),r=[];n.years&&r.push(`${n.years} years`),n.months&&r.push(`${n.months} months`),n.days&&r.push(`${n.days} days`),n.hours&&r.push(`${n.hours} hours`),n.minutes&&r.push(`${n.minutes} minutes`),n.seconds&&r.push(`${n.seconds} seconds`);let i=r.join(` `)||`0 seconds`;return e.nt`INTERVAL '${e.nt.raw(i)}'`}buildTimeDifferenceSeconds(t,n){return e.nt`EXTRACT(EPOCH FROM (${t} - ${n}))`}buildDateAddInterval(t,n){let r=this.buildIntervalFromISO(n);return e.nt`(${t} + ${r})`}buildConditionalAggregation(t,n,r){let i=t.toUpperCase();return t===`count`&&!n?e.nt`COUNT(*) FILTER (WHERE ${r})`:e.nt`${e.nt.raw(i)}(${n}) FILTER (WHERE ${r})`}buildDateDiffPeriods(t,n,r){switch(r){case`day`:return e.nt`(${n}::date - ${t}::date)`;case`week`:return e.nt`FLOOR((${n}::date - ${t}::date) / 7)`;case`month`:return e.nt`(EXTRACT(YEAR FROM AGE(${n}::timestamp, ${t}::timestamp)) * 12 + EXTRACT(MONTH FROM AGE(${n}::timestamp, ${t}::timestamp)))::integer`;default:throw Error(`Unsupported date diff unit: ${r}`)}}buildPeriodSeriesSubquery(t){return e.nt`(SELECT generate_series(0, ${t}) as period_number) p`}buildTimeDimension(t,n){switch(t){case`year`:return e.nt`DATE_TRUNC('year', ${n}::timestamp)`;case`quarter`:return e.nt`DATE_TRUNC('quarter', ${n}::timestamp)`;case`month`:return e.nt`DATE_TRUNC('month', ${n}::timestamp)`;case`week`:return e.nt`DATE_TRUNC('week', ${n}::timestamp)`;case`day`:return e.nt`DATE_TRUNC('day', ${n}::timestamp)::timestamp`;case`hour`:return e.nt`DATE_TRUNC('hour', ${n}::timestamp)`;case`minute`:return e.nt`DATE_TRUNC('minute', ${n}::timestamp)`;case`second`:return e.nt`DATE_TRUNC('second', ${n}::timestamp)`;default:return n}}castToType(t,n){switch(n){case`timestamp`:return e.nt`${t}::timestamp`;case`decimal`:return e.nt`${t}::decimal`;case`integer`:return e.nt`${t}::integer`;default:throw Error(`Unsupported cast type: ${n}`)}}tryCastToType(t,n){switch(n){case`timestamp`:return e.nt`CASE WHEN ${t} ~ ${this.timestampTryCastPattern()} THEN ${t}::timestamp ELSE NULL END`;case`decimal`:return e.nt`CASE WHEN ${t} ~ ${this.decimalTryCastPattern()} THEN ${t}::decimal ELSE NULL END`;case`integer`:return e.nt`CASE WHEN ${t} ~ ${this.integerTryCastPattern()} THEN ${t}::integer ELSE NULL END`;default:throw Error(`Unsupported cast type: ${n}`)}}getCapabilities(){return{supportsPercentile:!0,supportsLateralJoins:!0,supportsPercentileSubqueries:!0,supportsLateralSubqueriesInCTE:!0}}buildPercentile(t,n){let r=n/100;return e.nt`PERCENTILE_CONT(${r}) WITHIN GROUP (ORDER BY ${t})`}},b=class extends v{getEngineType(){return`mysql`}buildIntervalFromISO(t){let n=this.durationToSeconds(t);return e.nt`${n}`}buildTimeDifferenceSeconds(t,n){return e.nt`TIMESTAMPDIFF(SECOND, ${n}, ${t})`}buildDateAddInterval(t,n){let r=this.parseISODuration(n),i=t;return r.years&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.years} YEAR)`),r.months&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.months} MONTH)`),r.days&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.days} DAY)`),r.hours&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.hours} HOUR)`),r.minutes&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.minutes} MINUTE)`),r.seconds&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.seconds} SECOND)`),i}buildDateDiffPeriods(t,n,r){let i=r.toUpperCase();return e.nt`TIMESTAMPDIFF(${e.nt.raw(i)}, ${t}, ${n})`}buildPeriodSeriesSubquery(t){return e.nt`(
1
+ const e=require("./utils-BFGzuSlF.cjs");function t(t){return e.nt`${t} asc`}function n(t){return e.nt`${t} desc`}function r(t){return e.nt`count(${t||e.nt.raw(`*`)})`.mapWith(Number)}function i(t){return e.nt`count(distinct ${t})`.mapWith(Number)}function a(t){return e.nt`sum(${t})`.mapWith(String)}function o(t){return e.nt`max(${t})`.mapWith(e.it(t,e.rt)?t:String)}function s(t){return e.nt`min(${t})`.mapWith(e.it(t,e.rt)?t:String)}function c(t){return t&&t.length>0?e.nt`PARTITION BY ${e.nt.join(t,e.nt`, `)}`:e.nt``}function l(t){return t&&t.length>0?e.nt`ORDER BY ${e.nt.join(t.map(t=>t.direction===`desc`?e.nt`${t.field} DESC`:e.nt`${t.field} ASC`),e.nt`, `)}`:e.nt``}function u(e){return e===`unbounded`?`UNBOUNDED PRECEDING`:typeof e==`number`?`${e} PRECEDING`:`CURRENT ROW`}function d(e){return e===`unbounded`?`UNBOUNDED FOLLOWING`:e===`current`?`CURRENT ROW`:typeof e==`number`?`${e} FOLLOWING`:`CURRENT ROW`}function f(t){if(!t)return e.nt``;let n=t.type.toUpperCase(),r=u(t.start),i=d(t.end);return e.nt`${e.nt.raw(n)} BETWEEN ${e.nt.raw(r)} AND ${e.nt.raw(i)}`}function p(t,n,r){let i=[];t&&t.length>0&&i.push(c(t)),n&&n.length>0&&i.push(l(n)),r?.frame&&i.push(f(r.frame));let a=i.length>0?e.nt.join(i,e.nt` `):e.nt``;return e.nt`OVER (${a})`}function m(t,n,r,i){let a=i?.defaultValue===void 0?e.nt``:e.nt`, ${i.defaultValue}`;return e.nt`${e.nt.raw(t)}(${n}, ${i?.offset??1}${a}) ${r}`}var h={rank:`RANK`,denseRank:`DENSE_RANK`,rowNumber:`ROW_NUMBER`},g={firstValue:`FIRST_VALUE`,lastValue:`LAST_VALUE`,movingAvg:`AVG`,movingSum:`SUM`};function _(t,n,r,i){if(t===`lag`||t===`lead`)return m(t===`lag`?`LAG`:`LEAD`,n,r,i);if(t===`ntile`)return e.nt`NTILE(${i?.nTile??4}) ${r}`;let a=h[t];if(a)return e.nt`${e.nt.raw(a)}() ${r}`;let o=g[t];if(o)return e.nt`${e.nt.raw(o)}(${n}) ${r}`;throw Error(`Unsupported window function: ${t}`)}var v=class{preprocessCalculatedTemplate(e){return e}nullToZero(t){return e.nt`COALESCE(${t}, 0)`}caseInsensitiveLike(t,n,r){return r?e.nt`${t} NOT ILIKE ${n}`:e.nt`${t} ILIKE ${n}`}regexCondition(t,n,r){return r?e.nt`${t} !~* ${n}`:e.nt`${t} ~* ${n}`}buildStringCondition(t,n,r){switch(n){case`contains`:return this.caseInsensitiveLike(t,`%${r}%`,!1);case`notContains`:return this.caseInsensitiveLike(t,`%${r}%`,!0);case`startsWith`:return this.caseInsensitiveLike(t,`${r}%`,!1);case`endsWith`:return this.caseInsensitiveLike(t,`%${r}`,!1);case`like`:return e.nt`${t} LIKE ${r}`;case`notLike`:return e.nt`${t} NOT LIKE ${r}`;case`ilike`:return this.caseInsensitiveLike(t,r,!1);case`regex`:return this.regexCondition(t,r,!1);case`notRegex`:return this.regexCondition(t,r,!0);default:throw Error(`Unsupported string operator: ${n}`)}}buildConditionalAggregation(t,n,r){let i=t.toUpperCase();return t===`count`&&!n?e.nt`${e.nt.raw(i)}(CASE WHEN ${r} THEN 1 END)`:e.nt`${e.nt.raw(i)}(CASE WHEN ${r} THEN ${n} END)`}buildAvg(t){return this.nullToZero(e.nt`AVG(${t})`)}buildCaseWhen(t,n){let r=t.map(t=>e.nt`WHEN ${t.when} THEN ${t.then}`).reduce((t,n)=>e.nt`${t} ${n}`);return n===void 0?e.nt`CASE ${r} END`:e.nt`CASE ${r} ELSE ${n} END`}buildBooleanLiteral(t){return t?e.nt`TRUE`:e.nt`FALSE`}convertFilterValue(e){return e}prepareDateValue(e){return e}isTimestampInteger(){return!1}convertTimeDimensionResult(e){return e}buildStddev(t,n=!1){let r=n?`STDDEV_SAMP`:`STDDEV_POP`;return this.nullToZero(e.nt`${e.nt.raw(r)}(${t})`)}buildVariance(t,n=!1){let r=n?`VAR_SAMP`:`VAR_POP`;return this.nullToZero(e.nt`${e.nt.raw(r)}(${t})`)}buildWindowFunction(e,t,n,r,i){return _(e,t,p(n,r,i),i)}decimalTryCastPattern(){return`^ *[+-]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+) *$`}integerTryCastPattern(){return`^ *[+-]?[0-9]+ *$`}timestampTryCastPattern(){return`^ *[0-9]{4}-[0-9]{2}-[0-9]{2}([ T][0-9]{2}:[0-9]{2}(:[0-9]{2}(\\.[0-9]+)?)?([+-][0-9]{2}:?[0-9]{2}|Z)?)? *$`}buildPattern(e,t){switch(e){case`contains`:case`notContains`:return`%${t}%`;case`startsWith`:return`${t}%`;case`endsWith`:return`%${t}`;default:return t}}parseISODuration(e){let t={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},n=e.match(/^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!n)throw Error(`Invalid ISO 8601 duration format: ${e}`);return t.years=parseInt(n[1]||`0`,10),t.months=parseInt(n[2]||`0`,10),t.days=parseInt(n[3]||`0`,10),t.hours=parseInt(n[4]||`0`,10),t.minutes=parseInt(n[5]||`0`,10),t.seconds=parseFloat(n[6]||`0`),t}durationToSeconds(e){let t=this.parseISODuration(e);return t.years*365*24*60*60+t.months*30*24*60*60+t.days*24*60*60+t.hours*60*60+t.minutes*60+t.seconds}},y=class extends v{getEngineType(){return`postgres`}buildIntervalFromISO(t){let n=this.parseISODuration(t),r=[];n.years&&r.push(`${n.years} years`),n.months&&r.push(`${n.months} months`),n.days&&r.push(`${n.days} days`),n.hours&&r.push(`${n.hours} hours`),n.minutes&&r.push(`${n.minutes} minutes`),n.seconds&&r.push(`${n.seconds} seconds`);let i=r.join(` `)||`0 seconds`;return e.nt`INTERVAL '${e.nt.raw(i)}'`}buildTimeDifferenceSeconds(t,n){return e.nt`EXTRACT(EPOCH FROM (${t} - ${n}))`}buildDateAddInterval(t,n){let r=this.buildIntervalFromISO(n);return e.nt`(${t} + ${r})`}buildConditionalAggregation(t,n,r){let i=t.toUpperCase();return t===`count`&&!n?e.nt`COUNT(*) FILTER (WHERE ${r})`:e.nt`${e.nt.raw(i)}(${n}) FILTER (WHERE ${r})`}buildDateDiffPeriods(t,n,r){switch(r){case`day`:return e.nt`(${n}::date - ${t}::date)`;case`week`:return e.nt`FLOOR((${n}::date - ${t}::date) / 7)`;case`month`:return e.nt`(EXTRACT(YEAR FROM AGE(${n}::timestamp, ${t}::timestamp)) * 12 + EXTRACT(MONTH FROM AGE(${n}::timestamp, ${t}::timestamp)))::integer`;default:throw Error(`Unsupported date diff unit: ${r}`)}}buildPeriodSeriesSubquery(t){return e.nt`(SELECT generate_series(0, ${t}) as period_number) p`}buildTimeDimension(t,n){switch(t){case`year`:return e.nt`DATE_TRUNC('year', ${n}::timestamp)`;case`quarter`:return e.nt`DATE_TRUNC('quarter', ${n}::timestamp)`;case`month`:return e.nt`DATE_TRUNC('month', ${n}::timestamp)`;case`week`:return e.nt`DATE_TRUNC('week', ${n}::timestamp)`;case`day`:return e.nt`DATE_TRUNC('day', ${n}::timestamp)::timestamp`;case`hour`:return e.nt`DATE_TRUNC('hour', ${n}::timestamp)`;case`minute`:return e.nt`DATE_TRUNC('minute', ${n}::timestamp)`;case`second`:return e.nt`DATE_TRUNC('second', ${n}::timestamp)`;default:return n}}castToType(t,n){switch(n){case`timestamp`:return e.nt`${t}::timestamp`;case`decimal`:return e.nt`${t}::decimal`;case`integer`:return e.nt`${t}::integer`;default:throw Error(`Unsupported cast type: ${n}`)}}tryCastToType(t,n){switch(n){case`timestamp`:return e.nt`CASE WHEN ${t} ~ ${this.timestampTryCastPattern()} THEN ${t}::timestamp ELSE NULL END`;case`decimal`:return e.nt`CASE WHEN ${t} ~ ${this.decimalTryCastPattern()} THEN ${t}::decimal ELSE NULL END`;case`integer`:return e.nt`CASE WHEN ${t} ~ ${this.integerTryCastPattern()} THEN ${t}::integer ELSE NULL END`;default:throw Error(`Unsupported cast type: ${n}`)}}getCapabilities(){return{supportsPercentile:!0,supportsLateralJoins:!0,supportsPercentileSubqueries:!0,supportsLateralSubqueriesInCTE:!0}}buildPercentile(t,n){let r=n/100;return e.nt`PERCENTILE_CONT(${r}) WITHIN GROUP (ORDER BY ${t})`}},b=class extends v{getEngineType(){return`mysql`}buildIntervalFromISO(t){let n=this.durationToSeconds(t);return e.nt`${n}`}buildTimeDifferenceSeconds(t,n){return e.nt`TIMESTAMPDIFF(SECOND, ${n}, ${t})`}buildDateAddInterval(t,n){let r=this.parseISODuration(n),i=t;return r.years&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.years} YEAR)`),r.months&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.months} MONTH)`),r.days&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.days} DAY)`),r.hours&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.hours} HOUR)`),r.minutes&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.minutes} MINUTE)`),r.seconds&&(i=e.nt`DATE_ADD(${i}, INTERVAL ${r.seconds} SECOND)`),i}buildDateDiffPeriods(t,n,r){let i=r.toUpperCase();return e.nt`TIMESTAMPDIFF(${e.nt.raw(i)}, ${t}, ${n})`}buildPeriodSeriesSubquery(t){return e.nt`(
2
2
  WITH RECURSIVE periods(period_number) AS (
3
3
  SELECT 0
4
4
  UNION ALL
@@ -161,6 +161,6 @@ const e=require("./utils-iMkgJr10.cjs");function t(t){return e.nt`${t} asc`}func
161
161
  FROM activity_periods
162
162
  WHERE period_number >= 0 AND period_number <= ${o}
163
163
  GROUP BY binding_key${e.nt.raw(a)}
164
- )`,c=this.databaseAdapter.buildPeriodSeriesSubquery(o),l={period_number:e.nt`p.period_number`.as(`period_number`),retained_users:e.nt`COUNT(DISTINCT CASE WHEN ump.max_period >= p.period_number THEN ump.binding_key END)`.as(`retained_users`)},u=[e.nt`p.period_number`];for(let t=0;t<r;t++)l[`breakdown_${t}`]=e.nt.raw(`ump.breakdown_${t}`).as(`breakdown_${t}`),u.push(e.nt.raw(`ump.breakdown_${t}`));return n.db.select(l).from(e.nt`${s} ump`).innerJoin(c,e.nt`TRUE`).groupBy(...u)}buildPeriodNumberExpression(e,t,n){return this.databaseAdapter.buildDateDiffPeriods(e,t,n)}};function Z(e){return{name:e.name,cube:e}}function Nn(t,n){return t.measures?t.measures.map(t=>{let[r,i]=t.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForMeasure`,{cubeName:r,measure:t}));return{name:t,cube:Z(a),localName:i}}):[]}function Pn(t,n){return t.dimensions?t.dimensions.map(t=>{let[r,i]=t.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForDimension`,{cubeName:r,dimension:t}));return{name:t,cube:Z(a),localName:i}}):[]}function Fn(t,n){return t.timeDimensions?t.timeDimensions.map(t=>{let[r,i]=t.dimension.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForTimeDimension`,{cubeName:r,timeDimension:t.dimension}));return{name:t.dimension,cube:Z(a),localName:i,granularity:t.granularity,dateRange:t.dateRange,fillMissingDates:t.fillMissingDates,compareDateRange:t.compareDateRange}}):[]}function In(e,t){return{measures:Nn(e,t),dimensions:Pn(e,t),timeDimensions:Fn(e,t)}}function Ln(e,t){return{measures:e.measures.map(e=>{let[n,r]=e.split(`.`);return{name:e,cube:{name:n,cube:t.get(n)},localName:r}}),dimensions:[],timeDimensions:[]}}var Rn=class{queryPlanner;constructor(e){this.queryPlanner=e}plan(e,t,n){return this.planWithAnalysis(e,t,n).plan}planWithAnalysis(t,n,r){let i=Array.from(this.queryPlanner.analyzeCubeUsage(n));if(i.length===0)throw Error(e.k(`server.errors.noCubesInQuery`));let a=this.queryPlanner.analyzePrimaryCube(i,n,t),o=a.selectedCube,s=t.get(o);if(!s)throw Error(e.k(`server.errors.primaryCubeNotFound`,{cubeName:o}));let c=i.filter(e=>e!==o).map(e=>this.queryPlanner.analyzeJoinPathForTarget(t,o,e,n)),l=i.length>1?this.queryPlanner.buildJoinPlanForPrimary(t,s,i,r,n):[],u=i.length>1?this.queryPlanner.buildPreAggregationCTEs(t,s,l,n,r)??[]:[],d=this.queryPlanner.buildWarnings(n,u),f=this.buildSourceFromPhases(s,l,u,t,n,r),p=f.source,m=this.buildQueryNode(p,n,t,d),h=this.buildPreAggregationAnalysis(u),g=new Map;for(let e of i){let n=t.get(e);n&&g.set(e,n)}let _=Ot(n.measures??[],g),v=[...c.filter(e=>!e.pathFound&&e.error).map(e=>e.error),...d.map(e=>e.message)];return{plan:m,analysis:{timestamp:new Date().toISOString(),cubeCount:i.length,cubesInvolved:[...i].sort(),primaryCube:a,joinPaths:c,preAggregations:h,querySummary:{queryType:u.length>0?`multi_cube_cte`:i.length>1?`multi_cube_join`:`single_cube`,measureStrategy:f.strategy,joinCount:l.length,cteCount:u.length,hasPreAggregation:u.length>0,hasWindowFunctions:_},warnings:v.length>0?v:void 0,planningTrace:{steps:[{phase:`cube_usage`,decision:`Identified ${i.length} cube${i.length===1?``:`s`} from query members`,details:{cubesInvolved:[...i].sort()}},{phase:`primary_cube_selection`,decision:`Selected '${a.selectedCube}' as primary cube (${a.reason})`,details:{selectedCube:a.selectedCube,reason:a.reason,candidates:a.candidates?.map(e=>e.cubeName)}},{phase:`join_planning`,decision:`Planned ${l.length} join${l.length===1?``:`s`}`,details:{joinCount:l.length,joinTargets:l.map(e=>e.target.name),pathSelection:c.map(e=>({targetCube:e.targetCube,strategy:e.selection?.strategy,selectedRank:e.selection?.selectedRank,selectedScore:e.selection?.selectedScore}))}},{phase:`cte_planning`,decision:`Planned ${u.length} pre-aggregation CTE${u.length===1?``:`s`}`,details:{cteCount:u.length,cubes:u.map(e=>e.cube.name)}},{phase:`measure_strategy`,decision:`Selected '${f.strategy}' measure strategy`,details:{strategy:f.strategy,regularMeasures:f.classification.regular.map(e=>e.name),multipliedMeasures:f.classification.multiplied.map(e=>e.name),deduplicationSafeMeasures:f.classification.deduplicationSafe.map(e=>e.name),sourceType:p.type}},{phase:`warnings`,decision:d.length>0?`Generated ${d.length} planning warning${d.length===1?``:`s`}`:`No planning warnings generated`,details:{warningCodes:d.map(e=>e.code)}}]}}}}buildSourceFromPhases(e,t,n,r,i,a){let o=this.tryBuildMultiFactMergeSource(i,r,a);if(o)return{source:o,strategy:`multiFactMerge`,classification:{regular:Nn(i,r),multiplied:[],deduplicationSafe:[]}};let s=this.buildSimpleSourceFromPhases(e,t,n,r,i),c=this.classifyMeasuresForStrategy(s.schema.measures,n),l=this.selectMeasureStrategy(c,i,r);return l===`keysDeduplication`?{source:this.buildKeysDeduplicationSource(s,c),strategy:l,classification:c}:{source:s,strategy:l,classification:c}}buildSimpleSourceFromPhases(e,t,n,r,i){let a=Z(e),o=t,s=n.map(e=>{let t=Z(e.cube);return{type:`ctePreAggregate`,schema:Ln(e,r),cube:t,alias:e.alias,cteAlias:e.cteAlias,joinKeys:e.joinKeys,measures:e.measures,propagatingFilters:e.propagatingFilters,downstreamJoinKeys:e.downstreamJoinKeys,intermediateJoins:e.intermediateJoins,cteType:e.cteType??`aggregate`,cteReason:e.cteReason??`hasMany`}});return{type:`simpleSource`,schema:In(i,r),primaryCube:a,joins:o,ctes:s}}tryBuildMultiFactMergeSource(e,t,n){if(!e.measures||e.measures.length<2)return null;let r=new Set;for(let t of e.measures){let[e]=t.split(`.`);e&&r.add(e)}if(r.size<2)return null;let i=new Set;for(let t of e.dimensions??[]){let[e]=t.split(`.`);e&&i.add(e)}for(let t of e.timeDimensions??[]){let[e]=t.dimension.split(`.`);e&&i.add(e)}if(i.size!==1)return null;let a=Array.from(i)[0];if(r.has(a)||!t.get(a))return null;let o=Array.from(r);if(!o.every(e=>this.hasDirectJoinToSharedDimension(t.get(e),a,t)))return null;let s=Pn(e,t),c=Fn(e,t),l={measures:Nn(e,t),dimensions:s,timeDimensions:c},u=[];for(let r of o){let i=(e.measures??[]).filter(e=>e.startsWith(`${r}.`)),o=new Set([r,a]),s={measures:i,dimensions:e.dimensions,timeDimensions:e.timeDimensions,filters:this.projectFiltersToAllowedCubes(e.filters,o)},c=this.buildGroupQueryNode(s,t,n);if(!c)return null;u.push(c)}return u.length<2?null:{type:`multiFactMerge`,schema:l,groups:u,sharedDimensions:s,mergeStrategy:`fullJoin`}}hasDirectJoinToSharedDimension(t,n,r){if(!t?.joins)return!1;for(let[,i]of Object.entries(t.joins)){let t=e.P(i.targetCube,r);if(t&&t.name===n&&(i.relationship===`belongsTo`||i.relationship===`hasOne`))return!0}return!1}buildGroupQueryNode(e,t,n){let r=Array.from(this.queryPlanner.analyzeCubeUsage(e));if(r.length===0)return null;let i=this.queryPlanner.analyzePrimaryCube(r,e,t),a=t.get(i.selectedCube);if(!a)return null;let o=r.length>1?this.queryPlanner.buildJoinPlanForPrimary(t,a,r,n,e):[],s=r.length>1?this.queryPlanner.buildPreAggregationCTEs(t,a,o,e,n)??[]:[],c=this.queryPlanner.buildWarnings(e,s),l=this.buildSourceFromPhases(a,o,s,t,e,n);return this.buildQueryNode(l.source,e,t,c)}projectFiltersToAllowedCubes(e,t){if(!e||e.length===0)return;let n=e.map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length>0?n:void 0}projectFilterNodeToAllowedCubes(e,t){if(`member`in e){let[n]=e.member.split(`.`);return n&&t.has(n)?e:null}if(`and`in e){let n=(e.and??[]).map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length===0?null:n.length===1?n[0]:{and:n}}if(`or`in e){let n=(e.or??[]).map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length===0?null:n.length===1?n[0]:{or:n}}return null}classifyMeasuresForStrategy(e,t){let n={regular:[],multiplied:[],deduplicationSafe:[]},r=new Set(t.filter(e=>e.cteReason===`fanOutPrevention`).map(e=>e.cube.name));for(let t of e){let e=t.cube.cube,i=e.measures?.[t.localName];if(!i||!r.has(e.name)){n.regular.push(t);continue}this.isDeduplicationSafeMeasure(i)?n.deduplicationSafe.push(t):n.multiplied.push(t)}return n}selectMeasureStrategy(e,t,n){return e.multiplied.length===0?`simple`:e.multiplied.every(e=>this.getPrimaryKeyColumns(e.cube.cube).length>0)&&this.isKeysDeduplicationExecutionSupported(e,t,n)?`keysDeduplication`:`ctePreAggregateFallback`}isKeysDeduplicationExecutionSupported(e,t,n){let r=new Set(e.multiplied.map(e=>e.cube.name));if(r.size!==1)return!1;let i=Array.from(r)[0],a=t.measures??[];if(a.length===0)return!1;let o=n.get(i);if(!o)return!1;for(let e of a){let[t,r]=e.split(`.`);if(t!==i){let e=n.get(t)?.measures?.[r];if(!e||![`sum`,`count`,`number`,`min`,`max`].includes(e.type))return!1;continue}let a=o.measures?.[r];if(!a||![`sum`,`count`,`number`,`min`,`max`,`avg`].includes(a.type))return!1}return!this.queryHasMeasureFilter(t,i,o)}queryHasMeasureFilter(e,t,n){let r=e=>{let[r,i]=e.split(`.`);return r===t&&!!n.measures?.[i]},i=e=>{if(!e)return!1;for(let t of e){if(`and`in t){if(i(t.and))return!0;continue}if(`or`in t){if(i(t.or))return!0;continue}if(`member`in t&&r(t.member))return!0}return!1};return i(e.filters)}buildKeysDeduplicationSource(e,t){let n=this.deduplicateColumnRefs(t.multiplied.flatMap(e=>this.getPrimaryKeyColumns(e.cube.cube))),r=t.regular.length>0?t.regular.map(e=>e.name):void 0;return{type:`keysDeduplication`,schema:e.schema,keysSource:e,measureSource:e,joinOn:n,regularMeasures:r}}isDeduplicationSafeMeasure(e){return e.type===`countDistinct`||e.type===`countDistinctApprox`}getPrimaryKeyColumns(e){let t=[];for(let[n,r]of Object.entries(e.dimensions??{}))r.primaryKey&&typeof r.sql!=`function`&&t.push({column:r.sql,alias:`${e.name}.${n}`});return t}deduplicateColumnRefs(e){let t=new Map;for(let n of e){let e=n.alias??String(n.column?.name??``);t.has(e)||t.set(e,n)}return Array.from(t.values())}buildQueryNode(e,t,n,r){let i=In(t,n),{measures:a,dimensions:o,timeDimensions:s}=i,c=this.buildOrderByRefs(t);return{type:`query`,schema:i,source:e,dimensions:o,measures:a,filters:t.filters??[],timeDimensions:s,orderBy:c,limit:t.limit,offset:t.offset,ungrouped:t.ungrouped,warnings:r}}buildPreAggregationAnalysis(e){return e.map(e=>({cubeName:e.cube.name,cteAlias:e.cteAlias,reason:e.cteReason===`fanOutPrevention`?`Potential fan-out from hasMany joins - pre-aggregate ${e.cube.name} to preserve correctness`:`hasMany relationship requires pre-aggregation for ${e.cube.name}`,reasonType:e.cteReason,measures:e.measures,joinKeys:e.joinKeys.map(e=>({sourceColumn:e.sourceColumn,targetColumn:e.targetColumn})),cteType:e.cteType}))}buildOrderByRefs(e){return e.order?Object.entries(e.order).map(([e,t])=>({name:e,direction:t})):[]}},zn=class{name=`identity`;optimise(e){return e}};function Bn(e,t,n,r){let i=Vn(e,n,r),a=[],o=new Map,s=new Map;if(e.preAggregationCTEs&&e.preAggregationCTEs.length>0)for(let c of e.preAggregationCTEs){let l=r.cteBuilder.buildPreAggregationCTE(c,t,n,e,i);l&&(a.push(l),o.set(c.cube.name,c.cteAlias),Hn(c,s))}return{preBuiltFilterMap:i,ctes:a,cteAliasMap:o,downstreamCubeMap:s}}function Vn(t,n,r){let i=new Map;if(!t.preAggregationCTEs||t.preAggregationCTEs.length===0)return i;for(let a of t.preAggregationCTEs)if(a.propagatingFilters&&a.propagatingFilters.length!==0)for(let t of a.propagatingFilters){let a=t.sourceCube.name;if(!i.has(a)){let e={filters:t.filters},o=new Map([[a,t.sourceCube]]),s=r.queryBuilder.buildWhereConditions(o,e,n);i.set(a,s)}let o=i.get(a);o&&o.length>0&&(t.preBuiltFilterSQL=o.length===1?o[0]:e.z(...o))}return i}function Hn(e,t){if(e.downstreamJoinKeys)for(let n of e.downstreamJoinKeys)t.set(n.targetCubeName,{cteAlias:e.cteAlias,joinKeys:n.joinKeys})}function Un(t,n,r,i,a,o){if(r.measures)for(let s of r.measures){let[c,l]=s.split(`.`),u=a.get(c);if(!u?.measures?.[l])continue;let d=u.measures[l];if(!U.isPostAggregationWindow(d))continue;let f=U.getWindowBaseMeasure(d,c);if(!f)continue;let[p,m]=f.split(`.`),h=a.get(p);if(!h?.measures?.[m])continue;let g=h.measures[m],_=n.preAggregationCTEs?.find(e=>e.cube?.name===p&&e.measures?.includes(f)),v;if(_){let t=e.nt`${e.nt.identifier(_.cteAlias)}.${e.nt.identifier(m)}`;v=e.nt`sum(${t})`}else v=o.queryBuilder.buildMeasureExpression(g,i,h);t[f]||(t[f]=e.nt`${v}`.as(f));let y=Wn(d,v,r,i,u,n,o);y&&(t[s]=e.nt`${y}`.as(s))}}function Wn(t,n,r,i,a,o,s){let c=t.windowConfig||{},l=(t,n)=>{if(!o.preAggregationCTEs)return null;let r=o.preAggregationCTEs.find(e=>e.cube?.name===t);return r&&r.cteAlias?e.nt`${e.nt.identifier(r.cteAlias)}.${e.nt.identifier(n)}`:null},u;if(c.orderBy&&c.orderBy.length>0)u=c.orderBy.map(t=>{let o=t.field.includes(`.`)?t.field.split(`.`)[1]:t.field;if(r.timeDimensions)for(let e of r.timeDimensions){let[n,r]=e.dimension.split(`.`);if(r===o){let c=l(n,o);if(c)return{field:c,direction:t.direction};let u=a.dimensions?.[r];if(u)return{field:s.queryBuilder.buildTimeDimensionExpression(u.sql,e.granularity,i),direction:t.direction}}}let u=a.dimensions?.[o];return u?{field:e.I(u.sql,i),direction:t.direction}:o===(c.measure?.includes(`.`)?c.measure.split(`.`)[1]:c.measure)||t.field===c.measure?{field:n,direction:t.direction}:null}).filter(e=>e!==null);else if(r.timeDimensions&&r.timeDimensions.length>0){let e=r.timeDimensions[0],[t,n]=e.dimension.split(`.`),o=l(t,n);if(o)u=[{field:o,direction:`asc`}];else{let r=a.name===t?a:void 0;if(r?.dimensions?.[n]){let t=r.dimensions[n];u=[{field:s.queryBuilder.buildTimeDimensionExpression(t.sql,e.granularity,i),direction:`asc`}]}}}let d;c.partitionBy&&c.partitionBy.length>0&&(d=c.partitionBy.map(t=>{let n=t.includes(`.`)?t.split(`.`)[1]:t,r=a.dimensions?.[n];return r?e.I(r.sql,i):null}).filter(e=>e!==null));let f=s.databaseAdapter.buildWindowFunction(t.type,n,d,u,{offset:c.offset,defaultValue:c.defaultValue,nTile:c.nTile,frame:c.frame});if(!f)return null;switch(c.operation||U.getDefaultWindowOperation(t.type)){case`difference`:return e.nt`${n} - ${f}`;case`ratio`:return e.nt`${n} / NULLIF(${f}, 0)`;case`percentChange`:return e.nt`((${n} - ${f}) / NULLIF(${f}, 0)) * 100`;default:return f}}function Gn(e,t,n,r,i){let a={...i.queryBuilder.buildSelections(e.joinCubes.length>0?r:e.primaryCube,t,n)};if(e.preAggregationCTEs)for(let o of e.preAggregationCTEs)Kn(a,o,t,n,r,i),Jn(a,o,r);return Un(a,e,t,n,r,i),a}function Kn(t,n,r,i,a,o){let s=n.cube.name;for(let c of n.measures){if(!t[c])continue;let[,l]=c.split(`.`),u=a.get(s);if(!u?.measures?.[l])continue;let d=u.measures[l],f=e.nt`${e.nt.identifier(n.cteAlias)}.${e.nt.identifier(l)}`,p;p=d.type===`calculated`&&d.calculatedSql?o.queryBuilder.buildCTECalculatedMeasure(d,u,n,a,i):qn(d,f,n,r,a,o),t[c]=e.nt`${p}`.as(c)}}function qn(e,t,n,r,i,c){let l=n.cteReason===`fanOutPrevention`,u=Yn(n,r,i),d=l||u;switch(e.type){case`count`:case`countDistinct`:case`sum`:return d?o(t):a(t);case`avg`:return d?o(t):c.databaseAdapter.buildAvg(t);case`min`:return s(t);case`max`:return o(t);case`number`:return o(t);default:return d?o(t):a(t)}}function Jn(t,n,r){let i=n.cube.name;for(let a in t){let[o,s]=a.split(`.`);if(o!==i)continue;let c=r.get(i),l=c&&c.dimensions?.[s],u=a.startsWith(i+`.`);if(!l&&!u)continue;let d=n.joinKeys.find(e=>e.targetColumn===s);if(!d&&c?.dimensions?.[s]){let e=c.dimensions[s].sql;d=n.joinKeys.find(t=>t.targetColumnObj===e)}(d||u&&c?.dimensions?.[s])&&(t[a]=e.nt`${e.nt.identifier(n.cteAlias)}.${e.nt.identifier(s)}`.as(a))}}function Yn(e,t,n){return e.cteReason!==`hasMany`||e.downstreamJoinKeys&&e.downstreamJoinKeys.length>0||e.intermediateJoins&&e.intermediateJoins.length>0||!(t.dimensions&&t.dimensions.length>0||t.timeDimensions&&t.timeDimensions.length>0)||t.dimensions?.some(t=>t.startsWith(`${e.cube.name}.`))||t.timeDimensions?.some(t=>t.dimension.startsWith(`${e.cube.name}.`))?!1:e.joinKeys.length>0&&e.joinKeys.every(e=>!!e.sourceColumnObj&&Xn(e.sourceColumnObj,t,n))}function Xn(e,t,n){if(t.dimensions)for(let r of t.dimensions){let[t,i]=r.split(`.`);if(n.get(t)?.dimensions?.[i]?.sql===e)return!0}if(t.timeDimensions)for(let r of t.timeDimensions){if(r.granularity)continue;let[t,i]=r.dimension.split(`.`);if(n.get(t)?.dimensions?.[i]?.sql===e)return!0}return!1}function Q(e,t,n,r){switch(t){case`inner`:return e.innerJoin(n,r);case`right`:return e.rightJoin(n,r);case`full`:return e.fullJoin(n,r);default:return e.leftJoin(n,r)}}function Zn(e){let t=new Map;if(t.set(e.primaryCube.name,e.primaryCube),e.joinCubes)for(let n of e.joinCubes)t.set(n.cube.name,n.cube);return t}function Qn(e,t,n,r,i,a){let o=[],s=$n(t,n,r,i);s=er(s,n.joins);let c=new Set,l=tr(e);if(e.joinCubes&&e.joinCubes.length>0)for(let n of e.joinCubes){let r=n.cube.name;(!l.has(r)||i.cteAliasMap.has(r))&&(s=nr(s,n,e,i,t,o),s=ar(s,n,e,i,t,a,c))}return{drizzleQuery:s,allWhereConditions:o,cubesWithSecurityInJoin:c,absorbedIntermediateCubes:l}}function $n(e,t,n,r){return r.ctes.length>0?e.db.with(...r.ctes).select(n).from(t.from):e.db.select(n).from(t.from)}function er(e,t){if(!t)return e;let n=e;for(let e of t)n=Q(n,e.type??`left`,e.table,e.on);return n}function tr(e){let t=new Set;if(e.preAggregationCTEs){for(let n of e.preAggregationCTEs)if(n.intermediateJoins&&n.intermediateJoins.length>0)for(let e of n.intermediateJoins)t.add(e.cube.name)}return t}function nr(e,t,n,r,i,a){let o=t.junctionTable;if(!o)return e;let s=rr(o,t,n,r),c=[];if(o.securitySql){let e=o.securitySql(i.securityContext);Array.isArray(e)?c.push(...e):c.push(e)}try{let t=Q(e,o.joinType??`left`,o.table,s);return c.length>0&&a.push(...c),t}catch{return e}}function rr(t,n,r,i){let a=t.joinCondition,o=t.sourceCubeName?i.cteAliasMap.get(t.sourceCubeName):void 0;if(!o)return a;let s=(r.preAggregationCTEs?.find(e=>e.cube.name===t.sourceCubeName))?.downstreamJoinKeys?.find(e=>e.targetCubeName===n.cube.name);if(s&&s.joinKeys.length>0){let t=[];for(let n of s.joinKeys){let r=e.nt`${e.nt.identifier(o)}.${e.nt.identifier(n.sourceColumn)}`,i=n.targetColumnObj;i&&t.push(e.U(i,r))}t.length>0&&(a=e.z(...t))}return a}function ir(t,n,r,i,a,o){if(n)return{joinTarget:e.nt`${e.nt.identifier(n)}`,joinCondition:o.cteBuilder.buildCTEJoinCondition(t,n,i),securityCondition:void 0,joinCubeBase:void 0};let s=r.downstreamCubeMap.get(t.cube.name),c=t.cube.sql(a),l;if(s&&!t.junctionTable){let t=[];for(let n of s.joinKeys){let r=e.nt`${e.nt.identifier(s.cteAlias)}.${e.nt.identifier(n.sourceColumn)}`,i=n.targetColumnObj||e.nt.identifier(n.targetColumn);t.push(e.U(r,i))}l=t.length===1?t[0]:e.z(...t)}else l=t.joinCondition;return{joinTarget:c.from,joinCondition:l,securityCondition:c.where,joinCubeBase:c}}function ar(t,n,r,i,a,o,s){let{joinTarget:c,joinCondition:l,securityCondition:u,joinCubeBase:d}=ir(n,i.cteAliasMap.get(n.cube.name),i,r,a,o),f=n.joinType||`left`,p=f!==`inner`&&u?e.z(l,u):l;try{let e;return f===`inner`?e=t.innerJoin(c,l):(e=Q(t,f,c,p),u&&s.add(n.cube.name)),er(e,d?.joins)}catch{return t}}function or(t,n,r,i,a,o,s,c){let l=sr(t,n,r,i,a,o,s,c),u=s.drizzleQuery;if(l.length>0){let t=l.length===1?l[0]:e.z(...l);u=u.where(t)}return cr(u,t,n,r,i,c)}function sr(e,t,n,r,i,a,o,s){let c=[...o.allWhereConditions];if(i.where&&c.push(i.where),e.joinCubes&&e.joinCubes.length>0)for(let t of e.joinCubes){let e=t.cube.name;if(a.cteAliasMap.get(e)||o.absorbedIntermediateCubes.has(e)||o.cubesWithSecurityInJoin.has(e))continue;let r=t.cube.sql(n);r.where&&c.push(r.where)}let l=s.queryBuilder.buildWhereConditions(e.joinCubes.length>0?r:e.primaryCube,t,n,e,a.preBuiltFilterMap);return l.length>0&&c.push(...l),c}function cr(t,n,r,i,a,o){let s=n.joinCubes.length>0?a:n.primaryCube,c=t,l=o.queryBuilder.buildGroupByFields(s,r,i,n);if(l.length>0&&(c=c.groupBy(...l)),!r.ungrouped){let t=o.queryBuilder.buildHavingConditions(s,r,i,n);if(t.length>0){let n=t.length===1?t[0]:e.z(...t);c=c.having(n)}}let u=o.queryBuilder.buildOrderBy(r);return u.length>0&&(c=c.orderBy(...u)),o.queryBuilder.applyLimitAndOffset(c,r)}function lr(e,t,n,r){let i=e.keysDeduplication;if(!i?.multipliedCubeName||!t.measures?.length)return null;let a=e.joinCubes.length>0?Zn(e):new Map([[e.primaryCube.name,e.primaryCube]]),o=a.get(i.multipliedCubeName);if(!o||!vr(t,o,i.multipliedCubeName))return null;let s=i.primaryKeyDimensions.length>0?i.primaryKeyDimensions:br(o);if(s.length===0)return null;let c=`${i.multipliedCubeName.toLowerCase()}_keys`,l=`${i.multipliedCubeName.toLowerCase()}_pk_agg`,u=i.regularMeasures??[],d=ur(t,n,r,a,o,s,u);if(!d)return null;let f=dr(e,t,n,r,a,c,d.keysSelections,d.keyGroupBy),p=mr(t,n,r,o,s,d.multipliedMeasures,l);return p?_r(t,n,r,a,o,{keysAlias:c,aggAlias:l,keysCte:f,aggCte:p,pkDimensions:s,pkAliases:d.pkAliases,multipliedMeasures:d.multipliedMeasures,regularMeasureNames:u}):null}function ur(t,n,r,i,a,o,s){let c={},l=[];if(t.dimensions)for(let r of t.dimensions){let[t,a]=r.split(`.`),o=i.get(t),s=o?.dimensions?.[a];if(!o||!s)return null;let u=e.I(s.sql,n);c[r]=e.nt`${u}`.as(r),l.push(u)}if(t.timeDimensions)for(let a of t.timeDimensions){let[t,o]=a.dimension.split(`.`),s=i.get(t),u=s?.dimensions?.[o];if(!s||!u)return null;let d=r.queryBuilder.buildTimeDimensionExpression(u.sql,a.granularity,n);c[a.dimension]=e.nt`${d}`.as(a.dimension),l.push(d)}let u=[];for(let t of o){let r=a.dimensions?.[t];if(!r)return null;let i=e.I(r.sql,n),o=`__pk__${t}`;c[o]=e.nt`${i}`.as(o),l.push(i),u.push(o)}let d=new Set(s),f=t.measures.filter(e=>!d.has(e));if(s.length>0){let t=r.queryBuilder.buildResolvedMeasures(s,i,n);for(let n of s){let r=t.get(n);if(!r)return null;let i=`__reg__${n.replace(`.`,`__`)}`;c[i]=e.nt`${r()}`.as(i)}}return{keysSelections:c,keyGroupBy:l,pkAliases:u,multipliedMeasures:f}}function dr(e,t,n,r,i,a,o,s){let c=e.primaryCube.sql(n),l=[];c.where&&l.push(c.where);let u=n.db.select(o).from(c.from);if(c.joins)for(let e of c.joins)u=Q(u,e.type??`left`,e.table,e.on);for(let t of e.joinCubes)u=fr(u,t,n,l);return l.push(...r.queryBuilder.buildWhereConditions(i,t,n)),u=gr(u,l),s.length>0&&(u=u.groupBy(...s)),n.db.$with(a).as(u)}function fr(e,t,n,r){let i=e;t.junctionTable&&(i=Q(i,t.junctionTable.joinType??`left`,t.junctionTable.table,t.junctionTable.joinCondition),pr(t.junctionTable.securitySql,n,r));let a=t.cube.sql(n);if(i=Q(i,t.joinType??`left`,a.from,t.joinCondition),a.joins)for(let e of a.joins)i=Q(i,e.type??`left`,e.table,e.on);return a.where&&r.push(a.where),i}function pr(e,t,n){if(!e)return;let r=e(t.securityContext);Array.isArray(r)?n.push(...r):n.push(r)}function mr(e,t,n,r,i,a,o){let s=r.sql(t),c=hr(t,n,r,i,a);if(!c)return null;let l=t.db.select(c.aggSelections).from(s.from);if(s.joins)for(let e of s.joins)l=Q(l,e.type??`left`,e.table,e.on);let u=[];return s.where&&u.push(s.where),u.push(...n.queryBuilder.buildWhereConditions(r,e,t)),l=gr(l,u),c.aggGroupBy.length>0&&(l=l.groupBy(...c.aggGroupBy)),t.db.$with(o).as(l)}function hr(t,n,r,i,a){let o={},s=[];for(let n of i){let i=r.dimensions?.[n];if(!i)return null;let a=e.I(i.sql,t);o[n]=e.nt`${a}`.as(n),s.push(a)}let c=new Set;for(let e of a){let[,t]=e.split(`.`);r.measures?.[t]?.type===`avg`&&c.add(t)}let l=a.filter(e=>{let[,t]=e.split(`.`);return!c.has(t)});if(l.length>0){let i=n.queryBuilder.buildResolvedMeasures(l,new Map([[r.name,r]]),t);for(let t of l){let[,n]=t.split(`.`),r=i.get(t);if(!r||typeof r!=`function`)return null;o[n]=e.nt`${r()}`.as(n)}}for(let n of a){let[,i]=n.split(`.`);if(!c.has(i))continue;let a=r.measures?.[i];if(!a?.sql)return null;let s=e.I(a.sql,t),l=`__avg_sum__${i}`,u=`__avg_count__${i}`;o[l]=e.nt`sum(${s})`.as(l),o[u]=e.nt`count(${s})`.as(u)}return{aggSelections:o,aggGroupBy:s}}function gr(t,n){return n.length===0?t:t.where(n.length===1?n[0]:e.z(...n))}function _r(t,n,r,i,a,o){let{keysAlias:s,aggAlias:c,keysCte:l,aggCte:u,pkDimensions:d,pkAliases:f,multipliedMeasures:p,regularMeasureNames:m}=o,h={};for(let n of t.dimensions??[])h[n]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n)}`.as(n);for(let n of t.timeDimensions??[])h[n.dimension]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n.dimension)}`.as(n.dimension);for(let e of p){let[,t]=e.split(`.`),n=a.measures?.[t];h[e]=xr(n?.type??`sum`,c,t,e)}for(let e of m){let[t,n]=e.split(`.`),r=i.get(t)?.measures?.[n],a=`__reg__${e.replace(`.`,`__`)}`;h[e]=xr(r?.type??`sum`,s,a,e)}let g=n.db.with(l,u).select(h).from(e.nt`${e.nt.identifier(s)}`),_=f.map((t,n)=>e.U(e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`,e.nt`${e.nt.identifier(c)}.${e.nt.identifier(d[n])}`)),v=_.length===1?_[0]:e.z(..._);g=g.leftJoin(e.nt`${e.nt.identifier(c)}`,v);let y=[...(t.dimensions??[]).map(t=>e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`),...(t.timeDimensions??[]).map(t=>e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t.dimension)}`)];y.length>0&&(g=g.groupBy(...y));let b=r.queryBuilder.buildOrderBy(t,Object.keys(h));return b.length>0&&(g=g.orderBy(...b)),r.queryBuilder.applyLimitAndOffset(g,t)}function vr(e,t,n){if(!e.measures?.length)return!1;for(let r of e.measures){let[e,i]=r.split(`.`);if(e!==n)continue;let a=t.measures?.[i];if(!a||![`sum`,`count`,`number`,`min`,`max`,`avg`].includes(a.type))return!1}return!yr(e,t,n)}function yr(e,t,n){let r=e=>{if(!e)return!1;for(let i of e){if(`and`in i){if(r(i.and))return!0;continue}if(`or`in i){if(r(i.or))return!0;continue}if(`member`in i){let[e,r]=i.member.split(`.`);if(e===n&&t.measures?.[r])return!0}}return!1};return r(e.filters)}function br(e){return Object.entries(e.dimensions??{}).filter(([,e])=>!!e.primaryKey).map(([e])=>e)}function xr(t,n,r,i){switch(t){case`min`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`min(${t})`.as(i)}case`max`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`max(${t})`.as(i)}case`avg`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(`__avg_sum__${r}`)}`,a=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(`__avg_count__${r}`)}`;return e.nt`sum(${t}) / nullif(sum(${a}), 0)`.as(i)}default:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`coalesce(sum(${t}), 0)`.as(i)}}}function Sr(e,t,n,r,i){let a=e.multiFactMerge;if(!a||a.groups.length<2)return null;let o=[...t.dimensions??[],...(t.timeDimensions??[]).map(e=>e.dimension)],s=Array.from(new Set(o)),c=s.length>0,l=kr(r),u=c&&a.mergeStrategy===`fullJoin`&&!l,d=a.groups.map(e=>{let t=i(e.queryPlan,e.query,n);return n.db.$with(e.alias).as(t)});return u?Er(t,n,r,a,d,s):Tr(t,n,r,a,d,s,Or(a.mergeStrategy,c,l))}function Cr(t,n,r){let i={};for(let t of n){let n=Ar(r,t);i[t]=e.nt`${n}`.as(t)}for(let n of t.groups)for(let t of n.measures){let r=e.nt`${e.nt.identifier(n.alias)}.${e.nt.identifier(t)}`;i[t]=e.nt`coalesce(${r}, 0)`.as(t)}return i}function wr(t,n,r){if(n.length===0)return e.nt`1 = 1`;let i=n.map(n=>e.U(r.get(n),e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)}`));return i.length===1?i[0]:e.z(...i)}function Tr(t,n,r,i,a,o,s){let c=i.groups[0].alias,l=Cr(i,o,i.groups.map(e=>e.alias)),u=n.db.with(...a).select(l).from(e.nt`${e.nt.identifier(c)}`),d=new Map;for(let t of o)d.set(t,e.nt`${e.nt.identifier(c)}.${e.nt.identifier(t)}`);for(let t=1;t<i.groups.length;t++){let n=i.groups[t].alias,r=wr(n,o,d);if(u=Q(u,s,e.nt`${e.nt.identifier(n)}`,r),o.length>0&&s===`full`)for(let t of o)d.set(t,e.nt`coalesce(${d.get(t)}, ${e.nt`${e.nt.identifier(n)}.${e.nt.identifier(t)}`})`)}let f=r.queryBuilder.buildOrderBy(t,Object.keys(l));return f.length>0&&(u=u.orderBy(...f)),r.queryBuilder.applyLimitAndOffset(u,t)}function Er(t,n,r,i,a,o){let s=`mf_all_keys`,c=i.groups.map(t=>e.nt`select ${Dr(t.alias,o)} from ${e.nt.identifier(t.alias)}`),l=e.nt`${e.nt.join(c,e.nt` union `)}`,u=n.db.$with(s).as(l),d={};for(let t of o)d[t]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`.as(t);for(let t of i.groups)for(let n of t.measures){let r=e.nt`${e.nt.identifier(t.alias)}.${e.nt.identifier(n)}`;d[n]=e.nt`coalesce(${r}, 0)`.as(n)}let f=n.db.with(...a,u).select(d).from(e.nt`${e.nt.identifier(s)}`);for(let t of i.groups){let n=o.map(n=>e.U(e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n)}`,e.nt`${e.nt.identifier(t.alias)}.${e.nt.identifier(n)}`)),r=n.length===1?n[0]:e.z(...n);f=f.leftJoin(e.nt`${e.nt.identifier(t.alias)}`,r)}let p=r.queryBuilder.buildOrderBy(t,Object.keys(d));return p.length>0&&(f=f.orderBy(...p)),r.queryBuilder.applyLimitAndOffset(f,t)}function Dr(t,n){let r=n.map(n=>e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)} as ${e.nt.identifier(n)}`);return e.nt.join(r,e.nt`, `)}function Or(e,t,n){return!t||e===`innerJoin`?`inner`:e===`leftJoin`?`left`:n?`full`:`left`}function kr(e){let t=e.databaseAdapter.getEngineType();return t===`postgres`||t===`duckdb`}function Ar(t,n){if(t.length===1)return e.nt`${e.nt.identifier(t[0])}.${e.nt.identifier(n)}`;let r=t.map(t=>e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)}`),i=r[0];for(let t=1;t<r.length;t++)i=e.nt`coalesce(${i}, ${r[t]})`;return i}var jr=class{queryBuilder;cteBuilder;databaseAdapter;constructor(e,t,n){this.queryBuilder=e,this.cteBuilder=t,this.databaseAdapter=n}derivePhysicalPlanContext(e){let t=e.source;if(t.type===`multiFactMerge`)return this.derivePhysicalPlanContextFromMultiFact(e,t);if(t.type===`fullKeyAggregate`)return this.derivePhysicalPlanContextFromFullKeyAggregate(e,t);let n=this.resolvePhysicalSimpleSource(t),r=this.resolveKeysDeduplicationMeta(t);return{primaryCube:n.primaryCube.cube,joinCubes:n.joins.map(e=>this.materializeJoin(e)),preAggregationCTEs:n.ctes.map(e=>({cube:e.cube.cube,alias:e.alias,cteAlias:e.cteAlias,joinKeys:e.joinKeys,measures:e.measures,propagatingFilters:e.propagatingFilters,downstreamJoinKeys:e.downstreamJoinKeys,intermediateJoins:e.intermediateJoins,cteType:e.cteType,cteReason:e.cteReason})),keysDeduplication:r,warnings:e.warnings.length>0?e.warnings:void 0}}materializeJoin(t){if(t.junctionTable){let n=e.j(t.joinDef);return{cube:t.target.cube,alias:t.alias,joinType:t.joinType,joinCondition:n.junctionJoins[1].condition,relationship:t.relationship,junctionTable:{table:t.junctionTable.table,alias:t.junctionTable.alias,joinType:t.junctionTable.joinType,joinCondition:n.junctionJoins[0].condition,securitySql:t.joinDef.through?.securitySql,sourceCubeName:t.junctionTable.sourceCubeName}}}return{cube:t.target.cube,alias:t.alias,joinType:t.joinType,joinCondition:e.A(t.joinDef),relationship:t.relationship}}derivePhysicalPlanContextFromMultiFact(e,t){let n=t.groups.map((e,t)=>{if(e.type!==`query`)return null;let n=e,r=this.derivePhysicalPlanContext(n),i=this.toSemanticQuery(n);return{alias:`mf_group_${t+1}`,query:i,queryPlan:r,measures:i.measures??[]}}).filter(e=>!!e);if(n.length===0)throw Error(`multiFactMerge requires at least one query group`);let r=n[0];return{primaryCube:r.queryPlan.primaryCube,joinCubes:r.queryPlan.joinCubes,preAggregationCTEs:r.queryPlan.preAggregationCTEs,warnings:e.warnings.length>0?e.warnings:void 0,multiFactMerge:{mergeStrategy:t.mergeStrategy,sharedDimensions:t.sharedDimensions.map(e=>e.name),groups:n}}}derivePhysicalPlanContextFromFullKeyAggregate(e,t){let n=t.subqueries.map((e,t)=>{if(e.type!==`query`)throw Error(`fullKeyAggregate currently requires query subqueries`);let n=e,r=this.derivePhysicalPlanContext(n),i=this.toSemanticQuery(n);return{alias:`fka_group_${t+1}`,query:i,queryPlan:r,measures:i.measures??[]}});if(n.length===0)throw Error(`fullKeyAggregate requires at least one subquery`);let r=n[0];return{primaryCube:r.queryPlan.primaryCube,joinCubes:r.queryPlan.joinCubes,preAggregationCTEs:r.queryPlan.preAggregationCTEs,warnings:e.warnings.length>0?e.warnings:void 0,multiFactMerge:{mergeStrategy:`fullJoin`,sharedDimensions:t.dimensions.map(e=>e.name),groups:n}}}toSemanticQuery(e){let t=e.orderBy.length>0?Object.fromEntries(e.orderBy.map(e=>[e.name,e.direction])):void 0;return{measures:e.measures.map(e=>e.name),dimensions:e.dimensions.map(e=>e.name),timeDimensions:e.timeDimensions.map(e=>({dimension:e.name,granularity:e.granularity,dateRange:e.dateRange,fillMissingDates:e.fillMissingDates,compareDateRange:e.compareDateRange})),filters:e.filters,order:t,limit:e.limit,offset:e.offset,ungrouped:e.ungrouped}}resolvePhysicalSimpleSource(e){switch(e.type){case`simpleSource`:return e;case`keysDeduplication`:return this.resolvePhysicalSimpleSourceFromKeysDedup(e);default:throw Error(`Current SQL builder does not support logical node '${e.type}' in physical conversion`)}}resolvePhysicalSimpleSourceFromKeysDedup(e){let t=e.measureSource;if(t.type===`simpleSource`)return t;let n=e.keysSource;if(n.type===`simpleSource`)return n;throw Error(`keysDeduplication requires at least one simpleSource child for SQL physical conversion`)}resolveKeysDeduplicationMeta(e){if(e.type!==`keysDeduplication`)return;let t=e,n=new Set;for(let e of t.joinOn){if(!e.alias)continue;let[t,r]=e.alias.split(`.`);t&&r&&n.add(t)}let r=n.size===1?Array.from(n)[0]:``;return r?{multipliedCubeName:r,primaryKeyDimensions:t.joinOn.map(e=>e.alias?.split(`.`)[1]??``).filter(Boolean),regularMeasures:t.regularMeasures}:void 0}build(e,t,n){let r={queryBuilder:this.queryBuilder,cteBuilder:this.cteBuilder,databaseAdapter:this.databaseAdapter},i=Sr(e,t,n,r,(e,t,n)=>this.build(e,t,n));if(i)return i;let a=lr(e,t,n,r);if(a)return a;let o=Bn(e,t,n,r),s=e.primaryCube.sql(n),c=e.joinCubes.length>0?Zn(e):new Map([[e.primaryCube.name,e.primaryCube]]);return or(e,t,n,c,s,o,Qn(e,n,s,Gn(e,t,n,c,r),o,r),r)}};function $(e,t){if(!(typeof process>`u`||!process.env?.DC_DEBUG))try{let{sql:n,params:r}=t.toSQL();console.log(`\n[DC_DEBUG] ${e}`),console.log(n),r.length>0&&console.log(`params:`,r),console.log()}catch{}}var Mr=class{dbExecutor;queryBuilder;drizzlePlanBuilder;databaseAdapter;comparisonQueryBuilder;funnelQueryBuilder;flowQueryBuilder;retentionQueryBuilder;logicalPlanBuilder;planOptimiser;modeRouter;resultCache;filterCachePreloader;rlsSetup;constructor(t,n,r,i){if(this.dbExecutor=t,this.databaseAdapter=t.databaseAdapter,!this.databaseAdapter)throw Error(e.k(`server.errors.dbAdapterRequired`));this.queryBuilder=new Nt(this.databaseAdapter);let a=new Gt,o=new qt(this.queryBuilder);this.drizzlePlanBuilder=new jr(this.queryBuilder,o,this.databaseAdapter),this.comparisonQueryBuilder=new wn(this.databaseAdapter),this.funnelQueryBuilder=new Tn(this.databaseAdapter),this.flowQueryBuilder=new En(this.databaseAdapter),this.retentionQueryBuilder=new Mn(this.databaseAdapter),this.logicalPlanBuilder=new Rn(a),this.planOptimiser=i??new zn,this.rlsSetup=r,this.modeRouter=new hn({comparison:this.comparisonQueryBuilder,funnel:this.funnelQueryBuilder,flow:this.flowQueryBuilder,retention:this.retentionQueryBuilder}),this.resultCache=new Cn(n),this.filterCachePreloader=new mn(this.queryBuilder)}async withRLSContext(t,n){if(!this.rlsSetup)return n();let r=this.dbExecutor.db;if(!r.transaction)throw Error(e.k(`server.errors.rlsRequiresTransactions`));let i=this.rlsSetup;return r.transaction(async e=>{await i(e,t);let r=Object.create(this.dbExecutor);return r.db=e,this.dbExecutor=r,n()})}async execute(t,n,r,i){try{let e=this.modeRouter.resolveMode(n);this.modeRouter.validateForMode(e,t,n);let a=this.resultCache.generateKey(n,r,i?.cubeSetKey);return await this.resultCache.lookup(a,i?.skipCache??!1)||await this.withRLSContext(r,()=>this.executeQueryByModeWithCache(e,t,n,r,a))}catch(t){if(t instanceof Error){let n=t;for(;n.cause instanceof Error;)n=n.cause;let r=n.message,i=n;throw i.code&&(r+=` [${i.code}]`),i.detail&&(r+=` Detail: ${i.detail}`),i.hint&&(r+=` Hint: ${i.hint}`),t.message=e.k(`server.errors.queryExecutionFailed`,{message:r}),t}throw Error(e.k(`server.errors.queryExecutionUnknown`),{cause:t})}}buildLogicalPlan(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);return this.filterCachePreloader.preload(t,r,e,i),this.buildRegularQueryArtifacts(e,t,i).optimisedPlan}analyzeQuery(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);return this.filterCachePreloader.preload(t,r,e,i),this.buildRegularQueryArtifacts(e,t,i).analysis}async executeQuery(e,t,n){let r=new Map;return r.set(e.name,e),this.execute(r,t,n)}async executeComparisonQueryWithCache(e,t,n,r){let i=await this.executeComparisonQuery(e,t,n);return await this.resultCache.store(r,i),i}async executeComparisonQuery(e,t,n){let{timeDimension:r,periods:i,granularity:a,periodQueries:o}=this.buildComparisonExecutionPlan(t),s=o.map(async(t,r)=>({result:await this.executeStandardQuery(e,t,n),period:i[r]})),c=await Promise.all(s),l=this.comparisonQueryBuilder.mergeComparisonResults(c,r,a);return l.data=this.comparisonQueryBuilder.sortComparisonResults(l.data,r.dimension),l}buildComparisonExecutionPlan(t){let n=this.comparisonQueryBuilder.getComparisonTimeDimension(t);if(!n||!n.compareDateRange)throw Error(e.k(`server.errors.noCompareDateRange`));let r=this.comparisonQueryBuilder.normalizePeriods(n.compareDateRange);if(r.length<2)throw Error(e.k(`server.errors.compareDateRangeInvalid`));let i=r.map(e=>this.comparisonQueryBuilder.createPeriodQuery(t,e));return{timeDimension:n,granularity:n.granularity||`day`,periods:r,periodQueries:i}}async executeAnalysisQueryWithCache(e,t){let n=await e();return await this.resultCache.store(t,n),n}async executeFunnelQuery(e,t,n){let r=t.funnel,i=this.createQueryContext(n),a=this.funnelQueryBuilder.buildFunnelQuery(r,e,i);$(`funnel query`,a);let o=await a,s=this.funnelQueryBuilder.transformResult(o,r),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.funnel={config:r,steps:r.steps.map((e,t)=>({name:e.name,index:t,timeToConvert:e.timeToConvert}))},{data:s,annotation:c}}async executeFlowQuery(e,t,n){let r=t.flow,i=this.createQueryContext(n),a=this.flowQueryBuilder.buildFlowQuery(r,e,i);$(`flow query`,a);let o=await a,s=this.flowQueryBuilder.transformResult(o),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.flow={config:r,startingStep:{name:r.startingStep.name},stepsBefore:r.stepsBefore,stepsAfter:r.stepsAfter},{data:[s],annotation:c}}async executeRetentionQuery(e,t,n){let r=t.retention,i=this.createQueryContext(n),a=this.retentionQueryBuilder.buildRetentionQuery(r,e,i);$(`retention query`,a);let o=await a,s=this.retentionQueryBuilder.transformResult(o,r),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.retention={config:r,granularity:r.granularity,periods:r.periods,retentionType:r.retentionType,breakdownDimensions:r.breakdownDimensions},{data:s,annotation:c}}async executeStandardQuery(e,t,n,r){let i=new D,a=this.createQueryContext(n,i,t);this.filterCachePreloader.preload(t,i,e,a);let{optimisedPlan:o}=this.buildRegularQueryArtifacts(e,t,a),s=this.drizzlePlanBuilder.derivePhysicalPlanContext(o),c=this.drizzlePlanBuilder.toSemanticQuery(o);this.validateSecurityContext(s,a);let l=this.drizzlePlanBuilder.build(s,c,a);$(`query`,l);let u=this.queryBuilder.collectNumericFields(e,t),d={data:pn(await this.dbExecutor.execute(l,u),t,this.databaseAdapter),annotation:Jt(s,t),warnings:o.warnings?.length?o.warnings:void 0,total:t.total?await this.executeTotalCount(s,c,a):void 0};return await this.resultCache.store(r,d),d}async executeTotalCount(t,n,r){let i=this.drizzlePlanBuilder.build(t,{...n,limit:void 0,offset:void 0,order:void 0},r),a=r.db.select({total:e.nt`count(*)`.as(`total`)}).from(i.as(`dc_total`));$(`total`,a);let o=await this.dbExecutor.execute(a),s=o?.[0]?Object.values(o[0])[0]:void 0,c=Number(s);return Number.isFinite(c)?c:0}createQueryContext(e,t,n){return{db:this.dbExecutor.db,schema:this.dbExecutor.schema,securityContext:e,filterCache:t,ungrouped:n?.ungrouped,cast:(e,t)=>this.databaseAdapter.castToType(e,t),tryCast:(e,t)=>this.databaseAdapter.tryCastToType(e,t)}}getOptimiserEngineType(){return this.dbExecutor.getEngineType?.()??`postgres`}buildRegularQueryArtifacts(e,t,n){let r=this.logicalPlanBuilder.planWithAnalysis(e,t,n),i=this.planOptimiser.optimise(r.plan,{engineType:this.getOptimiserEngineType()});return{logicalPlan:r.plan,analysis:r.analysis,optimisedPlan:i}}validateSecurityContext(e,t){let n=typeof process<`u`?process.env.NODE_ENV:void 0,r=typeof process<`u`?process.env?.DRIZZLE_CUBE_WARN_SECURITY:void 0;if(n!==`development`&&!r)return;let i=[e.primaryCube];for(let t of e.joinCubes||[])i.push(t.cube);for(let t of e.preAggregationCTEs||[])i.push(t.cube);let a=new Set;for(let e of i)if(!a.has(e.name)){a.add(e.name);try{if(e.public||this.rlsSetup)continue;e.sql(t).where||console.warn(`[drizzle-cube] WARNING: Cube '${e.name}' has no security filtering. If this cube contains public data, add 'public: true' to suppress this warning. Otherwise, ensure sql() returns: { from: table, where: eq(table.orgId, ctx.securityContext.orgId) }. For databases that support Row Level Security (e.g. PostgreSQL), you can configure rlsSetup to run session-level commands (SET LOCAL, SET ROLE) instead.`)}catch{}}}async generateSQL(e,t,n){let r=new Map;return r.set(e.name,e),this.generateUnifiedSQL(r,t,n)}async generateMultiCubeSQL(e,t,n){return this.generateUnifiedSQL(e,t,n)}async dryRunFunnel(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.funnelQueryBuilder.hasFunnel(e),invalidConfigKey:`server.errors.invalidFunnelConfig`,getConfig:e=>e.funnel,validate:t=>this.funnelQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.funnelValidationFailed`,build:(t,n)=>this.funnelQueryBuilder.buildFunnelQuery(t,e,n)})}async dryRunFlow(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.flowQueryBuilder.hasFlow(e),invalidConfigKey:`server.errors.invalidFlowConfig`,getConfig:e=>e.flow,validate:t=>this.flowQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.flowValidationFailed`,build:(t,n)=>this.flowQueryBuilder.buildFlowQuery(t,e,n)})}async dryRunRetention(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.retentionQueryBuilder.hasRetention(e),invalidConfigKey:`server.errors.invalidRetentionConfig`,getConfig:e=>e.retention,validate:t=>this.retentionQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.retentionValidationFailed`,build:(t,n)=>this.retentionQueryBuilder.buildRetentionQuery(t,e,n)})}async dryRunAnalysis(t,n,r){if(!r.has(t))throw Error(e.k(r.invalidConfigKey));let i=r.getConfig(t),a=r.validate(i);if(!a.isValid)throw Error(e.k(r.validationFailedKey,{errors:a.errors.join(`, `)}));let o=this.createQueryContext(n),s=r.build(i,o).toSQL();return{sql:s.sql,params:s.params}}async explainQuery(e,t,n,r){let i=await this.dryRunSQL(e,t,n);return this.withRLSContext(n,()=>this.dbExecutor.explainQuery(i.sql,i.params||[],r))}async dryRunSQL(e,t,n){let r=this.modeRouter.resolveMode(t);return this.modeRouter.validateForMode(r,e,t),this.generateSqlForMode(r,e,t,n)}async generateUnifiedSQL(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);this.filterCachePreloader.preload(t,r,e,i);let{optimisedPlan:a}=this.buildRegularQueryArtifacts(e,t,i),o=this.drizzlePlanBuilder.derivePhysicalPlanContext(a),s=this.drizzlePlanBuilder.toSemanticQuery(a),c=this.drizzlePlanBuilder.build(o,s,i).toSQL();return{sql:c.sql,params:c.params}}async executeQueryByModeWithCache(t,n,r,i,a){return{regular:()=>this.executeStandardQuery(n,r,i,a),comparison:()=>this.executeComparisonQueryWithCache(n,r,i,a),funnel:()=>this.executeAnalysisQueryWithCache(()=>this.executeFunnelQuery(n,r,i),a),flow:()=>this.executeAnalysisQueryWithCache(()=>this.executeFlowQuery(n,r,i),a),retention:()=>this.executeAnalysisQueryWithCache(()=>this.executeRetentionQuery(n,r,i),a)}[e.R(t)]()}async generateSqlForMode(t,n,r,i){return{regular:()=>this.generateUnifiedSQL(n,r,i),comparison:()=>this.generateComparisonSQL(n,r,i),funnel:()=>this.dryRunFunnel(n,r,i),flow:()=>this.dryRunFlow(n,r,i),retention:()=>this.dryRunRetention(n,r,i)}[e.R(t)]()}async generateComparisonSQL(e,t,n){let r=this.buildComparisonExecutionPlan(t).periodQueries[0];return this.generateUnifiedSQL(e,r,n)}},Nr=[`year`,`quarter`,`month`,`week`,`day`,`hour`];function Pr(e,t){return t.includes(`.`)?t:`${e}.${t}`}function Fr(e,t){if(!t.includes(`.`))return t;let n=`${e}.`;return t.startsWith(n)?t.slice(n.length):null}function Ir(e){let t=Object.keys(e.measures),n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.measures[i];if(a.shown===!1)continue;let o;a.drillMembers&&a.drillMembers.length>0&&(o=a.drillMembers.map(t=>Pr(e.name,t))),n.push({name:`${e.name}.${i}`,title:a.title||i,shortTitle:a.title||i,type:a.type,format:void 0,description:a.description,synonyms:a.synonyms,drillMembers:o})}return n}function Lr(e){let t=Object.keys(e.dimensions),n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.dimensions[i];if(a.shown===!1)continue;let o=a.type===`time`?a.granularities||Nr:void 0;n.push({name:`${e.name}.${i}`,title:a.title||i,shortTitle:a.title||i,type:a.type,format:void 0,description:a.description,synonyms:a.synonyms,granularities:o})}return n}function Rr(t,n,r){let i=[];if(!t.joins)return i;for(let[,a]of Object.entries(t.joins)){let t=e.P(a.targetCube,n);t&&i.push({targetCube:t.name,relationship:a.relationship,joinFields:a.on.map(e=>({sourceField:r(e.source),targetField:r(e.target)}))})}return i}function zr(e){let t=[];if(!e.hierarchies)return t;for(let[,n]of Object.entries(e.hierarchies)){let r=n.levels.filter(t=>{let n=Fr(e.name,t);return n===null||e.dimensions[n]?.shown!==!1}).map(t=>Pr(e.name,t));r.length!==0&&t.push({name:n.name,title:n.title||n.name,cubeName:e.name,levels:r})}return t}Object.freeze({});function Br(e){if(typeof process>`u`)return;let t=process.env?.DC_DEBUG;(t===`true`||t===`cubesets`)&&console.log(`[DC_DEBUG] ${e}`)}var Vr=class{baseCubes=new Map;cubeSets=new Map;metadataCache=new Map;baseGeneration=0;registrationCounter=0;contextToCubeSetId;missingCubeSet=`base`;onCubeSetRegistered;cacheConfig;rlsSetup;planOptimiser;db;schema;engineType;constructor(e){e?.databaseExecutor?(this.db=e.databaseExecutor.db,this.schema=e.databaseExecutor.schema,this.engineType=e.databaseExecutor.getEngineType()):e?.drizzle&&(this.db=e.drizzle,this.schema=e.schema,this.engineType=e.engineType),this.cacheConfig=e?.cache,this.rlsSetup=e?.rlsSetup,this.planOptimiser=e?.planOptimiser,this.contextToCubeSetId=e?.contextToCubeSetId,this.missingCubeSet=e?.missingCubeSet??`base`,this.onCubeSetRegistered=e?.onCubeSetRegistered}setDatabaseExecutor(e){this.db=e.db,this.schema=e.schema,this.engineType=e.getEngineType()}getEngineType(){return this.engineType}setDrizzle(e,t,n){this.db=e,this.schema=t,this.engineType=n}hasExecutor(){return!!this.db}createDbExecutor(){if(!this.db)throw Error(e.k(`server.errors.dbNotConfigured`));return We(this.db,this.schema,this.engineType)}createQueryExecutor(e=!1){return new Mr(this.createDbExecutor(),e?this.cacheConfig:void 0,this.rlsSetup,this.planOptimiser)}formatSqlResult(t){let n=this.getEngineType()??`postgres`;return{sql:e.x(t.sql,n),params:t.params}}registerCube(e){this.prepareCube(e,this.baseCubes),this.baseCubes.set(e.name,e),this.baseGeneration++,this.rebuildAllMergedSets(),this.metadataCache.clear()}registerCubeSet(t,n){if(t===``)throw Error(e.k(`server.errors.cubeSetIdEmpty`));let r=Date.now(),i=new Map;for(let e of n){let t=new Map(this.baseCubes);for(let[e,n]of i)t.set(e,n);this.prepareCube(e,t),i.set(e.name,e)}let a=++this.registrationCounter,o=this.mergeWithBase(i),s=Date.now()-r;this.cubeSets.set(t,{overlay:i,merged:o,generation:a,durationMs:s}),this.metadataCache.delete(t);let c=0;for(let e of i.values())c+=Object.keys(e.dimensions??{}).length;let l={setId:t,cubeCount:o.size,dimensionCount:c,generation:a,durationMs:s};Br(`registered cube set '${t}': ${i.size} cube(s), ${c} dimension(s), generation ${a}, ${s}ms`),this.onCubeSetRegistered?.(l)}unregisterCubeSet(e){let t=this.cubeSets.delete(e);return t&&this.metadataCache.delete(e),t}hasCubeSet(e){return this.cubeSets.has(e)}getCubeSetIds(){return Array.from(this.cubeSets.keys())}getCubeSetStats(){let e=0,t=0,n;for(let[r,i]of this.cubeSets)e+=i.merged.size,t+=i.durationMs,(!n||i.durationMs>n.durationMs)&&(n={setId:r,durationMs:i.durationMs});return{setCount:this.cubeSets.size,cubeCount:e,totalRegistrationMs:t,slowestSet:n}}prepareCube(e,t){this.validateCalculatedMeasures(e,t),new B(t).populateDependencies(e)}mergeWithBase(e){let t=new Map(this.baseCubes);for(let[n,r]of e)t.set(n,r);return t}rebuildAllMergedSets(){for(let e of this.cubeSets.values())e.merged=this.mergeWithBase(e.overlay)}resolveSetId(t){if(!this.contextToCubeSetId)return``;let n=this.contextToCubeSetId(t);if(n==null||n===``)return``;let r=String(n);if(!this.cubeSets.has(r)){if(this.missingCubeSet===`throw`)throw Error(e.k(`server.errors.cubeSetNotFound`,{setId:r}));return``}return r}resolveCubes(e){let t=this.resolveSetId(e);return t===``?this.baseCubes:this.cubeSets.get(t)?.merged??this.baseCubes}cubeSetCacheKey(e){let t=this.cubeSets.get(e)?.generation??0;return`${e}:${this.baseGeneration}.${t}`}validateCubeReferences(){let t=new Set;for(let e of this.unresolvedJoinRefs(this.baseCubes))t.add(e);for(let e of this.cubeSets.values())for(let n of this.unresolvedJoinRefs(e.merged))t.add(n);if(t.size>0){let n=Array.from(t,e=>` - ${e}`).join(`
164
+ )`,c=this.databaseAdapter.buildPeriodSeriesSubquery(o),l={period_number:e.nt`p.period_number`.as(`period_number`),retained_users:e.nt`COUNT(DISTINCT CASE WHEN ump.max_period >= p.period_number THEN ump.binding_key END)`.as(`retained_users`)},u=[e.nt`p.period_number`];for(let t=0;t<r;t++)l[`breakdown_${t}`]=e.nt.raw(`ump.breakdown_${t}`).as(`breakdown_${t}`),u.push(e.nt.raw(`ump.breakdown_${t}`));return n.db.select(l).from(e.nt`${s} ump`).innerJoin(c,e.nt`TRUE`).groupBy(...u)}buildPeriodNumberExpression(e,t,n){return this.databaseAdapter.buildDateDiffPeriods(e,t,n)}};function Z(e){return{name:e.name,cube:e}}function Nn(t,n){return t.measures?t.measures.map(t=>{let[r,i]=t.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForMeasure`,{cubeName:r,measure:t}));return{name:t,cube:Z(a),localName:i}}):[]}function Pn(t,n){return t.dimensions?t.dimensions.map(t=>{let[r,i]=t.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForDimension`,{cubeName:r,dimension:t}));return{name:t,cube:Z(a),localName:i}}):[]}function Fn(t,n){return t.timeDimensions?t.timeDimensions.map(t=>{let[r,i]=t.dimension.split(`.`),a=n.get(r);if(!a)throw Error(e.k(`server.errors.cubeNotFoundForTimeDimension`,{cubeName:r,timeDimension:t.dimension}));return{name:t.dimension,cube:Z(a),localName:i,granularity:t.granularity,dateRange:t.dateRange,fillMissingDates:t.fillMissingDates,compareDateRange:t.compareDateRange}}):[]}function In(e,t){return{measures:Nn(e,t),dimensions:Pn(e,t),timeDimensions:Fn(e,t)}}function Ln(e,t){return{measures:e.measures.map(e=>{let[n,r]=e.split(`.`);return{name:e,cube:{name:n,cube:t.get(n)},localName:r}}),dimensions:[],timeDimensions:[]}}var Rn=class{queryPlanner;constructor(e){this.queryPlanner=e}plan(e,t,n){return this.planWithAnalysis(e,t,n).plan}planWithAnalysis(t,n,r){let i=Array.from(this.queryPlanner.analyzeCubeUsage(n));if(i.length===0)throw Error(e.k(`server.errors.noCubesInQuery`));let a=this.queryPlanner.analyzePrimaryCube(i,n,t),o=a.selectedCube,s=t.get(o);if(!s)throw Error(e.k(`server.errors.primaryCubeNotFound`,{cubeName:o}));let c=i.filter(e=>e!==o).map(e=>this.queryPlanner.analyzeJoinPathForTarget(t,o,e,n)),l=i.length>1?this.queryPlanner.buildJoinPlanForPrimary(t,s,i,r,n):[],u=i.length>1?this.queryPlanner.buildPreAggregationCTEs(t,s,l,n,r)??[]:[],d=this.queryPlanner.buildWarnings(n,u),f=this.buildSourceFromPhases(s,l,u,t,n,r),p=f.source,m=this.buildQueryNode(p,n,t,d),h=this.buildPreAggregationAnalysis(u),g=new Map;for(let e of i){let n=t.get(e);n&&g.set(e,n)}let _=Ot(n.measures??[],g),v=[...c.filter(e=>!e.pathFound&&e.error).map(e=>e.error),...d.map(e=>e.message)];return{plan:m,analysis:{timestamp:new Date().toISOString(),cubeCount:i.length,cubesInvolved:[...i].sort(),primaryCube:a,joinPaths:c,preAggregations:h,querySummary:{queryType:u.length>0?`multi_cube_cte`:i.length>1?`multi_cube_join`:`single_cube`,measureStrategy:f.strategy,joinCount:l.length,cteCount:u.length,hasPreAggregation:u.length>0,hasWindowFunctions:_},warnings:v.length>0?v:void 0,planningTrace:{steps:[{phase:`cube_usage`,decision:`Identified ${i.length} cube${i.length===1?``:`s`} from query members`,details:{cubesInvolved:[...i].sort()}},{phase:`primary_cube_selection`,decision:`Selected '${a.selectedCube}' as primary cube (${a.reason})`,details:{selectedCube:a.selectedCube,reason:a.reason,candidates:a.candidates?.map(e=>e.cubeName)}},{phase:`join_planning`,decision:`Planned ${l.length} join${l.length===1?``:`s`}`,details:{joinCount:l.length,joinTargets:l.map(e=>e.target.name),pathSelection:c.map(e=>({targetCube:e.targetCube,strategy:e.selection?.strategy,selectedRank:e.selection?.selectedRank,selectedScore:e.selection?.selectedScore}))}},{phase:`cte_planning`,decision:`Planned ${u.length} pre-aggregation CTE${u.length===1?``:`s`}`,details:{cteCount:u.length,cubes:u.map(e=>e.cube.name)}},{phase:`measure_strategy`,decision:`Selected '${f.strategy}' measure strategy`,details:{strategy:f.strategy,regularMeasures:f.classification.regular.map(e=>e.name),multipliedMeasures:f.classification.multiplied.map(e=>e.name),deduplicationSafeMeasures:f.classification.deduplicationSafe.map(e=>e.name),sourceType:p.type}},{phase:`warnings`,decision:d.length>0?`Generated ${d.length} planning warning${d.length===1?``:`s`}`:`No planning warnings generated`,details:{warningCodes:d.map(e=>e.code)}}]}}}}buildSourceFromPhases(e,t,n,r,i,a){let o=this.tryBuildMultiFactMergeSource(i,r,a);if(o)return{source:o,strategy:`multiFactMerge`,classification:{regular:Nn(i,r),multiplied:[],deduplicationSafe:[]}};let s=this.buildSimpleSourceFromPhases(e,t,n,r,i),c=this.classifyMeasuresForStrategy(s.schema.measures,n),l=this.selectMeasureStrategy(c,i,r);return l===`keysDeduplication`?{source:this.buildKeysDeduplicationSource(s,c),strategy:l,classification:c}:{source:s,strategy:l,classification:c}}buildSimpleSourceFromPhases(e,t,n,r,i){let a=Z(e),o=t,s=n.map(e=>{let t=Z(e.cube);return{type:`ctePreAggregate`,schema:Ln(e,r),cube:t,alias:e.alias,cteAlias:e.cteAlias,joinKeys:e.joinKeys,measures:e.measures,propagatingFilters:e.propagatingFilters,downstreamJoinKeys:e.downstreamJoinKeys,intermediateJoins:e.intermediateJoins,cteType:e.cteType??`aggregate`,cteReason:e.cteReason??`hasMany`}});return{type:`simpleSource`,schema:In(i,r),primaryCube:a,joins:o,ctes:s}}tryBuildMultiFactMergeSource(e,t,n){if(!e.measures||e.measures.length<2)return null;let r=new Set;for(let t of e.measures){let[e]=t.split(`.`);e&&r.add(e)}if(r.size<2)return null;let i=new Set;for(let t of e.dimensions??[]){let[e]=t.split(`.`);e&&i.add(e)}for(let t of e.timeDimensions??[]){let[e]=t.dimension.split(`.`);e&&i.add(e)}if(i.size!==1)return null;let a=Array.from(i)[0];if(r.has(a)||!t.get(a))return null;let o=Array.from(r);if(!o.every(e=>this.hasDirectJoinToSharedDimension(t.get(e),a,t)))return null;let s=Pn(e,t),c=Fn(e,t),l={measures:Nn(e,t),dimensions:s,timeDimensions:c},u=[];for(let r of o){let i=(e.measures??[]).filter(e=>e.startsWith(`${r}.`)),o=new Set([r,a]),s={measures:i,dimensions:e.dimensions,timeDimensions:e.timeDimensions,filters:this.projectFiltersToAllowedCubes(e.filters,o)},c=this.buildGroupQueryNode(s,t,n);if(!c)return null;u.push(c)}return u.length<2?null:{type:`multiFactMerge`,schema:l,groups:u,sharedDimensions:s,mergeStrategy:`fullJoin`}}hasDirectJoinToSharedDimension(t,n,r){if(!t?.joins)return!1;for(let[,i]of Object.entries(t.joins)){let t=e.P(i.targetCube,r);if(t&&t.name===n&&(i.relationship===`belongsTo`||i.relationship===`hasOne`))return!0}return!1}buildGroupQueryNode(e,t,n){let r=Array.from(this.queryPlanner.analyzeCubeUsage(e));if(r.length===0)return null;let i=this.queryPlanner.analyzePrimaryCube(r,e,t),a=t.get(i.selectedCube);if(!a)return null;let o=r.length>1?this.queryPlanner.buildJoinPlanForPrimary(t,a,r,n,e):[],s=r.length>1?this.queryPlanner.buildPreAggregationCTEs(t,a,o,e,n)??[]:[],c=this.queryPlanner.buildWarnings(e,s),l=this.buildSourceFromPhases(a,o,s,t,e,n);return this.buildQueryNode(l.source,e,t,c)}projectFiltersToAllowedCubes(e,t){if(!e||e.length===0)return;let n=e.map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length>0?n:void 0}projectFilterNodeToAllowedCubes(e,t){if(`member`in e){let[n]=e.member.split(`.`);return n&&t.has(n)?e:null}if(`and`in e){let n=(e.and??[]).map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length===0?null:n.length===1?n[0]:{and:n}}if(`or`in e){let n=(e.or??[]).map(e=>this.projectFilterNodeToAllowedCubes(e,t)).filter(e=>!!e);return n.length===0?null:n.length===1?n[0]:{or:n}}return null}classifyMeasuresForStrategy(e,t){let n={regular:[],multiplied:[],deduplicationSafe:[]},r=new Set(t.filter(e=>e.cteReason===`fanOutPrevention`).map(e=>e.cube.name));for(let t of e){let e=t.cube.cube,i=e.measures?.[t.localName];if(!i||!r.has(e.name)){n.regular.push(t);continue}this.isDeduplicationSafeMeasure(i)?n.deduplicationSafe.push(t):n.multiplied.push(t)}return n}selectMeasureStrategy(e,t,n){return e.multiplied.length===0?`simple`:e.multiplied.every(e=>this.getPrimaryKeyColumns(e.cube.cube).length>0)&&this.isKeysDeduplicationExecutionSupported(e,t,n)?`keysDeduplication`:`ctePreAggregateFallback`}isKeysDeduplicationExecutionSupported(e,t,n){let r=new Set(e.multiplied.map(e=>e.cube.name));if(r.size!==1)return!1;let i=Array.from(r)[0],a=t.measures??[];if(a.length===0)return!1;let o=n.get(i);if(!o)return!1;for(let e of a){let[t,r]=e.split(`.`);if(t!==i){let e=n.get(t)?.measures?.[r];if(!e||![`sum`,`count`,`number`,`min`,`max`].includes(e.type))return!1;continue}let a=o.measures?.[r];if(!a||![`sum`,`count`,`number`,`min`,`max`,`avg`].includes(a.type))return!1}return!this.queryHasMeasureFilter(t,i,o)}queryHasMeasureFilter(e,t,n){let r=e=>{let[r,i]=e.split(`.`);return r===t&&!!n.measures?.[i]},i=e=>{if(!e)return!1;for(let t of e){if(`and`in t){if(i(t.and))return!0;continue}if(`or`in t){if(i(t.or))return!0;continue}if(`member`in t&&r(t.member))return!0}return!1};return i(e.filters)}buildKeysDeduplicationSource(e,t){let n=this.deduplicateColumnRefs(t.multiplied.flatMap(e=>this.getPrimaryKeyColumns(e.cube.cube))),r=t.regular.length>0?t.regular.map(e=>e.name):void 0;return{type:`keysDeduplication`,schema:e.schema,keysSource:e,measureSource:e,joinOn:n,regularMeasures:r}}isDeduplicationSafeMeasure(e){return e.type===`countDistinct`||e.type===`countDistinctApprox`}getPrimaryKeyColumns(e){let t=[];for(let[n,r]of Object.entries(e.dimensions??{}))r.primaryKey&&typeof r.sql!=`function`&&t.push({column:r.sql,alias:`${e.name}.${n}`});return t}deduplicateColumnRefs(e){let t=new Map;for(let n of e){let e=n.alias??String(n.column?.name??``);t.has(e)||t.set(e,n)}return Array.from(t.values())}buildQueryNode(e,t,n,r){let i=In(t,n),{measures:a,dimensions:o,timeDimensions:s}=i,c=this.buildOrderByRefs(t);return{type:`query`,schema:i,source:e,dimensions:o,measures:a,filters:t.filters??[],timeDimensions:s,orderBy:c,limit:t.limit,offset:t.offset,ungrouped:t.ungrouped,warnings:r}}buildPreAggregationAnalysis(e){return e.map(e=>({cubeName:e.cube.name,cteAlias:e.cteAlias,reason:e.cteReason===`fanOutPrevention`?`Potential fan-out from hasMany joins - pre-aggregate ${e.cube.name} to preserve correctness`:`hasMany relationship requires pre-aggregation for ${e.cube.name}`,reasonType:e.cteReason,measures:e.measures,joinKeys:e.joinKeys.map(e=>({sourceColumn:e.sourceColumn,targetColumn:e.targetColumn})),cteType:e.cteType}))}buildOrderByRefs(e){return e.order?Object.entries(e.order).map(([e,t])=>({name:e,direction:t})):[]}},zn=class{name=`identity`;optimise(e){return e}};function Bn(e,t,n,r){let i=Vn(e,n,r),a=[],o=new Map,s=new Map;if(e.preAggregationCTEs&&e.preAggregationCTEs.length>0)for(let c of e.preAggregationCTEs){let l=r.cteBuilder.buildPreAggregationCTE(c,t,n,e,i);l&&(a.push(l),o.set(c.cube.name,c.cteAlias),Hn(c,s))}return{preBuiltFilterMap:i,ctes:a,cteAliasMap:o,downstreamCubeMap:s}}function Vn(t,n,r){let i=new Map;if(!t.preAggregationCTEs||t.preAggregationCTEs.length===0)return i;for(let a of t.preAggregationCTEs)if(a.propagatingFilters&&a.propagatingFilters.length!==0)for(let t of a.propagatingFilters){let a=t.sourceCube.name;if(!i.has(a)){let e={filters:t.filters},o=new Map([[a,t.sourceCube]]),s=r.queryBuilder.buildWhereConditions(o,e,n);i.set(a,s)}let o=i.get(a);o&&o.length>0&&(t.preBuiltFilterSQL=o.length===1?o[0]:e.z(...o))}return i}function Hn(e,t){if(e.downstreamJoinKeys)for(let n of e.downstreamJoinKeys)t.set(n.targetCubeName,{cteAlias:e.cteAlias,joinKeys:n.joinKeys})}function Un(t,n,r,i,a,o){if(r.measures)for(let s of r.measures){let[c,l]=s.split(`.`),u=a.get(c);if(!u?.measures?.[l])continue;let d=u.measures[l];if(!U.isPostAggregationWindow(d))continue;let f=U.getWindowBaseMeasure(d,c);if(!f)continue;let[p,m]=f.split(`.`),h=a.get(p);if(!h?.measures?.[m])continue;let g=h.measures[m],_=n.preAggregationCTEs?.find(e=>e.cube?.name===p&&e.measures?.includes(f)),v;if(_){let t=e.nt`${e.nt.identifier(_.cteAlias)}.${e.nt.identifier(m)}`;v=e.nt`sum(${t})`}else v=o.queryBuilder.buildMeasureExpression(g,i,h);t[f]||(t[f]=e.nt`${v}`.as(f));let y=Wn(d,v,r,i,u,n,o);y&&(t[s]=e.nt`${y}`.as(s))}}function Wn(t,n,r,i,a,o,s){let c=t.windowConfig||{},l=(t,n)=>{if(!o.preAggregationCTEs)return null;let r=o.preAggregationCTEs.find(e=>e.cube?.name===t);return r&&r.cteAlias?e.nt`${e.nt.identifier(r.cteAlias)}.${e.nt.identifier(n)}`:null},u;if(c.orderBy&&c.orderBy.length>0)u=c.orderBy.map(t=>{let o=t.field.includes(`.`)?t.field.split(`.`)[1]:t.field;if(r.timeDimensions)for(let e of r.timeDimensions){let[n,r]=e.dimension.split(`.`);if(r===o){let c=l(n,o);if(c)return{field:c,direction:t.direction};let u=a.dimensions?.[r];if(u)return{field:s.queryBuilder.buildTimeDimensionExpression(u.sql,e.granularity,i),direction:t.direction}}}let u=a.dimensions?.[o];return u?{field:e.I(u.sql,i),direction:t.direction}:o===(c.measure?.includes(`.`)?c.measure.split(`.`)[1]:c.measure)||t.field===c.measure?{field:n,direction:t.direction}:null}).filter(e=>e!==null);else if(r.timeDimensions&&r.timeDimensions.length>0){let e=r.timeDimensions[0],[t,n]=e.dimension.split(`.`),o=l(t,n);if(o)u=[{field:o,direction:`asc`}];else{let r=a.name===t?a:void 0;if(r?.dimensions?.[n]){let t=r.dimensions[n];u=[{field:s.queryBuilder.buildTimeDimensionExpression(t.sql,e.granularity,i),direction:`asc`}]}}}let d;c.partitionBy&&c.partitionBy.length>0&&(d=c.partitionBy.map(t=>{let n=t.includes(`.`)?t.split(`.`)[1]:t,r=a.dimensions?.[n];return r?e.I(r.sql,i):null}).filter(e=>e!==null));let f=s.databaseAdapter.buildWindowFunction(t.type,n,d,u,{offset:c.offset,defaultValue:c.defaultValue,nTile:c.nTile,frame:c.frame});if(!f)return null;switch(c.operation||U.getDefaultWindowOperation(t.type)){case`difference`:return e.nt`${n} - ${f}`;case`ratio`:return e.nt`${n} / NULLIF(${f}, 0)`;case`percentChange`:return e.nt`((${n} - ${f}) / NULLIF(${f}, 0)) * 100`;default:return f}}function Gn(e,t,n,r,i){let a={...i.queryBuilder.buildSelections(e.joinCubes.length>0?r:e.primaryCube,t,n)};if(e.preAggregationCTEs)for(let o of e.preAggregationCTEs)Kn(a,o,t,n,r,i),Jn(a,o,r);return Un(a,e,t,n,r,i),a}function Kn(t,n,r,i,a,o){let s=n.cube.name;for(let c of n.measures){if(!t[c])continue;let[,l]=c.split(`.`),u=a.get(s);if(!u?.measures?.[l])continue;let d=u.measures[l],f=e.nt`${e.nt.identifier(n.cteAlias)}.${e.nt.identifier(l)}`,p;p=d.type===`calculated`&&d.calculatedSql?o.queryBuilder.buildCTECalculatedMeasure(d,u,n,a,i):qn(d,f,n,r,a,o),t[c]=e.nt`${p}`.as(c)}}function qn(e,t,n,r,i,c){let l=n.cteReason===`fanOutPrevention`,u=Yn(n,r,i),d=l||u;switch(e.type){case`count`:case`countDistinct`:case`sum`:return d?o(t):a(t);case`avg`:return d?o(t):c.databaseAdapter.buildAvg(t);case`min`:return s(t);case`max`:return o(t);case`number`:return o(t);default:return d?o(t):a(t)}}function Jn(t,n,r){let i=n.cube.name;for(let a in t){let[o,s]=a.split(`.`);if(o!==i)continue;let c=r.get(i),l=c&&c.dimensions?.[s],u=a.startsWith(i+`.`);if(!l&&!u)continue;let d=n.joinKeys.find(e=>e.targetColumn===s);if(!d&&c?.dimensions?.[s]){let e=c.dimensions[s].sql;d=n.joinKeys.find(t=>t.targetColumnObj===e)}(d||u&&c?.dimensions?.[s])&&(t[a]=e.nt`${e.nt.identifier(n.cteAlias)}.${e.nt.identifier(s)}`.as(a))}}function Yn(e,t,n){return e.cteReason!==`hasMany`||e.downstreamJoinKeys&&e.downstreamJoinKeys.length>0||e.intermediateJoins&&e.intermediateJoins.length>0||!(t.dimensions&&t.dimensions.length>0||t.timeDimensions&&t.timeDimensions.length>0)||t.dimensions?.some(t=>t.startsWith(`${e.cube.name}.`))||t.timeDimensions?.some(t=>t.dimension.startsWith(`${e.cube.name}.`))?!1:e.joinKeys.length>0&&e.joinKeys.every(e=>!!e.sourceColumnObj&&Xn(e.sourceColumnObj,t,n))}function Xn(e,t,n){if(t.dimensions)for(let r of t.dimensions){let[t,i]=r.split(`.`);if(n.get(t)?.dimensions?.[i]?.sql===e)return!0}if(t.timeDimensions)for(let r of t.timeDimensions){if(r.granularity)continue;let[t,i]=r.dimension.split(`.`);if(n.get(t)?.dimensions?.[i]?.sql===e)return!0}return!1}function Q(e,t,n,r){switch(t){case`inner`:return e.innerJoin(n,r);case`right`:return e.rightJoin(n,r);case`full`:return e.fullJoin(n,r);default:return e.leftJoin(n,r)}}function Zn(e){let t=new Map;if(t.set(e.primaryCube.name,e.primaryCube),e.joinCubes)for(let n of e.joinCubes)t.set(n.cube.name,n.cube);return t}function Qn(e,t,n,r,i,a){let o=[],s=$n(t,n,r,i);s=er(s,n.joins);let c=new Set,l=tr(e);if(e.joinCubes&&e.joinCubes.length>0)for(let n of e.joinCubes){let r=n.cube.name;(!l.has(r)||i.cteAliasMap.has(r))&&(s=nr(s,n,e,i,t,o),s=ar(s,n,e,i,t,a,c))}return{drizzleQuery:s,allWhereConditions:o,cubesWithSecurityInJoin:c,absorbedIntermediateCubes:l}}function $n(e,t,n,r){return r.ctes.length>0?e.db.with(...r.ctes).select(n).from(t.from):e.db.select(n).from(t.from)}function er(e,t){if(!t)return e;let n=e;for(let e of t)n=Q(n,e.type??`left`,e.table,e.on);return n}function tr(e){let t=new Set;if(e.preAggregationCTEs){for(let n of e.preAggregationCTEs)if(n.intermediateJoins&&n.intermediateJoins.length>0)for(let e of n.intermediateJoins)t.add(e.cube.name)}return t}function nr(e,t,n,r,i,a){let o=t.junctionTable;if(!o)return e;let s=rr(o,t,n,r),c=[];if(o.securitySql){let e=o.securitySql(i.securityContext);Array.isArray(e)?c.push(...e):c.push(e)}try{let t=Q(e,o.joinType??`left`,o.table,s);return c.length>0&&a.push(...c),t}catch{return e}}function rr(t,n,r,i){let a=t.joinCondition,o=t.sourceCubeName?i.cteAliasMap.get(t.sourceCubeName):void 0;if(!o)return a;let s=(r.preAggregationCTEs?.find(e=>e.cube.name===t.sourceCubeName))?.downstreamJoinKeys?.find(e=>e.targetCubeName===n.cube.name);if(s&&s.joinKeys.length>0){let t=[];for(let n of s.joinKeys){let r=e.nt`${e.nt.identifier(o)}.${e.nt.identifier(n.sourceColumn)}`,i=n.targetColumnObj;i&&t.push(e.U(i,r))}t.length>0&&(a=e.z(...t))}return a}function ir(t,n,r,i,a,o){if(n)return{joinTarget:e.nt`${e.nt.identifier(n)}`,joinCondition:o.cteBuilder.buildCTEJoinCondition(t,n,i),securityCondition:void 0,joinCubeBase:void 0};let s=r.downstreamCubeMap.get(t.cube.name),c=t.cube.sql(a),l;if(s&&!t.junctionTable){let t=[];for(let n of s.joinKeys){let r=e.nt`${e.nt.identifier(s.cteAlias)}.${e.nt.identifier(n.sourceColumn)}`,i=n.targetColumnObj||e.nt.identifier(n.targetColumn);t.push(e.U(r,i))}l=t.length===1?t[0]:e.z(...t)}else l=t.joinCondition;return{joinTarget:c.from,joinCondition:l,securityCondition:c.where,joinCubeBase:c}}function ar(t,n,r,i,a,o,s){let{joinTarget:c,joinCondition:l,securityCondition:u,joinCubeBase:d}=ir(n,i.cteAliasMap.get(n.cube.name),i,r,a,o),f=n.joinType||`left`,p=f!==`inner`&&u?e.z(l,u):l;try{let e;return f===`inner`?e=t.innerJoin(c,l):(e=Q(t,f,c,p),u&&s.add(n.cube.name)),er(e,d?.joins)}catch{return t}}function or(t,n,r,i,a,o,s,c){let l=sr(t,n,r,i,a,o,s,c),u=s.drizzleQuery;if(l.length>0){let t=l.length===1?l[0]:e.z(...l);u=u.where(t)}return cr(u,t,n,r,i,c)}function sr(e,t,n,r,i,a,o,s){let c=[...o.allWhereConditions];if(i.where&&c.push(i.where),e.joinCubes&&e.joinCubes.length>0)for(let t of e.joinCubes){let e=t.cube.name;if(a.cteAliasMap.get(e)||o.absorbedIntermediateCubes.has(e)||o.cubesWithSecurityInJoin.has(e))continue;let r=t.cube.sql(n);r.where&&c.push(r.where)}let l=s.queryBuilder.buildWhereConditions(e.joinCubes.length>0?r:e.primaryCube,t,n,e,a.preBuiltFilterMap);return l.length>0&&c.push(...l),c}function cr(t,n,r,i,a,o){let s=n.joinCubes.length>0?a:n.primaryCube,c=t,l=o.queryBuilder.buildGroupByFields(s,r,i,n);if(l.length>0&&(c=c.groupBy(...l)),!r.ungrouped){let t=o.queryBuilder.buildHavingConditions(s,r,i,n);if(t.length>0){let n=t.length===1?t[0]:e.z(...t);c=c.having(n)}}let u=o.queryBuilder.buildOrderBy(r);return u.length>0&&(c=c.orderBy(...u)),o.queryBuilder.applyLimitAndOffset(c,r)}function lr(e,t,n,r){let i=e.keysDeduplication;if(!i?.multipliedCubeName||!t.measures?.length)return null;let a=e.joinCubes.length>0?Zn(e):new Map([[e.primaryCube.name,e.primaryCube]]),o=a.get(i.multipliedCubeName);if(!o||!vr(t,o,i.multipliedCubeName))return null;let s=i.primaryKeyDimensions.length>0?i.primaryKeyDimensions:br(o);if(s.length===0)return null;let c=`${i.multipliedCubeName.toLowerCase()}_keys`,l=`${i.multipliedCubeName.toLowerCase()}_pk_agg`,u=i.regularMeasures??[],d=ur(t,n,r,a,o,s,u);if(!d)return null;let f=dr(e,t,n,r,a,c,d.keysSelections,d.keyGroupBy),p=mr(t,n,r,o,s,d.multipliedMeasures,l);return p?_r(t,n,r,a,o,{keysAlias:c,aggAlias:l,keysCte:f,aggCte:p,pkDimensions:s,pkAliases:d.pkAliases,multipliedMeasures:d.multipliedMeasures,regularMeasureNames:u}):null}function ur(t,n,r,i,a,o,s){let c={},l=[];if(t.dimensions)for(let r of t.dimensions){let[t,a]=r.split(`.`),o=i.get(t),s=o?.dimensions?.[a];if(!o||!s)return null;let u=e.I(s.sql,n);c[r]=e.nt`${u}`.as(r),l.push(u)}if(t.timeDimensions)for(let a of t.timeDimensions){let[t,o]=a.dimension.split(`.`),s=i.get(t),u=s?.dimensions?.[o];if(!s||!u)return null;let d=r.queryBuilder.buildTimeDimensionExpression(u.sql,a.granularity,n);c[a.dimension]=e.nt`${d}`.as(a.dimension),l.push(d)}let u=[];for(let t of o){let r=a.dimensions?.[t];if(!r)return null;let i=e.I(r.sql,n),o=`__pk__${t}`;c[o]=e.nt`${i}`.as(o),l.push(i),u.push(o)}let d=new Set(s),f=t.measures.filter(e=>!d.has(e));if(s.length>0){let t=r.queryBuilder.buildResolvedMeasures(s,i,n);for(let n of s){let r=t.get(n);if(!r)return null;let i=`__reg__${n.replace(`.`,`__`)}`;c[i]=e.nt`${r()}`.as(i)}}return{keysSelections:c,keyGroupBy:l,pkAliases:u,multipliedMeasures:f}}function dr(e,t,n,r,i,a,o,s){let c=e.primaryCube.sql(n),l=[];c.where&&l.push(c.where);let u=n.db.select(o).from(c.from);if(c.joins)for(let e of c.joins)u=Q(u,e.type??`left`,e.table,e.on);for(let t of e.joinCubes)u=fr(u,t,n,l);return l.push(...r.queryBuilder.buildWhereConditions(i,t,n)),u=gr(u,l),s.length>0&&(u=u.groupBy(...s)),n.db.$with(a).as(u)}function fr(e,t,n,r){let i=e;t.junctionTable&&(i=Q(i,t.junctionTable.joinType??`left`,t.junctionTable.table,t.junctionTable.joinCondition),pr(t.junctionTable.securitySql,n,r));let a=t.cube.sql(n);if(i=Q(i,t.joinType??`left`,a.from,t.joinCondition),a.joins)for(let e of a.joins)i=Q(i,e.type??`left`,e.table,e.on);return a.where&&r.push(a.where),i}function pr(e,t,n){if(!e)return;let r=e(t.securityContext);Array.isArray(r)?n.push(...r):n.push(r)}function mr(e,t,n,r,i,a,o){let s=r.sql(t),c=hr(t,n,r,i,a);if(!c)return null;let l=t.db.select(c.aggSelections).from(s.from);if(s.joins)for(let e of s.joins)l=Q(l,e.type??`left`,e.table,e.on);let u=[];return s.where&&u.push(s.where),u.push(...n.queryBuilder.buildWhereConditions(r,e,t)),l=gr(l,u),c.aggGroupBy.length>0&&(l=l.groupBy(...c.aggGroupBy)),t.db.$with(o).as(l)}function hr(t,n,r,i,a){let o={},s=[];for(let n of i){let i=r.dimensions?.[n];if(!i)return null;let a=e.I(i.sql,t);o[n]=e.nt`${a}`.as(n),s.push(a)}let c=new Set;for(let e of a){let[,t]=e.split(`.`);r.measures?.[t]?.type===`avg`&&c.add(t)}let l=a.filter(e=>{let[,t]=e.split(`.`);return!c.has(t)});if(l.length>0){let i=n.queryBuilder.buildResolvedMeasures(l,new Map([[r.name,r]]),t);for(let t of l){let[,n]=t.split(`.`),r=i.get(t);if(!r||typeof r!=`function`)return null;o[n]=e.nt`${r()}`.as(n)}}for(let n of a){let[,i]=n.split(`.`);if(!c.has(i))continue;let a=r.measures?.[i];if(!a?.sql)return null;let s=e.I(a.sql,t),l=`__avg_sum__${i}`,u=`__avg_count__${i}`;o[l]=e.nt`sum(${s})`.as(l),o[u]=e.nt`count(${s})`.as(u)}return{aggSelections:o,aggGroupBy:s}}function gr(t,n){return n.length===0?t:t.where(n.length===1?n[0]:e.z(...n))}function _r(t,n,r,i,a,o){let{keysAlias:s,aggAlias:c,keysCte:l,aggCte:u,pkDimensions:d,pkAliases:f,multipliedMeasures:p,regularMeasureNames:m}=o,h={};for(let n of t.dimensions??[])h[n]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n)}`.as(n);for(let n of t.timeDimensions??[])h[n.dimension]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n.dimension)}`.as(n.dimension);for(let e of p){let[,t]=e.split(`.`),n=a.measures?.[t];h[e]=xr(n?.type??`sum`,c,t,e)}for(let e of m){let[t,n]=e.split(`.`),r=i.get(t)?.measures?.[n],a=`__reg__${e.replace(`.`,`__`)}`;h[e]=xr(r?.type??`sum`,s,a,e)}let g=n.db.with(l,u).select(h).from(e.nt`${e.nt.identifier(s)}`),_=f.map((t,n)=>e.U(e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`,e.nt`${e.nt.identifier(c)}.${e.nt.identifier(d[n])}`)),v=_.length===1?_[0]:e.z(..._);g=g.leftJoin(e.nt`${e.nt.identifier(c)}`,v);let y=[...(t.dimensions??[]).map(t=>e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`),...(t.timeDimensions??[]).map(t=>e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t.dimension)}`)];y.length>0&&(g=g.groupBy(...y));let b=r.queryBuilder.buildOrderBy(t,Object.keys(h));return b.length>0&&(g=g.orderBy(...b)),r.queryBuilder.applyLimitAndOffset(g,t)}function vr(e,t,n){if(!e.measures?.length)return!1;for(let r of e.measures){let[e,i]=r.split(`.`);if(e!==n)continue;let a=t.measures?.[i];if(!a||![`sum`,`count`,`number`,`min`,`max`,`avg`].includes(a.type))return!1}return!yr(e,t,n)}function yr(e,t,n){let r=e=>{if(!e)return!1;for(let i of e){if(`and`in i){if(r(i.and))return!0;continue}if(`or`in i){if(r(i.or))return!0;continue}if(`member`in i){let[e,r]=i.member.split(`.`);if(e===n&&t.measures?.[r])return!0}}return!1};return r(e.filters)}function br(e){return Object.entries(e.dimensions??{}).filter(([,e])=>!!e.primaryKey).map(([e])=>e)}function xr(t,n,r,i){switch(t){case`min`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`min(${t})`.as(i)}case`max`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`max(${t})`.as(i)}case`avg`:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(`__avg_sum__${r}`)}`,a=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(`__avg_count__${r}`)}`;return e.nt`sum(${t}) / nullif(sum(${a}), 0)`.as(i)}default:{let t=e.nt`${e.nt.identifier(n)}.${e.nt.identifier(r)}`;return e.nt`coalesce(sum(${t}), 0)`.as(i)}}}function Sr(e,t,n,r,i){let a=e.multiFactMerge;if(!a||a.groups.length<2)return null;let o=[...t.dimensions??[],...(t.timeDimensions??[]).map(e=>e.dimension)],s=Array.from(new Set(o)),c=s.length>0,l=kr(r),u=c&&a.mergeStrategy===`fullJoin`&&!l,d=a.groups.map(e=>{let t=i(e.queryPlan,e.query,n);return n.db.$with(e.alias).as(t)});return u?Er(t,n,r,a,d,s):Tr(t,n,r,a,d,s,Or(a.mergeStrategy,c,l))}function Cr(t,n,r){let i={};for(let t of n){let n=Ar(r,t);i[t]=e.nt`${n}`.as(t)}for(let n of t.groups)for(let t of n.measures){let r=e.nt`${e.nt.identifier(n.alias)}.${e.nt.identifier(t)}`;i[t]=e.nt`coalesce(${r}, 0)`.as(t)}return i}function wr(t,n,r){if(n.length===0)return e.nt`1 = 1`;let i=n.map(n=>e.U(r.get(n),e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)}`));return i.length===1?i[0]:e.z(...i)}function Tr(t,n,r,i,a,o,s){let c=i.groups[0].alias,l=Cr(i,o,i.groups.map(e=>e.alias)),u=n.db.with(...a).select(l).from(e.nt`${e.nt.identifier(c)}`),d=new Map;for(let t of o)d.set(t,e.nt`${e.nt.identifier(c)}.${e.nt.identifier(t)}`);for(let t=1;t<i.groups.length;t++){let n=i.groups[t].alias,r=wr(n,o,d);if(u=Q(u,s,e.nt`${e.nt.identifier(n)}`,r),o.length>0&&s===`full`)for(let t of o)d.set(t,e.nt`coalesce(${d.get(t)}, ${e.nt`${e.nt.identifier(n)}.${e.nt.identifier(t)}`})`)}let f=r.queryBuilder.buildOrderBy(t,Object.keys(l));return f.length>0&&(u=u.orderBy(...f)),r.queryBuilder.applyLimitAndOffset(u,t)}function Er(t,n,r,i,a,o){let s=`mf_all_keys`,c=i.groups.map(t=>e.nt`select ${Dr(t.alias,o)} from ${e.nt.identifier(t.alias)}`),l=e.nt`${e.nt.join(c,e.nt` union `)}`,u=n.db.$with(s).as(l),d={};for(let t of o)d[t]=e.nt`${e.nt.identifier(s)}.${e.nt.identifier(t)}`.as(t);for(let t of i.groups)for(let n of t.measures){let r=e.nt`${e.nt.identifier(t.alias)}.${e.nt.identifier(n)}`;d[n]=e.nt`coalesce(${r}, 0)`.as(n)}let f=n.db.with(...a,u).select(d).from(e.nt`${e.nt.identifier(s)}`);for(let t of i.groups){let n=o.map(n=>e.U(e.nt`${e.nt.identifier(s)}.${e.nt.identifier(n)}`,e.nt`${e.nt.identifier(t.alias)}.${e.nt.identifier(n)}`)),r=n.length===1?n[0]:e.z(...n);f=f.leftJoin(e.nt`${e.nt.identifier(t.alias)}`,r)}let p=r.queryBuilder.buildOrderBy(t,Object.keys(d));return p.length>0&&(f=f.orderBy(...p)),r.queryBuilder.applyLimitAndOffset(f,t)}function Dr(t,n){let r=n.map(n=>e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)} as ${e.nt.identifier(n)}`);return e.nt.join(r,e.nt`, `)}function Or(e,t,n){return!t||e===`innerJoin`?`inner`:e===`leftJoin`?`left`:n?`full`:`left`}function kr(e){let t=e.databaseAdapter.getEngineType();return t===`postgres`||t===`duckdb`}function Ar(t,n){if(t.length===1)return e.nt`${e.nt.identifier(t[0])}.${e.nt.identifier(n)}`;let r=t.map(t=>e.nt`${e.nt.identifier(t)}.${e.nt.identifier(n)}`),i=r[0];for(let t=1;t<r.length;t++)i=e.nt`coalesce(${i}, ${r[t]})`;return i}var jr=class{queryBuilder;cteBuilder;databaseAdapter;constructor(e,t,n){this.queryBuilder=e,this.cteBuilder=t,this.databaseAdapter=n}derivePhysicalPlanContext(e){let t=e.source;if(t.type===`multiFactMerge`)return this.derivePhysicalPlanContextFromMultiFact(e,t);if(t.type===`fullKeyAggregate`)return this.derivePhysicalPlanContextFromFullKeyAggregate(e,t);let n=this.resolvePhysicalSimpleSource(t),r=this.resolveKeysDeduplicationMeta(t);return{primaryCube:n.primaryCube.cube,joinCubes:n.joins.map(e=>this.materializeJoin(e)),preAggregationCTEs:n.ctes.map(e=>({cube:e.cube.cube,alias:e.alias,cteAlias:e.cteAlias,joinKeys:e.joinKeys,measures:e.measures,propagatingFilters:e.propagatingFilters,downstreamJoinKeys:e.downstreamJoinKeys,intermediateJoins:e.intermediateJoins,cteType:e.cteType,cteReason:e.cteReason})),keysDeduplication:r,warnings:e.warnings.length>0?e.warnings:void 0}}materializeJoin(t){if(t.junctionTable){let n=e.j(t.joinDef);return{cube:t.target.cube,alias:t.alias,joinType:t.joinType,joinCondition:n.junctionJoins[1].condition,relationship:t.relationship,junctionTable:{table:t.junctionTable.table,alias:t.junctionTable.alias,joinType:t.junctionTable.joinType,joinCondition:n.junctionJoins[0].condition,securitySql:t.joinDef.through?.securitySql,sourceCubeName:t.junctionTable.sourceCubeName}}}return{cube:t.target.cube,alias:t.alias,joinType:t.joinType,joinCondition:e.A(t.joinDef),relationship:t.relationship}}derivePhysicalPlanContextFromMultiFact(e,t){let n=t.groups.map((e,t)=>{if(e.type!==`query`)return null;let n=e,r=this.derivePhysicalPlanContext(n),i=this.toSemanticQuery(n);return{alias:`mf_group_${t+1}`,query:i,queryPlan:r,measures:i.measures??[]}}).filter(e=>!!e);if(n.length===0)throw Error(`multiFactMerge requires at least one query group`);let r=n[0];return{primaryCube:r.queryPlan.primaryCube,joinCubes:r.queryPlan.joinCubes,preAggregationCTEs:r.queryPlan.preAggregationCTEs,warnings:e.warnings.length>0?e.warnings:void 0,multiFactMerge:{mergeStrategy:t.mergeStrategy,sharedDimensions:t.sharedDimensions.map(e=>e.name),groups:n}}}derivePhysicalPlanContextFromFullKeyAggregate(e,t){let n=t.subqueries.map((e,t)=>{if(e.type!==`query`)throw Error(`fullKeyAggregate currently requires query subqueries`);let n=e,r=this.derivePhysicalPlanContext(n),i=this.toSemanticQuery(n);return{alias:`fka_group_${t+1}`,query:i,queryPlan:r,measures:i.measures??[]}});if(n.length===0)throw Error(`fullKeyAggregate requires at least one subquery`);let r=n[0];return{primaryCube:r.queryPlan.primaryCube,joinCubes:r.queryPlan.joinCubes,preAggregationCTEs:r.queryPlan.preAggregationCTEs,warnings:e.warnings.length>0?e.warnings:void 0,multiFactMerge:{mergeStrategy:`fullJoin`,sharedDimensions:t.dimensions.map(e=>e.name),groups:n}}}toSemanticQuery(e){let t=e.orderBy.length>0?Object.fromEntries(e.orderBy.map(e=>[e.name,e.direction])):void 0;return{measures:e.measures.map(e=>e.name),dimensions:e.dimensions.map(e=>e.name),timeDimensions:e.timeDimensions.map(e=>({dimension:e.name,granularity:e.granularity,dateRange:e.dateRange,fillMissingDates:e.fillMissingDates,compareDateRange:e.compareDateRange})),filters:e.filters,order:t,limit:e.limit,offset:e.offset,ungrouped:e.ungrouped}}resolvePhysicalSimpleSource(e){switch(e.type){case`simpleSource`:return e;case`keysDeduplication`:return this.resolvePhysicalSimpleSourceFromKeysDedup(e);default:throw Error(`Current SQL builder does not support logical node '${e.type}' in physical conversion`)}}resolvePhysicalSimpleSourceFromKeysDedup(e){let t=e.measureSource;if(t.type===`simpleSource`)return t;let n=e.keysSource;if(n.type===`simpleSource`)return n;throw Error(`keysDeduplication requires at least one simpleSource child for SQL physical conversion`)}resolveKeysDeduplicationMeta(e){if(e.type!==`keysDeduplication`)return;let t=e,n=new Set;for(let e of t.joinOn){if(!e.alias)continue;let[t,r]=e.alias.split(`.`);t&&r&&n.add(t)}let r=n.size===1?Array.from(n)[0]:``;return r?{multipliedCubeName:r,primaryKeyDimensions:t.joinOn.map(e=>e.alias?.split(`.`)[1]??``).filter(Boolean),regularMeasures:t.regularMeasures}:void 0}build(e,t,n){let r={queryBuilder:this.queryBuilder,cteBuilder:this.cteBuilder,databaseAdapter:this.databaseAdapter},i=Sr(e,t,n,r,(e,t,n)=>this.build(e,t,n));if(i)return i;let a=lr(e,t,n,r);if(a)return a;let o=Bn(e,t,n,r),s=e.primaryCube.sql(n),c=e.joinCubes.length>0?Zn(e):new Map([[e.primaryCube.name,e.primaryCube]]);return or(e,t,n,c,s,o,Qn(e,n,s,Gn(e,t,n,c,r),o,r),r)}};function $(e,t){if(typeof process<`u`&&process.env?.DC_DEBUG)try{let{sql:n,params:r}=t.toSQL();console.log(`\n[DC_DEBUG] ${e}`),console.log(n),r.length>0&&console.log(`params:`,r),console.log()}catch{}}var Mr=class{dbExecutor;queryBuilder;drizzlePlanBuilder;databaseAdapter;comparisonQueryBuilder;funnelQueryBuilder;flowQueryBuilder;retentionQueryBuilder;logicalPlanBuilder;planOptimiser;modeRouter;resultCache;filterCachePreloader;rlsSetup;constructor(t,n,r,i){if(this.dbExecutor=t,this.databaseAdapter=t.databaseAdapter,!this.databaseAdapter)throw Error(e.k(`server.errors.dbAdapterRequired`));this.queryBuilder=new Nt(this.databaseAdapter);let a=new Gt,o=new qt(this.queryBuilder);this.drizzlePlanBuilder=new jr(this.queryBuilder,o,this.databaseAdapter),this.comparisonQueryBuilder=new wn(this.databaseAdapter),this.funnelQueryBuilder=new Tn(this.databaseAdapter),this.flowQueryBuilder=new En(this.databaseAdapter),this.retentionQueryBuilder=new Mn(this.databaseAdapter),this.logicalPlanBuilder=new Rn(a),this.planOptimiser=i??new zn,this.rlsSetup=r,this.modeRouter=new hn({comparison:this.comparisonQueryBuilder,funnel:this.funnelQueryBuilder,flow:this.flowQueryBuilder,retention:this.retentionQueryBuilder}),this.resultCache=new Cn(n),this.filterCachePreloader=new mn(this.queryBuilder)}async withRLSContext(t,n){if(!this.rlsSetup)return n();let r=this.dbExecutor.db;if(!r.transaction)throw Error(e.k(`server.errors.rlsRequiresTransactions`));let i=this.rlsSetup;return r.transaction(async e=>{await i(e,t);let r=Object.create(this.dbExecutor);return r.db=e,this.dbExecutor=r,n()})}async execute(t,n,r,i){try{let e=this.modeRouter.resolveMode(n);this.modeRouter.validateForMode(e,t,n);let a=this.resultCache.generateKey(n,r,i?.cubeSetKey);return await this.resultCache.lookup(a,i?.skipCache??!1)||await this.withRLSContext(r,()=>this.executeQueryByModeWithCache(e,t,n,r,a))}catch(t){if(t instanceof Error){let n=t;for(;n.cause instanceof Error;)n=n.cause;let r=n.message,i=n;throw i.code&&(r+=` [${i.code}]`),i.detail&&(r+=` Detail: ${i.detail}`),i.hint&&(r+=` Hint: ${i.hint}`),t.message=e.k(`server.errors.queryExecutionFailed`,{message:r}),t}throw Error(e.k(`server.errors.queryExecutionUnknown`),{cause:t})}}buildLogicalPlan(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);return this.filterCachePreloader.preload(t,r,e,i),this.buildRegularQueryArtifacts(e,t,i).optimisedPlan}analyzeQuery(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);return this.filterCachePreloader.preload(t,r,e,i),this.buildRegularQueryArtifacts(e,t,i).analysis}async executeQuery(e,t,n){let r=new Map;return r.set(e.name,e),this.execute(r,t,n)}async executeComparisonQueryWithCache(e,t,n,r){let i=await this.executeComparisonQuery(e,t,n);return await this.resultCache.store(r,i),i}async executeComparisonQuery(e,t,n){let{timeDimension:r,periods:i,granularity:a,periodQueries:o}=this.buildComparisonExecutionPlan(t),s=o.map(async(t,r)=>({result:await this.executeStandardQuery(e,t,n),period:i[r]})),c=await Promise.all(s),l=this.comparisonQueryBuilder.mergeComparisonResults(c,r,a);return l.data=this.comparisonQueryBuilder.sortComparisonResults(l.data,r.dimension),l}buildComparisonExecutionPlan(t){let n=this.comparisonQueryBuilder.getComparisonTimeDimension(t);if(!n||!n.compareDateRange)throw Error(e.k(`server.errors.noCompareDateRange`));let r=this.comparisonQueryBuilder.normalizePeriods(n.compareDateRange);if(r.length<2)throw Error(e.k(`server.errors.compareDateRangeInvalid`));let i=r.map(e=>this.comparisonQueryBuilder.createPeriodQuery(t,e));return{timeDimension:n,granularity:n.granularity||`day`,periods:r,periodQueries:i}}async executeAnalysisQueryWithCache(e,t){let n=await e();return await this.resultCache.store(t,n),n}async executeFunnelQuery(e,t,n){let r=t.funnel,i=this.createQueryContext(n),a=this.funnelQueryBuilder.buildFunnelQuery(r,e,i);$(`funnel query`,a);let o=await a,s=this.funnelQueryBuilder.transformResult(o,r),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.funnel={config:r,steps:r.steps.map((e,t)=>({name:e.name,index:t,timeToConvert:e.timeToConvert}))},{data:s,annotation:c}}async executeFlowQuery(e,t,n){let r=t.flow,i=this.createQueryContext(n),a=this.flowQueryBuilder.buildFlowQuery(r,e,i);$(`flow query`,a);let o=await a,s=this.flowQueryBuilder.transformResult(o),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.flow={config:r,startingStep:{name:r.startingStep.name},stepsBefore:r.stepsBefore,stepsAfter:r.stepsAfter},{data:[s],annotation:c}}async executeRetentionQuery(e,t,n){let r=t.retention,i=this.createQueryContext(n),a=this.retentionQueryBuilder.buildRetentionQuery(r,e,i);$(`retention query`,a);let o=await a,s=this.retentionQueryBuilder.transformResult(o,r),c={measures:{},dimensions:{},segments:{},timeDimensions:{}};return c.retention={config:r,granularity:r.granularity,periods:r.periods,retentionType:r.retentionType,breakdownDimensions:r.breakdownDimensions},{data:s,annotation:c}}async executeStandardQuery(e,t,n,r){let i=new D,a=this.createQueryContext(n,i,t);this.filterCachePreloader.preload(t,i,e,a);let{optimisedPlan:o}=this.buildRegularQueryArtifacts(e,t,a),s=this.drizzlePlanBuilder.derivePhysicalPlanContext(o),c=this.drizzlePlanBuilder.toSemanticQuery(o);this.validateSecurityContext(s,a);let l=this.drizzlePlanBuilder.build(s,c,a);$(`query`,l);let u=this.queryBuilder.collectNumericFields(e,t),d={data:pn(await this.dbExecutor.execute(l,u),t,this.databaseAdapter),annotation:Jt(s,t),warnings:o.warnings?.length?o.warnings:void 0,total:t.total?await this.executeTotalCount(s,c,a):void 0};return await this.resultCache.store(r,d),d}async executeTotalCount(t,n,r){let i=this.drizzlePlanBuilder.build(t,{...n,limit:void 0,offset:void 0,order:void 0},r),a=r.db.select({total:e.nt`count(*)`.as(`total`)}).from(i.as(`dc_total`));$(`total`,a);let o=await this.dbExecutor.execute(a),s=o?.[0]?Object.values(o[0])[0]:void 0,c=Number(s);return Number.isFinite(c)?c:0}createQueryContext(e,t,n){return{db:this.dbExecutor.db,schema:this.dbExecutor.schema,securityContext:e,filterCache:t,ungrouped:n?.ungrouped,cast:(e,t)=>this.databaseAdapter.castToType(e,t),tryCast:(e,t)=>this.databaseAdapter.tryCastToType(e,t)}}getOptimiserEngineType(){return this.dbExecutor.getEngineType?.()??`postgres`}buildRegularQueryArtifacts(e,t,n){let r=this.logicalPlanBuilder.planWithAnalysis(e,t,n),i=this.planOptimiser.optimise(r.plan,{engineType:this.getOptimiserEngineType()});return{logicalPlan:r.plan,analysis:r.analysis,optimisedPlan:i}}validateSecurityContext(e,t){let n=typeof process<`u`?process.env.NODE_ENV:void 0,r=typeof process<`u`?process.env?.DRIZZLE_CUBE_WARN_SECURITY:void 0;if(n!==`development`&&!r)return;let i=[e.primaryCube];for(let t of e.joinCubes||[])i.push(t.cube);for(let t of e.preAggregationCTEs||[])i.push(t.cube);let a=new Set;for(let e of i)if(!a.has(e.name)){a.add(e.name);try{if(e.public||this.rlsSetup)continue;e.sql(t).where||console.warn(`[drizzle-cube] WARNING: Cube '${e.name}' has no security filtering. If this cube contains public data, add 'public: true' to suppress this warning. Otherwise, ensure sql() returns: { from: table, where: eq(table.orgId, ctx.securityContext.orgId) }. For databases that support Row Level Security (e.g. PostgreSQL), you can configure rlsSetup to run session-level commands (SET LOCAL, SET ROLE) instead.`)}catch{}}}async generateSQL(e,t,n){let r=new Map;return r.set(e.name,e),this.generateUnifiedSQL(r,t,n)}async generateMultiCubeSQL(e,t,n){return this.generateUnifiedSQL(e,t,n)}async dryRunFunnel(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.funnelQueryBuilder.hasFunnel(e),invalidConfigKey:`server.errors.invalidFunnelConfig`,getConfig:e=>e.funnel,validate:t=>this.funnelQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.funnelValidationFailed`,build:(t,n)=>this.funnelQueryBuilder.buildFunnelQuery(t,e,n)})}async dryRunFlow(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.flowQueryBuilder.hasFlow(e),invalidConfigKey:`server.errors.invalidFlowConfig`,getConfig:e=>e.flow,validate:t=>this.flowQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.flowValidationFailed`,build:(t,n)=>this.flowQueryBuilder.buildFlowQuery(t,e,n)})}async dryRunRetention(e,t,n){return this.dryRunAnalysis(t,n,{has:e=>this.retentionQueryBuilder.hasRetention(e),invalidConfigKey:`server.errors.invalidRetentionConfig`,getConfig:e=>e.retention,validate:t=>this.retentionQueryBuilder.validateConfig(t,e),validationFailedKey:`server.errors.retentionValidationFailed`,build:(t,n)=>this.retentionQueryBuilder.buildRetentionQuery(t,e,n)})}async dryRunAnalysis(t,n,r){if(!r.has(t))throw Error(e.k(r.invalidConfigKey));let i=r.getConfig(t),a=r.validate(i);if(!a.isValid)throw Error(e.k(r.validationFailedKey,{errors:a.errors.join(`, `)}));let o=this.createQueryContext(n),s=r.build(i,o).toSQL();return{sql:s.sql,params:s.params}}async explainQuery(e,t,n,r){let i=await this.dryRunSQL(e,t,n);return this.withRLSContext(n,()=>this.dbExecutor.explainQuery(i.sql,i.params||[],r))}async dryRunSQL(e,t,n){let r=this.modeRouter.resolveMode(t);return this.modeRouter.validateForMode(r,e,t),this.generateSqlForMode(r,e,t,n)}async generateUnifiedSQL(e,t,n){let r=new D,i=this.createQueryContext(n,r,t);this.filterCachePreloader.preload(t,r,e,i);let{optimisedPlan:a}=this.buildRegularQueryArtifacts(e,t,i),o=this.drizzlePlanBuilder.derivePhysicalPlanContext(a),s=this.drizzlePlanBuilder.toSemanticQuery(a),c=this.drizzlePlanBuilder.build(o,s,i).toSQL();return{sql:c.sql,params:c.params}}async executeQueryByModeWithCache(t,n,r,i,a){return{regular:()=>this.executeStandardQuery(n,r,i,a),comparison:()=>this.executeComparisonQueryWithCache(n,r,i,a),funnel:()=>this.executeAnalysisQueryWithCache(()=>this.executeFunnelQuery(n,r,i),a),flow:()=>this.executeAnalysisQueryWithCache(()=>this.executeFlowQuery(n,r,i),a),retention:()=>this.executeAnalysisQueryWithCache(()=>this.executeRetentionQuery(n,r,i),a)}[e.R(t)]()}async generateSqlForMode(t,n,r,i){return{regular:()=>this.generateUnifiedSQL(n,r,i),comparison:()=>this.generateComparisonSQL(n,r,i),funnel:()=>this.dryRunFunnel(n,r,i),flow:()=>this.dryRunFlow(n,r,i),retention:()=>this.dryRunRetention(n,r,i)}[e.R(t)]()}async generateComparisonSQL(e,t,n){let r=this.buildComparisonExecutionPlan(t).periodQueries[0];return this.generateUnifiedSQL(e,r,n)}},Nr=[`year`,`quarter`,`month`,`week`,`day`,`hour`];function Pr(e,t){return t.includes(`.`)?t:`${e}.${t}`}function Fr(e,t){if(!t.includes(`.`))return t;let n=`${e}.`;return t.startsWith(n)?t.slice(n.length):null}function Ir(e){let t=Object.keys(e.measures),n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.measures[i];if(a.shown===!1)continue;let o;a.drillMembers&&a.drillMembers.length>0&&(o=a.drillMembers.map(t=>Pr(e.name,t))),n.push({name:`${e.name}.${i}`,title:a.title||i,shortTitle:a.title||i,type:a.type,format:void 0,description:a.description,synonyms:a.synonyms,drillMembers:o})}return n}function Lr(e){let t=Object.keys(e.dimensions),n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.dimensions[i];if(a.shown===!1)continue;let o=a.type===`time`?a.granularities||Nr:void 0;n.push({name:`${e.name}.${i}`,title:a.title||i,shortTitle:a.title||i,type:a.type,format:void 0,description:a.description,synonyms:a.synonyms,granularities:o})}return n}function Rr(t,n,r){let i=[];if(!t.joins)return i;for(let[,a]of Object.entries(t.joins)){let t=e.P(a.targetCube,n);t&&i.push({targetCube:t.name,relationship:a.relationship,joinFields:a.on.map(e=>({sourceField:r(e.source),targetField:r(e.target)}))})}return i}function zr(e){let t=[];if(!e.hierarchies)return t;for(let[,n]of Object.entries(e.hierarchies)){let r=n.levels.filter(t=>{let n=Fr(e.name,t);return n===null||e.dimensions[n]?.shown!==!1}).map(t=>Pr(e.name,t));r.length!==0&&t.push({name:n.name,title:n.title||n.name,cubeName:e.name,levels:r})}return t}Object.freeze({});function Br(e){if(typeof process>`u`)return;let t=process.env?.DC_DEBUG;(t===`true`||t===`cubesets`)&&console.log(`[DC_DEBUG] ${e}`)}var Vr=class{baseCubes=new Map;cubeSets=new Map;metadataCache=new Map;baseGeneration=0;registrationCounter=0;contextToCubeSetId;missingCubeSet=`base`;onCubeSetRegistered;cacheConfig;rlsSetup;planOptimiser;db;schema;engineType;constructor(e){e?.databaseExecutor?(this.db=e.databaseExecutor.db,this.schema=e.databaseExecutor.schema,this.engineType=e.databaseExecutor.getEngineType()):e?.drizzle&&(this.db=e.drizzle,this.schema=e.schema,this.engineType=e.engineType),this.cacheConfig=e?.cache,this.rlsSetup=e?.rlsSetup,this.planOptimiser=e?.planOptimiser,this.contextToCubeSetId=e?.contextToCubeSetId,this.missingCubeSet=e?.missingCubeSet??`base`,this.onCubeSetRegistered=e?.onCubeSetRegistered}setDatabaseExecutor(e){this.db=e.db,this.schema=e.schema,this.engineType=e.getEngineType()}getEngineType(){return this.engineType}setDrizzle(e,t,n){this.db=e,this.schema=t,this.engineType=n}hasExecutor(){return!!this.db}createDbExecutor(){if(!this.db)throw Error(e.k(`server.errors.dbNotConfigured`));return We(this.db,this.schema,this.engineType)}createQueryExecutor(e=!1){return new Mr(this.createDbExecutor(),e?this.cacheConfig:void 0,this.rlsSetup,this.planOptimiser)}formatSqlResult(t){let n=this.getEngineType()??`postgres`;return{sql:e.x(t.sql,n),params:t.params}}registerCube(e){this.prepareCube(e,this.baseCubes),this.baseCubes.set(e.name,e),this.baseGeneration++,this.rebuildAllMergedSets(),this.metadataCache.clear()}registerCubeSet(t,n){if(t===``)throw Error(e.k(`server.errors.cubeSetIdEmpty`));let r=Date.now(),i=new Map;for(let e of n){let t=new Map(this.baseCubes);for(let[e,n]of i)t.set(e,n);this.prepareCube(e,t),i.set(e.name,e)}let a=++this.registrationCounter,o=this.mergeWithBase(i),s=Date.now()-r;this.cubeSets.set(t,{overlay:i,merged:o,generation:a,durationMs:s}),this.metadataCache.delete(t);let c=0;for(let e of i.values())c+=Object.keys(e.dimensions??{}).length;let l={setId:t,cubeCount:o.size,dimensionCount:c,generation:a,durationMs:s};Br(`registered cube set '${t}': ${i.size} cube(s), ${c} dimension(s), generation ${a}, ${s}ms`),this.onCubeSetRegistered?.(l)}unregisterCubeSet(e){let t=this.cubeSets.delete(e);return t&&this.metadataCache.delete(e),t}hasCubeSet(e){return this.cubeSets.has(e)}getCubeSetIds(){return Array.from(this.cubeSets.keys())}getCubeSetStats(){let e=0,t=0,n;for(let[r,i]of this.cubeSets)e+=i.merged.size,t+=i.durationMs,(!n||i.durationMs>n.durationMs)&&(n={setId:r,durationMs:i.durationMs});return{setCount:this.cubeSets.size,cubeCount:e,totalRegistrationMs:t,slowestSet:n}}prepareCube(e,t){this.validateCalculatedMeasures(e,t),new B(t).populateDependencies(e)}mergeWithBase(e){let t=new Map(this.baseCubes);for(let[n,r]of e)t.set(n,r);return t}rebuildAllMergedSets(){for(let e of this.cubeSets.values())e.merged=this.mergeWithBase(e.overlay)}resolveSetId(t){if(!this.contextToCubeSetId)return``;let n=this.contextToCubeSetId(t);if(n==null||n===``)return``;let r=String(n);if(!this.cubeSets.has(r)){if(this.missingCubeSet===`throw`)throw Error(e.k(`server.errors.cubeSetNotFound`,{setId:r}));return``}return r}resolveCubes(e){let t=this.resolveSetId(e);return t===``?this.baseCubes:this.cubeSets.get(t)?.merged??this.baseCubes}cubeSetCacheKey(e){let t=this.cubeSets.get(e)?.generation??0;return`${e}:${this.baseGeneration}.${t}`}validateCubeReferences(){let t=new Set;for(let e of this.unresolvedJoinRefs(this.baseCubes))t.add(e);for(let e of this.cubeSets.values())for(let n of this.unresolvedJoinRefs(e.merged))t.add(n);if(t.size>0){let n=Array.from(t,e=>` - ${e}`).join(`
165
165
  `);throw Error(e.k(`server.errors.unresolvedCubeRefs`,{details:n}))}}*unresolvedJoinRefs(t){for(let[n,r]of t)if(r.joins)for(let[i,a]of Object.entries(r.joins)){let{targetCube:r}=a;typeof r==`string`&&!t.has(r)&&(yield e.k(`server.errors.cubeRefUnresolved`,{cubeName:n,joinName:i,targetCube:r}))}}validateCalculatedMeasures(t,n){let r=[];for(let[i,a]of Object.entries(t.measures))if(a.type===`calculated`){if(!a.calculatedSql){r.push(e.k(`server.validation.calculatedMeasure.mustHaveCalculatedSql`,{cubeName:t.name,fieldName:i}));continue}let o=jt(a.calculatedSql);if(!o.isValid){r.push(e.k(`server.validation.calculatedMeasure.invalidSyntax`,{cubeName:t.name,fieldName:i,errors:o.errors.join(`, `)}));continue}let s=new Map(n);s.set(t.name,t);let c=new B(s);try{c.validateDependencies(t)}catch(e){r.push(e instanceof Error?e.message:String(e))}}if(r.length===0){let i=new Map(n);i.set(t.name,t);let a=new B(i);a.buildGraph(t);let o=a.detectCycle();o&&r.push(e.k(`server.validation.calculatedMeasure.circularDependency`,{cycle:o.join(` -> `)}))}if(r.length>0)throw Error(e.k(`server.errors.calculatedMeasureValidation`,{cubeName:t.name,details:r.join(`
166
166
  `)}))}getCube(e,t){return this.resolveCubes(t).get(e)}getAllCubes(e){return Array.from(this.resolveCubes(e).values())}getAllCubesMap(e){return this.resolveCubes(e)}async execute(e,t,n){let r=this.createQueryExecutor(!0),i=this.resolveSetId(t);return r.execute(this.cubeSetId2Cubes(i),e,t,{...n,cubeSetKey:this.cubeSetCacheKey(i)})}async executeMultiCubeQuery(e,t,n){return this.execute(e,t,n)}async executeQuery(t,n,r){if(!this.resolveCubes(r).get(t))throw Error(e.k(`server.errors.cubeNotFound`,{cubeName:t}));return this.execute(n,r)}getMetadata(e){let t=this.resolveSetId(e),n=this.metadataCache.get(t);if(n)return n;let r=this.cubeSetId2Cubes(t),i=Array.from(r.values()).map(e=>this.generateCubeMetadata(e,r));return this.metadataCache.set(t,i),i}getColumnName(e){if(e&&e.name||e&&e.columnType&&e.name)return e.name;if(typeof e==`string`)return e;if(e&&typeof e==`object`){if(e._.name)return e._.name;if(e.name)return e.name;if(e.columnName)return e.columnName}return`unknown_column`}generateCubeMetadata(e,t){let n=Ir(e),r=Lr(e),i=Rr(e,t,e=>this.getColumnName(e)),a=zr(e);return{name:e.name,title:e.title||e.name,description:e.description,exampleQuestions:e.exampleQuestions,measures:n,dimensions:r,segments:[],relationships:i.length>0?i:void 0,hierarchies:a.length>0?a:void 0,meta:e.meta}}async generateSQL(t,n,r){let i=this.getCube(t,r);if(!i)throw Error(e.k(`server.errors.cubeNotFound`,{cubeName:t}));let a=await this.createQueryExecutor().generateSQL(i,n,r);return this.formatSqlResult(a)}async generateMultiCubeSQL(e,t){let n=await this.createQueryExecutor().generateMultiCubeSQL(this.resolveCubes(t),e,t);return this.formatSqlResult(n)}async dryRun(e,t){let n=await this.createQueryExecutor().dryRunSQL(this.resolveCubes(t),e,t);return this.formatSqlResult(n)}async dryRunFunnel(e,t){return this.dryRun(e,t)}async dryRunFlow(e,t){return this.dryRun(e,t)}async dryRunRetention(e,t){return this.dryRun(e,t)}async explainQuery(e,t,n){return this.createQueryExecutor().explainQuery(this.resolveCubes(t),e,t,n)}hasCube(e,t){return this.resolveCubes(t).has(e)}unregisterCube(e){return this.removeCube(e)}removeCube(e){let t=this.baseCubes.delete(e);return t&&(this.baseGeneration++,this.rebuildAllMergedSets(),this.invalidateMetadataCache()),t}clearCubes(){this.baseCubes.clear(),this.baseGeneration++,this.rebuildAllMergedSets(),this.invalidateMetadataCache()}invalidateMetadataCache(){this.metadataCache.clear()}cubeSetId2Cubes(e){return e===``?this.baseCubes:this.cubeSets.get(e)?.merged??this.baseCubes}getCubeNames(e){return Array.from(this.resolveCubes(e).keys())}validateQuery(t,n){return e.C(this.resolveCubes(n),t)}analyzeQuery(e,t){return this.createQueryExecutor(!0).analyzeQuery(this.resolveCubes(t),e,t)}};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Vr}});
@@ -1,4 +1,4 @@
1
- import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as d, L as f, M as p, N as m, P as h, Q as g, R as _, S as v, T as y, U as b, V as ee, W as te, X as x, Y as ne, Z as re, et as ie, it as ae, j as oe, k as S, nt as C, q as se, rt as ce, tt as le, w as ue, x as de, z as w } from "./utils-dyUxCOWT.js";
1
+ import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as d, L as f, M as p, N as m, P as h, Q as g, R as _, S as v, T as y, U as b, V as ee, W as te, X as x, Y as ne, Z as re, et as ie, it as ae, j as oe, k as S, nt as C, q as se, rt as ce, tt as le, w as ue, x as de, z as w } from "./utils-C_Mc0qsk.js";
2
2
  //#region node_modules/drizzle-orm/sql/expressions/select.js
3
3
  function fe(e) {
4
4
  return C`${e} asc`;
@@ -6927,7 +6927,7 @@ var pi = class {
6927
6927
  //#endregion
6928
6928
  //#region src/server/executor.ts
6929
6929
  function $(e, t) {
6930
- if (!(typeof process > "u" || !process.env?.DC_DEBUG)) try {
6930
+ if (typeof process < "u" && process.env?.DC_DEBUG) try {
6931
6931
  let { sql: n, params: r } = t.toSQL();
6932
6932
  console.log(`\n[DC_DEBUG] ${e}`), console.log(n), r.length > 0 && console.log("params:", r), console.log();
6933
6933
  } catch {}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core-BkxueWec.cjs");exports.REST_CACHE_CONTROL=e.i,exports.createCubeHttpHandler=e.t,exports.resolveSecurityContext=e.n,exports.withLocaleFromHeaders=e.r,exports.withRestCacheHeaders=e.a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core-CydD6oFu.cjs");exports.REST_CACHE_CONTROL=e.i,exports.createCubeHttpHandler=e.t,exports.resolveSecurityContext=e.n,exports.withLocaleFromHeaders=e.r,exports.withRestCacheHeaders=e.a;
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, t as i } from "../core-B05onvSN.js";
1
+ import { a as e, i as t, n, r, t as i } from "../core-BH_56XtM.js";
2
2
  export { t as REST_CACHE_CONTROL, i as createCubeHttpHandler, n as resolveSecurityContext, r as withLocaleFromHeaders, e as withRestCacheHeaders };
@@ -1,5 +1,5 @@
1
- import { a as e, i as t, l as n, o as r, r as i, u as a } from "./utils-dyUxCOWT.js";
2
- import { C as o, S as s, _ as c, a as l, b as u, c as d, g as f, h as p, i as m, l as h, m as g, p as _, r as v, s as y, v as b, w as x, x as S, y as C } from "./mcp-transport-BH5avoaA.js";
1
+ import { a as e, i as t, l as n, o as r, r as i, u as a } from "./utils-C_Mc0qsk.js";
2
+ import { C as o, S as s, _ as c, a as l, b as u, c as d, g as f, h as p, i as m, l as h, m as g, p as _, r as v, s as y, v as b, w as x, x as S, y as C } from "./mcp-transport-DDxjqyuK.js";
3
3
  //#region src/adapters/locale.ts
4
4
  var w = "x-dc-locale";
5
5
  function T(e) {
@@ -1 +1 @@
1
- const e=require("./utils-iMkgJr10.cjs"),t=require("./mcp-transport-DXgZ-xcU.cjs");var n=`x-dc-locale`;function r(e){if(!e)return;let t=(Array.isArray(e)?e[0]:e).split(`,`)[0]?.trim();if(t&&/^[A-Za-z0-9-]{2,35}$/.test(t))return t}function i(e){return r(e(n))}function a(e,t){let n=e&&typeof e==`object`?e:{},r=typeof n.locale==`string`?n.locale:void 0,i=t??r??`en-GB`;return r===i?n:{...n,locale:i}}function o(e){let t=Array.isArray(e)?[...e]:(e??``).split(`,`).map(e=>e.trim()).filter(Boolean);return t.some(e=>e.toLowerCase()===`x-dc-locale`)||t.push(`X-DC-Locale`),t}var s=`private, no-store`;function c(e){return{getHeader:t=>e.getHeader(t),getBody:()=>e.getBody(),getQueryParam:t=>e.getQueryParam(t),setHeader:(t,n)=>e.setHeader(t,n),send:(t,n)=>(e.setHeader(`Cache-Control`,s),e.send(t,n))}}function l(e,t){return a(e,i(t))}async function u(e,t){return l(await e(),t)}function d(e){return String(e).replace(/\n|\r/g,``)}function f(t){async function n(n,r,i){let a=t.validateQuery(n,r);if(!a.isValid)return i.send(400,e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=n.measures?.[0]||n.dimensions?.[0];if(!o)return i.send(400,e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0],c=await t.generateSQL(s,n,r);return i.send(200,e.o(n,c))}async function r(n,r){try{let i=await u(r,e=>n.getHeader(e));return n.send(200,e.a(t.getMetadata(i)))}catch(t){return console.error(`Metadata error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500))}}async function i(t,r){try{let e=await t.getBody();return await n(e?.query||e,await u(r,e=>t.getHeader(e)),t)}catch(n){return console.error(`SQL generation error:`,d(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function a(t,r){try{let i=t.getQueryParam(`query`);if(!i)return t.send(400,e.i(`Query parameter is required`,400));let a;try{a=JSON.parse(i)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}let o=await u(r,e=>t.getHeader(e));return await n(a,o,t)}catch(n){return console.error(`SQL generation error:`,d(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function o(n,r){try{let i=await n.getBody(),a=i?.query||i,o=await u(r,e=>n.getHeader(e)),s=await e.u(a,o,t);return n.send(200,s)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function s(n,r){try{let i=n.getQueryParam(`query`);if(!i)return n.send(400,{error:`Query parameter is required`,valid:!1});let a=JSON.parse(i),o=await u(r,e=>n.getHeader(e)),s=await e.u(a,o,t);return n.send(200,s)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function c(n,r){try{let i=(await n.getBody())?.queries;if(!i||!Array.isArray(i))return n.send(400,e.i(`Request body must contain a "queries" array`,400));if(i.length===0)return n.send(400,e.i(`Queries array cannot be empty`,400));let a=await u(r,e=>n.getHeader(e)),o=n.getHeader(`x-cache-control`)===`no-cache`,s=await e.l(i,a,t,{skipCache:o});return n.send(200,s)}catch(t){return console.error(`Batch execution error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Batch execution failed`,500))}}async function l(e,n){try{let r=await e.getBody(),i=r?.query||r,a=r?.options||{},o=await u(n,t=>e.getHeader(t)),s=t.validateQuery(i,o);if(!s.isValid)return e.send(400,{error:`Query validation failed: ${s.errors.join(`, `)}`});let c=await t.explainQuery(i,o,a);return e.send(200,c)}catch(t){return console.error(`Explain error:`,t),e.send(500,{error:t instanceof Error?t.message:`Explain query failed`})}}return{handleMetaGet:r,handleSqlGet:a,handleSqlPost:i,handleDryRunGet:s,handleDryRunPost:o,handleBatchPost:c,handleExplainPost:l}}function p(e,n){let r=e?.code??-32603,i=e?.data,a=e.message||`MCP request failed`;return t.i(n??null,r,a,i)}function m(e,n){let r=!!n.app,i=typeof n.app==`object`?n.app:void 0,a={resources:t.b(n.resources),prompts:t.y(n.prompts),instructions:t.v(n.instructions)};async function o(o,s){if(n.resourceMetadataUrl&&!t.l(o.getHeader(`authorization`)))return o.setHeader(`WWW-Authenticate`,t.s(n.resourceMetadataUrl)),o.send(401,{error:`Bearer token required`});let c=t.C(o.getHeader(`origin`),t.h(n));if(!c.valid)return o.send(403,t.i(null,-32600,c.reason));let l=o.getHeader(`accept`);if(!t.S(l))return o.send(400,t.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let f=t.m({"mcp-protocol-version":o.getHeader(`mcp-protocol-version`)});if(!f.ok)return o.send(426,{error:`Unsupported MCP protocol version`,supported:f.supported});let m=t.g(await o.getBody());if(!m)return o.send(400,t.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let h=t.w(l),g=m.method===`initialize`,{resources:_,prompts:v,instructions:y}=a;try{let a=await t.c(m.method,m.params,{semanticLayer:e,extractSecurityContext:()=>u(s,e=>o.getHeader(e)),rawRequest:void 0,rawResponse:void 0,negotiatedProtocol:f.negotiated,resources:_,prompts:v,instructions:y,appEnabled:r,appConfig:i,serverName:n.serverName});if(t.p(m))return o.sendEmpty(202);let c=g&&a&&typeof a==`object`&&`sessionId`in a?a.sessionId:void 0;c&&o.setHeader(t.r,c);let l=t.a(m.id??null,a);if(h){let e=t._();return o.sendSse(200,`id: ${e}\n\n`+t.x(l,e))}return o.send(200,l)}catch(e){if(t.p(m))return console.error(`MCP notification processing error:`,d(e)),o.sendEmpty(202);console.error(`MCP RPC error:`,d(e));let n=p(e,m.id);if(h){let e=t._();return o.sendSse(200,`id: ${e}\n\n`+t.x(n,e))}return o.send(200,n)}}return{handleMcpPost:o}}function h(t){let{semanticLayer:n,onError:r,mcp:i={}}=t,a=f(n),{handleMcpPost:o}=m(n,i);function s(t,n){return r(t),n.send(500,e.i(t instanceof Error?t.message:`Query execution failed`,500))}async function l(t,r,i){let a=await u(i,e=>r.getHeader(e)),o=n.validateQuery(t,a);if(!o.isValid)return r.send(400,e.i(`Query validation failed: ${o.errors.join(`, `)}`,400,o.issues));let s=r.getHeader(`x-cache-control`)===`no-cache`,c=await n.executeMultiCubeQuery(t,a,{skipCache:s});return r.send(200,e.r(t,c,n))}async function d(e,t){try{let n=await e.getBody();return await l(n?.query||n,e,t)}catch(t){return s(t,e)}}async function p(t,n){try{let r=t.getQueryParam(`query`);if(!r)return t.send(400,e.i(`Query parameter is required`,400));let i;try{i=JSON.parse(r)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}return await l(i,t,n)}catch(e){return s(e,t)}}return{handleLoadGet:(e,t)=>p(c(e),t),handleLoadPost:(e,t)=>d(c(e),t),handleMetaGet:(e,t)=>a.handleMetaGet(c(e),t),handleSqlGet:(e,t)=>a.handleSqlGet(c(e),t),handleSqlPost:(e,t)=>a.handleSqlPost(c(e),t),handleDryRunGet:(e,t)=>a.handleDryRunGet(c(e),t),handleDryRunPost:(e,t)=>a.handleDryRunPost(c(e),t),handleBatchPost:(e,t)=>a.handleBatchPost(c(e),t),handleExplainPost:(e,t)=>a.handleExplainPost(c(e),t),handleMcpPost:o}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return h}});
1
+ const e=require("./utils-BFGzuSlF.cjs"),t=require("./mcp-transport-QGYYYSgR.cjs");var n=`x-dc-locale`;function r(e){if(!e)return;let t=(Array.isArray(e)?e[0]:e).split(`,`)[0]?.trim();if(t&&/^[A-Za-z0-9-]{2,35}$/.test(t))return t}function i(e){return r(e(n))}function a(e,t){let n=e&&typeof e==`object`?e:{},r=typeof n.locale==`string`?n.locale:void 0,i=t??r??`en-GB`;return r===i?n:{...n,locale:i}}function o(e){let t=Array.isArray(e)?[...e]:(e??``).split(`,`).map(e=>e.trim()).filter(Boolean);return t.some(e=>e.toLowerCase()===`x-dc-locale`)||t.push(`X-DC-Locale`),t}var s=`private, no-store`;function c(e){return{getHeader:t=>e.getHeader(t),getBody:()=>e.getBody(),getQueryParam:t=>e.getQueryParam(t),setHeader:(t,n)=>e.setHeader(t,n),send:(t,n)=>(e.setHeader(`Cache-Control`,s),e.send(t,n))}}function l(e,t){return a(e,i(t))}async function u(e,t){return l(await e(),t)}function d(e){return String(e).replace(/\n|\r/g,``)}function f(t){async function n(n,r,i){let a=t.validateQuery(n,r);if(!a.isValid)return i.send(400,e.i(`Query validation failed: ${a.errors.join(`, `)}`,400));let o=n.measures?.[0]||n.dimensions?.[0];if(!o)return i.send(400,e.i(`No measures or dimensions specified`,400));let s=o.split(`.`)[0],c=await t.generateSQL(s,n,r);return i.send(200,e.o(n,c))}async function r(n,r){try{let i=await u(r,e=>n.getHeader(e));return n.send(200,e.a(t.getMetadata(i)))}catch(t){return console.error(`Metadata error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Failed to fetch metadata`,500))}}async function i(t,r){try{let e=await t.getBody();return await n(e?.query||e,await u(r,e=>t.getHeader(e)),t)}catch(n){return console.error(`SQL generation error:`,d(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function a(t,r){try{let i=t.getQueryParam(`query`);if(!i)return t.send(400,e.i(`Query parameter is required`,400));let a;try{a=JSON.parse(i)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}let o=await u(r,e=>t.getHeader(e));return await n(a,o,t)}catch(n){return console.error(`SQL generation error:`,d(n)),t.send(500,e.i(n instanceof Error?n.message:`SQL generation failed`,500))}}async function o(n,r){try{let i=await n.getBody(),a=i?.query||i,o=await u(r,e=>n.getHeader(e)),s=await e.u(a,o,t);return n.send(200,s)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function s(n,r){try{let i=n.getQueryParam(`query`);if(!i)return n.send(400,{error:`Query parameter is required`,valid:!1});let a=JSON.parse(i),o=await u(r,e=>n.getHeader(e)),s=await e.u(a,o,t);return n.send(200,s)}catch(e){return console.error(`Dry-run error:`,e),n.send(400,{error:e instanceof Error?e.message:`Dry-run validation failed`,valid:!1})}}async function c(n,r){try{let i=(await n.getBody())?.queries;if(!i||!Array.isArray(i))return n.send(400,e.i(`Request body must contain a "queries" array`,400));if(i.length===0)return n.send(400,e.i(`Queries array cannot be empty`,400));let a=await u(r,e=>n.getHeader(e)),o=n.getHeader(`x-cache-control`)===`no-cache`,s=await e.l(i,a,t,{skipCache:o});return n.send(200,s)}catch(t){return console.error(`Batch execution error:`,t),n.send(500,e.i(t instanceof Error?t.message:`Batch execution failed`,500))}}async function l(e,n){try{let r=await e.getBody(),i=r?.query||r,a=r?.options||{},o=await u(n,t=>e.getHeader(t)),s=t.validateQuery(i,o);if(!s.isValid)return e.send(400,{error:`Query validation failed: ${s.errors.join(`, `)}`});let c=await t.explainQuery(i,o,a);return e.send(200,c)}catch(t){return console.error(`Explain error:`,t),e.send(500,{error:t instanceof Error?t.message:`Explain query failed`})}}return{handleMetaGet:r,handleSqlGet:a,handleSqlPost:i,handleDryRunGet:s,handleDryRunPost:o,handleBatchPost:c,handleExplainPost:l}}function p(e,n){let r=e?.code??-32603,i=e?.data,a=e.message||`MCP request failed`;return t.i(n??null,r,a,i)}function m(e,n){let r=!!n.app,i=typeof n.app==`object`?n.app:void 0,a={resources:t.b(n.resources),prompts:t.y(n.prompts),instructions:t.v(n.instructions)};async function o(o,s){if(n.resourceMetadataUrl&&!t.l(o.getHeader(`authorization`)))return o.setHeader(`WWW-Authenticate`,t.s(n.resourceMetadataUrl)),o.send(401,{error:`Bearer token required`});let c=t.C(o.getHeader(`origin`),t.h(n));if(!c.valid)return o.send(403,t.i(null,-32600,c.reason));let l=o.getHeader(`accept`);if(!t.S(l))return o.send(400,t.i(null,-32600,`Accept header must include both application/json and text/event-stream`));let f=t.m({"mcp-protocol-version":o.getHeader(`mcp-protocol-version`)});if(!f.ok)return o.send(426,{error:`Unsupported MCP protocol version`,supported:f.supported});let m=t.g(await o.getBody());if(!m)return o.send(400,t.i(null,-32600,`Invalid JSON-RPC 2.0 request`));let h=t.w(l),g=m.method===`initialize`,{resources:_,prompts:v,instructions:y}=a;try{let a=await t.c(m.method,m.params,{semanticLayer:e,extractSecurityContext:()=>u(s,e=>o.getHeader(e)),rawRequest:void 0,rawResponse:void 0,negotiatedProtocol:f.negotiated,resources:_,prompts:v,instructions:y,appEnabled:r,appConfig:i,serverName:n.serverName});if(t.p(m))return o.sendEmpty(202);let c=g&&a&&typeof a==`object`&&`sessionId`in a?a.sessionId:void 0;c&&o.setHeader(t.r,c);let l=t.a(m.id??null,a);if(h){let e=t._();return o.sendSse(200,`id: ${e}\n\n`+t.x(l,e))}return o.send(200,l)}catch(e){if(t.p(m))return console.error(`MCP notification processing error:`,d(e)),o.sendEmpty(202);console.error(`MCP RPC error:`,d(e));let n=p(e,m.id);if(h){let e=t._();return o.sendSse(200,`id: ${e}\n\n`+t.x(n,e))}return o.send(200,n)}}return{handleMcpPost:o}}function h(t){let{semanticLayer:n,onError:r,mcp:i={}}=t,a=f(n),{handleMcpPost:o}=m(n,i);function s(t,n){return r(t),n.send(500,e.i(t instanceof Error?t.message:`Query execution failed`,500))}async function l(t,r,i){let a=await u(i,e=>r.getHeader(e)),o=n.validateQuery(t,a);if(!o.isValid)return r.send(400,e.i(`Query validation failed: ${o.errors.join(`, `)}`,400,o.issues));let s=r.getHeader(`x-cache-control`)===`no-cache`,c=await n.executeMultiCubeQuery(t,a,{skipCache:s});return r.send(200,e.r(t,c,n))}async function d(e,t){try{let n=await e.getBody();return await l(n?.query||n,e,t)}catch(t){return s(t,e)}}async function p(t,n){try{let r=t.getQueryParam(`query`);if(!r)return t.send(400,e.i(`Query parameter is required`,400));let i;try{i=JSON.parse(r)}catch{return t.send(400,e.i(`Invalid JSON in query parameter`,400))}return await l(i,t,n)}catch(e){return s(e,t)}}return{handleLoadGet:(e,t)=>p(c(e),t),handleLoadPost:(e,t)=>d(c(e),t),handleMetaGet:(e,t)=>a.handleMetaGet(c(e),t),handleSqlGet:(e,t)=>a.handleSqlGet(c(e),t),handleSqlPost:(e,t)=>a.handleSqlPost(c(e),t),handleDryRunGet:(e,t)=>a.handleDryRunGet(c(e),t),handleDryRunPost:(e,t)=>a.handleDryRunPost(c(e),t),handleBatchPost:(e,t)=>a.handleBatchPost(c(e),t),handleExplainPost:(e,t)=>a.handleExplainPost(c(e),t),handleMcpPost:o}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return h}});