drizzle-cube 0.2.11 → 0.2.13
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-CMwSRhTS.cjs +22 -0
- package/dist/adapters/{compiler-gcKytLwd.js → compiler-DrkCCzf0.js} +16 -11
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +8 -8
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +9 -9
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +11 -11
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +59 -59
- package/dist/client/charts.js +11 -11
- package/dist/client/chunks/{chart-activitygridchart-D17Fxiuf.js → chart-activitygridchart-CUGN9Xq9.js} +3 -2
- package/dist/client/chunks/chart-activitygridchart-CUGN9Xq9.js.map +1 -0
- package/dist/client/chunks/{chart-areachart-udSbAzl1.js → chart-areachart-B4tknnsY.js} +25 -25
- package/dist/client/chunks/{chart-areachart-udSbAzl1.js.map → chart-areachart-B4tknnsY.js.map} +1 -1
- package/dist/client/chunks/{chart-axisformatcontrols-DqSa245M.js → chart-axisformatcontrols-Ch_IYF94.js} +18 -18
- package/dist/client/chunks/chart-axisformatcontrols-Ch_IYF94.js.map +1 -0
- package/dist/client/chunks/{chart-barchart-CDIpqCKS.js → chart-barchart-D_op06r-.js} +6 -6
- package/dist/client/chunks/{chart-barchart-CDIpqCKS.js.map → chart-barchart-D_op06r-.js.map} +1 -1
- package/dist/client/chunks/{chart-bubblechart-CivK_yfh.js → chart-bubblechart-BsaIXUbS.js} +3 -3
- package/dist/client/chunks/chart-bubblechart-BsaIXUbS.js.map +1 -0
- package/dist/client/chunks/{chart-charttooltip-BVEdz4Q-.js → chart-charttooltip-Bx3I8jQv.js} +2 -2
- package/dist/client/chunks/{chart-charttooltip-BVEdz4Q-.js.map → chart-charttooltip-Bx3I8jQv.js.map} +1 -1
- package/dist/client/chunks/{chart-datatable-NHE7BTMr.js → chart-datatable-C7MS9q4Y.js} +2 -2
- package/dist/client/chunks/{chart-datatable-NHE7BTMr.js.map → chart-datatable-C7MS9q4Y.js.map} +1 -1
- package/dist/client/chunks/{chart-kpidelta-D-FR2o4V.js → chart-kpidelta-7-KOmb3w.js} +62 -60
- package/dist/client/chunks/chart-kpidelta-7-KOmb3w.js.map +1 -0
- package/dist/client/chunks/{chart-kpinumber-DSH8RJxb.js → chart-kpinumber-HOPfcK2N.js} +4 -4
- package/dist/client/chunks/{chart-kpinumber-DSH8RJxb.js.map → chart-kpinumber-HOPfcK2N.js.map} +1 -1
- package/dist/client/chunks/{chart-kpitext-Z9oh0bJq.js → chart-kpitext-BZkC9u3A.js} +24 -24
- package/dist/client/chunks/{chart-kpitext-Z9oh0bJq.js.map → chart-kpitext-BZkC9u3A.js.map} +1 -1
- package/dist/client/chunks/{chart-linechart-D4r0uD1j.js → chart-linechart-DqFmLbRe.js} +7 -7
- package/dist/client/chunks/{chart-linechart-D4r0uD1j.js.map → chart-linechart-DqFmLbRe.js.map} +1 -1
- package/dist/client/chunks/chart-markdownchart-9n_TemoB.js +256 -0
- package/dist/client/chunks/chart-markdownchart-9n_TemoB.js.map +1 -0
- package/dist/client/chunks/{chart-piechart-BhttUWuH.js → chart-piechart-CrXFd9pE.js} +6 -6
- package/dist/client/chunks/{chart-piechart-BhttUWuH.js.map → chart-piechart-CrXFd9pE.js.map} +1 -1
- package/dist/client/chunks/{chart-radarchart-DnqlfoGr.js → chart-radarchart-tar2GBkO.js} +5 -5
- package/dist/client/chunks/{chart-radarchart-DnqlfoGr.js.map → chart-radarchart-tar2GBkO.js.map} +1 -1
- package/dist/client/chunks/{chart-radialbarchart-BFxxiqLw.js → chart-radialbarchart-ab8Swtal.js} +5 -5
- package/dist/client/chunks/{chart-radialbarchart-BFxxiqLw.js.map → chart-radialbarchart-ab8Swtal.js.map} +1 -1
- package/dist/client/chunks/{chart-scatterchart-MN4SM-w7.js → chart-scatterchart-BP06BeU5.js} +5 -5
- package/dist/client/chunks/{chart-scatterchart-MN4SM-w7.js.map → chart-scatterchart-BP06BeU5.js.map} +1 -1
- package/dist/client/chunks/{chart-treemapchart-Nozh2m26.js → chart-treemapchart-DAiixITm.js} +31 -31
- package/dist/client/chunks/{chart-treemapchart-Nozh2m26.js.map → chart-treemapchart-DAiixITm.js.map} +1 -1
- package/dist/client/chunks/{charts-BSDHSv4l.js → charts-CHzWeaY1.js} +26 -26
- package/dist/client/chunks/charts-CHzWeaY1.js.map +1 -0
- package/dist/client/chunks/{components-CbDovlG-.js → components-DnM9CCUS.js} +2453 -2445
- package/dist/client/chunks/components-DnM9CCUS.js.map +1 -0
- package/dist/client/chunks/{index-th92_8oL.js → index-DlsvcKXf.js} +135 -135
- package/dist/client/chunks/index-DlsvcKXf.js.map +1 -0
- package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +5 -5
- package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +2 -7
- package/dist/client/components/AnalysisBuilder/types.d.ts +8 -8
- package/dist/client/components.js +2 -2
- package/dist/client/hooks/useResponsiveDashboard.d.ts +2 -8
- package/dist/client/hooks.js +2 -2
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/icons/types.d.ts +2 -2
- package/dist/client/index.js +3 -3
- package/dist/client/providers.js +1 -1
- package/dist/client/styles.css +1 -1
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +2 -2
- package/dist/server/index.js +16 -11
- package/package.json +3 -3
- package/dist/adapters/compiler-DP1pPIcg.cjs +0 -22
- package/dist/client/chunks/chart-activitygridchart-D17Fxiuf.js.map +0 -1
- package/dist/client/chunks/chart-axisformatcontrols-DqSa245M.js.map +0 -1
- package/dist/client/chunks/chart-bubblechart-CivK_yfh.js.map +0 -1
- package/dist/client/chunks/chart-kpidelta-D-FR2o4V.js.map +0 -1
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js +0 -254
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js.map +0 -1
- package/dist/client/chunks/charts-BSDHSv4l.js.map +0 -1
- package/dist/client/chunks/components-CbDovlG-.js.map +0 -1
- package/dist/client/chunks/index-th92_8oL.js.map +0 -1
|
@@ -676,9 +676,10 @@ class zT extends zE {
|
|
|
676
676
|
return L`DATE_ADD(MAKEDATE(YEAR(${e}), 1), INTERVAL (QUARTER(${e}) - 1) * 3 MONTH)`;
|
|
677
677
|
case "week":
|
|
678
678
|
return L`DATE_SUB(${e}, INTERVAL WEEKDAY(${e}) DAY)`;
|
|
679
|
-
default:
|
|
679
|
+
default: {
|
|
680
680
|
const A = R[E];
|
|
681
681
|
return A ? L`STR_TO_DATE(DATE_FORMAT(${e}, ${A}), '%Y-%m-%d %H:%i:%s')` : e;
|
|
682
|
+
}
|
|
682
683
|
}
|
|
683
684
|
}
|
|
684
685
|
/**
|
|
@@ -789,25 +790,29 @@ class pe extends zE {
|
|
|
789
790
|
switch (E) {
|
|
790
791
|
case "year":
|
|
791
792
|
return L`datetime(${e}, 'unixepoch', 'start of year')`;
|
|
792
|
-
case "quarter":
|
|
793
|
+
case "quarter": {
|
|
793
794
|
const R = L`datetime(${e}, 'unixepoch')`;
|
|
794
795
|
return L`datetime(${R}, 'start of year',
|
|
795
796
|
'+' || (((CAST(strftime('%m', ${R}) AS INTEGER) - 1) / 3) * 3) || ' months')`;
|
|
797
|
+
}
|
|
796
798
|
case "month":
|
|
797
799
|
return L`datetime(${e}, 'unixepoch', 'start of month')`;
|
|
798
800
|
case "week":
|
|
799
801
|
return L`date(datetime(${e}, 'unixepoch'), 'weekday 1', '-6 days')`;
|
|
800
802
|
case "day":
|
|
801
803
|
return L`datetime(${e}, 'unixepoch', 'start of day')`;
|
|
802
|
-
case "hour":
|
|
803
|
-
const
|
|
804
|
-
return L`datetime(strftime('%Y-%m-%d %H:00:00', ${
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
804
|
+
case "hour": {
|
|
805
|
+
const R = L`datetime(${e}, 'unixepoch')`;
|
|
806
|
+
return L`datetime(strftime('%Y-%m-%d %H:00:00', ${R}))`;
|
|
807
|
+
}
|
|
808
|
+
case "minute": {
|
|
809
|
+
const R = L`datetime(${e}, 'unixepoch')`;
|
|
810
|
+
return L`datetime(strftime('%Y-%m-%d %H:%M:00', ${R}))`;
|
|
811
|
+
}
|
|
812
|
+
case "second": {
|
|
813
|
+
const R = L`datetime(${e}, 'unixepoch')`;
|
|
814
|
+
return L`datetime(strftime('%Y-%m-%d %H:%M:%S', ${R}))`;
|
|
815
|
+
}
|
|
811
816
|
default:
|
|
812
817
|
return L`datetime(${e}, 'unixepoch')`;
|
|
813
818
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("express"),v=require("cors"),o=require("../compiler-CMwSRhTS.cjs");function E(d){const{cubes:y,drizzle:p,schema:g,extractSecurityContext:l,engineType:h,cors:R,basePath:c="/cubejs-api/v1",jsonLimit:b="10mb"}=d;if(!y||y.length===0)throw new Error("At least one cube must be provided in the cubes array");const i=m.Router();R&&i.use(v(R)),i.use(m.json({limit:b})),i.use(m.urlencoded({extended:!0,limit:b}));const a=new o.SemanticLayerCompiler({drizzle:p,schema:g,engineType:h});return y.forEach(t=>{a.registerCube(t)}),i.post(`${c}/load`,async(t,r)=>{try{const e=t.body.query||t.body,s=await l(t,r),n=a.validateQuery(e);if(!n.isValid)return r.status(400).json(o.formatErrorResponse(`Query validation failed: ${n.errors.join(", ")}`,400));const u=await a.executeMultiCubeQuery(e,s);r.json(o.formatCubeResponse(e,u,a))}catch(e){console.error("Query execution error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"Query execution failed",500))}}),i.get(`${c}/load`,async(t,r)=>{try{const e=t.query.query;if(!e)return r.status(400).json(o.formatErrorResponse("Query parameter is required",400));let s;try{s=JSON.parse(e)}catch{return r.status(400).json(o.formatErrorResponse("Invalid JSON in query parameter",400))}const n=await l(t,r),u=a.validateQuery(s);if(!u.isValid)return r.status(400).json(o.formatErrorResponse(`Query validation failed: ${u.errors.join(", ")}`,400));const f=await a.executeMultiCubeQuery(s,n);r.json(o.formatCubeResponse(s,f,a))}catch(e){console.error("Query execution error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"Query execution failed",500))}}),i.post(`${c}/batch`,async(t,r)=>{try{const{queries:e}=t.body;if(!e||!Array.isArray(e))return r.status(400).json(o.formatErrorResponse('Request body must contain a "queries" array',400));if(e.length===0)return r.status(400).json(o.formatErrorResponse("Queries array cannot be empty",400));const s=await l(t,r),n=await o.handleBatchRequest(e,s,a);r.json(n)}catch(e){console.error("Batch execution error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"Batch execution failed",500))}}),i.get(`${c}/meta`,(t,r)=>{try{const e=a.getMetadata();r.json(o.formatMetaResponse(e))}catch(e){console.error("Metadata error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"Failed to fetch metadata",500))}}),i.post(`${c}/sql`,async(t,r)=>{try{const e=t.body,s=await l(t,r),n=a.validateQuery(e);if(!n.isValid)return r.status(400).json(o.formatErrorResponse(`Query validation failed: ${n.errors.join(", ")}`,400));const u=e.measures?.[0]||e.dimensions?.[0];if(!u)return r.status(400).json(o.formatErrorResponse("No measures or dimensions specified",400));const f=u.split(".")[0],j=await a.generateSQL(f,e,s);r.json(o.formatSqlResponse(e,j))}catch(e){console.error("SQL generation error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"SQL generation failed",500))}}),i.get(`${c}/sql`,async(t,r)=>{try{const e=t.query.query;if(!e)return r.status(400).json(o.formatErrorResponse("Query parameter is required",400));const s=JSON.parse(e),n=await l(t,r),u=a.validateQuery(s);if(!u.isValid)return r.status(400).json(o.formatErrorResponse(`Query validation failed: ${u.errors.join(", ")}`,400));const f=s.measures?.[0]||s.dimensions?.[0];if(!f)return r.status(400).json(o.formatErrorResponse("No measures or dimensions specified",400));const j=f.split(".")[0],Q=await a.generateSQL(j,s,n);r.json(o.formatSqlResponse(s,Q))}catch(e){console.error("SQL generation error:",e),r.status(500).json(o.formatErrorResponse(e instanceof Error?e.message:"SQL generation failed",500))}}),i.post(`${c}/dry-run`,async(t,r)=>{try{const e=t.body.query||t.body,s=await l(t,r),n=await o.handleDryRun(e,s,a);r.json(n)}catch(e){console.error("Dry-run error:",e),r.status(400).json({error:e instanceof Error?e.message:"Dry-run validation failed",valid:!1})}}),i.get(`${c}/dry-run`,async(t,r)=>{try{const e=t.query.query;if(!e)return r.status(400).json({error:"Query parameter is required",valid:!1});const s=JSON.parse(e),n=await l(t,r),u=await o.handleDryRun(s,n,a);r.json(u)}catch(e){console.error("Dry-run error:",e),r.status(400).json({error:e instanceof Error?e.message:"Dry-run validation failed",valid:!1})}}),i.use((t,r,e,s)=>{console.error("Express adapter error:",t),e.headersSent||e.status(500).json(o.formatErrorResponse(t,500))}),i}function q(d,y){const p=E(y);return d.use("/",p),d}function x(d){const y=m();return q(y,d)}exports.createCubeApp=x;exports.createCubeRouter=E;exports.mountCubeRoutes=q;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import p, { Router as C } from "express";
|
|
2
2
|
import S from "cors";
|
|
3
|
-
import { S as R, d as o, f as g, h as E, a as $, b as Q, c as q } from "../compiler-
|
|
3
|
+
import { S as R, d as o, f as g, h as E, a as $, b as Q, c as q } from "../compiler-DrkCCzf0.js";
|
|
4
4
|
function L(d) {
|
|
5
5
|
const {
|
|
6
6
|
cubes: y,
|
|
7
|
-
drizzle:
|
|
7
|
+
drizzle: m,
|
|
8
8
|
schema: x,
|
|
9
9
|
extractSecurityContext: l,
|
|
10
10
|
engineType: v,
|
|
@@ -17,7 +17,7 @@ function L(d) {
|
|
|
17
17
|
const i = C();
|
|
18
18
|
b && i.use(S(b)), i.use(p.json({ limit: h })), i.use(p.urlencoded({ extended: !0, limit: h }));
|
|
19
19
|
const a = new R({
|
|
20
|
-
drizzle:
|
|
20
|
+
drizzle: m,
|
|
21
21
|
schema: x,
|
|
22
22
|
engineType: v
|
|
23
23
|
});
|
|
@@ -115,8 +115,8 @@ function L(d) {
|
|
|
115
115
|
"No measures or dimensions specified",
|
|
116
116
|
400
|
|
117
117
|
));
|
|
118
|
-
const f = u.split(".")[0],
|
|
119
|
-
r.json(Q(e,
|
|
118
|
+
const f = u.split(".")[0], j = await a.generateSQL(f, e, s);
|
|
119
|
+
r.json(Q(e, j));
|
|
120
120
|
} catch (e) {
|
|
121
121
|
console.error("SQL generation error:", e), r.status(500).json(o(
|
|
122
122
|
e instanceof Error ? e.message : "SQL generation failed",
|
|
@@ -143,7 +143,7 @@ function L(d) {
|
|
|
143
143
|
"No measures or dimensions specified",
|
|
144
144
|
400
|
|
145
145
|
));
|
|
146
|
-
const
|
|
146
|
+
const j = f.split(".")[0], w = await a.generateSQL(j, s, n);
|
|
147
147
|
r.json(Q(s, w));
|
|
148
148
|
} catch (e) {
|
|
149
149
|
console.error("SQL generation error:", e), r.status(500).json(o(
|
|
@@ -182,8 +182,8 @@ function L(d) {
|
|
|
182
182
|
}), i;
|
|
183
183
|
}
|
|
184
184
|
function N(d, y) {
|
|
185
|
-
const
|
|
186
|
-
return d.use("/",
|
|
185
|
+
const m = L(y);
|
|
186
|
+
return d.use("/", m), d;
|
|
187
187
|
}
|
|
188
188
|
function J(d) {
|
|
189
189
|
const y = p();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var S=Object.create;var q=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var $=(n,s,m,g)=>{if(s&&typeof s=="object"||typeof s=="function")for(let d of x(s))!P.call(n,d)&&d!==m&&q(n,d,{get:()=>s[d],enumerable:!(g=w(s,d))||g.enumerable});return n};var L=(n,s,m)=>(m=n!=null?S(j(n)):{},$(s||!n||!n.__esModule?q(m,"default",{value:n,enumerable:!0}):m,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../compiler-
|
|
1
|
+
"use strict";var S=Object.create;var q=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var $=(n,s,m,g)=>{if(s&&typeof s=="object"||typeof s=="function")for(let d of x(s))!P.call(n,d)&&d!==m&&q(n,d,{get:()=>s[d],enumerable:!(g=w(s,d))||g.enumerable});return n};var L=(n,s,m)=>(m=n!=null?S(j(n)):{},$(s||!n||!n.__esModule?q(m,"default",{value:n,enumerable:!0}):m,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../compiler-CMwSRhTS.cjs"),h=function(s,m,g){const{cubes:d,drizzle:E,schema:v,extractSecurityContext:p,engineType:C,cors:R,basePath:y="/cubejs-api/v1",bodyLimit:b=10485760}=m;if(!d||d.length===0)return g(new Error("At least one cube must be provided in the cubes array"));R&&s.register(import("@fastify/cors"),R),s.addHook("onRequest",async(e,t)=>{e.method==="POST"&&(e.body=void 0)});const i=new o.SemanticLayerCompiler({drizzle:E,schema:v,engineType:C});d.forEach(e=>{i.registerCube(e)}),s.post(`${y}/load`,{bodyLimit:b,schema:{body:{type:"object",additionalProperties:!0}}},async(e,t)=>{try{const r=e.body,a=r.query||r,u=await p(e),c=i.validateQuery(a);if(!c.isValid)return t.status(400).send(o.formatErrorResponse(`Query validation failed: ${c.errors.join(", ")}`,400));const l=await i.executeMultiCubeQuery(a,u);return o.formatCubeResponse(a,l,i)}catch(r){return e.log.error(r,"Query execution error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"Query execution failed",500))}}),s.get(`${y}/load`,{schema:{querystring:{type:"object",properties:{query:{type:"string"}},required:["query"]}}},async(e,t)=>{try{const{query:r}=e.query;let a;try{a=JSON.parse(r)}catch{return t.status(400).send(o.formatErrorResponse("Invalid JSON in query parameter",400))}const u=await p(e),c=i.validateQuery(a);if(!c.isValid)return t.status(400).send(o.formatErrorResponse(`Query validation failed: ${c.errors.join(", ")}`,400));const l=await i.executeMultiCubeQuery(a,u);return o.formatCubeResponse(a,l,i)}catch(r){return e.log.error(r,"Query execution error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"Query execution failed",500))}}),s.post(`${y}/batch`,{bodyLimit:b,schema:{body:{type:"object",required:["queries"],properties:{queries:{type:"array",items:{type:"object"}}}}}},async(e,t)=>{try{const{queries:r}=e.body;if(!r||!Array.isArray(r))return t.status(400).send(o.formatErrorResponse('Request body must contain a "queries" array',400));if(r.length===0)return t.status(400).send(o.formatErrorResponse("Queries array cannot be empty",400));const a=await p(e);return await o.handleBatchRequest(r,a,i)}catch(r){return e.log.error(r,"Batch execution error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"Batch execution failed",500))}}),s.get(`${y}/meta`,async(e,t)=>{try{const r=i.getMetadata();return o.formatMetaResponse(r)}catch(r){return e.log.error(r,"Metadata error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"Failed to fetch metadata",500))}}),s.post(`${y}/sql`,{bodyLimit:b,schema:{body:{type:"object",additionalProperties:!0}}},async(e,t)=>{try{const r=e.body,a=await p(e),u=i.validateQuery(r);if(!u.isValid)return t.status(400).send(o.formatErrorResponse(`Query validation failed: ${u.errors.join(", ")}`,400));const c=r.measures?.[0]||r.dimensions?.[0];if(!c)return t.status(400).send(o.formatErrorResponse("No measures or dimensions specified",400));const l=c.split(".")[0],f=await i.generateSQL(l,r,a);return o.formatSqlResponse(r,f)}catch(r){return e.log.error(r,"SQL generation error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"SQL generation failed",500))}}),s.get(`${y}/sql`,{schema:{querystring:{type:"object",properties:{query:{type:"string"}},required:["query"]}}},async(e,t)=>{try{const{query:r}=e.query,a=JSON.parse(r),u=await p(e),c=i.validateQuery(a);if(!c.isValid)return t.status(400).send(o.formatErrorResponse(`Query validation failed: ${c.errors.join(", ")}`,400));const l=a.measures?.[0]||a.dimensions?.[0];if(!l)return t.status(400).send(o.formatErrorResponse("No measures or dimensions specified",400));const f=l.split(".")[0],Q=await i.generateSQL(f,a,u);return o.formatSqlResponse(a,Q)}catch(r){return e.log.error(r,"SQL generation error"),t.status(500).send(o.formatErrorResponse(r instanceof Error?r.message:"SQL generation failed",500))}}),s.post(`${y}/dry-run`,{bodyLimit:b,schema:{body:{type:"object",additionalProperties:!0}}},async(e,t)=>{try{const r=e.body,a=r.query||r,u=await p(e);return await o.handleDryRun(a,u,i)}catch(r){return e.log.error(r,"Dry-run error"),t.status(400).send({error:r instanceof Error?r.message:"Dry-run validation failed",valid:!1})}}),s.get(`${y}/dry-run`,{schema:{querystring:{type:"object",properties:{query:{type:"string"}},required:["query"]}}},async(e,t)=>{try{const{query:r}=e.query,a=JSON.parse(r),u=await p(e);return await o.handleDryRun(a,u,i)}catch(r){return e.log.error(r,"Dry-run error"),t.status(400).send({error:r instanceof Error?r.message:"Dry-run validation failed",valid:!1})}}),s.setErrorHandler(async(e,t,r)=>{t.log.error(e,"Fastify cube adapter error"),r.statusCode<400&&r.status(500);const a=e instanceof Error?e:String(e);return o.formatErrorResponse(a,r.statusCode)}),g()};async function M(n,s){await n.register(h,s)}function N(n){const s=require("fastify")({logger:!0});return s.register(h,n),s}exports.createCubeApp=N;exports.cubePlugin=h;exports.registerCubeRoutes=M;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { S as
|
|
1
|
+
import { S as E, d as o, f as h, h as R, a as $, b as q, c as Q } from "../compiler-DrkCCzf0.js";
|
|
2
2
|
const v = function(a, x, p) {
|
|
3
3
|
const {
|
|
4
|
-
cubes:
|
|
4
|
+
cubes: g,
|
|
5
5
|
drizzle: C,
|
|
6
6
|
schema: w,
|
|
7
7
|
extractSecurityContext: y,
|
|
@@ -11,17 +11,17 @@ const v = function(a, x, p) {
|
|
|
11
11
|
bodyLimit: m = 10485760
|
|
12
12
|
// 10MB
|
|
13
13
|
} = x;
|
|
14
|
-
if (!
|
|
14
|
+
if (!g || g.length === 0)
|
|
15
15
|
return p(new Error("At least one cube must be provided in the cubes array"));
|
|
16
16
|
f && a.register(import("@fastify/cors"), f), a.addHook("onRequest", async (r, t) => {
|
|
17
17
|
r.method === "POST" && (r.body = void 0);
|
|
18
18
|
});
|
|
19
|
-
const n = new
|
|
19
|
+
const n = new E({
|
|
20
20
|
drizzle: C,
|
|
21
21
|
schema: w,
|
|
22
22
|
engineType: S
|
|
23
23
|
});
|
|
24
|
-
|
|
24
|
+
g.forEach((r) => {
|
|
25
25
|
n.registerCube(r);
|
|
26
26
|
}), a.post(`${c}/load`, {
|
|
27
27
|
bodyLimit: m,
|
|
@@ -150,8 +150,8 @@ const v = function(a, x, p) {
|
|
|
150
150
|
"No measures or dimensions specified",
|
|
151
151
|
400
|
|
152
152
|
));
|
|
153
|
-
const d = u.split(".")[0],
|
|
154
|
-
return q(e,
|
|
153
|
+
const d = u.split(".")[0], b = await n.generateSQL(d, e, s);
|
|
154
|
+
return q(e, b);
|
|
155
155
|
} catch (e) {
|
|
156
156
|
return r.log.error(e, "SQL generation error"), t.status(500).send(o(
|
|
157
157
|
e instanceof Error ? e.message : "SQL generation failed",
|
|
@@ -182,8 +182,8 @@ const v = function(a, x, p) {
|
|
|
182
182
|
"No measures or dimensions specified",
|
|
183
183
|
400
|
|
184
184
|
));
|
|
185
|
-
const
|
|
186
|
-
return q(s,
|
|
185
|
+
const b = d.split(".")[0], j = await n.generateSQL(b, s, i);
|
|
186
|
+
return q(s, j);
|
|
187
187
|
} catch (e) {
|
|
188
188
|
return r.log.error(e, "SQL generation error"), t.status(500).send(o(
|
|
189
189
|
e instanceof Error ? e.message : "SQL generation failed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("hono"),y=require("../compiler-CMwSRhTS.cjs");var b=f=>{const u={...{origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[]},...f},h=(i=>typeof i=="string"?i==="*"?()=>i:o=>i===o?o:null:typeof i=="function"?i:o=>i.includes(o)?o:null)(u.origin),d=(i=>typeof i=="function"?i:Array.isArray(i)?()=>i:()=>[])(u.allowMethods);return async function(o,c){function n(r,e){o.res.headers.set(r,e)}const s=await h(o.req.header("origin")||"",o);if(s&&n("Access-Control-Allow-Origin",s),u.credentials&&n("Access-Control-Allow-Credentials","true"),u.exposeHeaders?.length&&n("Access-Control-Expose-Headers",u.exposeHeaders.join(",")),o.req.method==="OPTIONS"){u.origin!=="*"&&n("Vary","Origin"),u.maxAge!=null&&n("Access-Control-Max-Age",u.maxAge.toString());const r=await d(o.req.header("origin")||"",o);r.length&&n("Access-Control-Allow-Methods",r.join(","));let e=u.allowHeaders;if(!e?.length){const t=o.req.header("Access-Control-Request-Headers");t&&(e=t.split(/\s*,\s*/))}return e?.length&&(n("Access-Control-Allow-Headers",e.join(",")),o.res.headers.append("Vary","Access-Control-Request-Headers")),o.res.headers.delete("Content-Length"),o.res.headers.delete("Content-Type"),new Response(null,{headers:o.res.headers,status:204,statusText:"No Content"})}await c(),u.origin!=="*"&&o.header("Vary","Origin",{append:!0})}};function p(f){const{cubes:q,drizzle:u,schema:h,extractSecurityContext:d,engineType:i,cors:o,basePath:c="/cubejs-api/v1"}=f;if(!q||q.length===0)throw new Error("At least one cube must be provided in the cubes array");const n=new g.Hono;o&&n.use("/*",b(o));const s=new y.SemanticLayerCompiler({drizzle:u,schema:h,engineType:i});return q.forEach(r=>{s.registerCube(r)}),n.post(`${c}/load`,async r=>{try{const e=await r.req.json(),t=e.query||e,l=await d(r),a=s.validateQuery(t);if(!a.isValid)return r.json({error:`Query validation failed: ${a.errors.join(", ")}`},400);const m=await s.executeMultiCubeQuery(t,l);return r.json(y.formatCubeResponse(t,m,s))}catch(e){return console.error("Query execution error:",e),r.json({error:e instanceof Error?e.message:"Query execution failed"},500)}}),n.get(`${c}/load`,async r=>{try{const e=r.req.query("query");if(!e)return r.json({error:"Query parameter is required"},400);let t;try{t=JSON.parse(e)}catch{return r.json({error:"Invalid JSON in query parameter"},400)}const l=await d(r),a=s.validateQuery(t);if(!a.isValid)return r.json({error:`Query validation failed: ${a.errors.join(", ")}`},400);const m=await s.executeMultiCubeQuery(t,l);return r.json(y.formatCubeResponse(t,m,s))}catch(e){return console.error("Query execution error:",e),r.json({error:e instanceof Error?e.message:"Query execution failed"},500)}}),n.post(`${c}/batch`,async r=>{try{const e=await r.req.json(),{queries:t}=e;if(!t||!Array.isArray(t))return r.json({error:'Request body must contain a "queries" array'},400);if(t.length===0)return r.json({error:"Queries array cannot be empty"},400);const l=await d(r),a=await y.handleBatchRequest(t,l,s);return r.json(a)}catch(e){return console.error("Batch execution error:",e),r.json({error:e instanceof Error?e.message:"Batch execution failed"},500)}}),n.get(`${c}/meta`,r=>{try{const e=s.getMetadata();return r.json(y.formatMetaResponse(e))}catch(e){return console.error("Metadata error:",e),r.json({error:e instanceof Error?e.message:"Failed to fetch metadata"},500)}}),n.post(`${c}/sql`,async r=>{try{const e=await r.req.json(),t=await d(r),l=s.validateQuery(e);if(!l.isValid)return r.json({error:`Query validation failed: ${l.errors.join(", ")}`},400);const a=e.measures?.[0]||e.dimensions?.[0];if(!a)return r.json({error:"No measures or dimensions specified"},400);const m=a.split(".")[0],j=await s.generateSQL(m,e,t);return r.json(y.formatSqlResponse(e,j))}catch(e){return console.error("SQL generation error:",e),r.json({error:e instanceof Error?e.message:"SQL generation failed"},500)}}),n.get(`${c}/sql`,async r=>{try{const e=r.req.query("query");if(!e)return r.json({error:"Query parameter is required"},400);const t=JSON.parse(e),l=await d(r),a=s.validateQuery(t);if(!a.isValid)return r.json({error:`Query validation failed: ${a.errors.join(", ")}`},400);const m=t.measures?.[0]||t.dimensions?.[0];if(!m)return r.json({error:"No measures or dimensions specified"},400);const j=m.split(".")[0],C=await s.generateSQL(j,t,l);return r.json(y.formatSqlResponse(t,C))}catch(e){return console.error("SQL generation error:",e),r.json({error:e instanceof Error?e.message:"SQL generation failed"},500)}}),n.post(`${c}/dry-run`,async r=>{try{const e=await r.req.json(),t=e.query||e,l=await d(r),a=await y.handleDryRun(t,l,s);return r.json(a)}catch(e){return console.error("Dry-run error:",e),r.json({error:e instanceof Error?e.message:"Dry-run validation failed",valid:!1},400)}}),n.get(`${c}/dry-run`,async r=>{try{const e=r.req.query("query");if(!e)return r.json({error:"Query parameter is required",valid:!1},400);const t=JSON.parse(e),l=await d(r),a=await y.handleDryRun(t,l,s);return r.json(a)}catch(e){return console.error("Dry-run error:",e),r.json({error:e instanceof Error?e.message:"Dry-run validation failed",valid:!1},400)}}),n}function w(f,q){const u=p(q);return f.route("/",u),f}function x(f){const q=new g.Hono;return w(q,f)}exports.createCubeApp=x;exports.createCubeRoutes=p;exports.mountCubeRoutes=w;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Hono as w } from "hono";
|
|
2
|
-
import { S as x, f as j, h as Q, a as b, b as g, c as p } from "../compiler-
|
|
2
|
+
import { S as x, f as j, h as Q, a as b, b as g, c as p } from "../compiler-DrkCCzf0.js";
|
|
3
3
|
var A = (y) => {
|
|
4
4
|
const u = {
|
|
5
5
|
...{
|
|
@@ -9,12 +9,12 @@ var A = (y) => {
|
|
|
9
9
|
exposeHeaders: []
|
|
10
10
|
},
|
|
11
11
|
...y
|
|
12
|
-
},
|
|
12
|
+
}, q = /* @__PURE__ */ ((i) => typeof i == "string" ? i === "*" ? () => i : (o) => i === o ? o : null : typeof i == "function" ? i : (o) => i.includes(o) ? o : null)(u.origin), d = ((i) => typeof i == "function" ? i : Array.isArray(i) ? () => i : () => [])(u.allowMethods);
|
|
13
13
|
return async function(o, c) {
|
|
14
14
|
function n(r, e) {
|
|
15
15
|
o.res.headers.set(r, e);
|
|
16
16
|
}
|
|
17
|
-
const s = await
|
|
17
|
+
const s = await q(o.req.header("origin") || "", o);
|
|
18
18
|
if (s && n("Access-Control-Allow-Origin", s), u.credentials && n("Access-Control-Allow-Credentials", "true"), u.exposeHeaders?.length && n("Access-Control-Expose-Headers", u.exposeHeaders.join(",")), o.req.method === "OPTIONS") {
|
|
19
19
|
u.origin !== "*" && n("Vary", "Origin"), u.maxAge != null && n("Access-Control-Max-Age", u.maxAge.toString());
|
|
20
20
|
const r = await d(o.req.header("origin") || "", o);
|
|
@@ -37,7 +37,7 @@ function v(y) {
|
|
|
37
37
|
const {
|
|
38
38
|
cubes: f,
|
|
39
39
|
drizzle: u,
|
|
40
|
-
schema:
|
|
40
|
+
schema: q,
|
|
41
41
|
extractSecurityContext: d,
|
|
42
42
|
engineType: i,
|
|
43
43
|
cors: o,
|
|
@@ -49,7 +49,7 @@ function v(y) {
|
|
|
49
49
|
o && n.use("/*", A(o));
|
|
50
50
|
const s = new x({
|
|
51
51
|
drizzle: u,
|
|
52
|
-
schema:
|
|
52
|
+
schema: q,
|
|
53
53
|
engineType: i
|
|
54
54
|
});
|
|
55
55
|
return f.forEach((r) => {
|
|
@@ -134,8 +134,8 @@ function v(y) {
|
|
|
134
134
|
return r.json({
|
|
135
135
|
error: "No measures or dimensions specified"
|
|
136
136
|
}, 400);
|
|
137
|
-
const m = a.split(".")[0],
|
|
138
|
-
return r.json(g(e,
|
|
137
|
+
const m = a.split(".")[0], h = await s.generateSQL(m, e, t);
|
|
138
|
+
return r.json(g(e, h));
|
|
139
139
|
} catch (e) {
|
|
140
140
|
return console.error("SQL generation error:", e), r.json({
|
|
141
141
|
error: e instanceof Error ? e.message : "SQL generation failed"
|
|
@@ -158,7 +158,7 @@ function v(y) {
|
|
|
158
158
|
return r.json({
|
|
159
159
|
error: "No measures or dimensions specified"
|
|
160
160
|
}, 400);
|
|
161
|
-
const
|
|
161
|
+
const h = m.split(".")[0], C = await s.generateSQL(h, t, l);
|
|
162
162
|
return r.json(g(t, C));
|
|
163
163
|
} catch (e) {
|
|
164
164
|
return console.error("SQL generation error:", e), r.json({
|
|
@@ -193,16 +193,16 @@ function v(y) {
|
|
|
193
193
|
}
|
|
194
194
|
}), n;
|
|
195
195
|
}
|
|
196
|
-
function
|
|
196
|
+
function S(y, f) {
|
|
197
197
|
const u = v(f);
|
|
198
198
|
return y.route("/", u), y;
|
|
199
199
|
}
|
|
200
200
|
function H(y) {
|
|
201
201
|
const f = new w();
|
|
202
|
-
return
|
|
202
|
+
return S(f, y);
|
|
203
203
|
}
|
|
204
204
|
export {
|
|
205
205
|
H as createCubeApp,
|
|
206
206
|
v as createCubeRoutes,
|
|
207
|
-
|
|
207
|
+
S as mountCubeRoutes
|
|
208
208
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("next/server"),c=require("../compiler-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("next/server"),c=require("../compiler-CMwSRhTS.cjs");function p(s){const{cubes:t,drizzle:o,schema:a,engineType:f}=s;if(!t||t.length===0)throw new Error("At least one cube must be provided in the cubes array");const r=new c.SemanticLayerCompiler({drizzle:o,schema:a,engineType:f});return t.forEach(i=>{r.registerCube(i)}),r}function m(s,t){const o=s.headers.get("origin"),a={};return t.origin&&(typeof t.origin=="string"?a["Access-Control-Allow-Origin"]=t.origin:Array.isArray(t.origin)?o&&t.origin.includes(o)&&(a["Access-Control-Allow-Origin"]=o):typeof t.origin=="function"&&o&&t.origin(o)&&(a["Access-Control-Allow-Origin"]=o)),t.methods&&(a["Access-Control-Allow-Methods"]=t.methods.join(", ")),t.allowedHeaders&&(a["Access-Control-Allow-Headers"]=t.allowedHeaders.join(", ")),t.credentials&&(a["Access-Control-Allow-Credentials"]="true"),a}function H(s){return async function(o){const a=m(o,s);return new Response(null,{status:200,headers:a})}}function x(s){const{extractSecurityContext:t,cors:o}=s,a=p(s);return async function(r,i){try{let e;if(r.method==="POST"){const y=await r.json();e=y.query||y}else if(r.method==="GET"){const y=r.nextUrl.searchParams.get("query");if(!y)return n.NextResponse.json(c.formatErrorResponse("Query parameter is required",400),{status:400});try{e=JSON.parse(y)}catch{return n.NextResponse.json(c.formatErrorResponse("Invalid JSON in query parameter",400),{status:400})}}else return n.NextResponse.json(c.formatErrorResponse("Method not allowed",405),{status:405});const u=await t(r,i),d=a.validateQuery(e);if(!d.isValid)return n.NextResponse.json(c.formatErrorResponse(`Query validation failed: ${d.errors.join(", ")}`,400),{status:400});const l=await a.executeMultiCubeQuery(e,u),R=c.formatCubeResponse(e,l,a);return n.NextResponse.json(R,{headers:o?m(r,o):{}})}catch(e){return process.env.NODE_ENV!=="test"&&console.error("Next.js load handler error:",e),n.NextResponse.json(c.formatErrorResponse(e instanceof Error?e.message:"Query execution failed",500),{status:500})}}}function N(s){const{cors:t}=s,o=p(s);return async function(f,r){try{const i=o.getMetadata(),e=c.formatMetaResponse(i);return n.NextResponse.json(e,{headers:t?m(f,t):{}})}catch(i){return process.env.NODE_ENV!=="test"&&console.error("Next.js meta handler error:",i),n.NextResponse.json(c.formatErrorResponse(i instanceof Error?i.message:"Failed to fetch metadata",500),{status:500})}}}function j(s){const{extractSecurityContext:t,cors:o}=s,a=p(s);return async function(r,i){try{let e;if(r.method==="POST"){const h=await r.json();e=h.query||h}else if(r.method==="GET"){const h=r.nextUrl.searchParams.get("query");if(!h)return n.NextResponse.json(c.formatErrorResponse("Query parameter is required",400),{status:400});try{e=JSON.parse(h)}catch{return n.NextResponse.json(c.formatErrorResponse("Invalid JSON in query parameter",400),{status:400})}}else return n.NextResponse.json(c.formatErrorResponse("Method not allowed",405),{status:405});const u=await t(r,i),d=a.validateQuery(e);if(!d.isValid)return n.NextResponse.json(c.formatErrorResponse(`Query validation failed: ${d.errors.join(", ")}`,400),{status:400});const l=e.measures?.[0]||e.dimensions?.[0];if(!l)return n.NextResponse.json(c.formatErrorResponse("No measures or dimensions specified",400),{status:400});const R=l.split(".")[0],y=await a.generateSQL(R,e,u),w=c.formatSqlResponse(e,y);return n.NextResponse.json(w,{headers:o?m(r,o):{}})}catch(e){return process.env.NODE_ENV!=="test"&&console.error("Next.js SQL handler error:",e),n.NextResponse.json(c.formatErrorResponse(e instanceof Error?e.message:"SQL generation failed",500),{status:500})}}}function E(s){const{extractSecurityContext:t,cors:o}=s,a=p(s);return async function(r,i){try{let e;if(r.method==="POST"){const l=await r.json();e=l.query||l}else if(r.method==="GET"){const l=r.nextUrl.searchParams.get("query");if(!l)return n.NextResponse.json({error:"Query parameter is required",valid:!1},{status:400});try{e=JSON.parse(l)}catch{return n.NextResponse.json({error:"Invalid JSON in query parameter",valid:!1},{status:400})}}else return n.NextResponse.json({error:"Method not allowed",valid:!1},{status:405});const u=await t(r,i),d=await c.handleDryRun(e,u,a);return n.NextResponse.json(d,{headers:o?m(r,o):{}})}catch(e){return process.env.NODE_ENV!=="test"&&console.error("Next.js dry-run handler error:",e),n.NextResponse.json({error:e instanceof Error?e.message:"Dry-run validation failed",valid:!1},{status:400})}}}function g(s){const{extractSecurityContext:t,cors:o}=s,a=p(s);return async function(r,i){try{if(r.method!=="POST")return n.NextResponse.json(c.formatErrorResponse("Method not allowed - use POST",405),{status:405});const e=await r.json(),{queries:u}=e;if(!u||!Array.isArray(u))return n.NextResponse.json(c.formatErrorResponse('Request body must contain a "queries" array',400),{status:400});if(u.length===0)return n.NextResponse.json(c.formatErrorResponse("Queries array cannot be empty",400),{status:400});const d=await t(r,i),l=await c.handleBatchRequest(u,d,a);return n.NextResponse.json(l,{headers:o?m(r,o):{}})}catch(e){return process.env.NODE_ENV!=="test"&&console.error("Next.js batch handler error:",e),n.NextResponse.json(c.formatErrorResponse(e instanceof Error?e.message:"Batch execution failed",500),{status:500})}}}function S(s){return{load:x(s),meta:N(s),sql:j(s),dryRun:E(s),batch:g(s)}}exports.createBatchHandler=g;exports.createCubeHandlers=S;exports.createDryRunHandler=E;exports.createLoadHandler=x;exports.createMetaHandler=N;exports.createOptionsHandler=H;exports.createSqlHandler=j;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { NextResponse as
|
|
2
|
-
import { d as i, f as x, a as
|
|
3
|
-
function j(
|
|
4
|
-
const { cubes: t, drizzle: s, schema: o, engineType: y } =
|
|
1
|
+
import { NextResponse as a } from "next/server";
|
|
2
|
+
import { d as i, f as x, a as N, b as S, c as b, h as C, S as E } from "../compiler-DrkCCzf0.js";
|
|
3
|
+
function j(n) {
|
|
4
|
+
const { cubes: t, drizzle: s, schema: o, engineType: y } = n;
|
|
5
5
|
if (!t || t.length === 0)
|
|
6
6
|
throw new Error("At least one cube must be provided in the cubes array");
|
|
7
|
-
const r = new
|
|
7
|
+
const r = new E({
|
|
8
8
|
drizzle: s,
|
|
9
9
|
schema: o,
|
|
10
10
|
engineType: y
|
|
@@ -13,21 +13,21 @@ function j(a) {
|
|
|
13
13
|
r.registerCube(c);
|
|
14
14
|
}), r;
|
|
15
15
|
}
|
|
16
|
-
function m(
|
|
17
|
-
const s =
|
|
16
|
+
function m(n, t) {
|
|
17
|
+
const s = n.headers.get("origin"), o = {};
|
|
18
18
|
return t.origin && (typeof t.origin == "string" ? o["Access-Control-Allow-Origin"] = t.origin : Array.isArray(t.origin) ? s && t.origin.includes(s) && (o["Access-Control-Allow-Origin"] = s) : typeof t.origin == "function" && s && t.origin(s) && (o["Access-Control-Allow-Origin"] = s)), t.methods && (o["Access-Control-Allow-Methods"] = t.methods.join(", ")), t.allowedHeaders && (o["Access-Control-Allow-Headers"] = t.allowedHeaders.join(", ")), t.credentials && (o["Access-Control-Allow-Credentials"] = "true"), o;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function P(n) {
|
|
21
21
|
return async function(s) {
|
|
22
|
-
const o = m(s,
|
|
22
|
+
const o = m(s, n);
|
|
23
23
|
return new Response(null, {
|
|
24
24
|
status: 200,
|
|
25
25
|
headers: o
|
|
26
26
|
});
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
function v(
|
|
30
|
-
const { extractSecurityContext: t, cors: s } =
|
|
29
|
+
function v(n) {
|
|
30
|
+
const { extractSecurityContext: t, cors: s } = n, o = j(n);
|
|
31
31
|
return async function(r, c) {
|
|
32
32
|
try {
|
|
33
33
|
let e;
|
|
@@ -37,35 +37,35 @@ function v(a) {
|
|
|
37
37
|
} else if (r.method === "GET") {
|
|
38
38
|
const f = r.nextUrl.searchParams.get("query");
|
|
39
39
|
if (!f)
|
|
40
|
-
return
|
|
40
|
+
return a.json(
|
|
41
41
|
i("Query parameter is required", 400),
|
|
42
42
|
{ status: 400 }
|
|
43
43
|
);
|
|
44
44
|
try {
|
|
45
45
|
e = JSON.parse(f);
|
|
46
46
|
} catch {
|
|
47
|
-
return
|
|
47
|
+
return a.json(
|
|
48
48
|
i("Invalid JSON in query parameter", 400),
|
|
49
49
|
{ status: 400 }
|
|
50
50
|
);
|
|
51
51
|
}
|
|
52
52
|
} else
|
|
53
|
-
return
|
|
53
|
+
return a.json(
|
|
54
54
|
i("Method not allowed", 405),
|
|
55
55
|
{ status: 405 }
|
|
56
56
|
);
|
|
57
57
|
const l = await t(r, c), d = o.validateQuery(e);
|
|
58
58
|
if (!d.isValid)
|
|
59
|
-
return
|
|
59
|
+
return a.json(
|
|
60
60
|
i(`Query validation failed: ${d.errors.join(", ")}`, 400),
|
|
61
61
|
{ status: 400 }
|
|
62
62
|
);
|
|
63
63
|
const u = await o.executeMultiCubeQuery(e, l), g = x(e, u, o);
|
|
64
|
-
return
|
|
64
|
+
return a.json(g, {
|
|
65
65
|
headers: s ? m(r, s) : {}
|
|
66
66
|
});
|
|
67
67
|
} catch (e) {
|
|
68
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js load handler error:", e),
|
|
68
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js load handler error:", e), a.json(
|
|
69
69
|
i(
|
|
70
70
|
e instanceof Error ? e.message : "Query execution failed",
|
|
71
71
|
500
|
|
@@ -75,16 +75,16 @@ function v(a) {
|
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
-
function
|
|
79
|
-
const { cors: t } =
|
|
78
|
+
function H(n) {
|
|
79
|
+
const { cors: t } = n, s = j(n);
|
|
80
80
|
return async function(y, r) {
|
|
81
81
|
try {
|
|
82
|
-
const c = s.getMetadata(), e =
|
|
83
|
-
return
|
|
82
|
+
const c = s.getMetadata(), e = N(c);
|
|
83
|
+
return a.json(e, {
|
|
84
84
|
headers: t ? m(y, t) : {}
|
|
85
85
|
});
|
|
86
86
|
} catch (c) {
|
|
87
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js meta handler error:", c),
|
|
87
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js meta handler error:", c), a.json(
|
|
88
88
|
i(
|
|
89
89
|
c instanceof Error ? c.message : "Failed to fetch metadata",
|
|
90
90
|
500
|
|
@@ -94,8 +94,8 @@ function p(a) {
|
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
function
|
|
98
|
-
const { extractSecurityContext: t, cors: s } =
|
|
97
|
+
function A(n) {
|
|
98
|
+
const { extractSecurityContext: t, cors: s } = n, o = j(n);
|
|
99
99
|
return async function(r, c) {
|
|
100
100
|
try {
|
|
101
101
|
let e;
|
|
@@ -105,41 +105,41 @@ function H(a) {
|
|
|
105
105
|
} else if (r.method === "GET") {
|
|
106
106
|
const h = r.nextUrl.searchParams.get("query");
|
|
107
107
|
if (!h)
|
|
108
|
-
return
|
|
108
|
+
return a.json(
|
|
109
109
|
i("Query parameter is required", 400),
|
|
110
110
|
{ status: 400 }
|
|
111
111
|
);
|
|
112
112
|
try {
|
|
113
113
|
e = JSON.parse(h);
|
|
114
114
|
} catch {
|
|
115
|
-
return
|
|
115
|
+
return a.json(
|
|
116
116
|
i("Invalid JSON in query parameter", 400),
|
|
117
117
|
{ status: 400 }
|
|
118
118
|
);
|
|
119
119
|
}
|
|
120
120
|
} else
|
|
121
|
-
return
|
|
121
|
+
return a.json(
|
|
122
122
|
i("Method not allowed", 405),
|
|
123
123
|
{ status: 405 }
|
|
124
124
|
);
|
|
125
125
|
const l = await t(r, c), d = o.validateQuery(e);
|
|
126
126
|
if (!d.isValid)
|
|
127
|
-
return
|
|
127
|
+
return a.json(
|
|
128
128
|
i(`Query validation failed: ${d.errors.join(", ")}`, 400),
|
|
129
129
|
{ status: 400 }
|
|
130
130
|
);
|
|
131
131
|
const u = e.measures?.[0] || e.dimensions?.[0];
|
|
132
132
|
if (!u)
|
|
133
|
-
return
|
|
133
|
+
return a.json(
|
|
134
134
|
i("No measures or dimensions specified", 400),
|
|
135
135
|
{ status: 400 }
|
|
136
136
|
);
|
|
137
|
-
const g = u.split(".")[0], f = await o.generateSQL(g, e, l), w =
|
|
138
|
-
return
|
|
137
|
+
const g = u.split(".")[0], f = await o.generateSQL(g, e, l), w = S(e, f);
|
|
138
|
+
return a.json(w, {
|
|
139
139
|
headers: s ? m(r, s) : {}
|
|
140
140
|
});
|
|
141
141
|
} catch (e) {
|
|
142
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js SQL handler error:", e),
|
|
142
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js SQL handler error:", e), a.json(
|
|
143
143
|
i(
|
|
144
144
|
e instanceof Error ? e.message : "SQL generation failed",
|
|
145
145
|
500
|
|
@@ -149,8 +149,8 @@ function H(a) {
|
|
|
149
149
|
}
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
|
-
function
|
|
153
|
-
const { extractSecurityContext: t, cors: s } =
|
|
152
|
+
function p(n) {
|
|
153
|
+
const { extractSecurityContext: t, cors: s } = n, o = j(n);
|
|
154
154
|
return async function(r, c) {
|
|
155
155
|
try {
|
|
156
156
|
let e;
|
|
@@ -160,29 +160,29 @@ function A(a) {
|
|
|
160
160
|
} else if (r.method === "GET") {
|
|
161
161
|
const u = r.nextUrl.searchParams.get("query");
|
|
162
162
|
if (!u)
|
|
163
|
-
return
|
|
163
|
+
return a.json(
|
|
164
164
|
{ error: "Query parameter is required", valid: !1 },
|
|
165
165
|
{ status: 400 }
|
|
166
166
|
);
|
|
167
167
|
try {
|
|
168
168
|
e = JSON.parse(u);
|
|
169
169
|
} catch {
|
|
170
|
-
return
|
|
170
|
+
return a.json(
|
|
171
171
|
{ error: "Invalid JSON in query parameter", valid: !1 },
|
|
172
172
|
{ status: 400 }
|
|
173
173
|
);
|
|
174
174
|
}
|
|
175
175
|
} else
|
|
176
|
-
return
|
|
176
|
+
return a.json(
|
|
177
177
|
{ error: "Method not allowed", valid: !1 },
|
|
178
178
|
{ status: 405 }
|
|
179
179
|
);
|
|
180
|
-
const l = await t(r, c), d = await
|
|
181
|
-
return
|
|
180
|
+
const l = await t(r, c), d = await b(e, l, o);
|
|
181
|
+
return a.json(d, {
|
|
182
182
|
headers: s ? m(r, s) : {}
|
|
183
183
|
});
|
|
184
184
|
} catch (e) {
|
|
185
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e),
|
|
185
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js dry-run handler error:", e), a.json(
|
|
186
186
|
{
|
|
187
187
|
error: e instanceof Error ? e.message : "Dry-run validation failed",
|
|
188
188
|
valid: !1
|
|
@@ -192,32 +192,32 @@ function A(a) {
|
|
|
192
192
|
}
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
|
-
function R(
|
|
196
|
-
const { extractSecurityContext: t, cors: s } =
|
|
195
|
+
function R(n) {
|
|
196
|
+
const { extractSecurityContext: t, cors: s } = n, o = j(n);
|
|
197
197
|
return async function(r, c) {
|
|
198
198
|
try {
|
|
199
199
|
if (r.method !== "POST")
|
|
200
|
-
return
|
|
200
|
+
return a.json(
|
|
201
201
|
i("Method not allowed - use POST", 405),
|
|
202
202
|
{ status: 405 }
|
|
203
203
|
);
|
|
204
204
|
const e = await r.json(), { queries: l } = e;
|
|
205
205
|
if (!l || !Array.isArray(l))
|
|
206
|
-
return
|
|
206
|
+
return a.json(
|
|
207
207
|
i('Request body must contain a "queries" array', 400),
|
|
208
208
|
{ status: 400 }
|
|
209
209
|
);
|
|
210
210
|
if (l.length === 0)
|
|
211
|
-
return
|
|
211
|
+
return a.json(
|
|
212
212
|
i("Queries array cannot be empty", 400),
|
|
213
213
|
{ status: 400 }
|
|
214
214
|
);
|
|
215
|
-
const d = await t(r, c), u = await
|
|
216
|
-
return
|
|
215
|
+
const d = await t(r, c), u = await C(l, d, o);
|
|
216
|
+
return a.json(u, {
|
|
217
217
|
headers: s ? m(r, s) : {}
|
|
218
218
|
});
|
|
219
219
|
} catch (e) {
|
|
220
|
-
return process.env.NODE_ENV !== "test" && console.error("Next.js batch handler error:", e),
|
|
220
|
+
return process.env.NODE_ENV !== "test" && console.error("Next.js batch handler error:", e), a.json(
|
|
221
221
|
i(
|
|
222
222
|
e instanceof Error ? e.message : "Batch execution failed",
|
|
223
223
|
500
|
|
@@ -227,21 +227,21 @@ function R(a) {
|
|
|
227
227
|
}
|
|
228
228
|
};
|
|
229
229
|
}
|
|
230
|
-
function
|
|
230
|
+
function M(n) {
|
|
231
231
|
return {
|
|
232
|
-
load: v(
|
|
233
|
-
meta:
|
|
234
|
-
sql:
|
|
235
|
-
dryRun:
|
|
236
|
-
batch: R(
|
|
232
|
+
load: v(n),
|
|
233
|
+
meta: H(n),
|
|
234
|
+
sql: A(n),
|
|
235
|
+
dryRun: p(n),
|
|
236
|
+
batch: R(n)
|
|
237
237
|
};
|
|
238
238
|
}
|
|
239
239
|
export {
|
|
240
240
|
R as createBatchHandler,
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
M as createCubeHandlers,
|
|
242
|
+
p as createDryRunHandler,
|
|
243
243
|
v as createLoadHandler,
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
244
|
+
H as createMetaHandler,
|
|
245
|
+
P as createOptionsHandler,
|
|
246
|
+
A as createSqlHandler
|
|
247
247
|
};
|