yamchart 0.9.1 → 0.9.3

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 (94) hide show
  1. package/dist/{advisor-HVD4FJ56.js → advisor-SC64RTZO.js} +11 -11
  2. package/dist/agent-TZZHNDPK.js +8 -0
  3. package/dist/{chunk-4P5UHWYK.js → chunk-7CD6UQAV.js} +102 -2
  4. package/dist/chunk-7CD6UQAV.js.map +1 -0
  5. package/dist/chunk-7D4SUZUM.js +38 -0
  6. package/dist/{chunk-EHM6AMMA.js → chunk-EAQXUGP6.js} +65 -2
  7. package/dist/chunk-EAQXUGP6.js.map +1 -0
  8. package/dist/{chunk-LQANFANB.js → chunk-H4L3FNLS.js} +16 -6
  9. package/dist/chunk-H4L3FNLS.js.map +1 -0
  10. package/dist/{chunk-R22XWFKX.js → chunk-NXQ6ZO3V.js} +19 -4
  11. package/dist/chunk-NXQ6ZO3V.js.map +1 -0
  12. package/dist/{chunk-LQN2HNQZ.js → chunk-RM6MNDVF.js} +36 -5
  13. package/dist/chunk-RM6MNDVF.js.map +1 -0
  14. package/dist/{chunk-XDDBDJQL.js → chunk-RMIDEBHD.js} +4 -4
  15. package/dist/{chunk-CWAWATL4.js → chunk-S7YQXEKM.js} +159 -2
  16. package/dist/chunk-S7YQXEKM.js.map +1 -0
  17. package/dist/{chunk-ZA6AOQVZ.js → chunk-ZMJPRNOA.js} +2 -2
  18. package/dist/{compare-ZN6RUOOQ.js → compare-RQFCEZIK.js} +2 -2
  19. package/dist/{connection-utils-WVQGWJ7H.js → connection-utils-C4FQGBW6.js} +5 -5
  20. package/dist/{describe-UETE5XYO.js → describe-X75C2VDU.js} +7 -7
  21. package/dist/{dev-2WLFE37D.js → dev-KDNXUNME.js} +27978 -13314
  22. package/dist/dev-KDNXUNME.js.map +1 -0
  23. package/dist/{dist-VNX77VV5.js → dist-JMLAZUL7.js} +9 -3
  24. package/dist/{dist-7CRX2GIR.js → dist-MNXSMGV6.js} +3 -3
  25. package/dist/{dist-OAKQOG6H.js → dist-MX5K2ABB.js} +3 -3
  26. package/dist/{dist-JH7OL7U4.js → dist-NGQG7Z4G.js} +7 -3
  27. package/dist/{generate-KNER36CB.js → generate-B7FAWVIQ.js} +2 -2
  28. package/dist/index.js +33 -33
  29. package/dist/{init-GVBYCLJT.js → init-SECXKD5G.js} +2 -2
  30. package/dist/{lineage-T5NRHHZN.js → lineage-HYO4RKZT.js} +2 -2
  31. package/dist/public/assets/{EventManagement-CWrv68To.js → EventManagement-B7leMxfo.js} +1 -1
  32. package/dist/public/assets/{ExplorePage-2wblm-7t.js → ExplorePage-zI1OiYlH.js} +1 -1
  33. package/dist/public/assets/{LoginPage-J48L4t6I.js → LoginPage-Dyk2ILmo.js} +1 -1
  34. package/dist/public/assets/{PublicViewer-BrjKKW5m.js → PublicViewer-C2tNYBR2.js} +1 -1
  35. package/dist/public/assets/{SetupWizard-fRVi5bF4.js → SetupWizard-BzZSJlbt.js} +1 -1
  36. package/dist/public/assets/{ShareManagement-DUdL-Diq.js → ShareManagement-C7RIZRWe.js} +1 -1
  37. package/dist/public/assets/{UserManagement-BlwTHdH4.js → UserManagement-BD-lLbVH.js} +1 -1
  38. package/dist/public/assets/index-lklRbe2I.js +195 -0
  39. package/dist/public/assets/{index.es-BtmplkrJ.js → index.es-CLyC5-GY.js} +1 -1
  40. package/dist/public/assets/{jspdf.es.min-D0I_3frr.js → jspdf.es.min-CTZVk96E.js} +3 -3
  41. package/dist/public/index.html +1 -1
  42. package/dist/{query-E6NFXKV6.js → query-QNRDS74I.js} +5 -5
  43. package/dist/{reset-password-IZQTDTU7.js → reset-password-HDCLH7PZ.js} +3 -3
  44. package/dist/{rewrite-database-FDJIXKZ2.js → rewrite-database-BOA4QPUR.js} +2 -2
  45. package/dist/{sample-YLJC5H5X.js → sample-SKLHBZBU.js} +5 -5
  46. package/dist/{search-QDOSNM2R.js → search-4KMETZVX.js} +7 -7
  47. package/dist/{semantic-RAP3S5PQ.js → semantic-6WKELH5V.js} +2 -2
  48. package/dist/source-resolver-R7WBIL7M.js +18 -0
  49. package/dist/{sync-dbt-22QQKT3A.js → sync-dbt-72GVO75P.js} +2 -2
  50. package/dist/{sync-warehouse-5HEGZJHG.js → sync-warehouse-UWRNUXE7.js} +41 -15
  51. package/dist/sync-warehouse-UWRNUXE7.js.map +1 -0
  52. package/dist/{tables-6TODJHM5.js → tables-V65QUGHK.js} +7 -7
  53. package/dist/templates/default/docs/yamchart-reference.md +74 -9
  54. package/dist/{test-MXNBCQ3G.js → test-UE5OWG3E.js} +5 -5
  55. package/dist/{update-WMATDZTO.js → update-HWCJNQRP.js} +2 -2
  56. package/package.json +11 -5
  57. package/dist/agent-KWKPAYT2.js +0 -8
  58. package/dist/chunk-4P5UHWYK.js.map +0 -1
  59. package/dist/chunk-CWAWATL4.js.map +0 -1
  60. package/dist/chunk-DGUM43GV.js +0 -11
  61. package/dist/chunk-EHM6AMMA.js.map +0 -1
  62. package/dist/chunk-LQANFANB.js.map +0 -1
  63. package/dist/chunk-LQN2HNQZ.js.map +0 -1
  64. package/dist/chunk-R22XWFKX.js.map +0 -1
  65. package/dist/dev-2WLFE37D.js.map +0 -1
  66. package/dist/public/assets/index-CJ01RqZ2.js +0 -195
  67. package/dist/source-resolver-VAXDVSDF.js +0 -18
  68. package/dist/sync-warehouse-5HEGZJHG.js.map +0 -1
  69. /package/dist/{advisor-HVD4FJ56.js.map → advisor-SC64RTZO.js.map} +0 -0
  70. /package/dist/{agent-KWKPAYT2.js.map → agent-TZZHNDPK.js.map} +0 -0
  71. /package/dist/{chunk-DGUM43GV.js.map → chunk-7D4SUZUM.js.map} +0 -0
  72. /package/dist/{chunk-XDDBDJQL.js.map → chunk-RMIDEBHD.js.map} +0 -0
  73. /package/dist/{chunk-ZA6AOQVZ.js.map → chunk-ZMJPRNOA.js.map} +0 -0
  74. /package/dist/{compare-ZN6RUOOQ.js.map → compare-RQFCEZIK.js.map} +0 -0
  75. /package/dist/{connection-utils-WVQGWJ7H.js.map → connection-utils-C4FQGBW6.js.map} +0 -0
  76. /package/dist/{describe-UETE5XYO.js.map → describe-X75C2VDU.js.map} +0 -0
  77. /package/dist/{dist-JH7OL7U4.js.map → dist-JMLAZUL7.js.map} +0 -0
  78. /package/dist/{dist-7CRX2GIR.js.map → dist-MNXSMGV6.js.map} +0 -0
  79. /package/dist/{dist-OAKQOG6H.js.map → dist-MX5K2ABB.js.map} +0 -0
  80. /package/dist/{dist-VNX77VV5.js.map → dist-NGQG7Z4G.js.map} +0 -0
  81. /package/dist/{generate-KNER36CB.js.map → generate-B7FAWVIQ.js.map} +0 -0
  82. /package/dist/{init-GVBYCLJT.js.map → init-SECXKD5G.js.map} +0 -0
  83. /package/dist/{lineage-T5NRHHZN.js.map → lineage-HYO4RKZT.js.map} +0 -0
  84. /package/dist/{query-E6NFXKV6.js.map → query-QNRDS74I.js.map} +0 -0
  85. /package/dist/{reset-password-IZQTDTU7.js.map → reset-password-HDCLH7PZ.js.map} +0 -0
  86. /package/dist/{rewrite-database-FDJIXKZ2.js.map → rewrite-database-BOA4QPUR.js.map} +0 -0
  87. /package/dist/{sample-YLJC5H5X.js.map → sample-SKLHBZBU.js.map} +0 -0
  88. /package/dist/{search-QDOSNM2R.js.map → search-4KMETZVX.js.map} +0 -0
  89. /package/dist/{semantic-RAP3S5PQ.js.map → semantic-6WKELH5V.js.map} +0 -0
  90. /package/dist/{source-resolver-VAXDVSDF.js.map → source-resolver-R7WBIL7M.js.map} +0 -0
  91. /package/dist/{sync-dbt-22QQKT3A.js.map → sync-dbt-72GVO75P.js.map} +0 -0
  92. /package/dist/{tables-6TODJHM5.js.map → tables-V65QUGHK.js.map} +0 -0
  93. /package/dist/{test-MXNBCQ3G.js.map → test-UE5OWG3E.js.map} +0 -0
  94. /package/dist/{update-WMATDZTO.js.map → update-HWCJNQRP.js.map} +0 -0
@@ -1,16 +1,18 @@
1
1
  import {
2
2
  ConnectionSchema
3
- } from "./chunk-LQN2HNQZ.js";
3
+ } from "./chunk-RM6MNDVF.js";
4
4
  import {
5
+ BigQueryConnector,
5
6
  DuckDBConnector,
6
7
  MySQLConnector,
7
8
  PostgresConnector,
8
9
  SQLiteConnector,
9
10
  SnowflakeConnector,
11
+ resolveBigQueryAuth,
10
12
  resolveMySQLAuth,
11
13
  resolvePostgresAuth,
12
14
  resolveSnowflakeAuth
13
- } from "./chunk-CWAWATL4.js";
15
+ } from "./chunk-S7YQXEKM.js";
14
16
 
15
17
  // src/commands/connection-utils.ts
16
18
  import { readFile, access } from "fs/promises";
@@ -20,7 +22,7 @@ async function loadProjectConfig(projectDir, env) {
20
22
  const configPath = join(projectDir, "yamchart.yaml");
21
23
  const content = await readFile(configPath, "utf-8");
22
24
  const raw = parseYaml(content);
23
- const { resolveProjectConfig, deepMerge } = await import("./dist-OAKQOG6H.js");
25
+ const { resolveProjectConfig, deepMerge } = await import("./dist-MX5K2ABB.js");
24
26
  const resolvedEnv = env || process.env.YAMCHART_ENV || void 0;
25
27
  let merged = resolveProjectConfig(raw, resolvedEnv);
26
28
  const localPath = join(projectDir, "yamchart.local.yaml");
@@ -123,6 +125,19 @@ function createConnector(connection, projectDir) {
123
125
  statementTimeout: sfConn.query?.timeout
124
126
  });
125
127
  }
128
+ case "bigquery": {
129
+ const bqConn = connection;
130
+ const creds = resolveBigQueryAuth(bqConn);
131
+ const keyFilename = creds.keyFilename ? creds.keyFilename.startsWith("/") ? creds.keyFilename : join(projectDir, creds.keyFilename) : void 0;
132
+ return new BigQueryConnector({
133
+ projectId: bqConn.config.project_id,
134
+ dataset: bqConn.config.dataset,
135
+ location: bqConn.config.location,
136
+ maxBytesBilled: bqConn.config.max_bytes_billed,
137
+ credentials: creds.credentials,
138
+ keyFilename
139
+ });
140
+ }
126
141
  default:
127
142
  throw new Error(`Unsupported connection type: ${connection.type}`);
128
143
  }
@@ -180,4 +195,4 @@ export {
180
195
  formatTable,
181
196
  formatJSON
182
197
  };
183
- //# sourceMappingURL=chunk-R22XWFKX.js.map
198
+ //# sourceMappingURL=chunk-NXQ6ZO3V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/connection-utils.ts"],"sourcesContent":["import { readFile, access } from 'fs/promises';\nimport { join } from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport {\n DuckDBConnector,\n PostgresConnector,\n MySQLConnector,\n SQLiteConnector,\n SnowflakeConnector,\n BigQueryConnector,\n resolvePostgresAuth,\n resolveMySQLAuth,\n resolveSnowflakeAuth,\n resolveBigQueryAuth,\n type Connector,\n type QueryResult,\n} from '@yamchart/query';\nimport {\n ConnectionSchema,\n type Connection,\n type DuckDBConnection,\n type PostgresConnection,\n type MySQLConnection,\n type SQLiteConnection,\n type SnowflakeConnection,\n type BigQueryConnection,\n} from '@yamchart/schema';\n\nexport interface ProjectConfig {\n name: string;\n version?: string;\n default_connection?: string;\n defaults?: {\n connection?: string;\n };\n}\n\n/**\n * Read and parse yamchart.yaml from a project directory.\n * Resolves environment overrides and merges yamchart.local.yaml if present.\n */\nexport async function loadProjectConfig(\n projectDir: string,\n env?: string,\n): Promise<ProjectConfig> {\n const configPath = join(projectDir, 'yamchart.yaml');\n const content = await readFile(configPath, 'utf-8');\n const raw = parseYaml(content) as Record<string, unknown>;\n\n const { resolveProjectConfig, deepMerge } = await import('@yamchart/schema');\n const resolvedEnv = env || process.env.YAMCHART_ENV || undefined;\n let merged = resolveProjectConfig(raw, resolvedEnv);\n\n // Merge yamchart.local.yaml if it exists\n const localPath = join(projectDir, 'yamchart.local.yaml');\n try {\n await access(localPath);\n const localContent = await readFile(localPath, 'utf-8');\n const localOverrides = parseYaml(localContent) as Record<string, unknown>;\n if (localOverrides && typeof localOverrides === 'object') {\n merged = deepMerge(merged, localOverrides);\n }\n } catch {\n // No local overrides file\n }\n\n return merged as ProjectConfig;\n}\n\n/**\n * Load and validate a connection YAML file.\n * Tries .yaml then .yml extensions.\n * If no overrideName, falls back to defaults.connection from project config.\n */\nexport async function resolveConnection(\n projectDir: string,\n overrideName?: string,\n env?: string,\n): Promise<Connection> {\n const config = await loadProjectConfig(projectDir, env);\n const connName = overrideName || config.defaults?.connection || config.default_connection;\n\n if (!connName) {\n throw new Error(\n 'No connection specified. Use --connection or set defaults.connection in yamchart.yaml.',\n );\n }\n\n const yamlPath = join(projectDir, 'connections', `${connName}.yaml`);\n const ymlPath = join(projectDir, 'connections', `${connName}.yml`);\n\n let connPath = yamlPath;\n try {\n await access(yamlPath);\n } catch {\n try {\n await access(ymlPath);\n connPath = ymlPath;\n } catch {\n throw new Error(`Connection \"${connName}\" not found at connections/${connName}.yaml`);\n }\n }\n\n const content = await readFile(connPath, 'utf-8');\n const raw = parseYaml(content);\n const parsed = ConnectionSchema.parse(raw);\n return parsed;\n}\n\n/**\n * Instantiate the right connector class based on connection.type.\n * Resolves auth and relative paths. Does NOT call connect().\n */\nexport function createConnector(connection: Connection, projectDir: string): Connector {\n switch (connection.type) {\n case 'duckdb': {\n const duckdbConn = connection as DuckDBConnection;\n const dbPath = duckdbConn.config.path.startsWith('/')\n ? duckdbConn.config.path\n : duckdbConn.config.path === ':memory:'\n ? ':memory:'\n : join(projectDir, duckdbConn.config.path);\n return new DuckDBConnector({ path: dbPath });\n }\n\n case 'postgres': {\n const pgConn = connection as PostgresConnection;\n const credentials = resolvePostgresAuth(pgConn);\n return new PostgresConnector({\n host: pgConn.config.host,\n port: pgConn.config.port,\n database: pgConn.config.database,\n schema: pgConn.config.schema,\n ssl: pgConn.config.ssl,\n user: credentials.user,\n password: credentials.password,\n min: pgConn.pool?.min_connections,\n max: pgConn.pool?.max_connections,\n idleTimeoutMillis: pgConn.pool?.idle_timeout,\n statementTimeout: pgConn.query?.timeout,\n });\n }\n\n case 'mysql': {\n const mysqlConn = connection as MySQLConnection;\n const credentials = resolveMySQLAuth(mysqlConn);\n return new MySQLConnector({\n host: mysqlConn.config.host,\n port: mysqlConn.config.port,\n database: mysqlConn.config.database,\n ssl: mysqlConn.config.ssl,\n user: credentials.user,\n password: credentials.password,\n min: mysqlConn.pool?.min_connections,\n max: mysqlConn.pool?.max_connections,\n idleTimeoutMillis: mysqlConn.pool?.idle_timeout,\n statementTimeout: mysqlConn.query?.timeout,\n });\n }\n\n case 'sqlite': {\n const sqliteConn = connection as SQLiteConnection;\n const dbPath = sqliteConn.config.path.startsWith('/')\n ? sqliteConn.config.path\n : sqliteConn.config.path === ':memory:'\n ? ':memory:'\n : join(projectDir, sqliteConn.config.path);\n return new SQLiteConnector({ path: dbPath });\n }\n\n case 'snowflake': {\n const sfConn = connection as SnowflakeConnection;\n const credentials = resolveSnowflakeAuth(sfConn);\n return new SnowflakeConnector({\n account: sfConn.config.account,\n username: credentials.username,\n password: credentials.password,\n privateKey: credentials.privateKey,\n authenticator: credentials.authenticator,\n clientStoreTemporaryCredential: credentials.clientStoreTemporaryCredential,\n warehouse: sfConn.config.warehouse,\n database: sfConn.config.database,\n schema: sfConn.config.schema,\n role: sfConn.config.role,\n statementTimeout: sfConn.query?.timeout,\n });\n }\n\n case 'bigquery': {\n const bqConn = connection as BigQueryConnection;\n const creds = resolveBigQueryAuth(bqConn);\n // Resolve a relative key_file against the project dir (like duckdb/sqlite paths).\n const keyFilename = creds.keyFilename\n ? (creds.keyFilename.startsWith('/') ? creds.keyFilename : join(projectDir, creds.keyFilename))\n : undefined;\n return new BigQueryConnector({\n projectId: bqConn.config.project_id,\n dataset: bqConn.config.dataset,\n location: bqConn.config.location,\n maxBytesBilled: bqConn.config.max_bytes_billed,\n credentials: creds.credentials,\n keyFilename,\n });\n }\n\n default:\n throw new Error(`Unsupported connection type: ${(connection as Connection).type}`);\n }\n}\n\n/**\n * Format a query result as an aligned terminal table.\n * Truncates values longer than 40 characters.\n */\nexport function formatTable(result: QueryResult): string {\n const { columns, rows, rowCount, durationMs } = result;\n const maxWidth = 40;\n\n const truncate = (val: unknown): string => {\n if (val === null || val === undefined) return 'NULL';\n const str = String(val);\n if (str.length > maxWidth) return str.slice(0, maxWidth - 3) + '...';\n return str;\n };\n\n // Calculate column widths\n const headers = columns.map((c) => c.name);\n const formattedRows = rows.map((row) =>\n columns.map((c) => truncate(row[c.name])),\n );\n\n const colWidths = headers.map((h, i) => {\n const dataMax = formattedRows.reduce(\n (max, row) => Math.max(max, row[i]!.length),\n 0,\n );\n return Math.max(h.length, dataMax);\n });\n\n // Build lines\n const lines: string[] = [];\n\n // Header\n const headerLine = headers.map((h, i) => h.padEnd(colWidths[i]!)).join(' ');\n lines.push(headerLine);\n\n // Separator\n const separator = colWidths.map((w) => '-'.repeat(w)).join(' ');\n lines.push(separator);\n\n // Data rows\n for (const row of formattedRows) {\n const line = row.map((val, i) => val.padEnd(colWidths[i]!)).join(' ');\n lines.push(line);\n }\n\n // Footer\n lines.push('');\n lines.push(`${rowCount} row(s) (${Math.round(durationMs)}ms)`);\n\n return lines.join('\\n');\n}\n\n/**\n * Format a query result as a JSON string.\n */\nexport function formatJSON(result: QueryResult): string {\n return JSON.stringify(\n {\n columns: result.columns,\n rows: result.rows,\n rowCount: result.rowCount,\n durationMs: result.durationMs,\n },\n null,\n 2,\n );\n}\n"],"mappings":"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","names":[]}
@@ -20,11 +20,19 @@ var ExternalBrowserAuthSchema = z.object({
20
20
  user_var: z.string(),
21
21
  cache_token: z.boolean().optional()
22
22
  });
23
+ var ServiceAccountAuthSchema = z.object({
24
+ type: z.literal("service_account"),
25
+ credentials_var: z.string().optional(),
26
+ // env var NAME holding the SA JSON contents
27
+ key_file: z.string().optional()
28
+ // path to a SA .json key file
29
+ });
23
30
  var AuthSchema = z.discriminatedUnion("type", [
24
31
  EnvAuthSchema,
25
32
  KeyPairAuthSchema,
26
33
  SecretManagerAuthSchema,
27
- ExternalBrowserAuthSchema
34
+ ExternalBrowserAuthSchema,
35
+ ServiceAccountAuthSchema
28
36
  ]);
29
37
  var PoolConfigSchema = z.object({
30
38
  min_connections: z.number().int().positive().optional(),
@@ -63,6 +71,12 @@ var SQLiteConfigSchema = z.object({
63
71
  path: z.string()
64
72
  // file path or :memory:
65
73
  });
74
+ var BigQueryConfigSchema = z.object({
75
+ project_id: z.string(),
76
+ dataset: z.string().optional(),
77
+ location: z.string().optional(),
78
+ max_bytes_billed: z.number().optional()
79
+ });
66
80
  var BaseConnectionSchema = z.object({
67
81
  name: z.string().min(1),
68
82
  description: z.string().optional(),
@@ -94,12 +108,18 @@ var SQLiteConnectionSchema = BaseConnectionSchema.extend({
94
108
  config: SQLiteConfigSchema,
95
109
  auth: z.undefined().optional()
96
110
  });
111
+ var BigQueryConnectionSchema = BaseConnectionSchema.extend({
112
+ type: z.literal("bigquery"),
113
+ config: BigQueryConfigSchema,
114
+ auth: AuthSchema
115
+ });
97
116
  var ConnectionSchema = z.discriminatedUnion("type", [
98
117
  DuckDBConnectionSchema,
99
118
  PostgresConnectionSchema,
100
119
  SnowflakeConnectionSchema,
101
120
  MySQLConnectionSchema,
102
- SQLiteConnectionSchema
121
+ SQLiteConnectionSchema,
122
+ BigQueryConnectionSchema
103
123
  ]);
104
124
 
105
125
  // ../../packages/schema/dist/chart.js
@@ -326,6 +346,7 @@ var ComboChartConfigSchema = z2.object({
326
346
  type: z2.literal("combo"),
327
347
  x: AxisSchema,
328
348
  series: WideFormatSeriesSchema,
349
+ stacking: z2.enum(["stacked", "percent"]).optional(),
329
350
  axes: DualAxesSchema,
330
351
  legend: LegendSchema.optional(),
331
352
  interactions: InteractionsSchema.optional(),
@@ -661,10 +682,20 @@ var GitSchema = z4.object({
661
682
  });
662
683
  var SSOProviderSchema = z4.object({
663
684
  client_id: z4.string(),
664
- client_secret: z4.string(),
685
+ // Provide the secret directly, or name an env var that holds it (client_secret_var)
686
+ // so the secret never lives in git.
687
+ client_secret: z4.string().optional(),
688
+ client_secret_var: z4.string().optional(),
665
689
  tenant: z4.string().optional(),
666
690
  issuer: z4.string().optional(),
667
- display_name: z4.string().optional()
691
+ display_name: z4.string().optional(),
692
+ // Invite list: if non-empty, only these emails may sign in via this provider.
693
+ // Anyone not listed is rejected instead of auto-provisioned.
694
+ allowed_emails: z4.array(z4.string()).optional(),
695
+ // Emails provisioned with the admin role (implicitly allowed even if not in allowed_emails).
696
+ admin_emails: z4.array(z4.string()).optional()
697
+ }).refine((c) => !!c.client_secret || !!c.client_secret_var, {
698
+ message: "SSO provider requires either client_secret or client_secret_var"
668
699
  });
669
700
  var AuthSchema2 = z4.object({
670
701
  enabled: z4.boolean(),
@@ -974,4 +1005,4 @@ export {
974
1005
  AgentDefinitionSchema,
975
1006
  VERSION
976
1007
  };
977
- //# sourceMappingURL=chunk-LQN2HNQZ.js.map
1008
+ //# sourceMappingURL=chunk-RM6MNDVF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/schema/src/connection.ts","../../../packages/schema/src/chart.ts","../../../packages/schema/src/project.ts","../../../packages/schema/src/semantic.ts","../../../packages/schema/src/model.ts","../../../packages/schema/src/dashboard.ts","../../../packages/schema/src/schedule.ts","../../../packages/schema/src/events.ts","../../../packages/schema/src/agent.ts","../../../packages/schema/src/index.ts"],"sourcesContent":["import { z } from 'zod';\n\n// Auth configuration for connections\nconst EnvAuthSchema = z.object({\n type: z.literal('env'),\n user_var: z.string(),\n password_var: z.string(),\n});\n\nconst KeyPairAuthSchema = z.object({\n type: z.literal('key_pair'),\n user_var: z.string(),\n private_key_path: z.string(),\n});\n\nconst SecretManagerAuthSchema = z.object({\n type: z.literal('secret_manager'),\n provider: z.enum(['aws_secrets_manager', 'gcp_secret_manager', 'vault']),\n secret_id: z.string(),\n});\n\nconst ExternalBrowserAuthSchema = z.object({\n type: z.literal('externalbrowser'),\n user_var: z.string(),\n cache_token: z.boolean().optional(),\n});\n\nconst ServiceAccountAuthSchema = z.object({\n type: z.literal('service_account'),\n credentials_var: z.string().optional(), // env var NAME holding the SA JSON contents\n key_file: z.string().optional(), // path to a SA .json key file\n});\n\nconst AuthSchema = z.discriminatedUnion('type', [\n EnvAuthSchema,\n KeyPairAuthSchema,\n SecretManagerAuthSchema,\n ExternalBrowserAuthSchema,\n ServiceAccountAuthSchema,\n]);\n\n// Connection pool configuration\nconst PoolConfigSchema = z.object({\n min_connections: z.number().int().positive().optional(),\n max_connections: z.number().int().positive().optional(),\n idle_timeout: z.number().int().positive().optional(),\n});\n\n// Query settings\nconst QueryConfigSchema = z.object({\n timeout: z.number().int().positive().optional(),\n max_rows: z.number().int().positive().optional(),\n});\n\n// DuckDB-specific config\nconst DuckDBConfigSchema = z.object({\n path: z.string(), // file path or :memory:\n});\n\n// Postgres-specific config\nconst PostgresConfigSchema = z.object({\n host: z.string(),\n port: z.number().int().positive().default(5432),\n database: z.string(),\n schema: z.string().optional(),\n ssl: z.boolean().optional(),\n});\n\n// Snowflake-specific config\nconst SnowflakeConfigSchema = z.object({\n account: z.string(),\n warehouse: z.string(),\n database: z.string(),\n schema: z.string().optional(),\n role: z.string().optional(),\n});\n\n// MySQL-specific config\nconst MySQLConfigSchema = z.object({\n host: z.string(),\n port: z.number().int().positive().default(3306),\n database: z.string(),\n ssl: z.boolean().optional(),\n});\n\n// SQLite-specific config\nconst SQLiteConfigSchema = z.object({\n path: z.string(), // file path or :memory:\n});\n\n// BigQuery-specific config\nconst BigQueryConfigSchema = z.object({\n project_id: z.string(),\n dataset: z.string().optional(),\n location: z.string().optional(),\n max_bytes_billed: z.number().optional(),\n});\n\n// Base connection schema\nconst BaseConnectionSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n pool: PoolConfigSchema.optional(),\n query: QueryConfigSchema.optional(),\n});\n\n// Type-specific connection schemas\nconst DuckDBConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('duckdb'),\n config: DuckDBConfigSchema,\n auth: z.undefined().optional(),\n});\n\nconst PostgresConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('postgres'),\n config: PostgresConfigSchema,\n auth: AuthSchema.optional(),\n});\n\nconst SnowflakeConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('snowflake'),\n config: SnowflakeConfigSchema,\n auth: AuthSchema,\n});\n\nconst MySQLConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('mysql'),\n config: MySQLConfigSchema,\n auth: AuthSchema.optional(),\n});\n\nconst SQLiteConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('sqlite'),\n config: SQLiteConfigSchema,\n auth: z.undefined().optional(),\n});\n\nconst BigQueryConnectionSchema = BaseConnectionSchema.extend({\n type: z.literal('bigquery'),\n config: BigQueryConfigSchema,\n auth: AuthSchema,\n});\n\n// Union of all connection types\nexport const ConnectionSchema = z.discriminatedUnion('type', [\n DuckDBConnectionSchema,\n PostgresConnectionSchema,\n SnowflakeConnectionSchema,\n MySQLConnectionSchema,\n SQLiteConnectionSchema,\n BigQueryConnectionSchema,\n]);\n\nexport type Connection = z.infer<typeof ConnectionSchema>;\nexport type DuckDBConnection = z.infer<typeof DuckDBConnectionSchema>;\nexport type PostgresConnection = z.infer<typeof PostgresConnectionSchema>;\nexport type SnowflakeConnection = z.infer<typeof SnowflakeConnectionSchema>;\nexport type MySQLConnection = z.infer<typeof MySQLConnectionSchema>;\nexport type SQLiteConnection = z.infer<typeof SQLiteConnectionSchema>;\nexport type BigQueryConnection = z.infer<typeof BigQueryConnectionSchema>;\n","import { z } from 'zod';\n\n// Axis types\nconst AxisTypeSchema = z.enum(['temporal', 'quantitative', 'ordinal', 'nominal']);\n\n// Axis configuration\nconst AxisSchema = z.object({\n field: z.string().min(1),\n type: AxisTypeSchema,\n format: z.string().optional(),\n label: z.string().optional(),\n scale: z.enum(['linear', 'log']).optional(),\n});\n\n// Chart types supported (scatter has its own dedicated schema)\nconst ChartTypeSchema = z.enum([\n 'line',\n 'bar',\n 'area',\n 'pie',\n 'donut',\n 'table',\n 'metric',\n 'map',\n 'heatmap',\n 'funnel',\n 'sankey',\n 'treemap',\n 'waterfall',\n 'gauge',\n]);\n\n// Gradient configuration - boolean shorthand or explicit from/to\nconst GradientSchema = z.union([\n z.boolean(),\n z.object({\n from: z.string(),\n to: z.string(),\n }),\n]);\n\n// Long format series: group by a field in the data (one row per series value)\nconst LongFormatSeriesSchema = z.object({\n field: z.string().min(1),\n colors: z.record(z.string(), z.string()).optional(),\n});\n\n// Series transform: compute derived values client-side\nconst SeriesTransformSchema = z.object({\n type: z.enum(['rolling_average']),\n window: z.number().int().positive(),\n});\n\n// Wide format column: each column becomes a separate series\nconst WideFormatColumnSchema = z.object({\n field: z.string().min(1),\n name: z.string().optional(),\n type: z.enum(['line', 'bar', 'area']).optional(),\n axis: z.enum(['left', 'right']).optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n opacity: z.number().min(0).max(1).optional(),\n gradient: GradientSchema.optional(),\n transform: SeriesTransformSchema.optional(),\n band: z.string().optional(), // Pair with another column to render as shaded range band\n});\n\n// Wide format series: explicit list of columns\nconst WideFormatSeriesSchema = z.object({\n columns: z.array(WideFormatColumnSchema).min(1),\n});\n\n// Series config is either long format (group by field) or wide format (explicit columns)\nconst SeriesConfigSchema = z.union([\n LongFormatSeriesSchema,\n WideFormatSeriesSchema,\n]);\n\n// Color condition for conditional coloring\nconst ColorConditionSchema = z.object({\n when: z.string(),\n color: z.string(),\n});\n\n// Conditional color configuration\nconst ConditionalColorSchema = z.object({\n conditions: z.array(ColorConditionSchema).min(1),\n default: z.string().optional(),\n});\n\n// Color - either a simple string or conditional config\nconst ColorSchema = z.union([\n z.string(),\n ConditionalColorSchema,\n]);\n\n// Legend configuration\nconst LegendSchema = z.object({\n show: z.boolean().optional(),\n position: z.enum(['top', 'bottom', 'left', 'right']).optional(),\n});\n\n// Annotation configuration\nconst LineAnnotationSchema = z.object({\n type: z.literal('line'),\n value: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n});\n\nconst BandAnnotationSchema = z.object({\n type: z.literal('band'),\n from: z.number(),\n to: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n});\n\nconst XLineAnnotationSchema = z.object({\n type: z.literal('x_line'),\n x: z.string(), // x-axis value (date string or category)\n label: z.string().optional(),\n color: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n});\n\nconst AnnotationSchema = z.discriminatedUnion('type', [\n LineAnnotationSchema,\n BandAnnotationSchema,\n XLineAnnotationSchema,\n]);\n\n// Goal zone configuration (tolerance band around target)\nconst GoalZoneSchema = z.object({\n tolerance: z.number().min(0).max(1),\n});\n\n// Goal line style\nconst GoalStyleSchema = z.enum(['solid', 'dashed', 'dotted']);\n\n// Fixed goal — constant horizontal target line\nconst FixedGoalSchema = z.object({\n type: z.literal('fixed'),\n value: z.number(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Cumulative goal — target value to reach by a deadline\nconst CumulativeGoalSchema = z.object({\n type: z.literal('cumulative'),\n value: z.number(),\n by: z.string().min(1),\n from: z.string().optional(),\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Source for model-driven goals\nconst GoalSourceSchema = z.object({\n model: z.string().min(1),\n value_field: z.string().min(1),\n date_field: z.string().optional(),\n});\n\n// Model-driven goal — target values from a SQL model\nconst ModelGoalSchema = z.object({\n type: z.literal('model'),\n source: GoalSourceSchema,\n label: z.string().optional(),\n color: z.string().optional(),\n style: GoalStyleSchema.optional(),\n zone: GoalZoneSchema.optional(),\n});\n\n// Goal discriminated union (for line/bar/area/combo charts)\nconst GoalSchema = z.discriminatedUnion('type', [\n FixedGoalSchema,\n CumulativeGoalSchema,\n ModelGoalSchema,\n]);\n\n// KPI/Gauge goal — simple target value with optional progress display\nconst KpiGoalSchema = z.object({\n value: z.number(),\n label: z.string().optional(),\n show_progress: z.boolean().optional(),\n color: z.string().optional(),\n});\n\n// Interactivity options\nconst InteractionsSchema = z.object({\n tooltip: z.boolean().default(true),\n zoom: z.boolean().default(false),\n brush: z.boolean().default(false),\n});\n\n// KPI format types\nconst KpiFormatSchema = z.object({\n type: z.enum(['number', 'currency', 'percent']),\n currency: z.string().optional(), // e.g., 'USD', 'EUR'\n decimals: z.number().optional(),\n});\n\n// KPI comparison configuration\nconst KpiComparisonSchema = z.object({\n enabled: z.boolean(),\n field: z.string().min(1).optional(),\n period: z.enum(['previous']).optional(),\n label: z.string().optional(),\n type: z.enum(['percent_change', 'absolute']),\n}).refine(\n (data) => !(data.field && data.period),\n { message: 'Cannot set both field and period — use one or the other' }\n).refine(\n (data) => data.field || data.period,\n { message: 'Must set either field or period for comparison' }\n);\n\n// KPI value configuration\nconst KpiValueSchema = z.object({\n field: z.string().min(1),\n});\n\n// KPI-specific config\nconst KpiConfigSchema = z.object({\n type: z.literal('kpi'),\n value: KpiValueSchema,\n format: KpiFormatSchema,\n comparison: KpiComparisonSchema.optional(),\n unit: z.string().optional(), // e.g., 'min', 'sessions', 'users'\n goal: KpiGoalSchema.optional(),\n});\n\n// Center value for donut charts\nconst CenterValueSchema = z.object({\n field: z.string().optional(), // 'total' for sum, or specific field\n label: z.string().optional(),\n format: z.string().optional(),\n});\n\n// Period comparison overlay\nconst CompareSchema = z.object({\n period: z.string(), // previous_week, previous_month, previous_year, or a preset name\n label: z.string().optional(),\n style: z.enum(['solid', 'dashed', 'dotted']).optional(),\n opacity: z.number().min(0).max(1).optional(),\n color: z.string().optional(),\n});\n\n// Standard chart config (existing)\nconst StandardChartConfigSchema = z.object({\n type: ChartTypeSchema,\n x: AxisSchema,\n y: AxisSchema.optional(),\n series: SeriesConfigSchema.optional(),\n stacking: z.enum(['stacked', 'percent']).optional(),\n orientation: z.enum(['vertical', 'horizontal']).optional(),\n color: ColorSchema.optional(),\n gradient: GradientSchema.optional(),\n legend: LegendSchema.optional(),\n annotations: z.array(AnnotationSchema).optional(),\n compare: z.array(CompareSchema).optional(),\n interactions: InteractionsSchema.optional(),\n centerValue: CenterValueSchema.optional(), // For donut charts\n goals: z.array(GoalSchema).optional(),\n});\n\n// Dual axis config for combo charts (label + format, not data field references)\nconst DualAxisConfigSchema = z.object({\n label: z.string().optional(),\n format: z.string().optional(),\n scale: z.enum(['linear', 'log']).optional(),\n});\n\nconst DualAxesSchema = z.object({\n left: DualAxisConfigSchema.optional(),\n right: DualAxisConfigSchema.optional(),\n});\n\n// Combo chart config - requires dual axes\nconst ComboChartConfigSchema = z.object({\n type: z.literal('combo'),\n x: AxisSchema,\n series: WideFormatSeriesSchema,\n stacking: z.enum(['stacked', 'percent']).optional(),\n axes: DualAxesSchema,\n legend: LegendSchema.optional(),\n interactions: InteractionsSchema.optional(),\n gradient: GradientSchema.optional(),\n goals: z.array(GoalSchema).optional(),\n});\n\n// Scatter chart size encoding\nconst ScatterSizeSchema = z.object({\n field: z.string().min(1),\n min: z.number().optional(),\n max: z.number().optional(),\n label: z.string().optional(),\n});\n\n// Scatter chart grouping\nconst ScatterGroupSchema = z.object({\n field: z.string().min(1),\n});\n\n// Regression line configuration\nconst RegressionSchema = z.object({\n type: z.literal('linear'),\n show_equation: z.boolean().optional(),\n show_r_squared: z.boolean().optional(),\n});\n\n// Scatter/bubble chart config\nconst ScatterChartConfigSchema = z.object({\n type: z.literal('scatter'),\n x: AxisSchema,\n y: AxisSchema,\n size: ScatterSizeSchema.optional(),\n group: ScatterGroupSchema.optional(),\n regression: RegressionSchema.optional(),\n color: ColorSchema.optional(),\n legend: LegendSchema.optional(),\n interactions: InteractionsSchema.optional(),\n});\n\n// Heatmap chart config\nconst HeatmapChartConfigSchema = z.object({\n type: z.literal('heatmap'),\n x: AxisSchema,\n y: AxisSchema,\n value: z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n }),\n color_range: z.object({\n min: z.string().optional(),\n max: z.string().optional(),\n }).optional(),\n show_values: z.boolean().optional(),\n});\n\n// Funnel chart config\nconst FunnelChartConfigSchema = z.object({\n type: z.literal('funnel'),\n stage: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n show_conversion: z.boolean().optional(),\n color: ColorSchema.optional(),\n});\n\n// Waterfall chart config\nconst WaterfallChartConfigSchema = z.object({\n type: z.literal('waterfall'),\n category: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n total_field: z.string().optional(),\n series: LongFormatSeriesSchema.optional(), // Stacked breakdown within each waterfall step\n colors: z.object({\n increase: z.string().optional(),\n decrease: z.string().optional(),\n total: z.string().optional(),\n }).optional(),\n});\n\n// Sankey chart config\nconst SankeyChartConfigSchema = z.object({\n type: z.literal('sankey'),\n source: z.object({ field: z.string().min(1) }),\n target: z.object({ field: z.string().min(1) }),\n value: z.object({ field: z.string().min(1) }),\n levels: z.array(z.array(z.string())).optional(),\n orient: z.enum(['horizontal', 'vertical']).optional(),\n node_width: z.number().positive().optional(),\n node_gap: z.number().nonnegative().optional(),\n label_position: z.enum(['left', 'right', 'top', 'bottom', 'inside']).optional(),\n});\nexport type SankeyChartConfig = z.infer<typeof SankeyChartConfigSchema>;\n\n// Gauge chart config\nconst GaugeThresholdSchema = z.object({\n value: z.number(),\n color: z.string(),\n});\n\nconst GaugeChartConfigSchema = z.object({\n type: z.literal('gauge'),\n value: z.object({ field: z.string().min(1) }),\n min: z.number().optional(),\n max: z.number().optional(),\n unit: z.string().optional(),\n thresholds: z.array(GaugeThresholdSchema).optional(),\n format: z.string().optional(),\n goal: KpiGoalSchema.optional(),\n});\n\nconst TableColumnSummarySchema = z.enum(['sum', 'avg', 'min', 'max', 'count']);\n\nconst PivotAggregateSchema = z.enum(['sum', 'avg', 'min', 'max', 'count']);\n\nconst PivotValueSchema = z.object({\n field: z.string().min(1),\n aggregate: PivotAggregateSchema.default('sum'),\n format: z.string().optional(),\n heatmap: z.boolean().optional(),\n});\n\nconst PivotHeatmapSchema = z.object({\n color: z.string().optional(),\n scope: z.enum(['column', 'global']).optional(),\n});\n\nconst PivotConfigSchema = z.object({\n rows: z.array(z.string().min(1)).min(1),\n columns: z.string().min(1),\n values: z.array(PivotValueSchema).min(1),\n subtotals: z.boolean().optional(),\n grandTotals: z.boolean().optional(),\n heatmap: PivotHeatmapSchema.optional(),\n});\n\nconst TableChartConfigSchema = z.object({\n type: z.literal('table'),\n columns: z.array(z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n format: z.string().optional(),\n sticky: z.boolean().optional(),\n summary: TableColumnSummarySchema.optional(),\n overflow: z.enum(['ellipsis', 'wrap', 'hidden']).optional(),\n font: z.enum(['mono']).optional(),\n })).optional(),\n summary: z.object({\n label: z.string().optional(),\n }).optional(),\n sort: z.object({\n field: z.string().min(1),\n direction: z.enum(['asc', 'desc']).optional(),\n }).optional(),\n pagination: z.object({\n enabled: z.boolean().optional(),\n page_size: z.number().int().positive().optional(),\n mode: z.enum(['paginated', 'infinite_scroll']).optional(),\n server_side: z.boolean().optional(),\n }).optional(),\n max_rows: z.number().int().positive().optional(),\n export: z.object({\n enabled: z.boolean().optional(),\n max_rows: z.number().int().positive().optional(),\n }).optional(),\n pivot: PivotConfigSchema.optional(),\n});\n\n// Chart visualization config - standard, KPI, combo, scatter, heatmap, funnel, waterfall, gauge, or table\nconst ChartConfigSchema = z.union([\n ScatterChartConfigSchema,\n ComboChartConfigSchema,\n HeatmapChartConfigSchema,\n FunnelChartConfigSchema,\n WaterfallChartConfigSchema,\n GaugeChartConfigSchema,\n SankeyChartConfigSchema,\n TableChartConfigSchema,\n StandardChartConfigSchema,\n KpiConfigSchema,\n]);\n\n// Parameter types\nconst ParameterTypeSchema = z.enum([\n 'date_range',\n 'select',\n 'multi_select',\n 'dynamic_select',\n 'text',\n 'number',\n 'boolean',\n]);\n\n// Parameter option\nconst ParameterOptionSchema = z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: z.string(),\n }),\n]);\n\n// Parameter source (for dynamic options)\nconst ParameterSourceSchema = z.object({\n model: z.string(),\n value_field: z.string(),\n label_field: z.string(),\n});\n\n// Parameter definition\nconst ParameterSchema = z.object({\n name: z.string().min(1),\n type: ParameterTypeSchema,\n label: z.string().optional(),\n description: z.string().optional(),\n default: z.union([z.string(), z.number(), z.array(z.string())]).optional(),\n options: z.array(ParameterOptionSchema).optional(),\n source: ParameterSourceSchema.optional(),\n});\n\n// Data source - either model reference or inline SQL\nconst SourceSchema = z.object({\n model: z.string().optional(),\n sql: z.string().optional(),\n}).refine(\n (data) => data.model !== undefined || data.sql !== undefined,\n { message: 'Source must specify either model or sql' }\n).refine(\n (data) => !(data.model !== undefined && data.sql !== undefined),\n { message: 'Source cannot specify both model and sql' }\n);\n\n// Refresh/cache configuration\nconst RefreshSchema = z.object({\n schedule: z.string().optional(), // cron expression\n timezone: z.string().optional(),\n cache_ttl: z.string().optional(), // e.g., \"1h\", \"30m\"\n});\n\n// Drill-down column config for data table display\nconst DrillDownColumnSchema = z.object({\n field: z.string().min(1),\n label: z.string().optional(),\n format: z.string().optional(),\n});\n\n// Drill-down configuration\nconst DrillDownConfigSchema = z.object({\n chart: z.string().optional(), // target chart name (source side)\n model: z.string().optional(), // model name for row-level detail data\n field: z.string().optional(), // field to pass as filter, defaults to x-axis field (backward compat)\n fields: z.union([z.string(), z.array(z.string())]).optional(), // dimension field(s) for filtering\n columns: z.array(DrillDownColumnSchema).optional(), // data table columns (target side)\n}).refine(data => data.chart || data.model || data.columns, {\n message: \"drillDown requires 'chart', 'model', or 'columns'\",\n});\n\n// Main chart schema\nexport const ChartSchema = z.object({\n // Identity\n name: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n\n // Metadata\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n created: z.string().optional(),\n updated: z.string().optional(),\n\n // Data\n source: SourceSchema,\n parameters: z.array(ParameterSchema).optional(),\n\n // Visualization\n chart: ChartConfigSchema,\n\n // Caching\n refresh: RefreshSchema.optional(),\n\n // Drill-down navigation\n drillDown: DrillDownConfigSchema.optional(),\n});\n\nexport type Chart = z.infer<typeof ChartSchema>;\nexport type ChartConfig = z.infer<typeof ChartConfigSchema>;\nexport type ChartType = z.infer<typeof ChartTypeSchema>;\nexport type Parameter = z.infer<typeof ParameterSchema>;\nexport type Axis = z.infer<typeof AxisSchema>;\nexport type SeriesConfig = z.infer<typeof SeriesConfigSchema>;\nexport type LongFormatSeries = z.infer<typeof LongFormatSeriesSchema>;\nexport type WideFormatSeries = z.infer<typeof WideFormatSeriesSchema>;\nexport type WideFormatColumn = z.infer<typeof WideFormatColumnSchema>;\nexport type ColorConfig = z.infer<typeof ColorSchema>;\nexport type ConditionalColor = z.infer<typeof ConditionalColorSchema>;\nexport type ColorCondition = z.infer<typeof ColorConditionSchema>;\nexport type GradientConfig = z.infer<typeof GradientSchema>;\nexport type LegendConfig = z.infer<typeof LegendSchema>;\nexport type ComboChartConfig = z.infer<typeof ComboChartConfigSchema>;\nexport type DualAxes = z.infer<typeof DualAxesSchema>;\nexport type ScatterChartConfig = z.infer<typeof ScatterChartConfigSchema>;\nexport type ScatterSize = z.infer<typeof ScatterSizeSchema>;\nexport type ScatterGroup = z.infer<typeof ScatterGroupSchema>;\nexport type RegressionConfig = z.infer<typeof RegressionSchema>;\nexport type DrillDownConfig = z.infer<typeof DrillDownConfigSchema>;\nexport type DrillDownColumn = z.infer<typeof DrillDownColumnSchema>;\nexport type HeatmapChartConfig = z.infer<typeof HeatmapChartConfigSchema>;\nexport type FunnelChartConfig = z.infer<typeof FunnelChartConfigSchema>;\nexport type WaterfallChartConfig = z.infer<typeof WaterfallChartConfigSchema>;\nexport type GaugeChartConfig = z.infer<typeof GaugeChartConfigSchema>;\nexport type TableChartConfig = z.infer<typeof TableChartConfigSchema>;\nexport type PivotConfig = z.infer<typeof PivotConfigSchema>;\nexport type PivotValueConfig = z.infer<typeof PivotValueSchema>;\nexport type PivotHeatmapConfig = z.infer<typeof PivotHeatmapSchema>;\nexport type GoalConfig = z.infer<typeof GoalSchema>;\nexport type FixedGoal = z.infer<typeof FixedGoalSchema>;\nexport type CumulativeGoal = z.infer<typeof CumulativeGoalSchema>;\nexport type ModelGoal = z.infer<typeof ModelGoalSchema>;\nexport type KpiGoal = z.infer<typeof KpiGoalSchema>;\nexport type GoalZone = z.infer<typeof GoalZoneSchema>;\n\nexport { ParameterSchema };\n","import { z } from 'zod';\nimport { SemanticConfigSchema } from './semantic.js';\n\n// Default settings\nconst DefaultsSchema = z.object({\n connection: z.string().optional(),\n theme: z.string().optional(),\n timezone: z.string().optional(),\n cache_ttl: z.string().optional(),\n base_url: z.string().url().optional(),\n week_start: z.enum(['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']).optional(),\n table: z.object({\n max_display_rows: z.number().int().positive().optional(),\n max_export_rows: z.number().int().positive().optional(),\n }).optional(),\n});\n\n// Git integration settings\nconst GitSchema = z.object({\n provider: z.enum(['github', 'gitlab', 'bitbucket']).optional(),\n repo: z.string().optional(),\n branch: z.string().optional(),\n preview_branches: z.boolean().optional(),\n});\n\n// SSO provider configuration\nconst SSOProviderSchema = z\n .object({\n client_id: z.string(),\n // Provide the secret directly, or name an env var that holds it (client_secret_var)\n // so the secret never lives in git.\n client_secret: z.string().optional(),\n client_secret_var: z.string().optional(),\n tenant: z.string().optional(),\n issuer: z.string().optional(),\n display_name: z.string().optional(),\n // Invite list: if non-empty, only these emails may sign in via this provider.\n // Anyone not listed is rejected instead of auto-provisioned.\n allowed_emails: z.array(z.string()).optional(),\n // Emails provisioned with the admin role (implicitly allowed even if not in allowed_emails).\n admin_emails: z.array(z.string()).optional(),\n })\n .refine((c) => !!c.client_secret || !!c.client_secret_var, {\n message: 'SSO provider requires either client_secret or client_secret_var',\n });\n\n// Authentication settings (built-in local auth)\nconst AuthSchema = z.object({\n enabled: z.boolean(),\n db_path: z.string().optional(),\n session_ttl: z.string().optional(),\n providers: z.object({\n google: SSOProviderSchema.optional(),\n microsoft: SSOProviderSchema.optional(),\n oidc: SSOProviderSchema.optional(),\n }).optional(),\n});\n\n// Feature flags\nconst FeaturesSchema = z.object({\n enable_sql_editor: z.boolean().optional(),\n enable_csv_export: z.boolean().optional(),\n enable_scheduling: z.boolean().optional(),\n chat: z.boolean().optional(),\n});\n\n// Sidebar link for external navigation\nconst SidebarLinkSchema = z.object({\n label: z.string(),\n url: z.string(),\n icon: z.string().optional(),\n});\n\n// Sidebar configuration\nconst SidebarConfigSchema = z.object({\n show: z.boolean().optional(),\n collapsed: z.boolean().optional(),\n links: z.array(SidebarLinkSchema).optional(),\n sections: z.object({\n dashboards: z.boolean().optional(),\n charts: z.boolean().optional(),\n }).optional(),\n});\n\n// Color configuration\nconst ColorsSchema = z.object({\n primary: z.string().optional(),\n background: z.string().optional(),\n surface: z.string().optional(),\n sidebar: z.string().optional(),\n text: z.string().optional(),\n});\n\n// Font configuration\nconst FontsSchema = z.object({\n heading: z.string().optional(),\n body: z.string().optional(),\n mono: z.string().optional(),\n size: z.enum(['compact', 'default', 'comfortable']).optional(),\n});\n\n// Logo can be a string path or light/dark object\nconst LogoSchema = z.union([\n z.string(),\n z.object({\n light: z.string(),\n dark: z.string(),\n }),\n]);\n\n// Theme configuration\nconst ThemeSchema = z.object({\n mode: z.enum(['light', 'dark', 'auto']).optional(),\n base: z.enum(['modern', 'executive', 'minimal']).optional(),\n logo: LogoSchema.optional(),\n favicon: z.string().optional(),\n title: z.string().optional(),\n colors: ColorsSchema.optional(),\n palette: z.array(z.string()).optional(),\n gradient: z.boolean().default(false),\n opacity: z.number().min(0).max(1).default(1.0),\n fonts: FontsSchema.optional(),\n sidebar: SidebarConfigSchema.optional(),\n customCss: z.string().optional(),\n});\n\n// Environment-specific overrides — same shape as ProjectSchema minus identity fields\nconst EnvironmentOverrideSchema = z.object({\n defaults: DefaultsSchema.optional(),\n git: GitSchema.optional(),\n auth: AuthSchema.optional(),\n features: FeaturesSchema.optional(),\n theme: ThemeSchema.optional(),\n semantic: SemanticConfigSchema.optional(),\n}).passthrough();\n\n/**\n * Deep-merge two plain objects. Objects merge recursively;\n * arrays and scalars in override replace the base value entirely.\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n base: T,\n override: Record<string, unknown> | undefined,\n): T {\n if (!override) return { ...base };\n\n const result = { ...base } as Record<string, unknown>;\n for (const [key, value] of Object.entries(override)) {\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof result[key] === 'object' &&\n result[key] !== null &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMerge(\n result[key] as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n result[key] = value;\n }\n }\n return result as T;\n}\n\n/**\n * Resolve a raw yamchart.yaml object for a given environment.\n * Extracts and merges the matching environments block, then strips\n * the environments key. Does NOT validate — caller runs Zod after\n * optionally merging yamchart.local.yaml on top.\n */\nexport function resolveProjectConfig(\n raw: Record<string, unknown>,\n env?: string,\n): Record<string, unknown> {\n const { environments, ...base } = raw;\n const envBlocks = environments as Record<string, Record<string, unknown>> | undefined;\n const envOverride = env ? envBlocks?.[env] : undefined;\n return deepMerge(base as Record<string, unknown>, envOverride);\n}\n\n// Catalog filter configuration\nconst CatalogIncludeSchema = z.object({\n schemas: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n});\n\nconst CatalogConfigSchema = z.object({\n include: CatalogIncludeSchema.optional(),\n});\n\nexport type CatalogConfig = z.infer<typeof CatalogConfigSchema>;\n\n// Main project schema\nexport const ProjectSchema = z.object({\n version: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n\n defaults: DefaultsSchema.optional(),\n\n environments: z.record(z.string(), EnvironmentOverrideSchema).optional(),\n\n git: GitSchema.optional(),\n auth: AuthSchema.optional(),\n features: FeaturesSchema.optional(),\n theme: ThemeSchema.optional(),\n semantic: SemanticConfigSchema,\n catalog: CatalogConfigSchema.optional(),\n});\n\nexport type Project = z.infer<typeof ProjectSchema>;\nexport type Auth = z.infer<typeof AuthSchema>;\nexport type Defaults = z.infer<typeof DefaultsSchema>;\nexport type EnvironmentOverride = z.infer<typeof EnvironmentOverrideSchema>;\nexport type Theme = z.infer<typeof ThemeSchema>;\nexport type SidebarConfig = z.infer<typeof SidebarConfigSchema>;\nexport type FontsConfig = z.infer<typeof FontsSchema>;\nexport type ColorsConfig = z.infer<typeof ColorsSchema>;\n","import { z } from 'zod';\n\n// --- Semantic Model ---\n\nexport const MeasureTypeSchema = z.enum(['sum', 'count', 'avg', 'min', 'max', 'count_distinct']);\n\nexport const DimensionTypeSchema = z.enum(['string', 'number', 'time', 'boolean']);\n\nexport const MeasureSchema = z.object({\n name: z.string(),\n type: MeasureTypeSchema,\n description: z.string().optional(),\n format: z.string().optional(),\n});\n\nexport const DimensionSchema = z.object({\n name: z.string(),\n type: DimensionTypeSchema,\n description: z.string().optional(),\n});\n\nexport const SemanticEntitySchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n source: z.enum(['catalog', 'model']),\n source_table: z.string(),\n measures: z.array(MeasureSchema),\n dimensions: z.array(DimensionSchema),\n parameters: z.array(z.object({\n name: z.string(),\n type: z.string(),\n default: z.union([z.string(), z.number()]).optional(),\n options: z.array(z.string()).optional(),\n })).optional(),\n});\n\nexport const RelationshipSchema = z.object({\n from: z.object({ entity: z.string(), field: z.string() }),\n to: z.object({ entity: z.string(), field: z.string() }),\n type: z.enum(['many_to_one', 'one_to_many', 'one_to_one']),\n});\n\nexport const SemanticModelSchema = z.object({\n entities: z.array(SemanticEntitySchema),\n relationships: z.array(RelationshipSchema),\n generated_at: z.string(),\n});\n\n// --- Structured Query ---\n\nexport const SemanticFilterOperatorSchema = z.enum([\n 'equals', 'not_equals', 'contains', 'gt', 'gte', 'lt', 'lte', 'in', 'not_in',\n]);\n\nexport const SemanticFilterSchema = z.object({\n dimension: z.string(),\n operator: SemanticFilterOperatorSchema,\n value: z.union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number()]))]),\n});\n\nexport const SemanticQuerySchema = z.object({\n model: z.string(),\n measures: z.array(z.string()).min(1),\n dimensions: z.array(z.string()).optional().default([]),\n parameters: z.record(z.union([z.string(), z.number()])).optional(),\n filters: z.array(SemanticFilterSchema).optional().default([]),\n order_by: z.object({\n field: z.string(),\n direction: z.enum(['asc', 'desc']).default('asc'),\n }).optional(),\n limit: z.number().int().positive().max(10000).optional().default(1000),\n});\n\n// --- Semantic Config (for yamchart.yaml) ---\n\nexport const SemanticConfigSchema = z.object({\n include: z.object({\n paths: z.array(z.string()).default(['gold/', 'marts/', 'core/']),\n prefixes: z.array(z.string()).default(['dim_', 'fct_', 'fact_']),\n }).optional().default({\n paths: ['gold/', 'marts/', 'core/'],\n prefixes: ['dim_', 'fct_', 'fact_'],\n }),\n}).optional();\n\n// --- Inferred types ---\n\nexport type Measure = z.infer<typeof MeasureSchema>;\nexport type MeasureType = z.infer<typeof MeasureTypeSchema>;\nexport type Dimension = z.infer<typeof DimensionSchema>;\nexport type DimensionType = z.infer<typeof DimensionTypeSchema>;\nexport type SemanticEntity = z.infer<typeof SemanticEntitySchema>;\nexport type Relationship = z.infer<typeof RelationshipSchema>;\nexport type SemanticModel = z.infer<typeof SemanticModelSchema>;\nexport type SemanticFilter = z.infer<typeof SemanticFilterSchema>;\nexport type SemanticQuery = z.infer<typeof SemanticQuerySchema>;\nexport type SemanticConfig = z.infer<typeof SemanticConfigSchema>;\n","import { z } from 'zod';\n\n// Parameter type\nconst ParamTypeSchema = z.enum(['string', 'number', 'date', 'boolean', 'string[]', 'number[]']);\n\n// Model parameter\nconst ModelParamSchema = z.object({\n name: z.string().min(1),\n type: ParamTypeSchema,\n default: z.string().optional(),\n options: z.array(z.string()).optional(), // For enum-like params\n description: z.string().optional(),\n});\n\n// Return column definition\nconst ReturnColumnSchema = z.object({\n name: z.string().min(1),\n type: z.string(),\n description: z.string().optional(),\n});\n\n// Model metadata (extracted from SQL comments)\nexport const ModelMetadataSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n\n params: z.array(ModelParamSchema).optional(),\n returns: z.array(ReturnColumnSchema).optional(),\n tests: z.array(z.string()).optional(), // SQL assertions\n});\n\n// Full model (metadata + SQL)\nexport const ModelSchema = z.object({\n metadata: ModelMetadataSchema,\n sql: z.string().min(1),\n filePath: z.string().optional(),\n});\n\nexport type ModelMetadata = z.infer<typeof ModelMetadataSchema>;\nexport type ModelParam = z.infer<typeof ModelParamSchema>;\nexport type ReturnColumn = z.infer<typeof ReturnColumnSchema>;\nexport type Model = z.infer<typeof ModelSchema>;\n","import { z } from 'zod';\nimport { ParameterSchema } from './chart.js';\n\n// Widget types\nconst ChartWidgetSchema = z.object({\n type: z.literal('chart'),\n ref: z.string().min(1),\n cols: z.number().min(1).max(12),\n height: z.number().min(38).optional(),\n x: z.number().min(0).max(11).optional(),\n y: z.number().min(0).optional(),\n});\n\nconst TextWidgetSchema = z.object({\n type: z.literal('text'),\n content: z.string(),\n cols: z.number().min(1).max(12),\n height: z.number().min(38).optional(),\n x: z.number().min(0).max(11).optional(),\n y: z.number().min(0).optional(),\n});\n\nconst WidgetSchema = z.discriminatedUnion('type', [\n ChartWidgetSchema,\n TextWidgetSchema,\n]);\n\n// Row configuration\nconst RowSchema = z.object({\n height: z.number().min(38),\n widgets: z.array(WidgetSchema).min(1),\n});\n\n// Layout configuration\nconst LayoutSchema = z.object({\n gap: z.number().min(0).default(16),\n rows: z.array(RowSchema).min(1),\n});\n\n// Tab configuration\nconst TabSchema = z.object({\n name: z.string().min(1),\n label: z.string().min(1),\n filters: z.array(ParameterSchema).optional(),\n layout: LayoutSchema,\n});\n\n// Main dashboard schema\nexport const DashboardSchema = z.object({\n // Identity\n name: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n\n // Filters inherited by all widgets (shared across tabs)\n filters: z.array(ParameterSchema).optional(),\n\n // Layout definition (mutually exclusive with tabs)\n layout: LayoutSchema.optional(),\n\n // Tabbed layout\n tabs: z.array(TabSchema).min(1).optional(),\n}).superRefine((data, ctx) => {\n if (data.layout && data.tabs) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Dashboard must have either \"layout\" or \"tabs\", not both',\n path: ['tabs'],\n });\n }\n if (!data.layout && !data.tabs) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Dashboard must have either \"layout\" or \"tabs\"',\n path: [],\n });\n }\n});\n\nexport type Dashboard = z.infer<typeof DashboardSchema>;\nexport type DashboardTab = z.infer<typeof TabSchema>;\nexport type DashboardLayout = z.infer<typeof LayoutSchema>;\nexport type DashboardRow = z.infer<typeof RowSchema>;\nexport type DashboardWidget = z.infer<typeof WidgetSchema>;\nexport type ChartWidget = z.infer<typeof ChartWidgetSchema>;\nexport type TextWidget = z.infer<typeof TextWidgetSchema>;\n","import { z } from 'zod';\n\nconst SlackChannelSchema = z.object({\n webhook_url: z.string().min(1),\n channel: z.string().optional(),\n});\n\nconst ChannelSchema = z.object({\n slack: SlackChannelSchema,\n});\n\nconst ConditionOperatorSchema = z.enum(['lt', 'gt', 'lte', 'gte', 'eq']);\n\nconst ConditionSchema = z.object({\n field: z.string().min(1),\n operator: ConditionOperatorSchema,\n value: z.number(),\n});\n\nconst ReportScheduleSchema = z.object({\n name: z.string().min(1),\n type: z.literal('report'),\n schedule: z.string().min(1),\n timezone: z.string().optional(),\n channel: ChannelSchema,\n charts: z.array(z.string().min(1)).min(1),\n params: z.record(z.unknown()).optional(),\n message: z.string().optional(),\n notify_on_error: z.boolean().optional(),\n});\n\nconst AlertScheduleSchema = z.object({\n name: z.string().min(1),\n type: z.literal('alert'),\n schedule: z.string().min(1),\n timezone: z.string().optional(),\n channel: ChannelSchema,\n chart: z.string().min(1),\n params: z.record(z.unknown()).optional(),\n condition: ConditionSchema,\n cooldown: z.string().optional(),\n message: z.string().optional(),\n notify_on_error: z.boolean().optional(),\n});\n\nexport const ScheduleSchema = z.discriminatedUnion('type', [\n ReportScheduleSchema,\n AlertScheduleSchema,\n]);\n\nexport type Schedule = z.infer<typeof ScheduleSchema>;\nexport type ReportSchedule = z.infer<typeof ReportScheduleSchema>;\nexport type AlertSchedule = z.infer<typeof AlertScheduleSchema>;\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type ConditionOperator = z.infer<typeof ConditionOperatorSchema>;\n","import { z } from 'zod';\n\nexport const EventSchema = z.object({\n date: z.string(),\n endDate: z.string().optional(),\n label: z.string(),\n description: z.string().optional(),\n color: z.string().optional(),\n charts: z.array(z.string()).optional(),\n});\n\nexport const EventsFileSchema = z.object({\n events: z.array(EventSchema).default([]),\n});\n\nexport type ChartEvent = z.infer<typeof EventSchema>;\nexport type EventsFile = z.infer<typeof EventsFileSchema>;\n","import { z } from 'zod';\n\n/**\n * Zod schema for validating agent YAML files (agents/*.yaml).\n * system_prompt is treated as a plain string — Jinja rendering happens at load time in packages/chat.\n */\nexport const AgentDefinitionSchema = z.object({\n name: z.string(),\n title: z.string().optional(),\n description: z.string(),\n system_prompt: z.string(),\n tools: z.array(z.string()).default([]),\n model: z.string().optional(),\n models: z.array(z.string()).optional(),\n});\n\nexport type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;\n","// Yamchart Schema - Zod schemas and TypeScript types\nexport const VERSION = '0.1.0';\n\nexport * from './connection.js';\nexport * from './chart.js';\nexport * from './project.js';\nexport * from './model.js';\nexport * from './dashboard.js';\nexport * from './schedule.js';\nexport * from './events.js';\nexport * from './semantic.js';\nexport { AgentDefinitionSchema, type AgentDefinition } from './agent.js';\n"],"mappings":"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","names":["z","z","z","z","AuthSchema","z","z","z","z","z","z"]}
@@ -4,10 +4,10 @@ import {
4
4
  DashboardSchema,
5
5
  ProjectSchema,
6
6
  ScheduleSchema
7
- } from "./chunk-LQN2HNQZ.js";
7
+ } from "./chunk-RM6MNDVF.js";
8
8
  import {
9
9
  parseModelMetadata
10
- } from "./chunk-CWAWATL4.js";
10
+ } from "./chunk-S7YQXEKM.js";
11
11
 
12
12
  // src/commands/validate.ts
13
13
  import { readFile, readdir, access } from "fs/promises";
@@ -277,7 +277,7 @@ function levenshtein(a, b) {
277
277
  return matrix[b.length][a.length];
278
278
  }
279
279
  async function dryRunValidation(projectDir, config, connectionName, errors) {
280
- const { DuckDBConnector } = await import("./dist-VNX77VV5.js");
280
+ const { DuckDBConnector } = await import("./dist-JMLAZUL7.js");
281
281
  let passed = 0;
282
282
  let failed = 0;
283
283
  const connName = connectionName || config.project?.defaults?.connection;
@@ -360,4 +360,4 @@ export {
360
360
  findProjectRoot,
361
361
  loadEnvFile
362
362
  };
363
- //# sourceMappingURL=chunk-XDDBDJQL.js.map
363
+ //# sourceMappingURL=chunk-RMIDEBHD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __require
3
- } from "./chunk-DGUM43GV.js";
3
+ } from "./chunk-7D4SUZUM.js";
4
4
 
5
5
  // ../../packages/query/dist/parser.js
6
6
  function parseModelMetadata(sql) {
@@ -1285,6 +1285,138 @@ var SnowflakeConnector = class {
1285
1285
  }
1286
1286
  };
1287
1287
 
1288
+ // ../../packages/query/dist/connectors/bigquery.js
1289
+ import { performance as performance7 } from "perf_hooks";
1290
+ var BigQueryCtor = null;
1291
+ async function loadSDK4() {
1292
+ if (!BigQueryCtor) {
1293
+ try {
1294
+ BigQueryCtor = (await import("@google-cloud/bigquery")).BigQuery;
1295
+ } catch {
1296
+ throw new Error("@google-cloud/bigquery is not installed. BigQuery support requires a separate install:\n npm install -g @google-cloud/bigquery\nThis package is optional and not bundled with yamchart to keep the default install lightweight.");
1297
+ }
1298
+ }
1299
+ return BigQueryCtor;
1300
+ }
1301
+ function bigQueryTypeToString(type) {
1302
+ const map = {
1303
+ INT64: "integer",
1304
+ INTEGER: "integer",
1305
+ FLOAT64: "number",
1306
+ FLOAT: "number",
1307
+ NUMERIC: "number",
1308
+ BIGNUMERIC: "number",
1309
+ DECIMAL: "number",
1310
+ BIGDECIMAL: "number",
1311
+ BOOL: "boolean",
1312
+ BOOLEAN: "boolean",
1313
+ STRING: "string",
1314
+ DATE: "date",
1315
+ DATETIME: "date",
1316
+ TIMESTAMP: "date",
1317
+ TIME: "string",
1318
+ BYTES: "unknown",
1319
+ GEOGRAPHY: "unknown",
1320
+ JSON: "unknown",
1321
+ STRUCT: "unknown",
1322
+ RECORD: "unknown",
1323
+ ARRAY: "unknown",
1324
+ INTERVAL: "unknown",
1325
+ RANGE: "unknown"
1326
+ };
1327
+ return map[type.toUpperCase()] ?? "unknown";
1328
+ }
1329
+ function serializeValue(value) {
1330
+ if (value === null || value === void 0)
1331
+ return null;
1332
+ if (typeof value === "bigint") {
1333
+ return value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER ? value.toString() : Number(value);
1334
+ }
1335
+ if (value instanceof Date)
1336
+ return serializeDateValue(value);
1337
+ if (Buffer.isBuffer(value))
1338
+ return value.toString("base64");
1339
+ if (typeof value === "object") {
1340
+ const v = value;
1341
+ if (typeof v.value === "string")
1342
+ return v.value;
1343
+ if (v.constructor?.name === "Big") {
1344
+ const s = String(value);
1345
+ const n = Number(s);
1346
+ return Number.isFinite(n) ? n : s;
1347
+ }
1348
+ }
1349
+ return value;
1350
+ }
1351
+ function serializeRow(row) {
1352
+ const out = {};
1353
+ for (const [k, val] of Object.entries(row))
1354
+ out[k] = serializeValue(val);
1355
+ return out;
1356
+ }
1357
+ var BigQueryConnector = class {
1358
+ config;
1359
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1360
+ client = null;
1361
+ connected = false;
1362
+ constructor(config) {
1363
+ this.config = config;
1364
+ }
1365
+ async connect() {
1366
+ const BigQuery = await loadSDK4();
1367
+ const opts = { projectId: this.config.projectId };
1368
+ if (this.config.location)
1369
+ opts.location = this.config.location;
1370
+ if (this.config.credentials)
1371
+ opts.credentials = this.config.credentials;
1372
+ if (this.config.keyFilename)
1373
+ opts.keyFilename = this.config.keyFilename;
1374
+ this.client = new BigQuery(opts);
1375
+ await this.client.createQueryJob({ query: "SELECT 1", dryRun: true, location: this.config.location });
1376
+ this.connected = true;
1377
+ }
1378
+ async disconnect() {
1379
+ this.client = null;
1380
+ this.connected = false;
1381
+ }
1382
+ isConnected() {
1383
+ return this.connected;
1384
+ }
1385
+ async execute(sql) {
1386
+ if (!this.connected || !this.client) {
1387
+ throw new Error("Not connected to database");
1388
+ }
1389
+ const start = performance7.now();
1390
+ const jobOptions = { query: sql };
1391
+ if (this.config.location)
1392
+ jobOptions.location = this.config.location;
1393
+ if (this.config.maxBytesBilled !== void 0)
1394
+ jobOptions.maximumBytesBilled = String(this.config.maxBytesBilled);
1395
+ const [job] = await this.client.createQueryJob(jobOptions);
1396
+ const [rows, , apiResponse] = await job.getQueryResults();
1397
+ const durationMs = performance7.now() - start;
1398
+ const fields = apiResponse?.schema?.fields ?? [];
1399
+ const columns = fields.map((f) => ({ name: f.name, type: bigQueryTypeToString(f.type) }));
1400
+ return {
1401
+ columns,
1402
+ rows: (rows ?? []).map((r) => serializeRow(r)),
1403
+ rowCount: rows?.length ?? 0,
1404
+ durationMs
1405
+ };
1406
+ }
1407
+ async explain(sql) {
1408
+ if (!this.connected || !this.client) {
1409
+ throw new Error("Not connected to database");
1410
+ }
1411
+ try {
1412
+ await this.client.createQueryJob({ query: sql, dryRun: true, location: this.config.location });
1413
+ return { valid: true };
1414
+ } catch (err) {
1415
+ return { valid: false, error: err instanceof Error ? err.message : String(err) };
1416
+ }
1417
+ }
1418
+ };
1419
+
1288
1420
  // ../../packages/query/dist/connectors/auth.js
1289
1421
  function resolvePostgresAuth(connection) {
1290
1422
  const auth = connection.auth;
@@ -1354,6 +1486,28 @@ function resolveSnowflakeAuth(connection) {
1354
1486
  }
1355
1487
  throw new Error(`Auth type "${auth.type}" not yet implemented for Snowflake`);
1356
1488
  }
1489
+ function resolveBigQueryAuth(connection) {
1490
+ const auth = connection.auth;
1491
+ if (auth.type !== "service_account") {
1492
+ throw new Error(`Auth type "${auth.type}" is not supported for BigQuery. Use { type: service_account } with credentials_var (env var holding the JSON) or key_file, or omit both for ADC.`);
1493
+ }
1494
+ if (auth.credentials_var) {
1495
+ const raw = process.env[auth.credentials_var];
1496
+ if (!raw)
1497
+ throw new Error(`Missing environment variable: ${auth.credentials_var}`);
1498
+ let credentials;
1499
+ try {
1500
+ credentials = JSON.parse(raw);
1501
+ } catch {
1502
+ throw new Error(`Environment variable ${auth.credentials_var} is not valid JSON (expected service-account key contents)`);
1503
+ }
1504
+ return { credentials };
1505
+ }
1506
+ if (auth.key_file) {
1507
+ return { keyFilename: auth.key_file };
1508
+ }
1509
+ return {};
1510
+ }
1357
1511
 
1358
1512
  // ../../packages/query/dist/connectors/reconnecting.js
1359
1513
  var CONNECTION_ERROR_PATTERNS = [
@@ -1610,9 +1764,12 @@ export {
1610
1764
  MySQLConnector,
1611
1765
  SQLiteConnector,
1612
1766
  SnowflakeConnector,
1767
+ bigQueryTypeToString,
1768
+ BigQueryConnector,
1613
1769
  resolvePostgresAuth,
1614
1770
  resolveMySQLAuth,
1615
1771
  resolveSnowflakeAuth,
1772
+ resolveBigQueryAuth,
1616
1773
  ReconnectingConnector,
1617
1774
  serializeDateValue,
1618
1775
  expandThis,
@@ -1622,4 +1779,4 @@ export {
1622
1779
  checkSchema,
1623
1780
  VERSION
1624
1781
  };
1625
- //# sourceMappingURL=chunk-CWAWATL4.js.map
1782
+ //# sourceMappingURL=chunk-S7YQXEKM.js.map