drizzle-cube 0.3.13 → 0.3.15
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/{compiler-DTOU8IsK.js → compiler-DdcGVWIl.js} +7429 -4165
- package/dist/adapters/compiler-mAJDpIQx.cjs +214 -0
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.d.ts +1 -1
- package/dist/adapters/express/index.js +1 -1
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.d.ts +1 -1
- package/dist/adapters/fastify/index.js +1 -1
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.d.ts +1 -1
- package/dist/adapters/hono/index.js +1 -1
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +1 -1
- package/dist/adapters/nextjs/index.js +1 -1
- package/dist/adapters/utils.d.ts +29 -0
- package/dist/client/adapters/index.d.ts +2 -0
- package/dist/client/adapters/retentionModeAdapter.d.ts +3 -0
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/RetentionCombinedChart-CqMAkdcR.js +256 -0
- package/dist/client/chunks/RetentionCombinedChart-CqMAkdcR.js.map +1 -0
- package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js +47 -0
- package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js.map +1 -0
- package/dist/client/chunks/RetentionHeatmap-Bofadstm.js +178 -0
- package/dist/client/chunks/RetentionHeatmap-Bofadstm.js.map +1 -0
- package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js +28 -0
- package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js.map +1 -0
- package/dist/client/chunks/analysis-builder-D0MIKiKS.js +6939 -0
- package/dist/client/chunks/analysis-builder-D0MIKiKS.js.map +1 -0
- package/dist/client/chunks/analysis-builder-shared-gS0TDC6Y.js +2779 -0
- package/dist/client/chunks/analysis-builder-shared-gS0TDC6Y.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js → chart-activity-grid-B37W8fcE.js} +11 -11
- package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js.map → chart-activity-grid-B37W8fcE.js.map} +1 -1
- package/dist/client/chunks/{chart-area-cPrJnhLj.js → chart-area-DZcxSVB1.js} +2 -2
- package/dist/client/chunks/{chart-area-cPrJnhLj.js.map → chart-area-DZcxSVB1.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-D68HFPpa.js → chart-bar-BFAdRj-E.js} +2 -2
- package/dist/client/chunks/{chart-bar-D68HFPpa.js.map → chart-bar-BFAdRj-E.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-CquyYfNO.js → chart-bubble-eoCCbl3h.js} +2 -2
- package/dist/client/chunks/{chart-bubble-CquyYfNO.js.map → chart-bubble-eoCCbl3h.js.map} +1 -1
- package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js → chart-config-activity-grid-BBSNCbkb.js} +2 -2
- package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js.map → chart-config-activity-grid-BBSNCbkb.js.map} +1 -1
- package/dist/client/chunks/{chart-config-area-OApsRaYC.js → chart-config-area-CyyJOO2T.js} +2 -2
- package/dist/client/chunks/{chart-config-area-OApsRaYC.js.map → chart-config-area-CyyJOO2T.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js → chart-config-bar-BJKGnfLt.js} +2 -2
- package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js.map → chart-config-bar-BJKGnfLt.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js → chart-config-bubble-CuSsCHZ4.js} +2 -2
- package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js.map → chart-config-bubble-CuSsCHZ4.js.map} +1 -1
- package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js → chart-config-data-table-BhgqwoqT.js} +2 -2
- package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js.map → chart-config-data-table-BhgqwoqT.js.map} +1 -1
- package/dist/client/chunks/{chart-config-funnel-f17Livgr.js → chart-config-funnel-BlSQYng0.js} +4 -4
- package/dist/client/chunks/{chart-config-funnel-f17Livgr.js.map → chart-config-funnel-BlSQYng0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js → chart-config-heat-map-DHQGFZhX.js} +2 -2
- package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js.map → chart-config-heat-map-DHQGFZhX.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js → chart-config-kpi-delta-yTA5ug_l.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js.map → chart-config-kpi-delta-yTA5ug_l.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js → chart-config-kpi-number-nVAwDXzq.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js.map → chart-config-kpi-number-nVAwDXzq.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js → chart-config-kpi-text-DZjqsx-b.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js.map → chart-config-kpi-text-DZjqsx-b.js.map} +1 -1
- package/dist/client/chunks/{chart-config-line-BnLlRUQE.js → chart-config-line-DR0ThxZy.js} +2 -2
- package/dist/client/chunks/{chart-config-line-BnLlRUQE.js.map → chart-config-line-DR0ThxZy.js.map} +1 -1
- package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js → chart-config-markdown-DZxdGNVQ.js} +2 -2
- package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js.map → chart-config-markdown-DZxdGNVQ.js.map} +1 -1
- package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js → chart-config-pie-BM5lgH-w.js} +2 -2
- package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js.map → chart-config-pie-BM5lgH-w.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radar-CXa0354h.js → chart-config-radar-BBAVIF0S.js} +2 -2
- package/dist/client/chunks/{chart-config-radar-CXa0354h.js.map → chart-config-radar-BBAVIF0S.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js → chart-config-radial-bar-CTwjDRnB.js} +2 -2
- package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js.map → chart-config-radial-bar-CTwjDRnB.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js → chart-config-sankey-CNAgsMQ4.js} +2 -2
- package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js.map → chart-config-sankey-CNAgsMQ4.js.map} +1 -1
- package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js → chart-config-scatter-CWvN2E-X.js} +2 -2
- package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js.map → chart-config-scatter-CWvN2E-X.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js → chart-config-sunburst-W_SKwaj0.js} +4 -4
- package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js.map → chart-config-sunburst-W_SKwaj0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js → chart-config-tree-map-CLmRvvMR.js} +2 -2
- package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js.map → chart-config-tree-map-CLmRvvMR.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-D4WDqbM0.js → chart-data-table-kudRwZxJ.js} +4 -4
- package/dist/client/chunks/{chart-data-table-D4WDqbM0.js.map → chart-data-table-kudRwZxJ.js.map} +1 -1
- package/dist/client/chunks/{chart-funnel-Csdn4FbN.js → chart-funnel-CA0XJkfh.js} +2 -2
- package/dist/client/chunks/{chart-funnel-Csdn4FbN.js.map → chart-funnel-CA0XJkfh.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-v1afxnjq.js → chart-heat-map-DUy9_pWM.js} +2 -2
- package/dist/client/chunks/{chart-heat-map-v1afxnjq.js.map → chart-heat-map-DUy9_pWM.js.map} +1 -1
- package/dist/client/chunks/chart-kpi-delta-MIGGCpkG.js +351 -0
- package/dist/client/chunks/chart-kpi-delta-MIGGCpkG.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-DM0Brd91.js +473 -0
- package/dist/client/chunks/chart-kpi-number-DM0Brd91.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js → chart-kpi-text-BAb28V4X.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js.map → chart-kpi-text-BAb28V4X.js.map} +1 -1
- package/dist/client/chunks/{chart-line-DqqE7ky9.js → chart-line-e3h8sa1R.js} +5 -5
- package/dist/client/chunks/{chart-line-DqqE7ky9.js.map → chart-line-e3h8sa1R.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-B5WBzIRH.js → chart-pie-CFoHYqDB.js} +2 -2
- package/dist/client/chunks/{chart-pie-B5WBzIRH.js.map → chart-pie-CFoHYqDB.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-DL_dvhA-.js → chart-radar-CPPwkfxj.js} +2 -2
- package/dist/client/chunks/{chart-radar-DL_dvhA-.js.map → chart-radar-CPPwkfxj.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js → chart-radial-bar-BdEOM-P1.js} +2 -2
- package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js.map → chart-radial-bar-BdEOM-P1.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-C_bgIfg-.js → chart-sankey-Bbady-8g.js} +2 -2
- package/dist/client/chunks/{chart-sankey-C_bgIfg-.js.map → chart-sankey-Bbady-8g.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-DjmJRlK0.js → chart-scatter-JFu0Pv3a.js} +15 -15
- package/dist/client/chunks/{chart-scatter-DjmJRlK0.js.map → chart-scatter-JFu0Pv3a.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-CbMEnaes.js → chart-sunburst-sayxze15.js} +2 -2
- package/dist/client/chunks/{chart-sunburst-CbMEnaes.js.map → chart-sunburst-sayxze15.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js → chart-tree-map-Ks2xev8b.js} +30 -30
- package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js.map → chart-tree-map-Ks2xev8b.js.map} +1 -1
- package/dist/client/chunks/chartConfigRegistry-BumUIPw4.js +44 -0
- package/dist/client/chunks/{chartConfigRegistry-CiOq-PqX.js.map → chartConfigRegistry-BumUIPw4.js.map} +1 -1
- package/dist/client/chunks/charts-_yZ9gBJU.js +230 -0
- package/dist/client/chunks/charts-_yZ9gBJU.js.map +1 -0
- package/dist/client/chunks/{charts-core-CXrhEEVF.js → charts-core-Bzu9PzMd.js} +10 -10
- package/dist/client/chunks/{charts-core-CXrhEEVF.js.map → charts-core-Bzu9PzMd.js.map} +1 -1
- package/dist/client/chunks/{charts-loader-BtsnUO4Q.js → charts-loader-cMtx4zHx.js} +30 -28
- package/dist/client/chunks/charts-loader-cMtx4zHx.js.map +1 -0
- package/dist/client/chunks/{components-BDrlf9Er.js → components-DQuPThfA.js} +3575 -3208
- package/dist/client/chunks/components-DQuPThfA.js.map +1 -0
- package/dist/client/chunks/{core-B8zw0qRf.js → core-DwOXVb87.js} +2 -2
- package/dist/client/chunks/{core-B8zw0qRf.js.map → core-DwOXVb87.js.map} +1 -1
- package/dist/client/chunks/hooks-DPRv1Xhb.js +150 -0
- package/dist/client/chunks/{hooks-B8Zw5PfL.js.map → hooks-DPRv1Xhb.js.map} +1 -1
- package/dist/client/chunks/{icons-NzFHtqeM.js → icons-DRreo6m8.js} +128 -112
- package/dist/client/chunks/{icons-NzFHtqeM.js.map → icons-DRreo6m8.js.map} +1 -1
- package/dist/client/chunks/{providers-CqCiJTEj.js → providers-BW8D7Wso.js} +2 -2
- package/dist/client/chunks/{providers-CqCiJTEj.js.map → providers-BW8D7Wso.js.map} +1 -1
- package/dist/client/chunks/retention-CzCo8262.js +120 -0
- package/dist/client/chunks/retention-CzCo8262.js.map +1 -0
- package/dist/client/chunks/{useDirtyStateTracking-C_mitVwh.js → useDirtyStateTracking-Yu_qQXb-.js} +101 -99
- package/dist/client/chunks/useDirtyStateTracking-Yu_qQXb-.js.map +1 -0
- package/dist/client/chunks/{vendor-DzzxS7Ay.js → vendor-BSkQZgtm.js} +548 -540
- package/dist/client/chunks/vendor-BSkQZgtm.js.map +1 -0
- package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +3 -1
- package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +36 -0
- package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +71 -0
- package/dist/client/components/AnalysisBuilder/types.d.ts +99 -0
- package/dist/client/components/DebugModal.d.ts +2 -1
- package/dist/client/components/charts/RetentionCombinedChart.config.d.ts +2 -0
- package/dist/client/components/charts/RetentionCombinedChart.d.ts +14 -0
- package/dist/client/components/charts/RetentionHeatmap.config.d.ts +2 -0
- package/dist/client/components/charts/RetentionHeatmap.d.ts +7 -0
- package/dist/client/components.js +2 -2
- package/dist/client/hooks/queries/index.d.ts +2 -1
- package/dist/client/hooks/queries/useDryRunQuery.d.ts +26 -0
- package/dist/client/hooks/queries/useExplainQuery.d.ts +3 -1
- package/dist/client/hooks/queries/useFlowQuery.d.ts +5 -0
- package/dist/client/hooks/queries/useRetentionQuery.d.ts +67 -0
- package/dist/client/hooks/useAnalysisBuilderHook.d.ts +61 -0
- package/dist/client/hooks/useAnalysisQueryExecution.d.ts +42 -1
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/customIcons.d.ts +7 -0
- package/dist/client/icons/types.d.ts +1 -0
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +11 -11
- package/dist/client/providers.js +1 -1
- package/dist/client/stores/analysisBuilderStore.d.ts +86 -1
- package/dist/client/stores/dashboardStore.d.ts +2 -1
- package/dist/client/stores/slices/index.d.ts +2 -0
- package/dist/client/stores/slices/retentionSlice.d.ts +66 -0
- package/dist/client/styles.css +1 -1
- package/dist/client/types/analysisConfig.d.ts +29 -4
- package/dist/client/types/funnel.d.ts +5 -0
- package/dist/client/types/retention.d.ts +301 -0
- package/dist/client/types.d.ts +6 -3
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +76 -54
- package/dist/server/index.d.ts +217 -0
- package/dist/server/index.js +7363 -4152
- package/package.json +5 -2
- package/dist/adapters/compiler-CO13DaEb.cjs +0 -192
- package/dist/client/chunks/analysis-builder-Dc9NrG_N.js +0 -6013
- package/dist/client/chunks/analysis-builder-Dc9NrG_N.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js +0 -2540
- package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js +0 -435
- package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js +0 -392
- package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js.map +0 -1
- package/dist/client/chunks/chartConfigRegistry-CiOq-PqX.js +0 -44
- package/dist/client/chunks/charts-loader-BtsnUO4Q.js.map +0 -1
- package/dist/client/chunks/charts-xNubY0vm.js +0 -226
- package/dist/client/chunks/charts-xNubY0vm.js.map +0 -1
- package/dist/client/chunks/components-BDrlf9Er.js.map +0 -1
- package/dist/client/chunks/hooks-B8Zw5PfL.js +0 -123
- package/dist/client/chunks/useDirtyStateTracking-C_mitVwh.js.map +0 -1
- package/dist/client/chunks/vendor-DzzxS7Ay.js.map +0 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { j as q, s as d } from "./useDirtyStateTracking-Yu_qQXb-.js";
|
|
2
|
+
import { e as i } from "./providers-BW8D7Wso.js";
|
|
3
|
+
import { a as y, i as R } from "./vendor-BSkQZgtm.js";
|
|
4
|
+
import { useMemo as b } from "react";
|
|
5
|
+
function p(e) {
|
|
6
|
+
return e ? ["cube", "dryRun", d(e)] : ["cube", "dryRun", null];
|
|
7
|
+
}
|
|
8
|
+
function F(e, s = {}) {
|
|
9
|
+
const { skip: l = !1, staleTime: u = 300 * 1e3 } = s, { cubeApi: o } = i(), n = b(() => e ? q(e) : null, [e]), r = y({
|
|
10
|
+
queryKey: p(n),
|
|
11
|
+
queryFn: async () => {
|
|
12
|
+
if (!n) throw new Error("No query provided");
|
|
13
|
+
const c = await o.dryRun(n);
|
|
14
|
+
return {
|
|
15
|
+
sql: c.sql,
|
|
16
|
+
analysis: c.analysis
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
enabled: !!n && !l,
|
|
20
|
+
staleTime: u
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
debugData: {
|
|
24
|
+
sql: r.data?.sql ?? null,
|
|
25
|
+
analysis: r.data?.analysis ?? null,
|
|
26
|
+
loading: r.isLoading,
|
|
27
|
+
error: r.error ?? null
|
|
28
|
+
},
|
|
29
|
+
refetch: () => r.refetch()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function g(e, s = {}) {
|
|
33
|
+
const { skip: l = !1, staleTime: u = 300 * 1e3 } = s, { cubeApi: o } = i(), n = b(() => e.map((t) => q(t)), [e]), r = R({
|
|
34
|
+
queries: n.map((t) => ({
|
|
35
|
+
queryKey: p(t),
|
|
36
|
+
queryFn: async () => {
|
|
37
|
+
const f = await o.dryRun(t);
|
|
38
|
+
return {
|
|
39
|
+
sql: f.sql,
|
|
40
|
+
analysis: f.analysis
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
enabled: !l,
|
|
44
|
+
staleTime: u
|
|
45
|
+
}))
|
|
46
|
+
}), a = r.map((t) => ({
|
|
47
|
+
sql: t.data?.sql ?? null,
|
|
48
|
+
analysis: t.data?.analysis ?? null,
|
|
49
|
+
loading: t.isLoading,
|
|
50
|
+
error: t.error ?? null
|
|
51
|
+
})), c = r.some((t) => t.isLoading);
|
|
52
|
+
return {
|
|
53
|
+
debugDataPerQuery: a,
|
|
54
|
+
isLoading: c,
|
|
55
|
+
refetchAll: () => {
|
|
56
|
+
r.forEach((t) => t.refetch());
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function A(e) {
|
|
61
|
+
const { queries: s, isMultiQueryMode: l, skip: u = !1, staleTime: o } = e, n = l ? s : s.slice(0, 1);
|
|
62
|
+
return g(n, { skip: u, staleTime: o });
|
|
63
|
+
}
|
|
64
|
+
function L(e, s = {}) {
|
|
65
|
+
const { skip: l = !1, staleTime: u = 300 * 1e3 } = s, { cubeApi: o } = i(), n = y({
|
|
66
|
+
queryKey: ["cube", "dryRun", "funnel", e ? d(e) : null],
|
|
67
|
+
queryFn: async () => {
|
|
68
|
+
if (!e) throw new Error("No funnel query provided");
|
|
69
|
+
const a = await o.dryRun(e);
|
|
70
|
+
return {
|
|
71
|
+
sql: a.sql,
|
|
72
|
+
analysis: a.analysis,
|
|
73
|
+
funnelMetadata: a.funnel
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
enabled: !!e && !l,
|
|
77
|
+
staleTime: u
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
debugData: {
|
|
81
|
+
sql: n.data?.sql ?? null,
|
|
82
|
+
analysis: n.data?.analysis ?? null,
|
|
83
|
+
loading: n.isLoading,
|
|
84
|
+
error: n.error ?? null,
|
|
85
|
+
funnelMetadata: n.data?.funnelMetadata
|
|
86
|
+
},
|
|
87
|
+
refetch: () => n.refetch()
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function T(e, s = {}) {
|
|
91
|
+
const { skip: l = !1, staleTime: u = 300 * 1e3 } = s, { cubeApi: o } = i(), n = y({
|
|
92
|
+
queryKey: ["cube", "dryRun", "flow", e ? d(e) : null],
|
|
93
|
+
queryFn: async () => {
|
|
94
|
+
if (!e) throw new Error("No flow query provided");
|
|
95
|
+
const a = await o.dryRun(e);
|
|
96
|
+
return {
|
|
97
|
+
sql: a.sql,
|
|
98
|
+
analysis: a.analysis,
|
|
99
|
+
flowMetadata: a.flow
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
enabled: !!e && !l,
|
|
103
|
+
staleTime: u
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
debugData: {
|
|
107
|
+
sql: n.data?.sql ?? null,
|
|
108
|
+
analysis: n.data?.analysis ?? null,
|
|
109
|
+
loading: n.isLoading,
|
|
110
|
+
error: n.error ?? null,
|
|
111
|
+
flowMetadata: n.data?.flowMetadata
|
|
112
|
+
},
|
|
113
|
+
refetch: () => n.refetch()
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function k(e, s = {}) {
|
|
117
|
+
const { skip: l = !1, staleTime: u = 300 * 1e3 } = s, { cubeApi: o } = i(), n = y({
|
|
118
|
+
queryKey: ["cube", "dryRun", "retention", e ? d(e) : null],
|
|
119
|
+
queryFn: async () => {
|
|
120
|
+
if (!e) throw new Error("No retention query provided");
|
|
121
|
+
const a = await o.dryRun(e);
|
|
122
|
+
return {
|
|
123
|
+
sql: a.sql,
|
|
124
|
+
analysis: a.analysis,
|
|
125
|
+
retentionMetadata: a.retention
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
enabled: !!e && !l,
|
|
129
|
+
staleTime: u
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
debugData: {
|
|
133
|
+
sql: n.data?.sql ?? null,
|
|
134
|
+
analysis: n.data?.analysis ?? null,
|
|
135
|
+
loading: n.isLoading,
|
|
136
|
+
error: n.error ?? null,
|
|
137
|
+
retentionMetadata: n.data?.retentionMetadata
|
|
138
|
+
},
|
|
139
|
+
refetch: () => n.refetch()
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
g as a,
|
|
144
|
+
A as b,
|
|
145
|
+
L as c,
|
|
146
|
+
T as d,
|
|
147
|
+
k as e,
|
|
148
|
+
F as u
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=hooks-DPRv1Xhb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-B8Zw5PfL.js","sources":["../../../src/client/hooks/queries/useDryRunQuery.ts"],"sourcesContent":["/**\n * useDryRunQuery - TanStack Query hook for dry-run (debug) data\n *\n * Features:\n * - Fetch SQL and analysis data for query debugging\n * - Support for single and multi-query modes\n * - Built-in caching with TanStack Query\n * - Parallel fetching for multiple queries\n *\n * This hook replaces the debug data useEffect in AnalysisBuilder.\n */\n\nimport { useQuery, useQueries } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useCubeApi } from '../../providers/CubeApiProvider'\nimport type { CubeQuery } from '../../types'\nimport type { QueryAnalysis } from '../../components/AnalysisBuilder/types'\nimport { cleanQueryForServer } from '../../shared/utils'\nimport { stableStringify } from '../../shared/queryKey'\n\n/**\n * Debug data entry for a single query\n */\nexport interface DebugDataEntry {\n /** Generated SQL and parameters */\n sql: { sql: string; params: unknown[] } | null\n /** Query analysis (dimensions, measures, complexity, etc.) */\n analysis: QueryAnalysis | null\n /** Whether this entry is loading */\n loading: boolean\n /** Error if fetch failed */\n error: Error | null\n}\n\n/**\n * Create a stable query key for dry-run\n */\nexport function createDryRunQueryKey(\n query: CubeQuery | null\n): readonly unknown[] {\n if (!query) return ['cube', 'dryRun', null] as const\n return ['cube', 'dryRun', stableStringify(query)] as const\n}\n\nexport interface UseDryRunQueryOptions {\n /**\n * Whether to skip the query\n * @default false\n */\n skip?: boolean\n /**\n * Stale time in milliseconds\n * @default 5 * 60 * 1000 (5 minutes)\n */\n staleTime?: number\n}\n\nexport interface UseDryRunQueryResult {\n /** Debug data for the query */\n debugData: DebugDataEntry\n /** Manually refetch */\n refetch: () => void\n}\n\n/**\n * TanStack Query hook for single query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useDryRunQuery(query, { skip: !isValidQuery })\n * ```\n */\nexport function useDryRunQuery(\n query: CubeQuery | null,\n options: UseDryRunQueryOptions = {}\n): UseDryRunQueryResult {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n // Transform query for server\n const serverQuery = useMemo(() => {\n if (!query) return null\n return cleanQueryForServer(query)\n }, [query])\n\n const queryResult = useQuery({\n queryKey: createDryRunQueryKey(serverQuery),\n queryFn: async () => {\n if (!serverQuery) throw new Error('No query provided')\n const result = await cubeApi.dryRun(serverQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: DebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n\nexport interface UseMultiDryRunQueriesOptions {\n /**\n * Whether to skip all queries\n * @default false\n */\n skip?: boolean\n /**\n * Stale time in milliseconds\n * @default 5 * 60 * 1000 (5 minutes)\n */\n staleTime?: number\n}\n\nexport interface UseMultiDryRunQueriesResult {\n /** Debug data for each query */\n debugDataPerQuery: DebugDataEntry[]\n /** Whether any query is loading */\n isLoading: boolean\n /** Manually refetch all */\n refetchAll: () => void\n}\n\n/**\n * TanStack Query hook for multiple query dry-runs (debug) data\n *\n * Fetches debug data for multiple queries in parallel.\n *\n * Usage:\n * ```tsx\n * const { debugDataPerQuery, isLoading } = useMultiDryRunQueries(queries, {\n * skip: !isMultiQueryMode\n * })\n * ```\n */\nexport function useMultiDryRunQueries(\n queries: CubeQuery[],\n options: UseMultiDryRunQueriesOptions = {}\n): UseMultiDryRunQueriesResult {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n // Transform queries for server\n const serverQueries = useMemo(() => {\n return queries.map((q) => cleanQueryForServer(q))\n }, [queries])\n\n // Use useQueries for parallel fetching\n const queryResults = useQueries({\n queries: serverQueries.map((query) => ({\n queryKey: createDryRunQueryKey(query),\n queryFn: async () => {\n const result = await cubeApi.dryRun(query)\n return {\n sql: result.sql,\n analysis: result.analysis,\n }\n },\n enabled: !skip,\n staleTime,\n })),\n })\n\n // Transform results to DebugDataEntry array\n const debugDataPerQuery: DebugDataEntry[] = queryResults.map((result) => ({\n sql: result.data?.sql ?? null,\n analysis: result.data?.analysis ?? null,\n loading: result.isLoading,\n error: result.error ?? null,\n }))\n\n // Check if any query is loading\n const isLoading = queryResults.some((r) => r.isLoading)\n\n // Refetch all queries\n const refetchAll = () => {\n queryResults.forEach((r) => r.refetch())\n }\n\n return {\n debugDataPerQuery,\n isLoading,\n refetchAll,\n }\n}\n\n/**\n * Combined hook for single or multi-query dry-run based on mode\n *\n * This is a convenience wrapper that automatically chooses between\n * single and multi-query dry-run based on the number of queries.\n *\n * Usage:\n * ```tsx\n * const { debugDataPerQuery } = useDryRunQueries({\n * queries: isMultiQueryMode ? allQueries : [currentQuery],\n * isMultiQueryMode,\n * skip: !isValidQuery\n * })\n * ```\n */\nexport function useDryRunQueries(options: {\n queries: CubeQuery[]\n isMultiQueryMode: boolean\n skip?: boolean\n staleTime?: number\n}): UseMultiDryRunQueriesResult {\n const { queries, isMultiQueryMode, skip = false, staleTime } = options\n\n // For single query mode, wrap in array for consistent interface\n const queriesToFetch = isMultiQueryMode ? queries : queries.slice(0, 1)\n\n return useMultiDryRunQueries(queriesToFetch, { skip, staleTime })\n}\n\n/**\n * Debug data entry for funnel queries\n */\nexport interface FunnelDebugDataEntry extends DebugDataEntry {\n /** Funnel-specific metadata from server */\n funnelMetadata?: {\n stepCount: number\n steps: Array<{\n index: number\n name: string\n timeToConvert?: string\n cube?: string\n }>\n bindingKey: unknown\n timeDimension: unknown\n }\n}\n\n/**\n * TanStack Query hook for funnel query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useFunnelDryRunQuery(serverQuery, { skip: !isFunnelMode })\n * ```\n */\nexport function useFunnelDryRunQuery(\n serverQuery: unknown | null,\n options: UseDryRunQueryOptions = {}\n): { debugData: FunnelDebugDataEntry; refetch: () => void } {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n const queryResult = useQuery({\n queryKey: ['cube', 'dryRun', 'funnel', serverQuery ? stableStringify(serverQuery) : null] as const,\n queryFn: async () => {\n if (!serverQuery) throw new Error('No funnel query provided')\n // Send the funnel query to dry-run endpoint\n // The server will detect it's a funnel query and use dryRunFunnel\n const result = await cubeApi.dryRun(serverQuery as CubeQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n funnelMetadata: (result as unknown as { funnel?: unknown }).funnel,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: FunnelDebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n funnelMetadata: queryResult.data?.funnelMetadata as FunnelDebugDataEntry['funnelMetadata'],\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n\n/**\n * Debug data entry for flow queries\n */\nexport interface FlowDebugDataEntry extends DebugDataEntry {\n /** Flow-specific metadata from server */\n flowMetadata?: {\n stepsBefore: number\n stepsAfter: number\n bindingKey: unknown\n timeDimension: unknown\n eventDimension: string\n startingStep: {\n name: string\n filter: unknown\n }\n }\n}\n\n/**\n * TanStack Query hook for flow query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useFlowDryRunQuery(serverQuery, { skip: !isFlowMode })\n * ```\n */\nexport function useFlowDryRunQuery(\n serverQuery: unknown | null,\n options: UseDryRunQueryOptions = {}\n): { debugData: FlowDebugDataEntry; refetch: () => void } {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n const queryResult = useQuery({\n queryKey: ['cube', 'dryRun', 'flow', serverQuery ? stableStringify(serverQuery) : null] as const,\n queryFn: async () => {\n if (!serverQuery) throw new Error('No flow query provided')\n // Send the flow query to dry-run endpoint\n // The server will detect it's a flow query and use dryRunFlow\n const result = await cubeApi.dryRun(serverQuery as CubeQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n flowMetadata: (result as unknown as { flow?: unknown }).flow,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: FlowDebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n flowMetadata: queryResult.data?.flowMetadata as FlowDebugDataEntry['flowMetadata'],\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n"],"names":["createDryRunQueryKey","query","stableStringify","useDryRunQuery","options","skip","staleTime","cubeApi","useCubeApi","serverQuery","useMemo","cleanQueryForServer","queryResult","useQuery","result","useMultiDryRunQueries","queries","serverQueries","q","queryResults","useQueries","debugDataPerQuery","isLoading","r","useDryRunQueries","isMultiQueryMode","queriesToFetch","useFunnelDryRunQuery","useFlowDryRunQuery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks-DPRv1Xhb.js","sources":["../../../src/client/hooks/queries/useDryRunQuery.ts"],"sourcesContent":["/**\n * useDryRunQuery - TanStack Query hook for dry-run (debug) data\n *\n * Features:\n * - Fetch SQL and analysis data for query debugging\n * - Support for single and multi-query modes\n * - Built-in caching with TanStack Query\n * - Parallel fetching for multiple queries\n *\n * This hook replaces the debug data useEffect in AnalysisBuilder.\n */\n\nimport { useQuery, useQueries } from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useCubeApi } from '../../providers/CubeApiProvider'\nimport type { CubeQuery } from '../../types'\nimport type { QueryAnalysis } from '../../components/AnalysisBuilder/types'\nimport { cleanQueryForServer } from '../../shared/utils'\nimport { stableStringify } from '../../shared/queryKey'\n\n/**\n * Debug data entry for a single query\n */\nexport interface DebugDataEntry {\n /** Generated SQL and parameters */\n sql: { sql: string; params: unknown[] } | null\n /** Query analysis (dimensions, measures, complexity, etc.) */\n analysis: QueryAnalysis | null\n /** Whether this entry is loading */\n loading: boolean\n /** Error if fetch failed */\n error: Error | null\n}\n\n/**\n * Create a stable query key for dry-run\n */\nexport function createDryRunQueryKey(\n query: CubeQuery | null\n): readonly unknown[] {\n if (!query) return ['cube', 'dryRun', null] as const\n return ['cube', 'dryRun', stableStringify(query)] as const\n}\n\nexport interface UseDryRunQueryOptions {\n /**\n * Whether to skip the query\n * @default false\n */\n skip?: boolean\n /**\n * Stale time in milliseconds\n * @default 5 * 60 * 1000 (5 minutes)\n */\n staleTime?: number\n}\n\nexport interface UseDryRunQueryResult {\n /** Debug data for the query */\n debugData: DebugDataEntry\n /** Manually refetch */\n refetch: () => void\n}\n\n/**\n * TanStack Query hook for single query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useDryRunQuery(query, { skip: !isValidQuery })\n * ```\n */\nexport function useDryRunQuery(\n query: CubeQuery | null,\n options: UseDryRunQueryOptions = {}\n): UseDryRunQueryResult {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n // Transform query for server\n const serverQuery = useMemo(() => {\n if (!query) return null\n return cleanQueryForServer(query)\n }, [query])\n\n const queryResult = useQuery({\n queryKey: createDryRunQueryKey(serverQuery),\n queryFn: async () => {\n if (!serverQuery) throw new Error('No query provided')\n const result = await cubeApi.dryRun(serverQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: DebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n\nexport interface UseMultiDryRunQueriesOptions {\n /**\n * Whether to skip all queries\n * @default false\n */\n skip?: boolean\n /**\n * Stale time in milliseconds\n * @default 5 * 60 * 1000 (5 minutes)\n */\n staleTime?: number\n}\n\nexport interface UseMultiDryRunQueriesResult {\n /** Debug data for each query */\n debugDataPerQuery: DebugDataEntry[]\n /** Whether any query is loading */\n isLoading: boolean\n /** Manually refetch all */\n refetchAll: () => void\n}\n\n/**\n * TanStack Query hook for multiple query dry-runs (debug) data\n *\n * Fetches debug data for multiple queries in parallel.\n *\n * Usage:\n * ```tsx\n * const { debugDataPerQuery, isLoading } = useMultiDryRunQueries(queries, {\n * skip: !isMultiQueryMode\n * })\n * ```\n */\nexport function useMultiDryRunQueries(\n queries: CubeQuery[],\n options: UseMultiDryRunQueriesOptions = {}\n): UseMultiDryRunQueriesResult {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n // Transform queries for server\n const serverQueries = useMemo(() => {\n return queries.map((q) => cleanQueryForServer(q))\n }, [queries])\n\n // Use useQueries for parallel fetching\n const queryResults = useQueries({\n queries: serverQueries.map((query) => ({\n queryKey: createDryRunQueryKey(query),\n queryFn: async () => {\n const result = await cubeApi.dryRun(query)\n return {\n sql: result.sql,\n analysis: result.analysis,\n }\n },\n enabled: !skip,\n staleTime,\n })),\n })\n\n // Transform results to DebugDataEntry array\n const debugDataPerQuery: DebugDataEntry[] = queryResults.map((result) => ({\n sql: result.data?.sql ?? null,\n analysis: result.data?.analysis ?? null,\n loading: result.isLoading,\n error: result.error ?? null,\n }))\n\n // Check if any query is loading\n const isLoading = queryResults.some((r) => r.isLoading)\n\n // Refetch all queries\n const refetchAll = () => {\n queryResults.forEach((r) => r.refetch())\n }\n\n return {\n debugDataPerQuery,\n isLoading,\n refetchAll,\n }\n}\n\n/**\n * Combined hook for single or multi-query dry-run based on mode\n *\n * This is a convenience wrapper that automatically chooses between\n * single and multi-query dry-run based on the number of queries.\n *\n * Usage:\n * ```tsx\n * const { debugDataPerQuery } = useDryRunQueries({\n * queries: isMultiQueryMode ? allQueries : [currentQuery],\n * isMultiQueryMode,\n * skip: !isValidQuery\n * })\n * ```\n */\nexport function useDryRunQueries(options: {\n queries: CubeQuery[]\n isMultiQueryMode: boolean\n skip?: boolean\n staleTime?: number\n}): UseMultiDryRunQueriesResult {\n const { queries, isMultiQueryMode, skip = false, staleTime } = options\n\n // For single query mode, wrap in array for consistent interface\n const queriesToFetch = isMultiQueryMode ? queries : queries.slice(0, 1)\n\n return useMultiDryRunQueries(queriesToFetch, { skip, staleTime })\n}\n\n/**\n * Debug data entry for funnel queries\n */\nexport interface FunnelDebugDataEntry extends DebugDataEntry {\n /** Funnel-specific metadata from server */\n funnelMetadata?: {\n stepCount: number\n steps: Array<{\n index: number\n name: string\n timeToConvert?: string\n cube?: string\n }>\n bindingKey: unknown\n timeDimension: unknown\n }\n}\n\n/**\n * TanStack Query hook for funnel query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useFunnelDryRunQuery(serverQuery, { skip: !isFunnelMode })\n * ```\n */\nexport function useFunnelDryRunQuery(\n serverQuery: unknown | null,\n options: UseDryRunQueryOptions = {}\n): { debugData: FunnelDebugDataEntry; refetch: () => void } {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n const queryResult = useQuery({\n queryKey: ['cube', 'dryRun', 'funnel', serverQuery ? stableStringify(serverQuery) : null] as const,\n queryFn: async () => {\n if (!serverQuery) throw new Error('No funnel query provided')\n // Send the funnel query to dry-run endpoint\n // The server will detect it's a funnel query and use dryRunFunnel\n const result = await cubeApi.dryRun(serverQuery as CubeQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n funnelMetadata: (result as unknown as { funnel?: unknown }).funnel,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: FunnelDebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n funnelMetadata: queryResult.data?.funnelMetadata as FunnelDebugDataEntry['funnelMetadata'],\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n\n/**\n * Debug data entry for flow queries\n */\nexport interface FlowDebugDataEntry extends DebugDataEntry {\n /** Flow-specific metadata from server */\n flowMetadata?: {\n stepsBefore: number\n stepsAfter: number\n bindingKey: unknown\n timeDimension: unknown\n eventDimension: string\n startingStep: {\n name: string\n filter: unknown\n }\n }\n}\n\n/**\n * TanStack Query hook for flow query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useFlowDryRunQuery(serverQuery, { skip: !isFlowMode })\n * ```\n */\nexport function useFlowDryRunQuery(\n serverQuery: unknown | null,\n options: UseDryRunQueryOptions = {}\n): { debugData: FlowDebugDataEntry; refetch: () => void } {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n const queryResult = useQuery({\n queryKey: ['cube', 'dryRun', 'flow', serverQuery ? stableStringify(serverQuery) : null] as const,\n queryFn: async () => {\n if (!serverQuery) throw new Error('No flow query provided')\n // Send the flow query to dry-run endpoint\n // The server will detect it's a flow query and use dryRunFlow\n const result = await cubeApi.dryRun(serverQuery as CubeQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n flowMetadata: (result as unknown as { flow?: unknown }).flow,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: FlowDebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n flowMetadata: queryResult.data?.flowMetadata as FlowDebugDataEntry['flowMetadata'],\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n\n/**\n * Debug data entry for retention queries\n */\nexport interface RetentionDebugDataEntry extends DebugDataEntry {\n /** Retention-specific metadata from server */\n retentionMetadata?: {\n totalCohorts: number\n totalUsers: number\n periods: number\n cohortGranularity: string\n periodGranularity: string\n retentionType: string\n }\n}\n\n/**\n * TanStack Query hook for retention query dry-run (debug) data\n *\n * Usage:\n * ```tsx\n * const { debugData } = useRetentionDryRunQuery(serverQuery, { skip: !isRetentionMode })\n * ```\n */\nexport function useRetentionDryRunQuery(\n serverQuery: unknown | null,\n options: UseDryRunQueryOptions = {}\n): { debugData: RetentionDebugDataEntry; refetch: () => void } {\n const { skip = false, staleTime = 5 * 60 * 1000 } = options\n const { cubeApi } = useCubeApi()\n\n const queryResult = useQuery({\n queryKey: ['cube', 'dryRun', 'retention', serverQuery ? stableStringify(serverQuery) : null] as const,\n queryFn: async () => {\n if (!serverQuery) throw new Error('No retention query provided')\n // Send the retention query to dry-run endpoint\n // The server will detect it's a retention query and use dryRunRetention\n const result = await cubeApi.dryRun(serverQuery as CubeQuery)\n return {\n sql: result.sql,\n analysis: result.analysis,\n retentionMetadata: (result as unknown as { retention?: unknown }).retention,\n }\n },\n enabled: !!serverQuery && !skip,\n staleTime,\n })\n\n const debugData: RetentionDebugDataEntry = {\n sql: queryResult.data?.sql ?? null,\n analysis: queryResult.data?.analysis ?? null,\n loading: queryResult.isLoading,\n error: queryResult.error ?? null,\n retentionMetadata: queryResult.data?.retentionMetadata as RetentionDebugDataEntry['retentionMetadata'],\n }\n\n return {\n debugData,\n refetch: () => queryResult.refetch(),\n }\n}\n"],"names":["createDryRunQueryKey","query","stableStringify","useDryRunQuery","options","skip","staleTime","cubeApi","useCubeApi","serverQuery","useMemo","cleanQueryForServer","queryResult","useQuery","result","useMultiDryRunQueries","queries","serverQueries","q","queryResults","useQueries","debugDataPerQuery","isLoading","r","useDryRunQueries","isMultiQueryMode","queriesToFetch","useFunnelDryRunQuery","useFlowDryRunQuery","useRetentionDryRunQuery"],"mappings":";;;;AAqCO,SAASA,EACdC,GACoB;AACpB,SAAKA,IACE,CAAC,QAAQ,UAAUC,EAAgBD,CAAK,CAAC,IAD7B,CAAC,QAAQ,UAAU,IAAI;AAE5C;AA8BO,SAASE,EACdF,GACAG,IAAiC,IACX;AACtB,QAAM,EAAE,MAAAC,IAAO,IAAO,WAAAC,IAAY,MAAS,QAASF,GAC9C,EAAE,SAAAG,EAAA,IAAYC,EAAA,GAGdC,IAAcC,EAAQ,MACrBT,IACEU,EAAoBV,CAAK,IADb,MAElB,CAACA,CAAK,CAAC,GAEJW,IAAcC,EAAS;AAAA,IAC3B,UAAUb,EAAqBS,CAAW;AAAA,IAC1C,SAAS,YAAY;AACnB,UAAI,CAACA,EAAa,OAAM,IAAI,MAAM,mBAAmB;AACrD,YAAMK,IAAS,MAAMP,EAAQ,OAAOE,CAAW;AAC/C,aAAO;AAAA,QACL,KAAKK,EAAO;AAAA,QACZ,UAAUA,EAAO;AAAA,MAAA;AAAA,IAErB;AAAA,IACA,SAAS,CAAC,CAACL,KAAe,CAACJ;AAAA,IAC3B,WAAAC;AAAA,EAAA,CACD;AASD,SAAO;AAAA,IACL,WARgC;AAAA,MAChC,KAAKM,EAAY,MAAM,OAAO;AAAA,MAC9B,UAAUA,EAAY,MAAM,YAAY;AAAA,MACxC,SAASA,EAAY;AAAA,MACrB,OAAOA,EAAY,SAAS;AAAA,IAAA;AAAA,IAK5B,SAAS,MAAMA,EAAY,QAAA;AAAA,EAAQ;AAEvC;AAoCO,SAASG,EACdC,GACAZ,IAAwC,IACX;AAC7B,QAAM,EAAE,MAAAC,IAAO,IAAO,WAAAC,IAAY,MAAS,QAASF,GAC9C,EAAE,SAAAG,EAAA,IAAYC,EAAA,GAGdS,IAAgBP,EAAQ,MACrBM,EAAQ,IAAI,CAACE,MAAMP,EAAoBO,CAAC,CAAC,GAC/C,CAACF,CAAO,CAAC,GAGNG,IAAeC,EAAW;AAAA,IAC9B,SAASH,EAAc,IAAI,CAAChB,OAAW;AAAA,MACrC,UAAUD,EAAqBC,CAAK;AAAA,MACpC,SAAS,YAAY;AACnB,cAAMa,IAAS,MAAMP,EAAQ,OAAON,CAAK;AACzC,eAAO;AAAA,UACL,KAAKa,EAAO;AAAA,UACZ,UAAUA,EAAO;AAAA,QAAA;AAAA,MAErB;AAAA,MACA,SAAS,CAACT;AAAA,MACV,WAAAC;AAAA,IAAA,EACA;AAAA,EAAA,CACH,GAGKe,IAAsCF,EAAa,IAAI,CAACL,OAAY;AAAA,IACxE,KAAKA,EAAO,MAAM,OAAO;AAAA,IACzB,UAAUA,EAAO,MAAM,YAAY;AAAA,IACnC,SAASA,EAAO;AAAA,IAChB,OAAOA,EAAO,SAAS;AAAA,EAAA,EACvB,GAGIQ,IAAYH,EAAa,KAAK,CAACI,MAAMA,EAAE,SAAS;AAOtD,SAAO;AAAA,IACL,mBAAAF;AAAA,IACA,WAAAC;AAAA,IACA,YAPiB,MAAM;AACvB,MAAAH,EAAa,QAAQ,CAACI,MAAMA,EAAE,SAAS;AAAA,IACzC;AAAA,EAKE;AAEJ;AAiBO,SAASC,EAAiBpB,GAKD;AAC9B,QAAM,EAAE,SAAAY,GAAS,kBAAAS,GAAkB,MAAApB,IAAO,IAAO,WAAAC,MAAcF,GAGzDsB,IAAiBD,IAAmBT,IAAUA,EAAQ,MAAM,GAAG,CAAC;AAEtE,SAAOD,EAAsBW,GAAgB,EAAE,MAAArB,GAAM,WAAAC,GAAW;AAClE;AA4BO,SAASqB,EACdlB,GACAL,IAAiC,IACyB;AAC1D,QAAM,EAAE,MAAAC,IAAO,IAAO,WAAAC,IAAY,MAAS,QAASF,GAC9C,EAAE,SAAAG,EAAA,IAAYC,EAAA,GAEdI,IAAcC,EAAS;AAAA,IAC3B,UAAU,CAAC,QAAQ,UAAU,UAAUJ,IAAcP,EAAgBO,CAAW,IAAI,IAAI;AAAA,IACxF,SAAS,YAAY;AACnB,UAAI,CAACA,EAAa,OAAM,IAAI,MAAM,0BAA0B;AAG5D,YAAMK,IAAS,MAAMP,EAAQ,OAAOE,CAAwB;AAC5D,aAAO;AAAA,QACL,KAAKK,EAAO;AAAA,QACZ,UAAUA,EAAO;AAAA,QACjB,gBAAiBA,EAA2C;AAAA,MAAA;AAAA,IAEhE;AAAA,IACA,SAAS,CAAC,CAACL,KAAe,CAACJ;AAAA,IAC3B,WAAAC;AAAA,EAAA,CACD;AAUD,SAAO;AAAA,IACL,WATsC;AAAA,MACtC,KAAKM,EAAY,MAAM,OAAO;AAAA,MAC9B,UAAUA,EAAY,MAAM,YAAY;AAAA,MACxC,SAASA,EAAY;AAAA,MACrB,OAAOA,EAAY,SAAS;AAAA,MAC5B,gBAAgBA,EAAY,MAAM;AAAA,IAAA;AAAA,IAKlC,SAAS,MAAMA,EAAY,QAAA;AAAA,EAAQ;AAEvC;AA4BO,SAASgB,EACdnB,GACAL,IAAiC,IACuB;AACxD,QAAM,EAAE,MAAAC,IAAO,IAAO,WAAAC,IAAY,MAAS,QAASF,GAC9C,EAAE,SAAAG,EAAA,IAAYC,EAAA,GAEdI,IAAcC,EAAS;AAAA,IAC3B,UAAU,CAAC,QAAQ,UAAU,QAAQJ,IAAcP,EAAgBO,CAAW,IAAI,IAAI;AAAA,IACtF,SAAS,YAAY;AACnB,UAAI,CAACA,EAAa,OAAM,IAAI,MAAM,wBAAwB;AAG1D,YAAMK,IAAS,MAAMP,EAAQ,OAAOE,CAAwB;AAC5D,aAAO;AAAA,QACL,KAAKK,EAAO;AAAA,QACZ,UAAUA,EAAO;AAAA,QACjB,cAAeA,EAAyC;AAAA,MAAA;AAAA,IAE5D;AAAA,IACA,SAAS,CAAC,CAACL,KAAe,CAACJ;AAAA,IAC3B,WAAAC;AAAA,EAAA,CACD;AAUD,SAAO;AAAA,IACL,WAToC;AAAA,MACpC,KAAKM,EAAY,MAAM,OAAO;AAAA,MAC9B,UAAUA,EAAY,MAAM,YAAY;AAAA,MACxC,SAASA,EAAY;AAAA,MACrB,OAAOA,EAAY,SAAS;AAAA,MAC5B,cAAcA,EAAY,MAAM;AAAA,IAAA;AAAA,IAKhC,SAAS,MAAMA,EAAY,QAAA;AAAA,EAAQ;AAEvC;AAyBO,SAASiB,EACdpB,GACAL,IAAiC,IAC4B;AAC7D,QAAM,EAAE,MAAAC,IAAO,IAAO,WAAAC,IAAY,MAAS,QAASF,GAC9C,EAAE,SAAAG,EAAA,IAAYC,EAAA,GAEdI,IAAcC,EAAS;AAAA,IAC3B,UAAU,CAAC,QAAQ,UAAU,aAAaJ,IAAcP,EAAgBO,CAAW,IAAI,IAAI;AAAA,IAC3F,SAAS,YAAY;AACnB,UAAI,CAACA,EAAa,OAAM,IAAI,MAAM,6BAA6B;AAG/D,YAAMK,IAAS,MAAMP,EAAQ,OAAOE,CAAwB;AAC5D,aAAO;AAAA,QACL,KAAKK,EAAO;AAAA,QACZ,UAAUA,EAAO;AAAA,QACjB,mBAAoBA,EAA8C;AAAA,MAAA;AAAA,IAEtE;AAAA,IACA,SAAS,CAAC,CAACL,KAAe,CAACJ;AAAA,IAC3B,WAAAC;AAAA,EAAA,CACD;AAUD,SAAO;AAAA,IACL,WATyC;AAAA,MACzC,KAAKM,EAAY,MAAM,OAAO;AAAA,MAC9B,UAAUA,EAAY,MAAM,YAAY;AAAA,MACxC,SAASA,EAAY;AAAA,MACrB,OAAOA,EAAY,SAAS;AAAA,MAC5B,mBAAmBA,EAAY,MAAM;AAAA,IAAA;AAAA,IAKrC,SAAS,MAAMA,EAAY,QAAA;AAAA,EAAQ;AAEvC;"}
|