drizzle-cube 0.10.0 → 0.11.0
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.
- package/dist/adapters/ActivityGridChart.config-XMtoteb6.js +2 -0
- package/dist/adapters/ActivityGridChart.config-h1AXPvn0.cjs +1 -0
- package/dist/adapters/AreaChart.config-DYf9wufo.cjs +1 -0
- package/dist/adapters/AreaChart.config-We6b53aT.js +2 -0
- package/dist/adapters/BarChart.config-4SX44IYv.cjs +1 -0
- package/dist/adapters/BarChart.config-CwBnyptL.js +2 -0
- package/dist/adapters/BoxPlotChart.config-BzNe-FlW.cjs +1 -0
- package/dist/adapters/BoxPlotChart.config-mfAHqmcp.js +2 -0
- package/dist/adapters/BubbleChart.config-CBT5jMdc.cjs +1 -0
- package/dist/adapters/BubbleChart.config-DxG_Umal.js +2 -0
- package/dist/adapters/CandlestickChart.config-Cqw3XP1h.js +2 -0
- package/dist/adapters/CandlestickChart.config-DPSSlzUD.cjs +1 -0
- package/dist/adapters/DataTable.config-DS1bvaDu.js +2 -0
- package/dist/adapters/DataTable.config-D_NsMeyz.cjs +1 -0
- package/dist/adapters/DotStripChart.config-BApWn6QV.cjs +1 -0
- package/dist/adapters/DotStripChart.config-Bdk5-YfB.js +2 -0
- package/dist/adapters/FunnelChart.config-BT5up_Bg.cjs +1 -0
- package/dist/adapters/FunnelChart.config-ISZiz9fn.js +2 -0
- package/dist/adapters/GaugeChart.config-Biaq1cKc.cjs +1 -0
- package/dist/adapters/GaugeChart.config-BjGfB84t.js +2 -0
- package/dist/adapters/HeatMapChart.config-Bmca8KiH.cjs +1 -0
- package/dist/adapters/HeatMapChart.config-uWvR0B-N.js +2 -0
- package/dist/adapters/KpiDelta.config-CJeDdj_1.js +2 -0
- package/dist/adapters/KpiDelta.config-CKr9pAxL.cjs +1 -0
- package/dist/adapters/KpiNumber.config-6YLEF2fy.cjs +1 -0
- package/dist/adapters/KpiNumber.config-C00M46GA.js +2 -0
- package/dist/adapters/KpiText.config-C8Av_D2W.cjs +1 -0
- package/dist/adapters/KpiText.config-bKTHob0C.js +2 -0
- package/dist/adapters/LineChart.config-DH68HT_B.js +2 -0
- package/dist/adapters/LineChart.config-DPq7GvL9.cjs +1 -0
- package/dist/adapters/MarkdownChart.config-CaaJPO3c.js +2 -0
- package/dist/adapters/MarkdownChart.config-ca_UyhWJ.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-C1Il0IqL.cjs +1 -0
- package/dist/adapters/MeasureProfileChart.config-DMOnkmb6.js +2 -0
- package/dist/adapters/PieChart.config-Bg-8cxWK.js +2 -0
- package/dist/adapters/PieChart.config-joJcF--K.cjs +1 -0
- package/dist/adapters/ProportionBarChart.config-B2sltKsI.cjs +1 -0
- package/dist/adapters/ProportionBarChart.config-BlCedy1v.js +2 -0
- package/dist/adapters/RadarChart.config-DD1pX6FZ.js +2 -0
- package/dist/adapters/RadarChart.config-DVCCLSVw.cjs +1 -0
- package/dist/adapters/RadialBarChart.config--VIE2jMM.js +2 -0
- package/dist/adapters/RadialBarChart.config-BZwyWhTg.cjs +1 -0
- package/dist/adapters/RecordsTable.config-CTBQc-2r.js +2 -0
- package/dist/adapters/RecordsTable.config-DPdO0DL5.cjs +1 -0
- package/dist/adapters/RetentionCombinedChart.config-PGVxnkRL.js +2 -0
- package/dist/adapters/RetentionCombinedChart.config-mX5PMh82.cjs +1 -0
- package/dist/adapters/RetentionHeatmap.config-Co-JMzBm.js +2 -0
- package/dist/adapters/RetentionHeatmap.config-Cub3-ksy.cjs +1 -0
- package/dist/adapters/SankeyChart.config-BkIyUcAE.cjs +1 -0
- package/dist/adapters/SankeyChart.config-DGTnRmYg.js +2 -0
- package/dist/adapters/ScatterChart.config-CdZrBorg.js +2 -0
- package/dist/adapters/ScatterChart.config-CwN9niUL.cjs +1 -0
- package/dist/adapters/SunburstChart.config-D0ZkRSJv.cjs +1 -0
- package/dist/adapters/SunburstChart.config-RF3uu5Sa.js +2 -0
- package/dist/adapters/TreeMapChart.config-B2Yn_V7p.cjs +1 -0
- package/dist/adapters/TreeMapChart.config-diJtcs4D.js +2 -0
- package/dist/adapters/WaterfallChart.config-B10PxftT.cjs +1 -0
- package/dist/adapters/WaterfallChart.config-BImlkLmR.js +2 -0
- package/dist/adapters/chartConfigHelpers-BhME7ow_.cjs +1 -0
- package/dist/adapters/{chartConfigHelpers-BsnbxA2c.js → chartConfigHelpers-BsviVhEw.js} +27 -7
- package/dist/adapters/compiler-B-yljK02.cjs +166 -0
- package/dist/adapters/{compiler-BKg3j2mm.js → compiler-BhityGUO.js} +1146 -1108
- package/dist/adapters/core/index.cjs +1 -1
- package/dist/adapters/core/index.js +1 -1
- package/dist/adapters/{core-JgUTMhxl.cjs → core-CQOrzBNh.cjs} +1 -1
- package/dist/adapters/{core-Bmb7XMBz.js → core-xZE0miIu.js} +2 -2
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +5 -5
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +23 -23
- package/dist/adapters/{handler-B1_zd-qo.js → handler-ByeQ0-1r.js} +238 -234
- package/dist/adapters/handler-DSNmfv1R.cjs +16 -0
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +4 -4
- package/dist/adapters/mcp-app-html-CNp0VqS_.cjs +1 -0
- package/dist/adapters/mcp-app-html-CvWoYMO3.js +5 -0
- package/dist/adapters/mcp-app-html.cjs +1 -1
- package/dist/adapters/mcp-app-html.js +1 -1
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +3 -3
- package/dist/adapters/{mcp-transport-BTmAXLo8.js → mcp-transport-Cy6n4uj1.js} +1 -1
- package/dist/adapters/{mcp-transport-DzxluRyH.cjs → mcp-transport-DnLP5FPL.cjs} +1 -1
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +5 -5
- package/dist/adapters/{openai-Br__Bn2t.cjs → openai-BQl0yJCS.cjs} +2 -2
- package/dist/adapters/{openai-BpcMIv4e.js → openai-C4HrjyJj.js} +1 -1
- package/dist/adapters/{openai-yfJF-3Rv.js → openai-D3Nt6Bj7.js} +3 -3
- package/dist/adapters/{openai-C32tey5N.cjs → openai-z1ai-G4Q.cjs} +1 -1
- package/dist/adapters/{utils-i2h5cwI3.js → utils-BaxFceDq.js} +1070 -937
- package/dist/adapters/utils-a2p2B6x8.cjs +141 -0
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.js +1 -1
- package/dist/cjs/client/charts/chartConfigHelpers.d.ts +5 -0
- package/dist/cjs/client/components/DashboardFilters/useCompactFilterBar.d.ts +5 -0
- package/dist/cjs/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
- package/dist/cjs/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
- package/dist/cjs/client/hooks/queries/useCubeLoadQuery.d.ts +7 -0
- package/dist/cjs/client/hooks/queries/useMultiCubeLoadQuery.d.ts +7 -0
- package/dist/cjs/client/hooks/useAnalysisQuery.d.ts +6 -1
- package/dist/cjs/client/index.d.ts +2 -0
- package/dist/cjs/client/types.d.ts +3 -0
- package/dist/cjs/client/utils/filterUtils.d.ts +30 -0
- package/dist/cjs/client/utils/gapFilling.d.ts +52 -0
- package/dist/cjs/client/utils/index.d.ts +1 -0
- package/dist/cjs/client/utils/joinReachability.d.ts +1 -0
- package/dist/cjs/server/ai/query-schema.d.ts +8 -3
- package/dist/cjs/server/builders/date-time-builder.d.ts +1 -1
- package/dist/cjs/server/builders/date-time-helpers.d.ts +2 -0
- package/dist/cjs/server/builders/filter-builder.d.ts +1 -1
- package/dist/cjs/server/builders/in-date-range-validation.d.ts +25 -0
- package/dist/cjs/server/execution/result-post-processor.d.ts +4 -2
- package/dist/cjs/server/executor.d.ts +2 -0
- package/dist/cjs/server/gap-filler.d.ts +8 -43
- package/dist/cjs/server/types/core.d.ts +2 -0
- package/dist/cjs/server/types/cube.d.ts +12 -0
- package/dist/cjs/server/types/metadata.d.ts +5 -0
- package/dist/cjs/server/types/query.d.ts +2 -1
- package/dist/client/charts/chartConfigHelpers.d.ts +5 -0
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-P-HUNrcp.js → DashboardEditModal-CIR4aqr7.js} +2424 -2559
- package/dist/client/chunks/DashboardEditModal-CIR4aqr7.js.map +1 -0
- package/dist/client/chunks/{DotStripChart-in6QHc0b.js → DotStripChart-B9IVCFPO.js} +3 -3
- package/dist/client/chunks/{DotStripChart-in6QHc0b.js.map → DotStripChart-B9IVCFPO.js.map} +1 -1
- package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js → ProportionBarChart-DieF9AzP.js} +3 -3
- package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js.map → ProportionBarChart-DieF9AzP.js.map} +1 -1
- package/dist/client/chunks/{RecordsTable-CXXsiaV1.js → RecordsTable-Mo3ai5_M.js} +4 -4
- package/dist/client/chunks/{RecordsTable-CXXsiaV1.js.map → RecordsTable-Mo3ai5_M.js.map} +1 -1
- package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js → RetentionCombinedChart-Bie4ADyA.js} +3 -3
- package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js.map → RetentionCombinedChart-Bie4ADyA.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js → RetentionHeatmap-qstIAx5B.js} +2 -2
- package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js.map → RetentionHeatmap-qstIAx5B.js.map} +1 -1
- package/dist/client/chunks/{af-ZA-C0dGb_53.js → af-ZA-BglLInx4.js} +13 -1
- package/dist/client/chunks/{af-ZA-C0dGb_53.js.map → af-ZA-BglLInx4.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-CRghdHVl.js → analysis-builder-DJNYt7CF.js} +41 -41
- package/dist/client/chunks/{analysis-builder-CRghdHVl.js.map → analysis-builder-DJNYt7CF.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-shared-DBSxWIj8.js → analysis-builder-shared-DPLR8upd.js} +487 -483
- package/dist/client/chunks/analysis-builder-shared-DPLR8upd.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-DGazwi4C.js → chart-activity-grid-Ly_-2B-f.js} +22 -4
- package/dist/client/chunks/chart-activity-grid-Ly_-2B-f.js.map +1 -0
- package/dist/client/chunks/{chart-area-zyLGD-ym.js → chart-area-D3l-71Wy.js} +2 -2
- package/dist/client/chunks/{chart-area-zyLGD-ym.js.map → chart-area-D3l-71Wy.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-DMCBq8qJ.js → chart-bar-BaTyQOqs.js} +3 -3
- package/dist/client/chunks/{chart-bar-DMCBq8qJ.js.map → chart-bar-BaTyQOqs.js.map} +1 -1
- package/dist/client/chunks/{chart-box-plot-5Z55A-it.js → chart-box-plot-Cem6PHjz.js} +2 -2
- package/dist/client/chunks/{chart-box-plot-5Z55A-it.js.map → chart-box-plot-Cem6PHjz.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-YD28dX8w.js → chart-bubble-DFlfqCDG.js} +2 -2
- package/dist/client/chunks/{chart-bubble-YD28dX8w.js.map → chart-bubble-DFlfqCDG.js.map} +1 -1
- package/dist/client/chunks/{chart-candlestick-BUMpBI08.js → chart-candlestick-BkAFBXtZ.js} +2 -2
- package/dist/client/chunks/{chart-candlestick-BUMpBI08.js.map → chart-candlestick-BkAFBXtZ.js.map} +1 -1
- package/dist/client/chunks/{chart-config-area-DsrZCIwF.js → chart-config-area-BnsRQ-MY.js} +35 -14
- package/dist/client/chunks/chart-config-area-BnsRQ-MY.js.map +1 -0
- package/dist/client/chunks/{chart-config-bar-BixSs43E.js → chart-config-bar-G2HJJBVV.js} +8 -7
- package/dist/client/chunks/chart-config-bar-G2HJJBVV.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js → chart-config-kpi-delta-BIAq1Ftg.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js.map → chart-config-kpi-delta-BIAq1Ftg.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js → chart-config-kpi-number-Dgc4gIYu.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js.map → chart-config-kpi-number-Dgc4gIYu.js.map} +1 -1
- package/dist/client/chunks/{chart-config-line-CBF9Px9b.js → chart-config-line-DLkRs1Zr.js} +9 -8
- package/dist/client/chunks/chart-config-line-DLkRs1Zr.js.map +1 -0
- package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js → chart-config-pie-XrHim0C8.js} +2 -2
- package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js.map → chart-config-pie-XrHim0C8.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js → chart-config-radar-xNS6Juqc.js} +2 -2
- package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js.map → chart-config-radar-xNS6Juqc.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js → chart-config-radial-bar-ChUChsEe.js} +2 -2
- package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js.map → chart-config-radial-bar-ChUChsEe.js.map} +1 -1
- package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js → chart-config-tree-map-CnrJ7OC1.js} +2 -2
- package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js.map → chart-config-tree-map-CnrJ7OC1.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-BdMo3zVh.js → chart-data-table-Cxd0cdAl.js} +36 -36
- package/dist/client/chunks/{chart-data-table-BdMo3zVh.js.map → chart-data-table-Cxd0cdAl.js.map} +1 -1
- package/dist/client/chunks/{chart-funnel-BRyZS6ie.js → chart-funnel-71Kn4eeF.js} +2 -2
- package/dist/client/chunks/{chart-funnel-BRyZS6ie.js.map → chart-funnel-71Kn4eeF.js.map} +1 -1
- package/dist/client/chunks/{chart-gauge-DxgHlZKp.js → chart-gauge-BddS_9oS.js} +3 -3
- package/dist/client/chunks/{chart-gauge-DxgHlZKp.js.map → chart-gauge-BddS_9oS.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js → chart-heat-map-BQIsrn8m.js} +3 -3
- package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js.map → chart-heat-map-BQIsrn8m.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js → chart-kpi-delta-DndbqdZT.js} +3 -3
- package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js.map → chart-kpi-delta-DndbqdZT.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js → chart-kpi-number-DAbfoHMt.js} +5 -5
- package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js.map → chart-kpi-number-DAbfoHMt.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js → chart-kpi-text-D8oQgpxL.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js.map → chart-kpi-text-D8oQgpxL.js.map} +1 -1
- package/dist/client/chunks/{chart-line-IEgiF8Nv.js → chart-line-BNqjUowg.js} +3 -3
- package/dist/client/chunks/{chart-line-IEgiF8Nv.js.map → chart-line-BNqjUowg.js.map} +1 -1
- package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js → chart-markdown-DtgpU3xd.js} +2 -2
- package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js.map → chart-markdown-DtgpU3xd.js.map} +1 -1
- package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js → chart-measure-profile-D5nZMWlI.js} +3 -3
- package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js.map → chart-measure-profile-D5nZMWlI.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-BEB2sCXF.js → chart-pie-D8r9HCZ4.js} +3 -3
- package/dist/client/chunks/{chart-pie-BEB2sCXF.js.map → chart-pie-D8r9HCZ4.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-BbSbXKbP.js → chart-radar-R4PuCIWp.js} +3 -3
- package/dist/client/chunks/{chart-radar-BbSbXKbP.js.map → chart-radar-R4PuCIWp.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js → chart-radial-bar-hmrSFa6O.js} +3 -3
- package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js.map → chart-radial-bar-hmrSFa6O.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-DKnTIvSr.js → chart-sankey-CFXPybny.js} +2 -2
- package/dist/client/chunks/{chart-sankey-DKnTIvSr.js.map → chart-sankey-CFXPybny.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-CSWF6-lx.js → chart-scatter-CH82md0L.js} +3 -3
- package/dist/client/chunks/{chart-scatter-CSWF6-lx.js.map → chart-scatter-CH82md0L.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js → chart-sunburst-CTj95eEC.js} +3 -3
- package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js.map → chart-sunburst-CTj95eEC.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js → chart-tree-map-CmysE4bF.js} +3 -3
- package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js.map → chart-tree-map-CmysE4bF.js.map} +1 -1
- package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js → chart-waterfall-Bv1mPvlB.js} +3 -3
- package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js.map → chart-waterfall-Bv1mPvlB.js.map} +1 -1
- package/dist/client/chunks/{charts-core-CKpkoMCa.js → charts-core-BdEQgbqN.js} +2 -2
- package/dist/client/chunks/{charts-core-CKpkoMCa.js.map → charts-core-BdEQgbqN.js.map} +1 -1
- package/dist/client/chunks/charts-loader-DoLQqFXg.js +87 -0
- package/dist/client/chunks/{charts-loader-BTI0UPK4.js.map → charts-loader-DoLQqFXg.js.map} +1 -1
- package/dist/client/chunks/gapFilling-DKBRHcQL.js +391 -0
- package/dist/client/chunks/gapFilling-DKBRHcQL.js.map +1 -0
- package/dist/client/chunks/{nl-NL-kRjxedTf.js → nl-NL-DVZXf8U7.js} +20 -2
- package/dist/client/chunks/nl-NL-DVZXf8U7.js.map +1 -0
- package/dist/client/chunks/{schema-visualization-BbvL74Sf.js → schema-visualization-MlRrcJQH.js} +3 -3
- package/dist/client/chunks/{schema-visualization-BbvL74Sf.js.map → schema-visualization-MlRrcJQH.js.map} +1 -1
- package/dist/client/chunks/{useDirtyStateTracking-BfG1lX_3.js → useDirtyStateTracking-DSkxAJ29.js} +317 -292
- package/dist/client/chunks/useDirtyStateTracking-DSkxAJ29.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-CDFhgmpE.js → useExplainAI-DRCIVcbu.js} +4 -4
- package/dist/client/chunks/{useExplainAI-CDFhgmpE.js.map → useExplainAI-DRCIVcbu.js.map} +1 -1
- package/dist/client/chunks/utils-CToHkuhU.js.map +1 -1
- package/dist/client/chunks/{vendor-DeckzF1j.js → vendor-BfBpNmMa.js} +2 -2
- package/dist/client/chunks/{vendor-DeckzF1j.js.map → vendor-BfBpNmMa.js.map} +1 -1
- package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +5 -0
- package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
- package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
- package/dist/client/components.js +2 -2
- package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +7 -0
- package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +7 -0
- package/dist/client/hooks/useAnalysisQuery.d.ts +6 -1
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +193 -192
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/types.d.ts +3 -0
- package/dist/client/utils/filterUtils.d.ts +30 -0
- package/dist/client/utils/gapFilling.d.ts +52 -0
- package/dist/client/utils/index.d.ts +1 -0
- package/dist/client/utils/joinReachability.d.ts +1 -0
- package/dist/client/utils.js +9 -8
- package/dist/client/utils.js.map +1 -1
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +103 -103
- package/dist/server/ai/query-schema.d.ts +8 -3
- package/dist/server/builders/date-time-builder.d.ts +1 -1
- package/dist/server/builders/date-time-helpers.d.ts +2 -0
- package/dist/server/builders/filter-builder.d.ts +1 -1
- package/dist/server/builders/in-date-range-validation.d.ts +25 -0
- package/dist/server/chartConfigHelpers-BhME7ow_.cjs +1 -0
- package/dist/server/{chartConfigHelpers-BsnbxA2c.js → chartConfigHelpers-BsviVhEw.js} +27 -7
- package/dist/server/execution/result-post-processor.d.ts +4 -2
- package/dist/server/executor.d.ts +2 -0
- package/dist/server/gap-filler.d.ts +8 -43
- package/dist/server/index.cjs +49 -47
- package/dist/server/index.js +2114 -1955
- package/dist/server/types/core.d.ts +2 -0
- package/dist/server/types/cube.d.ts +12 -0
- package/dist/server/types/metadata.d.ts +5 -0
- package/dist/server/types/query.d.ts +2 -1
- package/package.json +2 -1
- package/dist/adapters/ActivityGridChart.config-BW77mjsu.cjs +0 -1
- package/dist/adapters/ActivityGridChart.config-DQRnTU6e.js +0 -2
- package/dist/adapters/AreaChart.config-DbvLVr-Y.cjs +0 -1
- package/dist/adapters/AreaChart.config-JbVNmary.js +0 -2
- package/dist/adapters/BarChart.config-Bkpwgqbk.js +0 -2
- package/dist/adapters/BarChart.config-jgDE3NUv.cjs +0 -1
- package/dist/adapters/BoxPlotChart.config-9wKKOZfN.cjs +0 -1
- package/dist/adapters/BoxPlotChart.config-Di99sPNJ.js +0 -2
- package/dist/adapters/BubbleChart.config-Cdg9nPFz.js +0 -2
- package/dist/adapters/BubbleChart.config-CwDXzdxC.cjs +0 -1
- package/dist/adapters/CandlestickChart.config-B45GmJYV.js +0 -2
- package/dist/adapters/CandlestickChart.config-C8BXzmbD.cjs +0 -1
- package/dist/adapters/DataTable.config-c-24M_qU.cjs +0 -1
- package/dist/adapters/DataTable.config-fic2OroS.js +0 -2
- package/dist/adapters/DotStripChart.config-BcNT3Les.cjs +0 -1
- package/dist/adapters/DotStripChart.config-Cqmgw5_z.js +0 -2
- package/dist/adapters/FunnelChart.config-D1E5zSay.cjs +0 -1
- package/dist/adapters/FunnelChart.config-DPjSoYex.js +0 -2
- package/dist/adapters/GaugeChart.config-BDcvnYln.js +0 -2
- package/dist/adapters/GaugeChart.config-DQnx37Jf.cjs +0 -1
- package/dist/adapters/HeatMapChart.config-BWd863ik.js +0 -2
- package/dist/adapters/HeatMapChart.config-HEbSm_Zt.cjs +0 -1
- package/dist/adapters/KpiDelta.config-Bj3kfmWv.js +0 -2
- package/dist/adapters/KpiDelta.config-CaLnl2w_.cjs +0 -1
- package/dist/adapters/KpiNumber.config-Da9HxGT8.cjs +0 -1
- package/dist/adapters/KpiNumber.config-n4SwHHlD.js +0 -2
- package/dist/adapters/KpiText.config-8VzcnlPF.cjs +0 -1
- package/dist/adapters/KpiText.config-CItv_gG6.js +0 -2
- package/dist/adapters/LineChart.config-DQ7nHYrr.js +0 -2
- package/dist/adapters/LineChart.config-_98RmRA_.cjs +0 -1
- package/dist/adapters/MarkdownChart.config-BpbqJDoz.cjs +0 -1
- package/dist/adapters/MarkdownChart.config-Dz7KZ621.js +0 -2
- package/dist/adapters/MeasureProfileChart.config-BTCTP7L0.js +0 -2
- package/dist/adapters/MeasureProfileChart.config-DzPxIxB5.cjs +0 -1
- package/dist/adapters/PieChart.config-BhjlnVFv.js +0 -2
- package/dist/adapters/PieChart.config-DJlGNsBY.cjs +0 -1
- package/dist/adapters/ProportionBarChart.config-Byp_8diR.cjs +0 -1
- package/dist/adapters/ProportionBarChart.config-RyjNhw3T.js +0 -2
- package/dist/adapters/RadarChart.config-BWdv4uyp.js +0 -2
- package/dist/adapters/RadarChart.config-kW4oIVi4.cjs +0 -1
- package/dist/adapters/RadialBarChart.config-CFYPoRQY.cjs +0 -1
- package/dist/adapters/RadialBarChart.config-D2-_-Z64.js +0 -2
- package/dist/adapters/RecordsTable.config-B7KFt3kd.cjs +0 -1
- package/dist/adapters/RecordsTable.config-S_aiXGKe.js +0 -2
- package/dist/adapters/RetentionCombinedChart.config-CVGWozL3.js +0 -2
- package/dist/adapters/RetentionCombinedChart.config-Cd0pTdHY.cjs +0 -1
- package/dist/adapters/RetentionHeatmap.config-BNqtWFjQ.js +0 -2
- package/dist/adapters/RetentionHeatmap.config-CMi1h_5M.cjs +0 -1
- package/dist/adapters/SankeyChart.config-COIfx3Ua.cjs +0 -1
- package/dist/adapters/SankeyChart.config-DIh4nEk2.js +0 -2
- package/dist/adapters/ScatterChart.config-CrSQhlT4.js +0 -2
- package/dist/adapters/ScatterChart.config-DRgg-HAm.cjs +0 -1
- package/dist/adapters/SunburstChart.config-08-ufQaK.cjs +0 -1
- package/dist/adapters/SunburstChart.config-DmNgAJrO.js +0 -2
- package/dist/adapters/TreeMapChart.config-7k2repRB.cjs +0 -1
- package/dist/adapters/TreeMapChart.config-C3vzB2dD.js +0 -2
- package/dist/adapters/WaterfallChart.config-AV2pHgrb.js +0 -2
- package/dist/adapters/WaterfallChart.config-USpcvapo.cjs +0 -1
- package/dist/adapters/chartConfigHelpers-BZMu_1EP.cjs +0 -1
- package/dist/adapters/compiler-BX6Ug_Uq.cjs +0 -166
- package/dist/adapters/handler-CfZt5W8b.cjs +0 -16
- package/dist/adapters/mcp-app-html-BNg78ecJ.js +0 -5
- package/dist/adapters/mcp-app-html-N18EJEvv.cjs +0 -1
- package/dist/adapters/utils-Du_UZbn5.cjs +0 -139
- package/dist/client/chunks/DashboardEditModal-P-HUNrcp.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-DBSxWIj8.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DGazwi4C.js.map +0 -1
- package/dist/client/chunks/chart-config-area-DsrZCIwF.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-BixSs43E.js.map +0 -1
- package/dist/client/chunks/chart-config-line-CBF9Px9b.js.map +0 -1
- package/dist/client/chunks/charts-loader-BTI0UPK4.js +0 -87
- package/dist/client/chunks/nl-NL-kRjxedTf.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-BfG1lX_3.js.map +0 -1
- package/dist/server/chartConfigHelpers-BZMu_1EP.cjs +0 -1
package/dist/adapters/utils.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-a2p2B6x8.cjs");exports.buildTransformedQuery=e.t,exports.calculateQueryComplexity=e.n,exports.formatCubeResponse=e.r,exports.formatErrorResponse=e.i,exports.formatMetaResponse=e.a,exports.formatSqlResponse=e.o,exports.formatSqlString=e.x,exports.generateRequestId=e.s,exports.getDatabaseType=e.c,exports.handleBatchRequest=e.l,exports.handleDiscover=e.p,exports.handleDryRun=e.u,exports.handleLoad=e.m,exports.handleSuggest=e.d,exports.handleValidate=e.f,exports.normalizeQueryFields=e.h;
|
package/dist/adapters/utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m, x as h } from "./utils-
|
|
1
|
+
import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m, x as h } from "./utils-BaxFceDq.js";
|
|
2
2
|
export { p as buildTransformedQuery, c as calculateQueryComplexity, d as formatCubeResponse, a as formatErrorResponse, e as formatMetaResponse, l as formatSqlResponse, h as formatSqlString, f as generateRequestId, t as getDatabaseType, o as handleBatchRequest, u as handleDiscover, m as handleDryRun, s as handleLoad, n as handleSuggest, r as handleValidate, i as normalizeQueryFields };
|
|
@@ -21,6 +21,11 @@ export declare function requiresMeasure({ measureCount }: ChartAvailabilityConte
|
|
|
21
21
|
export declare const targetDisplayOption: DisplayOptionConfig;
|
|
22
22
|
/** Connect-nulls toggle for line/area charts. */
|
|
23
23
|
export declare const connectNullsDisplayOption: DisplayOptionConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Gap-filling control for time-series charts (issue #1368). `auto` follows the
|
|
26
|
+
* query, then the cube time dimension's `fillMissingDates`, then fills.
|
|
27
|
+
*/
|
|
28
|
+
export declare const fillMissingDatesDisplayOption: DisplayOptionConfig;
|
|
24
29
|
/** Left Y-axis numeric format control (dual-axis charts). */
|
|
25
30
|
export declare const leftYAxisFormatDisplayOption: DisplayOptionConfig;
|
|
26
31
|
/** Right Y-axis numeric format control (dual-axis charts). */
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { DashboardFilter } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Find the dashboard filter the date control is bound to: the universal time
|
|
4
|
+
* filter when present, otherwise the first simple `inDateRange` filter.
|
|
5
|
+
*/
|
|
6
|
+
export declare function findDateControlFilter(filters: DashboardFilter[]): DashboardFilter | undefined;
|
|
2
7
|
export declare function useCompactFilterBar(dashboardFilters: DashboardFilter[], onDashboardFiltersChange: (filters: DashboardFilter[]) => void): {
|
|
3
8
|
localFilters: DashboardFilter[];
|
|
4
9
|
showCustomDropdown: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCubeLoadQuery, useFunnelQuery, useFlowQuery, useRetentionQuery } from '../../hooks/queries/index.js';
|
|
2
|
-
import { CubeQuery, MultiQueryConfig, ServerFunnelQuery } from '../../types.js';
|
|
2
|
+
import { ChartDisplayConfig, CubeQuery, MultiQueryConfig, ServerFunnelQuery } from '../../types.js';
|
|
3
3
|
import { FlowChartData, ServerFlowQuery } from '../../types/flow.js';
|
|
4
4
|
import { RetentionChartData, ServerRetentionQuery } from '../../types/retention.js';
|
|
5
5
|
interface RefreshOptions {
|
|
@@ -18,6 +18,8 @@ export interface UsePortletQueryResultsParams {
|
|
|
18
18
|
shouldSkipQuery: boolean;
|
|
19
19
|
eagerLoad: boolean;
|
|
20
20
|
isVisible: boolean;
|
|
21
|
+
/** Chart display config — its `fillMissingDates` drives client-side gap filling */
|
|
22
|
+
displayConfig?: ChartDisplayConfig;
|
|
21
23
|
}
|
|
22
24
|
export interface PortletQueryResults {
|
|
23
25
|
resultSet: ReturnType<typeof useCubeLoadQuery>['resultSet'];
|
|
@@ -17,6 +17,8 @@ interface PortletCardHeaderProps {
|
|
|
17
17
|
xlsExportAvailable: boolean;
|
|
18
18
|
exportInProgress: boolean;
|
|
19
19
|
showCacheBustIndicator: boolean;
|
|
20
|
+
/** Labels of mapped dashboard date filters that cannot narrow this portlet */
|
|
21
|
+
unreachableDateFilterLabels?: string[];
|
|
20
22
|
icons: CardIcons;
|
|
21
23
|
onRefresh: (options?: {
|
|
22
24
|
bustCache?: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CubeQuery, CubeResultSet } from '../../types.js';
|
|
2
2
|
import { QueryWarning } from '../../shared/types.js';
|
|
3
|
+
import { ChartGapFillOptions } from '../../utils/gapFilling.js';
|
|
3
4
|
/**
|
|
4
5
|
* Create a stable query key from a CubeQuery
|
|
5
6
|
* The key includes all query parameters to ensure proper caching
|
|
@@ -31,6 +32,12 @@ export interface UseCubeLoadQueryOptions {
|
|
|
31
32
|
* @default true
|
|
32
33
|
*/
|
|
33
34
|
keepPreviousData?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Fill missing time buckets for a chart (Cube.js-style, client-side). The
|
|
37
|
+
* server returns observed rows only; when set, the returned result set's rows
|
|
38
|
+
* are gap-filled per `ChartGapFillOptions`. Omit for raw rows.
|
|
39
|
+
*/
|
|
40
|
+
gapFill?: ChartGapFillOptions;
|
|
34
41
|
}
|
|
35
42
|
/** Options for the refetch function */
|
|
36
43
|
export interface RefetchOptions {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MultiQueryConfig, CubeResultSet } from '../../types.js';
|
|
2
|
+
import { ChartGapFillOptions } from '../../utils/gapFilling.js';
|
|
2
3
|
/**
|
|
3
4
|
* Create a stable query key for multi-query
|
|
4
5
|
*/
|
|
@@ -29,6 +30,12 @@ export interface UseMultiCubeLoadQueryOptions {
|
|
|
29
30
|
* @default true
|
|
30
31
|
*/
|
|
31
32
|
keepPreviousData?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Fill missing time buckets for a chart (Cube.js-style, client-side). When
|
|
35
|
+
* set, each query's rows are gap-filled per `ChartGapFillOptions` before
|
|
36
|
+
* merging. Omit for raw rows.
|
|
37
|
+
*/
|
|
38
|
+
gapFill?: ChartGapFillOptions;
|
|
32
39
|
}
|
|
33
40
|
export interface UseMultiCubeLoadQueryResult {
|
|
34
41
|
/** Merged data from all queries */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DebugDataEntry } from './queries/index.js';
|
|
2
|
-
import { CubeQuery, MultiQueryConfig, FunnelBindingKey, QueryMergeStrategy, AnalysisType } from '../types.js';
|
|
2
|
+
import { CubeQuery, MultiQueryConfig, FunnelBindingKey, QueryMergeStrategy, AnalysisType, ChartDisplayConfig } from '../types.js';
|
|
3
3
|
import { ExecutionStatus } from '../components/AnalysisBuilder/types.js';
|
|
4
4
|
import { ServerFunnelQuery } from '../types/funnel.js';
|
|
5
5
|
import { ServerFlowQuery, FlowChartData } from '../types/flow.js';
|
|
@@ -56,6 +56,11 @@ export interface UseAnalysisQueryOptions {
|
|
|
56
56
|
errors: string[];
|
|
57
57
|
warnings: string[];
|
|
58
58
|
} | null;
|
|
59
|
+
/**
|
|
60
|
+
* The chart's gap-filling setting (`displayConfig.fillMissingDates`). Results
|
|
61
|
+
* are gap-filled client-side per this setting, the query and the cube.
|
|
62
|
+
*/
|
|
63
|
+
fillMissingDates?: ChartDisplayConfig['fillMissingDates'];
|
|
59
64
|
}
|
|
60
65
|
export interface UseAnalysisQueryResult {
|
|
61
66
|
/** Query execution status */
|
|
@@ -71,6 +71,8 @@ export type { DashboardExportFile, DashboardImportResult, DashboardImportError,
|
|
|
71
71
|
export type { DashboardImportExportState, PendingDashboardImport, FailedDashboardImport, } from './hooks/dashboard/useDashboardImportExport.js';
|
|
72
72
|
export { compressAndEncode, decodeAndDecompress, generateShareUrl, parseShareUrl, isShareableSize } from './utils/shareUtils.js';
|
|
73
73
|
export { isMultiQueryData, mergeQueryResults, mergeResultsConcat, mergeResultsByKey, getCombinedFields, getQueryLabels, getQueryIndices, generateQueryLabel, validateMergeKey } from './utils/multiQueryUtils.js';
|
|
74
|
+
export { fillChartRows, withChartGapFilling } from './utils/gapFilling.js';
|
|
75
|
+
export type { ChartGapFillOptions } from './utils/gapFilling.js';
|
|
74
76
|
export { validateFunnelConfig, validateBindingKeyExists, validateStepQueries, validateBindingKeyForSteps, isMinimumFunnelConfigValid, getAvailableBindingKeyDimensions, getBindingKeyLabel, } from './utils/funnelValidation.js';
|
|
75
77
|
export { getBindingKeyField, getCubeNameFromQuery, formatDuration, transformServerFunnelResult, buildServerFunnelQuery, isFunnelData, buildFunnelConfigFromQueries, } from './utils/funnelExecution.js';
|
|
76
78
|
export { getThemeVariable, setThemeVariable, applyTheme, resetTheme, getTheme, setTheme, isDarkMode, watchThemeChanges, THEME_PRESETS } from './theme/index.js';
|
|
@@ -19,6 +19,8 @@ export interface CubeMetaDimension {
|
|
|
19
19
|
type: string;
|
|
20
20
|
/** Supported granularities for time dimensions (for time-based drill-down) */
|
|
21
21
|
granularities?: TimeGranularity[];
|
|
22
|
+
/** The cube time dimension's gap-filling default, when it declares one */
|
|
23
|
+
fillMissingDates?: boolean;
|
|
22
24
|
}
|
|
23
25
|
export interface CubeMetaField {
|
|
24
26
|
name: string;
|
|
@@ -146,6 +148,7 @@ export interface ChartDisplayConfig {
|
|
|
146
148
|
stacked?: boolean;
|
|
147
149
|
stackType?: 'none' | 'normal' | 'percent';
|
|
148
150
|
connectNulls?: boolean;
|
|
151
|
+
fillMissingDates?: boolean | 'auto';
|
|
149
152
|
showSummary?: boolean;
|
|
150
153
|
showPoints?: boolean;
|
|
151
154
|
showAllXLabels?: boolean;
|
|
@@ -43,6 +43,21 @@ export declare function shouldIncludeFilter(filter: Filter): boolean;
|
|
|
43
43
|
* @returns Array of filters that should be applied to the portlet
|
|
44
44
|
*/
|
|
45
45
|
export declare function getApplicableDashboardFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): Filter[];
|
|
46
|
+
/**
|
|
47
|
+
* Whether a dashboard filter is applied to a portlet as a regular filter.
|
|
48
|
+
*
|
|
49
|
+
* Non-universal filters always are. A universal time filter normally reaches a
|
|
50
|
+
* portlet through its timeDimensions, but when the portlet's mapping pins it to
|
|
51
|
+
* a field (a member override) it becomes a plain inDateRange filter on that
|
|
52
|
+
* field - which is how a KPI or breakdown without time dimensions is narrowed
|
|
53
|
+
* by the dashboard date control.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isAppliedAsRegularFilter(dashboardFilter: DashboardFilter, filterMapping: DashboardFilterMapping | undefined): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Dashboard filters that reach a portlet through its `filters` (as opposed to
|
|
58
|
+
* universal time filters applied to its timeDimensions).
|
|
59
|
+
*/
|
|
60
|
+
export declare function getRegularDashboardFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[] | undefined;
|
|
46
61
|
/**
|
|
47
62
|
* Filter format for merge operation:
|
|
48
63
|
* - 'server': Returns {and: [...]} or {or: [...]} format (for API queries)
|
|
@@ -94,6 +109,21 @@ type TimeDimension = {
|
|
|
94
109
|
granularity?: string;
|
|
95
110
|
dateRange?: string[] | string;
|
|
96
111
|
};
|
|
112
|
+
/**
|
|
113
|
+
* Universal time filters mapped to a portlet that apply through its
|
|
114
|
+
* timeDimensions - i.e. mapped without a member override.
|
|
115
|
+
*/
|
|
116
|
+
export declare function getTimeDimensionUniversalFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[];
|
|
117
|
+
/**
|
|
118
|
+
* Universal time filters mapped to a portlet that cannot narrow it: they apply
|
|
119
|
+
* only through timeDimensions, but some query in the portlet has none. Such a
|
|
120
|
+
* portlet would otherwise silently render all-time values while the dashboard
|
|
121
|
+
* date control shows a narrower range.
|
|
122
|
+
*
|
|
123
|
+
* Only plain and multi-query portlets are checked; funnel, flow and retention
|
|
124
|
+
* queries handle dashboard time filters separately.
|
|
125
|
+
*/
|
|
126
|
+
export declare function getUnreachableUniversalTimeFilters(query: string, dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[];
|
|
97
127
|
/**
|
|
98
128
|
* Apply universal time filters to a portlet's timeDimensions
|
|
99
129
|
* Universal time filters apply their dateRange to ALL time dimensions in the portlet
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CubeResultSet } from '../types.js';
|
|
2
|
+
/** A chart's gap-filling preference. */
|
|
3
|
+
export interface ChartGapFillOptions {
|
|
4
|
+
/** `true`/`false` force filling on/off; `'auto'` or unset defers to the query and cube. */
|
|
5
|
+
fillMissingDates?: boolean | 'auto';
|
|
6
|
+
}
|
|
7
|
+
/** A time dimension of the query a result came from. */
|
|
8
|
+
export interface ChartGapFillTimeDimension {
|
|
9
|
+
dimension: string;
|
|
10
|
+
granularity?: string;
|
|
11
|
+
dateRange?: string | string[];
|
|
12
|
+
fillMissingDates?: boolean;
|
|
13
|
+
compareDateRange?: readonly unknown[];
|
|
14
|
+
}
|
|
15
|
+
/** The parts of a query chart gap filling reads. */
|
|
16
|
+
export interface ChartGapFillQuery {
|
|
17
|
+
measures?: readonly string[];
|
|
18
|
+
dimensions?: readonly string[];
|
|
19
|
+
timeDimensions?: readonly ChartGapFillTimeDimension[];
|
|
20
|
+
filters?: readonly ChartGapFillFilter[];
|
|
21
|
+
fillMissingDatesValue?: number | null;
|
|
22
|
+
ungrouped?: boolean;
|
|
23
|
+
}
|
|
24
|
+
interface ChartGapFillFilter {
|
|
25
|
+
member?: string;
|
|
26
|
+
operator?: string;
|
|
27
|
+
values?: readonly unknown[];
|
|
28
|
+
dateRange?: string | string[];
|
|
29
|
+
and?: readonly ChartGapFillFilter[];
|
|
30
|
+
or?: readonly ChartGapFillFilter[];
|
|
31
|
+
}
|
|
32
|
+
interface TimeDimensionAnnotation {
|
|
33
|
+
fillMissingDates?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Fill missing time buckets in result rows for a chart.
|
|
37
|
+
*
|
|
38
|
+
* Comparison (`compareDateRange`) dimensions are left alone — the server fills
|
|
39
|
+
* each period already and the rows carry period metadata. Ungrouped queries are
|
|
40
|
+
* never filled.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fillChartRows(rows: Record<string, unknown>[], query: ChartGapFillQuery, annotation: {
|
|
43
|
+
timeDimensions?: Record<string, TimeDimensionAnnotation>;
|
|
44
|
+
} | undefined, options?: ChartGapFillOptions): Record<string, unknown>[];
|
|
45
|
+
/**
|
|
46
|
+
* Wrap a result set so its rows are gap-filled for a chart. The underlying
|
|
47
|
+
* result set (and the query cache holding it) stays raw, so changing the chart
|
|
48
|
+
* setting never refetches. Returns the result set unchanged when it does not
|
|
49
|
+
* carry the query it came from.
|
|
50
|
+
*/
|
|
51
|
+
export declare function withChartGapFilling(resultSet: CubeResultSet, options?: ChartGapFillOptions): CubeResultSet;
|
|
52
|
+
export {};
|
|
@@ -6,6 +6,7 @@ export * from './periodUtils.js';
|
|
|
6
6
|
export * from './pivotUtils.js';
|
|
7
7
|
export * from './syntaxHighlighting.js';
|
|
8
8
|
export * from './comparisonUtils.js';
|
|
9
|
+
export * from './gapFilling.js';
|
|
9
10
|
export { captureThumbnail, isThumbnailCaptureAvailable } from './thumbnail.js';
|
|
10
11
|
export { exportPortletToXlsx, isExportAvailable } from './exportXlsx.js';
|
|
11
12
|
export { createDashboardExport, serializeDashboardExport, parseDashboardExport, readDashboardExportFile, downloadDashboardExport, dashboardExportFilename, normalizeDashboardConfigForExport, } from './dashboardExport.js';
|
|
@@ -44,8 +44,13 @@ export declare const QUERY_PARAMS_SCHEMA: {
|
|
|
44
44
|
};
|
|
45
45
|
readonly values: {
|
|
46
46
|
readonly type: "array";
|
|
47
|
-
readonly items: {
|
|
48
|
-
|
|
47
|
+
readonly items: {
|
|
48
|
+
readonly type: readonly ["string", "number", "boolean"];
|
|
49
|
+
};
|
|
50
|
+
readonly description: "Filter values. Omit for set/notSet/isEmpty/isNotEmpty. inDateRange accepts ONLY a flat two-date array (strings or finite numeric timestamps): [\"2024-01-01\", \"2024-03-31\"], or a one-item array holding one relative expression or one date (that whole day): [\"last 3 months\"], [\"2024-01-15\"]. Never nest the two-date array.";
|
|
51
|
+
};
|
|
52
|
+
readonly dateRange: {
|
|
53
|
+
readonly description: "inDateRange only: alternative to values. A supported relative string, one absolute date string, or flat two-date array. Prefer values: [] when using dateRange; if values are also given they must hold the same range.";
|
|
49
54
|
};
|
|
50
55
|
};
|
|
51
56
|
readonly required: readonly ["member", "operator"];
|
|
@@ -71,7 +76,7 @@ export declare const QUERY_PARAMS_SCHEMA: {
|
|
|
71
76
|
};
|
|
72
77
|
readonly fillMissingDates: {
|
|
73
78
|
readonly type: "boolean";
|
|
74
|
-
readonly description: "Fill gaps in time series with fillMissingDatesValue
|
|
79
|
+
readonly description: "Fill gaps in time series with fillMissingDatesValue. Default: off (observed rows only) unless the cube time dimension enables it. Requires granularity + dateRange.";
|
|
75
80
|
};
|
|
76
81
|
readonly compareDateRange: {
|
|
77
82
|
readonly type: "array";
|
|
@@ -11,7 +11,7 @@ export declare class DateTimeBuilder {
|
|
|
11
11
|
/**
|
|
12
12
|
* Build date range condition for time dimensions
|
|
13
13
|
*/
|
|
14
|
-
buildDateRangeCondition(fieldExpr: AnyColumn | SQL, dateRange:
|
|
14
|
+
buildDateRangeCondition(fieldExpr: AnyColumn | SQL, dateRange: unknown): SQL | null;
|
|
15
15
|
private rangeBetween;
|
|
16
16
|
/** Shift a normalized end value to end-of-day when its source was a date-only string. */
|
|
17
17
|
private endOfDayValue;
|
|
@@ -17,6 +17,8 @@ export declare function dateToEngineValue(databaseAdapter: DatabaseAdapter, date
|
|
|
17
17
|
export declare function engineValueToDate(databaseAdapter: DatabaseAdapter, value: string | number): Date;
|
|
18
18
|
/** Detect a date-only string (YYYY-MM-DD). */
|
|
19
19
|
export declare function isDateOnlyString(value: unknown): value is string;
|
|
20
|
+
/** Parse a string/number/Date into a validated Date, or null if invalid. */
|
|
21
|
+
export declare function toValidDate(value: unknown): Date | null;
|
|
20
22
|
/**
|
|
21
23
|
* Normalize a date value to the engine's wire format, or null when falsy or
|
|
22
24
|
* unparseable.
|
|
@@ -9,7 +9,7 @@ export declare class FilterBuilder {
|
|
|
9
9
|
/**
|
|
10
10
|
* Build filter condition using Drizzle operators
|
|
11
11
|
*/
|
|
12
|
-
buildFilterCondition(fieldExpr: AnyColumn | SQL, operator: FilterOperator, values: any[], field?: any,
|
|
12
|
+
buildFilterCondition(fieldExpr: AnyColumn | SQL, operator: FilterOperator, values: any[], field?: any, dateRangeInput?: string | string[] | null): SQL | null;
|
|
13
13
|
/**
|
|
14
14
|
* Build a logical filter (AND/OR) - used by executor for cache preloading
|
|
15
15
|
* This handles nested filter structures and builds combined SQL
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type DateRangeReason = 'missing' | 'shape' | 'invalidDate' | 'invalidRelative' | 'reverseOrder' | 'conflict';
|
|
2
|
+
export type DateRangeValidation = {
|
|
3
|
+
valid: true;
|
|
4
|
+
} | {
|
|
5
|
+
valid: false;
|
|
6
|
+
reason: DateRangeReason;
|
|
7
|
+
input: 'values' | 'dateRange';
|
|
8
|
+
value?: string;
|
|
9
|
+
};
|
|
10
|
+
/** Validate an exact absolute tuple without accepting JS Date rollover or nested arrays. */
|
|
11
|
+
export declare function validateDateTuple(value: unknown): DateRangeReason | null;
|
|
12
|
+
/**
|
|
13
|
+
* Validate a standalone date range (`filter.dateRange` or `timeDimensions[].dateRange`):
|
|
14
|
+
* a relative expression, one absolute day, or a flat `[start, end]` pair.
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateDateRangeInput(dateRange: unknown): DateRangeValidation;
|
|
17
|
+
export declare function validateInDateRange(values: unknown, dateRange?: unknown): DateRangeValidation;
|
|
18
|
+
/**
|
|
19
|
+
* Diagnostic for SQL builders, which only see a field expression. Queries are
|
|
20
|
+
* validated before they reach the builders, so this only surfaces for callers
|
|
21
|
+
* that bypass validation.
|
|
22
|
+
*/
|
|
23
|
+
export declare function dateRangeInputDiagnostic(result: DateRangeValidation): string;
|
|
24
|
+
export declare function timeDimensionDateRangeDiagnostic(member: string, result: DateRangeValidation): string;
|
|
25
|
+
export declare function inDateRangeDiagnostic(member: string, result: DateRangeValidation): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SemanticQuery } from '../types/index.js';
|
|
1
|
+
import { Cube, SemanticQuery } from '../types/index.js';
|
|
2
2
|
import { DatabaseAdapter } from '../adapters/base-adapter.js';
|
|
3
3
|
/**
|
|
4
4
|
* Normalise time-dimension values in result rows and apply gap filling.
|
|
@@ -6,5 +6,7 @@ import { DatabaseAdapter } from '../adapters/base-adapter.js';
|
|
|
6
6
|
* @param data Raw rows from the database executor
|
|
7
7
|
* @param query The semantic query (for timeDimensions + measures)
|
|
8
8
|
* @param databaseAdapter Adapter used to convert engine-specific date results
|
|
9
|
+
* @param cubes Cube definitions, for each time dimension's `fillMissingDates`
|
|
10
|
+
* @param fillByDefault Gap-fill time dimensions neither the query nor the cube configures
|
|
9
11
|
*/
|
|
10
|
-
export declare function postProcessResultRows(data: unknown, query: SemanticQuery, databaseAdapter: DatabaseAdapter): Record<string, unknown>[];
|
|
12
|
+
export declare function postProcessResultRows(data: unknown, query: SemanticQuery, databaseAdapter: DatabaseAdapter, cubes?: Map<string, Cube>, fillByDefault?: boolean): Record<string, unknown>[];
|
|
@@ -93,6 +93,8 @@ export declare class QueryExecutor {
|
|
|
93
93
|
* @param cacheKey - When provided (and a cache provider is configured), the
|
|
94
94
|
* fresh result is written to the cache. Pass `undefined` to skip caching
|
|
95
95
|
* (e.g. comparison period sub-queries cache at the comparison level).
|
|
96
|
+
* @param fillByDefault - Gap-fill time dimensions that neither the query nor
|
|
97
|
+
* the cube configures. Only comparison period sub-queries pass `true`.
|
|
96
98
|
*/
|
|
97
99
|
private executeStandardQuery;
|
|
98
100
|
/**
|
|
@@ -1,48 +1,13 @@
|
|
|
1
|
+
import { Cube } from './types/cube.js';
|
|
1
2
|
import { SemanticQuery } from './types/query.js';
|
|
2
|
-
|
|
3
|
+
export { generateTimeBuckets, fillTimeSeriesGaps, parseDateRange, MAX_GAP_FILL_BUCKETS, type GapFillerConfig } from '../shared/gap-filler.js';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
* filling is skipped entirely (data is returned unmodified) to avoid both
|
|
6
|
-
* runaway memory use and silent truncation of real rows.
|
|
7
|
-
*/
|
|
8
|
-
export declare const MAX_GAP_FILL_BUCKETS = 10000;
|
|
9
|
-
export interface GapFillerConfig {
|
|
10
|
-
/** The time dimension key (e.g., 'Sales.date') */
|
|
11
|
-
timeDimensionKey: string;
|
|
12
|
-
/** Time granularity for bucket generation */
|
|
13
|
-
granularity: TimeGranularity;
|
|
14
|
-
/** Date range [start, end] */
|
|
15
|
-
dateRange: [Date, Date];
|
|
16
|
-
/** Value to fill for missing measures (default: 0) */
|
|
17
|
-
fillValue: number | null;
|
|
18
|
-
/** List of measure keys in the data */
|
|
19
|
-
measures: string[];
|
|
20
|
-
/** List of dimension keys in the data (excluding time dimensions) */
|
|
21
|
-
dimensions: string[];
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Generate all time buckets for a given date range and granularity
|
|
25
|
-
*/
|
|
26
|
-
export declare function generateTimeBuckets(startDate: Date, endDate: Date, granularity: TimeGranularity): Date[];
|
|
27
|
-
/**
|
|
28
|
-
* Fill time series gaps in query result data
|
|
5
|
+
* Apply server-side gap filling to query result rows.
|
|
29
6
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @returns Data with gaps filled
|
|
33
|
-
*/
|
|
34
|
-
export declare function fillTimeSeriesGaps(data: Record<string, unknown>[], config: GapFillerConfig): Record<string, unknown>[];
|
|
35
|
-
/**
|
|
36
|
-
* Parse date range from query time dimension
|
|
37
|
-
* Handles both array format ['2024-01-01', '2024-01-31'] and string format
|
|
38
|
-
*/
|
|
39
|
-
export declare function parseDateRange(dateRange: string | string[] | undefined): [Date, Date] | null;
|
|
40
|
-
/**
|
|
41
|
-
* Apply gap filling to query result data based on query configuration
|
|
7
|
+
* Precedence per time dimension: the query's `fillMissingDates`, then the cube
|
|
8
|
+
* dimension's, then `fillByDefault`. Ungrouped queries are never filled.
|
|
42
9
|
*
|
|
43
|
-
* @param
|
|
44
|
-
*
|
|
45
|
-
* @param measures - List of measure names in the result
|
|
46
|
-
* @returns Data with gaps filled (if applicable)
|
|
10
|
+
* @param fillByDefault - Fill when neither the query nor the cube says. Only
|
|
11
|
+
* comparison-period sub-queries pass `true`, to keep periods aligned.
|
|
47
12
|
*/
|
|
48
|
-
export declare function
|
|
13
|
+
export declare function applyServerGapFilling(data: Record<string, unknown>[], query: SemanticQuery, cubes?: Map<string, Cube>, fillByDefault?: boolean): Record<string, unknown>[];
|
|
@@ -165,6 +165,8 @@ export interface TimeDimensionAnnotation {
|
|
|
165
165
|
shortTitle: string;
|
|
166
166
|
type: string;
|
|
167
167
|
granularity?: TimeGranularity;
|
|
168
|
+
/** The cube time dimension's `fillMissingDates`, when it declares one */
|
|
169
|
+
fillMissingDates?: boolean;
|
|
168
170
|
}
|
|
169
171
|
/**
|
|
170
172
|
* Type enums and constants
|
|
@@ -191,6 +191,18 @@ export interface Dimension {
|
|
|
191
191
|
* @example ['year', 'quarter', 'month', 'day'] for a custom subset
|
|
192
192
|
*/
|
|
193
193
|
granularities?: TimeGranularity[];
|
|
194
|
+
/**
|
|
195
|
+
* Whether missing time buckets are filled for this time dimension when a
|
|
196
|
+
* query or chart does not say. Only applies when type is 'time'.
|
|
197
|
+
*
|
|
198
|
+
* - Server: a query that omits `fillMissingDates` is filled only when this is
|
|
199
|
+
* `true`. Unset means observed rows only (the Cube.js default).
|
|
200
|
+
* - Charts: fill gaps by default, like Cube.js. Set `false` where a missing
|
|
201
|
+
* bucket means "no data" rather than zero, e.g. daily snapshot tables.
|
|
202
|
+
*
|
|
203
|
+
* A query's or chart's own `fillMissingDates` always wins.
|
|
204
|
+
*/
|
|
205
|
+
fillMissingDates?: boolean;
|
|
194
206
|
}
|
|
195
207
|
/**
|
|
196
208
|
* Measure definition
|
|
@@ -77,6 +77,11 @@ export interface DimensionMetadata {
|
|
|
77
77
|
* Used for time-based drill-down (year -> quarter -> month -> week -> day)
|
|
78
78
|
*/
|
|
79
79
|
granularities?: TimeGranularity[];
|
|
80
|
+
/**
|
|
81
|
+
* The time dimension's `fillMissingDates` default, when the cube declares one.
|
|
82
|
+
* Charts use it to decide whether to fill missing buckets.
|
|
83
|
+
*/
|
|
84
|
+
fillMissingDates?: boolean;
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
82
87
|
* Hierarchy metadata for structured drill-down paths
|
|
@@ -135,7 +135,8 @@ export interface TimeDimension {
|
|
|
135
135
|
/**
|
|
136
136
|
* Fill missing dates in time series with the fill value.
|
|
137
137
|
* Requires both granularity and dateRange to be set.
|
|
138
|
-
* Default:
|
|
138
|
+
* Default: the cube time dimension's `fillMissingDates`, else false — the
|
|
139
|
+
* server returns observed rows only and charts fill gaps client-side.
|
|
139
140
|
*/
|
|
140
141
|
fillMissingDates?: boolean;
|
|
141
142
|
/**
|
|
@@ -21,6 +21,11 @@ export declare function requiresMeasure({ measureCount }: ChartAvailabilityConte
|
|
|
21
21
|
export declare const targetDisplayOption: DisplayOptionConfig;
|
|
22
22
|
/** Connect-nulls toggle for line/area charts. */
|
|
23
23
|
export declare const connectNullsDisplayOption: DisplayOptionConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Gap-filling control for time-series charts (issue #1368). `auto` follows the
|
|
26
|
+
* query, then the cube time dimension's `fillMissingDates`, then fills.
|
|
27
|
+
*/
|
|
28
|
+
export declare const fillMissingDatesDisplayOption: DisplayOptionConfig;
|
|
24
29
|
/** Left Y-axis numeric format control (dual-axis charts). */
|
|
25
30
|
export declare const leftYAxisFormatDisplayOption: DisplayOptionConfig;
|
|
26
31
|
/** Right Y-axis numeric format control (dual-axis charts). */
|
package/dist/client/charts.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { dt as e, ft as t, gt as n, ht as r, lt as i, mt as a, pt as o, t as s, ut as c } from "./chunks/chart-data-table-
|
|
2
|
-
import { d as l, l as u, s as d, u as f } from "./chunks/chart-activity-grid-
|
|
3
|
-
import { t as p } from "./chunks/chart-funnel-
|
|
4
|
-
import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-
|
|
5
|
-
import { t as x } from "./chunks/chart-area-
|
|
1
|
+
import { dt as e, ft as t, gt as n, ht as r, lt as i, mt as a, pt as o, t as s, ut as c } from "./chunks/chart-data-table-Cxd0cdAl.js";
|
|
2
|
+
import { d as l, l as u, s as d, u as f } from "./chunks/chart-activity-grid-Ly_-2B-f.js";
|
|
3
|
+
import { t as p } from "./chunks/chart-funnel-71Kn4eeF.js";
|
|
4
|
+
import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-DoLQqFXg.js";
|
|
5
|
+
import { t as x } from "./chunks/chart-area-D3l-71Wy.js";
|
|
6
6
|
import { i as S } from "./chunks/utils-CToHkuhU.js";
|
|
7
|
-
import { t as C } from "./chunks/chart-bar-
|
|
8
|
-
import { t as w } from "./chunks/chart-line-
|
|
9
|
-
import { t as T } from "./chunks/chart-pie-
|
|
10
|
-
import { t as E } from "./chunks/chart-scatter-
|
|
11
|
-
import { t as D } from "./chunks/chart-radar-
|
|
12
|
-
import { t as O } from "./chunks/chart-radial-bar-
|
|
13
|
-
import { t as k } from "./chunks/chart-tree-map-
|
|
7
|
+
import { t as C } from "./chunks/chart-bar-BaTyQOqs.js";
|
|
8
|
+
import { t as w } from "./chunks/chart-line-BNqjUowg.js";
|
|
9
|
+
import { t as T } from "./chunks/chart-pie-D8r9HCZ4.js";
|
|
10
|
+
import { t as E } from "./chunks/chart-scatter-CH82md0L.js";
|
|
11
|
+
import { t as D } from "./chunks/chart-radar-R4PuCIWp.js";
|
|
12
|
+
import { t as O } from "./chunks/chart-radial-bar-hmrSFa6O.js";
|
|
13
|
+
import { t as k } from "./chunks/chart-tree-map-CmysE4bF.js";
|
|
14
14
|
export { d as CHART_COLORS, u as CHART_MARGINS, s as DataTable, p as FunnelChart, b as LazyChart, f as NEGATIVE_COLOR, l as POSITIVE_COLOR, x as RechartsAreaChart, C as RechartsBarChart, w as RechartsLineChart, T as RechartsPieChart, D as RechartsRadarChart, O as RechartsRadialBarChart, E as RechartsScatterChart, k as RechartsTreeMapChart, i as clearChartConfigCache, S as formatChartData, g as getAvailableChartTypes, c as getChartConfigAsync, e as getChartConfigSync, v as getUnavailableChartTypes, t as isChartConfigLoaded, h as isChartTypeAvailable, m as isValidChartType, o as loadAllChartConfigs, _ as preloadChart, a as preloadChartConfig, r as preloadChartConfigs, y as preloadCharts, n as useChartConfig };
|