react-semaphor 0.1.346 → 0.1.348

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/validators-8R9pr2K9.js"),t=require("../chunks/catalog-field-grounding-Du6mKDcF.js");function d(e,a={}){const i=o(e),s={connectionId:a.connectionId,connectionType:e,path:["database","schema","table"],labels:{database:"Database",schema:"Schema",table:"Table"},prefixLevels:["database","schema","table"],dialect:"postgres",supportsFilterClause:!0};return i.includes("postgres")?{...s,prefixLevels:["schema","table"],dialect:"postgres"}:i.includes("mysql")?{...s,prefixLevels:["database","table"],dialect:"mysql",supportsFilterClause:!1}:i.includes("mssql")||i.includes("sqlserver")?{...s,dialect:"mssql",supportsFilterClause:!1}:i.includes("redshift")?{...s,prefixLevels:["schema","table"],dialect:"redshift"}:i.includes("snowflake")?{...s,dialect:"snowflake"}:i.includes("clickhouse")?{connectionId:a.connectionId,connectionType:e,path:["database","table"],labels:{database:"Database",table:"Table"},prefixLevels:["database","table"],dialect:"clickhouse",supportsFilterClause:!1}:i==="s3"||i==="api"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:i==="api"?"API Table":"File Table"},prefixLevels:["table"],dialect:"duckdb",supportsFilterClause:!0}:i==="googlesheets"||i==="fileupload"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:"Table"},prefixLevels:["table"],dialect:"postgres",supportsFilterClause:!0}:i==="s3tables"?{...s,labels:{database:"Database",schema:"Namespace",table:"Table"},dialect:"duckdb"}:i==="bigquery"?{...s,labels:{database:"Project",schema:"Dataset",table:"Table"},prefixLevels:["schema","table"],dialect:"bigquery",supportsFilterClause:!1}:s}function c(e){const a=o(e);switch(a){case"mysql":case"bigquery":case"redshift":case"snowflake":case"clickhouse":case"duckdb":case"sqlite":return a;case"mssql":case"sqlserver":return"mssql";case"postgres":case"postgresql":return"postgres";default:return"unknown"}}function u(e){return e.capabilities.prefixLevels.every(a=>!!l(e.source,a))}function m(e){const a=e.quoteIdentifier??p;return e.capabilities.prefixLevels.map(i=>l(e.source,i)).filter(i=>!!i).map(i=>a(i,e.capabilities.dialect)).join(".")}function l(e,a){return a==="database"?e.databaseName:a==="schema"?e.schemaName:e.tableName}function p(e,a){return a==="mysql"||a==="bigquery"||a==="clickhouse"||a==="duckdb"?`\`${e.replace(/`/g,"``")}\``:a==="mssql"?`[${e.replace(/]/g,"]]")}]`:`"${e.replace(/"/g,'""')}"`}function o(e){if(typeof e!="string")return"";const a=[];for(const i of e.trim().toLowerCase())b(i)&&a.push(i);return a.join("")}function b(e){const a=e.charCodeAt(0);return a>=48&&a<=57||a>=97&&a<=122}const n={kind:"semantic",domainId:"domain_sales",datasetName:"orders",connectionId:"conn_sales",label:"Orders"},f={revenueKpi:{version:1,kind:"metric",id:"revenue-kpi",label:"Revenue",source:n,metrics:[{name:"revenue",role:"measure"}],primaryMetric:{name:"revenue",role:"measure"},comparison:{kind:"previous_period"},limit:1},revenueTrend:{version:1,kind:"records",id:"revenue-trend",label:"Revenue trend",source:n,fields:[{name:"order_date",role:"date",dataType:"date",label:"Order Date"},{name:"revenue",role:"measure",dataType:"number"}],dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"month",limit:100},topCustomersRecords:{version:1,kind:"records",id:"top-customers",label:"Top customers",source:n,fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"segment",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}],orderBy:{field:{name:"revenue",role:"measure"},direction:"desc"},limit:20},regionInputOptions:{version:1,kind:"inputOptions",id:"region-options",label:"Region options",source:n,field:{name:"region",role:"dimension",dataType:"string"},limit:100},previousPeriodRevenueComparison:{version:1,kind:"metric",id:"revenue-previous-period",label:"Revenue previous period comparison",source:n,metrics:[{name:"revenue",role:"measure"}],primaryMetric:{name:"revenue",role:"measure"},dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"week",comparison:{kind:"previous_period"},limit:100},inboundSupplierConcentration:{version:1,kind:"metric",id:"inbound-supplier-concentration",label:"Inbound supplier concentration",source:n,metrics:[{name:"net_tons",role:"measure"},{name:"ticket_value",role:"measure"}],primaryMetric:{name:"net_tons",role:"measure"},dateField:{name:"ticket_date",role:"date",dataType:"date"},timeWindow:{unit:"month",value:6,anchor:"latest_available"},dimensions:[{name:"supplier_id",role:"dimension",dataType:"number"}],filters:[{field:{name:"direction",role:"dimension",dataType:"string"},operator:"=",values:["Inbound"]}],limit:15},boundedSqlRanking:{version:1,kind:"sql",id:"top-customer-ranking-sql",label:"Top customer ranking SQL",source:{kind:"sql",connectionId:"conn_sales",dialect:"postgres"},sql:"SELECT customer_name, SUM(revenue) AS revenue FROM public.orders GROUP BY customer_name ORDER BY revenue DESC LIMIT 20",limit:20,rationale:"Ranking is SQL-natural because it requires ordering grouped aggregate rows.",fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}]}};exports.preferSemaphorFieldRefMetadata=r.preferSemaphorFieldRefMetadata;exports.preferSemaphorSourceMetadata=r.preferSemaphorSourceMetadata;exports.semaphorFieldRefsMatch=r.semaphorFieldRefsMatch;exports.semaphorSourceIdentityKey=r.semaphorSourceIdentityKey;exports.semaphorSourcesReferToSameDataset=r.semaphorSourcesReferToSameDataset;exports.validateSemaphorAnalyticsIntent=r.validateSemaphorAnalyticsIntent;exports.validateSemaphorAnalyticsRecoveryPlan=r.validateSemaphorAnalyticsRecoveryPlan;exports.validateSemaphorDashboardIntent=r.validateSemaphorDashboardIntent;exports.validateSemaphorOperationIntent=r.validateSemaphorOperationIntent;exports.buildAnalyticsCatalogFieldSummary=t.buildAnalyticsCatalogFieldSummary;exports.getAnalyticsCatalogFieldCandidates=t.getAnalyticsCatalogFieldCandidates;exports.getAnalyticsCatalogFieldName=t.getAnalyticsCatalogFieldName;exports.isAnalyticsCatalogDateField=t.isAnalyticsCatalogDateField;exports.isAnalyticsCatalogDimensionField=t.isAnalyticsCatalogDimensionField;exports.isAnalyticsCatalogMetricField=t.isAnalyticsCatalogMetricField;exports.isAnalyticsDateLikeDataType=t.isAnalyticsDateLikeDataType;exports.isAnalyticsMetricIdentifierField=t.isAnalyticsMetricIdentifierField;exports.isAnalyticsTechnicalIdentifierField=t.isAnalyticsTechnicalIdentifierField;exports.normalizeAnalyticsCatalogDataType=t.normalizeAnalyticsCatalogDataType;exports.normalizeAnalyticsCatalogName=t.normalizeAnalyticsCatalogName;exports.SEMAPHOR_ANALYTICS_INTENT_FIXTURES=f;exports.buildSemaphorQualifiedSourcePath=m;exports.getSemaphorConnectionCapabilities=d;exports.normalizeSemaphorDialect=c;exports.semaphorSourceHasRequiredCoordinates=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../chunks/validators-BNvNf_tO.js"),t=require("../chunks/catalog-field-grounding-Du6mKDcF.js");function d(e,a={}){const i=o(e),s={connectionId:a.connectionId,connectionType:e,path:["database","schema","table"],labels:{database:"Database",schema:"Schema",table:"Table"},prefixLevels:["database","schema","table"],dialect:"postgres",supportsFilterClause:!0};return i.includes("postgres")?{...s,prefixLevels:["schema","table"],dialect:"postgres"}:i.includes("mysql")?{...s,prefixLevels:["database","table"],dialect:"mysql",supportsFilterClause:!1}:i.includes("mssql")||i.includes("sqlserver")?{...s,dialect:"mssql",supportsFilterClause:!1}:i.includes("redshift")?{...s,prefixLevels:["schema","table"],dialect:"redshift"}:i.includes("snowflake")?{...s,dialect:"snowflake"}:i.includes("clickhouse")?{connectionId:a.connectionId,connectionType:e,path:["database","table"],labels:{database:"Database",table:"Table"},prefixLevels:["database","table"],dialect:"clickhouse",supportsFilterClause:!1}:i==="s3"||i==="api"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:i==="api"?"API Table":"File Table"},prefixLevels:["table"],dialect:"duckdb",supportsFilterClause:!0}:i==="googlesheets"||i==="fileupload"?{connectionId:a.connectionId,connectionType:e,path:["table"],labels:{table:"Table"},prefixLevels:["table"],dialect:"postgres",supportsFilterClause:!0}:i==="s3tables"?{...s,labels:{database:"Database",schema:"Namespace",table:"Table"},dialect:"duckdb"}:i==="bigquery"?{...s,labels:{database:"Project",schema:"Dataset",table:"Table"},prefixLevels:["schema","table"],dialect:"bigquery",supportsFilterClause:!1}:s}function c(e){const a=o(e);switch(a){case"mysql":case"bigquery":case"redshift":case"snowflake":case"clickhouse":case"duckdb":case"sqlite":return a;case"mssql":case"sqlserver":return"mssql";case"postgres":case"postgresql":return"postgres";default:return"unknown"}}function u(e){return e.capabilities.prefixLevels.every(a=>!!l(e.source,a))}function m(e){const a=e.quoteIdentifier??p;return e.capabilities.prefixLevels.map(i=>l(e.source,i)).filter(i=>!!i).map(i=>a(i,e.capabilities.dialect)).join(".")}function l(e,a){return a==="database"?e.databaseName:a==="schema"?e.schemaName:e.tableName}function p(e,a){return a==="mysql"||a==="bigquery"||a==="clickhouse"||a==="duckdb"?`\`${e.replace(/`/g,"``")}\``:a==="mssql"?`[${e.replace(/]/g,"]]")}]`:`"${e.replace(/"/g,'""')}"`}function o(e){if(typeof e!="string")return"";const a=[];for(const i of e.trim().toLowerCase())b(i)&&a.push(i);return a.join("")}function b(e){const a=e.charCodeAt(0);return a>=48&&a<=57||a>=97&&a<=122}const n={kind:"semantic",domainId:"domain_sales",datasetName:"orders",connectionId:"conn_sales",label:"Orders"},f={revenueKpi:{version:1,kind:"metric",id:"revenue-kpi",label:"Revenue",source:n,metrics:[{name:"revenue",role:"measure"}],primaryMetric:{name:"revenue",role:"measure"},comparison:{kind:"previous_period"},limit:1},revenueTrend:{version:1,kind:"records",id:"revenue-trend",label:"Revenue trend",source:n,fields:[{name:"order_date",role:"date",dataType:"date",label:"Order Date"},{name:"revenue",role:"measure",dataType:"number"}],dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"month",limit:100},topCustomersRecords:{version:1,kind:"records",id:"top-customers",label:"Top customers",source:n,fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"segment",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}],orderBy:{field:{name:"revenue",role:"measure"},direction:"desc"},limit:20},regionInputOptions:{version:1,kind:"inputOptions",id:"region-options",label:"Region options",source:n,field:{name:"region",role:"dimension",dataType:"string"},limit:100},previousPeriodRevenueComparison:{version:1,kind:"metric",id:"revenue-previous-period",label:"Revenue previous period comparison",source:n,metrics:[{name:"revenue",role:"measure"}],primaryMetric:{name:"revenue",role:"measure"},dateField:{name:"order_date",role:"date",dataType:"date"},timeGrain:"week",comparison:{kind:"previous_period"},limit:100},inboundSupplierConcentration:{version:1,kind:"metric",id:"inbound-supplier-concentration",label:"Inbound supplier concentration",source:n,metrics:[{name:"net_tons",role:"measure"},{name:"ticket_value",role:"measure"}],primaryMetric:{name:"net_tons",role:"measure"},dateField:{name:"ticket_date",role:"date",dataType:"date"},timeWindow:{unit:"month",value:6,anchor:"latest_available"},dimensions:[{name:"supplier_id",role:"dimension",dataType:"number"}],filters:[{field:{name:"direction",role:"dimension",dataType:"string"},operator:"=",values:["Inbound"]}],limit:15},boundedSqlRanking:{version:1,kind:"sql",id:"top-customer-ranking-sql",label:"Top customer ranking SQL",source:{kind:"sql",connectionId:"conn_sales",dialect:"postgres"},sql:"SELECT customer_name, SUM(revenue) AS revenue FROM public.orders GROUP BY customer_name ORDER BY revenue DESC LIMIT 20",limit:20,rationale:"Ranking is SQL-natural because it requires ordering grouped aggregate rows.",fields:[{name:"customer_name",role:"dimension",dataType:"string"},{name:"revenue",role:"measure",dataType:"number"}]}};exports.parseSemaphorIsoTimeWindowBoundary=r.parseSemaphorIsoTimeWindowBoundary;exports.preferSemaphorFieldRefMetadata=r.preferSemaphorFieldRefMetadata;exports.preferSemaphorSourceMetadata=r.preferSemaphorSourceMetadata;exports.semaphorFieldRefsMatch=r.semaphorFieldRefsMatch;exports.semaphorSourceIdentityKey=r.semaphorSourceIdentityKey;exports.semaphorSourcesReferToSameDataset=r.semaphorSourcesReferToSameDataset;exports.validateSemaphorAnalyticsIntent=r.validateSemaphorAnalyticsIntent;exports.validateSemaphorAnalyticsRecoveryPlan=r.validateSemaphorAnalyticsRecoveryPlan;exports.validateSemaphorDashboardIntent=r.validateSemaphorDashboardIntent;exports.validateSemaphorOperationIntent=r.validateSemaphorOperationIntent;exports.buildAnalyticsCatalogFieldSummary=t.buildAnalyticsCatalogFieldSummary;exports.getAnalyticsCatalogFieldCandidates=t.getAnalyticsCatalogFieldCandidates;exports.getAnalyticsCatalogFieldName=t.getAnalyticsCatalogFieldName;exports.isAnalyticsCatalogDateField=t.isAnalyticsCatalogDateField;exports.isAnalyticsCatalogDimensionField=t.isAnalyticsCatalogDimensionField;exports.isAnalyticsCatalogMetricField=t.isAnalyticsCatalogMetricField;exports.isAnalyticsDateLikeDataType=t.isAnalyticsDateLikeDataType;exports.isAnalyticsMetricIdentifierField=t.isAnalyticsMetricIdentifierField;exports.isAnalyticsTechnicalIdentifierField=t.isAnalyticsTechnicalIdentifierField;exports.normalizeAnalyticsCatalogDataType=t.normalizeAnalyticsCatalogDataType;exports.normalizeAnalyticsCatalogName=t.normalizeAnalyticsCatalogName;exports.SEMAPHOR_ANALYTICS_INTENT_FIXTURES=f;exports.buildSemaphorQualifiedSourcePath=m;exports.getSemaphorConnectionCapabilities=d;exports.normalizeSemaphorDialect=c;exports.semaphorSourceHasRequiredCoordinates=u;
@@ -1,7 +1,7 @@
1
- import { f as v, p as h, e as g, s as y, d as k, v as C, b as I, c as S, a as T } from "../chunks/validators-yMB7Tm4j.js";
2
- import { j as F, a as _, g as A, c as R, h as L, f as D, i as x, e as M, d as N, b as w, n as O } from "../chunks/catalog-field-grounding-DoEBOXQd.js";
1
+ import { p as v, g as h, e as g, f as y, s as k, d as C, v as I, b as S, c as T, a as q } from "../chunks/validators-C2eI8fHy.js";
2
+ import { j as _, a as A, g as R, c as L, h as D, f as x, i as M, e as N, d as w, b as O, n as E } from "../chunks/catalog-field-grounding-DoEBOXQd.js";
3
3
  function d(e, a = {}) {
4
- const r = n(e), t = {
4
+ const r = n(e), i = {
5
5
  connectionId: a.connectionId,
6
6
  connectionType: e,
7
7
  path: ["database", "schema", "table"],
@@ -15,24 +15,24 @@ function d(e, a = {}) {
15
15
  supportsFilterClause: !0
16
16
  };
17
17
  return r.includes("postgres") ? {
18
- ...t,
18
+ ...i,
19
19
  prefixLevels: ["schema", "table"],
20
20
  dialect: "postgres"
21
21
  } : r.includes("mysql") ? {
22
- ...t,
22
+ ...i,
23
23
  prefixLevels: ["database", "table"],
24
24
  dialect: "mysql",
25
25
  supportsFilterClause: !1
26
26
  } : r.includes("mssql") || r.includes("sqlserver") ? {
27
- ...t,
27
+ ...i,
28
28
  dialect: "mssql",
29
29
  supportsFilterClause: !1
30
30
  } : r.includes("redshift") ? {
31
- ...t,
31
+ ...i,
32
32
  prefixLevels: ["schema", "table"],
33
33
  dialect: "redshift"
34
34
  } : r.includes("snowflake") ? {
35
- ...t,
35
+ ...i,
36
36
  dialect: "snowflake"
37
37
  } : r.includes("clickhouse") ? {
38
38
  connectionId: a.connectionId,
@@ -66,7 +66,7 @@ function d(e, a = {}) {
66
66
  dialect: "postgres",
67
67
  supportsFilterClause: !0
68
68
  } : r === "s3tables" ? {
69
- ...t,
69
+ ...i,
70
70
  labels: {
71
71
  database: "Database",
72
72
  schema: "Namespace",
@@ -74,7 +74,7 @@ function d(e, a = {}) {
74
74
  },
75
75
  dialect: "duckdb"
76
76
  } : r === "bigquery" ? {
77
- ...t,
77
+ ...i,
78
78
  labels: {
79
79
  database: "Project",
80
80
  schema: "Dataset",
@@ -83,7 +83,7 @@ function d(e, a = {}) {
83
83
  prefixLevels: ["schema", "table"],
84
84
  dialect: "bigquery",
85
85
  supportsFilterClause: !1
86
- } : t;
86
+ } : i;
87
87
  }
88
88
  function c(e) {
89
89
  const a = n(e);
@@ -108,14 +108,14 @@ function c(e) {
108
108
  }
109
109
  function u(e) {
110
110
  return e.capabilities.prefixLevels.every(
111
- (a) => !!s(e.source, a)
111
+ (a) => !!t(e.source, a)
112
112
  );
113
113
  }
114
114
  function m(e) {
115
115
  const a = e.quoteIdentifier ?? l;
116
- return e.capabilities.prefixLevels.map((r) => s(e.source, r)).filter((r) => !!r).map((r) => a(r, e.capabilities.dialect)).join(".");
116
+ return e.capabilities.prefixLevels.map((r) => t(e.source, r)).filter((r) => !!r).map((r) => a(r, e.capabilities.dialect)).join(".");
117
117
  }
118
- function s(e, a) {
118
+ function t(e, a) {
119
119
  return a === "database" ? e.databaseName : a === "schema" ? e.schemaName : e.tableName;
120
120
  }
121
121
  function l(e, a) {
@@ -133,7 +133,7 @@ function o(e) {
133
133
  const a = e.charCodeAt(0);
134
134
  return a >= 48 && a <= 57 || a >= 97 && a <= 122;
135
135
  }
136
- const i = {
136
+ const s = {
137
137
  kind: "semantic",
138
138
  domainId: "domain_sales",
139
139
  datasetName: "orders",
@@ -145,7 +145,7 @@ const i = {
145
145
  kind: "metric",
146
146
  id: "revenue-kpi",
147
147
  label: "Revenue",
148
- source: i,
148
+ source: s,
149
149
  metrics: [{ name: "revenue", role: "measure" }],
150
150
  primaryMetric: { name: "revenue", role: "measure" },
151
151
  comparison: { kind: "previous_period" },
@@ -156,7 +156,7 @@ const i = {
156
156
  kind: "records",
157
157
  id: "revenue-trend",
158
158
  label: "Revenue trend",
159
- source: i,
159
+ source: s,
160
160
  fields: [
161
161
  { name: "order_date", role: "date", dataType: "date", label: "Order Date" },
162
162
  { name: "revenue", role: "measure", dataType: "number" }
@@ -170,7 +170,7 @@ const i = {
170
170
  kind: "records",
171
171
  id: "top-customers",
172
172
  label: "Top customers",
173
- source: i,
173
+ source: s,
174
174
  fields: [
175
175
  { name: "customer_name", role: "dimension", dataType: "string" },
176
176
  { name: "segment", role: "dimension", dataType: "string" },
@@ -184,7 +184,7 @@ const i = {
184
184
  kind: "inputOptions",
185
185
  id: "region-options",
186
186
  label: "Region options",
187
- source: i,
187
+ source: s,
188
188
  field: { name: "region", role: "dimension", dataType: "string" },
189
189
  limit: 100
190
190
  },
@@ -193,7 +193,7 @@ const i = {
193
193
  kind: "metric",
194
194
  id: "revenue-previous-period",
195
195
  label: "Revenue previous period comparison",
196
- source: i,
196
+ source: s,
197
197
  metrics: [{ name: "revenue", role: "measure" }],
198
198
  primaryMetric: { name: "revenue", role: "measure" },
199
199
  dateField: { name: "order_date", role: "date", dataType: "date" },
@@ -206,7 +206,7 @@ const i = {
206
206
  kind: "metric",
207
207
  id: "inbound-supplier-concentration",
208
208
  label: "Inbound supplier concentration",
209
- source: i,
209
+ source: s,
210
210
  metrics: [
211
211
  { name: "net_tons", role: "measure" },
212
212
  { name: "ticket_value", role: "measure" }
@@ -245,28 +245,29 @@ const i = {
245
245
  };
246
246
  export {
247
247
  p as SEMAPHOR_ANALYTICS_INTENT_FIXTURES,
248
- F as buildAnalyticsCatalogFieldSummary,
248
+ _ as buildAnalyticsCatalogFieldSummary,
249
249
  m as buildSemaphorQualifiedSourcePath,
250
- _ as getAnalyticsCatalogFieldCandidates,
251
- A as getAnalyticsCatalogFieldName,
250
+ A as getAnalyticsCatalogFieldCandidates,
251
+ R as getAnalyticsCatalogFieldName,
252
252
  d as getSemaphorConnectionCapabilities,
253
- R as isAnalyticsCatalogDateField,
254
- L as isAnalyticsCatalogDimensionField,
255
- D as isAnalyticsCatalogMetricField,
256
- x as isAnalyticsDateLikeDataType,
257
- M as isAnalyticsMetricIdentifierField,
258
- N as isAnalyticsTechnicalIdentifierField,
259
- w as normalizeAnalyticsCatalogDataType,
260
- O as normalizeAnalyticsCatalogName,
253
+ L as isAnalyticsCatalogDateField,
254
+ D as isAnalyticsCatalogDimensionField,
255
+ x as isAnalyticsCatalogMetricField,
256
+ M as isAnalyticsDateLikeDataType,
257
+ N as isAnalyticsMetricIdentifierField,
258
+ w as isAnalyticsTechnicalIdentifierField,
259
+ O as normalizeAnalyticsCatalogDataType,
260
+ E as normalizeAnalyticsCatalogName,
261
261
  c as normalizeSemaphorDialect,
262
- v as preferSemaphorFieldRefMetadata,
263
- h as preferSemaphorSourceMetadata,
264
- g as semaphorFieldRefsMatch,
262
+ v as parseSemaphorIsoTimeWindowBoundary,
263
+ h as preferSemaphorFieldRefMetadata,
264
+ g as preferSemaphorSourceMetadata,
265
+ y as semaphorFieldRefsMatch,
265
266
  u as semaphorSourceHasRequiredCoordinates,
266
- y as semaphorSourceIdentityKey,
267
- k as semaphorSourcesReferToSameDataset,
268
- C as validateSemaphorAnalyticsIntent,
269
- I as validateSemaphorAnalyticsRecoveryPlan,
270
- S as validateSemaphorDashboardIntent,
271
- T as validateSemaphorOperationIntent
267
+ k as semaphorSourceIdentityKey,
268
+ C as semaphorSourcesReferToSameDataset,
269
+ I as validateSemaphorAnalyticsIntent,
270
+ S as validateSemaphorAnalyticsRecoveryPlan,
271
+ T as validateSemaphorDashboardIntent,
272
+ q as validateSemaphorOperationIntent
272
273
  };
@@ -0,0 +1 @@
1
+ "use strict";function b(e){return e?e.kind==="semantic"?[e.kind,e.domainId,e.datasetId||"",e.datasetName].join(":"):e.kind==="physical"?[e.kind,e.connectionId,e.databaseName||"",e.schemaName||"",e.tableName].join(":"):[e.kind,e.connectionId,e.dialect||"",e.label||""].join(":"):""}function $(e,i){return!e||!i?e===i:e.kind!==i.kind?!1:e.kind==="semantic"&&i.kind==="semantic"?e.domainId!==i.domainId?!1:e.datasetId&&i.datasetId?e.datasetId===i.datasetId:e.datasetName===i.datasetName:b(e)===b(i)}function N(e,i){return e.kind!=="semantic"||i.kind!=="semantic"?e:{...e,datasetId:e.datasetId||i.datasetId,label:e.label||i.label,connectionId:e.connectionId||i.connectionId}}function B(e,i){return e.name===i.name&&$(e.source,i.source)}function O(e,i){return{...e,label:e.label||i.label,role:e.role||i.role,dataType:e.dataType||i.dataType,source:e.source&&i.source?N(e.source,i.source):e.source||i.source}}function a(e,i,n){return n?{code:e,message:i,path:n}:{code:e,message:i}}function C(e){for(let i=0;i<e.length;i+=1){const n=e[i];if(e.some((r,o)=>o!==i&&T(r,n)))return!1}return!0}function R(e,i){return B(e,i)}function T(e,i){return R(e,i)&&y(e)===y(i)}function E(e){return`Metric intent has duplicate metric "${e.name}" with the same aggregate (${y(e)}). Use different aggregates to request both, or remove one entry.`}function q(e,i){return w(e,i).length===1}function U(e,i){return w(e,i).length===1}function w(e,i){return i.filter(r=>P(e,r))}function P(e,i){return G(e,i)?e.source?R(i,e):!0:!1}function G(e,i){return!(i.name!==e.name||e.role!==void 0&&i.role!==void 0&&i.role!==e.role||H(e,i)&&y(i)!==y(e))}function H(e,i){return e.role==="measure"||i.role==="measure"||e.aggregate!==void 0||i.aggregate!==void 0}function y(e){return(e.aggregate||"SUM").toUpperCase()}const L=/^(\d{4})-(\d{2})-(\d{2})$/,V=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?(Z|[+-]\d{2}:\d{2})$/;function g(e){if(typeof e!="string")return null;const i=e.trim(),n=L.exec(i);if(n){const[,v,A,S]=n;return M(v,A,S)?new Date(Date.UTC(Number(v),Number(A)-1,Number(S))):null}const r=V.exec(i);if(!r)return null;const[,o,s,t,p,c,l="00",,f]=r;if(!M(o,s,t)||!_(p,0,23)||!_(c,0,59)||!_(l,0,59)||!Q(f))return null;const h=new Date(i);return Number.isFinite(h.getTime())?h:null}function M(e,i,n){const r=Number(e),o=Number(i),s=Number(n);if(!Number.isInteger(r)||!Number.isInteger(o)||!Number.isInteger(s)||o<1||o>12)return!1;const t=new Date(Date.UTC(r,o-1,s));return t.getUTCFullYear()===r&&t.getUTCMonth()===o-1&&t.getUTCDate()===s}function _(e,i,n){const r=Number(e);return Number.isInteger(r)&&r>=i&&r<=n}function Q(e){if(e==="Z")return!0;const i=/^([+-])(\d{2}):(\d{2})$/.exec(e);return!!(i&&_(i[2],0,23)&&_(i[3],0,59))}function d(e){return typeof e=="string"&&e.trim().length>0}function u(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function k(e){const i=new Set;for(const n of e){if(i.has(n))return n;i.add(n)}return null}const X=new Set(["SUM","COUNT","AVG","MIN","MAX","MEDIAN","DISTINCT"]);function F(e,i,n){if(!e||typeof e!="object"){n.push(a("missing_source","Analytics intent needs a source.",i));return}if(e.kind==="semantic"){d(e.domainId)||n.push(a("missing_semantic_domain","Semantic source needs a domainId.",`${i}.domainId`)),d(e.datasetName)||n.push(a("missing_dataset_name","Semantic source needs a datasetName.",`${i}.datasetName`));return}if(e.kind==="physical"){d(e.connectionId)||n.push(a("missing_connection_id","Physical source needs a connectionId.",`${i}.connectionId`)),d(e.tableName)||n.push(a("missing_table_name","Physical source needs a tableName.",`${i}.tableName`));return}if(e.kind==="sql"){d(e.connectionId)||n.push(a("missing_connection_id","SQL source needs a connectionId.",`${i}.connectionId`));return}n.push(a("invalid_source_kind","Source kind is not supported.",i))}function m(e,i,n,r={}){if(!e||!u(e)){r.required&&n.push(a("missing_field_ref","Field reference needs a name.",i));return}d(e.name)||n.push(a("missing_field_ref","Field reference needs a name.",`${i}.name`)),e.source!==void 0&&F(e.source,`${i}.source`,n),Y(e.aggregate,`${i}.aggregate`,n)}function Y(e,i,n){e!==void 0&&(typeof e!="string"||!X.has(e))&&n.push(a("invalid_aggregate","Field aggregate must be SUM, COUNT, AVG, MIN, MAX, MEDIAN, or DISTINCT.",i))}function K(e,i){if(e.analysis===void 0)return;if(!u(e.analysis)){i.push(a("invalid_metric_analysis","Metric analysis must be a structured object.","analysis"));return}if(e.analysis.kind!=="period_change"){i.push(a("invalid_metric_analysis","Metric analysis kind is not supported.","analysis.kind"));return}e.dateField||i.push(a("missing_analysis_date_field","Period-change analysis needs a dateField.","dateField")),e.timeGrain||i.push(a("missing_analysis_time_grain","Period-change analysis needs a timeGrain.","timeGrain")),e.analysis.orderBy!==void 0&&e.analysis.orderBy!=="absolute_change"&&e.analysis.orderBy!=="positive_change"&&e.analysis.orderBy!=="negative_change"&&e.analysis.orderBy!=="period"&&i.push(a("invalid_metric_analysis","Period-change analysis orderBy must be absolute_change, positive_change, negative_change, or period.","analysis.orderBy"));const{timeWindow:n}=e.analysis;n!==void 0&&D(n,"analysis.timeWindow",i)}function D(e,i,n){if(!u(e)){n.push(a("invalid_time_window","Time window must be a structured object.",i));return}if(e.kind!==void 0&&e.kind!=="relative"&&e.kind!=="absolute"&&n.push(a("invalid_time_window","Time window kind must be relative or absolute.",`${i}.kind`)),e.kind==="absolute"){if(d(e.start)||n.push(a("invalid_time_window","Absolute time window start must be a non-empty ISO date or timestamp string.",`${i}.start`)),d(e.end)||n.push(a("invalid_time_window","Absolute time window end must be a non-empty ISO date or timestamp string.",`${i}.end`)),d(e.start)&&d(e.end)){const r=g(e.start),o=g(e.end);r||n.push(a("invalid_time_window","Absolute time window start must be a valid ISO date or timestamp.",`${i}.start`)),o||n.push(a("invalid_time_window","Absolute time window end must be a valid ISO date or timestamp.",`${i}.end`)),r&&o&&r.getTime()>o.getTime()&&n.push(a("invalid_time_window","Absolute time window start must be before or equal to end.",i))}return}e.unit!=="second"&&e.unit!=="minute"&&e.unit!=="hour"&&e.unit!=="day"&&e.unit!=="week"&&e.unit!=="month"&&e.unit!=="quarter"&&e.unit!=="year"&&n.push(a("invalid_time_window","Time window unit must be second, minute, hour, day, week, month, quarter, or year.",`${i}.unit`)),(typeof e.value!="number"||!Number.isFinite(e.value)||e.value<=0)&&n.push(a("invalid_time_window","Time window value must be a positive number.",`${i}.value`)),e.anchor!==void 0&&e.anchor!=="now"&&e.anchor!=="latest_available"&&n.push(a("invalid_time_window","Time window anchor must be now or latest_available.",`${i}.anchor`)),e.completeness!==void 0&&e.completeness!=="include_partial"&&e.completeness!=="complete_periods"&&n.push(a("invalid_time_window","Time window completeness must be include_partial or complete_periods.",`${i}.completeness`))}function Z(e,i,n){if(e!==void 0){if(!Array.isArray(e)){n.push(a("invalid_analytics_filters","Analytics filters must be an array.",i));return}e.forEach((r,o)=>{const s=`${i}.${o}`;if(!u(r)){n.push(a("invalid_analytics_filter","Analytics filter must be a structured object.",s));return}const t=r;m(t.field,`${s}.field`,n,{required:!0});const p=t.operator==="is_null"||t.operator==="is_not_null";if(t.operator!==void 0&&t.operator!=="="&&t.operator!=="!="&&t.operator!=="in"&&t.operator!=="not_in"&&t.operator!=="contains"&&t.operator!=="not_contains"&&t.operator!=="between"&&t.operator!=="not_between"&&t.operator!==">"&&t.operator!==">="&&t.operator!=="<"&&t.operator!=="<="&&t.operator!=="is_null"&&t.operator!=="is_not_null"&&n.push(a("invalid_analytics_filter_operator","Analytics filter operator is not supported.",`${s}.operator`)),t.values===void 0&&!p&&n.push(a("missing_analytics_filter_value","Analytics filter needs values unless it is a null check.",s)),p&&t.values!==void 0){n.push(a("invalid_analytics_filter_values","Null-check analytics filters must not include values.",`${s}.values`));return}if(t.values!==void 0&&!Array.isArray(t.values)){n.push(a("invalid_analytics_filter_values","Analytics filter values must be an array when provided.",`${s}.values`));return}if(t.values!==void 0){const c=t.values.length;if(t.operator==="between"||t.operator==="not_between"){c!==2&&n.push(a("invalid_analytics_filter_values","Between analytics filters must include exactly two values.",`${s}.values`));return}(t.operator==="contains"||t.operator==="not_contains"||t.operator==="="||t.operator==="!="||t.operator===">"||t.operator===">="||t.operator==="<"||t.operator==="<="||t.operator===void 0)&&c!==1&&n.push(a("invalid_analytics_filter_values","Scalar analytics filters must include exactly one value. Use in/not_in for multiple values.",`${s}.values`))}})}}function I(e){var r;const i=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[a("invalid_analytics_intent","Analytics intent must be a structured object.")],warnings:n,repairHints:[{code:"invalid_analytics_intent",recommendedNextStep:"Send one structured analytics intent object with kind, source, and required fields."}]};if(e.version!==void 0&&e.version!==1&&i.push(a("invalid_version","Analytics intent version must be 1.","version")),F(e.source,"source",i),e.kind==="metric"){const o=Array.isArray(e.metrics)?e.metrics.filter(s=>u(s)&&d(s.name)):[];if(!Array.isArray(e.metrics)||e.metrics.length===0?i.push(a("missing_metric","Metric intent needs at least one metric.","metrics")):e.metrics.some(s=>!u(s)||!d(s.name))&&i.push(a("invalid_metric_list","Metric intent metrics must be an array of field references with names.","metrics")),o.forEach((s,t)=>{m(s,`metrics.${t}`,i,{required:!0})}),o.length>0&&!C(o)){const s=o.find((t,p)=>o.some((c,l)=>l!==p&&T(c,t)));s&&i.push(a("duplicate_metric",E(s),"metrics"))}if(u(e.primaryMetric)&&d(e.primaryMetric.name)&&w(e.primaryMetric,o).length>1&&i.push(a("ambiguous_primary_metric","Metric intent primaryMetric must identify exactly one selected metric.","primaryMetric")),e.primaryMetric!==void 0&&(m(e.primaryMetric,"primaryMetric",i,{required:!0}),u(e.primaryMetric)&&d(e.primaryMetric.name)&&o.length>0&&!q(e.primaryMetric,o)&&i.push(a("invalid_primary_metric","Metric intent primaryMetric must match one metric field reference.","primaryMetric"))),e.dimensions!==void 0&&!Array.isArray(e.dimensions)?i.push(a("invalid_metric_dimensions","Metric intent dimensions must be an array of field references.","dimensions")):Array.isArray(e.dimensions)&&e.dimensions.some(s=>!u(s)||!d(s.name))&&i.push(a("invalid_metric_dimensions","Metric intent dimensions must be an array of field references with names.","dimensions")),e.dateField!==void 0&&m(e.dateField,"dateField",i),e.timeWindow!==void 0&&(D(e.timeWindow,"timeWindow",i),e.dateField||i.push(a("missing_time_window_date_field","Metric timeWindow needs a dateField.","dateField"))),Z(e.filters,"filters",i),Array.isArray(e.dimensions)&&e.dimensions.forEach((s,t)=>{m(s,`dimensions.${t}`,i)}),e.orderBy!==void 0){if(!u(e.orderBy))i.push(a("invalid_metric_order_by","Metric intent orderBy must be a structured object.","orderBy"));else if(m(e.orderBy.field,"orderBy.field",i,{required:!0}),e.orderBy.direction!=="asc"&&e.orderBy.direction!=="desc"&&i.push(a("invalid_metric_order_direction","Metric intent orderBy direction must be asc or desc.","orderBy.direction")),u(e.orderBy.field)&&d(e.orderBy.field.name)){const s=[...o,...e.timeGrain&&e.dateField&&u(e.dateField)?[e.dateField]:[],...Array.isArray(e.dimensions)?e.dimensions.filter(t=>u(t)&&d(t.name)):[]];s.length>0&&!U(e.orderBy.field,s)&&i.push(a("invalid_metric_order_by","Metric intent orderBy.field must match one selected metric, grouped dateField, or dimension.","orderBy.field"))}}K(e,i)}else e.kind==="records"?(!Array.isArray(e.fields)||e.fields.length===0?i.push(a("missing_record_fields","Records intent needs at least one field.","fields")):e.fields.some(o=>!u(o)||!d(o.name))&&i.push(a("invalid_record_fields","Records intent fields must be field references with names.","fields")),Array.isArray(e.fields)&&e.fields.forEach((o,s)=>{m(o,`fields.${s}`,i)}),e.dateField!==void 0&&m(e.dateField,"dateField",i),e.orderBy!==void 0&&(u(e.orderBy)?(m(e.orderBy.field,"orderBy.field",i,{required:!0}),e.orderBy.direction!=="asc"&&e.orderBy.direction!=="desc"&&i.push(a("invalid_record_order_direction","Records intent orderBy direction must be asc or desc.","orderBy.direction"))):i.push(a("invalid_record_order_by","Records intent orderBy must be a structured object.","orderBy")))):e.kind==="inputOptions"?((!e.field||!d(e.field.name))&&i.push(a("missing_input_options_field","Input options intent needs a field.","field")),m(e.field,"field",i,{required:!0})):e.kind==="sql"?(((r=e.source)==null?void 0:r.kind)!=="sql"&&i.push(a("invalid_sql_source","SQL analytics intent must use a SQL execution source.","source")),d(e.sql)||i.push(a("missing_sql","SQL analytics intent needs SQL text.","sql")),Array.isArray(e.fields)&&e.fields.forEach((o,s)=>{m(o,`fields.${s}`,i)})):i.push(a("invalid_analytics_kind","Analytics kind is not supported.","kind"));return{ok:i.length===0,errors:i,warnings:n,repairHints:J(i)}}function x(e){const i=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[a("invalid_operation_intent","Operation intent must be a structured object.")],warnings:n,repairHints:[{code:"invalid_operation_intent",recommendedNextStep:"Send one typed operation intent with version, kind, and required operation fields."}]};if(e.version!==1&&i.push(a("invalid_version","Operation intent version must be 1.","version")),e.kind==="answer_obligations")!Array.isArray(e.obligations)||e.obligations.length===0?i.push(a("missing_obligations","Answer-obligations operation intent needs at least one obligation.","obligations")):e.obligations.forEach((r,o)=>{d(r.id)||i.push(a("missing_obligation_id","Each analytics obligation needs an id.",`obligations.${o}.id`)),d(r.prompt)||i.push(a("missing_obligation_prompt","Each analytics obligation needs a prompt.",`obligations.${o}.prompt`))});else if(e.kind==="dashboard_change"||e.kind==="data_app_change"){if(d(e.instruction)||i.push(a("missing_instruction","Change operation intent needs an instruction.","instruction")),e.analyticsIntent){const r=I(e.analyticsIntent);i.push(...r.errors),n.push(...r.warnings)}}else i.push(a("invalid_operation_kind","Operation intent kind is not supported.","kind"));return{ok:i.length===0,errors:i,warnings:n,repairHints:j(i)}}function z(e){const i=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[a("invalid_recovery_plan","Analytics recovery plan must be a structured object.")],warnings:n,repairHints:[{code:"invalid_recovery_plan",recommendedNextStep:"Return a typed recovery plan with operationIntent and plannedToolCalls."}]};e.version!==1&&i.push(a("invalid_version","Recovery plan version must be 1.","version")),e.kind!=="analytics_recovery_plan"&&i.push(a("invalid_recovery_plan_kind","Recovery plan kind must be analytics_recovery_plan.","kind"));const r=x(e.operationIntent);return i.push(...r.errors),n.push(...r.warnings),Array.isArray(e.plannedToolCalls)||i.push(a("invalid_planned_tool_calls","Recovery plan plannedToolCalls must be an array.","plannedToolCalls")),{ok:i.length===0,errors:i,warnings:n,repairHints:j(i)}}function j(e){return e.map(i=>({code:i.code,recommendedNextStep:i.code==="missing_obligations"?"Normalize the user request into one or more typed analytics obligations before recovery planning.":"Correct the operation/recovery contract shape before planning execution."}))}function J(e){return e.map(i=>{switch(i.code){case"missing_source":return{code:i.code,fieldRole:"source",recommendedNextStep:"Provide a semantic, physical, or SQL source before executing analytics."};case"missing_metric":return{code:i.code,fieldRole:"metric",recommendedNextStep:"Choose one exact metric from the grounded schema candidates."};case"missing_record_fields":return{code:i.code,fieldRole:"dimension",recommendedNextStep:"Provide at least one field for the records intent."};case"missing_input_options_field":return{code:i.code,fieldRole:"input",recommendedNextStep:"Provide the exact field whose option values should be listed."};case"missing_sql":return{code:i.code,fieldRole:"sql",recommendedNextStep:"Provide bounded read-only SQL with an explicit outer LIMIT."};case"conflicting_sql":return{code:i.code,fieldRole:"sql",recommendedNextStep:"Use one canonical SQL text location for the intent; prefer top-level sql."};case"missing_semantic_domain":case"missing_dataset_name":case"missing_connection_id":case"missing_table_name":return{code:i.code,fieldRole:"source",recommendedNextStep:"Use grounded catalog metadata to fill the missing source reference."};default:return}}).filter(i=>!!i)}function W(e,i,n,r){if(!e||typeof e!="object"){n.push(a("invalid_view","Dashboard view must be an object.",i));return}if(d(e.title)||n.push(a("missing_view_title","Dashboard view needs a title.",i)),!e.presentation||typeof e.presentation!="object"){n.push(a("missing_presentation","Dashboard view needs a presentation.",`${i}.presentation`));return}if(e.presentation.kind==="text"){d(e.text)||r.push(a("missing_text_content","Text views should include text content.",`${i}.text`));return}if(!e.analytics){n.push(a("missing_view_analytics","Non-text dashboard views need analytics intent.",`${i}.analytics`));return}const o=I(e.analytics);for(const s of o.errors)n.push(a(s.code,s.message,`${i}.analytics${s.path?`.${s.path}`:""}`));for(const s of o.warnings)r.push(a(s.code,s.message,`${i}.analytics${s.path?`.${s.path}`:""}`))}function ee(e){const i=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:[a("invalid_dashboard_intent","Dashboard intent must be a structured object.")],warnings:n};e.version!==1&&i.push(a("invalid_version","Dashboard intent version must be 1.")),e.kind!=="dashboard"&&i.push(a("invalid_kind","Experience intent kind must be dashboard.")),d(e.title)||i.push(a("missing_title","Dashboard intent needs a title.","title"));const r=Array.isArray(e.inputs)?e.inputs:[],o=k(r.filter(u).map(c=>c.id).filter(c=>typeof c=="string"));o&&i.push(a("duplicate_input_id",`Duplicate input id: ${o}.`,"inputs"));for(const[c,l]of r.entries()){const f=`inputs.${c}`;if(!u(l)){i.push(a("invalid_input","Dashboard input must be an object.",f));continue}d(l.id)||i.push(a("missing_input_id","Input needs an id.",`${f}.id`)),d(l.label)||i.push(a("missing_input_label","Input needs a label.",`${f}.label`)),!l.field||!d(l.field.name)?i.push(a("missing_input_field","Input needs a field.",`${f}.field`)):m(l.field,`${f}.field`,i)}const s=Array.isArray(e.sections)?e.sections:[];s.length===0&&i.push(a("missing_sections","Dashboard intent needs at least one section.","sections"));const t=s.flatMap(c=>c&&typeof c=="object"&&Array.isArray(c.views)?c.views.filter(u).map(l=>l.id).filter(l=>!!l):[]),p=k(t);p&&i.push(a("duplicate_view_id",`Duplicate dashboard view id: ${p}.`,"sections"));for(const[c,l]of s.entries()){const f=`sections.${c}`;if(!l||typeof l!="object"){i.push(a("invalid_section","Dashboard section must be an object.",f));continue}if(d(l.title)||i.push(a("missing_section_title","Dashboard section needs a title.",f)),!Array.isArray(l.views)||l.views.length===0){i.push(a("missing_section_views","Dashboard section needs at least one view.",`${f}.views`));continue}for(const[h,v]of l.views.entries())W(v,`${f}.views.${h}`,i,n)}return{ok:i.length===0,errors:i,warnings:n}}exports.parseSemaphorIsoTimeWindowBoundary=g;exports.preferSemaphorFieldRefMetadata=O;exports.preferSemaphorSourceMetadata=N;exports.semaphorFieldRefsMatch=B;exports.semaphorSourceIdentityKey=b;exports.semaphorSourcesReferToSameDataset=$;exports.validateSemaphorAnalyticsIntent=I;exports.validateSemaphorAnalyticsRecoveryPlan=z;exports.validateSemaphorDashboardIntent=ee;exports.validateSemaphorOperationIntent=x;