@querypanel/node-sdk 1.0.23 → 1.0.25

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 (137) hide show
  1. package/README.md +46 -274
  2. package/dist/index.cjs +1471 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +468 -0
  5. package/dist/index.d.ts +468 -0
  6. package/dist/index.js +1443 -0
  7. package/dist/index.js.map +1 -0
  8. package/package.json +53 -43
  9. package/dist/cjs/adapters/clickhouse.d.ts +0 -48
  10. package/dist/cjs/adapters/clickhouse.d.ts.map +0 -1
  11. package/dist/cjs/adapters/clickhouse.js +0 -284
  12. package/dist/cjs/adapters/clickhouse.js.map +0 -1
  13. package/dist/cjs/adapters/introspection.spec.d.ts +0 -2
  14. package/dist/cjs/adapters/introspection.spec.d.ts.map +0 -1
  15. package/dist/cjs/adapters/introspection.spec.js +0 -192
  16. package/dist/cjs/adapters/introspection.spec.js.map +0 -1
  17. package/dist/cjs/adapters/postgres.d.ts +0 -46
  18. package/dist/cjs/adapters/postgres.d.ts.map +0 -1
  19. package/dist/cjs/adapters/postgres.js +0 -457
  20. package/dist/cjs/adapters/postgres.js.map +0 -1
  21. package/dist/cjs/adapters/postgres.spec.d.ts +0 -2
  22. package/dist/cjs/adapters/postgres.spec.d.ts.map +0 -1
  23. package/dist/cjs/adapters/postgres.spec.js +0 -37
  24. package/dist/cjs/adapters/postgres.spec.js.map +0 -1
  25. package/dist/cjs/adapters/types.d.ts +0 -38
  26. package/dist/cjs/adapters/types.d.ts.map +0 -1
  27. package/dist/cjs/adapters/types.js +0 -3
  28. package/dist/cjs/adapters/types.js.map +0 -1
  29. package/dist/cjs/anonymize.spec.d.ts +0 -2
  30. package/dist/cjs/anonymize.spec.d.ts.map +0 -1
  31. package/dist/cjs/anonymize.spec.js +0 -78
  32. package/dist/cjs/anonymize.spec.js.map +0 -1
  33. package/dist/cjs/clickhouseClient.spec.d.ts +0 -2
  34. package/dist/cjs/clickhouseClient.spec.d.ts.map +0 -1
  35. package/dist/cjs/clickhouseClient.spec.js +0 -286
  36. package/dist/cjs/clickhouseClient.spec.js.map +0 -1
  37. package/dist/cjs/connectors/base.d.ts +0 -14
  38. package/dist/cjs/connectors/base.d.ts.map +0 -1
  39. package/dist/cjs/connectors/base.js +0 -3
  40. package/dist/cjs/connectors/base.js.map +0 -1
  41. package/dist/cjs/connectors/clickhouse.d.ts +0 -35
  42. package/dist/cjs/connectors/clickhouse.d.ts.map +0 -1
  43. package/dist/cjs/connectors/clickhouse.js +0 -292
  44. package/dist/cjs/connectors/clickhouse.js.map +0 -1
  45. package/dist/cjs/index.d.ts +0 -498
  46. package/dist/cjs/index.d.ts.map +0 -1
  47. package/dist/cjs/index.js +0 -849
  48. package/dist/cjs/index.js.map +0 -1
  49. package/dist/cjs/index.test.d.ts +0 -2
  50. package/dist/cjs/index.test.d.ts.map +0 -1
  51. package/dist/cjs/index.test.js +0 -185
  52. package/dist/cjs/index.test.js.map +0 -1
  53. package/dist/cjs/introspectV3.d.ts +0 -45
  54. package/dist/cjs/introspectV3.d.ts.map +0 -1
  55. package/dist/cjs/introspectV3.js +0 -99
  56. package/dist/cjs/introspectV3.js.map +0 -1
  57. package/dist/cjs/multidb.spec.d.ts +0 -2
  58. package/dist/cjs/multidb.spec.d.ts.map +0 -1
  59. package/dist/cjs/multidb.spec.js +0 -76
  60. package/dist/cjs/multidb.spec.js.map +0 -1
  61. package/dist/cjs/package.json +0 -1
  62. package/dist/cjs/schema/types.d.ts +0 -73
  63. package/dist/cjs/schema/types.d.ts.map +0 -1
  64. package/dist/cjs/schema/types.js +0 -3
  65. package/dist/cjs/schema/types.js.map +0 -1
  66. package/dist/cjs/tenant-isolation.spec.d.ts +0 -2
  67. package/dist/cjs/tenant-isolation.spec.d.ts.map +0 -1
  68. package/dist/cjs/tenant-isolation.spec.js +0 -420
  69. package/dist/cjs/tenant-isolation.spec.js.map +0 -1
  70. package/dist/cjs/utils/clickhouse.d.ts +0 -9
  71. package/dist/cjs/utils/clickhouse.d.ts.map +0 -1
  72. package/dist/cjs/utils/clickhouse.js +0 -99
  73. package/dist/cjs/utils/clickhouse.js.map +0 -1
  74. package/dist/esm/adapters/clickhouse.d.ts +0 -48
  75. package/dist/esm/adapters/clickhouse.d.ts.map +0 -1
  76. package/dist/esm/adapters/clickhouse.js +0 -280
  77. package/dist/esm/adapters/clickhouse.js.map +0 -1
  78. package/dist/esm/adapters/introspection.spec.d.ts +0 -2
  79. package/dist/esm/adapters/introspection.spec.d.ts.map +0 -1
  80. package/dist/esm/adapters/introspection.spec.js +0 -190
  81. package/dist/esm/adapters/introspection.spec.js.map +0 -1
  82. package/dist/esm/adapters/postgres.d.ts +0 -46
  83. package/dist/esm/adapters/postgres.d.ts.map +0 -1
  84. package/dist/esm/adapters/postgres.js +0 -453
  85. package/dist/esm/adapters/postgres.js.map +0 -1
  86. package/dist/esm/adapters/postgres.spec.d.ts +0 -2
  87. package/dist/esm/adapters/postgres.spec.d.ts.map +0 -1
  88. package/dist/esm/adapters/postgres.spec.js +0 -35
  89. package/dist/esm/adapters/postgres.spec.js.map +0 -1
  90. package/dist/esm/adapters/types.d.ts +0 -38
  91. package/dist/esm/adapters/types.d.ts.map +0 -1
  92. package/dist/esm/adapters/types.js +0 -2
  93. package/dist/esm/adapters/types.js.map +0 -1
  94. package/dist/esm/anonymize.spec.d.ts +0 -2
  95. package/dist/esm/anonymize.spec.d.ts.map +0 -1
  96. package/dist/esm/anonymize.spec.js +0 -76
  97. package/dist/esm/anonymize.spec.js.map +0 -1
  98. package/dist/esm/clickhouseClient.spec.d.ts +0 -2
  99. package/dist/esm/clickhouseClient.spec.d.ts.map +0 -1
  100. package/dist/esm/clickhouseClient.spec.js +0 -281
  101. package/dist/esm/clickhouseClient.spec.js.map +0 -1
  102. package/dist/esm/connectors/base.d.ts +0 -14
  103. package/dist/esm/connectors/base.d.ts.map +0 -1
  104. package/dist/esm/connectors/base.js +0 -2
  105. package/dist/esm/connectors/base.js.map +0 -1
  106. package/dist/esm/connectors/clickhouse.d.ts +0 -35
  107. package/dist/esm/connectors/clickhouse.d.ts.map +0 -1
  108. package/dist/esm/connectors/clickhouse.js +0 -288
  109. package/dist/esm/connectors/clickhouse.js.map +0 -1
  110. package/dist/esm/index.d.ts +0 -498
  111. package/dist/esm/index.d.ts.map +0 -1
  112. package/dist/esm/index.js +0 -844
  113. package/dist/esm/index.js.map +0 -1
  114. package/dist/esm/index.test.d.ts +0 -2
  115. package/dist/esm/index.test.d.ts.map +0 -1
  116. package/dist/esm/index.test.js +0 -183
  117. package/dist/esm/index.test.js.map +0 -1
  118. package/dist/esm/introspectV3.d.ts +0 -45
  119. package/dist/esm/introspectV3.d.ts.map +0 -1
  120. package/dist/esm/introspectV3.js +0 -96
  121. package/dist/esm/introspectV3.js.map +0 -1
  122. package/dist/esm/multidb.spec.d.ts +0 -2
  123. package/dist/esm/multidb.spec.d.ts.map +0 -1
  124. package/dist/esm/multidb.spec.js +0 -74
  125. package/dist/esm/multidb.spec.js.map +0 -1
  126. package/dist/esm/schema/types.d.ts +0 -73
  127. package/dist/esm/schema/types.d.ts.map +0 -1
  128. package/dist/esm/schema/types.js +0 -2
  129. package/dist/esm/schema/types.js.map +0 -1
  130. package/dist/esm/tenant-isolation.spec.d.ts +0 -2
  131. package/dist/esm/tenant-isolation.spec.d.ts.map +0 -1
  132. package/dist/esm/tenant-isolation.spec.js +0 -418
  133. package/dist/esm/tenant-isolation.spec.js.map +0 -1
  134. package/dist/esm/utils/clickhouse.d.ts +0 -9
  135. package/dist/esm/utils/clickhouse.d.ts.map +0 -1
  136. package/dist/esm/utils/clickhouse.js +0 -92
  137. package/dist/esm/utils/clickhouse.js.map +0 -1
@@ -1,457 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PostgresAdapter = void 0;
4
- class PostgresAdapter {
5
- constructor(clientFn, options = {}) {
6
- this.clientFn = clientFn;
7
- this.databaseName = options.database ?? "postgres";
8
- this.defaultSchema = options.defaultSchema ?? "public";
9
- this.kind = options.kind ?? "postgres";
10
- if (options.allowedTables) {
11
- this.allowedTables = normalizeTableFilter(options.allowedTables, this.defaultSchema);
12
- }
13
- }
14
- async execute(sql, params) {
15
- // Validate query against allowed tables if restrictions are in place
16
- if (this.allowedTables) {
17
- this.validateQueryTables(sql);
18
- }
19
- // Convert named params to positional array for PostgreSQL
20
- let paramArray;
21
- if (params) {
22
- paramArray = this.convertNamedToPositionalParams(params);
23
- }
24
- const result = await this.clientFn(sql, paramArray);
25
- const fields = result.fields.map((f) => f.name);
26
- return { fields, rows: result.rows };
27
- }
28
- /**
29
- * Validate that the SQL query only references allowed tables.
30
- * This is a basic validation that extracts table-like patterns from the query.
31
- */
32
- validateQueryTables(sql) {
33
- if (!this.allowedTables || this.allowedTables.length === 0) {
34
- return;
35
- }
36
- const allowedSet = new Set(this.allowedTables.map((t) => tableKey(t.schema, t.table)));
37
- // Extract potential table references from SQL
38
- // This regex looks for identifiers after FROM/JOIN keywords
39
- const tablePattern = /(?:FROM|JOIN)\s+(?:ONLY\s+)?(?:([a-zA-Z_][a-zA-Z0-9_]*)\.)?(["']?[a-zA-Z_][a-zA-Z0-9_]*["']?)/gi;
40
- const matches = sql.matchAll(tablePattern);
41
- for (const match of matches) {
42
- const schema = match[1] ?? this.defaultSchema;
43
- const table = match[2]?.replace(/['"]/g, "");
44
- if (table) {
45
- const key = tableKey(schema, table);
46
- if (!allowedSet.has(key)) {
47
- throw new Error(`Query references table "${schema}.${table}" which is not in the allowed tables list`);
48
- }
49
- }
50
- }
51
- }
52
- /**
53
- * Convert named params to positional array for PostgreSQL
54
- * PostgreSQL expects $1, $2, $3 in SQL and an array of values [val1, val2, val3]
55
- * The LLM should generate params like: { '1': 'value1', '2': 'value2' }
56
- */
57
- convertNamedToPositionalParams(params) {
58
- // Extract numeric keys and sort them
59
- const keys = Object.keys(params)
60
- .filter((k) => /^\d+$/.test(k))
61
- .map((k) => Number.parseInt(k, 10))
62
- .sort((a, b) => a - b);
63
- // Build positional array, resolving placeholder tokens like `<tenant_id>`
64
- // to their corresponding named values when present in `params`.
65
- const positionalParams = [];
66
- for (const key of keys) {
67
- let val = params[String(key)];
68
- if (typeof val === "string") {
69
- const match = val.match(/^<([a-zA-Z0-9_]+)>$/);
70
- if (match && match[1]) {
71
- const namedKey = match[1];
72
- if (namedKey in params) {
73
- // params is a Record<string, ...>, indexing by namedKey is safe
74
- val = params[namedKey];
75
- }
76
- }
77
- }
78
- positionalParams.push(val);
79
- }
80
- return positionalParams;
81
- }
82
- async validate(sql, params) {
83
- // Convert named params to positional array for PostgreSQL
84
- let paramArray;
85
- if (params) {
86
- paramArray = this.convertNamedToPositionalParams(params);
87
- }
88
- await this.clientFn(`EXPLAIN ${sql}`, paramArray);
89
- }
90
- getDialect() {
91
- return "postgres";
92
- }
93
- async introspect(options) {
94
- // Use adapter-level allowedTables if no specific tables provided in options
95
- const tablesToIntrospect = options?.tables
96
- ? normalizeTableFilter(options.tables, this.defaultSchema)
97
- : this.allowedTables;
98
- const normalizedTables = tablesToIntrospect ?? [];
99
- const tablesResult = await this.clientFn(buildTablesQuery(normalizedTables));
100
- const tableRows = tablesResult.rows;
101
- const columnsResult = await this.clientFn(buildColumnsQuery(normalizedTables));
102
- const columnRows = columnsResult.rows;
103
- const constraintsResult = await this.clientFn(buildConstraintsQuery(normalizedTables));
104
- const constraintRows = constraintsResult.rows;
105
- const indexesResult = await this.clientFn(buildIndexesQuery(normalizedTables));
106
- const indexRows = indexesResult.rows;
107
- const tablesByKey = new Map();
108
- const columnsByKey = new Map();
109
- for (const row of tableRows) {
110
- const key = tableKey(row.schema_name, row.table_name);
111
- const statistics = buildTableStatistics(toNumber(row.total_rows), toNumber(row.total_bytes));
112
- const table = {
113
- name: row.table_name,
114
- schema: row.schema_name,
115
- type: asTableType(row.table_type),
116
- columns: [],
117
- indexes: [],
118
- constraints: [],
119
- };
120
- const comment = sanitize(row.comment);
121
- if (comment !== undefined) {
122
- table.comment = comment;
123
- }
124
- if (statistics) {
125
- table.statistics = statistics;
126
- }
127
- tablesByKey.set(key, table);
128
- columnsByKey.set(key, new Map());
129
- }
130
- for (const row of columnRows) {
131
- const key = tableKey(row.table_schema, row.table_name);
132
- const table = tablesByKey.get(key);
133
- if (!table)
134
- continue;
135
- const column = {
136
- name: row.column_name,
137
- type: row.data_type,
138
- nullable: row.is_nullable.toUpperCase() === "YES",
139
- isPrimaryKey: false,
140
- isForeignKey: false,
141
- };
142
- const rawType = row.udt_name ?? undefined;
143
- if (rawType !== undefined)
144
- column.rawType = rawType;
145
- const defaultExpression = sanitize(row.column_default);
146
- if (defaultExpression !== undefined)
147
- column.defaultExpression = defaultExpression;
148
- const comment = sanitize(row.description);
149
- if (comment !== undefined)
150
- column.comment = comment;
151
- const maxLength = row.character_maximum_length ?? undefined;
152
- if (maxLength !== undefined)
153
- column.maxLength = maxLength;
154
- const precision = row.numeric_precision ?? undefined;
155
- if (precision !== undefined)
156
- column.precision = precision;
157
- const scale = row.numeric_scale ?? undefined;
158
- if (scale !== undefined)
159
- column.scale = scale;
160
- table.columns.push(column);
161
- columnsByKey.get(key)?.set(row.column_name, column);
162
- }
163
- const constraintGroups = groupConstraints(constraintRows);
164
- for (const group of constraintGroups) {
165
- const key = tableKey(group.table_schema, group.table_name);
166
- const table = tablesByKey.get(key);
167
- if (!table)
168
- continue;
169
- const constraint = {
170
- name: group.constraint_name,
171
- type: group.constraint_type,
172
- columns: [...group.columns],
173
- };
174
- if (group.type === "FOREIGN KEY") {
175
- if (group.foreign_table_name) {
176
- const referencedTable = group.foreign_table_schema
177
- ? `${group.foreign_table_schema}.${group.foreign_table_name}`
178
- : group.foreign_table_name;
179
- constraint.referencedTable = referencedTable;
180
- }
181
- if (group.foreign_columns.length) {
182
- constraint.referencedColumns = [...group.foreign_columns];
183
- }
184
- }
185
- table.constraints.push(constraint);
186
- for (let index = 0; index < group.columns.length; index += 1) {
187
- const columnName = group.columns[index];
188
- if (!columnName)
189
- continue;
190
- const column = columnsByKey.get(key)?.get(columnName);
191
- if (!column)
192
- continue;
193
- if (group.type === "PRIMARY KEY") {
194
- column.isPrimaryKey = true;
195
- }
196
- if (group.type === "FOREIGN KEY") {
197
- column.isForeignKey = true;
198
- if (group.foreign_table_name) {
199
- column.foreignKeyTable = group.foreign_table_schema
200
- ? `${group.foreign_table_schema}.${group.foreign_table_name}`
201
- : group.foreign_table_name;
202
- }
203
- const referencedColumn = group.foreign_columns[index];
204
- if (referencedColumn) {
205
- column.foreignKeyColumn = referencedColumn;
206
- }
207
- }
208
- }
209
- }
210
- for (const row of indexRows) {
211
- const key = tableKey(row.schema_name, row.table_name);
212
- const table = tablesByKey.get(key);
213
- if (!table)
214
- continue;
215
- const columns = coerceStringArray(row.column_names)
216
- .map((c) => c.trim())
217
- .filter(Boolean);
218
- const index = {
219
- name: row.index_name,
220
- columns,
221
- unique: Boolean(row.indisunique),
222
- type: columns.length === 1 ? "INDEX" : "COMPOSITE INDEX",
223
- };
224
- const definition = sanitize(row.definition);
225
- if (definition !== undefined)
226
- index.definition = definition;
227
- table.indexes.push(index);
228
- }
229
- const tables = Array.from(tablesByKey.values()).sort((a, b) => {
230
- if (a.schema === b.schema) {
231
- return a.name.localeCompare(b.name);
232
- }
233
- return a.schema.localeCompare(b.schema);
234
- });
235
- return {
236
- db: {
237
- kind: this.kind,
238
- name: this.databaseName,
239
- },
240
- tables,
241
- introspectedAt: new Date().toISOString(),
242
- };
243
- }
244
- }
245
- exports.PostgresAdapter = PostgresAdapter;
246
- function groupConstraints(rows) {
247
- const groups = new Map();
248
- for (const row of rows) {
249
- const key = `${row.table_schema}.${row.table_name}.${row.constraint_name}`;
250
- let group = groups.get(key);
251
- if (!group) {
252
- group = {
253
- table_schema: row.table_schema,
254
- table_name: row.table_name,
255
- constraint_name: row.constraint_name,
256
- constraint_type: row.constraint_type,
257
- columns: [],
258
- foreign_columns: [],
259
- type: row.constraint_type,
260
- };
261
- groups.set(key, group);
262
- }
263
- if (row.column_name) {
264
- group.columns.push(row.column_name);
265
- }
266
- if (row.constraint_type === "FOREIGN KEY") {
267
- group.foreign_table_schema = row.foreign_table_schema;
268
- group.foreign_table_name = row.foreign_table_name;
269
- if (row.foreign_column_name) {
270
- group.foreign_columns.push(row.foreign_column_name);
271
- }
272
- }
273
- }
274
- return Array.from(groups.values());
275
- }
276
- function normalizeTableFilter(tables, defaultSchema) {
277
- if (!tables?.length)
278
- return [];
279
- const normalized = [];
280
- const seen = new Set();
281
- for (const raw of tables) {
282
- if (!raw)
283
- continue;
284
- const trimmed = raw.trim();
285
- if (!trimmed)
286
- continue;
287
- const parts = trimmed.split(".");
288
- const table = parts.pop() ?? "";
289
- const schema = parts.pop() ?? defaultSchema;
290
- if (!isSafeIdentifier(schema) || !isSafeIdentifier(table)) {
291
- continue;
292
- }
293
- const key = tableKey(schema, table);
294
- if (seen.has(key))
295
- continue;
296
- seen.add(key);
297
- normalized.push({ schema, table });
298
- }
299
- return normalized;
300
- }
301
- function buildTablesQuery(tables) {
302
- const filter = buildFilterClause(tables, "n.nspname", "c.relname");
303
- return `SELECT
304
- c.relname AS table_name,
305
- n.nspname AS schema_name,
306
- CASE c.relkind
307
- WHEN 'r' THEN 'table'
308
- WHEN 'v' THEN 'view'
309
- WHEN 'm' THEN 'materialized_view'
310
- ELSE c.relkind::text
311
- END AS table_type,
312
- obj_description(c.oid) AS comment,
313
- c.reltuples AS total_rows,
314
- pg_total_relation_size(c.oid) AS total_bytes
315
- FROM pg_class c
316
- JOIN pg_namespace n ON n.oid = c.relnamespace
317
- WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
318
- AND c.relkind IN ('r', 'v', 'm')
319
- ${filter}
320
- ORDER BY n.nspname, c.relname;`;
321
- }
322
- function buildColumnsQuery(tables) {
323
- const filter = buildFilterClause(tables, "cols.table_schema", "cols.table_name");
324
- return `SELECT
325
- cols.table_name,
326
- cols.table_schema,
327
- cols.column_name,
328
- cols.data_type,
329
- cols.udt_name,
330
- cols.is_nullable,
331
- cols.column_default,
332
- cols.character_maximum_length,
333
- cols.numeric_precision,
334
- cols.numeric_scale,
335
- cols.ordinal_position,
336
- pgd.description
337
- FROM information_schema.columns cols
338
- LEFT JOIN pg_catalog.pg_class c
339
- ON c.relname = cols.table_name
340
- AND c.relkind IN ('r', 'v', 'm')
341
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
342
- LEFT JOIN pg_catalog.pg_attribute attr
343
- ON attr.attrelid = c.oid
344
- AND attr.attname = cols.column_name
345
- LEFT JOIN pg_catalog.pg_description pgd
346
- ON pgd.objoid = attr.attrelid AND pgd.objsubid = attr.attnum
347
- WHERE cols.table_schema NOT IN ('pg_catalog', 'information_schema')
348
- ${filter}
349
- ORDER BY cols.table_schema, cols.table_name, cols.ordinal_position;`;
350
- }
351
- function buildConstraintsQuery(tables) {
352
- const filter = buildFilterClause(tables, "tc.table_schema", "tc.table_name");
353
- return `SELECT
354
- tc.table_schema,
355
- tc.table_name,
356
- tc.constraint_name,
357
- tc.constraint_type,
358
- kcu.column_name,
359
- ccu.table_schema AS foreign_table_schema,
360
- ccu.table_name AS foreign_table_name,
361
- ccu.column_name AS foreign_column_name
362
- FROM information_schema.table_constraints tc
363
- LEFT JOIN information_schema.key_column_usage kcu
364
- ON tc.constraint_name = kcu.constraint_name
365
- AND tc.table_schema = kcu.table_schema
366
- LEFT JOIN information_schema.constraint_column_usage ccu
367
- ON ccu.constraint_name = tc.constraint_name
368
- AND ccu.table_schema = tc.table_schema
369
- WHERE tc.constraint_type IN ('PRIMARY KEY', 'UNIQUE', 'FOREIGN KEY')
370
- AND tc.table_schema NOT IN ('pg_catalog', 'information_schema')
371
- ${filter}
372
- ORDER BY tc.table_schema, tc.table_name, tc.constraint_name, kcu.ordinal_position;`;
373
- }
374
- function buildIndexesQuery(tables) {
375
- const filter = buildFilterClause(tables, "n.nspname", "c.relname");
376
- return `SELECT
377
- n.nspname AS schema_name,
378
- c.relname AS table_name,
379
- ci.relname AS index_name,
380
- idx.indisunique,
381
- array_remove(
382
- array_agg(pg_get_indexdef(idx.indexrelid, g.k, true) ORDER BY g.k),
383
- NULL
384
- ) AS column_names,
385
- pg_get_indexdef(idx.indexrelid) AS definition
386
- FROM pg_class c
387
- JOIN pg_namespace n ON n.oid = c.relnamespace
388
- JOIN pg_index idx ON idx.indrelid = c.oid
389
- JOIN pg_class ci ON ci.oid = idx.indexrelid
390
- JOIN LATERAL generate_subscripts(idx.indkey, 1) AS g(k) ON true
391
- WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
392
- ${filter}
393
- GROUP BY n.nspname, c.relname, ci.relname, idx.indisunique, idx.indexrelid;`;
394
- }
395
- function buildFilterClause(tables, schemaExpr, tableExpr) {
396
- if (!tables.length)
397
- return "";
398
- const clauses = tables.map(({ schema, table }) => {
399
- return `(${schemaExpr} = '${schema}' AND ${tableExpr} = '${table}')`;
400
- });
401
- return `AND (${clauses.join(" OR ")})`;
402
- }
403
- function tableKey(schema, table) {
404
- return `${schema}.${table}`;
405
- }
406
- function isSafeIdentifier(value) {
407
- return /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);
408
- }
409
- function asTableType(value) {
410
- const normalized = value.toLowerCase();
411
- if (normalized.includes("view")) {
412
- return normalized.includes("materialized") ? "materialized_view" : "view";
413
- }
414
- return "table";
415
- }
416
- function buildTableStatistics(totalRows, totalBytes) {
417
- if (totalRows === undefined && totalBytes === undefined)
418
- return undefined;
419
- const stats = {};
420
- if (totalRows !== undefined)
421
- stats.totalRows = totalRows;
422
- if (totalBytes !== undefined)
423
- stats.totalBytes = totalBytes;
424
- return stats;
425
- }
426
- function sanitize(value) {
427
- if (value === null || value === undefined)
428
- return undefined;
429
- const trimmed = String(value).trim();
430
- return trimmed.length ? trimmed : undefined;
431
- }
432
- function toNumber(value) {
433
- if (value === null || value === undefined)
434
- return undefined;
435
- if (typeof value === "number")
436
- return value;
437
- const parsed = Number.parseFloat(String(value));
438
- return Number.isNaN(parsed) ? undefined : parsed;
439
- }
440
- function coerceStringArray(value) {
441
- if (!value)
442
- return [];
443
- if (Array.isArray(value)) {
444
- return value.map((entry) => String(entry));
445
- }
446
- const text = String(value).trim();
447
- if (!text)
448
- return [];
449
- const withoutBraces = text.startsWith("{") && text.endsWith("}") ? text.slice(1, -1) : text;
450
- if (!withoutBraces)
451
- return [];
452
- return withoutBraces
453
- .split(",")
454
- .map((part) => part.trim().replace(/^"(.+)"$/, "$1"))
455
- .filter(Boolean);
456
- }
457
- //# sourceMappingURL=postgres.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/adapters/postgres.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=postgres.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres.spec.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres.spec.ts"],"names":[],"mappings":""}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const postgres_js_1 = require("./postgres.js");
5
- // Minimal client function that records the received params
6
- const makeRecordingClient = () => {
7
- let lastSql = null;
8
- let lastParams;
9
- const clientFn = async (sql, params) => {
10
- lastSql = sql;
11
- lastParams = params;
12
- return { rows: [], fields: [] };
13
- };
14
- return { clientFn, getLast: () => ({ lastSql, lastParams }) };
15
- };
16
- (0, vitest_1.describe)("PostgresAdapter.convertNamedToPositionalParams", () => {
17
- (0, vitest_1.it)("resolves numeric positions and placeholder named params", async () => {
18
- const { clientFn, getLast } = makeRecordingClient();
19
- const adapter = new postgres_js_1.PostgresAdapter(clientFn);
20
- const sql = "SELECT * FROM table WHERE tenant_id = $1 AND id = $2";
21
- const params = { "1": "<tenant_id>", tenant_id: "abc-123", "2": 42 };
22
- await adapter.execute(sql, params);
23
- const { lastParams } = getLast();
24
- (0, vitest_1.expect)(lastParams).toBeDefined();
25
- (0, vitest_1.expect)(lastParams).toEqual(["abc-123", 42]);
26
- });
27
- (0, vitest_1.it)("keeps literal values when placeholders are absent", async () => {
28
- const { clientFn, getLast } = makeRecordingClient();
29
- const adapter = new postgres_js_1.PostgresAdapter(clientFn);
30
- const sql = "SELECT * FROM table WHERE a = $1 AND b = $2";
31
- const params = { "1": "literal", "2": "other" };
32
- await adapter.execute(sql, params);
33
- const { lastParams } = getLast();
34
- (0, vitest_1.expect)(lastParams).toEqual(["literal", "other"]);
35
- });
36
- });
37
- //# sourceMappingURL=postgres.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres.spec.js","sourceRoot":"","sources":["../../../src/adapters/postgres.spec.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,+CAAgD;AAEhD,2DAA2D;AAC3D,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,UAAiC,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,MAAkB,EAAE,EAAE;QACzD,OAAO,GAAG,GAAG,CAAC;QACd,UAAU,GAAG,MAAM,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,IAAA,iBAAQ,EAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,IAAA,WAAE,EAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,6BAAe,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,sDAAsD,CAAC;QACnE,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAErE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEnC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;QACjC,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,6BAAe,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAG,6CAA6C,CAAC;QAC1D,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAEhD,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEnC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;QACjC,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { IntrospectOptions, SchemaIntrospection } from "../schema/types.js";
2
- export type DatabaseDialect = "clickhouse" | "postgres" | "mysql";
3
- export interface DatabaseExecutionResult {
4
- fields: string[];
5
- rows: Array<Record<string, unknown>>;
6
- }
7
- /**
8
- * Database adapter interface for abstracting database-specific operations.
9
- * Allows the SDK to work with multiple database types.
10
- */
11
- export interface DatabaseAdapter {
12
- /**
13
- * Execute a SQL query and return results
14
- * @param sql - The SQL query to execute
15
- * @param params - Optional query parameters for parameterized queries
16
- */
17
- execute(sql: string, params?: Record<string, string | number | boolean | string[] | number[]>): Promise<DatabaseExecutionResult>;
18
- /**
19
- * Validate SQL query (e.g., using EXPLAIN)
20
- * Throws an error if the SQL is invalid
21
- * @param sql - The SQL query to validate
22
- * @param params - Optional query parameters for parameterized queries
23
- */
24
- validate(sql: string, params?: Record<string, string | number | boolean | string[] | number[]>): Promise<void>;
25
- /**
26
- * Introspect database schema metadata
27
- */
28
- introspect(options?: IntrospectOptions): Promise<SchemaIntrospection>;
29
- /**
30
- * Get the database dialect/type
31
- */
32
- getDialect(): DatabaseDialect;
33
- /**
34
- * Optional: Close/cleanup database connection
35
- */
36
- close?(): Promise<void>;
37
- }
38
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,CACL,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,IAAI,eAAe,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=anonymize.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anonymize.spec.d.ts","sourceRoot":"","sources":["../../src/anonymize.spec.ts"],"names":[],"mappings":""}
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const index_js_1 = require("./index.js");
5
- (0, vitest_1.describe)("anonymizeResults", () => {
6
- (0, vitest_1.it)("anonymizes numeric values", () => {
7
- const input = [
8
- { year: 2025, transactionSum: 1000 },
9
- { year: 2024, transactionSum: 2000 },
10
- ];
11
- const result = (0, index_js_1.anonymizeResults)(input);
12
- (0, vitest_1.expect)(result).toEqual([
13
- { year: "number", transactionSum: "number" },
14
- { year: "number", transactionSum: "number" },
15
- ]);
16
- });
17
- (0, vitest_1.it)("anonymizes mixed types", () => {
18
- const input = [
19
- {
20
- id: 1,
21
- name: "John Doe",
22
- active: true,
23
- score: 95.5,
24
- metadata: null,
25
- tags: ["admin", "user"],
26
- },
27
- ];
28
- const result = (0, index_js_1.anonymizeResults)(input);
29
- (0, vitest_1.expect)(result).toEqual([
30
- {
31
- id: "number",
32
- name: "string",
33
- active: "boolean",
34
- score: "number",
35
- metadata: "null",
36
- tags: "array",
37
- },
38
- ]);
39
- });
40
- (0, vitest_1.it)("handles empty arrays", () => {
41
- const result = (0, index_js_1.anonymizeResults)([]);
42
- (0, vitest_1.expect)(result).toEqual([]);
43
- });
44
- (0, vitest_1.it)("handles objects with nested structures", () => {
45
- const input = [
46
- {
47
- user: { name: "Alice" },
48
- count: 42,
49
- },
50
- ];
51
- const result = (0, index_js_1.anonymizeResults)(input);
52
- (0, vitest_1.expect)(result).toEqual([
53
- {
54
- user: "object",
55
- count: "number",
56
- },
57
- ]);
58
- });
59
- (0, vitest_1.it)("preserves column structure across multiple rows", () => {
60
- const input = [
61
- { col1: "value1", col2: 100, col3: true },
62
- { col1: "value2", col2: 200, col3: false },
63
- { col1: "value3", col2: 300, col3: true },
64
- ];
65
- const result = (0, index_js_1.anonymizeResults)(input);
66
- (0, vitest_1.expect)(result).toEqual([
67
- { col1: "string", col2: "number", col3: "boolean" },
68
- { col1: "string", col2: "number", col3: "boolean" },
69
- { col1: "string", col2: "number", col3: "boolean" },
70
- ]);
71
- });
72
- (0, vitest_1.it)("handles undefined values", () => {
73
- const input = [{ defined: 123, undefined: undefined }];
74
- const result = (0, index_js_1.anonymizeResults)(input);
75
- (0, vitest_1.expect)(result).toEqual([{ defined: "number", undefined: "undefined" }]);
76
- });
77
- });
78
- //# sourceMappingURL=anonymize.spec.js.map