react-semaphor 0.1.421 → 0.1.422

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 (52) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +2 -2
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +2 -2
  5. package/dist/chunks/{analyze-result-contract-sWcmvBOA.js → analyze-result-contract-D7pjjYPy.js} +45 -46
  6. package/dist/chunks/{analyze-result-contract-B5Eeu7vD.js → analyze-result-contract-DpDcImgk.js} +1 -1
  7. package/dist/chunks/{calendar-preferences-dialog-CscmhyuZ.js → calendar-preferences-dialog-C2fBRNZh.js} +1 -1
  8. package/dist/chunks/{calendar-preferences-dialog-cN3_2C-u.js → calendar-preferences-dialog-Cbavs2EK.js} +3 -3
  9. package/dist/chunks/{dashboard-briefing-launcher-BYTBNetR.js → dashboard-briefing-launcher-C0_ZbBK3.js} +4 -4
  10. package/dist/chunks/{dashboard-briefing-launcher-DmZkzIC3.js → dashboard-briefing-launcher-CGfEFUnX.js} +1 -1
  11. package/dist/chunks/{dashboard-controls-9DFeKIP4.js → dashboard-controls-BUuS-BGl.js} +1 -1
  12. package/dist/chunks/{dashboard-controls-PhzuaTBj.js → dashboard-controls-ae5t32xV.js} +5 -5
  13. package/dist/chunks/{dashboard-json-DyRHI3mL.js → dashboard-json-DTL_kYhz.js} +1 -1
  14. package/dist/chunks/{dashboard-json-Cxhw2TZc.js → dashboard-json-Db3rkY_a.js} +3 -3
  15. package/dist/chunks/{edit-dashboard-visual-BigSJ3-x.js → edit-dashboard-visual-CW7mv_si.js} +7030 -6963
  16. package/dist/chunks/{edit-dashboard-visual-3_jiBXsu.js → edit-dashboard-visual-Ciqdu58a.js} +38 -38
  17. package/dist/chunks/{index-BKDQw0aK.js → index-8y8XX7sX.js} +121 -121
  18. package/dist/chunks/{index-CH2ZzQo4.js → index-OD6mLD7U.js} +257 -256
  19. package/dist/chunks/{switch-TbCsyhv9.js → switch-CWcWwwDJ.js} +1 -1
  20. package/dist/chunks/{switch-CiOjVyVI.js → switch-DRNqX0v0.js} +1 -1
  21. package/dist/chunks/{update-policy-2MZ-Vf7v.js → update-policy-BCJc0oI5.js} +1 -1
  22. package/dist/chunks/{update-policy-qpyAkOyO.js → update-policy-C1pmhLz9.js} +1 -1
  23. package/dist/chunks/{use-create-flow-overlay-state-DUQmgb9H.js → use-create-flow-overlay-state-C0Uhmlpd.js} +1 -1
  24. package/dist/chunks/{use-create-flow-overlay-state-BzcJWNzh.js → use-create-flow-overlay-state-CkMmXhI-.js} +3 -3
  25. package/dist/chunks/{validators-Dj1Y-46V.js → validators-DMlVbd1p.js} +1 -1
  26. package/dist/chunks/{validators-D0pfj3jJ.js → validators-PXkij33j.js} +1 -1
  27. package/dist/dashboard/index.cjs +1 -1
  28. package/dist/dashboard/index.js +1 -1
  29. package/dist/dashboard-authoring/index.cjs +1 -1
  30. package/dist/dashboard-authoring/index.js +2 -2
  31. package/dist/data-app-builder/index.cjs +1 -1
  32. package/dist/data-app-builder/index.js +2 -2
  33. package/dist/data-app-codegen/index.cjs +1 -1
  34. package/dist/data-app-codegen/index.js +2 -2
  35. package/dist/data-app-codegen-node/index.cjs +165 -340
  36. package/dist/data-app-codegen-node/index.js +761 -952
  37. package/dist/data-app-sdk/index.cjs +2 -2
  38. package/dist/data-app-sdk/index.js +91 -95
  39. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  40. package/dist/data-app-sdk-adapters/index.js +1 -1
  41. package/dist/data-app-sdk-validation/index.cjs +1 -1
  42. package/dist/data-app-sdk-validation/index.js +2 -2
  43. package/dist/index.cjs +1 -1
  44. package/dist/index.js +7 -7
  45. package/dist/style.css +1 -1
  46. package/dist/surfboard/index.cjs +1 -1
  47. package/dist/surfboard/index.js +2 -2
  48. package/dist/types/analytics-protocol.d.ts +0 -4
  49. package/dist/types/dashboard-assistant.d.ts +0 -1
  50. package/dist/types/data-app-sdk-validation.d.ts +0 -1
  51. package/dist/types/data-app-sdk.d.ts +0 -2
  52. package/package.json +1 -1
@@ -1,57 +1,57 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("../chunks/analyze-result-contract-B5Eeu7vD.js"),R=require("../chunks/update-policy-qpyAkOyO.js"),ge=require("node:crypto"),Re="src/semaphor/generated",T=`// Generated by Semaphor Agent Plugin. Do not hand-edit analytics wiring here.
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Y=require("../chunks/analyze-result-contract-DpDcImgk.js"),R=require("../chunks/update-policy-C1pmhLz9.js"),he=require("node:crypto"),Ce="src/semaphor/generated",H=`// Generated by Semaphor Agent Plugin. Do not hand-edit analytics wiring here.
2
2
  // Regenerate from the accepted semaphor_plan_data_app codegenSummary when the plan changes.
3
- `;function Me(e,r={}){R.assertValidCodegenSummary(e);const n=Ne(e);if(n.views.length===0&&!r.allowEmpty)throw new Error("Contract generation produced zero executable views. Stop and ask for a different domain/goal or semantic model improvement; pass --allow-empty only for an explicit model-gap report.");const t=Oe(n),o=Ee({contract:n,files:t,generatorName:r.generatorName||"react-semaphor/data-app-codegen/node",generatorVersion:r.generatorVersion||"unknown"}),i={...t,"contract.manifest.json":`${JSON.stringify(o,null,2)}
4
- `};return{schemaVersion:R.GENERATED_CONTRACT_SCHEMA_VERSION,files:i,manifest:o,contentHash:String(o.generatedContentHash||""),usageExample:ve(n),warnings:n.warnings,stats:{inputCount:n.inputs.length,executableViewCount:n.views.length,presentationViewCount:n.presentationViews.length,queryCount:n.views.length,optionQueryCount:n.optionQueries.length}}}function Ne(e){var u,d,p,$,s,g,h,y,I,V,b,M;const r=[],n=[];for(const a of e.inputs){S(n,a.fieldRef);for(const w of a.bindings||[])S(n,w.fieldRef);S(n,(u=a.optionQuery)==null?void 0:u.valueFieldRef),S(n,(d=a.optionQuery)==null?void 0:d.labelFieldRef),S(n,(p=a.optionQuery)==null?void 0:p.filterFieldRef),D(n,($=a.optionQuery)==null?void 0:$.spec)}for(const a of e.filterContracts){S(n,a.fieldRef),S(n,(s=a.optionQuery)==null?void 0:s.valueFieldRef),S(n,(g=a.optionQuery)==null?void 0:g.labelFieldRef),S(n,(h=a.optionQuery)==null?void 0:h.filterFieldRef),D(n,(y=a.optionQuery)==null?void 0:y.spec);for(const w of a.bindings||[])S(n,w.fieldRef)}for(const a of e.views){for(const w of a.fields||[])S(n,w);D(n,(I=a.sdkSpec)==null?void 0:I.spec),D(n,a.visualSpec)}const t=e.implementationChecklist||{};for(const a of Object.values(t.bindingsByView||{}))for(const w of Array.isArray(a)?a:[])S(n,w.fieldRef),S(n,w.optionValueField),S(n,w.optionLabelField);for(const a of t.requiredInputOptions||[])S(n,a.visibleLabelField),S(n,a.optionValueField),S(n,a.runtimeFilterField);const o=dr([...e.sources.map(a=>({raw:a,key:Ie(a),aliases:Fe(a),name:""})),...n.map(a=>sr(a)).filter(A)]);_(o,a=>{const w=k(a.raw);return j(a.raw.label||(w==null?void 0:w.datasetName)||(w==null?void 0:w.datasetId)||(w==null?void 0:w.name)||a.raw.kind||"source")});const i=lr(o),l=re(n.filter(a=>a.name).map(a=>({raw:a,key:z(a),name:""})),a=>a.key);_(l,a=>j([a.raw.sourceKey?fr(a.raw.sourceKey):"",a.raw.aggregate?a.raw.aggregate.toLowerCase():"",a.raw.name].filter(Boolean).join("_")));const f=new Map(l.map(a=>[a.key,a.name])),F=e.inputs.map(a=>({raw:a,name:j(a.id||a.label||"input")}));_(F,a=>a.name);const m=F.filter(a=>!!a.raw.optionQuery).map(a=>({input:a,name:`${a.name}Options`,raw:a.raw.optionQuery}));_(m,a=>a.name);for(const a of m)ir(a.raw.labelFieldRef,a.raw.valueFieldRef)&&ur(a.raw.valueFieldRef)&&r.push(`Input option query ${((V=a.raw.spec)==null?void 0:V.inputId)||a.input.raw.id||a.name} uses identifier field ${a.raw.valueFieldRef.name} as both label and value. It can execute, but the UI will show key values unless the semantic model exposes a human-readable label through a modeled relationship.`);const c=e.views.filter(a=>{var w,P;return!!((w=a.sdkSpec)!=null&&w.builder&&((P=a.sdkSpec)!=null&&P.spec))}).map(a=>({raw:a,name:j(a.id||a.title||"query")}));_(c,a=>a.name);const O=e.views.filter(a=>fe(a)&&!("sdkSpec"in a)).map(a=>ar(a));for(const a of e.views)(!("sdkSpec"in a)||!((b=a.sdkSpec)!=null&&b.builder)||!((M=a.sdkSpec)!=null&&M.spec))&&!fe(a)&&r.push(`Skipped view ${a.id||a.title||"unknown"} because it has no sdkSpec.`);return Ce({inputs:F,views:c,filterContracts:e.filterContracts}),{summary:e,title:e.title||"Semaphor Data App",sources:o,fields:l,inputs:F,optionQueries:m,views:c,presentationViews:O,filterContracts:e.filterContracts,checklist:t,sourceNameByKey:i,fieldNameByKey:f,warnings:r}}function Ce({inputs:e,views:r,filterContracts:n}){const t=new Set(e.map(i=>i.raw.id).filter(Boolean)),o=new Set(r.map(i=>i.raw.id).filter(Boolean));for(const[i,l]of n.entries()){if(!t.has(l.inputId))throw new Error(`filterContracts.${i}.inputId must reference a generated input.`);const f=new Set(l.appliesToViewIds||[]),F=new Set(l.notAppliedToViewIds||[]);for(const[m,c]of(l.appliesToViewIds||[]).entries())if(!o.has(c))throw new Error(`filterContracts.${i}.appliesToViewIds.${m} must reference an executable generated view.`);for(const[m,c]of(l.notAppliedToViewIds||[]).entries())if(!o.has(c))throw new Error(`filterContracts.${i}.notAppliedToViewIds.${m} must reference an executable generated view.`);for(const[m,c]of(l.bindings||[]).entries()){if(!o.has(c.viewId))throw new Error(`filterContracts.${i}.bindings.${m}.viewId must reference an executable generated view.`);if(!f.has(c.viewId))throw new Error(`filterContracts.${i}.bindings.${m}.viewId must be included in appliesToViewIds.`);if(F.has(c.viewId))throw new Error(`filterContracts.${i}.bindings.${m}.viewId must not be listed in notAppliedToViewIds.`)}}}function Oe(e){return{"sources.ts":_e(e),"fields.ts":je(e),"inputs.ts":Pe(e),"queries.ts":De(e),"bindings.ts":Je(e),"accessors.ts":Ye(e),"metadata.ts":Ze(e),"index.ts":Xe(),"USAGE.md":Ge(e)}}function Ee({contract:e,files:r,generatorName:n,generatorVersion:t}){return{schemaVersion:R.CONTRACT_MANIFEST_SCHEMA_VERSION,generatedContractSchemaVersion:R.GENERATED_CONTRACT_SCHEMA_VERSION,generator:{name:n,version:t},generatedContentHash:xe(r),codegenSummaryValidatorVersion:R.CODEGEN_SUMMARY_VALIDATOR_VERSION,codegenSummaryHash:Ae(e.summary),codegenSummary:e.summary}}function xe(e){const r=ge.createHash("sha256");for(const n of Object.keys(e).filter(t=>t.endsWith(".ts")).sort())r.update(n),r.update("\0"),r.update(e[n]),r.update("\0");return`sha256:${r.digest("hex")}`}function Ge(e){const r=["# Semaphor Generated Data App Contract","","Generated files in this directory are governed Semaphor analytics wiring. Do not hand-edit them.","","Use the app-facing exports from `index.ts`:","","- `queries`: generated governed query factories.","- `queryOptionsForView`: active-input wiring for each generated view.","- `rowsForView`: table/records row readers.","- `rowValuesForView`: friendly row object readers for chart/table views.","- `metricValuesForView`: friendly metric-value readers.","- `kpiPropsForView`: KPI component props derived from runtime metric results.","- `roleValuesForView`: canonical dimension/measure/date/id role readers.","- `appInputSpecs`: generated input/filter specs.","- `inputOptionQueries`: option-list query factories for generated inputs.","- `semaphorGeneratedContractMetadata`: generated view/input metadata and presentation-only views.","","Start with these exports before opening large generated internals such as `metadata.ts`.",""];return e.views.length>0&&(r.push("Generated executable views:"),e.views.forEach(n=>{r.push(`- \`${n.raw.id}\`: ${n.raw.title||n.name}`)}),r.push("")),e.inputs.length>0&&(r.push("Generated inputs:"),e.inputs.forEach(n=>{r.push(`- \`${n.raw.id}\`: ${n.raw.label||n.name}`)}),r.push("")),`${r.join(`
3
+ `;function Oe(e,n={}){R.assertValidCodegenSummary(e);const r=Me(e);if(r.views.length===0&&!n.allowEmpty)throw new Error("Contract generation produced zero executable views. Stop and ask for a different domain/goal or semantic model improvement; pass --allow-empty only for an explicit model-gap report.");const t=ke(r),o=Ne({contract:r,files:t,generatorName:n.generatorName||"react-semaphor/data-app-codegen/node",generatorVersion:n.generatorVersion||"unknown"}),a={...t,"contract.manifest.json":`${JSON.stringify(o,null,2)}
4
+ `};return{schemaVersion:R.GENERATED_CONTRACT_SCHEMA_VERSION,files:a,manifest:o,contentHash:String(o.generatedContentHash||""),usageExample:Te(r),warnings:r.warnings,stats:{inputCount:r.inputs.length,executableViewCount:r.views.length,presentationViewCount:r.presentationViews.length,queryCount:r.views.length,optionQueryCount:r.optionQueries.length}}}function Me(e){var d,p,m,i,l,g,h,I,$,M,b,E;const n=[],r=[];for(const s of e.inputs){S(r,s.fieldRef);for(const V of s.bindings||[])S(r,V.fieldRef);S(r,(d=s.optionQuery)==null?void 0:d.valueFieldRef),S(r,(p=s.optionQuery)==null?void 0:p.labelFieldRef),S(r,(m=s.optionQuery)==null?void 0:m.filterFieldRef),D(r,(i=s.optionQuery)==null?void 0:i.spec)}for(const s of e.filterContracts){S(r,s.fieldRef),S(r,(l=s.optionQuery)==null?void 0:l.valueFieldRef),S(r,(g=s.optionQuery)==null?void 0:g.labelFieldRef),S(r,(h=s.optionQuery)==null?void 0:h.filterFieldRef),D(r,(I=s.optionQuery)==null?void 0:I.spec);for(const V of s.bindings||[])S(r,V.fieldRef)}for(const s of e.views){for(const V of s.fields||[])S(r,V);D(r,($=s.sdkSpec)==null?void 0:$.spec),D(r,s.visualSpec)}const t=e.implementationChecklist||{};for(const s of Object.values(t.bindingsByView||{}))for(const V of Array.isArray(s)?s:[])S(r,V.fieldRef),S(r,V.optionValueField),S(r,V.optionLabelField);for(const s of t.requiredInputOptions||[])S(r,s.visibleLabelField),S(r,s.optionValueField),S(r,s.runtimeFilterField);const o=pn([...e.sources.map(s=>({raw:s,key:Ie(s),aliases:Ve(s),name:""})),...r.map(s=>an(s)).filter(x)]);P(o,s=>{const V=F(s.raw);return j(s.raw.label||(V==null?void 0:V.datasetName)||(V==null?void 0:V.datasetId)||(V==null?void 0:V.name)||s.raw.kind||"source")});const a=ln(o),u=ne(r.filter(s=>s.name).map(s=>({raw:s,key:X(s),name:""})),s=>s.key);P(u,s=>j([s.raw.sourceKey?yn(s.raw.sourceKey):"",s.raw.aggregate?s.raw.aggregate.toLowerCase():"",s.raw.name].filter(Boolean).join("_")));const c=new Map(u.map(s=>[s.key,s.name])),w=e.inputs.map(s=>({raw:s,name:j(s.id||s.label||"input")}));P(w,s=>s.name);const f=w.filter(s=>!!s.raw.optionQuery).map(s=>({input:s,name:`${s.name}Options`,raw:s.raw.optionQuery}));P(f,s=>s.name);for(const s of f)un(s.raw.labelFieldRef,s.raw.valueFieldRef)&&dn(s.raw.valueFieldRef)&&n.push(`Input option query ${((M=s.raw.spec)==null?void 0:M.inputId)||s.input.raw.id||s.name} uses identifier field ${s.raw.valueFieldRef.name} as both label and value. It can execute, but the UI will show key values unless the semantic model exposes a human-readable label through a modeled relationship.`);const y=e.views.filter(s=>{var V,K;return!!((V=s.sdkSpec)!=null&&V.builder&&((K=s.sdkSpec)!=null&&K.spec))}).map(s=>({raw:s,name:j(s.id||s.title||"query")}));P(y,s=>s.name);const k=e.views.filter(s=>fe(s)&&!("sdkSpec"in s)).map(s=>sn(s));for(const s of e.views)(!("sdkSpec"in s)||!((b=s.sdkSpec)!=null&&b.builder)||!((E=s.sdkSpec)!=null&&E.spec))&&!fe(s)&&n.push(`Skipped view ${s.id||s.title||"unknown"} because it has no sdkSpec.`);return Ee({inputs:w,views:y,filterContracts:e.filterContracts}),{summary:e,title:e.title||"Semaphor Data App",sources:o,fields:u,inputs:w,optionQueries:f,views:y,presentationViews:k,filterContracts:e.filterContracts,checklist:t,sourceNameByKey:a,fieldNameByKey:c,warnings:n}}function Ee({inputs:e,views:n,filterContracts:r}){const t=new Set(e.map(a=>a.raw.id).filter(Boolean)),o=new Set(n.map(a=>a.raw.id).filter(Boolean));for(const[a,u]of r.entries()){if(!t.has(u.inputId))throw new Error(`filterContracts.${a}.inputId must reference a generated input.`);const c=new Set(u.appliesToViewIds||[]),w=new Set(u.notAppliedToViewIds||[]);for(const[f,y]of(u.appliesToViewIds||[]).entries())if(!o.has(y))throw new Error(`filterContracts.${a}.appliesToViewIds.${f} must reference an executable generated view.`);for(const[f,y]of(u.notAppliedToViewIds||[]).entries())if(!o.has(y))throw new Error(`filterContracts.${a}.notAppliedToViewIds.${f} must reference an executable generated view.`);for(const[f,y]of(u.bindings||[]).entries()){if(!o.has(y.viewId))throw new Error(`filterContracts.${a}.bindings.${f}.viewId must reference an executable generated view.`);if(!c.has(y.viewId))throw new Error(`filterContracts.${a}.bindings.${f}.viewId must be included in appliesToViewIds.`);if(w.has(y.viewId))throw new Error(`filterContracts.${a}.bindings.${f}.viewId must not be listed in notAppliedToViewIds.`)}}}function ke(e){return{"sources.ts":ve(e),"fields.ts":qe(e),"inputs.ts":De(e),"queries.ts":Pe(e),"bindings.ts":Le(e),"accessors.ts":Ye(e),"metadata.ts":We(e),"index.ts":Xe(),"USAGE.md":Ae(e)}}function Ne({contract:e,files:n,generatorName:r,generatorVersion:t}){return{schemaVersion:R.CONTRACT_MANIFEST_SCHEMA_VERSION,generatedContractSchemaVersion:R.GENERATED_CONTRACT_SCHEMA_VERSION,generator:{name:r,version:t},generatedContentHash:Ge(n),codegenSummaryValidatorVersion:R.CODEGEN_SUMMARY_VALIDATOR_VERSION,codegenSummaryHash:xe(e.summary),codegenSummary:e.summary}}function Ge(e){const n=he.createHash("sha256");for(const r of Object.keys(e).filter(t=>t.endsWith(".ts")).sort())n.update(r),n.update("\0"),n.update(e[r]),n.update("\0");return`sha256:${n.digest("hex")}`}function Ae(e){const n=["# Semaphor Generated Data App Contract","","Generated files in this directory are governed Semaphor analytics wiring. Do not hand-edit them.","","Use the app-facing exports from `index.ts`:","","- `queries`: generated governed query factories.","- `queryOptionsForView`: active-input wiring for each generated view.","- `rowsForView`: table/records row readers.","- `rowValuesForView`: friendly row object readers for chart/table views.","- `metricValuesForView`: friendly metric-value readers.","- `kpiPropsForView`: KPI component props derived from runtime metric results.","- `roleValuesForView`: canonical dimension/measure/date/id role readers.","- `appInputSpecs`: generated input/filter specs.","- `inputOptionQueries`: option-list query factories for generated inputs.","- `semaphorGeneratedContractMetadata`: generated view/input metadata and presentation-only views.","","Start with these exports before opening large generated internals such as `metadata.ts`.",""];return e.views.length>0&&(n.push("Generated executable views:"),e.views.forEach(r=>{n.push(`- \`${r.raw.id}\`: ${r.raw.title||r.name}`)}),n.push("")),e.inputs.length>0&&(n.push("Generated inputs:"),e.inputs.forEach(r=>{n.push(`- \`${r.raw.id}\`: ${r.raw.label||r.name}`)}),n.push("")),`${n.join(`
5
5
  `)}
6
- `}function Ae(e){return`sha256:${ge.createHash("sha256").update(ue(e)).digest("hex")}`}function ue(e){if(e===null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(t=>ue(t)).join(",")}]`;const r=e;return`{${Object.keys(r).sort().filter(t=>r[t]!==void 0).map(t=>`${JSON.stringify(t)}:${ue(r[t])}`).join(",")}}`}function ve(e){const r=e.views.find(m=>v(m)&&K(m));if(r)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, recordsSortOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const sortOption = recordsSortOptionsForView.${r.name}[0];`,'const sort = sortOption ? { key: sortOption.key, direction: "asc" as const } : undefined;',`const query = queries.${r.name}({ page, pageSize, sort });`,`const result = useSemaphorQuery(query, queryOptionsForView.${r.name}(inputHandles));`,`const rows = rowsForView.${r.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
7
- `);const n=e.views.find(m=>v(m));if(n)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, recordsSortOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const sortOption = recordsSortOptionsForView.${n.name}[0];`,'const sort = sortOption ? { key: sortOption.key, direction: "asc" as const } : undefined;',`const query = queries.${n.name}({ sort });`,`const result = useSemaphorQuery(query, queryOptionsForView.${n.name}(inputHandles));`,`const rows = rowsForView.${n.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
8
- `);const t=e.views.find(m=>X(m)&&K(m));if(t)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const query = queries.${t.name}({ page, pageSize });`,`const result = useSemaphorQuery(query, queryOptionsForView.${t.name}(inputHandles));`,`const rows = rowsForView.${t.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
9
- `);const o=e.views.find(m=>le(m)&&K(m));if(o)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const query = queries.${o.name}({ page, pageSize });`,`const result = useSemaphorQuery(query, queryOptionsForView.${o.name}(inputHandles));`,`const rows = rowsForView.${o.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
10
- `);const i=e.views.find(m=>{var c;return cr((c=m.raw.sdkSpec)==null?void 0:c.builder)});if(i)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const result = useSemaphorQuery(queries.${i.name}(), queryOptionsForView.${i.name}(inputHandles));`,`const rows = rowsForView.${i.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
11
- `);const l=e.views.find(m=>Ke(m));if(l)return['import { appInputSpecs, createInputHandleMap, kpiPropsForView, queries, queryOptionsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const result = useSemaphorQuery(queries.${l.name}(), queryOptionsForView.${l.name}(inputHandles));`,`const kpiProps = kpiPropsForView.${l.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
12
- `);const f=e.views[0];return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",f?`const result = useSemaphorQuery(queries.${f.name}(), queryOptionsForView.${f.name}(inputHandles));`:"const result = undefined;","const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
13
- `)}function X(e){var r;return q((r=e.raw.sdkSpec)==null?void 0:r.builder)==="records"}function Ke(e){var r;return q((r=e.raw.sdkSpec)==null?void 0:r.builder)==="metric"}function v(e){var r,n,t;return X(e)&&((t=(n=(r=e.raw.visualSpec)==null?void 0:r.tableBehavior)==null?void 0:n.sorting)==null?void 0:t.mode)==="server"}function le(e){var r;return q((r=e.raw.sdkSpec)==null?void 0:r.builder)==="sql"}function K(e){var r,n,t;return((t=(n=(r=e.raw.visualSpec)==null?void 0:r.tableBehavior)==null?void 0:n.pagination)==null?void 0:t.mode)==="server"}function Te(e){return X(e)&&(K(e)||v(e))||le(e)&&K(e)}function _e(e){const r=e.sources.map(({name:t,raw:o})=>{const i=He(o);return` ${t}: ${i},`}).join(`
14
- `),n=e.sources.some(t=>t.raw.kind==="semantic")?`import { semaphor } from "react-semaphor/data-app-sdk";
15
-
16
- `:"";return`${T}
17
- ${n}export const sources = {
18
- ${r}
6
+ `}function xe(e){return`sha256:${he.createHash("sha256").update(ue(e)).digest("hex")}`}function ue(e){if(e===null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(t=>ue(t)).join(",")}]`;const n=e;return`{${Object.keys(n).sort().filter(t=>n[t]!==void 0).map(t=>`${JSON.stringify(t)}:${ue(n[t])}`).join(",")}}`}function Te(e){const n=e.views.find(f=>T(f)&&_(f));if(n)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, recordsSortOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const sortOption = recordsSortOptionsForView.${n.name}[0];`,'const sort = sortOption ? { key: sortOption.key, direction: "asc" as const } : undefined;',`const query = queries.${n.name}({ page, pageSize, sort });`,`const result = useSemaphorQuery(query, queryOptionsForView.${n.name}(inputHandles));`,`const rows = rowsForView.${n.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
7
+ `);const r=e.views.find(f=>T(f));if(r)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, recordsSortOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const sortOption = recordsSortOptionsForView.${r.name}[0];`,'const sort = sortOption ? { key: sortOption.key, direction: "asc" as const } : undefined;',`const query = queries.${r.name}({ sort });`,`const result = useSemaphorQuery(query, queryOptionsForView.${r.name}(inputHandles));`,`const rows = rowsForView.${r.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
8
+ `);const t=e.views.find(f=>Z(f)&&_(f));if(t)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const query = queries.${t.name}({ page, pageSize });`,`const result = useSemaphorQuery(query, queryOptionsForView.${t.name}(inputHandles));`,`const rows = rowsForView.${t.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
9
+ `);const o=e.views.find(f=>pe(f)&&_(f));if(o)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const query = queries.${o.name}({ page, pageSize });`,`const result = useSemaphorQuery(query, queryOptionsForView.${o.name}(inputHandles));`,`const rows = rowsForView.${o.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
10
+ `);const a=e.views.find(f=>{var y;return mn((y=f.raw.sdkSpec)==null?void 0:y.builder)});if(a)return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, rowsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const result = useSemaphorQuery(queries.${a.name}(), queryOptionsForView.${a.name}(inputHandles));`,`const rows = rowsForView.${a.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
11
+ `);const u=e.views.find(f=>_e(f));if(u)return['import { appInputSpecs, createInputHandleMap, kpiPropsForView, queries, queryOptionsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",`const result = useSemaphorQuery(queries.${u.name}(), queryOptionsForView.${u.name}(inputHandles));`,`const kpiProps = kpiPropsForView.${u.name}(result);`,"const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
12
+ `);const c=e.views[0];return['import { appInputSpecs, createInputHandleMap, queries, queryOptionsForView, semaphorGeneratedContractMetadata } from "./semaphor/generated";',"const handles = useSemaphorInputs(appInputSpecs);","const inputHandles = createInputHandleMap(handles);",c?`const result = useSemaphorQuery(queries.${c.name}(), queryOptionsForView.${c.name}(inputHandles));`:"const result = undefined;","const presentationViews = semaphorGeneratedContractMetadata.presentationViews;"].join(`
13
+ `)}function Z(e){var n;return q((n=e.raw.sdkSpec)==null?void 0:n.builder)==="records"}function _e(e){var n;return q((n=e.raw.sdkSpec)==null?void 0:n.builder)==="metric"}function T(e){var n,r,t;return Z(e)&&((t=(r=(n=e.raw.visualSpec)==null?void 0:n.tableBehavior)==null?void 0:r.sorting)==null?void 0:t.mode)==="server"}function pe(e){var n;return q((n=e.raw.sdkSpec)==null?void 0:n.builder)==="sql"}function _(e){var n,r,t;return((t=(r=(n=e.raw.visualSpec)==null?void 0:n.tableBehavior)==null?void 0:r.pagination)==null?void 0:t.mode)==="server"}function He(e){return Z(e)&&(_(e)||T(e))||pe(e)&&_(e)}function ve(e){const n=e.sources.map(({name:t,raw:o})=>{const a=je(o);return` ${t}: ${a},`}).join(`
14
+ `),r=e.sources.some(t=>t.raw.kind==="semantic")?`import { semaphor } from "react-semaphor/data-app-sdk";
15
+
16
+ `:"";return`${H}
17
+ ${r}export const sources = {
18
+ ${n}
19
19
  } as const;
20
- `}function He(e){if(e.kind==="semantic"){const r={domainId:e.domainId,datasetId:e.datasetId,datasetName:e.datasetName,label:e.label};return`semaphor.source.semantic(${N(G(r))})`}return`${N(G({...e,sourceKey:void 0}))} as const`}function je(e){const r=e.fields.map(({name:t,raw:o})=>{const i=qe(o,e);return` ${t}: ${i},`}).join(`
21
- `),n=r.includes("sources.")?`import { sources } from "./sources";
20
+ `}function je(e){if(e.kind==="semantic"){const n={domainId:e.domainId,datasetId:e.datasetId,datasetName:e.datasetName,label:e.label};return`semaphor.source.semantic(${C(A(n))})`}return`${C(A({...e,sourceKey:void 0}))} as const`}function qe(e){const n=e.fields.map(({name:t,raw:o})=>{const a=Ke(o,e);return` ${t}: ${a},`}).join(`
21
+ `),r=n.includes("sources.")?`import { sources } from "./sources";
22
22
 
23
- `:"";return`${T}
24
- ${n}export const fields = {
25
- ${r}
23
+ `:"";return`${H}
24
+ ${r}export const fields = {
25
+ ${n}
26
26
  } as const;
27
- `}function qe(e,r){const n={name:e.name,label:e.label,role:e.role,dataType:e.dataType,aggregate:e.aggregate},t=pr(e),o=t?r.sourceNameByKey.get(t):void 0;if(t&&!o)throw new Error(`Field ${e.name} references source ${t}, but that source is not renderable. Include the source in codegenSummary.sources or provide field.source.`);const i=Object.entries(G(n)).map(([l,f])=>`${JSON.stringify(l)}: ${x(f,r)}`);return o&&i.push(`"source": sources.${o}`),`{ ${i.join(", ")} }`}function Pe(e){const r=e.inputs.map(p=>{const $=C(p.raw.fieldRef,e),s=[`id: ${JSON.stringify(p.raw.id)}`,`label: ${JSON.stringify(p.raw.label||p.raw.id)}`,`operator: ${JSON.stringify(mr(p.raw))}`];if($&&s.push(`field: fields.${$}`),p.raw.relationshipHint&&s.push(`relationshipHint: ${N(p.raw.relationshipHint)}`),!$)throw new Error(`Input ${p.raw.id||p.name} is missing a generated field reference.`);return` ${p.name}: semaphor.filter({ ${s.join(", ")} }),`}).join(`
28
- `),n=e.inputs.map(p=>`filterSpecs.${p.name}`).join(", "),t=e.inputs.map(p=>JSON.stringify(p.raw.id)).join(", "),o=e.optionQueries.map(p=>{const $=p.input.raw,s=p.raw,g=k(s.spec)||{},{id:h,inputId:y,source:I,sourceKey:V,valueField:b,labelField:M,population:a,dependencies:w,limit:P,...ne}=g,Y=s.sourceKey?{sourceKey:s.sourceKey}:s.source||I||(typeof V=="string"?{sourceKey:V}:void 0),te=$e(Y,e),oe=C(s.valueFieldRef,e),ae=C(s.labelFieldRef,e),se=he(p),ie={...ne,id:s.id||g.id||`${$.id}-options`,inputId:$.id,source:Y,valueField:s.valueFieldRef,labelField:s.labelFieldRef,population:s.population||a,dependencies:se,limit:s.limit||P||100};if(!te||!oe||!ae)throw new Error(`Input option query ${s.id||`${$.id}-options`} is missing source, valueField, or labelField.`);const Ve=Object.entries(G(ie)).map(([be,ke])=>`${JSON.stringify(be)}: ${x(ke,e)}`);return` ${p.name}: semaphor.inputOptions({ ${Ve.join(", ")} }),`}).join(`
29
- `),i=e.optionQueries.map(p=>{const $=Be(e,p),s=$.length>0?"inputHandles":"_inputHandles",g=$.map(h=>{const y=C(h.raw.fieldRef,e);if(!y)throw new Error(`Input option query ${p.raw.id||`${p.input.raw.id}-options`} references input ${h.raw.id} without a generated field reference.`);const I=`inputHandles[${JSON.stringify(h.raw.id)}]`;return` if (${I}) {
30
- inputs.push(semaphor.bindInput(${I}, { field: fields.${y} }));
27
+ `}function Ke(e,n){const r={name:e.name,label:e.label,role:e.role,dataType:e.dataType,aggregate:e.aggregate},t=cn(e),o=t?n.sourceNameByKey.get(t):void 0;if(t&&!o)throw new Error(`Field ${e.name} references source ${t}, but that source is not renderable. Include the source in codegenSummary.sources or provide field.source.`);const a=Object.entries(A(r)).map(([u,c])=>`${JSON.stringify(u)}: ${G(c,n)}`);return o&&a.push(`"source": sources.${o}`),`{ ${a.join(", ")} }`}function De(e){const n=e.inputs.map(m=>{const i=O(m.raw.fieldRef,e),l=[`id: ${JSON.stringify(m.raw.id)}`,`label: ${JSON.stringify(m.raw.label||m.raw.id)}`,`operator: ${JSON.stringify(fn(m.raw))}`];if(i&&l.push(`field: fields.${i}`),m.raw.relationshipHint&&l.push(`relationshipHint: ${C(m.raw.relationshipHint)}`),!i)throw new Error(`Input ${m.raw.id||m.name} is missing a generated field reference.`);return` ${m.name}: semaphor.filter({ ${l.join(", ")} }),`}).join(`
28
+ `),r=e.inputs.map(m=>`filterSpecs.${m.name}`).join(", "),t=e.inputs.map(m=>JSON.stringify(m.raw.id)).join(", "),o=e.optionQueries.map(m=>{const i=m.input.raw,l=m.raw,g=F(l.spec)||{},{id:h,inputId:I,source:$,sourceKey:M,valueField:b,labelField:E,population:s,dependencies:V,limit:K,...re}=g,J=l.sourceKey?{sourceKey:l.sourceKey}:l.source||$||(typeof M=="string"?{sourceKey:M}:void 0),te=$e(J,e),oe=O(l.valueFieldRef,e),se=O(l.labelFieldRef,e),ae=ge(m),ie={...re,id:l.id||g.id||`${i.id}-options`,inputId:i.id,source:J,valueField:l.valueFieldRef,labelField:l.labelFieldRef,population:l.population||s,dependencies:ae,limit:l.limit||K||100};if(!te||!oe||!se)throw new Error(`Input option query ${l.id||`${i.id}-options`} is missing source, valueField, or labelField.`);const Fe=Object.entries(A(ie)).map(([be,Re])=>`${JSON.stringify(be)}: ${G(Re,e)}`);return` ${m.name}: semaphor.inputOptions({ ${Fe.join(", ")} }),`}).join(`
29
+ `),a=e.optionQueries.map(m=>{const i=Be(e,m),l=i.length>0?"inputHandles":"_inputHandles",g=i.map(h=>{const I=O(h.raw.fieldRef,e);if(!I)throw new Error(`Input option query ${m.raw.id||`${m.input.raw.id}-options`} references input ${h.raw.id} without a generated field reference.`);const $=`inputHandles[${JSON.stringify(h.raw.id)}]`;return` if (${$}) {
30
+ inputs.push(semaphor.bindInput(${$}, { field: fields.${I} }));
31
31
  }`}).join(`
32
- `);return` ${p.name}(${s}: SemaphorGeneratedInputHandleMap): SemaphorInputReference[] {
32
+ `);return` ${m.name}(${l}: SemaphorGeneratedInputHandleMap): SemaphorInputReference[] {
33
33
  const inputs: SemaphorInputReference[] = [];
34
34
  ${g}
35
35
  return inputs;
36
36
  },`}).join(`
37
37
 
38
- `),l=e.optionQueries.map(p=>` ${p.name}(inputHandles: SemaphorGeneratedInputHandleMap): SemaphorQueryRuntimeOptions {
38
+ `),u=e.optionQueries.map(m=>` ${m.name}(inputHandles: SemaphorGeneratedInputHandleMap): SemaphorQueryRuntimeOptions {
39
39
  return {
40
- inputs: inputsForInputOptionQuery.${p.name}(inputHandles),
40
+ inputs: inputsForInputOptionQuery.${m.name}(inputHandles),
41
41
  };
42
42
  },`).join(`
43
43
 
44
- `),f=e.optionQueries.map(p=>` case ${JSON.stringify(p.raw.id||`${p.input.raw.id}-options`)}:
45
- return queryOptionsForInputOptionQuery.${p.name}(inputHandles);`).join(`
46
- `),F=e.inputs.length>0,m=e.optionQueries.length>0,c=m?"inputOptionQueryId":"_inputOptionQueryId",O=m?"inputHandles":"_inputHandles",u=["SemaphorInputHandle",m?"SemaphorInputReference":void 0,"SemaphorQueryRuntimeOptions"].filter(A).join(", "),d=[F||m?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,`import type { ${u} } from "react-semaphor/data-app-sdk";`,F||m?'import { fields } from "./fields";':void 0,m?'import { sources } from "./sources";':void 0,'import type { SemaphorGeneratedInputId, SemaphorGeneratedInputOptionQueryId } from "./metadata";'].filter(A).join(`
47
- `);return`${T}
48
- ${d}
44
+ `),c=e.optionQueries.map(m=>` case ${JSON.stringify(m.raw.id||`${m.input.raw.id}-options`)}:
45
+ return queryOptionsForInputOptionQuery.${m.name}(inputHandles);`).join(`
46
+ `),w=e.inputs.length>0,f=e.optionQueries.length>0,y=f?"inputOptionQueryId":"_inputOptionQueryId",k=f?"inputHandles":"_inputHandles",d=["SemaphorInputHandle",f?"SemaphorInputReference":void 0,"SemaphorQueryRuntimeOptions"].filter(x).join(", "),p=[w||f?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,`import type { ${d} } from "react-semaphor/data-app-sdk";`,w||f?'import { fields } from "./fields";':void 0,f?'import { sources } from "./sources";':void 0,'import type { SemaphorGeneratedInputId, SemaphorGeneratedInputOptionQueryId } from "./metadata";'].filter(x).join(`
47
+ `);return`${H}
48
+ ${p}
49
49
 
50
50
  export const filterSpecs = {
51
- ${r}
51
+ ${n}
52
52
  } as const;
53
53
 
54
- export const appInputSpecs = [${n}] as const;
54
+ export const appInputSpecs = [${r}] as const;
55
55
  export const appInputIds = [${t}] as const;
56
56
 
57
57
  export type SemaphorGeneratedInputHandleMap = Partial<Record<SemaphorGeneratedInputId, SemaphorInputHandle>>;
@@ -65,56 +65,56 @@ ${o}
65
65
  } as const;
66
66
 
67
67
  export const inputsForInputOptionQuery = {
68
- ${i}
68
+ ${a}
69
69
  } as const;
70
70
 
71
71
  export const queryOptionsForInputOptionQuery = {
72
- ${l}
72
+ ${u}
73
73
  } as const;
74
74
 
75
75
  export function queryOptionsForInputOptionQueryId(
76
- ${c}: SemaphorGeneratedInputOptionQueryId,
77
- ${O}: SemaphorGeneratedInputHandleMap,
76
+ ${y}: SemaphorGeneratedInputOptionQueryId,
77
+ ${k}: SemaphorGeneratedInputHandleMap,
78
78
  ): SemaphorQueryRuntimeOptions {
79
- switch (${c}) {
80
- ${f}
79
+ switch (${y}) {
80
+ ${c}
81
81
  }
82
- throw new Error(\`Unknown generated Semaphor input option query id: \${${c}}\`);
82
+ throw new Error(\`Unknown generated Semaphor input option query id: \${${y}}\`);
83
83
  }
84
- `}function Be(e,r){const n=he(r);if(!n||n.mode==="independent")return[];if(n.mode!=="explicit")return[];const t=new Set(n.includeInputIds||[]),o=new Set([r.input.raw.id,...n.excludeInputIds||[]]);return e.inputs.filter(i=>o.has(i.raw.id)?!1:t.has(i.raw.id))}function he(e){var r;return e.raw.dependencies||((r=e.raw.spec)==null?void 0:r.dependencies)}function De(e){const r=e.views.map(d=>{var s,g,h,y,I,V;const p=q(d.raw.sdkSpec.builder),$=Qe(d);if(X(d)&&Te(d)){const b=(s=d.raw.visualSpec)==null?void 0:s.tableBehavior,M=k($.pagination),a=K(d),w=v(d),P=((g=b==null?void 0:b.pagination)==null?void 0:g.pageSize)||W(M==null?void 0:M.pageSize)||W($.limit)||100,ne=w?Z(d,e):[],Y=w?Ue({view:d,contract:e,sortFields:ne,defaultField:(h=b==null?void 0:b.sorting)==null?void 0:h.defaultField}):void 0,te=w?(y=b==null?void 0:b.sorting)==null?void 0:y.defaultDirection:void 0,oe=Le({viewName:d.name,supportsPagination:a,supportsSort:w}),ae=w?` const orderBy = resolveRecordsOrderBy(
85
- recordsSortFieldsForView.${d.name},
84
+ `}function Be(e,n){const r=ge(n);if(!r||r.mode==="independent")return[];if(r.mode!=="explicit")return[];const t=new Set(r.includeInputIds||[]),o=new Set([n.input.raw.id,...r.excludeInputIds||[]]);return e.inputs.filter(a=>o.has(a.raw.id)?!1:t.has(a.raw.id))}function ge(e){var n;return e.raw.dependencies||((n=e.raw.spec)==null?void 0:n.dependencies)}function Pe(e){const n=e.views.map(p=>{var l,g,h,I,$,M;const m=q(p.raw.sdkSpec.builder),i=Qe(p);if(Z(p)&&He(p)){const b=(l=p.raw.visualSpec)==null?void 0:l.tableBehavior,E=F(i.pagination),s=_(p),V=T(p),K=((g=b==null?void 0:b.pagination)==null?void 0:g.pageSize)||L(E==null?void 0:E.pageSize)||L(i.limit)||100,re=V?z(p,e):[],J=V?Ue({view:p,contract:e,sortFields:re,defaultField:(h=b==null?void 0:b.sorting)==null?void 0:h.defaultField}):void 0,te=V?(I=b==null?void 0:b.sorting)==null?void 0:I.defaultDirection:void 0,oe=Je({viewName:p.name,supportsPagination:s,supportsSort:V}),se=V?` const orderBy = resolveRecordsOrderBy(
85
+ recordsSortFieldsForView.${p.name},
86
86
  params.sort,
87
- ${x(Y,e)},
88
- ${x(te,e)},
87
+ ${G(J,e)},
88
+ ${G(te,e)},
89
89
  );
90
- `:"",se=w?` ...(orderBy ? { orderBy } : {}),
91
- `:"",ie=a?` pagination: resolveServerTablePagination(params, ${JSON.stringify(P)}),
92
- `:"";return` ${d.name}(
90
+ `:"",ae=V?` ...(orderBy ? { orderBy } : {}),
91
+ `:"",ie=s?` pagination: resolveServerTablePagination(params, ${JSON.stringify(K)}),
92
+ `:"";return` ${p.name}(
93
93
  params: ${oe} = {},
94
94
  ) {
95
- ${ae} return semaphor.${p}({
96
- ...${x($,e)},
97
- ${se}${ie} });
98
- },`}if(le(d)&&K(d)){const b=(I=d.raw.visualSpec)==null?void 0:I.tableBehavior,M=k($.pagination),a=((V=b==null?void 0:b.pagination)==null?void 0:V.pageSize)||W(M==null?void 0:M.pageSize)||W($.limit)||100;return` ${d.name}(
95
+ ${se} return semaphor.${m}({
96
+ ...${G(i,e)},
97
+ ${ae}${ie} });
98
+ },`}if(pe(p)&&_(p)){const b=($=p.raw.visualSpec)==null?void 0:$.tableBehavior,E=F(i.pagination),s=((M=b==null?void 0:b.pagination)==null?void 0:M.pageSize)||L(E==null?void 0:E.pageSize)||L(i.limit)||100;return` ${p.name}(
99
99
  params: SemaphorGeneratedServerPaginationParams = {},
100
100
  ) {
101
- return semaphor.${p}({
102
- ...${x($,e)},
103
- pagination: resolveServerTablePagination(params, ${JSON.stringify(a)}),
101
+ return semaphor.${m}({
102
+ ...${G(i,e)},
103
+ pagination: resolveServerTablePagination(params, ${JSON.stringify(s)}),
104
104
  });
105
- },`}return` ${d.name}: () => semaphor.${p}(${x($,e)}),`}).join(`
106
- `),n=e.views.filter(d=>v(d)).map(d=>{const $=Z(d,e).map(s=>` ${JSON.stringify(s.key)}: fields.${s.fieldName},`).join(`
107
- `);return` ${d.name}: {
108
- ${$}
105
+ },`}return` ${p.name}: () => semaphor.${m}(${G(i,e)}),`}).join(`
106
+ `),r=e.views.filter(p=>T(p)).map(p=>{const i=z(p,e).map(l=>` ${JSON.stringify(l.key)}: fields.${l.fieldName},`).join(`
107
+ `);return` ${p.name}: {
108
+ ${i}
109
109
  },`}).join(`
110
- `),t=e.views.filter(d=>v(d)).map(d=>{const $=Z(d,e).map(s=>` { key: ${JSON.stringify(s.key)}, label: ${JSON.stringify(s.label)}, field: fields.${s.fieldName} },`).join(`
111
- `);return` ${d.name}: [
112
- ${$}
110
+ `),t=e.views.filter(p=>T(p)).map(p=>{const i=z(p,e).map(l=>` { key: ${JSON.stringify(l.key)}, label: ${JSON.stringify(l.label)}, field: fields.${l.fieldName} },`).join(`
111
+ `);return` ${p.name}: [
112
+ ${i}
113
113
  ],`}).join(`
114
- `),o=e.views.some(d=>v(d)),i=e.views.some(d=>K(d)),l=[r,n,t].join(`
115
- `),f=[r?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,o?'import type { SemaphorFieldRef } from "react-semaphor/data-app-sdk";':void 0,l.includes("fields.")?'import { fields } from "./fields";':void 0,l.includes("sources.")?'import { sources } from "./sources";':void 0].filter(A).join(`
116
- `);return`${T}
117
- ${f}
114
+ `),o=e.views.some(p=>T(p)),a=e.views.some(p=>_(p)),u=[n,r,t].join(`
115
+ `),c=[n?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,o?'import type { SemaphorFieldRef } from "react-semaphor/data-app-sdk";':void 0,u.includes("fields.")?'import { fields } from "./fields";':void 0,u.includes("sources.")?'import { sources } from "./sources";':void 0].filter(x).join(`
116
+ `);return`${H}
117
+ ${c}
118
118
  ${o?`export type SemaphorGeneratedRecordsSortDirection = "asc" | "desc";
119
119
 
120
120
  export type SemaphorGeneratedRecordsSort<TSortKey extends string = string> = {
@@ -125,17 +125,17 @@ export type SemaphorGeneratedRecordsSort<TSortKey extends string = string> = {
125
125
  export type SemaphorGeneratedRecordsSortParams<TSortKey extends string = string> = {
126
126
  sort?: SemaphorGeneratedRecordsSort<TSortKey> | null;
127
127
  };
128
- `:""}${i?`export type SemaphorGeneratedServerPaginationParams = {
128
+ `:""}${a?`export type SemaphorGeneratedServerPaginationParams = {
129
129
  page?: number;
130
130
  pageSize?: number;
131
131
  };
132
- `:""}${o&&i?`export type SemaphorGeneratedRecordsQueryParams<TSortKey extends string = string> =
132
+ `:""}${o&&a?`export type SemaphorGeneratedRecordsQueryParams<TSortKey extends string = string> =
133
133
  SemaphorGeneratedServerPaginationParams &
134
134
  SemaphorGeneratedRecordsSortParams<TSortKey>;
135
135
  `:""}
136
136
 
137
137
  export const recordsSortFieldsForView = {
138
- ${n}
138
+ ${r}
139
139
  } as const;
140
140
 
141
141
  export const recordsSortOptionsForView = {
@@ -143,7 +143,7 @@ ${t}
143
143
  } as const;
144
144
 
145
145
  export const queries = {
146
- ${r}
146
+ ${n}
147
147
  } as const;
148
148
 
149
149
  ${o?`function resolveRecordsOrderBy<TSortKey extends string>(
@@ -166,7 +166,7 @@ ${o?`function resolveRecordsOrderBy<TSortKey extends string>(
166
166
  };
167
167
  }
168
168
  `:""}
169
- ${i?`function resolveServerTablePagination(
169
+ ${a?`function resolveServerTablePagination(
170
170
  params: SemaphorGeneratedServerPaginationParams,
171
171
  defaultPageSize: number,
172
172
  ) {
@@ -176,29 +176,29 @@ ${i?`function resolveServerTablePagination(
176
176
  };
177
177
  }
178
178
  `:""}
179
- `}function Qe(e){var i,l;const r=k((i=e.raw.sdkSpec)==null?void 0:i.spec)||{},{kind:n,id:t,...o}=r;return{...o,id:e.raw.id,label:((l=e.raw.visualSpec)==null?void 0:l.title)||e.raw.title||o.label}}function Z(e,r){var i,l;const n=[],t=k((i=e.raw.sdkSpec)==null?void 0:i.spec)||{};for(const f of H(t.fields))S(n,f);S(n,t.dateField),S(n,(l=k(t.orderBy))==null?void 0:l.field);for(const f of e.raw.fields||[])S(n,f);return re(n.map(f=>{const F=C(f,r);if(!(!f.name||!F))return{key:F,fieldName:F,rawName:f.name,label:f.label||f.name}}).filter(A),f=>f.key)}function Ue({view:e,contract:r,sortFields:n,defaultField:t}){var F,m;const o=new Set(n.map(c=>c.key));if(t&&o.has(t))return t;const i=n.filter(c=>c.rawName===t);if(i.length===1)return i[0].key;const l=k((F=e.raw.sdkSpec)==null?void 0:F.spec),f=C((m=k(l==null?void 0:l.orderBy))==null?void 0:m.field,r);return f&&o.has(f)?f:void 0}function Le({viewName:e,supportsPagination:r,supportsSort:n}){return r&&n?`SemaphorGeneratedRecordsQueryParams<Extract<keyof typeof recordsSortFieldsForView.${e}, string>>`:n?`SemaphorGeneratedRecordsSortParams<Extract<keyof typeof recordsSortFieldsForView.${e}, string>>`:"SemaphorGeneratedServerPaginationParams"}function Je(e){const r=e.views.map(c=>{const u=ze(e,c.raw.id).map(d=>{const p=d.inputId,$=C(d.fieldRef,e);if(!p||!$)return"";const s=[`field: fields.${$}`];if(d.relationshipHint)s.push(`relationshipHint: ${N(d.relationshipHint)}`);else if(Array.isArray(d.relationshipsUsed)&&d.relationshipsUsed.length>0){const h=d.relationshipsUsed.map(y=>{var I;return(I=k(y))==null?void 0:I.id}).filter(y=>typeof y=="string"&&y.length>0);h.length>0&&s.push(`relationshipHint: ${N({relationshipIds:h})}`)}const g=`inputHandles[${JSON.stringify(p)}]`;return` if (${g}) {
180
- inputs.push(semaphor.bindInput(${g}, { ${s.join(", ")} }));
179
+ `}function Qe(e){var a,u;const n=F((a=e.raw.sdkSpec)==null?void 0:a.spec)||{},{kind:r,id:t,...o}=n;return{...o,id:e.raw.id,label:((u=e.raw.visualSpec)==null?void 0:u.title)||e.raw.title||o.label}}function z(e,n){var a,u;const r=[],t=F((a=e.raw.sdkSpec)==null?void 0:a.spec)||{};for(const c of v(t.fields))S(r,c);S(r,t.dateField),S(r,(u=F(t.orderBy))==null?void 0:u.field);for(const c of e.raw.fields||[])S(r,c);return ne(r.map(c=>{const w=O(c,n);if(!(!c.name||!w))return{key:w,fieldName:w,rawName:c.name,label:c.label||c.name}}).filter(x),c=>c.key)}function Ue({view:e,contract:n,sortFields:r,defaultField:t}){var w,f;const o=new Set(r.map(y=>y.key));if(t&&o.has(t))return t;const a=r.filter(y=>y.rawName===t);if(a.length===1)return a[0].key;const u=F((w=e.raw.sdkSpec)==null?void 0:w.spec),c=O((f=F(u==null?void 0:u.orderBy))==null?void 0:f.field,n);return c&&o.has(c)?c:void 0}function Je({viewName:e,supportsPagination:n,supportsSort:r}){return n&&r?`SemaphorGeneratedRecordsQueryParams<Extract<keyof typeof recordsSortFieldsForView.${e}, string>>`:r?`SemaphorGeneratedRecordsSortParams<Extract<keyof typeof recordsSortFieldsForView.${e}, string>>`:"SemaphorGeneratedServerPaginationParams"}function Le(e){const n=e.views.map(y=>{const d=ze(e,y.raw.id).map(p=>{const m=p.inputId,i=O(p.fieldRef,e);if(!m||!i)return"";const l=[`field: fields.${i}`];if(p.relationshipHint)l.push(`relationshipHint: ${C(p.relationshipHint)}`);else if(Array.isArray(p.relationshipsUsed)&&p.relationshipsUsed.length>0){const h=p.relationshipsUsed.map(I=>{var $;return($=F(I))==null?void 0:$.id}).filter(I=>typeof I=="string"&&I.length>0);h.length>0&&l.push(`relationshipHint: ${C({relationshipIds:h})}`)}const g=`inputHandles[${JSON.stringify(m)}]`;return` if (${g}) {
180
+ inputs.push(semaphor.bindInput(${g}, { ${l.join(", ")} }));
181
181
  }`}).filter(Boolean).join(`
182
- `);return{view:c,renderedBindings:u}}),n=r.some(c=>c.renderedBindings.length>0),t=r.map(({view:c,renderedBindings:O})=>{const u=O?"inputHandles":"_inputHandles";return` ${c.name}(${u}: SemaphorGeneratedInputHandleMap): SemaphorInputReference[] {
182
+ `);return{view:y,renderedBindings:d}}),r=n.some(y=>y.renderedBindings.length>0),t=n.map(({view:y,renderedBindings:k})=>{const d=k?"inputHandles":"_inputHandles";return` ${y.name}(${d}: SemaphorGeneratedInputHandleMap): SemaphorInputReference[] {
183
183
  const inputs: SemaphorInputReference[] = [];
184
- ${O}
184
+ ${k}
185
185
  return inputs;
186
186
  },`}).join(`
187
187
 
188
- `),o=e.views.map(c=>` ${c.name}(inputHandles: SemaphorGeneratedInputHandleMap): SemaphorQueryRuntimeOptions {
188
+ `),o=e.views.map(y=>` ${y.name}(inputHandles: SemaphorGeneratedInputHandleMap): SemaphorQueryRuntimeOptions {
189
189
  return {
190
- inputs: inputsForView.${c.name}(inputHandles),
191
- debug: queryDebugForView.${c.name},
190
+ inputs: inputsForView.${y.name}(inputHandles),
191
+ debug: queryDebugForView.${y.name},
192
192
  };
193
193
  },`).join(`
194
194
 
195
- `),i=e.views.map(c=>` case ${JSON.stringify(c.raw.id)}:
196
- return inputsForView.${c.name}(inputHandles);`).join(`
197
- `),l=e.views.map(c=>` case ${JSON.stringify(c.raw.id)}:
198
- return queryOptionsForView.${c.name}(inputHandles);`).join(`
199
- `),f=e.views.length>0,F=f?"inputHandles":"_inputHandles",m=[n?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,'import type { SemaphorInputReference, SemaphorQueryRuntimeOptions } from "react-semaphor/data-app-sdk";',n?'import { fields } from "./fields";':void 0,'import type { SemaphorGeneratedInputHandleMap } from "./inputs";',f?'import { queryDebugForView } from "./metadata";':void 0,'import type { SemaphorGeneratedQueryViewId } from "./metadata";'].filter(A).join(`
200
- `);return`${T}
201
- ${m}
195
+ `),a=e.views.map(y=>` case ${JSON.stringify(y.raw.id)}:
196
+ return inputsForView.${y.name}(inputHandles);`).join(`
197
+ `),u=e.views.map(y=>` case ${JSON.stringify(y.raw.id)}:
198
+ return queryOptionsForView.${y.name}(inputHandles);`).join(`
199
+ `),c=e.views.length>0,w=c?"inputHandles":"_inputHandles",f=[r?'import { semaphor } from "react-semaphor/data-app-sdk";':void 0,'import type { SemaphorInputReference, SemaphorQueryRuntimeOptions } from "react-semaphor/data-app-sdk";',r?'import { fields } from "./fields";':void 0,'import type { SemaphorGeneratedInputHandleMap } from "./inputs";',c?'import { queryDebugForView } from "./metadata";':void 0,'import type { SemaphorGeneratedQueryViewId } from "./metadata";'].filter(x).join(`
200
+ `);return`${H}
201
+ ${f}
202
202
 
203
203
  export const inputsForView = {
204
204
  ${t}
@@ -210,116 +210,113 @@ ${o}
210
210
 
211
211
  export function inputsForViewId(
212
212
  viewId: SemaphorGeneratedQueryViewId,
213
- ${F}: SemaphorGeneratedInputHandleMap,
213
+ ${w}: SemaphorGeneratedInputHandleMap,
214
214
  ): SemaphorInputReference[] {
215
215
  switch (viewId) {
216
- ${i}
216
+ ${a}
217
217
  }
218
218
  throw new Error(\`Unknown generated Semaphor view id: \${viewId}\`);
219
219
  }
220
220
 
221
221
  export function queryOptionsForViewId(
222
222
  viewId: SemaphorGeneratedQueryViewId,
223
- ${F}: SemaphorGeneratedInputHandleMap,
223
+ ${w}: SemaphorGeneratedInputHandleMap,
224
224
  ): SemaphorQueryRuntimeOptions {
225
225
  switch (viewId) {
226
- ${l}
226
+ ${u}
227
227
  }
228
228
  throw new Error(\`Unknown generated Semaphor view id: \${viewId}\`);
229
229
  }
230
- `}function ze(e,r){return e.filterContracts.flatMap(n=>(n.bindings||[]).filter(t=>t.viewId===r).map(t=>({inputId:n.inputId,fieldRef:t.fieldRef,relationshipHint:t.relationshipHint,relationshipsUsed:t.relationshipsUsed})))}function Ye(e){const r=e.views.map(s=>{const h=U(s,e).map(y=>{const I=C(y.raw,e);return I?` ${y.name}: fields.${I},`:""}).filter(Boolean).join(`
231
- `);return` ${s.name}: {
232
- ${h}
233
- },`}).join(`
234
- `),n=e.views.map(s=>{const h=B(s,e).map(y=>{const I=C(y.raw,e);return I?` ${y.name}: fields.${I},`:""}).filter(Boolean).join(`
235
- `);return` ${s.name}: {
236
- ${h}
230
+ `}function ze(e,n){return e.filterContracts.flatMap(r=>(r.bindings||[]).filter(t=>t.viewId===n).map(t=>({inputId:r.inputId,fieldRef:t.fieldRef,relationshipHint:t.relationshipHint,relationshipsUsed:t.relationshipsUsed})))}function Ye(e){const n=e.views.map(i=>{const g=Q(i,e).map(h=>{const I=O(h.raw,e);return I?` ${h.name}: fields.${I},`:""}).filter(Boolean).join(`
231
+ `);return` ${i.name}: {
232
+ ${g}
237
233
  },`}).join(`
238
- `),t=e.views.map(s=>{const g=B(s,e),h=tr(g),y=nr(g),I=g.map(V=>{const b=Array.from(new Set(Se(V.raw).filter(M=>y.has(M))));return` ${V.name}: metricKeysForField(metricFieldsForView.${s.name}.${V.name}, { allowNameFallback: ${h.has(V.raw.name)?"false":"true"}, excludedKeys: ${N(b)} }),`}).join(`
239
- `);return` ${s.name}: {
240
- ${I}
234
+ `),r=e.views.map(i=>{const g=B(i,e).map(h=>{const I=O(h.raw,e);return I?` ${h.name}: fields.${I},`:""}).filter(Boolean).join(`
235
+ `);return` ${i.name}: {
236
+ ${g}
241
237
  },`}).join(`
242
- `),o=e.views.map(s=>{const h=B(s,e).map((y,I)=>` ${y.name}: ${JSON.stringify(er(s,y,I))},`).join(`
243
- `);return` ${s.name}: {
244
- ${h}
238
+ `),t=e.views.map(i=>{const g=B(i,e).map((h,I)=>` ${h.name}: ${JSON.stringify(en(i,h,I))},`).join(`
239
+ `);return` ${i.name}: {
240
+ ${g}
245
241
  },`}).join(`
246
- `),i=e.views.map(s=>{const g=B(s,e);if(g.length===0)return` ${s.name}(): Record<keyof typeof metricFieldsForView.${s.name}, unknown> {
242
+ `),o=e.views.map(i=>{const l=B(i,e);if(l.length===0)return` ${i.name}(): Record<keyof typeof metricFieldsForView.${i.name}, unknown> {
247
243
  return {};
248
- },`;const h=rr(s,g),y=g.map(I=>{const V=`metricMeasureKeysForView.${s.name}.${I.name}`,b=`metricMeasureBindingKeysForView.${s.name}.${I.name}`,M=h.has(I.name)?`readMetricValueByBindingWithFallback(measures, measureBindings, ${b}, ${V}, primaryValue)`:`readMetricValueByBinding(measures, measureBindings, ${b}, ${V})`;return` ${I.name}: ${M},`}).join(`
249
- `);return` ${s.name}(result: SemaphorGeneratedMetricResult): Record<keyof typeof metricFieldsForView.${s.name}, unknown> {
244
+ },`;const g=l.map(h=>{const $=`readMetricValueByBinding(measures, measureBindings, ${`metricMeasureBindingKeysForView.${i.name}.${h.name}`})`;return` ${h.name}: ${$},`}).join(`
245
+ `);return` ${i.name}(result: SemaphorGeneratedMetricResult): Record<keyof typeof metricFieldsForView.${i.name}, unknown> {
250
246
  const measures = result?.measures;
251
247
  const measureBindings = result?.measureBindings;
252
- const primaryValue = result?.primaryValue;
253
248
  return {
254
- ${y}
249
+ ${g}
255
250
  };
256
251
  },`}).join(`
257
252
 
258
- `),l=e.views.map(s=>{const g=B(s,e);if(g.length===0)return` ${s.name}(): Array<keyof typeof metricFieldsForView.${s.name}> {
253
+ `),a=e.views.map(i=>{const l=B(i,e);if(l.length===0)return` ${i.name}(): Array<keyof typeof metricFieldsForView.${i.name}> {
259
254
  return [];
260
- },`;const h=g.map(y=>` ...(missing.has(metricMeasureBindingKeysForView.${s.name}.${y.name}) ? [${JSON.stringify(y.name)} as keyof typeof metricFieldsForView.${s.name}] : []),`).join(`
261
- `);return` ${s.name}(result: SemaphorGeneratedMetricResult): Array<keyof typeof metricFieldsForView.${s.name}> {
255
+ },`;const g=l.map((h,I)=>{const $=`metricMeasureBindingKeysForView.${i.name}.${h.name}`,M=I===0?`readMetricValueByBinding(measures, measureBindings, ${$}) === undefined && !hasOwnPrimaryMetricValue(result)`:`readMetricValueByBinding(measures, measureBindings, ${$}) === undefined`;return` ...(missing.has(${$}) || (${M}) ? [${JSON.stringify(h.name)} as keyof typeof metricFieldsForView.${i.name}] : []),`}).join(`
256
+ `);return` ${i.name}(result: SemaphorGeneratedMetricResult): Array<keyof typeof metricFieldsForView.${i.name}> {
262
257
  const missing = new Set(result?.missingMeasures || []);
258
+ const measures = result?.measures;
259
+ const measureBindings = result?.measureBindings;
263
260
  return [
264
- ${h}
261
+ ${g}
265
262
  ];
266
263
  },`}).join(`
267
264
 
268
- `),f=e.views.map(s=>{const g=B(s,e);if(g.length===0)return"";const h=g[0],y=g.map(V=>`{ key: ${JSON.stringify(V.name)}, label: ${JSON.stringify(V.raw.label||V.raw.name)} }`).join(", "),I=g.filter(V=>V.name!==h.name).map(V=>` if (missing.includes(${JSON.stringify(V.name)})) delete values.${V.name};`).join(`
269
- `);return` ${s.name}(result: SemaphorGeneratedMetricResult): SemaphorGeneratedKpiProps {
270
- const values = mapMetricDisplayValues(metricValuesForView.${s.name}(result));
271
- const missing = missingMetricMeasuresForView.${s.name}(result).map((key) => String(key));
272
- const primaryMissing = missing.includes(${JSON.stringify(h.name)});
273
- const primaryValue = primaryMissing ? result?.primaryValue : values.${h.name};
274
- if (primaryMissing) values.${h.name} = metricDisplayValue(result?.primaryValue);
265
+ `),u=e.views.map(i=>{const l=B(i,e);if(l.length===0)return"";const g=l[0],h=l.map($=>`{ key: ${JSON.stringify($.name)}, label: ${JSON.stringify($.raw.label||$.raw.name)} }`).join(", "),I=l.filter($=>$.name!==g.name).map($=>` if (missing.includes(${JSON.stringify($.name)})) delete values.${$.name};`).join(`
266
+ `);return` ${i.name}(result: SemaphorGeneratedMetricResult): SemaphorGeneratedKpiProps {
267
+ const values = mapMetricDisplayValues(metricValuesForView.${i.name}(result));
268
+ const missing = missingMetricMeasuresForView.${i.name}(result).map((key) => String(key));
269
+ const primaryMissing = missing.includes(${JSON.stringify(g.name)});
270
+ const boundPrimaryValue = values.${g.name};
271
+ const primaryValue = primaryMissing || boundPrimaryValue === undefined ? result?.primaryValue : boundPrimaryValue;
272
+ if (primaryMissing) values.${g.name} = metricDisplayValue(result?.primaryValue);
275
273
  ${I}
276
274
  return {
277
275
  result: {
278
276
  ...(result || {}),
279
- value: metricDisplayValue(result?.value),
280
277
  primaryValue: metricDisplayValue(result?.primaryValue),
281
278
  comparisonValue: metricDisplayValue(result?.comparisonValue),
282
279
  measures: values,
283
280
  },
284
- title: ${JSON.stringify(s.raw.title||s.raw.id)},
285
- label: ${JSON.stringify(h.raw.label||h.raw.name)},
281
+ title: ${JSON.stringify(i.raw.title||i.raw.id)},
282
+ label: ${JSON.stringify(g.raw.label||g.raw.name)},
286
283
  value: metricDisplayValue(primaryValue),
287
- measures: [${y}],
284
+ measures: [${h}],
288
285
  missingMeasures: missing,
289
286
  showComparison: Boolean(result?.comparisonKind),
290
287
  };
291
288
  },`}).filter(Boolean).join(`
292
289
 
293
- `),F=e.views.map(s=>{const g=We(s,e);return` ${s.name}: ${N(g)},`}).join(`
294
- `),m=e.views.map(s=>{const h=U(s,e).map(y=>` ${y.name}: resolveColumnKey(columns, fieldsForView.${s.name}.${y.name}),`).join(`
295
- `);return` ${s.name}(columns: SemaphorGeneratedColumns): Record<keyof typeof fieldsForView.${s.name}, string | undefined> {
290
+ `),c=e.views.map(i=>{const l=Ze(i,e);return` ${i.name}: ${C(l)},`}).join(`
291
+ `),w=e.views.map(i=>{const g=Q(i,e).map(h=>` ${h.name}: resolveColumnKey(columns, fieldsForView.${i.name}.${h.name}),`).join(`
292
+ `);return` ${i.name}(columns: SemaphorGeneratedColumns): Record<keyof typeof fieldsForView.${i.name}, string | undefined> {
296
293
  return {
297
- ${h}
294
+ ${g}
298
295
  };
299
296
  },`}).join(`
300
297
 
301
- `),c=e.views.map(s=>{const h=U(s,e).map(y=>` ${y.name}: readCell(row, columns, fieldsForView.${s.name}.${y.name}),`).join(`
302
- `);return` ${s.name}(row: SemaphorGeneratedRow, columns: SemaphorGeneratedColumns): Record<keyof typeof fieldsForView.${s.name}, unknown> {
298
+ `),f=e.views.map(i=>{const g=Q(i,e).map(h=>` ${h.name}: readCell(row, columns, fieldsForView.${i.name}.${h.name}),`).join(`
299
+ `);return` ${i.name}(row: SemaphorGeneratedRow, columns: SemaphorGeneratedColumns): Record<keyof typeof fieldsForView.${i.name}, unknown> {
303
300
  return {
304
- ${h}
301
+ ${g}
305
302
  };
306
303
  },`}).join(`
307
304
 
308
- `),O=e.views.map(s=>` ${s.name}(result: SemaphorGeneratedRecordsResult): Array<Record<keyof typeof fieldsForView.${s.name}, unknown>> {
309
- return (result?.records || []).map((row) => rowValuesForView.${s.name}(row, result?.columns));
305
+ `),y=e.views.map(i=>` ${i.name}(result: SemaphorGeneratedRecordsResult): Array<Record<keyof typeof fieldsForView.${i.name}, unknown>> {
306
+ return (result?.records || []).map((row) => rowValuesForView.${i.name}(row, result?.columns));
310
307
  },`).join(`
311
308
 
312
- `),u=e.views.map(s=>{const g=U(s,e),h=g.filter(w=>w.raw.role==="dimension"),y=g.filter(w=>w.raw.role==="measure"),I=h[0],V=h[1],b=y[0],M=y[1],a=[I?` primaryDimension: values.${I.name},`:" primaryDimension: undefined,",V?` secondaryDimension: values.${V.name},`:" secondaryDimension: undefined,",b?` primaryMeasure: values.${b.name},`:" primaryMeasure: undefined,",M?` secondaryMeasure: values.${M.name},`:" secondaryMeasure: undefined,"].join(`
313
- `);return` ${s.name}(row: SemaphorGeneratedRow, columns: SemaphorGeneratedColumns): SemaphorGeneratedRoleValues {
314
- const values = rowValuesForView.${s.name}(row, columns);
309
+ `),k=e.views.map(i=>{const l=Q(i,e),g=l.filter(s=>s.raw.role==="dimension"),h=l.filter(s=>s.raw.role==="measure"),I=g[0],$=g[1],M=h[0],b=h[1],E=[I?` primaryDimension: values.${I.name},`:" primaryDimension: undefined,",$?` secondaryDimension: values.${$.name},`:" secondaryDimension: undefined,",M?` primaryMeasure: values.${M.name},`:" primaryMeasure: undefined,",b?` secondaryMeasure: values.${b.name},`:" secondaryMeasure: undefined,"].join(`
310
+ `);return` ${i.name}(row: SemaphorGeneratedRow, columns: SemaphorGeneratedColumns): SemaphorGeneratedRoleValues {
311
+ const values = rowValuesForView.${i.name}(row, columns);
315
312
  return {
316
- ${a}
313
+ ${E}
317
314
  };
318
315
  },`}).join(`
319
316
 
320
- `),d=r.includes("fields.")||n.includes("fields."),$=[`import { ${["type SemaphorFieldRef","type SemaphorResultColumn"].filter(A).join(", ")} } from "react-semaphor/data-app-sdk";`,d?'import { fields } from "./fields";':void 0].filter(A).join(`
321
- `);return`${T}
322
- ${$}
317
+ `),d=n.includes("fields.")||r.includes("fields."),m=[`import { ${["type SemaphorFieldRef","type SemaphorResultColumn"].filter(x).join(", ")} } from "react-semaphor/data-app-sdk";`,d?'import { fields } from "./fields";':void 0].filter(x).join(`
318
+ `);return`${H}
319
+ ${m}
323
320
 
324
321
  export type SemaphorGeneratedRow = Record<string, unknown>;
325
322
  export type SemaphorGeneratedColumns = readonly SemaphorResultColumn[] | null | undefined;
@@ -335,7 +332,6 @@ export type SemaphorGeneratedMetricResult = {
335
332
  readonly measureBindings?: SemaphorGeneratedMetricMeasureBindings;
336
333
  readonly missingMeasures?: readonly string[];
337
334
  readonly primaryValue: unknown;
338
- readonly value?: unknown;
339
335
  readonly comparisonKind?: string;
340
336
  readonly comparisonValue?: unknown;
341
337
  readonly delta?: number | null;
@@ -356,7 +352,6 @@ export type SemaphorGeneratedTableColumn = {
356
352
  };
357
353
  export type SemaphorGeneratedKpiResult<TValues extends Record<string, SemaphorGeneratedMetricValue> = Record<string, SemaphorGeneratedMetricValue>> =
358
354
  Record<string, unknown> & {
359
- readonly value?: SemaphorGeneratedMetricValue;
360
355
  readonly primaryValue?: SemaphorGeneratedMetricValue;
361
356
  readonly comparisonValue?: SemaphorGeneratedMetricValue;
362
357
  readonly comparisonKind?: string;
@@ -379,51 +374,47 @@ export type SemaphorGeneratedKpiProps = {
379
374
  };
380
375
 
381
376
  export const fieldsForView = {
382
- ${r}
383
- } as const;
384
-
385
- export const metricFieldsForView = {
386
377
  ${n}
387
378
  } as const;
388
379
 
389
- export const metricMeasureKeysForView = {
390
- ${t}
380
+ export const metricFieldsForView = {
381
+ ${r}
391
382
  } as const;
392
383
 
393
384
  export const metricMeasureBindingKeysForView = {
394
- ${o}
385
+ ${t}
395
386
  } as const;
396
387
 
397
388
  export const tableColumnsForView = {
398
- ${F}
389
+ ${c}
399
390
  } as const;
400
391
 
401
392
  export const columnKeysForView = {
402
- ${m}
393
+ ${w}
403
394
  } as const;
404
395
 
405
396
  export const rowValuesForView = {
406
- ${c}
397
+ ${f}
407
398
  } as const;
408
399
 
409
400
  export const rowsForView = {
410
- ${O}
401
+ ${y}
411
402
  } as const;
412
403
 
413
404
  export const roleValuesForView = {
414
- ${u}
405
+ ${k}
415
406
  } as const;
416
407
 
417
408
  export const metricValuesForView = {
418
- ${i}
409
+ ${o}
419
410
  } as const;
420
411
 
421
412
  export const missingMetricMeasuresForView = {
422
- ${l}
413
+ ${a}
423
414
  } as const;
424
415
 
425
416
  export const kpiPropsForView = {
426
- ${f}
417
+ ${u}
427
418
  } as const;
428
419
 
429
420
  export function resolveColumnKey(
@@ -467,82 +458,22 @@ export function readStringCell(
467
458
  return value === null || value === undefined ? "" : String(value);
468
459
  }
469
460
 
470
- export function readMetricValue(
471
- measures: SemaphorGeneratedMetricMeasures,
472
- field: SemaphorFieldRef,
473
- ): unknown {
474
- return readMetricValueByKeys(measures, metricKeysForField(field));
475
- }
476
-
477
- export function readMetricValueByKeys(
478
- measures: SemaphorGeneratedMetricMeasures,
479
- keys: readonly string[],
480
- ): unknown {
481
- if (!measures) {
482
- return undefined;
483
- }
484
- for (const key of keys) {
485
- if (Object.prototype.hasOwnProperty.call(measures, key)) {
486
- return measures[key];
487
- }
488
- }
489
- return undefined;
490
- }
491
-
492
461
  export function readMetricValueByBinding(
493
462
  measures: SemaphorGeneratedMetricMeasures,
494
463
  measureBindings: SemaphorGeneratedMetricMeasureBindings,
495
464
  bindingKey: string,
496
- fallbackKeys: readonly string[],
497
465
  ): unknown {
498
466
  const resultKey = measureBindings?.[bindingKey];
499
467
  if (resultKey && measures && Object.prototype.hasOwnProperty.call(measures, resultKey)) {
500
468
  return measures[resultKey];
501
469
  }
502
- return readMetricValueByKeys(measures, fallbackKeys);
503
- }
504
-
505
- export function readMetricValueByKeysWithFallback(
506
- measures: SemaphorGeneratedMetricMeasures,
507
- keys: readonly string[],
508
- fallbackValue: unknown,
509
- ): unknown {
510
- const value = readMetricValueByKeys(measures, keys);
511
- return value === undefined ? fallbackValue : value;
512
- }
513
-
514
- export function readMetricValueByBindingWithFallback(
515
- measures: SemaphorGeneratedMetricMeasures,
516
- measureBindings: SemaphorGeneratedMetricMeasureBindings,
517
- bindingKey: string,
518
- fallbackKeys: readonly string[],
519
- fallbackValue: unknown,
520
- ): unknown {
521
- const value = readMetricValueByBinding(measures, measureBindings, bindingKey, fallbackKeys);
522
- return value === undefined ? fallbackValue : value;
523
- }
524
-
525
- export function readNumberMetricValue(
526
- measures: SemaphorGeneratedMetricMeasures,
527
- field: SemaphorFieldRef,
528
- ): number | null {
529
- const value = readMetricValue(measures, field);
530
- if (typeof value === "number") {
531
- return Number.isFinite(value) ? value : null;
532
- }
533
- if (typeof value === "string" && value.trim().length > 0) {
534
- const parsed = Number(value);
535
- return Number.isFinite(parsed) ? parsed : null;
536
- }
537
- return null;
470
+ return undefined;
538
471
  }
539
472
 
540
- export function readStringMetricValue(
541
- measures: SemaphorGeneratedMetricMeasures,
542
- field: SemaphorFieldRef,
543
- ): string {
544
- const value = readMetricValue(measures, field);
545
- return value === null || value === undefined ? "" : String(value);
473
+ export function hasOwnPrimaryMetricValue(
474
+ result: SemaphorGeneratedMetricResult,
475
+ ): boolean {
476
+ return Boolean(result && Object.prototype.hasOwnProperty.call(result, "primaryValue"));
546
477
  }
547
478
 
548
479
  export function mapMetricDisplayValues(
@@ -565,112 +496,6 @@ export function metricDisplayValue(value: unknown): SemaphorGeneratedMetricValue
565
496
  return String(value);
566
497
  }
567
498
 
568
- export function metricKeysForField(
569
- field: SemaphorFieldRef,
570
- options: { allowNameFallback?: boolean; excludedKeys?: readonly string[] } = {},
571
- ): string[] {
572
- const prefixes = metricKeyPrefixesForSource(field.source);
573
- const aggregate = metricAggregateForField(field);
574
- const excludedKeys = new Set(options.excludedKeys || []);
575
- return uniqueStrings([
576
- metricQualifiedKeyForField(field),
577
- ...prefixes.map((prefix) => \`\${prefix}.\${field.name}\`),
578
- \`\${aggregate.toLowerCase()}_\${field.name}\`,
579
- \`\${aggregate}_\${field.name}\`,
580
- \`\${field.name}_\${aggregate.toLowerCase()}\`,
581
- \`\${field.name}_\${aggregate}\`,
582
- ...(options.allowNameFallback === false ? [] : [field.name]),
583
- ]).filter((key) => !excludedKeys.has(key));
584
- }
585
-
586
- function metricQualifiedKeyForField(field: SemaphorFieldRef): string {
587
- return [
588
- field.source ? sourceIdentityKey(field.source as Record<string, unknown>) : "unknown",
589
- metricAggregateForField(field),
590
- field.name,
591
- ].filter(Boolean).join(":");
592
- }
593
-
594
- function metricAggregateForField(field: SemaphorFieldRef): string {
595
- return (field.aggregate || "SUM").toUpperCase();
596
- }
597
-
598
- function metricKeyPrefixesForSource(
599
- source: SemaphorFieldRef["source"] | undefined,
600
- ): string[] {
601
- if (!source) {
602
- return [];
603
- }
604
- const sourceRecord = source as Record<string, unknown>;
605
- if (source.kind === "semantic") {
606
- const prefixes: string[] = [];
607
- const datasetName = stringProperty(sourceRecord, "datasetName");
608
- const datasetId = stringProperty(sourceRecord, "datasetId");
609
- if (datasetName) {
610
- prefixes.push(datasetName);
611
- }
612
- if (datasetId) {
613
- prefixes.push(datasetId);
614
- }
615
- return uniqueStrings(prefixes);
616
- }
617
- if (source.kind === "physical") {
618
- const prefixes: string[] = [];
619
- const databaseName = stringProperty(sourceRecord, "databaseName");
620
- const schemaName = stringProperty(sourceRecord, "schemaName");
621
- const tableName = stringProperty(sourceRecord, "tableName");
622
- if (tableName) {
623
- prefixes.push(tableName);
624
- }
625
- if (schemaName && tableName) {
626
- prefixes.push(\`\${schemaName}.\${tableName}\`);
627
- }
628
- if (databaseName && schemaName && tableName) {
629
- prefixes.push(\`\${databaseName}.\${schemaName}.\${tableName}\`);
630
- }
631
- return uniqueStrings(prefixes);
632
- }
633
- return [];
634
- }
635
-
636
- function sourceIdentityKey(source: Record<string, unknown>): string {
637
- const kind = stringProperty(source, "kind");
638
- if (kind === "semantic") {
639
- const datasetId = stringProperty(source, "datasetId");
640
- return [
641
- kind,
642
- stringProperty(source, "domainId") || "",
643
- datasetId
644
- ? \`datasetId:\${datasetId}\`
645
- : \`datasetName:\${stringProperty(source, "datasetName") || ""}\`,
646
- ].join(":");
647
- }
648
- if (kind === "physical") {
649
- return [
650
- kind,
651
- stringProperty(source, "connectionId") || "",
652
- stringProperty(source, "databaseName") || "",
653
- stringProperty(source, "schemaName") || "",
654
- stringProperty(source, "tableName") || "",
655
- ].join(":");
656
- }
657
- return [
658
- kind || "unknown",
659
- stringProperty(source, "connectionId") || "",
660
- stringProperty(source, "dialect") || "",
661
- stringProperty(source, "label") || "",
662
- ].join(":");
663
- }
664
-
665
- function stringProperty(record: Record<string, unknown>, key: string): string | undefined {
666
- const value = record[key];
667
- return typeof value === "string" && value.length > 0 ? value : undefined;
668
- }
669
-
670
- function uniqueStrings(values: string[]): string[] {
671
- return Array.from(new Set(values.filter((value) => value.length > 0)));
672
- }
673
-
674
499
  function resolveColumn(
675
500
  columns: SemaphorGeneratedColumns,
676
501
  field: SemaphorFieldRef,
@@ -773,13 +598,13 @@ function sourcesReferToSameDataset(
773
598
  }
774
599
  return false;
775
600
  }
776
- `}function We(e,r){const n=U(e,r),t=new Map((v(e)?Z(e,r):[]).map(o=>[o.fieldName,o.key]));return n.map(o=>{const i=C(o.raw,r),l=i?t.get(i):void 0;return G({key:o.name,label:o.raw.label||o.raw.name,dataType:o.raw.dataType,sortable:!!l,sortKey:l})})}function Ze(e){const r=e.checklist.filterScopeByInput||[],n=e.checklist.requiredDevtools||{},t=e.summary.views.map(u=>u.id).filter(Boolean),o=e.views.map(u=>u.raw.id).filter(Boolean),i=e.inputs.map(u=>u.raw.id).filter(Boolean),l=e.optionQueries.map(u=>u.raw.id||`${u.input.raw.id}-options`).filter(Boolean),f=Object.fromEntries(o.map(u=>[u,e.filterContracts.filter(d=>Array.isArray(d.appliesToViewIds)&&d.appliesToViewIds.includes(u)).map(d=>d.inputId)])),F=Object.fromEntries(e.views.map(u=>[u.raw.id,{title:u.raw.title,visual:u.raw.visual,visualSpec:u.raw.visualSpec,queryKind:u.raw.queryKind,sdkBuilder:u.raw.sdkBuilder}])),m=Object.fromEntries(e.views.map(u=>{var d;return[u.raw.id,G({viewId:u.raw.id,queryId:u.name,title:u.raw.title,visualType:((d=u.raw.visualSpec)==null?void 0:d.visualType)||u.raw.visual,suggestedComponentName:ye(u.raw.title||u.raw.id||u.name),marker:{attribute:"data-semaphor-view-id",value:u.raw.id}})]})),c=Object.fromEntries(e.inputs.map(u=>{var d;return[u.raw.id,G({inputId:u.raw.id,label:u.raw.label,type:u.raw.type,optionQueryId:((d=u.raw.optionQuery)==null?void 0:d.id)||(u.raw.optionQuery?`${u.raw.id}-options`:void 0),suggestedComponentName:ye(u.raw.label||u.raw.id||u.name),marker:{attribute:"data-semaphor-input-id",value:u.raw.id}})]})),O=Object.fromEntries(e.views.map(u=>{var d,p,$;return[u.name,G({viewId:u.raw.id,viewTitle:((d=u.raw.visualSpec)==null?void 0:d.title)||u.raw.title,visualType:(p=u.raw.visualSpec)==null?void 0:p.visualType,title:(($=u.raw.visualSpec)==null?void 0:$.title)||u.raw.title})]}));return`${T}
777
- export const generatedViewIds = ${N(t)} as const;
778
- export const generatedQueryViewIds = ${N(o)} as const;
779
- export const generatedInputIds = ${N(i)} as const;
780
- export const generatedInputOptionQueryIds = ${N(l)} as const;
781
- export const generatedViewAuthoring = ${N(m)} as const;
782
- export const generatedInputAuthoring = ${N(c)} as const;
601
+ `}function Ze(e,n){const r=Q(e,n),t=new Map((T(e)?z(e,n):[]).map(o=>[o.fieldName,o.key]));return r.map(o=>{const a=O(o.raw,n),u=a?t.get(a):void 0;return A({key:o.name,label:o.raw.label||o.raw.name,dataType:o.raw.dataType,sortable:!!u,sortKey:u})})}function We(e){const n=e.checklist.filterScopeByInput||[],r=e.checklist.requiredDevtools||{},t=e.summary.views.map(d=>d.id).filter(Boolean),o=e.views.map(d=>d.raw.id).filter(Boolean),a=e.inputs.map(d=>d.raw.id).filter(Boolean),u=e.optionQueries.map(d=>d.raw.id||`${d.input.raw.id}-options`).filter(Boolean),c=Object.fromEntries(o.map(d=>[d,e.filterContracts.filter(p=>Array.isArray(p.appliesToViewIds)&&p.appliesToViewIds.includes(d)).map(p=>p.inputId)])),w=Object.fromEntries(e.views.map(d=>[d.raw.id,{title:d.raw.title,visual:d.raw.visual,visualSpec:d.raw.visualSpec,queryKind:d.raw.queryKind,sdkBuilder:d.raw.sdkBuilder}])),f=Object.fromEntries(e.views.map(d=>{var p;return[d.raw.id,A({viewId:d.raw.id,queryId:d.name,title:d.raw.title,visualType:((p=d.raw.visualSpec)==null?void 0:p.visualType)||d.raw.visual,suggestedComponentName:ye(d.raw.title||d.raw.id||d.name),marker:{attribute:"data-semaphor-view-id",value:d.raw.id}})]})),y=Object.fromEntries(e.inputs.map(d=>{var p;return[d.raw.id,A({inputId:d.raw.id,label:d.raw.label,type:d.raw.type,optionQueryId:((p=d.raw.optionQuery)==null?void 0:p.id)||(d.raw.optionQuery?`${d.raw.id}-options`:void 0),suggestedComponentName:ye(d.raw.label||d.raw.id||d.name),marker:{attribute:"data-semaphor-input-id",value:d.raw.id}})]})),k=Object.fromEntries(e.views.map(d=>{var p,m,i;return[d.name,A({viewId:d.raw.id,viewTitle:((p=d.raw.visualSpec)==null?void 0:p.title)||d.raw.title,visualType:(m=d.raw.visualSpec)==null?void 0:m.visualType,title:((i=d.raw.visualSpec)==null?void 0:i.title)||d.raw.title})]}));return`${H}
602
+ export const generatedViewIds = ${C(t)} as const;
603
+ export const generatedQueryViewIds = ${C(o)} as const;
604
+ export const generatedInputIds = ${C(a)} as const;
605
+ export const generatedInputOptionQueryIds = ${C(u)} as const;
606
+ export const generatedViewAuthoring = ${C(f)} as const;
607
+ export const generatedInputAuthoring = ${C(y)} as const;
783
608
 
784
609
  export type SemaphorGeneratedViewId = typeof generatedViewIds[number];
785
610
  export type SemaphorGeneratedQueryViewId = typeof generatedQueryViewIds[number];
@@ -798,8 +623,8 @@ export type SemaphorGeneratedFilterContract = {
798
623
  readonly [key: string]: unknown;
799
624
  };
800
625
 
801
- export const generatedInputIdsForView = ${N(f)} as const;
802
- export const generatedFilterContracts: readonly SemaphorGeneratedFilterContract[] = ${N(e.filterContracts)} as const;
626
+ export const generatedInputIdsForView = ${C(c)} as const;
627
+ export const generatedFilterContracts: readonly SemaphorGeneratedFilterContract[] = ${C(e.filterContracts)} as const;
803
628
 
804
629
  export function semaphorViewMarkerProps(viewId: SemaphorGeneratedViewId) {
805
630
  return {
@@ -819,10 +644,10 @@ export function filterContractsForView(viewId: SemaphorGeneratedQueryViewId) {
819
644
  );
820
645
  }
821
646
 
822
- export const queryDebugForView = ${N(O)} as const;
647
+ export const queryDebugForView = ${C(k)} as const;
823
648
 
824
- export const semaphorGeneratedContractMetadata = ${N({schemaVersion:"semaphor-generated-data-app-contract/v1",title:e.title,requiredDevtools:n,filterContracts:e.filterContracts,filterScopeByInput:r,generatedViewIds:t,generatedQueryViewIds:o,generatedInputIds:i,generatedInputOptionQueryIds:l,generatedInputIdsForView:f,generatedViewAuthoring:m,generatedInputAuthoring:c,visualSpecs:F,presentationViews:e.presentationViews})} as const;
825
- `}function Xe(){return`${T}
649
+ export const semaphorGeneratedContractMetadata = ${C({schemaVersion:"semaphor-generated-data-app-contract/v1",title:e.title,requiredDevtools:r,filterContracts:e.filterContracts,filterScopeByInput:n,generatedViewIds:t,generatedQueryViewIds:o,generatedInputIds:a,generatedInputOptionQueryIds:u,generatedInputIdsForView:c,generatedViewAuthoring:f,generatedInputAuthoring:y,visualSpecs:w,presentationViews:e.presentationViews})} as const;
650
+ `}function Xe(){return`${H}
826
651
  export * from "./sources";
827
652
  export * from "./fields";
828
653
  export * from "./inputs";
@@ -830,4 +655,4 @@ export * from "./queries";
830
655
  export * from "./bindings";
831
656
  export * from "./accessors";
832
657
  export * from "./metadata";
833
- `}function D(e,r){if(!(!r||typeof r!="object")){if(Array.isArray(r)){for(const n of r)D(e,n);return}E(r)&&S(e,J(r));for(const n of Object.values(r))D(e,n)}}function U(e,r){const n=[];if(or(n,e.raw.sdkSpec),n.length===0)for(const o of e.raw.fields||[])S(n,o);const t=re(n.filter(o=>o.name&&C(o,r)).map(o=>({raw:o,key:z(o),name:""})),o=>o.key);return _(t,o=>j(o.raw.label||o.raw.name||"field")),t}function B(e,r){if(q(e.raw.sdkSpec.builder)!=="metric")return[];const n=k(e.raw.sdkSpec.spec),t=[];S(t,n==null?void 0:n.primaryMeasure);for(const i of H(n==null?void 0:n.measures))S(t,i);const o=re(t.filter(i=>i.name&&C(i,r)).map(i=>({raw:i,key:z(i),name:""})),i=>i.key);return _(o,i=>j(i.raw.label||i.raw.name||"metric")),o}function er(e,r,n){var o;const t=(o=e.raw.metricBindingKeys)==null?void 0:o[n];if(typeof t=="string"&&t.trim())return t;throw new Error(`views.${e.raw.id}.metricBindingKeys must include a binding key for metric field ${r.raw.name}.`)}function rr(e,r){if(r.length===1)return new Set([r[0].name]);const n=k(e.raw.sdkSpec.spec);if(!E(n==null?void 0:n.primaryMeasure))return new Set;const t=z(J(n.primaryMeasure)),o=r.find(i=>i.key===t);return o?new Set([o.name]):new Set}function nr(e){const r=new Map;for(const n of e)for(const t of new Set(Se(n.raw)))r.set(t,(r.get(t)||0)+1);return new Set(Array.from(r.entries()).filter(([,n])=>n>1).map(([n])=>n))}function Se(e){const r=L.semaphorMetricAggregate(e);return Q([`${r.toLowerCase()}_${e.name}`,`${r}_${e.name}`,`${e.name}_${r.toLowerCase()}`,`${e.name}_${r}`,e.name])}function tr(e){const r=new Map;for(const n of e)r.set(n.raw.name,(r.get(n.raw.name)||0)+1);return new Set(Array.from(r.entries()).filter(([,n])=>n>1).map(([n])=>n))}function or(e,r){const n=k(r.spec);if(!n)return;const t=q(r.builder);if(t==="records"){for(const o of H(n.fields))S(e,o);return}if(t==="sql"){for(const o of H(n.fields))S(e,o);return}if(t==="analysis"||t==="metric"){S(e,n.primaryMeasure);for(const o of H(n.measures))S(e,o);for(const o of H(n.dimensions))S(e,o);S(e,n.dateField);return}if(t==="matrix"){const o=ce(n.rows),i=ce(n.columns),l=H(n.values);for(const f of o)me(e,f);for(const f of i)me(e,f);for(const f of l){const F=k(f);S(e,F==null?void 0:F.field),S(e,F==null?void 0:F.measure)}}}function ce(e){if(Array.isArray(e))return e;const r=k(e);return Array.isArray(r==null?void 0:r.levels)?r.levels:[]}function me(e,r){var n;if(E(r)){S(e,r);return}S(e,(n=k(r))==null?void 0:n.field)}function fe(e){var r,n,t,o;return((r=e==null?void 0:e.computation)==null?void 0:r.kind)==="presentation_only"||((n=e==null?void 0:e.computation)==null?void 0:n.kind)==="derived"||((t=e==null?void 0:e.computation)==null?void 0:t.kind)==="unsupported"||(e==null?void 0:e.visual)==="text_block"||((o=e==null?void 0:e.visualSpec)==null?void 0:o.visualType)==="text_block"}function ar(e){const r=k(e)||{};return G({id:e.id,title:e.title,purpose:e.purpose,visual:e.visual,visualSpec:e.visualSpec,computation:e.computation,uxExpectations:e.uxExpectations,validation:e.validation,sourceViewIds:r.sourceViewIds,content:r.content,description:r.description})}function S(e,r){E(r)&&e.push(J(r))}function J(e){return{name:e.name,label:e.label,role:e.role,dataType:e.dataType,aggregate:e.aggregate,sourceKey:e.sourceKey||(e.source?pe(e.source):void 0),...e.source?{source:e.source}:{}}}function sr(e){if(!e.source)return;const r={...e.source,...e.sourceKey?{sourceKey:e.sourceKey}:{}},n=Ie(r);if(n)return{raw:r,key:n,aliases:Fe(r),name:""}}function E(e){const r=k(e);return!!(r&&typeof r.name=="string"&&(typeof r.role=="string"||typeof r.dataType=="string"||typeof r.aggregate=="string"||r.source||r.sourceKey))}function we(e){const r=k(e);return!!(r&&(typeof r.sourceKey=="string"||r.kind==="semantic"||typeof r.datasetName=="string"&&typeof r.domainId=="string"))}function x(e,r){if(e===void 0)return"undefined";if(e===null||typeof e=="number"||typeof e=="boolean"||typeof e=="string")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(o=>x(o,r)).join(", ")}]`;if(E(e)){const o=C(J(e),r);if(o)return`fields.${o}`}if(we(e)){const o=$e(e,r);if(o)return`sources.${o}`}const n=k(e);return n?`{ ${Object.entries(n).filter(([,o])=>o!==void 0).map(([o,i])=>`${JSON.stringify(o)}: ${x(i,r)}`).join(", ")} }`:JSON.stringify(e)}function N(e){return JSON.stringify(e,null,2)}function C(e,r){if(E(e))return r.fieldNameByKey.get(z(J(e)))}function $e(e,r){if(we(e))for(const n of ee(e)){const t=r.sourceNameByKey.get(n);if(t)return t}}function z(e){return[e.sourceKey||"",e.name||"",e.role||"",e.aggregate||""].join("|")}function ir(e,r){return!E(e)||!E(r)||e.name!==r.name?!1:de(e).some(n=>de(r).includes(n))}function ur(e){return E(e)&&e.role==="id"}function dr(e){const r=[],n=new Map;for(const t of e){const o=Q(t.aliases.length?t.aliases:[t.key]),i=o.map(l=>n.get(l)).find(A);if(i){i.aliases=Q([...i.aliases,...o]);continue}t.aliases=o,r.push(t);for(const l of o)n.set(l,t)}return r}function lr(e){const r=new Map;for(const n of e)for(const t of Q([n.key,...n.aliases])){const o=r.get(t);if(o&&o!==n.name)throw new Error(`Source identity ${t} resolves to multiple generated sources.`);r.set(t,n.name)}return r}function Q(e){return Array.from(new Set(e.filter(Boolean)))}function Ie(e){return ee(e)[0]||pe(e)}function ee(e){const r=k(e);if(!r)return[];const n=[];if(typeof r.sourceKey=="string"&&n.push(r.sourceKey),r.kind==="semantic"||r.datasetName){const t=typeof r.domainId=="string"?r.domainId:"";t&&typeof r.datasetId=="string"&&n.push(`semantic:${t}:datasetId:${r.datasetId}`),t&&typeof r.datasetName=="string"&&n.push(`semantic:${t}:datasetName:${r.datasetName}`)}return n.length===0&&n.push(pe(e)),Q(n)}function Fe(e){return ee(e)}function pe(e){const r=k(e);return r?typeof r.sourceKey=="string"?r.sourceKey:JSON.stringify(r):""}function pr(e){return E(e)&&de(e)[0]||""}function de(e){return E(e)?Q([...typeof e.sourceKey=="string"?[e.sourceKey]:[],...e.source?ee(e.source):[]]):[]}function q(e){const r=String(e||"").replace(/^semaphor\./,"");if(!["metric","records","analysis","matrix","sql"].includes(r))throw new Error(`Unsupported sdkSpec builder: ${e}`);return r}function cr(e){const r=q(e);return r==="records"||r==="sql"}function mr(e){const r=k(e);return typeof(r==null?void 0:r.operator)=="string"?r.operator:e.type==="date_range"?"between":e.type==="multi_select"||e.type==="select"?"in":"="}function _(e,r){const n=new Map;for(const t of e){const o=r(t)||"item",i=n.get(o)||0;n.set(o,i+1),t.name=i===0?o:`${o}${i+1}`}}function re(e,r){const n=new Set,t=[];for(const o of e){const i=r(o);!i||n.has(i)||(n.add(i),t.push(o))}return t}function j(e){const r=String(e||"").replace(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(Boolean);if(r.length===0)return"item";const[n,...t]=r,o=[n.toLowerCase(),...t.map(i=>i.charAt(0).toUpperCase()+i.slice(1).toLowerCase())].join("");return/^[A-Za-z_$]/.test(o)?o:`item${o}`}function ye(e){const r=j(e);return r.charAt(0).toUpperCase()+r.slice(1)}function fr(e){const r=String(e).split(":");return r[r.length-1]||String(e)}function G(e){return Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0))}function k(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function H(e){return Array.isArray(e)?e:[]}function W(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function A(e){return e!==void 0}exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION=L.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION=L.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION;exports.isSemaphorDataAppCodegenSummary=L.isSemaphorDataAppCodegenSummary;exports.validateSemaphorDataAppCodegenSummary=L.validateSemaphorDataAppCodegenSummary;exports.CODEGEN_SUMMARY_SCHEMA_VERSION=R.CODEGEN_SUMMARY_SCHEMA_VERSION;exports.CODEGEN_SUMMARY_VALIDATOR_VERSION=R.CODEGEN_SUMMARY_VALIDATOR_VERSION;exports.CONTRACT_MANIFEST_SCHEMA_VERSION=R.CONTRACT_MANIFEST_SCHEMA_VERSION;exports.GENERATED_CONTRACT_SCHEMA_VERSION=R.GENERATED_CONTRACT_SCHEMA_VERSION;exports.GENERATED_CONTRACT_TYPESCRIPT_FILES=R.GENERATED_CONTRACT_TYPESCRIPT_FILES;exports.REQUIRED_GENERATED_CONTRACT_FILES=R.REQUIRED_GENERATED_CONTRACT_FILES;exports.assertValidCodegenSummary=R.assertValidCodegenSummary;exports.buildSemaphorGeneratedActiveInput=R.buildSemaphorGeneratedActiveInput;exports.buildSemaphorGeneratedInputOptionIntent=R.buildSemaphorGeneratedInputOptionIntent;exports.buildSemaphorGeneratedViewExecutionRequest=R.buildSemaphorGeneratedViewExecutionRequest;exports.buildSemaphorGeneratedViewExecutionRequests=R.buildSemaphorGeneratedViewExecutionRequests;exports.evaluateSemaphorDataAppContractUpdatePolicy=R.evaluateSemaphorDataAppContractUpdatePolicy;exports.validateCodegenSummary=R.validateCodegenSummary;exports.validateSemaphorGeneratedContract=R.validateSemaphorGeneratedContract;exports.DEFAULT_GENERATED_CONTRACT_OUTPUT_DIR=Re;exports.generateSemaphorDataAppContract=Me;
658
+ `}function D(e,n){if(!(!n||typeof n!="object")){if(Array.isArray(n)){for(const r of n)D(e,r);return}N(n)&&S(e,W(n));for(const r of Object.values(n))D(e,r)}}function Q(e,n){const r=[];if(on(r,e.raw.sdkSpec),r.length===0)for(const o of e.raw.fields||[])S(r,o);const t=ne(r.filter(o=>o.name&&O(o,n)).map(o=>({raw:o,key:X(o),name:""})),o=>o.key);return Se(t,n,"field"),t}function B(e,n){if(q(e.raw.sdkSpec.builder)!=="metric")return[];const r=F(e.raw.sdkSpec.spec),t=[];S(t,r==null?void 0:r.primaryMeasure);for(const a of v(r==null?void 0:r.measures))S(t,a);const o=ne(t.filter(a=>a.name&&O(a,n)).map(a=>({raw:a,key:X(a),name:""})),a=>a.key);return Se(o,n,"metric"),o}function en(e,n,r){var o;const t=(o=e.raw.metricBindingKeys)==null?void 0:o[r];if(typeof t=="string"&&t.trim())return t;throw new Error(`views.${e.raw.id}.metricBindingKeys must include a binding key for metric field ${n.raw.name}.`)}function Se(e,n,r){const t=new Map,o=new Map;for(const u of e){const c=j(u.raw.name||u.raw.label||r)||r;t.set(u.key,c),o.set(c,(o.get(c)||0)+1)}const a=new Set;for(const u of e){const c=t.get(u.key)||r,w=O(u.raw,n)||c,f=o.get(c)===1?c:w;u.name=nn(f,u.key,a)}}function nn(e,n,r){const t=tn(e)?e:j(e||"field")||"field";if(!r.has(t))return r.add(t),t;const o=rn(n),a=`${t}${o}`;if(!r.has(a))return r.add(a),a;let u=2;for(;r.has(`${a}${u}`);)u+=1;const c=`${a}${u}`;return r.add(c),c}function rn(e){let n=0;for(let r=0;r<e.length;r+=1)n=n*31+e.charCodeAt(r)>>>0;return n.toString(36).slice(0,6).replace(/^[0-9]/,"x$&")}function tn(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function on(e,n){const r=F(n.spec);if(!r)return;const t=q(n.builder);if(t==="records"){for(const o of v(r.fields))S(e,o);return}if(t==="sql"){for(const o of v(r.fields))S(e,o);return}if(t==="analysis"||t==="metric"){S(e,r.primaryMeasure);for(const o of v(r.measures))S(e,o);for(const o of v(r.dimensions))S(e,o);S(e,r.dateField);return}if(t==="matrix"){const o=ce(r.rows),a=ce(r.columns),u=v(r.values);for(const c of o)me(e,c);for(const c of a)me(e,c);for(const c of u){const w=F(c);S(e,w==null?void 0:w.field),S(e,w==null?void 0:w.measure)}}}function ce(e){if(Array.isArray(e))return e;const n=F(e);return Array.isArray(n==null?void 0:n.levels)?n.levels:[]}function me(e,n){var r;if(N(n)){S(e,n);return}S(e,(r=F(n))==null?void 0:r.field)}function fe(e){var n,r,t,o;return((n=e==null?void 0:e.computation)==null?void 0:n.kind)==="presentation_only"||((r=e==null?void 0:e.computation)==null?void 0:r.kind)==="derived"||((t=e==null?void 0:e.computation)==null?void 0:t.kind)==="unsupported"||(e==null?void 0:e.visual)==="text_block"||((o=e==null?void 0:e.visualSpec)==null?void 0:o.visualType)==="text_block"}function sn(e){const n=F(e)||{};return A({id:e.id,title:e.title,purpose:e.purpose,visual:e.visual,visualSpec:e.visualSpec,computation:e.computation,uxExpectations:e.uxExpectations,validation:e.validation,sourceViewIds:n.sourceViewIds,content:n.content,description:n.description})}function S(e,n){N(n)&&e.push(W(n))}function W(e){return{name:e.name,label:e.label,role:e.role,dataType:e.dataType,aggregate:e.aggregate,sourceKey:e.sourceKey||(e.source?le(e.source):void 0),...e.source?{source:e.source}:{}}}function an(e){if(!e.source)return;const n={...e.source,...e.sourceKey?{sourceKey:e.sourceKey}:{}},r=Ie(n);if(r)return{raw:n,key:r,aliases:Ve(n),name:""}}function N(e){const n=F(e);return!!(n&&typeof n.name=="string"&&(typeof n.role=="string"||typeof n.dataType=="string"||typeof n.aggregate=="string"||n.source||n.sourceKey))}function we(e){const n=F(e);return!!(n&&(typeof n.sourceKey=="string"||n.kind==="semantic"||typeof n.datasetName=="string"&&typeof n.domainId=="string"))}function G(e,n){if(e===void 0)return"undefined";if(e===null||typeof e=="number"||typeof e=="boolean"||typeof e=="string")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(o=>G(o,n)).join(", ")}]`;if(N(e)){const o=O(W(e),n);if(o)return`fields.${o}`}if(we(e)){const o=$e(e,n);if(o)return`sources.${o}`}const r=F(e);return r?`{ ${Object.entries(r).filter(([,o])=>o!==void 0).map(([o,a])=>`${JSON.stringify(o)}: ${G(a,n)}`).join(", ")} }`:JSON.stringify(e)}function C(e){return JSON.stringify(e,null,2)}function O(e,n){if(N(e))return n.fieldNameByKey.get(X(W(e)))}function $e(e,n){if(we(e))for(const r of ee(e)){const t=n.sourceNameByKey.get(r);if(t)return t}}function X(e){return[e.sourceKey||"",e.name||"",e.role||"",e.aggregate||""].join("|")}function un(e,n){return!N(e)||!N(n)||e.name!==n.name?!1:de(e).some(r=>de(n).includes(r))}function dn(e){return N(e)&&e.role==="id"}function pn(e){const n=[],r=new Map;for(const t of e){const o=U(t.aliases.length?t.aliases:[t.key]),a=o.map(u=>r.get(u)).find(x);if(a){a.aliases=U([...a.aliases,...o]);continue}t.aliases=o,n.push(t);for(const u of o)r.set(u,t)}return n}function ln(e){const n=new Map;for(const r of e)for(const t of U([r.key,...r.aliases])){const o=n.get(t);if(o&&o!==r.name)throw new Error(`Source identity ${t} resolves to multiple generated sources.`);n.set(t,r.name)}return n}function U(e){return Array.from(new Set(e.filter(Boolean)))}function Ie(e){return ee(e)[0]||le(e)}function ee(e){const n=F(e);if(!n)return[];const r=[];if(typeof n.sourceKey=="string"&&r.push(n.sourceKey),n.kind==="semantic"||n.datasetName){const t=typeof n.domainId=="string"?n.domainId:"";t&&typeof n.datasetId=="string"&&r.push(`semantic:${t}:datasetId:${n.datasetId}`),t&&typeof n.datasetName=="string"&&r.push(`semantic:${t}:datasetName:${n.datasetName}`)}return r.length===0&&r.push(le(e)),U(r)}function Ve(e){return ee(e)}function le(e){const n=F(e);return n?typeof n.sourceKey=="string"?n.sourceKey:JSON.stringify(n):""}function cn(e){return N(e)&&de(e)[0]||""}function de(e){return N(e)?U([...typeof e.sourceKey=="string"?[e.sourceKey]:[],...e.source?ee(e.source):[]]):[]}function q(e){const n=String(e||"").replace(/^semaphor\./,"");if(!["metric","records","analysis","matrix","sql"].includes(n))throw new Error(`Unsupported sdkSpec builder: ${e}`);return n}function mn(e){const n=q(e);return n==="records"||n==="sql"}function fn(e){const n=F(e);return typeof(n==null?void 0:n.operator)=="string"?n.operator:e.type==="date_range"?"between":e.type==="multi_select"||e.type==="select"?"in":"="}function P(e,n){const r=new Map;for(const t of e){const o=n(t)||"item",a=r.get(o)||0;r.set(o,a+1),t.name=a===0?o:`${o}${a+1}`}}function ne(e,n){const r=new Set,t=[];for(const o of e){const a=n(o);!a||r.has(a)||(r.add(a),t.push(o))}return t}function j(e){const n=String(e||"").replace(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(Boolean);if(n.length===0)return"item";const[r,...t]=n,o=[r.toLowerCase(),...t.map(a=>a.charAt(0).toUpperCase()+a.slice(1).toLowerCase())].join("");return/^[A-Za-z_$]/.test(o)?o:`item${o}`}function ye(e){const n=j(e);return n.charAt(0).toUpperCase()+n.slice(1)}function yn(e){const n=String(e).split(":");return n[n.length-1]||String(e)}function A(e){return Object.fromEntries(Object.entries(e).filter(([,n])=>n!==void 0))}function F(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function v(e){return Array.isArray(e)?e:[]}function L(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function x(e){return e!==void 0}exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION=Y.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_SCHEMA_VERSION;exports.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION=Y.SEMAPHOR_DATA_APP_CODEGEN_SUMMARY_VALIDATOR_VERSION;exports.isSemaphorDataAppCodegenSummary=Y.isSemaphorDataAppCodegenSummary;exports.validateSemaphorDataAppCodegenSummary=Y.validateSemaphorDataAppCodegenSummary;exports.CODEGEN_SUMMARY_SCHEMA_VERSION=R.CODEGEN_SUMMARY_SCHEMA_VERSION;exports.CODEGEN_SUMMARY_VALIDATOR_VERSION=R.CODEGEN_SUMMARY_VALIDATOR_VERSION;exports.CONTRACT_MANIFEST_SCHEMA_VERSION=R.CONTRACT_MANIFEST_SCHEMA_VERSION;exports.GENERATED_CONTRACT_SCHEMA_VERSION=R.GENERATED_CONTRACT_SCHEMA_VERSION;exports.GENERATED_CONTRACT_TYPESCRIPT_FILES=R.GENERATED_CONTRACT_TYPESCRIPT_FILES;exports.REQUIRED_GENERATED_CONTRACT_FILES=R.REQUIRED_GENERATED_CONTRACT_FILES;exports.assertValidCodegenSummary=R.assertValidCodegenSummary;exports.buildSemaphorGeneratedActiveInput=R.buildSemaphorGeneratedActiveInput;exports.buildSemaphorGeneratedInputOptionIntent=R.buildSemaphorGeneratedInputOptionIntent;exports.buildSemaphorGeneratedViewExecutionRequest=R.buildSemaphorGeneratedViewExecutionRequest;exports.buildSemaphorGeneratedViewExecutionRequests=R.buildSemaphorGeneratedViewExecutionRequests;exports.evaluateSemaphorDataAppContractUpdatePolicy=R.evaluateSemaphorDataAppContractUpdatePolicy;exports.validateCodegenSummary=R.validateCodegenSummary;exports.validateSemaphorGeneratedContract=R.validateSemaphorGeneratedContract;exports.DEFAULT_GENERATED_CONTRACT_OUTPUT_DIR=Ce;exports.generateSemaphorDataAppContract=Oe;