react-semaphor 0.1.515 → 0.1.516

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +226 -225
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +4 -4
  5. package/dist/briefings/index.cjs +1 -1
  6. package/dist/briefings/index.js +8 -8
  7. package/dist/chunks/{calculated-field-identity-BiTGmnST.cjs → calculated-field-identity-5bg9oHTw.cjs} +1 -1
  8. package/dist/chunks/{calculated-field-identity-DnRd4YIY.js → calculated-field-identity-DzJBs2J8.js} +4 -4
  9. package/dist/chunks/{card-config-utils-B2cDWQqB.js → card-config-utils-Cxnq2R6z.js} +14 -14
  10. package/dist/chunks/{card-config-utils-CMO4_zVs.cjs → card-config-utils-z86y6tSq.cjs} +1 -1
  11. package/dist/chunks/column-bands-CU0byntA.cjs +1 -0
  12. package/dist/chunks/column-bands-RdM-kjDe.js +47 -0
  13. package/dist/chunks/{dashboard-briefing-launcher-BA_bl05p.js → dashboard-briefing-launcher-BCEHJ_eD.js} +15 -12
  14. package/dist/chunks/{dashboard-briefing-launcher-B7zqm8P1.cjs → dashboard-briefing-launcher-CjZ4aE34.cjs} +2 -2
  15. package/dist/chunks/{dashboard-controls-QMW17RKx.js → dashboard-controls-DFfit5KH.js} +12 -12
  16. package/dist/chunks/{dashboard-controls-x_v9wLOU.cjs → dashboard-controls-f9aJ70Zu.cjs} +1 -1
  17. package/dist/chunks/{dashboard-date-comparison-definition-D7Bl-YAl.js → dashboard-date-comparison-definition-BqNhECUr.js} +6 -6
  18. package/dist/chunks/{dashboard-date-comparison-definition-C_w-GO_5.cjs → dashboard-date-comparison-definition-Y6JZwpcr.cjs} +1 -1
  19. package/dist/chunks/{dashboard-json-DRnpkNwO.js → dashboard-json-DVtcA02f.js} +7 -7
  20. package/dist/chunks/{dashboard-json-0ZLLBlHj.cjs → dashboard-json-deqQC-UR.cjs} +1 -1
  21. package/dist/chunks/edit-dashboard-visual-DK6lSC_p.cjs +172 -0
  22. package/dist/chunks/{edit-dashboard-visual-1ISjhwry.js → edit-dashboard-visual-lJ6rDH3w.js} +4338 -4324
  23. package/dist/chunks/{editor-action-buttons-BTCKZERI.js → editor-action-buttons-Bnxxa439.js} +7 -7
  24. package/dist/chunks/{editor-action-buttons-Czq5SnA9.cjs → editor-action-buttons-CmDaQbPN.cjs} +1 -1
  25. package/dist/chunks/{field-aggregations-CzuQKtqx.js → field-aggregations-Dl2A3rbV.js} +461 -358
  26. package/dist/chunks/field-aggregations-pH_3kymD.cjs +1 -0
  27. package/dist/chunks/{field-dependencies-DIab72rQ.cjs → field-dependencies-EB485TdB.cjs} +1 -1
  28. package/dist/chunks/{field-dependencies-DXW4jtvJ.js → field-dependencies-v-lJNzC7.js} +1 -1
  29. package/dist/chunks/{index-Dlic9KZs.js → index-BVVl2JDK.js} +57730 -54586
  30. package/dist/chunks/index-DfqMtR9S.cjs +4 -0
  31. package/dist/chunks/index-UNKSfi7s.cjs +1434 -0
  32. package/dist/chunks/{index-v1OE4-eA.js → index-ylOpKRDu.js} +877 -849
  33. package/dist/chunks/{matrix-analytical-definition-Ct5Tu8np.cjs → matrix-analytical-definition-BWd159lN.cjs} +1 -1
  34. package/dist/chunks/{matrix-analytical-definition-BDAK2aEi.js → matrix-analytical-definition-BimC4XIV.js} +1 -1
  35. package/dist/chunks/{matrix-card-U4c72doZ.cjs → matrix-card-C2RjEYZ8.cjs} +1 -1
  36. package/dist/chunks/{matrix-card-DOIeTmjh.js → matrix-card-CIlz0Dnp.js} +2 -2
  37. package/dist/chunks/{matrix-control-sources-FjxGIbqk.cjs → matrix-control-sources-BvEJF7d3.cjs} +1 -1
  38. package/dist/chunks/{matrix-control-sources-BxKH2yu2.js → matrix-control-sources-KbZe1gj_.js} +51 -51
  39. package/dist/chunks/{matrix-definition-CBJW_4ii.cjs → matrix-definition-DanUT11P.cjs} +1 -1
  40. package/dist/chunks/{matrix-definition-I9rHB9zN.js → matrix-definition-E5gXXSTZ.js} +1 -1
  41. package/dist/chunks/matrix-formatter-BJTO8ky9.cjs +1 -0
  42. package/dist/chunks/{matrix-formatter-BdIsE7Qu.js → matrix-formatter-CCXNRt3s.js} +81 -81
  43. package/dist/chunks/{matrix-member-presentation-DO1VSqfh.js → matrix-member-presentation-Bw7-JCrr.js} +64 -64
  44. package/dist/chunks/matrix-member-presentation-DvXDEo0U.cjs +1 -0
  45. package/dist/chunks/{matrix-operation-contract-DoiWTUbT.cjs → matrix-operation-contract-0RxoU_M3.cjs} +1 -1
  46. package/dist/chunks/{matrix-operation-contract-D0HfzwZg.js → matrix-operation-contract-D32U2CSw.js} +19 -19
  47. package/dist/chunks/{metric-comparison-Dqc7_tnW.js → metric-comparison-BphoJ9bq.js} +1 -1
  48. package/dist/chunks/{metric-comparison-DBQ3EJTz.cjs → metric-comparison-CUmltzpz.cjs} +1 -1
  49. package/dist/chunks/pivot-header-presentation-BSZhB1g-.js +661 -0
  50. package/dist/chunks/pivot-header-presentation-EoUS5ze5.cjs +5 -0
  51. package/dist/chunks/{pivot-result-identity-8M-bZrw9.js → pivot-result-identity-BzUQiCEV.js} +4 -4
  52. package/dist/chunks/{pivot-result-identity-uTiylUNr.cjs → pivot-result-identity-gquWljbd.cjs} +1 -1
  53. package/dist/chunks/{pivot-result-lifecycle-vg_suUNb.cjs → pivot-result-lifecycle-gl9cBfB-.cjs} +1 -1
  54. package/dist/chunks/{pivot-result-lifecycle-CEmyU2At.js → pivot-result-lifecycle-kRhiJkzg.js} +8 -8
  55. package/dist/chunks/{raw-temporal-Bj6_w9cG.js → raw-temporal-BqOfk-xN.js} +16 -16
  56. package/dist/chunks/{raw-temporal-contract-CFLGwTiI.js → raw-temporal-contract-BQZIJ1fn.js} +1 -1
  57. package/dist/chunks/{raw-temporal-contract-DECbTuzA.cjs → raw-temporal-contract-CklMVG_1.cjs} +1 -1
  58. package/dist/chunks/{raw-temporal-CeblVJbu.cjs → raw-temporal-eJXecCyJ.cjs} +1 -1
  59. package/dist/chunks/{report-preferences-dialog-b8J6KjSy.js → report-preferences-dialog-CHXPEl7v.js} +6 -6
  60. package/dist/chunks/{report-preferences-dialog-Dr1BYwuf.cjs → report-preferences-dialog-Cto0vDwI.cjs} +1 -1
  61. package/dist/chunks/{report-runtime-context-Cs65Mrxj.js → report-runtime-context-CxIoGyNM.js} +1 -1
  62. package/dist/chunks/{report-runtime-context-DzvHBPxl.cjs → report-runtime-context-CzSrCBsu.cjs} +1 -1
  63. package/dist/chunks/{selection-reducer-BIiQXbGM.js → selection-reducer-CvCBQbl2.js} +1 -1
  64. package/dist/chunks/{selection-reducer-CGKKsaPa.cjs → selection-reducer-Kl22OzIk.cjs} +1 -1
  65. package/dist/chunks/{semantic-format-Dt-nUxFB.js → semantic-format-DwqGYx4V.js} +2 -2
  66. package/dist/chunks/{semantic-format-DFI1iszk.cjs → semantic-format-mVI32OJH.cjs} +1 -1
  67. package/dist/chunks/{source-entity-resolution-D7vnmDwm.js → source-entity-resolution-Bzefiive.js} +7 -7
  68. package/dist/chunks/{source-entity-resolution-CjbgnwyX.cjs → source-entity-resolution-R46X34SE.cjs} +1 -1
  69. package/dist/chunks/switch-DNbWXEOP.cjs +134 -0
  70. package/dist/chunks/{switch-D5_tjsIS.js → switch-DNv-hVmt.js} +8230 -7681
  71. package/dist/chunks/{temporal-bucket-B9hMwemw.js → temporal-bucket-DlFuhCnT.js} +6 -6
  72. package/dist/chunks/{temporal-bucket-contract-IWDgyTMw.js → temporal-bucket-contract-DTLDRzgV.js} +1 -1
  73. package/dist/chunks/{temporal-bucket-contract-ZctiyXYk.cjs → temporal-bucket-contract-nTv6gvX5.cjs} +1 -1
  74. package/dist/chunks/{token-types-Dl0hcKBX.js → token-types-BC6RcUY8.js} +1 -1
  75. package/dist/chunks/{token-types-Ahh5u4iT.cjs → token-types-aWrzwonf.cjs} +1 -1
  76. package/dist/chunks/{update-policy-COjFudhl.cjs → update-policy-DRDLWe7Y.cjs} +1 -1
  77. package/dist/chunks/{update-policy-BeQqjupC.js → update-policy-DhAUtiC8.js} +2 -2
  78. package/dist/chunks/{validators-CkHsAvwB.js → validators-CsdOtZI6.js} +411 -397
  79. package/dist/chunks/validators-DFeDcdpA.cjs +1 -0
  80. package/dist/dashboard/index.cjs +1 -1
  81. package/dist/dashboard/index.js +1 -1
  82. package/dist/dashboard-authoring/index.cjs +3 -3
  83. package/dist/dashboard-authoring/index.js +233 -227
  84. package/dist/data-app-builder/index.cjs +1 -1
  85. package/dist/data-app-builder/index.js +3 -3
  86. package/dist/data-app-codegen/index.cjs +1 -1
  87. package/dist/data-app-codegen/index.js +2 -2
  88. package/dist/data-app-codegen-node/index.cjs +1 -1
  89. package/dist/data-app-codegen-node/index.js +3 -3
  90. package/dist/data-app-sdk/index.cjs +1 -1
  91. package/dist/data-app-sdk/index.js +5 -5
  92. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  93. package/dist/data-app-sdk-adapters/index.js +2 -2
  94. package/dist/data-app-sdk-validation/index.cjs +1 -1
  95. package/dist/data-app-sdk-validation/index.js +5 -5
  96. package/dist/format-utils/index.cjs +3 -3
  97. package/dist/format-utils/index.js +291 -402
  98. package/dist/index.cjs +1 -1
  99. package/dist/index.js +15 -15
  100. package/dist/pdf-table-layout/index.cjs +1 -0
  101. package/dist/pdf-table-layout/index.js +993 -0
  102. package/dist/report-runtime-context/index.cjs +1 -1
  103. package/dist/report-runtime-context/index.js +2 -2
  104. package/dist/style.css +1 -1
  105. package/dist/surfboard/index.cjs +1 -1
  106. package/dist/surfboard/index.js +2 -2
  107. package/dist/types/briefings/index.d.ts +1 -1
  108. package/dist/types/components/document-sheet/document-input-bar.d.ts +1 -3
  109. package/dist/types/components/document-sheet/document-insert-picker.d.ts +37 -0
  110. package/dist/types/components/document-sheet/document-kpi-section.d.ts +17 -0
  111. package/dist/types/components/document-sheet/document-matrix-layout-context.d.ts +10 -0
  112. package/dist/types/components/document-sheet/document-matrix-section.d.ts +27 -0
  113. package/dist/types/components/document-sheet/document-measure-layer.d.ts +45 -0
  114. package/dist/types/components/document-sheet/document-outline.d.ts +7 -1
  115. package/dist/types/components/document-sheet/document-page-navigation.d.ts +22 -0
  116. package/dist/types/components/document-sheet/document-page.d.ts +9 -5
  117. package/dist/types/components/document-sheet/document-panel/document-side-panel.d.ts +36 -0
  118. package/dist/types/components/document-sheet/document-panel/inputs-panel.d.ts +9 -0
  119. package/dist/types/components/document-sheet/document-panel/page-panel.d.ts +5 -0
  120. package/dist/types/components/document-sheet/document-panel/panel-controls.d.ts +14 -0
  121. package/dist/types/components/document-sheet/document-panel/region-panels.d.ts +11 -0
  122. package/dist/types/components/document-sheet/document-panel/section-panel.d.ts +25 -0
  123. package/dist/types/components/document-sheet/document-section-print-boundary.d.ts +9 -0
  124. package/dist/types/components/document-sheet/document-table-chrome.d.ts +22 -0
  125. package/dist/types/components/document-sheet/document-table-section.d.ts +3 -7
  126. package/dist/types/components/document-sheet/document-text-preview-context.d.ts +8 -0
  127. package/dist/types/components/document-sheet/use-first-fitting-variant.d.ts +18 -0
  128. package/dist/types/components/editor/editor-main/dashboard-variable-node.d.ts +12 -2
  129. package/dist/types/components/explorer/chart-configuration/matrix-authoring-controls.d.ts +7 -2
  130. package/dist/types/components/text-variables/variable-chip-plugin.d.ts +23 -0
  131. package/dist/types/components/text-variables/variable-chip.d.ts +18 -0
  132. package/dist/types/components/text-variables/variable-picker.d.ts +27 -0
  133. package/dist/types/components/visual/settings/table-presentation-settings.d.ts +27 -1
  134. package/dist/types/index.cjs +1 -1
  135. package/dist/types/index.js +5 -5
  136. package/dist/types/lib/dashboard-inputs/text-variable-options.d.ts +15 -0
  137. package/dist/types/lib/document/document-canvas-actions.d.ts +22 -0
  138. package/dist/types/lib/document/document-edits.d.ts +119 -0
  139. package/dist/types/lib/document/document-kpi-figure.d.ts +27 -0
  140. package/dist/types/lib/document/document-kpi-layout.d.ts +29 -0
  141. package/dist/types/lib/document/document-kpi-section-edits.d.ts +15 -0
  142. package/dist/types/lib/document/document-matrix-bands.d.ts +66 -0
  143. package/dist/types/lib/document/document-matrix-print.d.ts +11 -0
  144. package/dist/types/lib/document/document-pagination.d.ts +56 -3
  145. package/dist/types/lib/document/document-panel-target.d.ts +19 -0
  146. package/dist/types/lib/document/document-section-editor.d.ts +8 -7
  147. package/dist/types/lib/document/document-section-kinds.d.ts +49 -0
  148. package/dist/types/lib/document/document-section-query-options.d.ts +25 -0
  149. package/dist/types/lib/document/document-section-render-state.d.ts +26 -0
  150. package/dist/types/lib/document/document-section-utils.d.ts +11 -4
  151. package/dist/types/lib/document/document-table-dom.d.ts +4 -6
  152. package/dist/types/lib/document/document-table-pagination-model.d.ts +0 -5
  153. package/dist/types/lib/document/document-table-print-model.d.ts +4 -3
  154. package/dist/types/lib/document/document-table-style.d.ts +15 -4
  155. package/dist/types/lib/document/document-table-surface.d.ts +15 -0
  156. package/dist/types/lib/document/document-variables.d.ts +40 -6
  157. package/dist/types/lib/document/use-document-section-data.d.ts +39 -0
  158. package/dist/types/lib/document/use-measured-document-table-layout.d.ts +50 -0
  159. package/dist/types/lib/formatters/kpi-result-values.d.ts +20 -0
  160. package/dist/types/lib/hooks/query-context/use-dashboard-card-execution-snapshot.d.ts +8 -2
  161. package/dist/types/lib/hooks/use-dashboard-frame-query.d.ts +6 -0
  162. package/dist/types/lib/hooks/use-dashboard-kpi-actions.d.ts +1 -1
  163. package/dist/types/lib/hooks/use-document-section-editor.d.ts +2 -2
  164. package/dist/types/lib/hooks/use-document-section-session.d.ts +36 -0
  165. package/dist/types/lib/hooks/use-editor-preview.d.ts +17 -0
  166. package/dist/types/lib/hooks/use-is-editing-card.d.ts +7 -0
  167. package/dist/types/lib/matrix-table/matrix-card-adapter.d.ts +2 -0
  168. package/dist/types/lib/matrix-table/matrix-card-draft.d.ts +2 -0
  169. package/dist/types/lib/matrix-table/matrix-delivery.d.ts +4 -0
  170. package/dist/types/lib/matrix-table/matrix-layout-read.d.ts +68 -0
  171. package/dist/types/lib/query-context/build-dashboard-execution-snapshot.d.ts +8 -1
  172. package/dist/types/lib/query-context/build-dashboard-frame-base-query-contexts.d.ts +4 -2
  173. package/dist/types/lib/query-context/card-execution.d.ts +30 -0
  174. package/dist/types/lib/query-context/document-section-card-query.d.ts +37 -0
  175. package/dist/types/lib/stores/dashboard-store.d.ts +12 -8
  176. package/dist/types/lib/stores/editor-store.d.ts +2 -0
  177. package/dist/types/lib/text-variables/text-variable-types.d.ts +39 -0
  178. package/dist/types/lib/types/common-types.d.ts +34 -1
  179. package/dist/types/lib/utils/card-definition.d.ts +2 -0
  180. package/dist/types/lib/utils/card-utils.d.ts +13 -6
  181. package/dist/types/pdf-table-layout.d.ts +2 -0
  182. package/dist/types/shared/analytics-protocol/index.d.ts +1 -1
  183. package/dist/types/shared/analytics-protocol/matrix-definition-contract.d.ts +45 -0
  184. package/dist/types/shared/analytics-protocol/matrix-member-presentation.d.ts +4 -0
  185. package/dist/types/shared/dashboard-authoring/document-section-cards.d.ts +56 -0
  186. package/dist/types/shared/dashboard-authoring/index.d.ts +1 -0
  187. package/dist/types/shared/dashboard-authoring/matrix-delivery.d.ts +36 -1
  188. package/dist/types/shared/format-utils/formatters/matrix-formatter.d.ts +5 -0
  189. package/dist/types/shared/format-utils/index.d.ts +1 -0
  190. package/dist/types/shared/format-utils/matrix-export-presentation.d.ts +690 -1
  191. package/dist/types/shared/format-utils/matrix-print.d.ts +38 -0
  192. package/dist/types/shared/format-utils/pdf-table-layout/column-bands.d.ts +55 -0
  193. package/dist/types/shared/format-utils/pdf-table-layout/index.d.ts +6 -0
  194. package/dist/types/shared/format-utils/pdf-table-layout/page-size.d.ts +7 -0
  195. package/dist/types/shared/format-utils/pdf-table-layout/table-column-semantics.d.ts +106 -0
  196. package/dist/types/shared/format-utils/pdf-table-layout/table-column-widths.d.ts +13 -0
  197. package/dist/types/shared/format-utils/pdf-table-layout/table-page-geometry.d.ts +19 -0
  198. package/dist/types/shared/format-utils/pdf-table-layout/wide-table-layout.d.ts +46 -0
  199. package/dist/types/shared/format-utils/table-structure.d.ts +9 -0
  200. package/package.json +6 -1
  201. package/dist/chunks/edit-dashboard-visual-CI0EqzKj.cjs +0 -172
  202. package/dist/chunks/field-aggregations-jSi77h9Z.cjs +0 -1
  203. package/dist/chunks/index-BMMXKK3G.cjs +0 -4
  204. package/dist/chunks/index-C6_xef4P.cjs +0 -1424
  205. package/dist/chunks/matrix-formatter-Dajj91Ni.cjs +0 -1
  206. package/dist/chunks/matrix-member-presentation-CFHjdrxT.cjs +0 -1
  207. package/dist/chunks/pivot-header-presentation-BIf4HW3L.js +0 -414
  208. package/dist/chunks/pivot-header-presentation-B_N11CgN.cjs +0 -5
  209. package/dist/chunks/switch-Ced9ZZwI.cjs +0 -134
  210. package/dist/chunks/validators-DVYAnnX0.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";const r=require("zod"),o=require("./validators-DVYAnnX0.cjs"),R={answerSummary:"string",responseDetail:"responseDetail",mode:"string",comparisonKind:"string",executionResult:"executionResult",compiledQuery:"unknown",data:"unknown",resultSets:"record",analysisWarnings:"unknownArray",columns:"unknownArray",records:"recordArray",rowCount:"number",rowLimitExceeded:"boolean",output:"string",querySpec:"unknown",metadata:"record",validation:"validationResult",coverage:"coverage",diagnosticFeedback:"diagnosticFeedback",missingFields:"stringArray",warnings:"unknownArray",comparison:"unknown",population:"population",comparisons:"recordArray",fieldsUsed:"compactExecutionFieldArray",primary:"recordArray",contributors:"recordArray",segments:"recordArray",periodChanges:"recordArray",changes:"recordArray",largestNegativeChanges:"recordArray",largestPositiveChanges:"recordArray",drivers:"recordArray",absoluteDeltaDrivers:"recordArray",largestNegativeDrivers:"recordArray",largestPositiveDrivers:"recordArray",periodRows:"recordArray",sql:"unknown",omitted:"stringArray"},Pe=Object.freeze({coordinates:2e4}),v=r.z.string().uuid(),p=r.z.string().min(1),Be=r.z.number().int().positive().max(Number.MAX_SAFE_INTEGER);function m(s,t,e){s.addIssue({code:"custom",path:t,message:e})}function h(s,t,e){new Set(s).size!==s.length&&m(t,e,"Duplicate identity.")}const oe=r.z.object({id:p,axis:o.matrixAxisSchema,parent:o.matrixPathSchema,position:r.z.union([r.z.object({kind:r.z.literal("first")}).strict(),r.z.object({kind:r.z.enum(["after","before"]),cursor:p}).strict()]),size:Be}).strict(),T=r.z.object({paths:r.z.array(o.matrixPathSchema).readonly(),pageIds:r.z.array(p).readonly()}).strict(),ue=r.z.object({id:p,rows:T,columns:T,measureIds:r.z.array(v).min(1).readonly()}).strict(),L=r.z.object({pages:r.z.array(oe).readonly(),blocks:r.z.array(ue).readonly()}).strict().superRefine((s,t)=>{!s.pages.length&&!s.blocks.length&&m(t,[],"Request at least one page or block."),h([...s.pages,...s.blocks].map(e=>e.id),t,[]);for(const e of s.blocks){h(e.measureIds,t,["blocks",e.id,"measureIds"]);for(const i of["rows","columns"])for(const n of e[i].pageIds)s.pages.some(a=>a.id===n&&a.axis===i)||m(t,["blocks",e.id,i],"Page reference must name a page on this axis in this operation.")}}),Me=r.z.object({spec:o.matrixSpecSchema,request:L}).strict().superRefine(({spec:s,request:t},e)=>{for(const i of t.pages)o.checkMatrixPath(s,i.axis,i.parent,e,["pages",i.id],!0),i.parent.length>=s[i.axis].length&&m(e,["pages",i.id],"Cannot request children of a leaf or empty axis.");for(const i of t.blocks){i.measureIds.some(n=>!s.measures.some(a=>a.id===n))&&m(e,["blocks",i.id],"Unknown block measure.");for(const n of["rows","columns"])for(const a of i[n].paths)o.checkMatrixPath(s,n,a,e,["blocks",i.id,n])}}),ce=r.z.object({requestId:p,axis:o.matrixAxisSchema,parent:o.matrixPathSchema,members:r.z.array(r.z.object({path:o.matrixPathSchema}).strict()).readonly(),before:p.nullable(),after:p.nullable(),exactCount:r.z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional()}).strict().superRefine((s,t)=>{s.parent.some(i=>i.member.kind==="others")&&m(t,["parent"],"Others has no children.");const e=s.members.filter(({path:i})=>{var n;return((n=i[i.length-1])==null?void 0:n.member.kind)==="others"});e.length>1&&m(t,["members"],"A page may contain Others only once."),e.length&&(s.members[s.members.length-1]!==e[0]&&m(t,["members"],"Others must be the last page member."),s.after!==null&&m(t,["after"],"Others must end the branch.")),new Set(s.members.map(i=>{var n;return(n=i.path[i.path.length-1])==null?void 0:n.levelId})).size>1&&m(t,["members"],"One page must contain one child level."),h(s.members.map(i=>o.matrixPathKey(i.path)),t,["members"]);for(const i of s.members)(i.path.length!==s.parent.length+1||o.matrixPathKey(i.path.slice(0,-1))!==o.matrixPathKey(s.parent))&&m(t,["members"],"Page members must be immediate children.")}),le=r.z.object({requestId:p,coverage:r.z.object({rowPaths:r.z.array(o.matrixPathSchema).readonly(),columnPaths:r.z.array(o.matrixPathSchema).readonly(),measureIds:r.z.array(v).readonly()}).strict(),cells:r.z.array(o.matrixCoordinateSchema.extend({value:o.semaphorScalarValueSchema}).strict()).readonly()}).strict().superRefine((s,t)=>{const e=s.coverage.rowPaths.map(o.matrixPathKey),i=s.coverage.columnPaths.map(o.matrixPathKey);h(e,t,["coverage","rowPaths"]),h(i,t,["coverage","columnPaths"]),h(s.coverage.measureIds,t,["coverage","measureIds"]);const n=new Set(e),a=new Set(i),l=new Set(s.coverage.measureIds);h(s.cells.map(c=>JSON.stringify([o.matrixPathKey(c.rowPath),o.matrixPathKey(c.columnPath),c.measureId])),t,["cells"]);for(const c of s.cells)(!n.has(o.matrixPathKey(c.rowPath))||!a.has(o.matrixPathKey(c.columnPath))||!l.has(c.measureId))&&m(t,["cells"],"Cell is outside certified coverage.")}),P=r.z.object({id:v,column:o.semaphorResultColumnSchema,nativeDataType:p,semanticFormat:o.semaphorValueFormatSchema.optional()}).strict(),de=r.z.object({levels:r.z.array(P).readonly(),measures:r.z.array(P).readonly()}).strict(),x=r.z.object({code:r.z.enum(["invalid_request","unsupported_capability","stale_cursor","forbidden","budget_exceeded","source_truncated","execution_failed","cancelled"]),message:p,detail:p.optional(),retryable:r.z.boolean(),scope:r.z.union([r.z.object({kind:r.z.literal("operation")}).strict(),r.z.object({kind:r.z.enum(["page","block"]),requestId:p}).strict()])}).strict(),me=r.z.object({dialect:r.z.enum(["postgres","clickhouse","duckdb"]),aggregates:r.z.array(o.matrixAggregateSchema).readonly()}).strict(),U=r.z.object({queryIdentity:p,descriptors:de,capabilities:me,pages:r.z.array(ce).readonly(),blocks:r.z.array(le).readonly(),failures:r.z.array(x).readonly()}).strict().superRefine((s,t)=>{const e=new Set(s.descriptors.levels.map(a=>a.id)),i=new Set(s.descriptors.measures.map(a=>a.id)),n=s.pages.flatMap(a=>[a.parent,...a.members.map(l=>l.path)]);for(const a of s.blocks)n.push(...a.coverage.rowPaths,...a.coverage.columnPaths),a.coverage.measureIds.some(l=>!i.has(l))&&m(t,["blocks",a.requestId],"Coverage references an unknown measure descriptor.");n.some(a=>a.some(l=>!e.has(l.levelId)))&&m(t,["descriptors"],"Acquired paths require level descriptors."),h([...s.descriptors.levels,...s.descriptors.measures].map(a=>a.id),t,["descriptors"]),h([...s.pages,...s.blocks].map(a=>a.requestId),t,[]),h(s.failures.map(a=>a.scope.kind==="operation"?"operation":a.scope.requestId),t,["failures"]);for(const a of s.failures)if(a.scope.kind==="operation")m(t,["failures"],"Operation failure cannot accompany acquired data.");else{const l=a.scope.requestId;[...s.pages,...s.blocks].some(c=>c.requestId===l)&&m(t,["failures"],"A requested unit cannot both succeed and fail.")}}),De=r.z.union([r.z.object({status:r.z.enum(["success","partial"]),window:U}).strict(),r.z.object({status:r.z.literal("failed"),failure:x}).strict()]).superRefine((s,t)=>{if(s.status==="failed")return;const{window:e}=s;!e.pages.length&&!e.blocks.length&&m(t,["window"],"A window outcome requires successful acquired work."),s.status==="success"!=(e.failures.length===0)&&m(t,["status"],"Status must match failure coverage.")}),G=r.z.object({kind:r.z.literal("matrix"),window:U}).strict(),pe=r.z.enum(["member","subtotal","grand_total"]),fe=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("hierarchy"),label:r.z.string()}).strict(),r.z.object({kind:r.z.literal("level"),levelId:v,label:r.z.string()}).strict(),r.z.object({kind:r.z.literal("measure"),measureId:v,columnPath:o.matrixPathSchema,role:pe,label:r.z.string()}).strict()]),he=r.z.object({columns:r.z.array(fe).readonly(),descriptors:de}).strict(),B=r.z.union([r.z.object({kind:r.z.literal("value"),value:o.semaphorScalarValueSchema.refine(s=>s!==null)}).strict(),r.z.object({kind:r.z.enum(["null","empty"])}).strict()]),ye=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("layout"),rowPath:o.matrixPathSchema,role:pe,values:r.z.array(B).readonly()}).strict(),r.z.object({kind:r.z.literal("flat"),rowPath:o.matrixPathSchema,columnPath:o.matrixPathSchema,values:r.z.array(B).readonly()}).strict()]),Ve=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("layout"),layout:he,next:p}).strict(),r.z.object({kind:r.z.literal("rows"),rows:r.z.array(ye).readonly(),next:p.nullable()}).strict()]),Q=r.z.object({intent:o.matrixAnalyticalIntentSchema,matrixWindowRequest:L}).strict(),w="semaphor-data-app-codegen-summary/v1",Le="semaphor-data-app-codegen-summary-validator/v2",Ue=new Set(["metric","records","matrix","analysis","sql_fallback"]),Ge=new Set(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]),Qe=new Set(["SUM","COUNT","AVG","MIN","MAX","MEDIAN","DISTINCT"]),We=new Set(["absolute_delta","largest_negative","largest_positive","positive_and_negative","all"]),ge=new Set(["source","id","label","measures","primaryMeasure","dateField","timeGrain","dimensions","comparison","orderBy","filters","relationshipHint","limit","derivedFields"]),He=new Set([...ge,"analysis","timeWindow","filters","driverMode","includePopulation","calendarContext","chartTitle","chartType"]),Ye=new Set(["source","id","label","fields","dateField","timeGrain","timeWindow","filters","orderBy","relationshipHint","limit","pagination","totals","derivedFields"]),Je=new Set(["source","id","label","sql","defaultParameters","pythonCode","fields","limit","pagination","rationale"]),Ze=new Set(["kpi","line_chart","bar_chart","stacked_bar_chart","pie_chart","donut_chart","area_chart","table","matrix","narrative","text_block","custom"]),Xe=new Set(["missing_measure","missing_dimension","missing_date","missing_relationship","missing_semantic_role","missing_current_app_state","raw_identifier_filter_options","unsupported_change_intent","ambiguous_field_grounding","bounded_intent_unavailable","invalid_bounded_intent_output","latest_snapshot_selector_not_modeled","unsupported_grain","requires_sql_escape_hatch","unsupported_sdk_capability"]);function et(s){return W(s).ok}function W(s){const t=[];if(!s||typeof s!="object")return{ok:!1,issues:["Summary must be an object."]};const e=s;return e.schemaVersion!==w&&t.push(`schemaVersion must be ${w}.`),(typeof e.title!="string"||!e.title.trim())&&t.push("title is required."),Array.isArray(e.sources)||t.push("sources must be an array."),Array.isArray(e.inputs)||t.push("inputs must be an array."),Array.isArray(e.views)||t.push("views must be an array."),Array.isArray(e.filterContracts)||t.push("filterContracts must be an array."),(!e.implementationChecklist||typeof e.implementationChecklist!="object")&&t.push("implementationChecklist must be an object."),e.implementationChecklist&&typeof e.implementationChecklist=="object"&&t.push(...st(e.implementationChecklist)),Array.isArray(e.sources)&&e.sources.forEach((i,n)=>{t.push(...C(i,`sources.${n}`))}),Array.isArray(e.inputs)&&e.inputs.forEach((i,n)=>{t.push(...it(i,`inputs.${n}`))}),Array.isArray(e.views)&&e.views.forEach((i,n)=>{t.push(...rt(i,`views.${n}`))}),Array.isArray(e.filterContracts)&&e.filterContracts.forEach((i,n)=>{t.push(...ft(i,`filterContracts.${n}`))}),e.unsupportedInsights!==void 0&&(Array.isArray(e.unsupportedInsights)?e.unsupportedInsights.forEach((i,n)=>{t.push(...xt(i,`unsupportedInsights.${n}`))}):t.push("unsupportedInsights must be an array.")),t.push(...tt(e)),{ok:t.length===0,issues:t}}function tt(s){const t=Array.isArray(s.unsupportedInsights)&&s.unsupportedInsights.some(l=>{var c;return ie.has((c=u(l))==null?void 0:c.reason)}),e=Array.isArray(s.views)&&s.views.some(l=>{var d;const c=u((d=u(l))==null?void 0:d.computation);return(c==null?void 0:c.kind)==="unsupported"&&ie.has(c.reason)});if(!t&&!e)return[];const i=[],n=u(s.validation);(n==null?void 0:n.status)!=="blocked"&&i.push("validation.status must be blocked when semantic model repair gaps are present.");const a=u(s.nextRequiredTool);return(a==null?void 0:a.name)!=="semaphor_propose_semantic_model_change"&&i.push("nextRequiredTool.name must be semaphor_propose_semantic_model_change when semantic model repair gaps are present."),i}const ie=new Set(["missing_relationship","raw_identifier_filter_options"]);function C(s,t){const e=u(s);return e?e.kind==="semantic"?typeof e.domainId=="string"&&e.domainId.trim()&&typeof e.datasetName=="string"&&e.datasetName.trim()?[]:[`${t} must include sourceKey or a supported source identity.`]:typeof e.sourceKey=="string"&&e.sourceKey.trim()?[]:e.kind==="physical"&&typeof e.tableName=="string"&&e.tableName.trim()&&typeof e.connectionId=="string"&&e.connectionId.trim()?[]:e.kind==="sql"&&typeof e.connectionId=="string"&&e.connectionId.trim()?[]:[`${t} must include sourceKey or a supported source identity.`]:[`${t} must be an object.`]}function st(s){const t=u(s);if(!t)return["implementationChecklist must be an object."];const e=[],i=["requiredDevtools","requiredInputOptions","filterScopeByInput","bindingsByView","validationCommands","browserSmokeChecks"];for(const a of i)a in t||e.push(`implementationChecklist.${a} is required.`);const n=u(t.requiredDevtools);return n?typeof n.mountRootDevtools!="boolean"&&e.push("implementationChecklist.requiredDevtools.mountRootDevtools must be a boolean."):e.push("implementationChecklist.requiredDevtools must be an object."),Array.isArray(t.requiredInputOptions)||e.push("implementationChecklist.requiredInputOptions must be an array."),Array.isArray(t.filterScopeByInput)||e.push("implementationChecklist.filterScopeByInput must be an array."),u(t.bindingsByView)||e.push("implementationChecklist.bindingsByView must be an object."),y(t.validationCommands)||e.push("implementationChecklist.validationCommands must be an array of strings."),y(t.browserSmokeChecks)||e.push("implementationChecklist.browserSmokeChecks must be an array of strings."),e}function it(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.id!="string"||!e.id.trim())&&i.push(`${t}.id is required.`),e.fieldRef&&i.push(...f(e.fieldRef,`${t}.fieldRef`)),i.push(...Se(e.optionQuery,`${t}.optionQuery`)),y(e.appliesToViewIds)||i.push(`${t}.appliesToViewIds must be an array of strings.`),e.bindings!==void 0&&!Array.isArray(e.bindings)&&i.push(`${t}.bindings must be an array.`),Array.isArray(e.bindings)&&e.bindings.forEach((n,a)=>{const l=u(n);if(!l){i.push(`${t}.bindings.${a} must be an object.`);return}y(l.appliesToViewIds)||i.push(`${t}.bindings.${a}.appliesToViewIds must be an array of strings.`),i.push(...f(l.fieldRef,`${t}.bindings.${a}.fieldRef`))}),i}function rt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];if((typeof e.id!="string"||!e.id.trim())&&i.push(`${t}.id is required.`),e.visualSpec!==void 0&&i.push(...$t(e.visualSpec,`${t}.visualSpec`)),e.computation!==void 0&&i.push(...Rt(e.computation,`${t}.computation`)),vt(e))return i.push(...q(e,`${t}`)),e.fields!==void 0&&(Array.isArray(e.fields)?e.fields.forEach((d,g)=>{i.push(...f(d,`${t}.fields.${g}`))}):i.push(`${t}.fields must be an array.`)),e.queryKind!==void 0&&i.push(`${t}.queryKind is not allowed for non-executable views.`),e.sdkBuilder!==void 0&&i.push(`${t}.sdkBuilder is not allowed for non-executable views.`),e.sdkSpec!==void 0&&i.push(`${t}.sdkSpec is not allowed for non-executable views.`),i;if(!Array.isArray(e.fields))return i.push(`${t}.fields must be an array.`),(e.sdkSpec!==void 0||e.sdkBuilder!==void 0)&&i.push(`${t}.fields must be an array for executable views.`),i.push(...q(e,`${t}`)),i;e.fields.forEach((d,g)=>{i.push(...f(d,`${t}.fields.${g}`))}),z(e.queryKind)||i.push(`${t}.queryKind must be a supported codegen query kind.`),e.sdkBuilder!==void 0&&!ve(e.sdkBuilder)&&i.push(`${t}.sdkBuilder must be a supported SDK builder.`),e.metricBindingKeys!==void 0&&(Array.isArray(e.metricBindingKeys)?e.metricBindingKeys.some(d=>typeof d!="string"||d.trim().length===0)&&i.push(`${t}.metricBindingKeys must be an array of strings.`):i.push(`${t}.metricBindingKeys must be an array of strings.`));const n=u(e.sdkSpec),a=(n==null?void 0:n.builder)==="semaphor.metric";a&&(!Array.isArray(e.metricBindingKeys)||e.metricBindingKeys.length===0)&&i.push(`${t}.metricBindingKeys is required for metric views.`);const l=nt(e);a&&Array.isArray(e.metricBindingKeys)&&l&&JSON.stringify(e.metricBindingKeys)!==JSON.stringify(l)&&i.push(`${t}.metricBindingKeys must match the generated metric field binding keys in order.`);const c=u(e.computation);return(c==null?void 0:c.kind)==="server_query"&&z(e.queryKind)&&z(c.queryKind)&&c.queryKind!==e.queryKind&&i.push(`${t}.computation.queryKind must match queryKind.`),i.push(...ht({value:e.sdkSpec,path:`${t}.sdkSpec`,queryKind:typeof e.queryKind=="string"?e.queryKind:void 0,sdkBuilder:typeof e.sdkBuilder=="string"?e.sdkBuilder:void 0}),...q(e,`${t}`)),i}function nt(s){const t=u(s.sdkSpec);if((t==null?void 0:t.builder)!=="semaphor.metric")return;const e=u(t.spec);if(!e)return;const n=[e.primaryMeasure,...Array.isArray(e.measures)?e.measures:[]].map(at).filter(a=>!!a);return Array.from(new Map(n.map(a=>[a.identity,a.bindingKey])).values())}function at(s){const t=u(s);if(!t||typeof t.name!="string"||!t.name.trim())return;const e=ot(t);return e?{identity:JSON.stringify({source:e,name:t.name,aggregate:be(t)}),bindingKey:ut(t)}:void 0}function ot(s){if(typeof s.sourceKey=="string"&&s.sourceKey.trim())return{sourceKey:s.sourceKey};const t=u(s.source);if(t)return{kind:t.kind,domainId:t.domainId,datasetId:t.datasetId,datasetName:t.datasetName,name:t.name}}function ut(s){return typeof s.sourceKey=="string"&&s.sourceKey.trim()?[s.sourceKey,be(s),s.name].filter(Boolean).join(":"):o.semaphorMetricMeasureBindingKey(s)}function be(s){return o.semaphorMetricAggregate(s)}function q(s,t){var g;const e=u((g=u(s.visualSpec))==null?void 0:g.tableBehavior),i=u(s.sdkSpec),n=u(i==null?void 0:i.spec),a=typeof(i==null?void 0:i.builder)=="string"?i.builder:void 0,l=a==="semaphor.records"?u(n==null?void 0:n.totals):void 0,c=[];if(!e)return l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),c;const d=u(e.totals);return d?(d.mode==="server"&&(a!=="semaphor.records"&&c.push(`${t}.visualSpec.tableBehavior.totals.mode server is only supported for semaphor.records views.`),!l||l.mode!=="server"?c.push(`${t}.sdkSpec.spec.totals.mode must be server when tableBehavior.totals.mode is server.`):c.push(...ct({left:d.measures,right:l.measures,leftPath:`${t}.visualSpec.tableBehavior.totals.measures`,rightPath:`${t}.sdkSpec.spec.totals.measures`}))),d.mode!=="server"&&l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),a==="semaphor.sql"&&d.mode!=="none"&&c.push(`${t}.visualSpec.tableBehavior.totals.mode must be none for semaphor.sql views.`),a==="semaphor.sql"&&u(n==null?void 0:n.totals)&&c.push(`${t}.sdkSpec.spec.totals is not supported for semaphor.sql.`),c):(l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),c)}function ct({left:s,right:t,leftPath:e,rightPath:i}){if(!Array.isArray(s)||!Array.isArray(t))return[`${i} must match ${e}.`];const n=[];return s.length!==t.length?(n.push(`${i} must match ${e}.`),n):(s.forEach((a,l)=>{lt(u(a),u(t[l]))||n.push(`${i}.${l} must match ${e}.${l}.`)}),n)}function lt(s,t){return!s||!t?!1:s.name===t.name&&(s.role||"measure")===(t.role||"measure")&&re(s)===re(t)&&dt(s,t)}function re(s){return typeof s.aggregate=="string"?s.aggregate.toUpperCase():"SUM"}function dt(s,t){const e=u(s.source),i=u(t.source);if(mt(e,i))return!1;const n=ne(s),a=ne(t);if(n.size>0||a.size>0){for(const l of n)if(a.has(l))return!0;return!1}return!e||!i||e.kind!==i.kind?!1:e.kind==="semantic"?e.domainId===i.domainId&&e.datasetName===i.datasetName&&(e.datasetId===void 0||i.datasetId===void 0||e.datasetId===i.datasetId):e.kind==="physical"?e.connectionId===i.connectionId&&e.tableName===i.tableName:e.kind==="sql"?e.connectionId===i.connectionId:!1}function mt(s,t){if(!s||!t||s.kind!=="semantic"||t.kind!=="semantic")return!1;const e=typeof s.datasetId=="string"?s.datasetId.trim():"",i=typeof t.datasetId=="string"?t.datasetId.trim():"";return!!(e&&i&&e!==i)}function ne(s){const t=typeof s.sourceKey=="string"?s.sourceKey.trim():"";return t?new Set([t]):pt(u(s.source))}function pt(s){const t=new Set;if(!s)return t;const e=typeof s.sourceKey=="string"?s.sourceKey.trim():"";if(e&&t.add(e),s.kind==="semantic"){const i=typeof s.domainId=="string"?s.domainId:"",n=typeof s.datasetName=="string"?s.datasetName:"",a=typeof s.datasetId=="string"?s.datasetId:"";i&&a&&t.add(`semantic:${i}:datasetId:${a}`),i&&n&&t.add(`semantic:${i}:datasetName:${n}`)}if(s.kind==="physical"){const i=typeof s.connectionId=="string"?s.connectionId:"",n=typeof s.tableName=="string"?s.tableName:"",a=typeof s.databaseName=="string"?s.databaseName:"",l=typeof s.schemaName=="string"?s.schemaName:"";i&&n&&(t.add(["physical",i,a,l,n].join(":")),t.add(`physical:${i}:${n}`))}if(s.kind==="sql"){const i=typeof s.connectionId=="string"?s.connectionId:"",n=typeof s.dialect=="string"?s.dialect:"",a=typeof s.label=="string"?s.label:"";i&&(t.add(["sql",i,n,a].join(":")),t.add(`sql:${i}`))}return t}function ft(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];if(e.fieldRef&&i.push(...f(e.fieldRef,`${t}.fieldRef`)),(typeof e.inputId!="string"||!e.inputId.trim())&&i.push(`${t}.inputId is required.`),i.push(...Se(e.optionQuery,`${t}.optionQuery`)),y(e.appliesToViewIds)||i.push(`${t}.appliesToViewIds must be an array of strings.`),y(e.notAppliedToViewIds)||i.push(`${t}.notAppliedToViewIds must be an array of strings.`),!Array.isArray(e.bindings))i.push(`${t}.bindings must be an array.`);else{const n=y(e.appliesToViewIds)?new Set(e.appliesToViewIds):void 0,a=y(e.notAppliedToViewIds)?new Set(e.notAppliedToViewIds):void 0;e.bindings.forEach((l,c)=>{const d=u(l);if(!d){i.push(`${t}.bindings.${c} must be an object.`);return}typeof d.viewId!="string"||!d.viewId?i.push(`${t}.bindings.${c}.viewId is required.`):(n&&!n.has(d.viewId)&&i.push(`${t}.bindings.${c}.viewId must be included in appliesToViewIds.`),a!=null&&a.has(d.viewId)&&i.push(`${t}.bindings.${c}.viewId must not be listed in notAppliedToViewIds.`)),i.push(...f(d.fieldRef,`${t}.bindings.${c}.fieldRef`))})}return i}function Se(s,t){if(s===void 0)return[];const e=u(s);if(!e)return[`${t} must be an object.`];const i=[...b(e.valueFieldRef,`${t}.valueFieldRef`),...b(e.labelFieldRef,`${t}.labelFieldRef`),...b(e.filterFieldRef,`${t}.filterFieldRef`)];if(e.builder!=="semaphor.inputOptions"&&i.push(`${t}.builder must be semaphor.inputOptions.`),typeof e.sourceKey!="string"&&e.source===void 0&&i.push(`${t} must include source or sourceKey.`),e.source!==void 0){const n=u(e.source);!n||n.kind!=="semantic"&&n.kind!=="physical"?i.push(`${t}.source.kind must be semantic or physical.`):i.push(...C(e.source,`${t}.source`))}return u(e.valueFieldRef)||i.push(`${t}.valueFieldRef is required.`),u(e.labelFieldRef)||i.push(`${t}.labelFieldRef is required.`),e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<=0)&&i.push(`${t}.limit must be a positive integer.`),i}function ht(s){var n;const t=u(s.value);if(!t)return[`${s.path} is required for executable views.`];const e=[];if(!ve(t.builder))return e.push(`${s.path}.builder must be a supported SDK builder.`),e;s.sdkBuilder&&t.builder!==s.sdkBuilder&&e.push(`${s.path}.builder must match sdkBuilder.`),s.queryKind&&z(s.queryKind)&&t.builder!==zt(s.queryKind)&&e.push(`${s.path}.builder must match queryKind.`);const i=u(t.spec);if(!i)return e.push(`${s.path}.spec must be an object.`),e;switch(t.builder){case"semaphor.metric":e.push(...I(i,ge,`${s.path}.spec`),...k(i,s.path),...j(i.measures,`${s.path}.spec.measures`),...b(i.primaryMeasure,`${s.path}.spec.primaryMeasure`),...b(i.dateField,`${s.path}.spec.dateField`),...K(i.dimensions,`${s.path}.spec.dimensions`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`));break;case"semaphor.analysis":e.push(...I(i,He,`${s.path}.spec`),...k(i,s.path),...j(i.measures,`${s.path}.spec.measures`),...b(i.primaryMeasure,`${s.path}.spec.primaryMeasure`),...b(i.dateField,`${s.path}.spec.dateField`),...K(i.dimensions,`${s.path}.spec.dimensions`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`),...yt(i,`${s.path}.spec`));break;case"semaphor.records":e.push(...I(i,Ye,`${s.path}.spec`),...k(i,s.path),...j(i.fields,`${s.path}.spec.fields`),...b(i.dateField,`${s.path}.spec.dateField`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`),...gt(i.totals,`${s.path}.spec.totals`));break;case"semaphor.matrix":{const{id:a,label:l,matrixWindowRequest:c,...d}=i;for(const[$,E]of Object.entries({id:a,label:l}))E!==void 0&&(typeof E!="string"||!E.trim())&&e.push(`${s.path}.spec.${$} must be a nonempty string.`);const g=Q.safeParse({intent:{...d,kind:"matrix"},matrixWindowRequest:c});g.success||e.push(...g.error.issues.map($=>`${s.path}.spec.${$.path.join(".")}: ${$.message}`));break}case"semaphor.sql":e.push(...I(i,Je,`${s.path}.spec`),...k(i,s.path)),((n=u(i.source))==null?void 0:n.kind)!=="sql"&&e.push(`${s.path}.spec.source.kind must be sql.`),(typeof i.sql!="string"||!i.sql.trim())&&e.push(`${s.path}.spec.sql is required.`),e.push(...K(i.fields,`${s.path}.spec.fields`));break}return e}function yt(s,t){const e=[];if(s.driverMode!==void 0&&!We.has(s.driverMode)&&e.push(`${t}.driverMode must be a supported analysis driver mode.`),s.includePopulation!==void 0&&typeof s.includePopulation!="boolean"&&e.push(`${t}.includePopulation must be a boolean.`),s.calendarContext!==void 0){const i=u(s.calendarContext);if(!i)e.push(`${t}.calendarContext must be an object.`);else{i.tz!==void 0&&typeof i.tz!="string"&&e.push(`${t}.calendarContext.tz must be a string.`),i.weekStart!==void 0&&(typeof i.weekStart!="number"||!Number.isInteger(i.weekStart)||i.weekStart<0||i.weekStart>6)&&e.push(`${t}.calendarContext.weekStart must be an integer between 0 and 6.`);const n=i.anchor;if(n!==void 0&&n!=="now"){const a=u(n);(!a||typeof a.iso!="string"||!a.iso.trim())&&e.push(`${t}.calendarContext.anchor must be now or { iso }.`)}}}return e}function gt(s,t){if(s===void 0)return[];const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="server"&&i.push(`${t}.mode must be server.`),!Array.isArray(e.measures)||e.measures.length===0?i.push(`${t}.measures must include at least one measure.`):e.measures.forEach((n,a)=>{var l;i.push(...$e(n,`${t}.measures.${a}`)),((l=u(n))==null?void 0:l.role)!=="measure"&&i.push(`${t}.measures.${a}.role must be measure.`)}),i}function I(s,t,e){const i=[];return Object.keys(s).forEach(n=>{t.has(n)||i.push(`${e}.${n} is not supported for this SDK builder.`)}),i}function k(s,t){return u(s.source)?C(s.source,`${t}.spec.source`):[`${t}.spec.source must be an object.`]}function j(s,t){const e=St(s,t);return Array.isArray(s)&&s.forEach((i,n)=>{e.push(...f(i,`${t}.${n}`))}),e}function K(s,t){if(s===void 0)return[];if(!Array.isArray(s))return[`${t} must be an array.`];const e=[];return s.forEach((i,n)=>{e.push(...f(i,`${t}.${n}`))}),e}function F(s,t){if(s===void 0)return[];const e=u(s);return e?[...f(e.field,`${t}.field`),...bt(e.direction,`${t}.direction`)]:[`${t} must be an object.`]}function bt(s,t){return s==="asc"||s==="desc"?[]:[`${t} must be asc or desc.`]}function N(s,t){if(s===void 0)return[];if(!Array.isArray(s))return[`${t} must be an array.`];const e=[];return s.forEach((i,n)=>{const a=u(i);if(!a){e.push(`${t}.${n} must be an object.`);return}e.push(...f(a.field,`${t}.${n}.field`))}),e}function St(s,t){return!Array.isArray(s)||s.length===0?[`${t} must be a non-empty array.`]:[]}function zt(s){switch(s){case"metric":return"semaphor.metric";case"records":return"semaphor.records";case"matrix":return"semaphor.matrix";case"analysis":return"semaphor.analysis";case"sql_fallback":return"semaphor.sql"}}function vt(s){const t=u(s.computation),e=u(s.visualSpec);return(t==null?void 0:t.kind)==="presentation_only"||(t==null?void 0:t.kind)==="derived"||(t==null?void 0:t.kind)==="unsupported"||s.visual==="text_block"||(e==null?void 0:e.visualType)==="text_block"}function $t(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return Ze.has(e.visualType)||i.push(`${t}.visualType must be a supported visual type.`),e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<=0)&&i.push(`${t}.limit must be a positive integer.`),e.tableBehavior!==void 0&&i.push(...It(e.tableBehavior,`${t}.tableBehavior`)),i}function It(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.tableMode!=="bounded"&&e.tableMode!=="server_paginated"&&e.tableMode!=="server_windowed"&&i.push(`${t}.tableMode must be a supported table mode.`),i.push(...kt(e.height,`${t}.height`),...wt(e.pagination,`${t}.pagination`),...At(e.sorting,`${t}.sorting`),..._t(e.totals,`${t}.totals`)),typeof e.serverSideRequired!="boolean"&&i.push(`${t}.serverSideRequired must be a boolean.`),i}function kt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.maxPx!="number"||!Number.isInteger(e.maxPx)||e.maxPx<=0)&&i.push(`${t}.maxPx must be a positive integer.`),e.scroll!=="vertical"&&e.scroll!=="both"&&i.push(`${t}.scroll must be vertical or both.`),typeof e.stickyHeader!="boolean"&&i.push(`${t}.stickyHeader must be a boolean.`),i}function wt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="none"&&e.mode!=="server"&&e.mode!=="client_for_bounded_rows"&&i.push(`${t}.mode must be a supported pagination mode.`),e.pageSize!==void 0&&(typeof e.pageSize!="number"||!Number.isInteger(e.pageSize)||e.pageSize<=0)&&i.push(`${t}.pageSize must be a positive integer.`),e.readsFrom!==void 0&&e.readsFrom!=="result.pagination"&&i.push(`${t}.readsFrom must be result.pagination.`),i}function At(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="server"&&e.mode!=="client_for_bounded_rows"&&i.push(`${t}.mode must be a supported sorting mode.`),e.defaultField!==void 0&&(typeof e.defaultField!="string"||!e.defaultField.trim())&&i.push(`${t}.defaultField must be a non-empty string.`),e.defaultDirection!==void 0&&e.defaultDirection!=="asc"&&e.defaultDirection!=="desc"&&i.push(`${t}.defaultDirection must be asc or desc.`),e.resetPageOnChange!==void 0&&typeof e.resetPageOnChange!="boolean"&&i.push(`${t}.resetPageOnChange must be a boolean.`),i}function _t(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="none"&&e.mode!=="server"&&e.mode!=="local"?(i.push(`${t}.mode must be none, server, or local.`),i):e.mode==="none"?(e.measures!==void 0&&i.push(`${t}.measures is not allowed when mode is none.`),e.label!==void 0&&i.push(`${t}.label is not allowed when mode is none.`),i):e.mode==="server"?(!Array.isArray(e.measures)||e.measures.length===0?i.push(`${t}.measures must include at least one measure when mode is server.`):e.measures.forEach((n,a)=>{var l;i.push(...$e(n,`${t}.measures.${a}`)),((l=u(n))==null?void 0:l.role)!=="measure"&&i.push(`${t}.measures.${a}.role must be measure.`)}),e.label!==void 0&&i.push(`${t}.label is not allowed when mode is server.`),i):(e.mode==="local"&&(e.label!=="Displayed rows"&&e.label!=="Current page"&&i.push(`${t}.label must be Displayed rows or Current page when mode is local.`),e.measures!==void 0&&i.push(`${t}.measures is not allowed when mode is local.`)),i)}function Rt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];switch(e.kind){case"server_query":z(e.queryKind)||i.push(`${t}.queryKind must be a supported codegen query kind.`),e.queryOwnership!==void 0&&e.queryOwnership!=="view_owned"&&e.queryOwnership!=="shared_query"&&i.push(`${t}.queryOwnership must be view_owned or shared_query.`),e.sourceKeys!==void 0&&!y(e.sourceKeys)&&i.push(`${t}.sourceKeys must be an array of strings.`),e.fieldNames!==void 0&&!y(e.fieldNames)&&i.push(`${t}.fieldNames must be an array of strings.`);break;case"derived":(typeof e.upstreamViewId!="string"||!e.upstreamViewId.trim())&&i.push(`${t}.upstreamViewId is required.`),(typeof e.derivation!="string"||!e.derivation.trim())&&i.push(`${t}.derivation is required.`);break;case"presentation_only":break;case"unsupported":(typeof e.reason!="string"||!e.reason.trim())&&i.push(`${t}.reason is required.`),(typeof e.suggestedModelingFix!="string"||!e.suggestedModelingFix.trim())&&i.push(`${t}.suggestedModelingFix is required.`);break;default:i.push(`${t}.kind must be a supported computation kind.`)}return i}function xt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];for(const a of["title","requestedQuestion","suggestedModelingFix"])(typeof e[a]!="string"||!e[a].trim())&&i.push(`${t}.${a} is required.`);return Xe.has(e.reason)||i.push(`${t}.reason must be a supported unsupported insight reason.`),(e.relationshipCandidate!==void 0||e.nextRepairAction!==void 0)&&e.reason!=="missing_relationship"&&i.push(`${t} relationship repair metadata is only valid for missing_relationship unsupported insights.`),e.diagnostic!==void 0&&i.push(...Ct(e.diagnostic,`${t}.diagnostic`,e.reason)),e.relationshipCandidate!==void 0&&i.push(...qt(e.relationshipCandidate,`${t}.relationshipCandidate`)),e.nextRepairAction!==void 0&&i.push(...Et(e.nextRepairAction,`${t}.nextRepairAction`)),i}function Ct(s,t,e){const i=u(s);if(!i)return[`${t} must be an object.`];const n=[],a=new Set(["kind","inputId","inputLabel","optionSource","optionField","missingEvidence"]);Object.keys(i).forEach(c=>{a.has(c)||n.push(`${t}.${c} is not supported; raw identifier diagnostics support only kind, inputId, inputLabel, optionSource, optionField, and missingEvidence.`)}),e!=="raw_identifier_filter_options"&&n.push(`${t} is only valid for raw_identifier_filter_options unsupported insights.`),i.kind!=="raw_identifier_filter_options"&&n.push(`${t}.kind must be raw_identifier_filter_options.`);for(const c of["inputId","inputLabel"])(typeof i[c]!="string"||!i[c].trim())&&n.push(`${t}.${c} must be a non-empty string.`);n.push(...M(i.optionSource,`${t}.optionSource`)),n.push(...ze(i.optionField,`${t}.optionField`));const l=new Set(["display_field","relationship_display_path"]);return!Array.isArray(i.missingEvidence)||i.missingEvidence.length===0?n.push(`${t}.missingEvidence must be a non-empty evidence array.`):i.missingEvidence.forEach((c,d)=>{l.has(c)||n.push(`${t}.missingEvidence.${d} must be display_field or relationship_display_path.`)}),n}function Et(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["tool","reason"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; repair actions support only tool and reason.`)}),e.tool!=="semaphor_propose_semantic_model_change"&&i.push(`${t}.tool must be semaphor_propose_semantic_model_change.`),e.reason!=="missing_relationship"&&i.push(`${t}.reason must be missing_relationship.`),i}function qt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["source","sourceFields","target","targetFields"]);Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidates support only source, sourceFields, target, and targetFields.`)}),i.push(...M(e.source,`${t}.source`)),i.push(...M(e.target,`${t}.target`));for(const a of["sourceFields","targetFields"]){const l=e[a];if(!Array.isArray(l)||l.length===0){i.push(`${t}.${a} must be a non-empty endpoint field array.`);continue}l.forEach((c,d)=>{i.push(...ze(c,`${t}.${a}.${d}`))})}return i}function ze(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["name","label","role","dataType"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidate fields are scoped by their endpoint and support only name, label, role, and dataType.`)}),(typeof e.name!="string"||!e.name.trim())&&i.push(`${t}.name must be a non-empty string.`),e.role!==void 0&&(typeof e.role!="string"||!["dimension","measure","date","id","unknown"].includes(e.role))&&i.push(`${t}.role must be dimension, measure, date, id, or unknown.`),e.dataType!==void 0&&(typeof e.dataType!="string"||!["string","number","boolean","date","datetime","unknown"].includes(e.dataType))&&i.push(`${t}.dataType must be string, number, boolean, date, datetime, or unknown.`),i}function M(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["kind","domainId","datasetName","datasetId","label","sourceKey"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidate sources support only semantic identity fields.`)}),e.kind!=="semantic"&&i.push(`${t} must use semantic source identity.`),(typeof e.domainId!="string"||!e.domainId.trim()||typeof e.datasetName!="string"||!e.datasetName.trim())&&i.push(`${t} must include semantic domainId and datasetName.`),i}function z(s){return Ue.has(s)}function ve(s){return Ge.has(s)}function b(s,t){return s===void 0?[]:f(s,t)}function f(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.name!="string"||!e.name.trim())&&i.push(`${t}.name is required.`),!e.source&&typeof e.sourceKey!="string"&&i.push(`${t} must include source or sourceKey.`),e.aggregate!==void 0&&!Qe.has(e.aggregate)&&i.push(`${t}.aggregate must be a supported aggregate function.`),i}function $e(s,t){const e=u(s),i=f(s,t);if(!e||typeof e.sourceKey=="string"&&e.sourceKey.trim())return i;if(e.source!==void 0){const a=C(e.source,`${t}.source`);return a.length===0||i.push(...a),i}return i.includes(`${t} must include source or sourceKey.`)||i.push(`${t} must include source or sourceKey.`),i}function u(s){return s&&typeof s=="object"&&!Array.isArray(s)?s:void 0}function y(s){return Array.isArray(s)&&s.every(t=>typeof t=="string")}const Ie=r.z.union([o.semaphorMetricResultSchema,o.semaphorRecordsResultSchema,o.semaphorInputOptionsResultSchema,o.semaphorSqlResultSchema,G]),ke=r.z.object({status:r.z.enum(["not_required","resolved","missing","ambiguous","fanout_risk","unknown"]),requiredSources:r.z.array(o.semaphorSourceRefSchema).optional(),relationshipsUsed:r.z.array(r.z.string()).optional(),missingSources:r.z.array(r.z.string()).optional(),warnings:r.z.array(r.z.string()).optional(),message:r.z.string().optional(),recommendedNextStep:r.z.string().optional(),joinPlanSummary:r.z.object({baseSource:o.semaphorSourceRefSchema.optional(),joinedSources:r.z.array(o.semaphorSourceRefSchema).optional(),joinCount:r.z.number().optional()}).passthrough().optional(),fanoutRisk:r.z.object({status:r.z.enum(["none","warning","error","unknown"]),message:r.z.string().optional()}).passthrough().optional()}).passthrough(),ae=r.z.enum(["ambiguous_fields","empty_result","missing_grounded_fields","missing_relationship","no_grounded_query","partial_result","presentation_incomplete","query_validation_failed","unsafe_join"]),H=r.z.object({version:r.z.literal(1),status:r.z.enum(["answered","partial","blocked"]),summary:r.z.string(),answered:r.z.array(r.z.object({slotId:r.z.string().optional(),queryId:r.z.string().optional(),summary:r.z.string(),evidenceIds:r.z.array(r.z.string()).optional(),fieldsUsed:r.z.array(o.semaphorExecutionFieldRefSchema).optional()}).passthrough()),blocked:r.z.array(r.z.object({slotId:r.z.string().optional(),queryId:r.z.string().optional(),reasonCode:ae,message:r.z.string(),missingFields:r.z.array(r.z.string()).optional(),availableFields:r.z.array(r.z.string()).optional(),ambiguousFields:r.z.array(r.z.string()).optional(),missingRelationships:r.z.array(r.z.string()).optional(),evidenceIds:r.z.array(r.z.string()).optional(),neededFromUser:r.z.array(r.z.string()).optional(),recommendedNextStep:r.z.string().optional()}).passthrough()),semanticModelRecommendations:r.z.array(r.z.object({reasonCode:ae,message:r.z.string(),recommendedNextStep:r.z.string().optional()}).passthrough()).optional()}).passthrough(),Y=r.z.object({scope:r.z.literal("filtered_query"),measures:r.z.record(o.nullableScalarSchema)}).passthrough(),J=r.z.object({answeredObligations:r.z.array(r.z.string()),missingObligations:r.z.array(r.z.string()),warnings:r.z.array(o.semaphorAnalyticsValidationIssueSchema).optional()}).passthrough(),Z=r.z.object({intentId:r.z.string().optional(),queryId:r.z.string().optional(),status:r.z.enum(["answered","partial","failed"]),resultShape:r.z.enum(["metric","records","inputOptions","sql","matrix","period_change","analysis"]).optional(),intent:r.z.unknown().optional(),compiledQuery:r.z.unknown().optional(),fieldsUsed:r.z.array(o.semaphorExecutionFieldRefSchema).optional(),result:Ie.optional(),validation:o.semaphorAnalyticsValidationResultSchema,coverage:J.optional(),missingFields:r.z.array(r.z.string()).optional(),warnings:r.z.array(r.z.string()).optional(),relationshipDiagnostics:ke.optional(),diagnosticFeedback:H.optional(),population:Y.optional(),metadata:r.z.record(r.z.string(),r.z.unknown()).optional()}).passthrough(),we=Z;function jt(s){switch(s){case"boolean":return r.z.boolean().optional();case"compactExecutionFieldArray":return r.z.array(o.semaphorCompactFieldRefSchema).optional();case"coverage":return J.optional();case"diagnosticFeedback":return H.optional();case"executionFieldArray":return r.z.array(o.semaphorExecutionFieldRefSchema).optional();case"executionResult":return we.optional();case"number":return r.z.number().finite().optional();case"population":return Y.optional();case"record":return o.recordSchema.optional();case"recordArray":return o.recordArraySchema.optional();case"responseDetail":return r.z.enum(["compact","standard","debug"]).optional();case"string":return r.z.string().optional();case"stringArray":return r.z.array(r.z.string()).optional();case"unknown":return r.z.unknown().optional();case"unknownArray":return r.z.array(r.z.unknown()).optional();case"validationResult":return o.semaphorAnalyticsValidationResultSchema.optional()}}const Ae=Object.fromEntries(Object.entries(R).map(([s,t])=>[s,jt(t)])),_e=r.z.object(Ae).strict(),X=r.z.object({sourceKey:r.z.string().optional(),kind:r.z.enum(["semantic","physical","sql"]).optional(),domainId:r.z.string().optional(),datasetName:r.z.string().optional(),datasetId:r.z.string().optional(),connectionId:r.z.string().optional(),tableName:r.z.string().optional(),label:r.z.string().optional()}).passthrough(),S=r.z.object({name:r.z.string(),label:r.z.string().optional(),role:r.z.enum(["dimension","measure","date","id","unknown"]).optional(),dataType:r.z.enum(["string","number","boolean","date","datetime","unknown"]).optional(),aggregate:o.semaphorAggregateFunctionSchema.optional(),sourceKey:r.z.string().optional(),source:X.optional()}).passthrough(),Re=r.z.object({id:r.z.string().optional(),builder:r.z.literal("semaphor.inputOptions"),source:X.optional(),sourceKey:r.z.string().optional(),valueFieldRef:S,labelFieldRef:S,filterFieldRef:S.optional(),population:r.z.unknown().optional(),dependencies:r.z.unknown().optional(),limit:r.z.number().int().positive().optional(),spec:o.recordSchema.optional()}).passthrough(),xe=r.z.object({appliesToViewIds:r.z.array(r.z.string()).optional(),viewId:r.z.string().optional(),fieldRef:S,relationshipHint:r.z.unknown().optional(),relationshipsUsed:r.z.array(o.recordSchema).optional()}).passthrough(),Kt=r.z.object({id:r.z.string(),label:r.z.string().optional(),type:r.z.string().optional(),serverSide:r.z.boolean().optional(),fieldRef:S.optional(),optionQuery:Re.optional(),bindings:r.z.array(xe).optional(),appliesToViewIds:r.z.array(r.z.string()),relationshipHint:r.z.unknown().optional(),relationshipsUsed:r.z.array(o.recordSchema).optional()}).passthrough(),Ft=r.z.object({builder:r.z.enum(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]),spec:o.recordSchema,fallbackReason:o.recordSchema.optional()}).passthrough(),Nt=r.z.object({id:r.z.string(),title:r.z.string().optional(),purpose:r.z.string().optional(),sourcePresentation:r.z.object({sourceKeys:r.z.array(r.z.string()).optional(),sourceLabels:r.z.array(r.z.string()).optional()}).passthrough().optional(),visual:r.z.string().optional(),visualSpec:o.recordSchema.optional(),queryKind:r.z.enum(["metric","records","matrix","analysis","sql_fallback"]).optional(),sdkBuilder:r.z.enum(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]).optional(),sdkSpec:Ft.optional(),fields:r.z.array(S).optional(),computation:o.recordSchema.optional(),uxExpectations:r.z.array(r.z.string()).optional(),validation:o.recordSchema.optional()}).passthrough(),Ot=r.z.object({inputId:r.z.string(),label:r.z.string().optional(),type:r.z.string().optional(),serverSide:r.z.boolean().optional(),fieldRef:S.optional(),optionQuery:Re.optional(),bindings:r.z.array(xe),appliesToViewIds:r.z.array(r.z.string()),notAppliedToViewIds:r.z.array(r.z.string())}).passthrough(),Tt=r.z.object({schemaVersion:r.z.literal(w),title:r.z.string(),purpose:r.z.string().optional(),userGoal:r.z.string().optional(),nextStep:r.z.string().optional(),sources:r.z.array(X),inputs:r.z.array(Kt),views:r.z.array(Nt),filterContracts:r.z.array(Ot),implementationChecklist:r.z.object({schemaVersion:r.z.string().optional(),requiredDevtools:r.z.object({mountRootDevtools:r.z.boolean(),providerDebugBridge:r.z.string().optional(),panelPosition:r.z.string().optional(),forbidden:r.z.array(r.z.string()).optional()}).passthrough(),requiredInputOptions:r.z.array(o.recordSchema),filterScopeByInput:r.z.array(o.recordSchema),bindingsByView:r.z.record(r.z.string(),r.z.array(o.recordSchema)),validationCommands:r.z.array(r.z.string()),browserSmokeChecks:r.z.array(r.z.string())}).passthrough(),nextRequiredTool:r.z.object({name:r.z.string(),reason:r.z.string().optional()}).optional(),unsupportedInsights:r.z.array(r.z.object({title:r.z.string(),requestedQuestion:r.z.string(),reason:r.z.string(),suggestedModelingFix:r.z.string()}).passthrough()).optional(),assumptions:r.z.array(r.z.string()).optional(),validation:o.recordSchema.optional()}).passthrough().superRefine((s,t)=>{const e=W(s);for(const i of e.issues)t.addIssue({code:r.z.ZodIssueCode.custom,message:i})}),Pt=new Set(Object.keys(R));function Bt(){return Object.keys(R)}function Ce(s){return Pt.has(s)}function Mt(s){if(!s||typeof s!="object"||Array.isArray(s))throw new Error("Semaphor analyze result must be an object.");const e=Object.keys(s).filter(i=>!Ce(i));if(e.length)throw new Error(`Semaphor analyze result contains unsupported top-level field(s): ${e.join(", ")}.`);return _e.parse(s)}const ee=100,A="selection:";function te(s){return[o.semaphorSourceIdentityKey(s.source),o.normalizeAnalyticsCatalogName(s.name),s.sourceField??""].join("::")}function Dt(s){return`${A}${s}`}function Ee(s){return s.startsWith(A)&&s.length>A.length}function Vt(s){return Ee(s)?s.slice(A.length):void 0}function se(s){if(!s)return"";const t=s.calendar.fiscalCalendar;return JSON.stringify([s.granularity,s.calendar.tz,s.calendar.weekStart,t?[t.kind,t.yearStartMonth]:null])}function qe(s){return JSON.stringify([te(s.field),s.operator,s.operator==="isNull"?null:s.value,se(s.temporalBucket)])}function D(s){return JSON.stringify(s.conditions.map(qe).sort())}function _(s){return JSON.stringify([o.semaphorSourceIdentityKey(s.field.source),s.field.name,s.operator,s.operator==="isNull"?null:s.value,se(s.temporalBucket)])}function V(s){return JSON.stringify(s.conditions.map(_).sort())}function Lt(s){const t=s.map(e=>e.id);if(new Set(t).size!==t.length)throw new Error("Data App selections require one active selection per id.");return s.map(e=>({...e,tuples:e.tuples.map(i=>({...i,conditions:[...i.conditions].sort((n,a)=>O(_(n),_(a)))})).sort((i,n)=>O(V(i),V(n)))})).sort((e,i)=>O(e.id,i.id))}function O(s,t){return s<t?-1:s>t?1:0}function Ut(s,t){return D(s)===D(t)}const Gt="(Blank)";function Qt(s){return s.conditions.map(t=>t.label?t.label:t.operator==="isNull"||t.value===null?Gt:String(t.value)).join(" · ")}const Wt=r.z.union([o.semaphorSemanticSourceRefSchema,o.semaphorPhysicalSourceRefSchema]),je=r.z.object({name:r.z.string().min(1),source:Wt,dataType:r.z.enum(["string","number","boolean","date","datetime"]),sourceField:r.z.string().min(1).optional()}).strict(),Ke=r.z.object({field:je,operator:r.z.enum(["=","isNull"]),value:r.z.union([r.z.string(),r.z.number().finite(),r.z.null()]),label:r.z.string().optional(),temporalBucket:o.temporalBucketMetadataSchema.optional()}).strict().superRefine((s,t)=>{s.operator==="isNull"!=(s.value===null)&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"isNull carries a null value, and only isNull does.",path:["value"]})}),Fe=r.z.object({conditions:r.z.array(Ke).min(1)}).strict().superRefine((s,t)=>{const e=s.conditions.map(i=>te(i.field));new Set(e).size!==e.length&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"A tuple holds one condition per field.",path:["conditions"]})}),Ht=r.z.object({kind:r.z.literal("selection"),sourceCardId:r.z.string().min(1),tuples:r.z.array(Fe).min(1).max(ee)}).strict(),Ne=r.z.object({field:o.semaphorFieldRefSchema,operator:r.z.enum(["=","isNull"]),value:r.z.union([r.z.string(),r.z.number().finite(),r.z.null()]),temporalBucket:o.temporalBucketMetadataSchema.optional()}).strict().superRefine((s,t)=>{s.operator==="isNull"!=(s.value===null)&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"isNull carries a null value, and only isNull does.",path:["value"]})}),Oe=r.z.object({conditions:r.z.array(Ne).min(1)}).strict().superRefine((s,t)=>{for(let e=0;e<s.conditions.length;e+=1){const i=s.conditions[e];s.conditions.findIndex((a,l)=>l<e&&o.semaphorFieldRefsMatch(a.field,i.field))!==-1&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"A selection tuple can contain only one condition per field.",path:["conditions",e,"field"]})}}),Yt=r.z.object({id:r.z.string().min(1),tuples:r.z.array(Oe).min(1).max(ee)}).strict(),Te=r.z.object({runtimeFilters:o.matrixSpecSchema.innerType().shape.filters,runtimeSorts:o.matrixSpecSchema.innerType().shape.sorts.optional()});function Jt(s){return Te.parse(s)}const Zt={compiledQuery:r.z.never().optional(),intent:Q.shape.intent,resultShape:r.z.literal("matrix"),result:G.optional(),metadata:r.z.object({rowLimitExceeded:r.z.boolean(),matrixFailure:x.optional()}).passthrough()},Xt=Z.extend(Zt),es=Xt.superRefine((s,t)=>{s.status==="failed"==!!s.result&&t.addIssue({code:"custom",message:"Only answered or partial Matrix execution carries a window."}),s.result&&s.status==="partial"!=s.result.window.failures.length>0&&t.addIssue({code:"custom",message:"Matrix execution status must match acquired window failures."})});exports.MATRIX_WINDOW_LIMITS=Pe;exports.SELECTION_LIMIT=ee;exports.SEMAPHOR_ANALYZE_RESULT_FIELD_CONTRACT=R;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION=w;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION=Le;exports.analyticsExecutionEnvelopeSchema=Z;exports.analyticsSelectionConditionKey=_;exports.analyticsSelectionConditionSchema=Ne;exports.analyticsSelectionSchema=Yt;exports.analyticsSelectionTupleKey=V;exports.analyticsSelectionTupleSchema=Oe;exports.canonicalizeAnalyticsSelections=Lt;exports.getSemaphorAnalyzeResultFieldNames=Bt;exports.isSelectionInputId=Ee;exports.isSemaphorAnalyzeResultFieldName=Ce;exports.isSemaphorDataAppCodegenSummary=et;exports.matrixAxisPageSchema=ce;exports.matrixBlockRequestSchema=ue;exports.matrixCapabilitiesSchema=me;exports.matrixCellBlockSchema=le;exports.matrixDescriptorSchema=P;exports.matrixExecutionResultSchema=es;exports.matrixExportBatchSchema=Ve;exports.matrixExportColumnSchema=fe;exports.matrixExportLayoutSchema=he;exports.matrixExportRowSchema=ye;exports.matrixExportValueSchema=B;exports.matrixFailureSchema=x;exports.matrixOperationRequestSchema=Q;exports.matrixPageRequestSchema=oe;exports.matrixPathSelectionSchema=T;exports.matrixResultSchema=G;exports.matrixRuntimeInputsSchema=Te;exports.matrixWindowInputSchema=Me;exports.matrixWindowOutcomeSchema=De;exports.matrixWindowRequestSchema=L;exports.matrixWindowSchema=U;exports.parseMatrixRuntimeInputs=Jt;exports.parseSemaphorAnalyzeResult=Mt;exports.sameSelectionTuple=Ut;exports.selectionConditionKey=qe;exports.selectionConditionSchema=Ke;exports.selectionFieldKey=te;exports.selectionFieldSchema=je;exports.selectionInputId=Dt;exports.selectionInputValueSchema=Ht;exports.selectionTupleKey=D;exports.selectionTupleLabel=Qt;exports.selectionTupleSchema=Fe;exports.semaphorAnalyticsCoverageSchema=J;exports.semaphorAnalyticsDiagnosticFeedbackSchema=H;exports.semaphorAnalyticsExecutionResultSchema=we;exports.semaphorAnalyticsPopulationSchema=Y;exports.semaphorAnalyticsResultSchema=Ie;exports.semaphorAnalyzeResultSchema=_e;exports.semaphorAnalyzeResultShape=Ae;exports.semaphorDataAppCodegenSummarySchema=Tt;exports.semaphorRelationshipDiagnosticsSchema=ke;exports.sourceCardIdFromSelectionInputId=Vt;exports.temporalBucketIdentityKey=se;exports.validateSemaphorDataAppCodegenSummary=W;
1
+ "use strict";const r=require("zod"),o=require("./validators-DFeDcdpA.cjs"),R={answerSummary:"string",responseDetail:"responseDetail",mode:"string",comparisonKind:"string",executionResult:"executionResult",compiledQuery:"unknown",data:"unknown",resultSets:"record",analysisWarnings:"unknownArray",columns:"unknownArray",records:"recordArray",rowCount:"number",rowLimitExceeded:"boolean",output:"string",querySpec:"unknown",metadata:"record",validation:"validationResult",coverage:"coverage",diagnosticFeedback:"diagnosticFeedback",missingFields:"stringArray",warnings:"unknownArray",comparison:"unknown",population:"population",comparisons:"recordArray",fieldsUsed:"compactExecutionFieldArray",primary:"recordArray",contributors:"recordArray",segments:"recordArray",periodChanges:"recordArray",changes:"recordArray",largestNegativeChanges:"recordArray",largestPositiveChanges:"recordArray",drivers:"recordArray",absoluteDeltaDrivers:"recordArray",largestNegativeDrivers:"recordArray",largestPositiveDrivers:"recordArray",periodRows:"recordArray",sql:"unknown",omitted:"stringArray"},Pe=Object.freeze({coordinates:2e4}),v=r.z.string().uuid(),p=r.z.string().min(1),Be=r.z.number().int().positive().max(Number.MAX_SAFE_INTEGER);function m(s,t,e){s.addIssue({code:"custom",path:t,message:e})}function h(s,t,e){new Set(s).size!==s.length&&m(t,e,"Duplicate identity.")}const oe=r.z.object({id:p,axis:o.matrixAxisSchema,parent:o.matrixPathSchema,position:r.z.union([r.z.object({kind:r.z.literal("first")}).strict(),r.z.object({kind:r.z.enum(["after","before"]),cursor:p}).strict()]),size:Be}).strict(),T=r.z.object({paths:r.z.array(o.matrixPathSchema).readonly(),pageIds:r.z.array(p).readonly()}).strict(),ue=r.z.object({id:p,rows:T,columns:T,measureIds:r.z.array(v).min(1).readonly()}).strict(),L=r.z.object({pages:r.z.array(oe).readonly(),blocks:r.z.array(ue).readonly()}).strict().superRefine((s,t)=>{!s.pages.length&&!s.blocks.length&&m(t,[],"Request at least one page or block."),h([...s.pages,...s.blocks].map(e=>e.id),t,[]);for(const e of s.blocks){h(e.measureIds,t,["blocks",e.id,"measureIds"]);for(const i of["rows","columns"])for(const n of e[i].pageIds)s.pages.some(a=>a.id===n&&a.axis===i)||m(t,["blocks",e.id,i],"Page reference must name a page on this axis in this operation.")}}),Me=r.z.object({spec:o.matrixSpecSchema,request:L}).strict().superRefine(({spec:s,request:t},e)=>{for(const i of t.pages)o.checkMatrixPath(s,i.axis,i.parent,e,["pages",i.id],!0),i.parent.length>=s[i.axis].length&&m(e,["pages",i.id],"Cannot request children of a leaf or empty axis.");for(const i of t.blocks){i.measureIds.some(n=>!s.measures.some(a=>a.id===n))&&m(e,["blocks",i.id],"Unknown block measure.");for(const n of["rows","columns"])for(const a of i[n].paths)o.checkMatrixPath(s,n,a,e,["blocks",i.id,n])}}),ce=r.z.object({requestId:p,axis:o.matrixAxisSchema,parent:o.matrixPathSchema,members:r.z.array(r.z.object({path:o.matrixPathSchema}).strict()).readonly(),before:p.nullable(),after:p.nullable(),exactCount:r.z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional()}).strict().superRefine((s,t)=>{s.parent.some(i=>i.member.kind==="others")&&m(t,["parent"],"Others has no children.");const e=s.members.filter(({path:i})=>{var n;return((n=i[i.length-1])==null?void 0:n.member.kind)==="others"});e.length>1&&m(t,["members"],"A page may contain Others only once."),e.length&&(s.members[s.members.length-1]!==e[0]&&m(t,["members"],"Others must be the last page member."),s.after!==null&&m(t,["after"],"Others must end the branch.")),new Set(s.members.map(i=>{var n;return(n=i.path[i.path.length-1])==null?void 0:n.levelId})).size>1&&m(t,["members"],"One page must contain one child level."),h(s.members.map(i=>o.matrixPathKey(i.path)),t,["members"]);for(const i of s.members)(i.path.length!==s.parent.length+1||o.matrixPathKey(i.path.slice(0,-1))!==o.matrixPathKey(s.parent))&&m(t,["members"],"Page members must be immediate children.")}),le=r.z.object({requestId:p,coverage:r.z.object({rowPaths:r.z.array(o.matrixPathSchema).readonly(),columnPaths:r.z.array(o.matrixPathSchema).readonly(),measureIds:r.z.array(v).readonly()}).strict(),cells:r.z.array(o.matrixCoordinateSchema.extend({value:o.semaphorScalarValueSchema}).strict()).readonly()}).strict().superRefine((s,t)=>{const e=s.coverage.rowPaths.map(o.matrixPathKey),i=s.coverage.columnPaths.map(o.matrixPathKey);h(e,t,["coverage","rowPaths"]),h(i,t,["coverage","columnPaths"]),h(s.coverage.measureIds,t,["coverage","measureIds"]);const n=new Set(e),a=new Set(i),l=new Set(s.coverage.measureIds);h(s.cells.map(c=>JSON.stringify([o.matrixPathKey(c.rowPath),o.matrixPathKey(c.columnPath),c.measureId])),t,["cells"]);for(const c of s.cells)(!n.has(o.matrixPathKey(c.rowPath))||!a.has(o.matrixPathKey(c.columnPath))||!l.has(c.measureId))&&m(t,["cells"],"Cell is outside certified coverage.")}),P=r.z.object({id:v,column:o.semaphorResultColumnSchema,nativeDataType:p,semanticFormat:o.semaphorValueFormatSchema.optional()}).strict(),de=r.z.object({levels:r.z.array(P).readonly(),measures:r.z.array(P).readonly()}).strict(),x=r.z.object({code:r.z.enum(["invalid_request","unsupported_capability","stale_cursor","forbidden","budget_exceeded","source_truncated","execution_failed","cancelled"]),message:p,detail:p.optional(),retryable:r.z.boolean(),scope:r.z.union([r.z.object({kind:r.z.literal("operation")}).strict(),r.z.object({kind:r.z.enum(["page","block"]),requestId:p}).strict()])}).strict(),me=r.z.object({dialect:r.z.enum(["postgres","clickhouse","duckdb"]),aggregates:r.z.array(o.matrixAggregateSchema).readonly()}).strict(),U=r.z.object({queryIdentity:p,descriptors:de,capabilities:me,pages:r.z.array(ce).readonly(),blocks:r.z.array(le).readonly(),failures:r.z.array(x).readonly()}).strict().superRefine((s,t)=>{const e=new Set(s.descriptors.levels.map(a=>a.id)),i=new Set(s.descriptors.measures.map(a=>a.id)),n=s.pages.flatMap(a=>[a.parent,...a.members.map(l=>l.path)]);for(const a of s.blocks)n.push(...a.coverage.rowPaths,...a.coverage.columnPaths),a.coverage.measureIds.some(l=>!i.has(l))&&m(t,["blocks",a.requestId],"Coverage references an unknown measure descriptor.");n.some(a=>a.some(l=>!e.has(l.levelId)))&&m(t,["descriptors"],"Acquired paths require level descriptors."),h([...s.descriptors.levels,...s.descriptors.measures].map(a=>a.id),t,["descriptors"]),h([...s.pages,...s.blocks].map(a=>a.requestId),t,[]),h(s.failures.map(a=>a.scope.kind==="operation"?"operation":a.scope.requestId),t,["failures"]);for(const a of s.failures)if(a.scope.kind==="operation")m(t,["failures"],"Operation failure cannot accompany acquired data.");else{const l=a.scope.requestId;[...s.pages,...s.blocks].some(c=>c.requestId===l)&&m(t,["failures"],"A requested unit cannot both succeed and fail.")}}),De=r.z.union([r.z.object({status:r.z.enum(["success","partial"]),window:U}).strict(),r.z.object({status:r.z.literal("failed"),failure:x}).strict()]).superRefine((s,t)=>{if(s.status==="failed")return;const{window:e}=s;!e.pages.length&&!e.blocks.length&&m(t,["window"],"A window outcome requires successful acquired work."),s.status==="success"!=(e.failures.length===0)&&m(t,["status"],"Status must match failure coverage.")}),G=r.z.object({kind:r.z.literal("matrix"),window:U}).strict(),pe=r.z.enum(["member","subtotal","grand_total"]),fe=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("hierarchy"),label:r.z.string()}).strict(),r.z.object({kind:r.z.literal("level"),levelId:v,label:r.z.string()}).strict(),r.z.object({kind:r.z.literal("measure"),measureId:v,columnPath:o.matrixPathSchema,role:pe,label:r.z.string()}).strict()]),he=r.z.object({columns:r.z.array(fe).readonly(),descriptors:de}).strict(),B=r.z.union([r.z.object({kind:r.z.literal("value"),value:o.semaphorScalarValueSchema.refine(s=>s!==null)}).strict(),r.z.object({kind:r.z.enum(["null","empty"])}).strict()]),ye=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("layout"),rowPath:o.matrixPathSchema,role:pe,values:r.z.array(B).readonly()}).strict(),r.z.object({kind:r.z.literal("flat"),rowPath:o.matrixPathSchema,columnPath:o.matrixPathSchema,values:r.z.array(B).readonly()}).strict()]),Ve=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("layout"),layout:he,next:p}).strict(),r.z.object({kind:r.z.literal("rows"),rows:r.z.array(ye).readonly(),next:p.nullable()}).strict()]),Q=r.z.object({intent:o.matrixAnalyticalIntentSchema,matrixWindowRequest:L}).strict(),w="semaphor-data-app-codegen-summary/v1",Le="semaphor-data-app-codegen-summary-validator/v2",Ue=new Set(["metric","records","matrix","analysis","sql_fallback"]),Ge=new Set(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]),Qe=new Set(["SUM","COUNT","AVG","MIN","MAX","MEDIAN","DISTINCT"]),We=new Set(["absolute_delta","largest_negative","largest_positive","positive_and_negative","all"]),ge=new Set(["source","id","label","measures","primaryMeasure","dateField","timeGrain","dimensions","comparison","orderBy","filters","relationshipHint","limit","derivedFields"]),He=new Set([...ge,"analysis","timeWindow","filters","driverMode","includePopulation","calendarContext","chartTitle","chartType"]),Ye=new Set(["source","id","label","fields","dateField","timeGrain","timeWindow","filters","orderBy","relationshipHint","limit","pagination","totals","derivedFields"]),Je=new Set(["source","id","label","sql","defaultParameters","pythonCode","fields","limit","pagination","rationale"]),Ze=new Set(["kpi","line_chart","bar_chart","stacked_bar_chart","pie_chart","donut_chart","area_chart","table","matrix","narrative","text_block","custom"]),Xe=new Set(["missing_measure","missing_dimension","missing_date","missing_relationship","missing_semantic_role","missing_current_app_state","raw_identifier_filter_options","unsupported_change_intent","ambiguous_field_grounding","bounded_intent_unavailable","invalid_bounded_intent_output","latest_snapshot_selector_not_modeled","unsupported_grain","requires_sql_escape_hatch","unsupported_sdk_capability"]);function et(s){return W(s).ok}function W(s){const t=[];if(!s||typeof s!="object")return{ok:!1,issues:["Summary must be an object."]};const e=s;return e.schemaVersion!==w&&t.push(`schemaVersion must be ${w}.`),(typeof e.title!="string"||!e.title.trim())&&t.push("title is required."),Array.isArray(e.sources)||t.push("sources must be an array."),Array.isArray(e.inputs)||t.push("inputs must be an array."),Array.isArray(e.views)||t.push("views must be an array."),Array.isArray(e.filterContracts)||t.push("filterContracts must be an array."),(!e.implementationChecklist||typeof e.implementationChecklist!="object")&&t.push("implementationChecklist must be an object."),e.implementationChecklist&&typeof e.implementationChecklist=="object"&&t.push(...st(e.implementationChecklist)),Array.isArray(e.sources)&&e.sources.forEach((i,n)=>{t.push(...C(i,`sources.${n}`))}),Array.isArray(e.inputs)&&e.inputs.forEach((i,n)=>{t.push(...it(i,`inputs.${n}`))}),Array.isArray(e.views)&&e.views.forEach((i,n)=>{t.push(...rt(i,`views.${n}`))}),Array.isArray(e.filterContracts)&&e.filterContracts.forEach((i,n)=>{t.push(...ft(i,`filterContracts.${n}`))}),e.unsupportedInsights!==void 0&&(Array.isArray(e.unsupportedInsights)?e.unsupportedInsights.forEach((i,n)=>{t.push(...xt(i,`unsupportedInsights.${n}`))}):t.push("unsupportedInsights must be an array.")),t.push(...tt(e)),{ok:t.length===0,issues:t}}function tt(s){const t=Array.isArray(s.unsupportedInsights)&&s.unsupportedInsights.some(l=>{var c;return ie.has((c=u(l))==null?void 0:c.reason)}),e=Array.isArray(s.views)&&s.views.some(l=>{var d;const c=u((d=u(l))==null?void 0:d.computation);return(c==null?void 0:c.kind)==="unsupported"&&ie.has(c.reason)});if(!t&&!e)return[];const i=[],n=u(s.validation);(n==null?void 0:n.status)!=="blocked"&&i.push("validation.status must be blocked when semantic model repair gaps are present.");const a=u(s.nextRequiredTool);return(a==null?void 0:a.name)!=="semaphor_propose_semantic_model_change"&&i.push("nextRequiredTool.name must be semaphor_propose_semantic_model_change when semantic model repair gaps are present."),i}const ie=new Set(["missing_relationship","raw_identifier_filter_options"]);function C(s,t){const e=u(s);return e?e.kind==="semantic"?typeof e.domainId=="string"&&e.domainId.trim()&&typeof e.datasetName=="string"&&e.datasetName.trim()?[]:[`${t} must include sourceKey or a supported source identity.`]:typeof e.sourceKey=="string"&&e.sourceKey.trim()?[]:e.kind==="physical"&&typeof e.tableName=="string"&&e.tableName.trim()&&typeof e.connectionId=="string"&&e.connectionId.trim()?[]:e.kind==="sql"&&typeof e.connectionId=="string"&&e.connectionId.trim()?[]:[`${t} must include sourceKey or a supported source identity.`]:[`${t} must be an object.`]}function st(s){const t=u(s);if(!t)return["implementationChecklist must be an object."];const e=[],i=["requiredDevtools","requiredInputOptions","filterScopeByInput","bindingsByView","validationCommands","browserSmokeChecks"];for(const a of i)a in t||e.push(`implementationChecklist.${a} is required.`);const n=u(t.requiredDevtools);return n?typeof n.mountRootDevtools!="boolean"&&e.push("implementationChecklist.requiredDevtools.mountRootDevtools must be a boolean."):e.push("implementationChecklist.requiredDevtools must be an object."),Array.isArray(t.requiredInputOptions)||e.push("implementationChecklist.requiredInputOptions must be an array."),Array.isArray(t.filterScopeByInput)||e.push("implementationChecklist.filterScopeByInput must be an array."),u(t.bindingsByView)||e.push("implementationChecklist.bindingsByView must be an object."),y(t.validationCommands)||e.push("implementationChecklist.validationCommands must be an array of strings."),y(t.browserSmokeChecks)||e.push("implementationChecklist.browserSmokeChecks must be an array of strings."),e}function it(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.id!="string"||!e.id.trim())&&i.push(`${t}.id is required.`),e.fieldRef&&i.push(...f(e.fieldRef,`${t}.fieldRef`)),i.push(...Se(e.optionQuery,`${t}.optionQuery`)),y(e.appliesToViewIds)||i.push(`${t}.appliesToViewIds must be an array of strings.`),e.bindings!==void 0&&!Array.isArray(e.bindings)&&i.push(`${t}.bindings must be an array.`),Array.isArray(e.bindings)&&e.bindings.forEach((n,a)=>{const l=u(n);if(!l){i.push(`${t}.bindings.${a} must be an object.`);return}y(l.appliesToViewIds)||i.push(`${t}.bindings.${a}.appliesToViewIds must be an array of strings.`),i.push(...f(l.fieldRef,`${t}.bindings.${a}.fieldRef`))}),i}function rt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];if((typeof e.id!="string"||!e.id.trim())&&i.push(`${t}.id is required.`),e.visualSpec!==void 0&&i.push(...$t(e.visualSpec,`${t}.visualSpec`)),e.computation!==void 0&&i.push(...Rt(e.computation,`${t}.computation`)),vt(e))return i.push(...q(e,`${t}`)),e.fields!==void 0&&(Array.isArray(e.fields)?e.fields.forEach((d,g)=>{i.push(...f(d,`${t}.fields.${g}`))}):i.push(`${t}.fields must be an array.`)),e.queryKind!==void 0&&i.push(`${t}.queryKind is not allowed for non-executable views.`),e.sdkBuilder!==void 0&&i.push(`${t}.sdkBuilder is not allowed for non-executable views.`),e.sdkSpec!==void 0&&i.push(`${t}.sdkSpec is not allowed for non-executable views.`),i;if(!Array.isArray(e.fields))return i.push(`${t}.fields must be an array.`),(e.sdkSpec!==void 0||e.sdkBuilder!==void 0)&&i.push(`${t}.fields must be an array for executable views.`),i.push(...q(e,`${t}`)),i;e.fields.forEach((d,g)=>{i.push(...f(d,`${t}.fields.${g}`))}),z(e.queryKind)||i.push(`${t}.queryKind must be a supported codegen query kind.`),e.sdkBuilder!==void 0&&!ve(e.sdkBuilder)&&i.push(`${t}.sdkBuilder must be a supported SDK builder.`),e.metricBindingKeys!==void 0&&(Array.isArray(e.metricBindingKeys)?e.metricBindingKeys.some(d=>typeof d!="string"||d.trim().length===0)&&i.push(`${t}.metricBindingKeys must be an array of strings.`):i.push(`${t}.metricBindingKeys must be an array of strings.`));const n=u(e.sdkSpec),a=(n==null?void 0:n.builder)==="semaphor.metric";a&&(!Array.isArray(e.metricBindingKeys)||e.metricBindingKeys.length===0)&&i.push(`${t}.metricBindingKeys is required for metric views.`);const l=nt(e);a&&Array.isArray(e.metricBindingKeys)&&l&&JSON.stringify(e.metricBindingKeys)!==JSON.stringify(l)&&i.push(`${t}.metricBindingKeys must match the generated metric field binding keys in order.`);const c=u(e.computation);return(c==null?void 0:c.kind)==="server_query"&&z(e.queryKind)&&z(c.queryKind)&&c.queryKind!==e.queryKind&&i.push(`${t}.computation.queryKind must match queryKind.`),i.push(...ht({value:e.sdkSpec,path:`${t}.sdkSpec`,queryKind:typeof e.queryKind=="string"?e.queryKind:void 0,sdkBuilder:typeof e.sdkBuilder=="string"?e.sdkBuilder:void 0}),...q(e,`${t}`)),i}function nt(s){const t=u(s.sdkSpec);if((t==null?void 0:t.builder)!=="semaphor.metric")return;const e=u(t.spec);if(!e)return;const n=[e.primaryMeasure,...Array.isArray(e.measures)?e.measures:[]].map(at).filter(a=>!!a);return Array.from(new Map(n.map(a=>[a.identity,a.bindingKey])).values())}function at(s){const t=u(s);if(!t||typeof t.name!="string"||!t.name.trim())return;const e=ot(t);return e?{identity:JSON.stringify({source:e,name:t.name,aggregate:be(t)}),bindingKey:ut(t)}:void 0}function ot(s){if(typeof s.sourceKey=="string"&&s.sourceKey.trim())return{sourceKey:s.sourceKey};const t=u(s.source);if(t)return{kind:t.kind,domainId:t.domainId,datasetId:t.datasetId,datasetName:t.datasetName,name:t.name}}function ut(s){return typeof s.sourceKey=="string"&&s.sourceKey.trim()?[s.sourceKey,be(s),s.name].filter(Boolean).join(":"):o.semaphorMetricMeasureBindingKey(s)}function be(s){return o.semaphorMetricAggregate(s)}function q(s,t){var g;const e=u((g=u(s.visualSpec))==null?void 0:g.tableBehavior),i=u(s.sdkSpec),n=u(i==null?void 0:i.spec),a=typeof(i==null?void 0:i.builder)=="string"?i.builder:void 0,l=a==="semaphor.records"?u(n==null?void 0:n.totals):void 0,c=[];if(!e)return l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),c;const d=u(e.totals);return d?(d.mode==="server"&&(a!=="semaphor.records"&&c.push(`${t}.visualSpec.tableBehavior.totals.mode server is only supported for semaphor.records views.`),!l||l.mode!=="server"?c.push(`${t}.sdkSpec.spec.totals.mode must be server when tableBehavior.totals.mode is server.`):c.push(...ct({left:d.measures,right:l.measures,leftPath:`${t}.visualSpec.tableBehavior.totals.measures`,rightPath:`${t}.sdkSpec.spec.totals.measures`}))),d.mode!=="server"&&l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),a==="semaphor.sql"&&d.mode!=="none"&&c.push(`${t}.visualSpec.tableBehavior.totals.mode must be none for semaphor.sql views.`),a==="semaphor.sql"&&u(n==null?void 0:n.totals)&&c.push(`${t}.sdkSpec.spec.totals is not supported for semaphor.sql.`),c):(l&&c.push(`${t}.sdkSpec.spec.totals is only allowed when tableBehavior.totals.mode is server.`),c)}function ct({left:s,right:t,leftPath:e,rightPath:i}){if(!Array.isArray(s)||!Array.isArray(t))return[`${i} must match ${e}.`];const n=[];return s.length!==t.length?(n.push(`${i} must match ${e}.`),n):(s.forEach((a,l)=>{lt(u(a),u(t[l]))||n.push(`${i}.${l} must match ${e}.${l}.`)}),n)}function lt(s,t){return!s||!t?!1:s.name===t.name&&(s.role||"measure")===(t.role||"measure")&&re(s)===re(t)&&dt(s,t)}function re(s){return typeof s.aggregate=="string"?s.aggregate.toUpperCase():"SUM"}function dt(s,t){const e=u(s.source),i=u(t.source);if(mt(e,i))return!1;const n=ne(s),a=ne(t);if(n.size>0||a.size>0){for(const l of n)if(a.has(l))return!0;return!1}return!e||!i||e.kind!==i.kind?!1:e.kind==="semantic"?e.domainId===i.domainId&&e.datasetName===i.datasetName&&(e.datasetId===void 0||i.datasetId===void 0||e.datasetId===i.datasetId):e.kind==="physical"?e.connectionId===i.connectionId&&e.tableName===i.tableName:e.kind==="sql"?e.connectionId===i.connectionId:!1}function mt(s,t){if(!s||!t||s.kind!=="semantic"||t.kind!=="semantic")return!1;const e=typeof s.datasetId=="string"?s.datasetId.trim():"",i=typeof t.datasetId=="string"?t.datasetId.trim():"";return!!(e&&i&&e!==i)}function ne(s){const t=typeof s.sourceKey=="string"?s.sourceKey.trim():"";return t?new Set([t]):pt(u(s.source))}function pt(s){const t=new Set;if(!s)return t;const e=typeof s.sourceKey=="string"?s.sourceKey.trim():"";if(e&&t.add(e),s.kind==="semantic"){const i=typeof s.domainId=="string"?s.domainId:"",n=typeof s.datasetName=="string"?s.datasetName:"",a=typeof s.datasetId=="string"?s.datasetId:"";i&&a&&t.add(`semantic:${i}:datasetId:${a}`),i&&n&&t.add(`semantic:${i}:datasetName:${n}`)}if(s.kind==="physical"){const i=typeof s.connectionId=="string"?s.connectionId:"",n=typeof s.tableName=="string"?s.tableName:"",a=typeof s.databaseName=="string"?s.databaseName:"",l=typeof s.schemaName=="string"?s.schemaName:"";i&&n&&(t.add(["physical",i,a,l,n].join(":")),t.add(`physical:${i}:${n}`))}if(s.kind==="sql"){const i=typeof s.connectionId=="string"?s.connectionId:"",n=typeof s.dialect=="string"?s.dialect:"",a=typeof s.label=="string"?s.label:"";i&&(t.add(["sql",i,n,a].join(":")),t.add(`sql:${i}`))}return t}function ft(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];if(e.fieldRef&&i.push(...f(e.fieldRef,`${t}.fieldRef`)),(typeof e.inputId!="string"||!e.inputId.trim())&&i.push(`${t}.inputId is required.`),i.push(...Se(e.optionQuery,`${t}.optionQuery`)),y(e.appliesToViewIds)||i.push(`${t}.appliesToViewIds must be an array of strings.`),y(e.notAppliedToViewIds)||i.push(`${t}.notAppliedToViewIds must be an array of strings.`),!Array.isArray(e.bindings))i.push(`${t}.bindings must be an array.`);else{const n=y(e.appliesToViewIds)?new Set(e.appliesToViewIds):void 0,a=y(e.notAppliedToViewIds)?new Set(e.notAppliedToViewIds):void 0;e.bindings.forEach((l,c)=>{const d=u(l);if(!d){i.push(`${t}.bindings.${c} must be an object.`);return}typeof d.viewId!="string"||!d.viewId?i.push(`${t}.bindings.${c}.viewId is required.`):(n&&!n.has(d.viewId)&&i.push(`${t}.bindings.${c}.viewId must be included in appliesToViewIds.`),a!=null&&a.has(d.viewId)&&i.push(`${t}.bindings.${c}.viewId must not be listed in notAppliedToViewIds.`)),i.push(...f(d.fieldRef,`${t}.bindings.${c}.fieldRef`))})}return i}function Se(s,t){if(s===void 0)return[];const e=u(s);if(!e)return[`${t} must be an object.`];const i=[...b(e.valueFieldRef,`${t}.valueFieldRef`),...b(e.labelFieldRef,`${t}.labelFieldRef`),...b(e.filterFieldRef,`${t}.filterFieldRef`)];if(e.builder!=="semaphor.inputOptions"&&i.push(`${t}.builder must be semaphor.inputOptions.`),typeof e.sourceKey!="string"&&e.source===void 0&&i.push(`${t} must include source or sourceKey.`),e.source!==void 0){const n=u(e.source);!n||n.kind!=="semantic"&&n.kind!=="physical"?i.push(`${t}.source.kind must be semantic or physical.`):i.push(...C(e.source,`${t}.source`))}return u(e.valueFieldRef)||i.push(`${t}.valueFieldRef is required.`),u(e.labelFieldRef)||i.push(`${t}.labelFieldRef is required.`),e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<=0)&&i.push(`${t}.limit must be a positive integer.`),i}function ht(s){var n;const t=u(s.value);if(!t)return[`${s.path} is required for executable views.`];const e=[];if(!ve(t.builder))return e.push(`${s.path}.builder must be a supported SDK builder.`),e;s.sdkBuilder&&t.builder!==s.sdkBuilder&&e.push(`${s.path}.builder must match sdkBuilder.`),s.queryKind&&z(s.queryKind)&&t.builder!==zt(s.queryKind)&&e.push(`${s.path}.builder must match queryKind.`);const i=u(t.spec);if(!i)return e.push(`${s.path}.spec must be an object.`),e;switch(t.builder){case"semaphor.metric":e.push(...I(i,ge,`${s.path}.spec`),...k(i,s.path),...j(i.measures,`${s.path}.spec.measures`),...b(i.primaryMeasure,`${s.path}.spec.primaryMeasure`),...b(i.dateField,`${s.path}.spec.dateField`),...K(i.dimensions,`${s.path}.spec.dimensions`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`));break;case"semaphor.analysis":e.push(...I(i,He,`${s.path}.spec`),...k(i,s.path),...j(i.measures,`${s.path}.spec.measures`),...b(i.primaryMeasure,`${s.path}.spec.primaryMeasure`),...b(i.dateField,`${s.path}.spec.dateField`),...K(i.dimensions,`${s.path}.spec.dimensions`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`),...yt(i,`${s.path}.spec`));break;case"semaphor.records":e.push(...I(i,Ye,`${s.path}.spec`),...k(i,s.path),...j(i.fields,`${s.path}.spec.fields`),...b(i.dateField,`${s.path}.spec.dateField`),...F(i.orderBy,`${s.path}.spec.orderBy`),...N(i.filters,`${s.path}.spec.filters`),...gt(i.totals,`${s.path}.spec.totals`));break;case"semaphor.matrix":{const{id:a,label:l,matrixWindowRequest:c,...d}=i;for(const[$,E]of Object.entries({id:a,label:l}))E!==void 0&&(typeof E!="string"||!E.trim())&&e.push(`${s.path}.spec.${$} must be a nonempty string.`);const g=Q.safeParse({intent:{...d,kind:"matrix"},matrixWindowRequest:c});g.success||e.push(...g.error.issues.map($=>`${s.path}.spec.${$.path.join(".")}: ${$.message}`));break}case"semaphor.sql":e.push(...I(i,Je,`${s.path}.spec`),...k(i,s.path)),((n=u(i.source))==null?void 0:n.kind)!=="sql"&&e.push(`${s.path}.spec.source.kind must be sql.`),(typeof i.sql!="string"||!i.sql.trim())&&e.push(`${s.path}.spec.sql is required.`),e.push(...K(i.fields,`${s.path}.spec.fields`));break}return e}function yt(s,t){const e=[];if(s.driverMode!==void 0&&!We.has(s.driverMode)&&e.push(`${t}.driverMode must be a supported analysis driver mode.`),s.includePopulation!==void 0&&typeof s.includePopulation!="boolean"&&e.push(`${t}.includePopulation must be a boolean.`),s.calendarContext!==void 0){const i=u(s.calendarContext);if(!i)e.push(`${t}.calendarContext must be an object.`);else{i.tz!==void 0&&typeof i.tz!="string"&&e.push(`${t}.calendarContext.tz must be a string.`),i.weekStart!==void 0&&(typeof i.weekStart!="number"||!Number.isInteger(i.weekStart)||i.weekStart<0||i.weekStart>6)&&e.push(`${t}.calendarContext.weekStart must be an integer between 0 and 6.`);const n=i.anchor;if(n!==void 0&&n!=="now"){const a=u(n);(!a||typeof a.iso!="string"||!a.iso.trim())&&e.push(`${t}.calendarContext.anchor must be now or { iso }.`)}}}return e}function gt(s,t){if(s===void 0)return[];const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="server"&&i.push(`${t}.mode must be server.`),!Array.isArray(e.measures)||e.measures.length===0?i.push(`${t}.measures must include at least one measure.`):e.measures.forEach((n,a)=>{var l;i.push(...$e(n,`${t}.measures.${a}`)),((l=u(n))==null?void 0:l.role)!=="measure"&&i.push(`${t}.measures.${a}.role must be measure.`)}),i}function I(s,t,e){const i=[];return Object.keys(s).forEach(n=>{t.has(n)||i.push(`${e}.${n} is not supported for this SDK builder.`)}),i}function k(s,t){return u(s.source)?C(s.source,`${t}.spec.source`):[`${t}.spec.source must be an object.`]}function j(s,t){const e=St(s,t);return Array.isArray(s)&&s.forEach((i,n)=>{e.push(...f(i,`${t}.${n}`))}),e}function K(s,t){if(s===void 0)return[];if(!Array.isArray(s))return[`${t} must be an array.`];const e=[];return s.forEach((i,n)=>{e.push(...f(i,`${t}.${n}`))}),e}function F(s,t){if(s===void 0)return[];const e=u(s);return e?[...f(e.field,`${t}.field`),...bt(e.direction,`${t}.direction`)]:[`${t} must be an object.`]}function bt(s,t){return s==="asc"||s==="desc"?[]:[`${t} must be asc or desc.`]}function N(s,t){if(s===void 0)return[];if(!Array.isArray(s))return[`${t} must be an array.`];const e=[];return s.forEach((i,n)=>{const a=u(i);if(!a){e.push(`${t}.${n} must be an object.`);return}e.push(...f(a.field,`${t}.${n}.field`))}),e}function St(s,t){return!Array.isArray(s)||s.length===0?[`${t} must be a non-empty array.`]:[]}function zt(s){switch(s){case"metric":return"semaphor.metric";case"records":return"semaphor.records";case"matrix":return"semaphor.matrix";case"analysis":return"semaphor.analysis";case"sql_fallback":return"semaphor.sql"}}function vt(s){const t=u(s.computation),e=u(s.visualSpec);return(t==null?void 0:t.kind)==="presentation_only"||(t==null?void 0:t.kind)==="derived"||(t==null?void 0:t.kind)==="unsupported"||s.visual==="text_block"||(e==null?void 0:e.visualType)==="text_block"}function $t(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return Ze.has(e.visualType)||i.push(`${t}.visualType must be a supported visual type.`),e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<=0)&&i.push(`${t}.limit must be a positive integer.`),e.tableBehavior!==void 0&&i.push(...It(e.tableBehavior,`${t}.tableBehavior`)),i}function It(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.tableMode!=="bounded"&&e.tableMode!=="server_paginated"&&e.tableMode!=="server_windowed"&&i.push(`${t}.tableMode must be a supported table mode.`),i.push(...kt(e.height,`${t}.height`),...wt(e.pagination,`${t}.pagination`),...At(e.sorting,`${t}.sorting`),..._t(e.totals,`${t}.totals`)),typeof e.serverSideRequired!="boolean"&&i.push(`${t}.serverSideRequired must be a boolean.`),i}function kt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.maxPx!="number"||!Number.isInteger(e.maxPx)||e.maxPx<=0)&&i.push(`${t}.maxPx must be a positive integer.`),e.scroll!=="vertical"&&e.scroll!=="both"&&i.push(`${t}.scroll must be vertical or both.`),typeof e.stickyHeader!="boolean"&&i.push(`${t}.stickyHeader must be a boolean.`),i}function wt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="none"&&e.mode!=="server"&&e.mode!=="client_for_bounded_rows"&&i.push(`${t}.mode must be a supported pagination mode.`),e.pageSize!==void 0&&(typeof e.pageSize!="number"||!Number.isInteger(e.pageSize)||e.pageSize<=0)&&i.push(`${t}.pageSize must be a positive integer.`),e.readsFrom!==void 0&&e.readsFrom!=="result.pagination"&&i.push(`${t}.readsFrom must be result.pagination.`),i}function At(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="server"&&e.mode!=="client_for_bounded_rows"&&i.push(`${t}.mode must be a supported sorting mode.`),e.defaultField!==void 0&&(typeof e.defaultField!="string"||!e.defaultField.trim())&&i.push(`${t}.defaultField must be a non-empty string.`),e.defaultDirection!==void 0&&e.defaultDirection!=="asc"&&e.defaultDirection!=="desc"&&i.push(`${t}.defaultDirection must be asc or desc.`),e.resetPageOnChange!==void 0&&typeof e.resetPageOnChange!="boolean"&&i.push(`${t}.resetPageOnChange must be a boolean.`),i}function _t(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return e.mode!=="none"&&e.mode!=="server"&&e.mode!=="local"?(i.push(`${t}.mode must be none, server, or local.`),i):e.mode==="none"?(e.measures!==void 0&&i.push(`${t}.measures is not allowed when mode is none.`),e.label!==void 0&&i.push(`${t}.label is not allowed when mode is none.`),i):e.mode==="server"?(!Array.isArray(e.measures)||e.measures.length===0?i.push(`${t}.measures must include at least one measure when mode is server.`):e.measures.forEach((n,a)=>{var l;i.push(...$e(n,`${t}.measures.${a}`)),((l=u(n))==null?void 0:l.role)!=="measure"&&i.push(`${t}.measures.${a}.role must be measure.`)}),e.label!==void 0&&i.push(`${t}.label is not allowed when mode is server.`),i):(e.mode==="local"&&(e.label!=="Displayed rows"&&e.label!=="Current page"&&i.push(`${t}.label must be Displayed rows or Current page when mode is local.`),e.measures!==void 0&&i.push(`${t}.measures is not allowed when mode is local.`)),i)}function Rt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];switch(e.kind){case"server_query":z(e.queryKind)||i.push(`${t}.queryKind must be a supported codegen query kind.`),e.queryOwnership!==void 0&&e.queryOwnership!=="view_owned"&&e.queryOwnership!=="shared_query"&&i.push(`${t}.queryOwnership must be view_owned or shared_query.`),e.sourceKeys!==void 0&&!y(e.sourceKeys)&&i.push(`${t}.sourceKeys must be an array of strings.`),e.fieldNames!==void 0&&!y(e.fieldNames)&&i.push(`${t}.fieldNames must be an array of strings.`);break;case"derived":(typeof e.upstreamViewId!="string"||!e.upstreamViewId.trim())&&i.push(`${t}.upstreamViewId is required.`),(typeof e.derivation!="string"||!e.derivation.trim())&&i.push(`${t}.derivation is required.`);break;case"presentation_only":break;case"unsupported":(typeof e.reason!="string"||!e.reason.trim())&&i.push(`${t}.reason is required.`),(typeof e.suggestedModelingFix!="string"||!e.suggestedModelingFix.trim())&&i.push(`${t}.suggestedModelingFix is required.`);break;default:i.push(`${t}.kind must be a supported computation kind.`)}return i}function xt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];for(const a of["title","requestedQuestion","suggestedModelingFix"])(typeof e[a]!="string"||!e[a].trim())&&i.push(`${t}.${a} is required.`);return Xe.has(e.reason)||i.push(`${t}.reason must be a supported unsupported insight reason.`),(e.relationshipCandidate!==void 0||e.nextRepairAction!==void 0)&&e.reason!=="missing_relationship"&&i.push(`${t} relationship repair metadata is only valid for missing_relationship unsupported insights.`),e.diagnostic!==void 0&&i.push(...Ct(e.diagnostic,`${t}.diagnostic`,e.reason)),e.relationshipCandidate!==void 0&&i.push(...qt(e.relationshipCandidate,`${t}.relationshipCandidate`)),e.nextRepairAction!==void 0&&i.push(...Et(e.nextRepairAction,`${t}.nextRepairAction`)),i}function Ct(s,t,e){const i=u(s);if(!i)return[`${t} must be an object.`];const n=[],a=new Set(["kind","inputId","inputLabel","optionSource","optionField","missingEvidence"]);Object.keys(i).forEach(c=>{a.has(c)||n.push(`${t}.${c} is not supported; raw identifier diagnostics support only kind, inputId, inputLabel, optionSource, optionField, and missingEvidence.`)}),e!=="raw_identifier_filter_options"&&n.push(`${t} is only valid for raw_identifier_filter_options unsupported insights.`),i.kind!=="raw_identifier_filter_options"&&n.push(`${t}.kind must be raw_identifier_filter_options.`);for(const c of["inputId","inputLabel"])(typeof i[c]!="string"||!i[c].trim())&&n.push(`${t}.${c} must be a non-empty string.`);n.push(...M(i.optionSource,`${t}.optionSource`)),n.push(...ze(i.optionField,`${t}.optionField`));const l=new Set(["display_field","relationship_display_path"]);return!Array.isArray(i.missingEvidence)||i.missingEvidence.length===0?n.push(`${t}.missingEvidence must be a non-empty evidence array.`):i.missingEvidence.forEach((c,d)=>{l.has(c)||n.push(`${t}.missingEvidence.${d} must be display_field or relationship_display_path.`)}),n}function Et(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["tool","reason"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; repair actions support only tool and reason.`)}),e.tool!=="semaphor_propose_semantic_model_change"&&i.push(`${t}.tool must be semaphor_propose_semantic_model_change.`),e.reason!=="missing_relationship"&&i.push(`${t}.reason must be missing_relationship.`),i}function qt(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["source","sourceFields","target","targetFields"]);Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidates support only source, sourceFields, target, and targetFields.`)}),i.push(...M(e.source,`${t}.source`)),i.push(...M(e.target,`${t}.target`));for(const a of["sourceFields","targetFields"]){const l=e[a];if(!Array.isArray(l)||l.length===0){i.push(`${t}.${a} must be a non-empty endpoint field array.`);continue}l.forEach((c,d)=>{i.push(...ze(c,`${t}.${a}.${d}`))})}return i}function ze(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["name","label","role","dataType"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidate fields are scoped by their endpoint and support only name, label, role, and dataType.`)}),(typeof e.name!="string"||!e.name.trim())&&i.push(`${t}.name must be a non-empty string.`),e.role!==void 0&&(typeof e.role!="string"||!["dimension","measure","date","id","unknown"].includes(e.role))&&i.push(`${t}.role must be dimension, measure, date, id, or unknown.`),e.dataType!==void 0&&(typeof e.dataType!="string"||!["string","number","boolean","date","datetime","unknown"].includes(e.dataType))&&i.push(`${t}.dataType must be string, number, boolean, date, datetime, or unknown.`),i}function M(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[],n=new Set(["kind","domainId","datasetName","datasetId","label","sourceKey"]);return Object.keys(e).forEach(a=>{n.has(a)||i.push(`${t}.${a} is not supported; relationship candidate sources support only semantic identity fields.`)}),e.kind!=="semantic"&&i.push(`${t} must use semantic source identity.`),(typeof e.domainId!="string"||!e.domainId.trim()||typeof e.datasetName!="string"||!e.datasetName.trim())&&i.push(`${t} must include semantic domainId and datasetName.`),i}function z(s){return Ue.has(s)}function ve(s){return Ge.has(s)}function b(s,t){return s===void 0?[]:f(s,t)}function f(s,t){const e=u(s);if(!e)return[`${t} must be an object.`];const i=[];return(typeof e.name!="string"||!e.name.trim())&&i.push(`${t}.name is required.`),!e.source&&typeof e.sourceKey!="string"&&i.push(`${t} must include source or sourceKey.`),e.aggregate!==void 0&&!Qe.has(e.aggregate)&&i.push(`${t}.aggregate must be a supported aggregate function.`),i}function $e(s,t){const e=u(s),i=f(s,t);if(!e||typeof e.sourceKey=="string"&&e.sourceKey.trim())return i;if(e.source!==void 0){const a=C(e.source,`${t}.source`);return a.length===0||i.push(...a),i}return i.includes(`${t} must include source or sourceKey.`)||i.push(`${t} must include source or sourceKey.`),i}function u(s){return s&&typeof s=="object"&&!Array.isArray(s)?s:void 0}function y(s){return Array.isArray(s)&&s.every(t=>typeof t=="string")}const Ie=r.z.union([o.semaphorMetricResultSchema,o.semaphorRecordsResultSchema,o.semaphorInputOptionsResultSchema,o.semaphorSqlResultSchema,G]),ke=r.z.object({status:r.z.enum(["not_required","resolved","missing","ambiguous","fanout_risk","unknown"]),requiredSources:r.z.array(o.semaphorSourceRefSchema).optional(),relationshipsUsed:r.z.array(r.z.string()).optional(),missingSources:r.z.array(r.z.string()).optional(),warnings:r.z.array(r.z.string()).optional(),message:r.z.string().optional(),recommendedNextStep:r.z.string().optional(),joinPlanSummary:r.z.object({baseSource:o.semaphorSourceRefSchema.optional(),joinedSources:r.z.array(o.semaphorSourceRefSchema).optional(),joinCount:r.z.number().optional()}).passthrough().optional(),fanoutRisk:r.z.object({status:r.z.enum(["none","warning","error","unknown"]),message:r.z.string().optional()}).passthrough().optional()}).passthrough(),ae=r.z.enum(["ambiguous_fields","empty_result","missing_grounded_fields","missing_relationship","no_grounded_query","partial_result","presentation_incomplete","query_validation_failed","unsafe_join"]),H=r.z.object({version:r.z.literal(1),status:r.z.enum(["answered","partial","blocked"]),summary:r.z.string(),answered:r.z.array(r.z.object({slotId:r.z.string().optional(),queryId:r.z.string().optional(),summary:r.z.string(),evidenceIds:r.z.array(r.z.string()).optional(),fieldsUsed:r.z.array(o.semaphorExecutionFieldRefSchema).optional()}).passthrough()),blocked:r.z.array(r.z.object({slotId:r.z.string().optional(),queryId:r.z.string().optional(),reasonCode:ae,message:r.z.string(),missingFields:r.z.array(r.z.string()).optional(),availableFields:r.z.array(r.z.string()).optional(),ambiguousFields:r.z.array(r.z.string()).optional(),missingRelationships:r.z.array(r.z.string()).optional(),evidenceIds:r.z.array(r.z.string()).optional(),neededFromUser:r.z.array(r.z.string()).optional(),recommendedNextStep:r.z.string().optional()}).passthrough()),semanticModelRecommendations:r.z.array(r.z.object({reasonCode:ae,message:r.z.string(),recommendedNextStep:r.z.string().optional()}).passthrough()).optional()}).passthrough(),Y=r.z.object({scope:r.z.literal("filtered_query"),measures:r.z.record(o.nullableScalarSchema)}).passthrough(),J=r.z.object({answeredObligations:r.z.array(r.z.string()),missingObligations:r.z.array(r.z.string()),warnings:r.z.array(o.semaphorAnalyticsValidationIssueSchema).optional()}).passthrough(),Z=r.z.object({intentId:r.z.string().optional(),queryId:r.z.string().optional(),status:r.z.enum(["answered","partial","failed"]),resultShape:r.z.enum(["metric","records","inputOptions","sql","matrix","period_change","analysis"]).optional(),intent:r.z.unknown().optional(),compiledQuery:r.z.unknown().optional(),fieldsUsed:r.z.array(o.semaphorExecutionFieldRefSchema).optional(),result:Ie.optional(),validation:o.semaphorAnalyticsValidationResultSchema,coverage:J.optional(),missingFields:r.z.array(r.z.string()).optional(),warnings:r.z.array(r.z.string()).optional(),relationshipDiagnostics:ke.optional(),diagnosticFeedback:H.optional(),population:Y.optional(),metadata:r.z.record(r.z.string(),r.z.unknown()).optional()}).passthrough(),we=Z;function jt(s){switch(s){case"boolean":return r.z.boolean().optional();case"compactExecutionFieldArray":return r.z.array(o.semaphorCompactFieldRefSchema).optional();case"coverage":return J.optional();case"diagnosticFeedback":return H.optional();case"executionFieldArray":return r.z.array(o.semaphorExecutionFieldRefSchema).optional();case"executionResult":return we.optional();case"number":return r.z.number().finite().optional();case"population":return Y.optional();case"record":return o.recordSchema.optional();case"recordArray":return o.recordArraySchema.optional();case"responseDetail":return r.z.enum(["compact","standard","debug"]).optional();case"string":return r.z.string().optional();case"stringArray":return r.z.array(r.z.string()).optional();case"unknown":return r.z.unknown().optional();case"unknownArray":return r.z.array(r.z.unknown()).optional();case"validationResult":return o.semaphorAnalyticsValidationResultSchema.optional()}}const Ae=Object.fromEntries(Object.entries(R).map(([s,t])=>[s,jt(t)])),_e=r.z.object(Ae).strict(),X=r.z.object({sourceKey:r.z.string().optional(),kind:r.z.enum(["semantic","physical","sql"]).optional(),domainId:r.z.string().optional(),datasetName:r.z.string().optional(),datasetId:r.z.string().optional(),connectionId:r.z.string().optional(),tableName:r.z.string().optional(),label:r.z.string().optional()}).passthrough(),S=r.z.object({name:r.z.string(),label:r.z.string().optional(),role:r.z.enum(["dimension","measure","date","id","unknown"]).optional(),dataType:r.z.enum(["string","number","boolean","date","datetime","unknown"]).optional(),aggregate:o.semaphorAggregateFunctionSchema.optional(),sourceKey:r.z.string().optional(),source:X.optional()}).passthrough(),Re=r.z.object({id:r.z.string().optional(),builder:r.z.literal("semaphor.inputOptions"),source:X.optional(),sourceKey:r.z.string().optional(),valueFieldRef:S,labelFieldRef:S,filterFieldRef:S.optional(),population:r.z.unknown().optional(),dependencies:r.z.unknown().optional(),limit:r.z.number().int().positive().optional(),spec:o.recordSchema.optional()}).passthrough(),xe=r.z.object({appliesToViewIds:r.z.array(r.z.string()).optional(),viewId:r.z.string().optional(),fieldRef:S,relationshipHint:r.z.unknown().optional(),relationshipsUsed:r.z.array(o.recordSchema).optional()}).passthrough(),Kt=r.z.object({id:r.z.string(),label:r.z.string().optional(),type:r.z.string().optional(),serverSide:r.z.boolean().optional(),fieldRef:S.optional(),optionQuery:Re.optional(),bindings:r.z.array(xe).optional(),appliesToViewIds:r.z.array(r.z.string()),relationshipHint:r.z.unknown().optional(),relationshipsUsed:r.z.array(o.recordSchema).optional()}).passthrough(),Ft=r.z.object({builder:r.z.enum(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]),spec:o.recordSchema,fallbackReason:o.recordSchema.optional()}).passthrough(),Nt=r.z.object({id:r.z.string(),title:r.z.string().optional(),purpose:r.z.string().optional(),sourcePresentation:r.z.object({sourceKeys:r.z.array(r.z.string()).optional(),sourceLabels:r.z.array(r.z.string()).optional()}).passthrough().optional(),visual:r.z.string().optional(),visualSpec:o.recordSchema.optional(),queryKind:r.z.enum(["metric","records","matrix","analysis","sql_fallback"]).optional(),sdkBuilder:r.z.enum(["semaphor.metric","semaphor.records","semaphor.matrix","semaphor.analysis","semaphor.sql"]).optional(),sdkSpec:Ft.optional(),fields:r.z.array(S).optional(),computation:o.recordSchema.optional(),uxExpectations:r.z.array(r.z.string()).optional(),validation:o.recordSchema.optional()}).passthrough(),Ot=r.z.object({inputId:r.z.string(),label:r.z.string().optional(),type:r.z.string().optional(),serverSide:r.z.boolean().optional(),fieldRef:S.optional(),optionQuery:Re.optional(),bindings:r.z.array(xe),appliesToViewIds:r.z.array(r.z.string()),notAppliedToViewIds:r.z.array(r.z.string())}).passthrough(),Tt=r.z.object({schemaVersion:r.z.literal(w),title:r.z.string(),purpose:r.z.string().optional(),userGoal:r.z.string().optional(),nextStep:r.z.string().optional(),sources:r.z.array(X),inputs:r.z.array(Kt),views:r.z.array(Nt),filterContracts:r.z.array(Ot),implementationChecklist:r.z.object({schemaVersion:r.z.string().optional(),requiredDevtools:r.z.object({mountRootDevtools:r.z.boolean(),providerDebugBridge:r.z.string().optional(),panelPosition:r.z.string().optional(),forbidden:r.z.array(r.z.string()).optional()}).passthrough(),requiredInputOptions:r.z.array(o.recordSchema),filterScopeByInput:r.z.array(o.recordSchema),bindingsByView:r.z.record(r.z.string(),r.z.array(o.recordSchema)),validationCommands:r.z.array(r.z.string()),browserSmokeChecks:r.z.array(r.z.string())}).passthrough(),nextRequiredTool:r.z.object({name:r.z.string(),reason:r.z.string().optional()}).optional(),unsupportedInsights:r.z.array(r.z.object({title:r.z.string(),requestedQuestion:r.z.string(),reason:r.z.string(),suggestedModelingFix:r.z.string()}).passthrough()).optional(),assumptions:r.z.array(r.z.string()).optional(),validation:o.recordSchema.optional()}).passthrough().superRefine((s,t)=>{const e=W(s);for(const i of e.issues)t.addIssue({code:r.z.ZodIssueCode.custom,message:i})}),Pt=new Set(Object.keys(R));function Bt(){return Object.keys(R)}function Ce(s){return Pt.has(s)}function Mt(s){if(!s||typeof s!="object"||Array.isArray(s))throw new Error("Semaphor analyze result must be an object.");const e=Object.keys(s).filter(i=>!Ce(i));if(e.length)throw new Error(`Semaphor analyze result contains unsupported top-level field(s): ${e.join(", ")}.`);return _e.parse(s)}const ee=100,A="selection:";function te(s){return[o.semaphorSourceIdentityKey(s.source),o.normalizeAnalyticsCatalogName(s.name),s.sourceField??""].join("::")}function Dt(s){return`${A}${s}`}function Ee(s){return s.startsWith(A)&&s.length>A.length}function Vt(s){return Ee(s)?s.slice(A.length):void 0}function se(s){if(!s)return"";const t=s.calendar.fiscalCalendar;return JSON.stringify([s.granularity,s.calendar.tz,s.calendar.weekStart,t?[t.kind,t.yearStartMonth]:null])}function qe(s){return JSON.stringify([te(s.field),s.operator,s.operator==="isNull"?null:s.value,se(s.temporalBucket)])}function D(s){return JSON.stringify(s.conditions.map(qe).sort())}function _(s){return JSON.stringify([o.semaphorSourceIdentityKey(s.field.source),s.field.name,s.operator,s.operator==="isNull"?null:s.value,se(s.temporalBucket)])}function V(s){return JSON.stringify(s.conditions.map(_).sort())}function Lt(s){const t=s.map(e=>e.id);if(new Set(t).size!==t.length)throw new Error("Data App selections require one active selection per id.");return s.map(e=>({...e,tuples:e.tuples.map(i=>({...i,conditions:[...i.conditions].sort((n,a)=>O(_(n),_(a)))})).sort((i,n)=>O(V(i),V(n)))})).sort((e,i)=>O(e.id,i.id))}function O(s,t){return s<t?-1:s>t?1:0}function Ut(s,t){return D(s)===D(t)}const Gt="(Blank)";function Qt(s){return s.conditions.map(t=>t.label?t.label:t.operator==="isNull"||t.value===null?Gt:String(t.value)).join(" · ")}const Wt=r.z.union([o.semaphorSemanticSourceRefSchema,o.semaphorPhysicalSourceRefSchema]),je=r.z.object({name:r.z.string().min(1),source:Wt,dataType:r.z.enum(["string","number","boolean","date","datetime"]),sourceField:r.z.string().min(1).optional()}).strict(),Ke=r.z.object({field:je,operator:r.z.enum(["=","isNull"]),value:r.z.union([r.z.string(),r.z.number().finite(),r.z.null()]),label:r.z.string().optional(),temporalBucket:o.temporalBucketMetadataSchema.optional()}).strict().superRefine((s,t)=>{s.operator==="isNull"!=(s.value===null)&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"isNull carries a null value, and only isNull does.",path:["value"]})}),Fe=r.z.object({conditions:r.z.array(Ke).min(1)}).strict().superRefine((s,t)=>{const e=s.conditions.map(i=>te(i.field));new Set(e).size!==e.length&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"A tuple holds one condition per field.",path:["conditions"]})}),Ht=r.z.object({kind:r.z.literal("selection"),sourceCardId:r.z.string().min(1),tuples:r.z.array(Fe).min(1).max(ee)}).strict(),Ne=r.z.object({field:o.semaphorFieldRefSchema,operator:r.z.enum(["=","isNull"]),value:r.z.union([r.z.string(),r.z.number().finite(),r.z.null()]),temporalBucket:o.temporalBucketMetadataSchema.optional()}).strict().superRefine((s,t)=>{s.operator==="isNull"!=(s.value===null)&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"isNull carries a null value, and only isNull does.",path:["value"]})}),Oe=r.z.object({conditions:r.z.array(Ne).min(1)}).strict().superRefine((s,t)=>{for(let e=0;e<s.conditions.length;e+=1){const i=s.conditions[e];s.conditions.findIndex((a,l)=>l<e&&o.semaphorFieldRefsMatch(a.field,i.field))!==-1&&t.addIssue({code:r.z.ZodIssueCode.custom,message:"A selection tuple can contain only one condition per field.",path:["conditions",e,"field"]})}}),Yt=r.z.object({id:r.z.string().min(1),tuples:r.z.array(Oe).min(1).max(ee)}).strict(),Te=r.z.object({runtimeFilters:o.matrixSpecSchema.innerType().shape.filters,runtimeSorts:o.matrixSpecSchema.innerType().shape.sorts.optional()});function Jt(s){return Te.parse(s)}const Zt={compiledQuery:r.z.never().optional(),intent:Q.shape.intent,resultShape:r.z.literal("matrix"),result:G.optional(),metadata:r.z.object({rowLimitExceeded:r.z.boolean(),matrixFailure:x.optional()}).passthrough()},Xt=Z.extend(Zt),es=Xt.superRefine((s,t)=>{s.status==="failed"==!!s.result&&t.addIssue({code:"custom",message:"Only answered or partial Matrix execution carries a window."}),s.result&&s.status==="partial"!=s.result.window.failures.length>0&&t.addIssue({code:"custom",message:"Matrix execution status must match acquired window failures."})});exports.MATRIX_WINDOW_LIMITS=Pe;exports.SELECTION_LIMIT=ee;exports.SEMAPHOR_ANALYZE_RESULT_FIELD_CONTRACT=R;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION=w;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION=Le;exports.analyticsExecutionEnvelopeSchema=Z;exports.analyticsSelectionConditionKey=_;exports.analyticsSelectionConditionSchema=Ne;exports.analyticsSelectionSchema=Yt;exports.analyticsSelectionTupleKey=V;exports.analyticsSelectionTupleSchema=Oe;exports.canonicalizeAnalyticsSelections=Lt;exports.getSemaphorAnalyzeResultFieldNames=Bt;exports.isSelectionInputId=Ee;exports.isSemaphorAnalyzeResultFieldName=Ce;exports.isSemaphorDataAppCodegenSummary=et;exports.matrixAxisPageSchema=ce;exports.matrixBlockRequestSchema=ue;exports.matrixCapabilitiesSchema=me;exports.matrixCellBlockSchema=le;exports.matrixDescriptorSchema=P;exports.matrixExecutionResultSchema=es;exports.matrixExportBatchSchema=Ve;exports.matrixExportColumnSchema=fe;exports.matrixExportLayoutSchema=he;exports.matrixExportRowSchema=ye;exports.matrixExportValueSchema=B;exports.matrixFailureSchema=x;exports.matrixOperationRequestSchema=Q;exports.matrixPageRequestSchema=oe;exports.matrixPathSelectionSchema=T;exports.matrixResultSchema=G;exports.matrixRuntimeInputsSchema=Te;exports.matrixWindowInputSchema=Me;exports.matrixWindowOutcomeSchema=De;exports.matrixWindowRequestSchema=L;exports.matrixWindowSchema=U;exports.parseMatrixRuntimeInputs=Jt;exports.parseSemaphorAnalyzeResult=Mt;exports.sameSelectionTuple=Ut;exports.selectionConditionKey=qe;exports.selectionConditionSchema=Ke;exports.selectionFieldKey=te;exports.selectionFieldSchema=je;exports.selectionInputId=Dt;exports.selectionInputValueSchema=Ht;exports.selectionTupleKey=D;exports.selectionTupleLabel=Qt;exports.selectionTupleSchema=Fe;exports.semaphorAnalyticsCoverageSchema=J;exports.semaphorAnalyticsDiagnosticFeedbackSchema=H;exports.semaphorAnalyticsExecutionResultSchema=we;exports.semaphorAnalyticsPopulationSchema=Y;exports.semaphorAnalyticsResultSchema=Ie;exports.semaphorAnalyzeResultSchema=_e;exports.semaphorAnalyzeResultShape=Ae;exports.semaphorDataAppCodegenSummarySchema=Tt;exports.semaphorRelationshipDiagnosticsSchema=ke;exports.sourceCardIdFromSelectionInputId=Vt;exports.temporalBucketIdentityKey=se;exports.validateSemaphorDataAppCodegenSummary=W;
@@ -1,5 +1,5 @@
1
1
  import { z as r } from "zod";
2
- import { K as g, E as se, U as B, ba as L, S as v, M as Ce, b2 as te, bb as je, aL as qe, F as Ee, m as Fe, a as xe, b0 as Ke, aQ as Ne, aR as Oe, aU as Be, aV as Te, aE as q, aJ as P, ax as Me, aO as De, aP as ie, av as Pe, at as m, au as Ve, aK as Ue, aB as ze, aC as Le, v as re, aG as Ge, s as Qe, q as ne, ah as He } from "./validators-CkHsAvwB.js";
2
+ import { K as g, E as se, U as B, bb as L, S as v, M as Ce, b3 as te, bc as je, aM as qe, F as Ee, m as Fe, a as Ke, b1 as xe, aR as Ne, aS as Oe, aV as Be, aW as Te, aF as q, aK as P, ay as Me, aP as De, aQ as ie, aw as Pe, au as m, av as Ve, aL as Ue, aC as ze, aD as Le, v as re, aH as Ge, s as Qe, q as ne, ai as He } from "./validators-CsdOtZI6.js";
3
3
  const V = {
4
4
  answerSummary: "string",
5
5
  responseDetail: "responseDetail",
@@ -532,9 +532,9 @@ function hs(t, s) {
532
532
  if (!e)
533
533
  return [`${s} must be an object.`];
534
534
  const i = [];
535
- if ((typeof e.id != "string" || !e.id.trim()) && i.push(`${s}.id is required.`), e.visualSpec !== void 0 && i.push(...Ks(e.visualSpec, `${s}.visualSpec`)), e.computation !== void 0 && i.push(
535
+ if ((typeof e.id != "string" || !e.id.trim()) && i.push(`${s}.id is required.`), e.visualSpec !== void 0 && i.push(...xs(e.visualSpec, `${s}.visualSpec`)), e.computation !== void 0 && i.push(
536
536
  ...Ds(e.computation, `${s}.computation`)
537
- ), xs(e))
537
+ ), Ks(e))
538
538
  return i.push(...E(e, `${s}`)), e.fields !== void 0 && (Array.isArray(e.fields) ? e.fields.forEach((d, b) => {
539
539
  i.push(
540
540
  ...f(d, `${s}.fields.${b}`)
@@ -611,10 +611,10 @@ function vs(t) {
611
611
  };
612
612
  }
613
613
  function Ss(t) {
614
- return typeof t.sourceKey == "string" && t.sourceKey.trim() ? [t.sourceKey, fe(t), t.name].filter(Boolean).join(":") : Ke(t);
614
+ return typeof t.sourceKey == "string" && t.sourceKey.trim() ? [t.sourceKey, fe(t), t.name].filter(Boolean).join(":") : xe(t);
615
615
  }
616
616
  function fe(t) {
617
- return xe(t);
617
+ return Ke(t);
618
618
  }
619
619
  function E(t, s) {
620
620
  var b;
@@ -801,11 +801,11 @@ function Rs(t) {
801
801
  i.dateField,
802
802
  `${t.path}.spec.dateField`
803
803
  ),
804
- ...x(
804
+ ...K(
805
805
  i.dimensions,
806
806
  `${t.path}.spec.dimensions`
807
807
  ),
808
- ...K(i.orderBy, `${t.path}.spec.orderBy`),
808
+ ...x(i.orderBy, `${t.path}.spec.orderBy`),
809
809
  ...N(i.filters, `${t.path}.spec.filters`)
810
810
  );
811
811
  break;
@@ -826,11 +826,11 @@ function Rs(t) {
826
826
  i.dateField,
827
827
  `${t.path}.spec.dateField`
828
828
  ),
829
- ...x(
829
+ ...K(
830
830
  i.dimensions,
831
831
  `${t.path}.spec.dimensions`
832
832
  ),
833
- ...K(i.orderBy, `${t.path}.spec.orderBy`),
833
+ ...x(i.orderBy, `${t.path}.spec.orderBy`),
834
834
  ...N(i.filters, `${t.path}.spec.filters`),
835
835
  ...Cs(i, `${t.path}.spec`)
836
836
  );
@@ -848,7 +848,7 @@ function Rs(t) {
848
848
  i.dateField,
849
849
  `${t.path}.spec.dateField`
850
850
  ),
851
- ...K(i.orderBy, `${t.path}.spec.orderBy`),
851
+ ...x(i.orderBy, `${t.path}.spec.orderBy`),
852
852
  ...N(i.filters, `${t.path}.spec.filters`),
853
853
  ...js(
854
854
  i.totals,
@@ -876,7 +876,7 @@ function Rs(t) {
876
876
  ),
877
877
  ..._(i, t.path)
878
878
  ), ((n = o(i.source)) == null ? void 0 : n.kind) !== "sql" && e.push(`${t.path}.spec.source.kind must be sql.`), (typeof i.sql != "string" || !i.sql.trim()) && e.push(`${t.path}.spec.sql is required.`), e.push(
879
- ...x(
879
+ ...K(
880
880
  i.fields,
881
881
  `${t.path}.spec.fields`
882
882
  )
@@ -936,7 +936,7 @@ function F(t, s) {
936
936
  e.push(...f(i, `${s}.${n}`));
937
937
  }), e;
938
938
  }
939
- function x(t, s) {
939
+ function K(t, s) {
940
940
  if (t === void 0)
941
941
  return [];
942
942
  if (!Array.isArray(t))
@@ -946,7 +946,7 @@ function x(t, s) {
946
946
  e.push(...f(i, `${s}.${n}`));
947
947
  }), e;
948
948
  }
949
- function K(t, s) {
949
+ function x(t, s) {
950
950
  if (t === void 0)
951
951
  return [];
952
952
  const e = o(t);
@@ -992,11 +992,11 @@ function Fs(t) {
992
992
  return "semaphor.sql";
993
993
  }
994
994
  }
995
- function xs(t) {
995
+ function Ks(t) {
996
996
  const s = o(t.computation), e = o(t.visualSpec);
997
997
  return (s == null ? void 0 : s.kind) === "presentation_only" || (s == null ? void 0 : s.kind) === "derived" || (s == null ? void 0 : s.kind) === "unsupported" || t.visual === "text_block" || (e == null ? void 0 : e.visualType) === "text_block";
998
998
  }
999
- function Ks(t, s) {
999
+ function xs(t, s) {
1000
1000
  const e = o(t);
1001
1001
  if (!e)
1002
1002
  return [`${s} must be an object.`];
@@ -1724,7 +1724,7 @@ const at = r.union([
1724
1724
  runtimeFilters: B.innerType().shape.filters,
1725
1725
  runtimeSorts: B.innerType().shape.sorts.optional()
1726
1726
  });
1727
- function xt(t) {
1727
+ function Kt(t) {
1728
1728
  return pt.parse(t);
1729
1729
  }
1730
1730
  const mt = {
@@ -1734,7 +1734,7 @@ const mt = {
1734
1734
  resultShape: r.literal("matrix"),
1735
1735
  result: le.optional(),
1736
1736
  metadata: r.object({ rowLimitExceeded: r.boolean(), matrixFailure: U.optional() }).passthrough()
1737
- }, ft = we.extend(mt), Kt = ft.superRefine((t, s) => {
1737
+ }, ft = we.extend(mt), xt = ft.superRefine((t, s) => {
1738
1738
  t.status === "failed" == !!t.result && s.addIssue({ code: "custom", message: "Only answered or partial Matrix execution carries a window." }), t.result && t.status === "partial" != t.result.window.failures.length > 0 && s.addIssue({ code: "custom", message: "Matrix execution status must match acquired window failures." });
1739
1739
  });
1740
1740
  export {
@@ -1771,8 +1771,8 @@ export {
1771
1771
  is as a1,
1772
1772
  St as a2,
1773
1773
  pt as a3,
1774
- xt as a4,
1775
- Kt as a5,
1774
+ Kt as a4,
1775
+ xt as a5,
1776
1776
  ce as a6,
1777
1777
  Ft as b,
1778
1778
  Ct as c,
@@ -1,4 +1,4 @@
1
- import { z as _ } from "./validators-CkHsAvwB.js";
1
+ import { z as _ } from "./validators-CsdOtZI6.js";
2
2
  const g = "higher_is_better", D = {
3
3
  displayMode: "difference",
4
4
  showComparison: !0,
@@ -1 +1 @@
1
- "use strict";const g=require("./validators-DVYAnnX0.cjs"),b="higher_is_better",C={displayMode:"difference",showComparison:!0,indicatorStyle:"arrow_badge",showColor:!0,conditionalLabel:!1};function w(o){return g.parseSemaphorIsoInstant(o)!==null}function $(o){var i,e,s,t;if(((i=o.metricComparison)==null?void 0:i.mode)!=="off"){if(((e=o.metricComparison)==null?void 0:e.mode)==="explicit")return{source:"explicit",spec:o.metricComparison.spec};if(!((o.inheritGlobalComparison??((s=o.globalDateComparison)==null?void 0:s.inheritGlobalComparison))===!1||((t=o.globalDateComparison)==null?void 0:t.selection.mode)!=="period"))return{source:"inherited",spec:o.globalDateComparison.selection.spec,...o.globalDateComparison.owner?{owner:o.globalDateComparison.owner}:{}}}}function h(o){if(o.alias)return o.alias;const i=o.entityName&&o.entityName!=="SEMAPHOR_CALCULATED_FIELD"?o.entityName:void 0,e=i&&i!==o.name?`${i}_`:"";if(o.role!=="metric")return`${e}${o.name}`;let s=o.aggregate||"metric";if(o.expression){const t=o.expression.match(/^(COUNT|SUM|AVG|MIN|MAX|MEDIAN|DISTINCT)\s*\(/i);s=t?t[1].toLowerCase():"expr"}else s=s.toLowerCase();return`${e}${o.name}_${s}`}function n(o,i,e){return e?{code:o,message:i,path:e}:{code:o,message:i}}function p(o){return!!o&&typeof o=="object"&&!Array.isArray(o)}function a(o,i,e,s){Object.keys(o).forEach(t=>{i.includes(t)||s.push(n("invalid_comparison_spec",`Comparison kind does not accept field "${t}".`,`${e}.${t}`))})}function f(o,i,e){o.alignment!==void 0&&o.alignment!=="calendar"&&o.alignment!=="weekday"&&e.push(n("invalid_comparison_spec",'Comparison alignment must be "calendar" or "weekday".',`${i}.alignment`)),o.toDate!==void 0&&typeof o.toDate!="boolean"&&e.push(n("invalid_comparison_spec","Comparison toDate must be a boolean.",`${i}.toDate`))}function _(o,i,e){o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<=0)&&e.push(n("invalid_comparison_spec","Comparison offset must be a positive safe integer.",i))}function d(o,i="comparison"){const e=[];return p(o)?(o.kind==="previous_period"?(a(o,["kind","offsetPeriods","alignment","toDate"],i,e),_(o.offsetPeriods,`${i}.offsetPeriods`,e),f(o,i,e)):o.kind==="previous_year"?(a(o,["kind","offsetYears","alignment","toDate"],i,e),_(o.offsetYears,`${i}.offsetYears`,e),f(o,i,e)):o.kind==="target"?(a(o,["kind","targetValue"],i,e),(typeof o.targetValue!="number"||!Number.isFinite(o.targetValue))&&e.push(n("invalid_comparison_spec","Target comparison requires a finite targetValue.",`${i}.targetValue`))):e.push(n("invalid_comparison_spec","Comparison kind must be previous_period, previous_year, or target.",`${i}.kind`)),{ok:e.length===0,errors:e,warnings:[]}):{ok:!1,errors:[n("invalid_comparison_spec","Comparison spec must be an object.",i)],warnings:[]}}function D(o,i="comparison"){if(!p(o))return{ok:!1,errors:[n("invalid_comparison_config","Comparison config must be an object.",i)],warnings:[]};const e=[];return o.mode==="off"?a(o,["mode"],i,e):o.mode==="explicit"?(a(o,["mode","spec"],i,e),e.push(...d(o.spec,`${i}.spec`).errors)):e.push(n("invalid_comparison_config","Comparison mode must be off or explicit.",`${i}.mode`)),{ok:e.length===0,errors:e,warnings:[]}}function u(o,i="comparisonSelection"){if(!p(o))return{ok:!1,errors:[n("invalid_global_date_comparison","Global Date comparison selection must be an object.",i)],warnings:[]};const e=[];if(o.mode==="off")a(o,["mode"],i,e);else if(o.mode==="period"){a(o,["mode","spec"],i,e);const s=d(o.spec,`${i}.spec`);e.push(...s.errors),p(o.spec)&&o.spec.kind==="target"&&e.push(n("invalid_global_date_comparison","Global Date comparison supports previous_period or previous_year, not target.",`${i}.spec.kind`))}else e.push(n("invalid_global_date_comparison","Global Date comparison mode must be off or period.",`${i}.mode`));return{ok:e.length===0,errors:e,warnings:[]}}function I(o,i="globalDateComparison"){if(!p(o))return{ok:!1,errors:[n("invalid_global_date_comparison","Global Date comparison context must be an object.",i)],warnings:[]};const e=[];return a(o,["selection","inheritGlobalComparison","owner","referenceTime"],i,e),e.push(...u(o.selection,`${i}.selection`).errors),o.inheritGlobalComparison!==void 0&&o.inheritGlobalComparison!==!1&&e.push(n("invalid_global_date_comparison","inheritGlobalComparison may only be false when present.",`${i}.inheritGlobalComparison`)),o.owner!==void 0&&(p(o.owner)?o.owner.kind==="global_date"?a(o.owner,["kind"],`${i}.owner`,e):o.owner.kind==="field_date"?(a(o.owner,["kind","filterId","label"],`${i}.owner`,e),(typeof o.owner.filterId!="string"||!o.owner.filterId.trim())&&e.push(n("invalid_global_date_comparison","Field Date comparison owner requires a non-empty filterId.",`${i}.owner.filterId`)),(typeof o.owner.label!="string"||!o.owner.label.trim())&&e.push(n("invalid_global_date_comparison","Field Date comparison owner requires a non-empty label.",`${i}.owner.label`))):e.push(n("invalid_global_date_comparison","Comparison owner kind must be global_date or field_date.",`${i}.owner.kind`)):e.push(n("invalid_global_date_comparison","Comparison owner must be an object.",`${i}.owner`))),o.referenceTime!==void 0&&(typeof o.referenceTime!="string"||!w(o.referenceTime))&&e.push(n("invalid_global_date_comparison","referenceTime must be a valid ISO date-time string when present.",`${i}.referenceTime`)),{ok:e.length===0,errors:e,warnings:[]}}function M(o,i="comparisonPolarity"){return o==="higher_is_better"||o==="lower_is_better"||o==="neutral"?{ok:!0,errors:[],warnings:[]}:{ok:!1,errors:[n("invalid_comparison_polarity","Comparison polarity must be higher_is_better, lower_is_better, or neutral.",i)],warnings:[]}}function S(o,i="comparisonPresentation"){if(!p(o))return{ok:!1,errors:[n("invalid_comparison_presentation","Comparison presentation must be an object.",i)],warnings:[]};const e=[],s=["displayMode","showComparison","precision","indicatorStyle","showColor","position","conditionalLabel","labelName","conditionalLabels","colors"];return Object.keys(o).forEach(r=>{s.includes(r)||e.push(n("invalid_comparison_presentation",`Comparison presentation does not accept field "${r}".`,`${i}.${r}`))}),[["displayMode",["difference","percent_change","both","ratio"]],["indicatorStyle",["arrow_badge","arrow","badge","none"]],["position",["left","right","top"]]].forEach(([r,l])=>{o[r]!==void 0&&!l.includes(o[r])&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} is invalid.`,`${i}.${r}`))}),["showComparison","showColor","conditionalLabel"].forEach(r=>{o[r]!==void 0&&typeof o[r]!="boolean"&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} must be a boolean.`,`${i}.${r}`))}),o.precision!==void 0&&(typeof o.precision!="number"||!Number.isInteger(o.precision)||o.precision<0||o.precision>6)&&e.push(n("invalid_comparison_presentation","Comparison presentation precision must be an integer from 0 through 6.",`${i}.precision`)),o.labelName!==void 0&&typeof o.labelName!="string"&&e.push(n("invalid_comparison_presentation","Comparison presentation labelName must be a string.",`${i}.labelName`)),["conditionalLabels","colors"].forEach(r=>{const l=o[r];if(l!==void 0){if(!p(l)){e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} must be an object.`,`${i}.${r}`));return}Object.keys(l).forEach(c=>{["increase","decrease","neutral"].includes(c)||e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} does not accept field "${c}".`,`${i}.${r}.${c}`))}),Object.entries(l).forEach(([c,m])=>{m!==void 0&&typeof m!="string"&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r}.${c} must be a string.`,`${i}.${r}.${c}`))})}}),{ok:e.length===0,errors:e,warnings:[]}}function N(o){return o===null?"unknown":o>0?"increase":o<0?"decrease":"no_change"}function T(o,i){return o==="unknown"||o==="no_change"||i==="neutral"?"neutral":i==="higher_is_better"&&o==="increase"||i==="lower_is_better"&&o==="decrease"?"favorable":"unfavorable"}function y(o){const{currentValue:i,comparisonValue:e,polarity:s=b}=o,r=i!==null&&e!==null?i-e:null,l=r!==null&&e!==null&&e!==0?r/Math.abs(e):null,c=i!==null&&e!==null&&e!==0?i/e:null,m=N(r);return{status:e===null?"insufficient_history":"available",currentValue:i,comparisonValue:e,delta:r,percentChange:l,ratio:c,direction:m,sentiment:T(m,s)}}exports.COMPARISON_PRESENTATION_DEFAULTS=C;exports.DEFAULT_METRIC_COMPARISON_POLARITY=b;exports.evaluateMetricComparison=y;exports.resolveMetricComparisonRequest=$;exports.resolveMetricResultAlias=h;exports.validateComparisonPresentationSpec=S;exports.validateGlobalDateComparisonContext=I;exports.validateGlobalDateComparisonSelection=u;exports.validateMetricComparisonConfig=D;exports.validateMetricComparisonPolarity=M;exports.validateMetricComparisonSpec=d;
1
+ "use strict";const g=require("./validators-DFeDcdpA.cjs"),b="higher_is_better",C={displayMode:"difference",showComparison:!0,indicatorStyle:"arrow_badge",showColor:!0,conditionalLabel:!1};function w(o){return g.parseSemaphorIsoInstant(o)!==null}function $(o){var i,e,s,t;if(((i=o.metricComparison)==null?void 0:i.mode)!=="off"){if(((e=o.metricComparison)==null?void 0:e.mode)==="explicit")return{source:"explicit",spec:o.metricComparison.spec};if(!((o.inheritGlobalComparison??((s=o.globalDateComparison)==null?void 0:s.inheritGlobalComparison))===!1||((t=o.globalDateComparison)==null?void 0:t.selection.mode)!=="period"))return{source:"inherited",spec:o.globalDateComparison.selection.spec,...o.globalDateComparison.owner?{owner:o.globalDateComparison.owner}:{}}}}function h(o){if(o.alias)return o.alias;const i=o.entityName&&o.entityName!=="SEMAPHOR_CALCULATED_FIELD"?o.entityName:void 0,e=i&&i!==o.name?`${i}_`:"";if(o.role!=="metric")return`${e}${o.name}`;let s=o.aggregate||"metric";if(o.expression){const t=o.expression.match(/^(COUNT|SUM|AVG|MIN|MAX|MEDIAN|DISTINCT)\s*\(/i);s=t?t[1].toLowerCase():"expr"}else s=s.toLowerCase();return`${e}${o.name}_${s}`}function n(o,i,e){return e?{code:o,message:i,path:e}:{code:o,message:i}}function p(o){return!!o&&typeof o=="object"&&!Array.isArray(o)}function a(o,i,e,s){Object.keys(o).forEach(t=>{i.includes(t)||s.push(n("invalid_comparison_spec",`Comparison kind does not accept field "${t}".`,`${e}.${t}`))})}function f(o,i,e){o.alignment!==void 0&&o.alignment!=="calendar"&&o.alignment!=="weekday"&&e.push(n("invalid_comparison_spec",'Comparison alignment must be "calendar" or "weekday".',`${i}.alignment`)),o.toDate!==void 0&&typeof o.toDate!="boolean"&&e.push(n("invalid_comparison_spec","Comparison toDate must be a boolean.",`${i}.toDate`))}function _(o,i,e){o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<=0)&&e.push(n("invalid_comparison_spec","Comparison offset must be a positive safe integer.",i))}function d(o,i="comparison"){const e=[];return p(o)?(o.kind==="previous_period"?(a(o,["kind","offsetPeriods","alignment","toDate"],i,e),_(o.offsetPeriods,`${i}.offsetPeriods`,e),f(o,i,e)):o.kind==="previous_year"?(a(o,["kind","offsetYears","alignment","toDate"],i,e),_(o.offsetYears,`${i}.offsetYears`,e),f(o,i,e)):o.kind==="target"?(a(o,["kind","targetValue"],i,e),(typeof o.targetValue!="number"||!Number.isFinite(o.targetValue))&&e.push(n("invalid_comparison_spec","Target comparison requires a finite targetValue.",`${i}.targetValue`))):e.push(n("invalid_comparison_spec","Comparison kind must be previous_period, previous_year, or target.",`${i}.kind`)),{ok:e.length===0,errors:e,warnings:[]}):{ok:!1,errors:[n("invalid_comparison_spec","Comparison spec must be an object.",i)],warnings:[]}}function D(o,i="comparison"){if(!p(o))return{ok:!1,errors:[n("invalid_comparison_config","Comparison config must be an object.",i)],warnings:[]};const e=[];return o.mode==="off"?a(o,["mode"],i,e):o.mode==="explicit"?(a(o,["mode","spec"],i,e),e.push(...d(o.spec,`${i}.spec`).errors)):e.push(n("invalid_comparison_config","Comparison mode must be off or explicit.",`${i}.mode`)),{ok:e.length===0,errors:e,warnings:[]}}function u(o,i="comparisonSelection"){if(!p(o))return{ok:!1,errors:[n("invalid_global_date_comparison","Global Date comparison selection must be an object.",i)],warnings:[]};const e=[];if(o.mode==="off")a(o,["mode"],i,e);else if(o.mode==="period"){a(o,["mode","spec"],i,e);const s=d(o.spec,`${i}.spec`);e.push(...s.errors),p(o.spec)&&o.spec.kind==="target"&&e.push(n("invalid_global_date_comparison","Global Date comparison supports previous_period or previous_year, not target.",`${i}.spec.kind`))}else e.push(n("invalid_global_date_comparison","Global Date comparison mode must be off or period.",`${i}.mode`));return{ok:e.length===0,errors:e,warnings:[]}}function I(o,i="globalDateComparison"){if(!p(o))return{ok:!1,errors:[n("invalid_global_date_comparison","Global Date comparison context must be an object.",i)],warnings:[]};const e=[];return a(o,["selection","inheritGlobalComparison","owner","referenceTime"],i,e),e.push(...u(o.selection,`${i}.selection`).errors),o.inheritGlobalComparison!==void 0&&o.inheritGlobalComparison!==!1&&e.push(n("invalid_global_date_comparison","inheritGlobalComparison may only be false when present.",`${i}.inheritGlobalComparison`)),o.owner!==void 0&&(p(o.owner)?o.owner.kind==="global_date"?a(o.owner,["kind"],`${i}.owner`,e):o.owner.kind==="field_date"?(a(o.owner,["kind","filterId","label"],`${i}.owner`,e),(typeof o.owner.filterId!="string"||!o.owner.filterId.trim())&&e.push(n("invalid_global_date_comparison","Field Date comparison owner requires a non-empty filterId.",`${i}.owner.filterId`)),(typeof o.owner.label!="string"||!o.owner.label.trim())&&e.push(n("invalid_global_date_comparison","Field Date comparison owner requires a non-empty label.",`${i}.owner.label`))):e.push(n("invalid_global_date_comparison","Comparison owner kind must be global_date or field_date.",`${i}.owner.kind`)):e.push(n("invalid_global_date_comparison","Comparison owner must be an object.",`${i}.owner`))),o.referenceTime!==void 0&&(typeof o.referenceTime!="string"||!w(o.referenceTime))&&e.push(n("invalid_global_date_comparison","referenceTime must be a valid ISO date-time string when present.",`${i}.referenceTime`)),{ok:e.length===0,errors:e,warnings:[]}}function M(o,i="comparisonPolarity"){return o==="higher_is_better"||o==="lower_is_better"||o==="neutral"?{ok:!0,errors:[],warnings:[]}:{ok:!1,errors:[n("invalid_comparison_polarity","Comparison polarity must be higher_is_better, lower_is_better, or neutral.",i)],warnings:[]}}function S(o,i="comparisonPresentation"){if(!p(o))return{ok:!1,errors:[n("invalid_comparison_presentation","Comparison presentation must be an object.",i)],warnings:[]};const e=[],s=["displayMode","showComparison","precision","indicatorStyle","showColor","position","conditionalLabel","labelName","conditionalLabels","colors"];return Object.keys(o).forEach(r=>{s.includes(r)||e.push(n("invalid_comparison_presentation",`Comparison presentation does not accept field "${r}".`,`${i}.${r}`))}),[["displayMode",["difference","percent_change","both","ratio"]],["indicatorStyle",["arrow_badge","arrow","badge","none"]],["position",["left","right","top"]]].forEach(([r,l])=>{o[r]!==void 0&&!l.includes(o[r])&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} is invalid.`,`${i}.${r}`))}),["showComparison","showColor","conditionalLabel"].forEach(r=>{o[r]!==void 0&&typeof o[r]!="boolean"&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} must be a boolean.`,`${i}.${r}`))}),o.precision!==void 0&&(typeof o.precision!="number"||!Number.isInteger(o.precision)||o.precision<0||o.precision>6)&&e.push(n("invalid_comparison_presentation","Comparison presentation precision must be an integer from 0 through 6.",`${i}.precision`)),o.labelName!==void 0&&typeof o.labelName!="string"&&e.push(n("invalid_comparison_presentation","Comparison presentation labelName must be a string.",`${i}.labelName`)),["conditionalLabels","colors"].forEach(r=>{const l=o[r];if(l!==void 0){if(!p(l)){e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} must be an object.`,`${i}.${r}`));return}Object.keys(l).forEach(c=>{["increase","decrease","neutral"].includes(c)||e.push(n("invalid_comparison_presentation",`Comparison presentation ${r} does not accept field "${c}".`,`${i}.${r}.${c}`))}),Object.entries(l).forEach(([c,m])=>{m!==void 0&&typeof m!="string"&&e.push(n("invalid_comparison_presentation",`Comparison presentation ${r}.${c} must be a string.`,`${i}.${r}.${c}`))})}}),{ok:e.length===0,errors:e,warnings:[]}}function N(o){return o===null?"unknown":o>0?"increase":o<0?"decrease":"no_change"}function T(o,i){return o==="unknown"||o==="no_change"||i==="neutral"?"neutral":i==="higher_is_better"&&o==="increase"||i==="lower_is_better"&&o==="decrease"?"favorable":"unfavorable"}function y(o){const{currentValue:i,comparisonValue:e,polarity:s=b}=o,r=i!==null&&e!==null?i-e:null,l=r!==null&&e!==null&&e!==0?r/Math.abs(e):null,c=i!==null&&e!==null&&e!==0?i/e:null,m=N(r);return{status:e===null?"insufficient_history":"available",currentValue:i,comparisonValue:e,delta:r,percentChange:l,ratio:c,direction:m,sentiment:T(m,s)}}exports.COMPARISON_PRESENTATION_DEFAULTS=C;exports.DEFAULT_METRIC_COMPARISON_POLARITY=b;exports.evaluateMetricComparison=y;exports.resolveMetricComparisonRequest=$;exports.resolveMetricResultAlias=h;exports.validateComparisonPresentationSpec=S;exports.validateGlobalDateComparisonContext=I;exports.validateGlobalDateComparisonSelection=u;exports.validateMetricComparisonConfig=D;exports.validateMetricComparisonPolarity=M;exports.validateMetricComparisonSpec=d;