datapeek 0.1.11 → 0.1.13

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 (97) hide show
  1. package/README.md +38 -9
  2. package/dist/cli/chunk-2I4MNNVK.js +628 -0
  3. package/dist/cli/chunk-4GDQ7VJZ.js +662 -0
  4. package/dist/cli/chunk-4MIQHH6K.js +47 -0
  5. package/dist/cli/chunk-6K3WSEIM.js +375 -0
  6. package/dist/cli/chunk-6PMCDR7J.js +628 -0
  7. package/dist/cli/chunk-B7K46745.js +605 -0
  8. package/dist/cli/chunk-CK2O76SG.js +713 -0
  9. package/dist/cli/chunk-FXOMCTFV.js +696 -0
  10. package/dist/cli/chunk-G4ID5SFT.js +628 -0
  11. package/dist/cli/chunk-GCVFEHSZ.js +708 -0
  12. package/dist/cli/chunk-LGE2JQ3S.js +628 -0
  13. package/dist/cli/chunk-NDLKLB5A.js +710 -0
  14. package/dist/cli/chunk-PG6I26XT.js +614 -0
  15. package/dist/cli/chunk-RK2Q2AX5.js +582 -0
  16. package/dist/cli/chunk-S5LRCCK6.js +582 -0
  17. package/dist/cli/chunk-UBFQXPPF.js +701 -0
  18. package/dist/cli/chunk-X2DQBOP6.js +712 -0
  19. package/dist/cli/chunk-XRMPVZIS.js +709 -0
  20. package/dist/cli/chunk-Z5G3UEXN.js +711 -0
  21. package/dist/cli/chunk-ZMP7S3G6.js +696 -0
  22. package/dist/cli/db-32TDDTFP.js +28 -0
  23. package/dist/cli/db-47O74DN5.js +34 -0
  24. package/dist/cli/db-4U22OWGB.js +29 -0
  25. package/dist/cli/db-CL72XDNO.js +34 -0
  26. package/dist/cli/db-CZCZOEID.js +28 -0
  27. package/dist/cli/db-IX3DXZ2C.js +34 -0
  28. package/dist/cli/db-LJCRTZTY.js +34 -0
  29. package/dist/cli/db-LNX4UMRF.js +28 -0
  30. package/dist/cli/db-NESFXDWL.js +28 -0
  31. package/dist/cli/db-OIJ2PJK6.js +34 -0
  32. package/dist/cli/db-OPAF6ZO3.js +28 -0
  33. package/dist/cli/db-PQURQHSK.js +28 -0
  34. package/dist/cli/db-QN5MTDYB.js +28 -0
  35. package/dist/cli/db-RBMUR3OK.js +34 -0
  36. package/dist/cli/db-REMUYLPP.js +34 -0
  37. package/dist/cli/db-RTHQ4ZAU.js +28 -0
  38. package/dist/cli/db-SHFLGGWD.js +28 -0
  39. package/dist/cli/db-ULMGZXQ5.js +34 -0
  40. package/dist/cli/db-YOGJ4LXE.js +28 -0
  41. package/dist/cli/dev.js +449 -374
  42. package/dist/cli/index.js +452 -376
  43. package/dist/cli/queryCancellation-4CMKYTFU.js +46 -0
  44. package/dist/cli/queryCancellation-E5O4FBUY.js +14 -0
  45. package/dist/client/assets/index-H7ji6dtA.js +385 -0
  46. package/dist/client/assets/index-TFw4Z1Ky.css +1 -0
  47. package/dist/client/index.html +2 -2
  48. package/dist/client/screenshots/dark1.png +0 -0
  49. package/dist/client/screenshots/dark2.png +0 -0
  50. package/dist/client/screenshots/light1.png +0 -0
  51. package/dist/client/screenshots/light2.png +0 -0
  52. package/dist/server/chunk-26GSUAI4.js +710 -0
  53. package/dist/server/chunk-36OOXHKI.js +659 -0
  54. package/dist/server/chunk-3DAIYH42.js +44 -0
  55. package/dist/server/chunk-4ELMZYWA.js +611 -0
  56. package/dist/server/chunk-5ESS5YBD.js +707 -0
  57. package/dist/server/chunk-7HIBWXBL.js +625 -0
  58. package/dist/server/chunk-BH22Q2FV.js +705 -0
  59. package/dist/server/chunk-CFU2CLKS.js +693 -0
  60. package/dist/server/chunk-CXA3HXTK.js +698 -0
  61. package/dist/server/chunk-DAUUXYQF.js +706 -0
  62. package/dist/server/chunk-FMSIEQ2T.js +579 -0
  63. package/dist/server/chunk-G6A463RM.js +625 -0
  64. package/dist/server/chunk-H6DUOXOK.js +625 -0
  65. package/dist/server/chunk-JCRZ6H7P.js +579 -0
  66. package/dist/server/chunk-L6LL3NE7.js +602 -0
  67. package/dist/server/chunk-TH6TUILG.js +709 -0
  68. package/dist/server/chunk-UJ2LRK25.js +373 -0
  69. package/dist/server/chunk-YI67PW64.js +625 -0
  70. package/dist/server/chunk-ZDZ2C5ZQ.js +693 -0
  71. package/dist/server/chunk-ZJOVVCPT.js +708 -0
  72. package/dist/server/db-22DQ6YG7.js +32 -0
  73. package/dist/server/db-3CBO6RHU.js +26 -0
  74. package/dist/server/db-3XN2KWYT.js +32 -0
  75. package/dist/server/db-3Y6K4EDP.js +26 -0
  76. package/dist/server/db-57HXNWPD.js +26 -0
  77. package/dist/server/db-5GCTDKYH.js +27 -0
  78. package/dist/server/db-5VQOTJ52.js +26 -0
  79. package/dist/server/db-B5L7VQ7E.js +32 -0
  80. package/dist/server/db-CJPCGHL3.js +32 -0
  81. package/dist/server/db-DAQ4BVCU.js +32 -0
  82. package/dist/server/db-EEA6EWHL.js +26 -0
  83. package/dist/server/db-KR7Z5M5V.js +32 -0
  84. package/dist/server/db-LMSBISDM.js +26 -0
  85. package/dist/server/db-LSOQE7N7.js +32 -0
  86. package/dist/server/db-NHBP6YLH.js +26 -0
  87. package/dist/server/db-OWVJVBBD.js +26 -0
  88. package/dist/server/db-TTVXKX7P.js +26 -0
  89. package/dist/server/db-YJ753EQV.js +26 -0
  90. package/dist/server/db-ZV6GZHFU.js +32 -0
  91. package/dist/server/dev.js +449 -374
  92. package/dist/server/index.js +449 -374
  93. package/dist/server/queryCancellation-M56DISJX.js +43 -0
  94. package/dist/server/queryCancellation-T2HSNMIV.js +12 -0
  95. package/package.json +3 -1
  96. package/dist/client/assets/index-CPoX5Biw.css +0 -1
  97. package/dist/client/assets/index-KtK9Gzwi.js +0 -375
@@ -0,0 +1,375 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {
4
+ connect,
5
+ disconnect,
6
+ executeQuery,
7
+ executeQueryMultiple,
8
+ getConnection,
9
+ parseConnectionString,
10
+ testConnection
11
+ } from "./chunk-3XB4P3G3.js";
12
+
13
+ // src/server/db/postgres.ts
14
+ import { Pool } from "pg";
15
+ var pool = null;
16
+ function parseConnectionString2(connectionString) {
17
+ const config = {
18
+ server: "",
19
+ database: "",
20
+ options: {
21
+ ssl: false
22
+ }
23
+ };
24
+ if (connectionString.startsWith("postgresql://") || connectionString.startsWith("postgres://")) {
25
+ try {
26
+ const url = new URL(connectionString);
27
+ config.server = url.hostname;
28
+ config.database = url.pathname.slice(1);
29
+ config.user = url.username || void 0;
30
+ config.password = url.password || void 0;
31
+ config.port = url.port ? parseInt(url.port, 10) : 5432;
32
+ const sslMode = url.searchParams.get("sslmode");
33
+ if (sslMode === "require" || sslMode === "prefer") {
34
+ config.options.ssl = true;
35
+ } else if (sslMode === "disable") {
36
+ config.options.ssl = false;
37
+ }
38
+ return config;
39
+ } catch (error) {
40
+ throw new Error(`Invalid PostgreSQL connection string: ${error instanceof Error ? error.message : "Unknown error"}`);
41
+ }
42
+ }
43
+ const parts = connectionString.split(";");
44
+ for (const part of parts) {
45
+ const [key, ...valueParts] = part.split("=");
46
+ const value = valueParts.join("=").trim();
47
+ const keyLower = key.trim().toLowerCase();
48
+ switch (keyLower) {
49
+ case "host":
50
+ case "server":
51
+ case "data source":
52
+ config.server = value;
53
+ break;
54
+ case "database":
55
+ case "dbname":
56
+ config.database = value;
57
+ break;
58
+ case "user id":
59
+ case "userid":
60
+ case "uid":
61
+ case "user":
62
+ config.user = value;
63
+ break;
64
+ case "password":
65
+ case "pwd":
66
+ config.password = value;
67
+ break;
68
+ case "port":
69
+ config.port = parseInt(value, 10);
70
+ break;
71
+ case "sslmode":
72
+ case "ssl mode":
73
+ if (value.toLowerCase() === "require" || value.toLowerCase() === "prefer") {
74
+ config.options.ssl = true;
75
+ } else if (value.toLowerCase() === "disable") {
76
+ config.options.ssl = false;
77
+ }
78
+ break;
79
+ }
80
+ }
81
+ return config;
82
+ }
83
+ async function testConnection2(config) {
84
+ const connectionConfig = typeof config === "string" ? parseConnectionString2(config) : config;
85
+ const testPool = new Pool({
86
+ host: connectionConfig.server,
87
+ port: connectionConfig.port || 5432,
88
+ database: connectionConfig.database,
89
+ user: connectionConfig.user,
90
+ password: connectionConfig.password,
91
+ ssl: connectionConfig.options?.ssl,
92
+ connectionTimeoutMillis: 1e4
93
+ });
94
+ try {
95
+ const client = await testPool.connect();
96
+ await client.release();
97
+ await testPool.end();
98
+ } catch (error) {
99
+ await testPool.end().catch(() => {
100
+ });
101
+ throw error;
102
+ }
103
+ }
104
+ async function connect2(config) {
105
+ await disconnect2();
106
+ const connectionConfig = typeof config === "string" ? parseConnectionString2(config) : config;
107
+ pool = new Pool({
108
+ host: connectionConfig.server,
109
+ port: connectionConfig.port || 5432,
110
+ database: connectionConfig.database,
111
+ user: connectionConfig.user,
112
+ password: connectionConfig.password,
113
+ ssl: connectionConfig.options?.ssl,
114
+ max: 10,
115
+ idleTimeoutMillis: 3e4,
116
+ connectionTimeoutMillis: 3e4,
117
+ statement_timeout: 12e4
118
+ // 2 minutes for queries
119
+ });
120
+ try {
121
+ const client = await pool.connect();
122
+ await client.release();
123
+ } catch (error) {
124
+ await pool.end().catch(() => {
125
+ });
126
+ pool = null;
127
+ throw error;
128
+ }
129
+ }
130
+ async function disconnect2() {
131
+ if (pool) {
132
+ try {
133
+ await pool.end();
134
+ } catch (error) {
135
+ }
136
+ pool = null;
137
+ }
138
+ }
139
+ function getConnection2() {
140
+ return pool;
141
+ }
142
+ function convertNamedParamsToPositional(query, parameters) {
143
+ if (!parameters || parameters.length === 0) {
144
+ return { query, values: [] };
145
+ }
146
+ const paramMap = /* @__PURE__ */ new Map();
147
+ parameters.forEach((param, index) => {
148
+ paramMap.set(param.name, { value: param.value, index: index + 1 });
149
+ });
150
+ const values = [];
151
+ let paramIndex = 1;
152
+ const convertedQuery = query.replace(/@(\w+)/g, (match, paramName) => {
153
+ const param = paramMap.get(paramName);
154
+ if (param) {
155
+ if (values[param.index - 1] === void 0) {
156
+ values[param.index - 1] = param.value;
157
+ }
158
+ return `$${param.index}`;
159
+ }
160
+ const newIndex = paramIndex++;
161
+ values[newIndex - 1] = void 0;
162
+ return `$${newIndex}`;
163
+ });
164
+ for (let i = 0; i < values.length; i++) {
165
+ if (values[i] === void 0) {
166
+ const param = parameters[i];
167
+ if (param) {
168
+ values[i] = param.value;
169
+ }
170
+ }
171
+ }
172
+ return { query: convertedQuery, values };
173
+ }
174
+ async function executeQuery2(query, parameters) {
175
+ if (!pool) {
176
+ throw new Error("Not connected to database");
177
+ }
178
+ try {
179
+ const { query: convertedQuery, values } = convertNamedParamsToPositional(query, parameters || []);
180
+ const result = await pool.query(convertedQuery, values);
181
+ return result.rows || [];
182
+ } catch (error) {
183
+ if (error.code === "ETIMEOUT" || error.code === "57014" || error.message?.includes("timeout") || error.message?.includes("canceling statement")) {
184
+ const timeoutError = new Error("Query execution timeout. The query took too long to execute. Try disabling foreign key displays or reducing the page size.");
185
+ timeoutError.code = "ETIMEOUT";
186
+ timeoutError.originalError = error;
187
+ throw timeoutError;
188
+ }
189
+ throw error;
190
+ }
191
+ }
192
+ async function executeQueryMultiple2(query, parameters) {
193
+ if (!pool) {
194
+ throw new Error("Not connected to database");
195
+ }
196
+ try {
197
+ const queries = query.split(";").map((q) => q.trim()).filter((q) => q.length > 0);
198
+ if (queries.length === 0) {
199
+ return { recordsets: [], columnMetadata: void 0 };
200
+ }
201
+ const { query: convertedQuery, values } = convertNamedParamsToPositional(queries[0], parameters || []);
202
+ const result = await pool.query(convertedQuery, values);
203
+ const recordsets = [result.rows || []];
204
+ const columnMetadata = [];
205
+ if (result.rows.length === 0 && result.fields) {
206
+ const columns = result.fields.map((field) => field.name);
207
+ if (columns.length > 0) {
208
+ columnMetadata.push({ resultSetIndex: 0, columns });
209
+ }
210
+ }
211
+ return {
212
+ recordsets,
213
+ columnMetadata: columnMetadata.length > 0 ? columnMetadata : void 0
214
+ };
215
+ } catch (error) {
216
+ if (error.code === "ETIMEOUT" || error.code === "57014" || error.message?.includes("timeout") || error.message?.includes("canceling statement")) {
217
+ const timeoutError = new Error("Query execution timeout. The query took too long to execute. Try simplifying your query or reducing the result set size.");
218
+ timeoutError.code = "ETIMEOUT";
219
+ timeoutError.originalError = error;
220
+ throw timeoutError;
221
+ }
222
+ throw error;
223
+ }
224
+ }
225
+
226
+ // src/server/db/index.ts
227
+ var currentDbType = "mssql";
228
+ function detectDbType(connectionString) {
229
+ if (!connectionString) {
230
+ return "mssql";
231
+ }
232
+ const trimmed = connectionString.trim();
233
+ if (trimmed.startsWith("postgresql://") || trimmed.startsWith("postgres://")) {
234
+ return "postgres";
235
+ }
236
+ return "mssql";
237
+ }
238
+ function getDbType() {
239
+ return currentDbType;
240
+ }
241
+ function setDbType(type) {
242
+ currentDbType = type;
243
+ }
244
+ var mssqlDialect = {
245
+ quoteId(name) {
246
+ return `[${name}]`;
247
+ },
248
+ param(index) {
249
+ return `@p${index}`;
250
+ },
251
+ limitOffset(offset, limit) {
252
+ return `OFFSET ${offset} ROWS FETCH NEXT ${limit} ROWS ONLY`;
253
+ },
254
+ topN(n) {
255
+ return `TOP ${n}`;
256
+ },
257
+ currentDbQuery() {
258
+ return `SELECT DB_NAME() as databaseName`;
259
+ },
260
+ castToDate(expr) {
261
+ return `CAST(${expr} AS DATE)`;
262
+ },
263
+ tryCastToNVarChar(expr) {
264
+ return `TRY_CAST(${expr} AS NVARCHAR(4000))`;
265
+ }
266
+ };
267
+ var postgresDialect = {
268
+ quoteId(name) {
269
+ return `"${name}"`;
270
+ },
271
+ param(index) {
272
+ return `$${index}`;
273
+ },
274
+ limitOffset(offset, limit) {
275
+ return `LIMIT ${limit} OFFSET ${offset}`;
276
+ },
277
+ topN(n) {
278
+ return "";
279
+ },
280
+ currentDbQuery() {
281
+ return `SELECT current_database() as "databaseName"`;
282
+ },
283
+ castToDate(expr) {
284
+ return `CAST(${expr} AS DATE)`;
285
+ },
286
+ tryCastToNVarChar(expr) {
287
+ return `CAST(${expr} AS TEXT)`;
288
+ }
289
+ };
290
+ function getDialect() {
291
+ return currentDbType === "postgres" ? postgresDialect : mssqlDialect;
292
+ }
293
+ async function testConnection3(config) {
294
+ if (typeof config === "string") {
295
+ const dbType = detectDbType(config);
296
+ if (dbType === "postgres") {
297
+ return testConnection2(config);
298
+ } else {
299
+ return testConnection(config);
300
+ }
301
+ } else {
302
+ if (currentDbType === "postgres") {
303
+ return testConnection2(config);
304
+ } else {
305
+ return testConnection(config);
306
+ }
307
+ }
308
+ }
309
+ async function connect3(config) {
310
+ if (typeof config === "string") {
311
+ const dbType = detectDbType(config);
312
+ setDbType(dbType);
313
+ if (dbType === "postgres") {
314
+ return connect2(config);
315
+ } else {
316
+ return connect(config);
317
+ }
318
+ } else {
319
+ if (currentDbType === "postgres") {
320
+ return connect2(config);
321
+ } else {
322
+ return connect(config);
323
+ }
324
+ }
325
+ }
326
+ async function disconnect3() {
327
+ if (currentDbType === "postgres") {
328
+ return disconnect2();
329
+ } else {
330
+ return disconnect();
331
+ }
332
+ }
333
+ function getConnection3() {
334
+ if (currentDbType === "postgres") {
335
+ return getConnection2();
336
+ } else {
337
+ return getConnection();
338
+ }
339
+ }
340
+ async function executeQuery3(query, parameters) {
341
+ if (currentDbType === "postgres") {
342
+ return executeQuery2(query, parameters);
343
+ } else {
344
+ return executeQuery(query, parameters);
345
+ }
346
+ }
347
+ async function executeQueryMultiple3(query, parameters) {
348
+ if (currentDbType === "postgres") {
349
+ return executeQueryMultiple2(query, parameters);
350
+ } else {
351
+ return executeQueryMultiple(query, parameters);
352
+ }
353
+ }
354
+ function parseConnectionString3(connectionString) {
355
+ const dbType = detectDbType(connectionString);
356
+ if (dbType === "postgres") {
357
+ return parseConnectionString2(connectionString);
358
+ } else {
359
+ return parseConnectionString(connectionString);
360
+ }
361
+ }
362
+
363
+ export {
364
+ detectDbType,
365
+ getDbType,
366
+ setDbType,
367
+ getDialect,
368
+ testConnection3 as testConnection,
369
+ connect3 as connect,
370
+ disconnect3 as disconnect,
371
+ getConnection3 as getConnection,
372
+ executeQuery3 as executeQuery,
373
+ executeQueryMultiple3 as executeQueryMultiple,
374
+ parseConnectionString3 as parseConnectionString
375
+ };