fakebase-studio 1.0.7 → 1.0.9

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.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ## What’s Fakebase?
2
2
 
3
- Fakebase is a lightweight PostgreSQL browser built for developers who want to see and manage what’s going on in their database - fast. No setup, no dashboards, no accounts. Connect to any PostgreSQL instance and instantly explore your tables, relationships, indexes, and schema structure in a clean, modern interface. And when you need to take action, Fakebase gives you the essentials: a built-in SQL editor and simple CRUD tools. Fakebase takes responsibility for being the simple tool: open it, connect, understand your database - and manage it with ease.
3
+ Fakebase is a lightweight PostgreSQL browser built for developers who want to manage their postgreSQL Database - fast. No setup, no dashboards, no accounts. Connect to any PostgreSQL instance and instantly explore your tables, relationships, indexes, and schema structure in a clean, modern interface. And when you need to take action, Fakebase gives you the essentials: a built-in SQL editor and simple CRUD tools. Fakebase takes responsibility for being the simple tool: open it, connect, understand your database - and manage it with ease.
4
4
 
5
- Fakebase focuses on clarity. It gives you a visual overview of your schema with interactive table relationships, lets you browse and edit table data in a structured grid, inspect foreign keys and indexes, and understand how everything connects. It doesn’t try to replace your infrastructure, migrate your schema, or sit between you and your database. It simply connects directly and shows you what’s there - clearly, reliably, and with just enough power to work efficiently.
5
+ Fakebase focuses on clarity. It gives you a visual overview of your schema with interactive table relationships, lets you browse and edit table data in a structured grid, inspect foreign keys and indexes, and understand how everything connects. It doesn’t try to replace your infrastructure, migrate your schema, or sit between you and your database. It simply connects directly and let you manage it - clearly, reliably, and with just enough power to work efficiently.
6
6
 
7
7
  Getting started takes one command: **npx fakebase-studio@latest**. The server starts locally and opens in your browser. Paste in your PostgreSQL connection string and start exploring. No accounts, no cloud sync, no hidden layers. Just you and your database.
8
8
 
@@ -19,11 +19,3 @@ npx fakebase-studio@latest
19
19
  ```
20
20
  postgresql://user:password@host:port/database
21
21
  ```
22
-
23
- ## Security & Privacy
24
-
25
- All data stays on your machine. Fakebase does not send telemetry or any data to our servers. Connection strings and saved queries are stored locally in `~/.fakebase-studio/` (connections and SQL in plain text). By default the server listens on localhost only; use `--host 0.0.0.0` to allow access from other devices on your network (this exposes the UI to others on that network). See [SECURITY.md](SECURITY.md) for more detail.
26
-
27
- ## License
28
-
29
- MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fakebase-studio",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "fakebase-studio": "bin/fakebase.js"
@@ -1 +1 @@
1
- {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../routes/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAS1C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAoI/D"}
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../routes/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAU1C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAqI/D"}
@@ -1,4 +1,5 @@
1
1
  import { loadConnections, saveConnection, removeConnectionById, updateConnectionName, } from "../services/connections.service.js";
2
+ import { removeQueriesByConnectionId } from "../services/queries.service.js";
2
3
  import { sendError } from "../utils/errors.js";
3
4
  export async function connectionsRoutes(fastify) {
4
5
  // Get all connections
@@ -65,6 +66,7 @@ export async function connectionsRoutes(fastify) {
65
66
  if (!wasRemoved) {
66
67
  return sendError(reply, 404, "Connection not found");
67
68
  }
69
+ await removeQueriesByConnectionId(id);
68
70
  return reply.send({ success: true });
69
71
  }
70
72
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../routes/connections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../routes/connections.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../routes/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAS/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFvE"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../routes/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAS/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkIvE"}
@@ -1,9 +1,23 @@
1
1
  import { loadQueries, saveQuery, removeQueryById, updateQueryName, } from "../services/queries.service.js";
2
2
  import { sendError } from "../utils/errors.js";
3
3
  export async function queriesRoutes(app) {
4
- app.get("/api/queries", async (_request, reply) => {
4
+ app.get("/api/queries", {
5
+ schema: {
6
+ querystring: {
7
+ type: "object",
8
+ required: ["connectionId"],
9
+ properties: {
10
+ connectionId: { type: "string" },
11
+ },
12
+ },
13
+ },
14
+ }, async (request, reply) => {
15
+ const { connectionId } = request.query;
16
+ if (!connectionId) {
17
+ return sendError(reply, 400, new Error("connectionId is required"));
18
+ }
5
19
  try {
6
- const queries = await loadQueries();
20
+ const queries = await loadQueries(connectionId);
7
21
  return reply.send({ success: true, data: queries });
8
22
  }
9
23
  catch (error) {
@@ -14,8 +28,9 @@ export async function queriesRoutes(app) {
14
28
  schema: {
15
29
  body: {
16
30
  type: "object",
17
- required: ["name", "sql"],
31
+ required: ["connectionId", "name", "sql"],
18
32
  properties: {
33
+ connectionId: { type: "string" },
19
34
  id: { type: "string" },
20
35
  name: { type: "string" },
21
36
  sql: { type: "string" },
@@ -23,9 +38,12 @@ export async function queriesRoutes(app) {
23
38
  },
24
39
  },
25
40
  }, async (request, reply) => {
26
- const { id = null, name, sql } = request.body;
41
+ const { connectionId, id = null, name, sql } = request.body;
42
+ if (!connectionId) {
43
+ return sendError(reply, 400, new Error("connectionId is required"));
44
+ }
27
45
  try {
28
- const query = await saveQuery(id, name, sql);
46
+ const query = await saveQuery(connectionId, id, name, sql);
29
47
  return reply.send({ success: true, data: query });
30
48
  }
31
49
  catch (error) {
@@ -39,11 +57,22 @@ export async function queriesRoutes(app) {
39
57
  required: ["id"],
40
58
  properties: { id: { type: "string" } },
41
59
  },
60
+ querystring: {
61
+ type: "object",
62
+ required: ["connectionId"],
63
+ properties: {
64
+ connectionId: { type: "string" },
65
+ },
66
+ },
42
67
  },
43
68
  }, async (request, reply) => {
44
69
  const { id } = request.params;
70
+ const { connectionId } = request.query;
71
+ if (!connectionId) {
72
+ return sendError(reply, 400, new Error("connectionId is required"));
73
+ }
45
74
  try {
46
- const removed = await removeQueryById(id);
75
+ const removed = await removeQueryById(connectionId, id);
47
76
  if (!removed)
48
77
  return sendError(reply, 404, new Error("Query not found"));
49
78
  return reply.send({ success: true });
@@ -56,17 +85,21 @@ export async function queriesRoutes(app) {
56
85
  schema: {
57
86
  body: {
58
87
  type: "object",
59
- required: ["id", "name"],
88
+ required: ["connectionId", "id", "name"],
60
89
  properties: {
90
+ connectionId: { type: "string" },
61
91
  id: { type: "string" },
62
92
  name: { type: "string" },
63
93
  },
64
94
  },
65
95
  },
66
96
  }, async (request, reply) => {
67
- const { id, name } = request.body;
97
+ const { connectionId, id, name } = request.body;
98
+ if (!connectionId) {
99
+ return sendError(reply, 400, new Error("connectionId is required"));
100
+ }
68
101
  try {
69
- const query = await updateQueryName(id, name);
102
+ const query = await updateQueryName(connectionId, id, name);
70
103
  if (!query)
71
104
  return sendError(reply, 404, new Error("Query not found"));
72
105
  return reply.send({ success: true, data: query });
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../routes/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../routes/queries.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../routes/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmC/C;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKzE"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../routes/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAyD/C;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAybzE"}
@@ -127,5 +127,217 @@ export async function tableDataRoutes(app) {
127
127
  return sendError(reply, 500, error);
128
128
  }
129
129
  });
130
+ /**
131
+ * Delete rows from a table by primary key values.
132
+ */
133
+ app.post("/api/tables/delete", {
134
+ schema: {
135
+ body: {
136
+ type: "object",
137
+ required: ["connectionString", "schema", "table", "rows"],
138
+ properties: {
139
+ connectionString: { type: "string" },
140
+ schema: { type: "string" },
141
+ table: { type: "string" },
142
+ rows: { type: "array", items: { type: "object" } },
143
+ },
144
+ },
145
+ },
146
+ }, async (request, reply) => {
147
+ const { connectionString, schema, table, rows } = request.body;
148
+ if (!connectionString) {
149
+ return sendError(reply, 400, new Error("Connection string is required"));
150
+ }
151
+ if (!schema || !SAFE_IDENTIFIER.test(schema)) {
152
+ return sendError(reply, 400, new Error("Invalid or missing schema name"));
153
+ }
154
+ if (!table || !SAFE_IDENTIFIER.test(table)) {
155
+ return sendError(reply, 400, new Error("Invalid or missing table name"));
156
+ }
157
+ if (!Array.isArray(rows) || rows.length === 0) {
158
+ return sendError(reply, 400, new Error("No rows provided for deletion"));
159
+ }
160
+ try {
161
+ const pool = getOrCreatePool(connectionString);
162
+ const pkResult = await pool.query(`SELECT kcu.column_name
163
+ FROM information_schema.table_constraints tc
164
+ JOIN information_schema.key_column_usage kcu
165
+ ON tc.constraint_name = kcu.constraint_name
166
+ AND tc.table_schema = kcu.table_schema
167
+ WHERE tc.constraint_type = 'PRIMARY KEY'
168
+ AND tc.table_schema = $1
169
+ AND tc.table_name = $2
170
+ ORDER BY kcu.ordinal_position`, [schema, table]);
171
+ const primaryKeys = pkResult.rows.map((r) => r.column_name);
172
+ if (primaryKeys.length === 0) {
173
+ return sendError(reply, 400, new Error("Table has no primary key. Cannot delete rows without a primary key."));
174
+ }
175
+ const quotedSchema = `"${schema.replace(/"/g, '""')}"`;
176
+ const quotedTable = `"${table.replace(/"/g, '""')}"`;
177
+ let totalDeleted = 0;
178
+ const client = await pool.connect();
179
+ try {
180
+ await client.query("BEGIN");
181
+ for (const row of rows) {
182
+ const whereClause = primaryKeys
183
+ .map((pk, i) => `"${pk.replace(/"/g, '""')}" = $${i + 1}`)
184
+ .join(" AND ");
185
+ const values = primaryKeys.map((pk) => row[pk]);
186
+ const sql = `DELETE FROM ${quotedSchema}.${quotedTable} WHERE ${whereClause}`;
187
+ const result = await client.query(sql, values);
188
+ totalDeleted += result.rowCount ?? 0;
189
+ }
190
+ await client.query("COMMIT");
191
+ }
192
+ catch (err) {
193
+ await client.query("ROLLBACK");
194
+ throw err;
195
+ }
196
+ finally {
197
+ client.release();
198
+ }
199
+ return sendSuccess(reply, { deletedCount: totalDeleted });
200
+ }
201
+ catch (error) {
202
+ return sendError(reply, 500, error);
203
+ }
204
+ });
205
+ /**
206
+ * Insert a single row into a table.
207
+ * Only touched fields are sent; omitted columns use their DB defaults.
208
+ */
209
+ app.post("/api/tables/insert", {
210
+ schema: {
211
+ body: {
212
+ type: "object",
213
+ required: ["connectionString", "schema", "table", "values"],
214
+ properties: {
215
+ connectionString: { type: "string" },
216
+ schema: { type: "string" },
217
+ table: { type: "string" },
218
+ values: { type: "object" },
219
+ },
220
+ },
221
+ },
222
+ }, async (request, reply) => {
223
+ const { connectionString, schema, table, values } = request.body;
224
+ if (!connectionString) {
225
+ return sendError(reply, 400, new Error("Connection string is required"));
226
+ }
227
+ if (!schema || !SAFE_IDENTIFIER.test(schema)) {
228
+ return sendError(reply, 400, new Error("Invalid or missing schema name"));
229
+ }
230
+ if (!table || !SAFE_IDENTIFIER.test(table)) {
231
+ return sendError(reply, 400, new Error("Invalid or missing table name"));
232
+ }
233
+ if (typeof values !== "object" || values === null || Array.isArray(values)) {
234
+ return sendError(reply, 400, new Error("values must be a plain object"));
235
+ }
236
+ try {
237
+ const pool = getOrCreatePool(connectionString);
238
+ const quotedSchema = `"${schema.replace(/"/g, '""')}"`;
239
+ const quotedTable = `"${table.replace(/"/g, '""')}"`;
240
+ const entries = Object.entries(values);
241
+ let sql;
242
+ let params;
243
+ if (entries.length === 0) {
244
+ sql = `INSERT INTO ${quotedSchema}.${quotedTable} DEFAULT VALUES`;
245
+ params = [];
246
+ }
247
+ else {
248
+ const columnList = entries
249
+ .map(([col]) => `"${col.replace(/"/g, '""')}"`)
250
+ .join(", ");
251
+ const placeholders = entries.map((_, i) => `$${i + 1}`).join(", ");
252
+ params = entries.map(([, v]) => v);
253
+ sql = `INSERT INTO ${quotedSchema}.${quotedTable} (${columnList}) VALUES (${placeholders})`;
254
+ }
255
+ const result = await pool.query(sql, params);
256
+ return sendSuccess(reply, { insertedCount: result.rowCount ?? 0 });
257
+ }
258
+ catch (error) {
259
+ return sendError(reply, 500, error);
260
+ }
261
+ });
262
+ /**
263
+ * Update a single row by primary key values.
264
+ * Only touched fields should be included in `values`.
265
+ */
266
+ app.post("/api/tables/update", {
267
+ schema: {
268
+ body: {
269
+ type: "object",
270
+ required: ["connectionString", "schema", "table", "pkValues", "values"],
271
+ properties: {
272
+ connectionString: { type: "string" },
273
+ schema: { type: "string" },
274
+ table: { type: "string" },
275
+ pkValues: { type: "object" },
276
+ values: { type: "object" },
277
+ },
278
+ },
279
+ },
280
+ }, async (request, reply) => {
281
+ const { connectionString, schema, table, pkValues, values } = request.body;
282
+ if (!connectionString) {
283
+ return sendError(reply, 400, new Error("Connection string is required"));
284
+ }
285
+ if (!schema || !SAFE_IDENTIFIER.test(schema)) {
286
+ return sendError(reply, 400, new Error("Invalid or missing schema name"));
287
+ }
288
+ if (!table || !SAFE_IDENTIFIER.test(table)) {
289
+ return sendError(reply, 400, new Error("Invalid or missing table name"));
290
+ }
291
+ if (typeof pkValues !== "object" ||
292
+ pkValues === null ||
293
+ Array.isArray(pkValues)) {
294
+ return sendError(reply, 400, new Error("pkValues must be a plain object"));
295
+ }
296
+ if (typeof values !== "object" || values === null || Array.isArray(values)) {
297
+ return sendError(reply, 400, new Error("values must be a plain object"));
298
+ }
299
+ const valueEntries = Object.entries(values);
300
+ if (valueEntries.length === 0) {
301
+ return sendSuccess(reply, { updatedCount: 0 });
302
+ }
303
+ try {
304
+ const pool = getOrCreatePool(connectionString);
305
+ const pkResult = await pool.query(`SELECT kcu.column_name
306
+ FROM information_schema.table_constraints tc
307
+ JOIN information_schema.key_column_usage kcu
308
+ ON tc.constraint_name = kcu.constraint_name
309
+ AND tc.table_schema = kcu.table_schema
310
+ WHERE tc.constraint_type = 'PRIMARY KEY'
311
+ AND tc.table_schema = $1
312
+ AND tc.table_name = $2
313
+ ORDER BY kcu.ordinal_position`, [schema, table]);
314
+ const primaryKeys = pkResult.rows.map((r) => r.column_name);
315
+ if (primaryKeys.length === 0) {
316
+ return sendError(reply, 400, new Error("Table has no primary key. Cannot update rows without a primary key."));
317
+ }
318
+ const missingPk = primaryKeys.find((pk) => pkValues[pk] == null);
319
+ if (missingPk) {
320
+ return sendError(reply, 400, new Error(`Missing primary key value: ${missingPk}`));
321
+ }
322
+ const quotedSchema = `"${schema.replace(/"/g, '""')}"`;
323
+ const quotedTable = `"${table.replace(/"/g, '""')}"`;
324
+ const setClause = valueEntries
325
+ .map(([col], i) => `"${col.replace(/"/g, '""')}" = $${i + 1}`)
326
+ .join(", ");
327
+ const whereClause = primaryKeys
328
+ .map((pk, i) => `"${pk.replace(/"/g, '""')}" = $${valueEntries.length + i + 1}`)
329
+ .join(" AND ");
330
+ const params = [
331
+ ...valueEntries.map(([, v]) => v),
332
+ ...primaryKeys.map((pk) => pkValues[pk]),
333
+ ];
334
+ const sql = `UPDATE ${quotedSchema}.${quotedTable} SET ${setClause} WHERE ${whereClause}`;
335
+ const result = await pool.query(sql, params);
336
+ return sendSuccess(reply, { updatedCount: result.rowCount ?? 0 });
337
+ }
338
+ catch (error) {
339
+ return sendError(reply, 500, error);
340
+ }
341
+ });
130
342
  }
131
343
  //# sourceMappingURL=tables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../routes/tables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5D,qEAAqE;AACrE,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,aAAa,GAAG,MAAM,CAAC;AAe7B,kGAAkG;AAClG,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAoB;IACxD,GAAG,CAAC,IAAI,CACN,kBAAkB,EAClB;QACE,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,OAAO,CAAC;gBACjD,UAAU,EAAE;oBACV,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;SACF;KACF,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,EACJ,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,KAAK,EAAE,UAAU,GAClB,GAAG,OAAO,CAAC,IAAI,CAAC;QAEjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAC5C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,IAAI,iBAAiB,CAAC,EAC5C,aAAa,CACd,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAErC,2DAA2D;YAC3D,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YACrD,MAAM,GAAG,GAAG,iBAAiB,YAAY,IAAI,WAAW,WAAW,CAAC;YAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAiC,CAAC;YAEtD,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,GAAG,CAAC,IAAI,CACN,iBAAiB,EACjB;QACE,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,OAAO,CAAC;gBACjD,UAAU,EAAE;oBACV,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACpC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;SACF;KACF,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAC5C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAS,CACd,KAAK,EACL,GAAG,EACH,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAE/C,uCAAuC;YACvC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YAErD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CACtC;;oCAE0B,EAC1B,CAAC,GAAG,YAAY,IAAI,WAAW,EAAE,CAAC,CACnC,CAAC;YAEF,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBAC3C,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,KAAK;aAC3B,CAAC;YAEF,mBAAmB;YACnB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,KAAK,CACrC;;;;;;;;;8BASoB,EACpB,CAAC,MAAM,EAAE,KAAK,CAAC,CAChB,CAAC;YAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,GAAG,CAAC,UAAoB;gBAC9B,UAAU,EAAE,GAAG,CAAC,UAA0C;gBAC1D,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;gBAChC,OAAO,EAAE,GAAG,CAAC,GAAwD;gBACrE,KAAK,EAAE,GAAG,CAAC,IAAqB;gBAChC,SAAS,EAAE,GAAG,CAAC,UAA2B;aAC3C,CAAC,CAAC,CAAC;YAEJ,OAAO,WAAW,CAAC,KAAK,EAAE;gBACxB,OAAO,EAAE,SAAS,CAAC,cAAyB;gBAC5C,MAAM,EAAE,SAAS,CAAC,mBAA8B;gBAChD,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../routes/tables.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@ export interface SavedQuery {
4
4
  sql: string;
5
5
  updatedAt: number;
6
6
  }
7
- export declare function loadQueries(): Promise<SavedQuery[]>;
8
- export declare function saveQuery(id: string | null, name: string, sql: string): Promise<SavedQuery>;
9
- export declare function removeQueryById(id: string): Promise<boolean>;
10
- export declare function updateQueryName(id: string, name: string): Promise<SavedQuery | null>;
7
+ export declare function loadQueries(connectionId: string): Promise<SavedQuery[]>;
8
+ export declare function saveQuery(connectionId: string, id: string | null, name: string, sql: string): Promise<SavedQuery>;
9
+ export declare function removeQueryById(connectionId: string, id: string): Promise<boolean>;
10
+ export declare function updateQueryName(connectionId: string, id: string, name: string): Promise<SavedQuery | null>;
11
+ export declare function removeQueriesByConnectionId(connectionId: string): Promise<void>;
11
12
  //# sourceMappingURL=queries.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.service.d.ts","sourceRoot":"","sources":["../../services/queries.service.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD,wBAAsB,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAkBzD;AAQD,wBAAsB,SAAS,CAC7B,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,CA4BrB;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMlE;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAQ5B"}
1
+ {"version":3,"file":"queries.service.d.ts","sourceRoot":"","sources":["../../services/queries.service.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AA6DD,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAmB7E;AAED,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,CAwCrB;AAED,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAe5B;AAED,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -8,30 +8,76 @@ async function ensureConfigDir() {
8
8
  await fs.mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 }).catch(() => { });
9
9
  await fs.chmod(CONFIG_DIR, 0o700).catch(() => { });
10
10
  }
11
- export async function loadQueries() {
11
+ function isValidQuery(q) {
12
+ return (q !== null &&
13
+ typeof q === "object" &&
14
+ "id" in q &&
15
+ "name" in q &&
16
+ "sql" in q &&
17
+ "updatedAt" in q);
18
+ }
19
+ async function loadQueriesMap() {
12
20
  try {
13
21
  await ensureConfigDir();
14
22
  const data = await fs.readFile(QUERIES_FILE, "utf-8");
15
23
  const parsed = JSON.parse(data);
16
- const list = Array.isArray(parsed) ? parsed : (parsed.queries ?? []);
17
- return list.filter((q) => q &&
18
- typeof q === "object" &&
19
- "id" in q &&
20
- "name" in q &&
21
- "sql" in q &&
22
- "updatedAt" in q);
24
+ if (Array.isArray(parsed)) {
25
+ // Legacy format (flat array) - return it tagged so callers can migrate
26
+ return { __legacy__: parsed.filter(isValidQuery) };
27
+ }
28
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
29
+ // Legacy format with { queries: [...] }
30
+ if (Array.isArray(parsed.queries)) {
31
+ return { __legacy__: parsed.queries.filter(isValidQuery) };
32
+ }
33
+ // New per-connection format
34
+ const map = {};
35
+ for (const [key, val] of Object.entries(parsed)) {
36
+ if (Array.isArray(val)) {
37
+ map[key] = val.filter(isValidQuery);
38
+ }
39
+ }
40
+ return map;
41
+ }
42
+ return {};
23
43
  }
24
44
  catch {
25
- return [];
45
+ return {};
26
46
  }
27
47
  }
28
- async function saveQueriesList(queries) {
48
+ async function saveQueriesMap(map) {
29
49
  await ensureConfigDir();
30
- await fs.writeFile(QUERIES_FILE, JSON.stringify(queries, null, 2), "utf-8");
50
+ await fs.writeFile(QUERIES_FILE, JSON.stringify(map, null, 2), "utf-8");
31
51
  await fs.chmod(QUERIES_FILE, 0o600).catch(() => { });
32
52
  }
33
- export async function saveQuery(id, name, sql) {
34
- const queries = await loadQueries();
53
+ export async function loadQueries(connectionId) {
54
+ const map = await loadQueriesMap();
55
+ // Handle legacy migration: assign old queries to requesting connection
56
+ if ("__legacy__" in map && map.__legacy__.length > 0) {
57
+ const legacyQueries = map.__legacy__;
58
+ delete map.__legacy__;
59
+ map[connectionId] = legacyQueries;
60
+ await saveQueriesMap(map);
61
+ return legacyQueries;
62
+ }
63
+ // Clean up empty legacy key if present
64
+ if ("__legacy__" in map) {
65
+ delete map.__legacy__;
66
+ await saveQueriesMap(map);
67
+ }
68
+ return map[connectionId] ?? [];
69
+ }
70
+ export async function saveQuery(connectionId, id, name, sql) {
71
+ const map = await loadQueriesMap();
72
+ // Migrate legacy if present
73
+ if ("__legacy__" in map && map.__legacy__.length > 0) {
74
+ map[connectionId] = map.__legacy__;
75
+ delete map.__legacy__;
76
+ }
77
+ else if ("__legacy__" in map) {
78
+ delete map.__legacy__;
79
+ }
80
+ const queries = map[connectionId] ?? [];
35
81
  const now = Date.now();
36
82
  const trimmedName = name.trim() || "Untitled query";
37
83
  if (id) {
@@ -43,7 +89,8 @@ export async function saveQuery(id, name, sql) {
43
89
  sql: sql.trim(),
44
90
  updatedAt: now,
45
91
  };
46
- await saveQueriesList(queries);
92
+ map[connectionId] = queries;
93
+ await saveQueriesMap(map);
47
94
  return queries[idx];
48
95
  }
49
96
  }
@@ -54,25 +101,47 @@ export async function saveQuery(id, name, sql) {
54
101
  updatedAt: now,
55
102
  };
56
103
  queries.unshift(newQuery);
57
- await saveQueriesList(queries);
104
+ map[connectionId] = queries;
105
+ await saveQueriesMap(map);
58
106
  return newQuery;
59
107
  }
60
- export async function removeQueryById(id) {
61
- const queries = await loadQueries();
108
+ export async function removeQueryById(connectionId, id) {
109
+ const map = await loadQueriesMap();
110
+ if ("__legacy__" in map)
111
+ delete map.__legacy__;
112
+ const queries = map[connectionId];
113
+ if (!queries)
114
+ return false;
62
115
  const filtered = queries.filter((q) => q.id !== id);
63
116
  if (filtered.length === queries.length)
64
117
  return false;
65
- await saveQueriesList(filtered);
118
+ map[connectionId] = filtered;
119
+ await saveQueriesMap(map);
66
120
  return true;
67
121
  }
68
- export async function updateQueryName(id, name) {
69
- const queries = await loadQueries();
122
+ export async function updateQueryName(connectionId, id, name) {
123
+ const map = await loadQueriesMap();
124
+ if ("__legacy__" in map)
125
+ delete map.__legacy__;
126
+ const queries = map[connectionId];
127
+ if (!queries)
128
+ return null;
70
129
  const q = queries.find((x) => x.id === id);
71
130
  if (!q)
72
131
  return null;
73
132
  q.name = name.trim() || q.name;
74
133
  q.updatedAt = Date.now();
75
- await saveQueriesList(queries);
134
+ map[connectionId] = queries;
135
+ await saveQueriesMap(map);
76
136
  return q;
77
137
  }
138
+ export async function removeQueriesByConnectionId(connectionId) {
139
+ const map = await loadQueriesMap();
140
+ if ("__legacy__" in map)
141
+ delete map.__legacy__;
142
+ if (connectionId in map) {
143
+ delete map[connectionId];
144
+ await saveQueriesMap(map);
145
+ }
146
+ }
78
147
  //# sourceMappingURL=queries.service.js.map