react-semaphor 0.1.381 → 0.1.382
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/DATA_APP_SDK.md +238 -0
- package/README.md +7 -0
- package/dist/analytics-protocol/index.cjs +1 -1
- package/dist/analytics-protocol/index.js +45 -41
- package/dist/brand-studio/index.cjs +1 -1
- package/dist/brand-studio/index.js +6 -6
- package/dist/chunks/analyze-result-contract-CtXfp3nv.js +1 -0
- package/dist/chunks/analyze-result-contract-DuhlklhI.js +102 -0
- package/dist/chunks/{braces-BT-ZyB-g.js → braces-CGi-YFZp.js} +1 -1
- package/dist/chunks/{braces-DOxxfERN.js → braces-CP8BEzl3.js} +1 -1
- package/dist/chunks/{calendar-preferences-dialog-Dsgs8WDv.js → calendar-preferences-dialog-CV4xF2Tp.js} +3 -3
- package/dist/chunks/{calendar-preferences-dialog-iZs8XqyH.js → calendar-preferences-dialog-rDDobeLo.js} +1 -1
- package/dist/chunks/catalog-field-grounding-Bnx-3tE0.js +1 -0
- package/dist/chunks/catalog-field-grounding-CJKAqtiC.js +100 -0
- package/dist/chunks/{dashboard-briefing-launcher-Coks66cV.js → dashboard-briefing-launcher-BT00MvGB.js} +5 -5
- package/dist/chunks/{dashboard-briefing-launcher-B5vPTl8P.js → dashboard-briefing-launcher-Dcbh-mjY.js} +1 -1
- package/dist/chunks/{dashboard-controls-BfkcnIdy.js → dashboard-controls-B6y7jkKO.js} +8 -8
- package/dist/chunks/{dashboard-controls-Dyqye6fh.js → dashboard-controls-CRqnPibB.js} +1 -1
- package/dist/chunks/{dashboard-json-DjXi4cI6.js → dashboard-json-CfIUG8k1.js} +3 -3
- package/dist/chunks/{dashboard-json-CV_LnO9x.js → dashboard-json-DEQqRR1x.js} +1 -1
- package/dist/chunks/{edit-dashboard-visual-DOW1Ap1N.js → edit-dashboard-visual-DMbf89xa.js} +5 -5
- package/dist/chunks/{edit-dashboard-visual-yinO0yU-.js → edit-dashboard-visual-wDOcHak3.js} +1 -1
- package/dist/chunks/{index-DlprYjr6.js → index-BAsWLkZ8.js} +169 -168
- package/dist/chunks/{index-CkoRCh3g.js → index-CrKxP9uF.js} +5 -5
- package/dist/chunks/{layout-grid-DTbOIOsE.js → layout-grid-BsKH3TgY.js} +1 -1
- package/dist/chunks/{layout-grid-DccceHv4.js → layout-grid-jJQUqDN9.js} +1 -1
- package/dist/chunks/operators-C8TxpM4C.js +48 -0
- package/dist/chunks/operators-DrTQsJXv.js +1 -0
- package/dist/chunks/{palette-SimHJELn.js → palette-9zLPGlj2.js} +1 -1
- package/dist/chunks/{palette-DCzLwqIw.js → palette-xU9Qt6bE.js} +1 -1
- package/dist/chunks/{save-D2O96E5A.js → save-8A_q6K4E.js} +1 -1
- package/dist/chunks/{save-zNVYH02T.js → save-DzciESDh.js} +1 -1
- package/dist/chunks/{source-identity-Dj3dryN9.js → source-identity-CN4xiyKJ.js} +5 -5
- package/dist/chunks/{switch-DMPsMpHW.js → switch-DArtNJZh.js} +292 -291
- package/dist/chunks/{switch-Jhyl63RF.js → switch-k7kj6NRg.js} +1 -1
- package/dist/chunks/{use-create-flow-overlay-state-r5JKyXU8.js → use-create-flow-overlay-state-BdG1DiSx.js} +4 -4
- package/dist/chunks/{use-create-flow-overlay-state-NsqFPwdB.js → use-create-flow-overlay-state-ipeaE65_.js} +1 -1
- package/dist/chunks/{validators-CtNmgsvG.js → validators-CHPH6ORs.js} +641 -498
- package/dist/chunks/validators-lWo8m0Q7.js +1 -0
- package/dist/dashboard/index.cjs +1 -1
- package/dist/dashboard/index.js +1 -1
- package/dist/dashboard-authoring/index.cjs +3 -3
- package/dist/dashboard-authoring/index.js +105 -92
- package/dist/data-app-builder/index.cjs +1 -1
- package/dist/data-app-builder/index.js +3 -3
- package/dist/data-app-sdk/index.cjs +1 -1
- package/dist/data-app-sdk/index.js +444 -380
- package/dist/data-app-sdk-adapters/index.cjs +1 -0
- package/dist/data-app-sdk-adapters/index.js +383 -0
- package/dist/data-app-sdk-validation/index.cjs +1 -1
- package/dist/data-app-sdk-validation/index.js +1073 -6
- package/dist/index.cjs +1 -1
- package/dist/index.js +7 -7
- package/dist/surfboard/index.cjs +1 -1
- package/dist/surfboard/index.js +2 -2
- package/dist/types/analytics-protocol.d.ts +58 -31
- package/dist/types/dashboard-assistant.d.ts +40 -15
- package/dist/types/dashboard-authoring.d.ts +36 -16
- package/dist/types/dashboard.d.ts +8 -8
- package/dist/types/data-app-builder.d.ts +35 -11
- package/dist/types/data-app-sdk-adapters.d.ts +733 -0
- package/dist/types/data-app-sdk-validation.d.ts +85 -25
- package/dist/types/data-app-sdk.d.ts +99 -155
- package/dist/types/main.d.ts +35 -11
- package/dist/types/shared.d.ts +8 -8
- package/dist/types/surfboard.d.ts +8 -8
- package/dist/types/types.d.ts +8 -8
- package/package.json +9 -2
- package/src/data-app-sdk/README.md +240 -0
- package/dist/chunks/catalog-field-grounding-8L9I0zdg.js +0 -1
- package/dist/chunks/catalog-field-grounding-BK4BX8sZ.js +0 -200
- package/dist/chunks/validation-BM3-ShHV.js +0 -1003
- package/dist/chunks/validation-BVpqRFar.js +0 -1
- package/dist/chunks/validators-jpoYhpHh.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../chunks/operators-DrTQsJXv.js"),m=require("../chunks/source-identity-C-xaeE_I.js");require("../chunks/analyze-result-contract-CtXfp3nv.js");function p(i){var n,e;const t=b(i);return{version:1,kind:"metric",id:i.id,label:i.label,source:u(i),measures:t,primaryMeasure:M(i,t),dateField:i.dateField?o(i.dateField,"date"):void 0,timeGrain:i.timeGrain,dimensions:(n=i.dimensions)==null?void 0:n.map(a=>o(a,"dimension")),comparison:G(i.comparison),orderBy:i.orderBy?{field:o(i.orderBy.field),direction:i.orderBy.direction}:void 0,inputs:l(i.inputs),...i.relationshipHint?{relationshipHint:i.relationshipHint}:{},limit:i.limit,...(e=i.derivedFields)!=null&&e.length?{derivedFields:i.derivedFields}:{}}}function v(i){var n;return{...p(i),...i.timeWindow?{timeWindow:i.timeWindow}:{},...(n=i.filters)!=null&&n.length?{filters:i.filters}:{},...i.analysis?{analysis:i.analysis}:{}}}function F(i){return{...i.chartTitle?{chartTitle:i.chartTitle}:{},...i.chartType?{chartType:i.chartType}:{},...i.driverMode?{driverMode:i.driverMode}:{},...i.includePopulation!==void 0?{includePopulation:i.includePopulation}:{},...i.calendarContext?{calendarContext:i.calendarContext}:{}}}function M(i,t){if(!i.primaryMeasure)return t[0]||{name:"",role:"measure"};const n=o(i.primaryMeasure,"measure"),e=k(n,t),a=e.length===1?e[0]:void 0;return a?I(n,a):n}function b(i){const t=[];for(const n of i.measures.map(e=>o(e,"measure"))){if(!n.name)continue;const e=t.findIndex(a=>R(a,n));if(e===-1){t.push(n);continue}t[e]=I(t[e],n)}return t}function R(i,t){return m.semaphorFieldRefsMatch(i,t)&&d(i)===d(t)}function H(i,t){return d(t)===d(i)}function w(i,t){return t.name!==i.name||i.source&&!m.semaphorFieldRefsMatch(t,i)?!1:H(i,t)}function k(i,t){const n=t.filter(e=>w(i,e));return i.aggregate!==void 0,n}function d(i){return(i.aggregate||"SUM").toUpperCase()}function I(i,t){if(i.aggregate&&t.aggregate&&i.aggregate!==t.aggregate)throw new Error(`Measure "${i.name}" was requested with conflicting aggregate semantics: ${i.aggregate} and ${t.aggregate}.`);return{...m.preferSemaphorFieldRefMetadata(i,t),aggregate:i.aggregate||t.aggregate}}function A(i){var n,e;if("sort"in i)throw new Error("semaphor.records supports orderBy for a single deterministic sort. Multiple sort clauses are not supported by the analytics protocol yet.");if(!V(i))throw new Error("semaphor.records needs at least one field.");const t=B(i.fields);return{version:1,kind:"records",id:i.id,label:i.label,source:u(i),fields:t,dateField:i.dateField?o(i.dateField,"date"):void 0,timeGrain:i.timeGrain,...i.timeWindow?{timeWindow:i.timeWindow}:{},...(n=i.filters)!=null&&n.length?{filters:i.filters}:{},orderBy:i.orderBy?{field:o(i.orderBy.field),direction:i.orderBy.direction}:void 0,inputs:l(i.inputs),...i.relationshipHint?{relationshipHint:i.relationshipHint}:{},limit:i.limit,...i.pagination?{pagination:i.pagination}:{},...(e=i.derivedFields)!=null&&e.length?{derivedFields:i.derivedFields}:{}}}function B(i){return i.map(t=>{const n=o(t);if(!n.role)throw new Error(`semaphor.records field "${n.name}" needs an explicit role.`);return n})}function x(i){var t,n,e;return{version:1,kind:"inputOptions",id:i.id,label:i.label,inputId:i.inputId,source:u(i),labelField:o(i.labelField,"dimension"),valueField:o(i.valueField,"dimension"),...i.searchField?{searchField:o(i.searchField,"dimension")}:{},...(t=i.disambiguationFields)!=null&&t.length?{disambiguationFields:i.disambiguationFields.map(a=>o(a,"dimension"))}:{},...i.population?{population:i.population}:{},...i.dependencies?{dependencies:i.dependencies}:{},search:i.search,limit:i.limit,...(n=i.inputs)!=null&&n.length?{inputs:i.inputs.map(a=>f(a))}:{},...(e=i.derivedFields)!=null&&e.length?{derivedFields:i.derivedFields}:{}}}function O(i){var t;return{version:1,kind:"sql",id:i.id,label:i.label,source:i.source,sql:i.sql,...i.defaultParameters?{defaultParameters:i.defaultParameters}:{},...i.pythonCode?{pythonCode:i.pythonCode}:{},...(t=i.fields)!=null&&t.length?{fields:i.fields.map(n=>o(n))}:{},inputs:l(i.inputs),limit:i.limit,...i.pagination?{pagination:i.pagination}:{},rationale:i.rationale}}function C(i){var t,n;return{version:1,kind:"matrix",id:i.id,label:i.label,source:u(i),rows:i.rows.map(e=>g(e,"dimension")),...i.columns?{columns:i.columns.map(e=>g(e,"dimension"))}:{},values:i.values.map(P),...(t=i.filters)!=null&&t.length?{filters:i.filters}:{},inputs:l(i.inputs),...i.relationshipHint?{relationshipHint:i.relationshipHint}:{},...i.totals?{totals:i.totals}:{},...(n=i.sort)!=null&&n.length?{sort:i.sort}:{},...i.expansion?{expansion:i.expansion}:{},...i.layout?{layout:i.layout}:{},...i.displayLimits?{displayLimits:i.displayLimits}:{}}}function g(i,t){return z(i)?{...i,field:o(i.field,t)}:{field:o(i,t)}}function P(i){return T(i)?{...i,field:o(i.field,"measure")}:{field:o(i,"measure"),aggregate:i.aggregate}}function z(i){return"field"in i}function T(i){return"field"in i}function f(i){if("toAnalyticsInput"in i){const r=i.toAnalyticsInput();return{inputId:r.inputId,kind:r.kind,...r.controlRole?{controlRole:r.controlRole}:{},...r.operator?{operator:r.operator}:{},...r.field?{field:r.field}:{},...r.relationshipHint?{relationshipHint:r.relationshipHint}:{}}}if("id"in i){const r=h(i);return{inputId:r.inputId,kind:r.kind,...r.controlRole?{controlRole:r.controlRole}:{},...r.operator?{operator:r.operator}:{},...r.field?{field:r.field}:{},...r.relationshipHint?{relationshipHint:r.relationshipHint}:{}}}const t="kind"in i?i.kind:void 0,n="operator"in i?S(i.operator,i.inputId):void 0,e="controlRole"in i?i.controlRole:"role"in i?i.role:void 0,a=q(e)?e:void 0;return{inputId:i.inputId,...t?{kind:t}:{},...a?{controlRole:a}:{},...n?{operator:n}:{},...i.field?{field:i.field}:{},...i.relationshipHint?{relationshipHint:i.relationshipHint}:{}}}function q(i){return i==="grain"||i==="measure"||i==="dimension"||i==="aggregation"||i==="sqlParam"}function W(i){const t=l(i);return t.length>0?t:void 0}function y(i){return(i||[]).map(L)}function $(i){return y(i).filter(t=>t.isActive)}function h(i){if(i.kind==="filter"){const t=S(i.operator,i.id);return{inputId:i.id,kind:i.kind,label:i.label,field:o(i.field,"dimension"),operator:t||"in",...i.relationshipHint?{relationshipHint:i.relationshipHint}:{}}}return{inputId:i.id,kind:i.kind,label:i.label,controlRole:i.role}}function E(i=[]){return i.map(t=>typeof t=="object"?t:{label:String(t),value:t})}function s(i){return i==null?!1:Array.isArray(i)?i.length>0:typeof i=="string"?i.trim().length>0:!0}function L(i){if("toAnalyticsInput"in i)return i.toAnalyticsInput();if("kind"in i&&"isActive"in i)return i;if("id"in i){const t=h(i),n=Object.prototype.hasOwnProperty.call(i,"value")?i.value:i.defaultValue;return{inputId:t.inputId,kind:t.kind,label:t.label,...t.field?{field:t.field}:{},...t.operator?{operator:t.operator}:{},...t.controlRole?{controlRole:t.controlRole}:{},...t.relationshipHint?{relationshipHint:t.relationshipHint}:{},value:n,isActive:s(n)}}return{...i,kind:"filter",isActive:s(i.value),value:i.value}}function u(i){return i.source}function V(i){var t;return!!((t=i.fields)!=null&&t.length)}function o(i,t){return{...i,role:i.role||t}}function l(i){return(i||[]).map(f)}function G(i){if(i)return i}function S(i,t){if(i===void 0)return;const n=c.normalizeSemaphorInputOperator(i);if(!n)throw new Error(`useSemaphorInput "${t}" uses unsupported filter operator "${i}".`);return n}exports.hasSemaphorInputValue=s;exports.normalizeSemaphorInputOptions=E;exports.toSemaphorActiveInputSnapshots=$;exports.toSemaphorAnalysisIntent=v;exports.toSemaphorAnalysisQueryOptions=F;exports.toSemaphorInputBinding=f;exports.toSemaphorInputBindings=W;exports.toSemaphorInputOptionsIntent=x;exports.toSemaphorInputSnapshots=y;exports.toSemaphorInputSpec=h;exports.toSemaphorMatrixIntent=C;exports.toSemaphorMetricIntent=p;exports.toSemaphorRecordsIntent=A;exports.toSemaphorSqlIntent=O;
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { n as v } from "../chunks/operators-C8TxpM4C.js";
|
|
2
|
+
import { s as m, p as c } from "../chunks/source-identity-CN4xiyKJ.js";
|
|
3
|
+
import "../chunks/analyze-result-contract-DuhlklhI.js";
|
|
4
|
+
function p(i) {
|
|
5
|
+
var n, r;
|
|
6
|
+
const t = S(i);
|
|
7
|
+
return {
|
|
8
|
+
version: 1,
|
|
9
|
+
kind: "metric",
|
|
10
|
+
id: i.id,
|
|
11
|
+
label: i.label,
|
|
12
|
+
source: u(i),
|
|
13
|
+
measures: t,
|
|
14
|
+
primaryMeasure: F(i, t),
|
|
15
|
+
dateField: i.dateField ? o(i.dateField, "date") : void 0,
|
|
16
|
+
timeGrain: i.timeGrain,
|
|
17
|
+
dimensions: (n = i.dimensions) == null ? void 0 : n.map((a) => o(a, "dimension")),
|
|
18
|
+
comparison: z(i.comparison),
|
|
19
|
+
orderBy: i.orderBy ? {
|
|
20
|
+
field: o(i.orderBy.field),
|
|
21
|
+
direction: i.orderBy.direction
|
|
22
|
+
} : void 0,
|
|
23
|
+
inputs: l(i.inputs),
|
|
24
|
+
...i.relationshipHint ? { relationshipHint: i.relationshipHint } : {},
|
|
25
|
+
limit: i.limit,
|
|
26
|
+
...(r = i.derivedFields) != null && r.length ? { derivedFields: i.derivedFields } : {}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function E(i) {
|
|
30
|
+
var n;
|
|
31
|
+
return {
|
|
32
|
+
...p(i),
|
|
33
|
+
...i.timeWindow ? { timeWindow: i.timeWindow } : {},
|
|
34
|
+
...(n = i.filters) != null && n.length ? { filters: i.filters } : {},
|
|
35
|
+
...i.analysis ? { analysis: i.analysis } : {}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function L(i) {
|
|
39
|
+
return {
|
|
40
|
+
...i.chartTitle ? { chartTitle: i.chartTitle } : {},
|
|
41
|
+
...i.chartType ? { chartType: i.chartType } : {},
|
|
42
|
+
...i.driverMode ? { driverMode: i.driverMode } : {},
|
|
43
|
+
...i.includePopulation !== void 0 ? { includePopulation: i.includePopulation } : {},
|
|
44
|
+
...i.calendarContext ? { calendarContext: i.calendarContext } : {}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function F(i, t) {
|
|
48
|
+
if (!i.primaryMeasure)
|
|
49
|
+
return t[0] || { name: "", role: "measure" };
|
|
50
|
+
const n = o(i.primaryMeasure, "measure"), r = R(n, t), a = r.length === 1 ? r[0] : void 0;
|
|
51
|
+
return a ? h(n, a) : n;
|
|
52
|
+
}
|
|
53
|
+
function S(i) {
|
|
54
|
+
const t = [];
|
|
55
|
+
for (const n of i.measures.map(
|
|
56
|
+
(r) => o(r, "measure")
|
|
57
|
+
)) {
|
|
58
|
+
if (!n.name)
|
|
59
|
+
continue;
|
|
60
|
+
const r = t.findIndex(
|
|
61
|
+
(a) => M(a, n)
|
|
62
|
+
);
|
|
63
|
+
if (r === -1) {
|
|
64
|
+
t.push(n);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
t[r] = h(
|
|
68
|
+
t[r],
|
|
69
|
+
n
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return t;
|
|
73
|
+
}
|
|
74
|
+
function M(i, t) {
|
|
75
|
+
return m(i, t) && d(i) === d(t);
|
|
76
|
+
}
|
|
77
|
+
function b(i, t) {
|
|
78
|
+
return d(t) === d(i);
|
|
79
|
+
}
|
|
80
|
+
function H(i, t) {
|
|
81
|
+
return t.name !== i.name || i.source && !m(t, i) ? !1 : b(i, t);
|
|
82
|
+
}
|
|
83
|
+
function R(i, t) {
|
|
84
|
+
const n = t.filter(
|
|
85
|
+
(r) => H(i, r)
|
|
86
|
+
);
|
|
87
|
+
return i.aggregate !== void 0, n;
|
|
88
|
+
}
|
|
89
|
+
function d(i) {
|
|
90
|
+
return (i.aggregate || "SUM").toUpperCase();
|
|
91
|
+
}
|
|
92
|
+
function h(i, t) {
|
|
93
|
+
if (i.aggregate && t.aggregate && i.aggregate !== t.aggregate)
|
|
94
|
+
throw new Error(
|
|
95
|
+
`Measure "${i.name}" was requested with conflicting aggregate semantics: ${i.aggregate} and ${t.aggregate}.`
|
|
96
|
+
);
|
|
97
|
+
return {
|
|
98
|
+
...c(i, t),
|
|
99
|
+
aggregate: i.aggregate || t.aggregate
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function G(i) {
|
|
103
|
+
var n, r;
|
|
104
|
+
if ("sort" in i)
|
|
105
|
+
throw new Error(
|
|
106
|
+
"semaphor.records supports orderBy for a single deterministic sort. Multiple sort clauses are not supported by the analytics protocol yet."
|
|
107
|
+
);
|
|
108
|
+
if (!P(i))
|
|
109
|
+
throw new Error("semaphor.records needs at least one field.");
|
|
110
|
+
const t = w(i.fields);
|
|
111
|
+
return {
|
|
112
|
+
version: 1,
|
|
113
|
+
kind: "records",
|
|
114
|
+
id: i.id,
|
|
115
|
+
label: i.label,
|
|
116
|
+
source: u(i),
|
|
117
|
+
fields: t,
|
|
118
|
+
dateField: i.dateField ? o(i.dateField, "date") : void 0,
|
|
119
|
+
timeGrain: i.timeGrain,
|
|
120
|
+
...i.timeWindow ? { timeWindow: i.timeWindow } : {},
|
|
121
|
+
...(n = i.filters) != null && n.length ? { filters: i.filters } : {},
|
|
122
|
+
orderBy: i.orderBy ? {
|
|
123
|
+
field: o(i.orderBy.field),
|
|
124
|
+
direction: i.orderBy.direction
|
|
125
|
+
} : void 0,
|
|
126
|
+
inputs: l(i.inputs),
|
|
127
|
+
...i.relationshipHint ? { relationshipHint: i.relationshipHint } : {},
|
|
128
|
+
limit: i.limit,
|
|
129
|
+
...i.pagination ? { pagination: i.pagination } : {},
|
|
130
|
+
...(r = i.derivedFields) != null && r.length ? { derivedFields: i.derivedFields } : {}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function w(i) {
|
|
134
|
+
return i.map((t) => {
|
|
135
|
+
const n = o(t);
|
|
136
|
+
if (!n.role)
|
|
137
|
+
throw new Error(
|
|
138
|
+
`semaphor.records field "${n.name}" needs an explicit role.`
|
|
139
|
+
);
|
|
140
|
+
return n;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function V(i) {
|
|
144
|
+
var t, n, r;
|
|
145
|
+
return {
|
|
146
|
+
version: 1,
|
|
147
|
+
kind: "inputOptions",
|
|
148
|
+
id: i.id,
|
|
149
|
+
label: i.label,
|
|
150
|
+
inputId: i.inputId,
|
|
151
|
+
source: u(i),
|
|
152
|
+
labelField: o(i.labelField, "dimension"),
|
|
153
|
+
valueField: o(i.valueField, "dimension"),
|
|
154
|
+
...i.searchField ? { searchField: o(i.searchField, "dimension") } : {},
|
|
155
|
+
...(t = i.disambiguationFields) != null && t.length ? {
|
|
156
|
+
disambiguationFields: i.disambiguationFields.map(
|
|
157
|
+
(a) => o(a, "dimension")
|
|
158
|
+
)
|
|
159
|
+
} : {},
|
|
160
|
+
...i.population ? { population: i.population } : {},
|
|
161
|
+
...i.dependencies ? { dependencies: i.dependencies } : {},
|
|
162
|
+
search: i.search,
|
|
163
|
+
limit: i.limit,
|
|
164
|
+
...(n = i.inputs) != null && n.length ? { inputs: i.inputs.map((a) => g(a)) } : {},
|
|
165
|
+
...(r = i.derivedFields) != null && r.length ? { derivedFields: i.derivedFields } : {}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function j(i) {
|
|
169
|
+
var t;
|
|
170
|
+
return {
|
|
171
|
+
version: 1,
|
|
172
|
+
kind: "sql",
|
|
173
|
+
id: i.id,
|
|
174
|
+
label: i.label,
|
|
175
|
+
source: i.source,
|
|
176
|
+
sql: i.sql,
|
|
177
|
+
...i.defaultParameters ? { defaultParameters: i.defaultParameters } : {},
|
|
178
|
+
...i.pythonCode ? { pythonCode: i.pythonCode } : {},
|
|
179
|
+
...(t = i.fields) != null && t.length ? { fields: i.fields.map((n) => o(n)) } : {},
|
|
180
|
+
inputs: l(i.inputs),
|
|
181
|
+
limit: i.limit,
|
|
182
|
+
...i.pagination ? { pagination: i.pagination } : {},
|
|
183
|
+
rationale: i.rationale
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function q(i) {
|
|
187
|
+
var t, n;
|
|
188
|
+
return {
|
|
189
|
+
version: 1,
|
|
190
|
+
kind: "matrix",
|
|
191
|
+
id: i.id,
|
|
192
|
+
label: i.label,
|
|
193
|
+
source: u(i),
|
|
194
|
+
rows: i.rows.map((r) => s(r, "dimension")),
|
|
195
|
+
...i.columns ? {
|
|
196
|
+
columns: i.columns.map(
|
|
197
|
+
(r) => s(r, "dimension")
|
|
198
|
+
)
|
|
199
|
+
} : {},
|
|
200
|
+
values: i.values.map(k),
|
|
201
|
+
...(t = i.filters) != null && t.length ? { filters: i.filters } : {},
|
|
202
|
+
inputs: l(i.inputs),
|
|
203
|
+
...i.relationshipHint ? { relationshipHint: i.relationshipHint } : {},
|
|
204
|
+
...i.totals ? { totals: i.totals } : {},
|
|
205
|
+
...(n = i.sort) != null && n.length ? { sort: i.sort } : {},
|
|
206
|
+
...i.expansion ? { expansion: i.expansion } : {},
|
|
207
|
+
...i.layout ? { layout: i.layout } : {},
|
|
208
|
+
...i.displayLimits ? { displayLimits: i.displayLimits } : {}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function s(i, t) {
|
|
212
|
+
return A(i) ? {
|
|
213
|
+
...i,
|
|
214
|
+
field: o(i.field, t)
|
|
215
|
+
} : {
|
|
216
|
+
field: o(i, t)
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function k(i) {
|
|
220
|
+
return x(i) ? {
|
|
221
|
+
...i,
|
|
222
|
+
field: o(i.field, "measure")
|
|
223
|
+
} : {
|
|
224
|
+
field: o(i, "measure"),
|
|
225
|
+
aggregate: i.aggregate
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function A(i) {
|
|
229
|
+
return "field" in i;
|
|
230
|
+
}
|
|
231
|
+
function x(i) {
|
|
232
|
+
return "field" in i;
|
|
233
|
+
}
|
|
234
|
+
function g(i) {
|
|
235
|
+
if ("toAnalyticsInput" in i) {
|
|
236
|
+
const e = i.toAnalyticsInput();
|
|
237
|
+
return {
|
|
238
|
+
inputId: e.inputId,
|
|
239
|
+
kind: e.kind,
|
|
240
|
+
...e.controlRole ? { controlRole: e.controlRole } : {},
|
|
241
|
+
...e.operator ? { operator: e.operator } : {},
|
|
242
|
+
...e.field ? { field: e.field } : {},
|
|
243
|
+
...e.relationshipHint ? { relationshipHint: e.relationshipHint } : {}
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
if ("id" in i) {
|
|
247
|
+
const e = y(i);
|
|
248
|
+
return {
|
|
249
|
+
inputId: e.inputId,
|
|
250
|
+
kind: e.kind,
|
|
251
|
+
...e.controlRole ? { controlRole: e.controlRole } : {},
|
|
252
|
+
...e.operator ? { operator: e.operator } : {},
|
|
253
|
+
...e.field ? { field: e.field } : {},
|
|
254
|
+
...e.relationshipHint ? { relationshipHint: e.relationshipHint } : {}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
const t = "kind" in i ? i.kind : void 0, n = "operator" in i ? I(i.operator, i.inputId) : void 0, r = "controlRole" in i ? i.controlRole : "role" in i ? i.role : void 0, a = B(r) ? r : void 0;
|
|
258
|
+
return {
|
|
259
|
+
inputId: i.inputId,
|
|
260
|
+
...t ? { kind: t } : {},
|
|
261
|
+
...a ? { controlRole: a } : {},
|
|
262
|
+
...n ? { operator: n } : {},
|
|
263
|
+
...i.field ? { field: i.field } : {},
|
|
264
|
+
...i.relationshipHint ? { relationshipHint: i.relationshipHint } : {}
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function B(i) {
|
|
268
|
+
return i === "grain" || i === "measure" || i === "dimension" || i === "aggregation" || i === "sqlParam";
|
|
269
|
+
}
|
|
270
|
+
function U(i) {
|
|
271
|
+
const t = l(i);
|
|
272
|
+
return t.length > 0 ? t : void 0;
|
|
273
|
+
}
|
|
274
|
+
function C(i) {
|
|
275
|
+
return (i || []).map(O);
|
|
276
|
+
}
|
|
277
|
+
function Q(i) {
|
|
278
|
+
return C(i).filter((t) => t.isActive);
|
|
279
|
+
}
|
|
280
|
+
function y(i) {
|
|
281
|
+
if (i.kind === "filter") {
|
|
282
|
+
const t = I(i.operator, i.id);
|
|
283
|
+
return {
|
|
284
|
+
inputId: i.id,
|
|
285
|
+
kind: i.kind,
|
|
286
|
+
label: i.label,
|
|
287
|
+
field: o(i.field, "dimension"),
|
|
288
|
+
operator: t || "in",
|
|
289
|
+
...i.relationshipHint ? { relationshipHint: i.relationshipHint } : {}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
inputId: i.id,
|
|
294
|
+
kind: i.kind,
|
|
295
|
+
label: i.label,
|
|
296
|
+
controlRole: i.role
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function D(i = []) {
|
|
300
|
+
return i.map(
|
|
301
|
+
(t) => typeof t == "object" ? t : {
|
|
302
|
+
label: String(t),
|
|
303
|
+
value: t
|
|
304
|
+
}
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
function f(i) {
|
|
308
|
+
return i == null ? !1 : Array.isArray(i) ? i.length > 0 : typeof i == "string" ? i.trim().length > 0 : !0;
|
|
309
|
+
}
|
|
310
|
+
function O(i) {
|
|
311
|
+
if ("toAnalyticsInput" in i)
|
|
312
|
+
return i.toAnalyticsInput();
|
|
313
|
+
if ("kind" in i && "isActive" in i)
|
|
314
|
+
return i;
|
|
315
|
+
if ("id" in i) {
|
|
316
|
+
const t = y(i), n = Object.prototype.hasOwnProperty.call(i, "value") ? i.value : i.defaultValue;
|
|
317
|
+
return {
|
|
318
|
+
inputId: t.inputId,
|
|
319
|
+
kind: t.kind,
|
|
320
|
+
label: t.label,
|
|
321
|
+
...t.field ? { field: t.field } : {},
|
|
322
|
+
...t.operator ? { operator: t.operator } : {},
|
|
323
|
+
...t.controlRole ? { controlRole: t.controlRole } : {},
|
|
324
|
+
...t.relationshipHint ? { relationshipHint: t.relationshipHint } : {},
|
|
325
|
+
value: n,
|
|
326
|
+
isActive: f(n)
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
...i,
|
|
331
|
+
kind: "filter",
|
|
332
|
+
isActive: f(
|
|
333
|
+
i.value
|
|
334
|
+
),
|
|
335
|
+
value: i.value
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function u(i) {
|
|
339
|
+
return i.source;
|
|
340
|
+
}
|
|
341
|
+
function P(i) {
|
|
342
|
+
var t;
|
|
343
|
+
return !!((t = i.fields) != null && t.length);
|
|
344
|
+
}
|
|
345
|
+
function o(i, t) {
|
|
346
|
+
return {
|
|
347
|
+
...i,
|
|
348
|
+
role: i.role || t
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function l(i) {
|
|
352
|
+
return (i || []).map(g);
|
|
353
|
+
}
|
|
354
|
+
function z(i) {
|
|
355
|
+
if (i)
|
|
356
|
+
return i;
|
|
357
|
+
}
|
|
358
|
+
function I(i, t) {
|
|
359
|
+
if (i === void 0)
|
|
360
|
+
return;
|
|
361
|
+
const n = v(i);
|
|
362
|
+
if (!n)
|
|
363
|
+
throw new Error(
|
|
364
|
+
`useSemaphorInput "${t}" uses unsupported filter operator "${i}".`
|
|
365
|
+
);
|
|
366
|
+
return n;
|
|
367
|
+
}
|
|
368
|
+
export {
|
|
369
|
+
f as hasSemaphorInputValue,
|
|
370
|
+
D as normalizeSemaphorInputOptions,
|
|
371
|
+
Q as toSemaphorActiveInputSnapshots,
|
|
372
|
+
E as toSemaphorAnalysisIntent,
|
|
373
|
+
L as toSemaphorAnalysisQueryOptions,
|
|
374
|
+
g as toSemaphorInputBinding,
|
|
375
|
+
U as toSemaphorInputBindings,
|
|
376
|
+
V as toSemaphorInputOptionsIntent,
|
|
377
|
+
C as toSemaphorInputSnapshots,
|
|
378
|
+
y as toSemaphorInputSpec,
|
|
379
|
+
q as toSemaphorMatrixIntent,
|
|
380
|
+
p as toSemaphorMetricIntent,
|
|
381
|
+
G as toSemaphorRecordsIntent,
|
|
382
|
+
j as toSemaphorSqlIntent
|
|
383
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../chunks/validators-jpoYhpHh.js");require("../chunks/catalog-field-grounding-8L9I0zdg.js");require("../chunks/source-identity-C-xaeE_I.js");const e=require("../chunks/validation-BVpqRFar.js");exports.normalizeSemaphorAnalysisQueryOptions=e.normalizeSemaphorAnalysisQueryOptions;exports.validateSemaphorDataAppQuerySpecs=e.validateSemaphorDataAppQuerySpecs;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("../chunks/validators-lWo8m0Q7.js");require("../chunks/analyze-result-contract-CtXfp3nv.js");const q=require("../chunks/source-identity-C-xaeE_I.js"),y=require("../data-app-sdk-adapters/index.cjs"),R=require("../chunks/catalog-field-grounding-Bnx-3tE0.js");function W({intent:e,field:r,catalogField:o,relativePath:t}){const i=U({intent:e,field:r,relativePath:t});if(!i||i.allowedRelatedRoles.length===0)return!1;const a=f(r,i.selectedField),s=w(o),n=p(a);return M(s,i.allowedRelatedRoles)?n===s:!1}function J(e){return e.kind==="records"?X(e):e.kind==="metric"?Y(e):Z(e)}function w(e){const r=R.normalizeAnalyticsCatalogName(e.role);if(r==="measure")return"measure";if(r==="id")return"id";const o=R.normalizeAnalyticsCatalogDataType(e.dataType);if(r==="date"||o==="date"||o==="datetime")return"date";if(r==="dimension")return"dimension"}function M(e,r){return!!(e&&r.includes(e))}function f(e,r){const o=p(e);if(o)return e.role===o?e:{...e,role:o};const t=r?p(r):void 0;return t?{...e,role:t}:e}function u(e,r){return e.find(o=>D(o,r))}function S(e){return[...e.rows.map(r=>r.field),...(e.columns||[]).map(r=>r.field)]}function U({intent:e,field:r,relativePath:o}){if(e.kind==="records")return L(e,r,o);if(e.kind==="metric")return V(e,r,o);if(e.kind==="matrix")return G(e,r,o)}function L(e,r,o){if(o.startsWith("spec.fields."))return{allowedRelatedRoles:["dimension","date","id"]};if(o==="spec.dateField"&&!e.timeWindow)return{allowedRelatedRoles:["date"]};if(o==="spec.orderBy.field"){const t=u(B(e),r);return{selectedField:t,allowedRelatedRoles:t?x(t):[]}}}function V(e,r,o){if(o.startsWith("spec.dimensions."))return{allowedRelatedRoles:["dimension"]};if(o==="spec.orderBy.field"){const t=u(e.dimensions||[],r);return{selectedField:t,allowedRelatedRoles:t?["dimension"]:[]}}}function G(e,r,o){if(oe(o))return{allowedRelatedRoles:["dimension","date"]};if(te(o)){const t=u(S(e),r);return{selectedField:t,allowedRelatedRoles:v(t)}}}function X(e){var t,i;const r=B(e),o=(t=e.orderBy)!=null&&t.field?u(r,e.orderBy.field):void 0;return _([...r.map(a=>l(a,x(a))),...(i=e.orderBy)!=null&&i.field?[l(f(e.orderBy.field,o),o?x(o):[],{unsupportedRelatedRoleMessage:"Joined records projections support related sort fields only when the same related field is included in spec.fields.",recommendedNextStep:"Add the related sort field to spec.fields, or keep orderBy fields on the base source."})]:[]])}function Y(e){var o,t;const r=(o=e.orderBy)!=null&&o.field?u(e.dimensions||[],e.orderBy.field):void 0;return _([...e.measures.map(i=>l(i,[])),...e.primaryMeasure?[l(e.primaryMeasure,[])]:[],...(e.dimensions||[]).map(i=>l(i,["dimension"])),...e.dateField?[l({...e.dateField,role:"date"},[])]:[],...(t=e.orderBy)!=null&&t.field?[l(f(e.orderBy.field,r),r?["dimension"]:[],{unsupportedRelatedRoleMessage:"Joined metric projections support related orderBy fields only when the same related field is declared in spec.dimensions.",recommendedNextStep:"Add the related field as a metric dimension when it should participate in the grouped result, or keep orderBy fields on the base source."})]:[]])}function Z(e){const r=[...e.rows,...e.columns||[]];return _([...r.map(o=>l(o.field,v(o.field))),...r.flatMap(o=>{var a;if(((a=o.sortBy)==null?void 0:a.by.kind)!=="field")return[];const t=o.sortBy.by.field,i=u(S(e),t);return[l(f(t,i),v(i),{unsupportedRelatedRoleMessage:"Joined matrix projections support related axis sort fields only when the same related field is used as a row/column axis.",recommendedNextStep:"Use a related field as a row or column axis, or keep axis sort fields on the base source."})]}),...e.values.map(o=>l(o.field,[],{unsupportedRelatedRoleMessage:"Joined matrix projections support related row/column dimensions or dates only. Related value fields are not supported in this phase.",recommendedNextStep:"Keep matrix values on the base source, or use governed SQL for unsupported aggregate-safe joined values."})),...(e.sort||[]).flatMap(o=>{if(o.by.kind!=="field")return[];const t=o.by.field,i=u(S(e),t);return[l(f(t,i),v(i),{unsupportedRelatedRoleMessage:"Joined matrix projections support related top-level sort fields only when the same related field is used as a row/column axis.",recommendedNextStep:"Use a related field as a row or column axis, or keep matrix sort fields on the base source."})]})])}function x(e){const r=e?p(e):void 0;return r==="dimension"?["dimension"]:r==="date"?["date"]:r==="id"?["id"]:["dimension","date","id"]}function v(e){const r=e?p(e):void 0;return r==="date"?["date"]:r==="dimension"?["dimension"]:[]}function l(e,r,o={}){return{field:f(e),allowedRelatedRoles:r,...o}}function _(e){const r=[];return e.forEach(o=>{r.some(t=>ee(t,o))||r.push(o)}),r}function B(e){const r=[...e.fields];return e.dateField&&!r.some(o=>T(o,e.dateField))&&r.push({...e.dateField,role:"date"}),r}function ee(e,r){return D(e.field,r.field)&&e.allowedRelatedRoles.join("|")===r.allowedRelatedRoles.join("|")&&(e.unsupportedRelatedRoleMessage||"")===(r.unsupportedRelatedRoleMessage||"")&&(e.recommendedNextStep||"")===(r.recommendedNextStep||"")}function T(e,r){return q.semaphorFieldRefsMatch(e,r)}function D(e,r){return T(e,r)&&re(p(e),p(r))}function re(e,r){return!!(e&&(!r||e===r))}function p(e){return w(e)}function oe(e){const r=e.split(".");return r.length===4&&r[0]==="spec"&&(r[1]==="rows"||r[1]==="columns")&&b(r[2])&&r[3]==="field"}function te(e){const r=e.split(".");return r.length===6&&r[0]==="spec"&&(r[1]==="rows"||r[1]==="columns")&&b(r[2])&&r[3]==="sortBy"&&r[4]==="by"&&r[5]==="field"||r.length===5&&r[0]==="spec"&&r[1]==="sort"&&b(r[2])&&r[3]==="by"&&r[4]==="field"}function b(e){return e===void 0||e.trim()===""?!1:Number.isInteger(Number(e))&&Number(e)>=0}function ie({intent:e,field:r,relativePath:o,baseCatalog:t,fieldCatalogs:i}){const a=g(r,e.source),s=q.semaphorSourcesReferToSameDataset(a,e.source);if(!s&&!se(e.source,a))return{ok:!1,code:"invalid_source_ref",message:`Field "${r.name}" references a related Semaphor source outside the query's semantic domain.`,pathSuffix:".source",source:a};const n=s?t:k(i,a);if(!n)return{ok:!1,code:"invalid_source_ref",message:`Field "${r.name}" references a Semaphor source that is not present in the visible field catalog.`,pathSuffix:".source",source:a};const d=I(n,r,e.source);return d?!s&&!ae({intent:e,field:r,catalogField:d,relativePath:o})?{ok:!1,code:"unsupported_joined_projection",message:`Field "${r.name}" references a related Semaphor source, but this query kind does not support joined projections for that field yet.`,pathSuffix:".source",source:a}:{ok:!0,source:a,catalogField:d,usesBaseSource:s}:{ok:!1,code:"missing_field",message:`Field "${r.name}" is not visible on the selected Semaphor source.`,source:a}}function ae({intent:e,field:r,catalogField:o,relativePath:t}){return W({intent:e,field:r,catalogField:o,relativePath:t})}function se(e,r){return e.kind==="semantic"&&r.kind==="semantic"&&e.domainId===r.domainId}function k(e,r){return e.find(o=>$(o,r))}function I(e,r,o){const t=g(r,o);if($(e,t))return e.fields.find(i=>ne(i,r)&&$(e,g(i,e.source)))}function P(e){return R.normalizeAnalyticsCatalogName(e)}function g(e,r){return e.source||r}function $(e,r){return[e.source,...e.sourceAliases||[]].some(o=>q.semaphorSourcesReferToSameDataset(o,r))}function ne(e,r){return!!(e.name&&r.name&&e.name===r.name)}function z(e,r={}){const o=r.pathPrefix||"analysisOptions";if(e===void 0)return{ok:!0};if(!e||typeof e!="object"||Array.isArray(e))return c(o,"Data App analysis options must be an object.");const t=e,i={};if(t.chartTitle!==void 0){if(typeof t.chartTitle!="string")return c(`${o}.chartTitle`,'Data App analysis option "chartTitle" must be a string.');i.chartTitle=t.chartTitle}if(t.chartType!==void 0){if(typeof t.chartType!="string")return c(`${o}.chartType`,'Data App analysis option "chartType" must be a string.');i.chartType=t.chartType}if(t.driverMode!==void 0){if(!ce(t.driverMode))return c(`${o}.driverMode`,'Data App analysis option "driverMode" must be absolute_delta, largest_negative, largest_positive, positive_and_negative, or all.');i.driverMode=t.driverMode}if(t.includePopulation!==void 0){if(typeof t.includePopulation!="boolean")return c(`${o}.includePopulation`,'Data App analysis option "includePopulation" must be a boolean.');i.includePopulation=t.includePopulation}if(t.calendarContext!==void 0){const a=fe(t.calendarContext,{pathPrefix:`${o}.calendarContext`,validateTimezone:r.validateTimezone});if(!a.ok)return a;i.calendarContext=a.calendarContext}return{ok:!0,analysisOptions:i}}function de(e){const r=e.queries.map((i,a)=>le(i,a,{fieldCatalogs:e.fieldCatalogs||[],requireFieldCatalog:!!e.requireFieldCatalog,validateTimezone:e.validateTimezone})),o=r.flatMap(i=>i.diagnostics),t=r.map(i=>i.executionResult);return{ok:o.every(i=>i.severity!=="error"),diagnostics:o,queries:r,intents:r.flatMap(i=>i.intent?[i.intent]:[]),executionResults:t}}function le(e,r,o){const t=`queries.${r}`;try{const i=pe(e),a=$e(e,i),s=E.validateSemaphorAnalyticsIntent(i),n=[...ke({querySpec:e,queryId:a,intent:i,pathPrefix:t}),...s.errors.map(h=>C(h,{queryHook:e.queryHook,queryId:a,pathPrefix:t,severity:"error",intent:i})),...s.warnings.map(h=>C(h,{queryHook:e.queryHook,queryId:a,pathPrefix:t,severity:"warning",intent:i})),...ye({querySpec:e,queryId:a,intent:i,pathPrefix:t,fieldCatalogs:o.fieldCatalogs,requireFieldCatalog:o.requireFieldCatalog}),...Ie({querySpec:e,queryId:a,intent:i,pathPrefix:t,validateTimezone:o.validateTimezone})],d=be(s,n);return{queryHook:e.queryHook,queryId:a,intent:i,diagnostics:n,executionResult:j({intent:i,validation:d,diagnostics:n})}}catch(i){const a={severity:"error",code:"invalid_query_spec",message:i instanceof Error?i.message:String(i),path:t,queryHook:e.queryHook,queryId:Q(e.spec)},s=K([a]);return{queryHook:e.queryHook,queryId:a.queryId,diagnostics:[a],executionResult:j({validation:s,diagnostics:[a]})}}}function c(e,r){return{ok:!1,issues:[{code:"invalid_analysis_option",message:r,path:e}]}}function N(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function ce(e){return e==="absolute_delta"||e==="largest_negative"||e==="largest_positive"||e==="positive_and_negative"||e==="all"}function ue(e){return e.trim().length>0&&!Number.isNaN(Date.parse(e))}function fe(e,r){var d;if(!e||typeof e!="object"||Array.isArray(e))return c(r.pathPrefix,'Data App analysis option "calendarContext" must be an object.');const o=e,t=o.tz,i=o.weekStart,a=o.anchor,s=a&&typeof a=="object"&&!Array.isArray(a)?a.iso:void 0,n=typeof t=="string"?((d=r.validateTimezone)==null?void 0:d.call(r,t))??t:null;return n?typeof i!="number"||!Number.isInteger(i)||i<0||i>6?c(`${r.pathPrefix}.weekStart`,'Data App analysis option "calendarContext.weekStart" must be an integer from 0 to 6.'):a!=="now"&&!(typeof s=="string"&&ue(s))?c(`${r.pathPrefix}.anchor`,'Data App analysis option "calendarContext.anchor" must be "now" or an object with a valid iso string.'):{ok:!0,calendarContext:{tz:n,weekStart:i,anchor:a}}:c(`${r.pathPrefix}.tz`,'Data App analysis option "calendarContext.tz" must be a valid timezone string.')}function pe(e){return me(e.spec)}function me(e){if(!N(e))throw new Error("useSemaphorQuery spec must be an object.");if(e.queryKind==="metric")return y.toSemaphorMetricIntent(e);if(e.queryKind==="analysis")return y.toSemaphorAnalysisIntent(e);if(e.queryKind==="records")return y.toSemaphorRecordsIntent(e);if(e.queryKind==="sql")return y.toSemaphorSqlIntent(e);if(e.queryKind==="matrix")return y.toSemaphorMatrixIntent(e);if(e.queryKind==="inputOptions")return y.toSemaphorInputOptionsIntent(e);throw new Error("useSemaphorQuery spec.queryKind must be metric, analysis, records, inputOptions, sql, or matrix.")}function ye(e){if(e.intent.kind==="sql")return[];if(e.fieldCatalogs.length===0&&!e.requireFieldCatalog)return[];const r=k(e.fieldCatalogs,e.intent.source);if(!r)return[{severity:"error",code:"invalid_source_ref",message:`Source ref for ${e.querySpec.queryHook} does not match a visible Semaphor source.`,path:`${e.pathPrefix}.spec.source`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:e.intent.source}];const o=ge({...e,catalog:r}),t={...r,fields:[...r.fields,...Re(e.intent,r,e.intent.source)]};return[...o,...he({...e,fieldCatalogs:e.fieldCatalogs}),...qe({...e,catalog:t,fieldCatalogs:e.fieldCatalogs}),...ve({...e,catalog:t,fieldCatalogs:e.fieldCatalogs})]}function he(e){var o;if(e.intent.kind!=="inputOptions"||((o=e.intent.population)==null?void 0:o.kind)!=="related_population")return[];const r=e.intent.population.baseSource;return k(e.fieldCatalogs,r)?[]:[{severity:"error",code:"invalid_source_ref",message:"Input options related population baseSource does not match a visible Semaphor source.",path:`${e.pathPrefix}.spec.population.baseSource`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:r}]}function ge(e){const r=O(e.intent);if(r.length===0)return[];const o=[],t=new Set;return r.forEach((i,a)=>{const s=`${e.pathPrefix}.spec.derivedFields.${a}`,n=P(i.name);n&&(t.has(n)&&o.push({severity:"error",code:"duplicate_derived_field",message:`Derived field "${i.name}" is declared more than once.`,path:`${s}.name`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:e.intent.source}),t.add(n),e.catalog.fields.some(d=>P(d.name)===n)&&o.push({severity:"error",code:"derived_field_name_collision",message:`Derived field "${i.name}" conflicts with a field already visible on the selected Semaphor source.`,path:`${s}.name`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:e.intent.source})),Object.entries(i.inputs||{}).forEach(([d,h])=>{const m=xe(h);if(!m)return;const F=g(m,e.intent.source);if(!q.semaphorSourcesReferToSameDataset(F,e.intent.source)){o.push({severity:"error",code:"unsupported_derived_field_source",message:`Derived field "${i.name}" input "${d}" references a different Semaphor source. App-local derived fields must use fields from the query source.`,path:`${s}.inputs.${d}`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:F,field:m});return}I(e.catalog,m,e.intent.source)||o.push({severity:"error",code:"missing_field",message:`Derived field "${i.name}" input "${d}" references field "${m.name}", which is not visible on the selected Semaphor source.`,path:`${s}.inputs.${d}`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:F,field:m})})}),o}function qe(e){return Fe(e.intent).flatMap(({field:r,path:o})=>{const t=ie({intent:e.intent,field:r,relativePath:o,baseCatalog:e.catalog,fieldCatalogs:e.fieldCatalogs});return t.ok?[]:[{severity:"error",code:t.code,message:t.message,path:`${e.pathPrefix}.${o}${t.pathSuffix||""}`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:t.source,field:r}]})}function ve(e){return("inputs"in e.intent?e.intent.inputs||[]:[]).flatMap((o,t)=>{if(!o.field)return[];const i=g(o.field,e.intent.source);if(!q.semaphorSourcesReferToSameDataset(i,e.intent.source)){if(Se(e.intent,i)){const a=k(e.fieldCatalogs,i);return a?I(a,o.field,i)?[]:[{severity:"error",code:"missing_field",message:`Input "${o.inputId}" references field "${o.field.name}", which is not visible on the selected Semaphor source.`,path:`${e.pathPrefix}.spec.inputs.${t}.field`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:i,field:o.field}]:[{severity:"error",code:"invalid_source_ref",message:`Input "${o.inputId}" references a Semaphor source that is not present in the visible field catalog.`,path:`${e.pathPrefix}.spec.inputs.${t}.field.source`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:i,field:o.field}]}return[{severity:"error",code:"unsupported_input_filter_composition",message:`Input "${o.inputId}" filters a different Semaphor source than the query, and no relationship-aware semantic validation path is available for this query kind.`,path:`${e.pathPrefix}.spec.inputs.${t}.field`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:i,field:o.field}]}return I(e.catalog,o.field,e.intent.source)?[]:[{severity:"error",code:"missing_field",message:`Input "${o.inputId}" references field "${o.field.name}", which is not visible on the selected Semaphor source.`,path:`${e.pathPrefix}.spec.inputs.${t}.field`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:i,field:o.field}]})}function Se(e,r){return e.source.kind==="semantic"&&r.kind==="semantic"&&r.domainId===e.source.domainId}function Ie(e){if(e.querySpec.spec.queryKind!=="analysis")return[];const r=z(e.querySpec.spec,{pathPrefix:`${e.pathPrefix}.spec`,validateTimezone:e.validateTimezone});return r.ok?[]:r.issues.map(o=>({severity:"error",code:o.code,message:o.message,path:o.path,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id,source:e.intent.source}))}function ke(e){return e.querySpec.spec.queryKind!=="sql"?[]:N(e.querySpec.spec)?Object.prototype.hasOwnProperty.call(e.querySpec.spec,"parameters")?[{severity:"error",code:"deprecated_sql_parameters",message:"semaphor.sql uses defaultParameters for static SQL param(...) fallback values. The legacy parameters field is not supported.",path:`${e.pathPrefix}.spec.parameters`,queryHook:e.querySpec.queryHook,queryId:e.queryId,intentId:e.intent.id}]:[]:[]}function Fe(e){return e.kind==="metric"?[...e.measures.map((r,o)=>({field:r,path:`spec.measures.${o}`})),...e.primaryMeasure?[{field:e.primaryMeasure,path:"spec.primaryMeasure"}]:[],...e.dateField?[{field:e.dateField,path:"spec.dateField"}]:[],...(e.dimensions||[]).map((r,o)=>({field:r,path:`spec.dimensions.${o}`})),...e.orderBy?[{field:e.orderBy.field,path:"spec.orderBy.field"}]:[],...(e.filters||[]).map((r,o)=>({field:r.field,path:`spec.filters.${o}.field`}))]:e.kind==="records"?[...e.fields.map((r,o)=>({field:r,path:`spec.fields.${o}`})),...e.dateField?[{field:e.dateField,path:"spec.dateField"}]:[],...e.orderBy?[{field:e.orderBy.field,path:"spec.orderBy.field"}]:[],...(e.filters||[]).map((r,o)=>({field:r.field,path:`spec.filters.${o}.field`}))]:e.kind==="inputOptions"?[{field:e.labelField,path:"spec.labelField"},{field:e.valueField,path:"spec.valueField"},...e.searchField?[{field:e.searchField,path:"spec.searchField"}]:[],...(e.disambiguationFields||[]).map((r,o)=>({field:r,path:`spec.disambiguationFields.${o}`}))]:e.kind==="matrix"?[...e.rows.map((r,o)=>({field:r.field,path:`spec.rows.${o}.field`})),...e.rows.flatMap((r,o)=>{var t;return((t=r.sortBy)==null?void 0:t.by.kind)==="field"?[{field:r.sortBy.by.field,path:`spec.rows.${o}.sortBy.by.field`}]:[]}),...(e.columns||[]).map((r,o)=>({field:r.field,path:`spec.columns.${o}.field`})),...(e.columns||[]).flatMap((r,o)=>{var t;return((t=r.sortBy)==null?void 0:t.by.kind)==="field"?[{field:r.sortBy.by.field,path:`spec.columns.${o}.sortBy.by.field`}]:[]}),...e.values.map((r,o)=>({field:r.field,path:`spec.values.${o}.field`})),...(e.sort||[]).flatMap((r,o)=>r.by.kind==="field"?[{field:r.by.field,path:`spec.sort.${o}.by.field`}]:[]),...(e.filters||[]).map((r,o)=>({field:r.field,path:`spec.filters.${o}.field`}))]:[]}function O(e){return!("derivedFields"in e)||!Array.isArray(e.derivedFields)?[]:e.derivedFields}function Re(e,r,o){return O(e).map(t=>({name:t.name,label:t.label,role:t.resultRole,dataType:t.dataType,source:r.source||o,...t.defaultAggregate?{aggregate:t.defaultAggregate}:{}}))}function xe(e){if(!(!e||typeof e!="object"))return e.field}function C(e,r){return{severity:r.severity,code:e.code||"invalid_analytics_intent",message:e.message,path:e.path?`${r.pathPrefix}.spec.${e.path}`:r.pathPrefix,queryHook:r.queryHook,queryId:r.queryId,intentId:r.intent.id,source:r.intent.source}}function be(e,r){const o=K(r);return{ok:o.ok&&e.ok,errors:H([...e.errors,...o.errors]),warnings:H([...e.warnings,...o.warnings]),repairHints:[...e.repairHints,...o.repairHints]}}function K(e){const r=e.filter(t=>t.severity==="error").map(A),o=e.filter(t=>t.severity==="warning").map(A);return{ok:r.length===0,errors:r,warnings:o,repairHints:r.map(t=>{var i,a;return{code:t.code,message:t.message,fieldRole:t.fieldRole,invalidField:(i=t.repairHint)==null?void 0:i.invalidField,recommendedNextStep:((a=t.repairHint)==null?void 0:a.recommendedNextStep)||"Update the Data App SDK query spec to use visible Semaphor source and field refs."}})}}function A(e){var r;return{code:e.code,message:e.message,path:e.path,fieldRole:e.code==="invalid_source_ref"?"source":void 0,repairHint:{code:e.code,message:e.message,invalidField:(r=e.field)==null?void 0:r.name,fieldRole:e.code==="invalid_source_ref"?"source":void 0,recommendedNextStep:e.code==="unsupported_input_filter_composition"?"Use an input field from the same Semaphor source as the query, or split the query into separate source-scoped queries.":"Update the query spec to use a visible Semaphor source and field ref."}}}function H(e){const r=new Set;return e.filter(o=>{const t=`${o.code}:${o.path||""}:${o.message}`;return r.has(t)?!1:(r.add(t),!0)})}function j(e){var o,t;const r=e.diagnostics.filter(i=>i.severity==="error");return{intentId:(o=e.intent)==null?void 0:o.id,status:r.length?"failed":"answered",resultShape:(t=e.intent)==null?void 0:t.kind,intent:e.intent,validation:e.validation,coverage:{answeredObligations:r.length?[]:["query_spec_validation"],missingObligations:r.length?["query_spec_validation"]:[],warnings:e.validation.warnings},missingFields:r.filter(i=>i.code==="missing_field").flatMap(i=>{var a;return(a=i.field)!=null&&a.name?[i.field.name]:[]}),warnings:e.diagnostics.filter(i=>i.severity==="warning").map(i=>i.message),metadata:{validationKind:"data_app_sdk_query_spec"}}}function $e(e,r){return r.id||Q(e.spec)}function Q(e){if(!e||typeof e!="object"||!("id"in e))return;const r=e.id;return typeof r=="string"&&r.trim()?r:void 0}exports.fieldWithSelectedProjectionRole=f;exports.findMatchingRelatedProjectionField=u;exports.isAllowedRelatedProjectionRole=M;exports.matrixAxisFieldsForPolicy=S;exports.normalizeSemaphorAnalysisQueryOptions=z;exports.normalizeSemaphorFieldRole=w;exports.relatedProjectionFieldCandidatesForIntent=J;exports.validateSemaphorDataAppQuerySpecs=de;
|