planche 0.7.9 → 0.7.10

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 (49) hide show
  1. package/README.md +17 -1
  2. package/app/assets/{AboutDialog-BPNsHm3y.js → AboutDialog-CNjQdT5u.js} +1 -1
  3. package/app/assets/{ConnectDialog-Crrymc0W.js → ConnectDialog-JmGFmUJv.js} +1 -1
  4. package/app/assets/{CopyDatabaseDialog-DjSg4U1o.js → CopyDatabaseDialog-BeIaHJEE.js} +1 -1
  5. package/app/assets/{CopyTableDialog-BTEo-QH8.js → CopyTableDialog-RTJBBuHd.js} +1 -1
  6. package/app/assets/{CreateDatabaseDialog-Bm_6YvoO.js → CreateDatabaseDialog-EQk84TRf.js} +1 -1
  7. package/app/assets/{DataDiffDialog-C70b85TC.js → DataDiffDialog-Bsk7fEYT.js} +1 -1
  8. package/app/assets/{DownloadToCSVDialog-DUwB188z.js → DownloadToCSVDialog-fZOrfJCY.js} +2 -2
  9. package/app/assets/{EditSchemaDialog-Bth2OKEy.js → EditSchemaDialog-C8sd3QZp.js} +1 -1
  10. package/app/assets/{FindReplaceDialog-DpGsdMkt.js → FindReplaceDialog-Q-kOCd30.js} +1 -1
  11. package/app/assets/{FlushDialog-1cjuJ1Ft.js → FlushDialog-DuPXbGV8.js} +1 -1
  12. package/app/assets/LinkColumnDialog-Vfx3YnVz.js +1 -0
  13. package/app/assets/{LocalHistoryDialog-CIf-F4_K.js → LocalHistoryDialog-D7PbCc1T.js} +1 -1
  14. package/app/assets/ProcessListDialog-BcrS--N5.js +1 -0
  15. package/app/assets/QuickCommandPalette-DgmR-AEB.js +1 -0
  16. package/app/assets/RowFormDialog-BeY3wZoM.js +2 -0
  17. package/app/assets/{SafetySettingsDialog-U3Iblh6j.js → SafetySettingsDialog-COTjlwgg.js} +1 -1
  18. package/app/assets/{SchemaDiffDialog-CNNDRLbw.js → SchemaDiffDialog-DShgozcV.js} +1 -1
  19. package/app/assets/{SchemaToHTMLDialog-_DVyXheD.js → SchemaToHTMLDialog-6ZXb_qWR.js} +1 -1
  20. package/app/assets/{StatusDialog-CvzzTqId.js → StatusDialog-DYnmWcrB.js} +1 -1
  21. package/app/assets/{UserAddDialog-C9VvsXb8.js → UserAddDialog-WJfSy3UY.js} +1 -1
  22. package/app/assets/{UserManagerDialog-CIYWAeaA.js → UserManagerDialog-Bp3YK2PA.js} +1 -1
  23. package/app/assets/{VariablesDialog-CdIkSdn9.js → VariablesDialog-CofNmdTr.js} +1 -1
  24. package/app/assets/database-C07SXivf.js +1 -0
  25. package/app/assets/de-BHXb0E0M.js +2 -0
  26. package/app/assets/fr-vqo4FVRK.js +2 -0
  27. package/app/assets/{i18n-DFsTrccf.js → i18n-ByO9kvGG.js} +2 -2
  28. package/app/assets/ja-BosgFbQC.js +2 -0
  29. package/app/assets/ko-CvSx-uAq.js +2 -0
  30. package/app/assets/main-BKsXOMU1.css +2 -0
  31. package/app/assets/{main-DS4S3IhV.js → main-DKTBYrT9.js} +188 -188
  32. package/app/assets/{query-execution-v3CrkSv7.js → query-execution-Bqix04tS.js} +3 -3
  33. package/app/assets/{select-wpCNssiC.js → select-teWP1vRl.js} +1 -1
  34. package/app/assets/{table-copy-B-45A0tf.js → table-copy-NGGO-qDb.js} +1 -1
  35. package/app/assets/zh-B0EkNPpR.js +2 -0
  36. package/app/index.html +7 -6
  37. package/dist/index.js +241 -27
  38. package/package.json +1 -1
  39. package/app/assets/LinkColumnDialog-BL3oERQj.js +0 -1
  40. package/app/assets/ProcessListDialog-BiN41WSu.js +0 -1
  41. package/app/assets/QuickCommandPalette-BEC2Yj8l.js +0 -1
  42. package/app/assets/RowFormDialog-JuI6sB3V.js +0 -2
  43. package/app/assets/database-Cl9EPqA9.js +0 -1
  44. package/app/assets/de-2Oaocuns.js +0 -2
  45. package/app/assets/fr-BtMPo4Nu.js +0 -2
  46. package/app/assets/ja-D0iEKYDl.js +0 -2
  47. package/app/assets/ko-BSY6NOqF.js +0 -2
  48. package/app/assets/main-CVAqRUdH.css +0 -2
  49. package/app/assets/zh-Du4m2kV8.js +0 -2
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/index.ts
4
4
  import { randomUUID as randomUUID2 } from "crypto";
5
- import { createRequire } from "module";
5
+ import { createRequire as createRequire2 } from "module";
6
6
  import { spawn } from "child_process";
7
7
  import { parseArgs } from "util";
8
8
 
@@ -344,7 +344,7 @@ var postgresDriverFactory = {
344
344
  };
345
345
 
346
346
  // src/drivers/sqlite.ts
347
- import Database from "better-sqlite3";
347
+ import { createRequire } from "module";
348
348
  import { existsSync, realpathSync } from "fs";
349
349
  import { homedir } from "os";
350
350
  import { basename, dirname, join, relative, resolve, sep } from "path";
@@ -403,13 +403,18 @@ function resolveFile(file, forCreate = false) {
403
403
  }
404
404
  return resolved;
405
405
  }
406
+ var ctor = null;
407
+ function sqliteCtor() {
408
+ ctor ??= createRequire(import.meta.url)("better-sqlite3");
409
+ return ctor;
410
+ }
406
411
  function openDatabase(config) {
407
412
  const file = resolveFile(config.file, config.createIfMissing === true);
408
413
  const isMemory = file === ":memory:";
409
414
  if (!isMemory && !config.createIfMissing && !existsSync(file)) {
410
415
  throw new Error(`SQLite file not found: ${config.file}`);
411
416
  }
412
- const db = new Database(file, {
417
+ const db = new (sqliteCtor())(file, {
413
418
  readonly: config.readonly ?? false,
414
419
  fileMustExist: !isMemory && !config.createIfMissing
415
420
  });
@@ -614,8 +619,8 @@ var MssqlDriver = class {
614
619
  * decide whether it is editable and address rows by primary key.
615
620
  */
616
621
  async describe(text) {
617
- const cached = this.sources.get(text);
618
- if (cached !== void 0) return cached;
622
+ const cached2 = this.sources.get(text);
623
+ if (cached2 !== void 0) return cached2;
619
624
  let result = null;
620
625
  try {
621
626
  const req = this.pool.request();
@@ -760,8 +765,8 @@ var OracleDriver = class {
760
765
  }
761
766
  async tableColumns(schema, table) {
762
767
  const key = `${schema}.${table}`;
763
- const cached = this.columns.get(key);
764
- if (cached !== void 0) return cached;
768
+ const cached2 = this.columns.get(key);
769
+ if (cached2 !== void 0) return cached2;
765
770
  let out = null;
766
771
  try {
767
772
  const res = await this.conn.execute(
@@ -929,8 +934,8 @@ var D1Driver = class {
929
934
  return result;
930
935
  }
931
936
  async tableColumns(table) {
932
- const cached = this.columns.get(table);
933
- if (cached !== void 0) return cached;
937
+ const cached2 = this.columns.get(table);
938
+ if (cached2 !== void 0) return cached2;
934
939
  let out = null;
935
940
  try {
936
941
  const info = await this.raw(`PRAGMA table_info("${table.replaceAll('"', '""')}")`);
@@ -1369,8 +1374,8 @@ async function openSshTunnel(requested, target) {
1369
1374
  verified(false);
1370
1375
  });
1371
1376
  };
1372
- await new Promise((resolve4, reject) => {
1373
- client.once("ready", resolve4);
1377
+ await new Promise((resolve5, reject) => {
1378
+ client.once("ready", resolve5);
1374
1379
  client.once("error", (err) => reject(verifyError ?? describeSshError(err, ssh)));
1375
1380
  try {
1376
1381
  client.connect(connectConfig);
@@ -1400,22 +1405,22 @@ async function openSshTunnel(requested, target) {
1400
1405
  socket.once("close", () => stream.destroy());
1401
1406
  });
1402
1407
  });
1403
- await new Promise((resolve4, reject) => {
1408
+ await new Promise((resolve5, reject) => {
1404
1409
  server.once("error", reject);
1405
- server.listen(0, "127.0.0.1", () => resolve4());
1410
+ server.listen(0, "127.0.0.1", () => resolve5());
1406
1411
  }).catch((err) => {
1407
1412
  client.end();
1408
1413
  throw new TunnelError(`Could not open local tunnel port: ${err.message}`, 400);
1409
1414
  });
1410
1415
  const { port } = server.address();
1411
1416
  let closed = false;
1412
- const close = () => new Promise((resolve4) => {
1413
- if (closed) return resolve4();
1417
+ const close = () => new Promise((resolve5) => {
1418
+ if (closed) return resolve5();
1414
1419
  closed = true;
1415
1420
  for (const s of sockets) s.destroy();
1416
1421
  server.close(() => {
1417
1422
  client.end();
1418
- resolve4();
1423
+ resolve5();
1419
1424
  });
1420
1425
  });
1421
1426
  client.once("close", () => void close());
@@ -1676,9 +1681,202 @@ function describeProfile(entry) {
1676
1681
  }
1677
1682
 
1678
1683
  // src/index.ts
1679
- import { existsSync as existsSync3 } from "fs";
1680
- import { join as join6, resolve as resolve3 } from "path";
1684
+ import { existsSync as existsSync4 } from "fs";
1685
+ import { join as join7, resolve as resolve4 } from "path";
1686
+ import { fileURLToPath as fileURLToPath2 } from "url";
1687
+
1688
+ // src/install.ts
1689
+ import { spawnSync } from "child_process";
1690
+ import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, rmSync, writeFileSync } from "fs";
1691
+ import { homedir as homedir5 } from "os";
1692
+ import { createInterface } from "readline/promises";
1693
+ import { dirname as dirname3, join as join5, resolve as resolve3 } from "path";
1681
1694
  import { fileURLToPath } from "url";
1695
+ var MANIFEST = "install.json";
1696
+ var PLANCHE_DIR3 = join5(homedir5(), ".planche");
1697
+ var UPDATE_CACHE = join5(PLANCHE_DIR3, "update-check.json");
1698
+ var REGISTRY = "https://registry.npmjs.org/planche/latest";
1699
+ var CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
1700
+ var cached = null;
1701
+ function locate() {
1702
+ if (cached) return cached;
1703
+ const candidates = [];
1704
+ if (process.env.PLANCHE_INSTALL_ROOT) candidates.push(resolve3(process.env.PLANCHE_INSTALL_ROOT));
1705
+ let dir = dirname3(fileURLToPath(import.meta.url));
1706
+ for (let i = 0; i < 6; i += 1) {
1707
+ candidates.push(dir);
1708
+ const parent = dirname3(dir);
1709
+ if (parent === dir) break;
1710
+ dir = parent;
1711
+ }
1712
+ for (const root of candidates) {
1713
+ try {
1714
+ const raw = readFileSync2(join5(root, MANIFEST), "utf8");
1715
+ const manifest = JSON.parse(raw);
1716
+ if (manifest && manifest.version === 1) {
1717
+ cached = { root, manifest };
1718
+ return cached;
1719
+ }
1720
+ } catch {
1721
+ }
1722
+ }
1723
+ cached = { root: null, manifest: null };
1724
+ return cached;
1725
+ }
1726
+ function installKind() {
1727
+ return locate().manifest ? "standalone" : "npx";
1728
+ }
1729
+ function abiWarning() {
1730
+ const { manifest } = locate();
1731
+ if (!manifest?.modules || manifest.modules === process.versions.modules) return null;
1732
+ return `This install was built for Node ABI ${manifest.modules}, but it is running on ${process.version} (ABI ${process.versions.modules}).
1733
+ SQLite connections will fail until the native bindings are rebuilt \u2014 run: planche upgrade`;
1734
+ }
1735
+ function npmCommand(manifest) {
1736
+ const node = manifest.node && existsSync2(manifest.node) ? manifest.node : process.execPath;
1737
+ if (manifest.npmCli && existsSync2(manifest.npmCli)) return { cmd: node, args: [manifest.npmCli], shell: false };
1738
+ if (manifest.npm && existsSync2(manifest.npm)) {
1739
+ return { cmd: manifest.npm, args: [], shell: process.platform === "win32" };
1740
+ }
1741
+ return null;
1742
+ }
1743
+ var VERSION_SPEC = /^(latest|next|\d+\.\d+\.\d+(-[0-9A-Za-z.]+)?)$/;
1744
+ function runUpgrade(target) {
1745
+ if (!VERSION_SPEC.test(target)) {
1746
+ console.error(`Not a version: ${target}. Use \`planche upgrade\` or \`planche upgrade 1.2.3\`.`);
1747
+ return 2;
1748
+ }
1749
+ const { root, manifest } = locate();
1750
+ if (!root || !manifest) {
1751
+ console.error("This copy of planche was not installed by planche.dev/install.sh.");
1752
+ console.error("Run the latest version with: npx planche@latest");
1753
+ return 1;
1754
+ }
1755
+ const npm = npmCommand(manifest);
1756
+ if (!npm) {
1757
+ console.error(`Cannot find npm for this install (see ${join5(root, MANIFEST)}).`);
1758
+ console.error("Re-run the installer: curl -fsSL https://planche.dev/install.sh | sh");
1759
+ return 1;
1760
+ }
1761
+ const prefix = join5(root, "pkg");
1762
+ console.log(`Installing planche@${target} into ${prefix} ...`);
1763
+ const result = spawnSync(
1764
+ npm.cmd,
1765
+ [...npm.args, "install", "--prefix", prefix, "--omit=dev", "--no-audit", "--no-fund", "--loglevel=error", `planche@${target}`],
1766
+ { stdio: "inherit", shell: npm.shell }
1767
+ );
1768
+ if (result.status !== 0) {
1769
+ console.error("Upgrade failed. Re-run the installer to repair the install:");
1770
+ console.error(" curl -fsSL https://planche.dev/install.sh | sh");
1771
+ return result.status ?? 1;
1772
+ }
1773
+ let installed = target;
1774
+ try {
1775
+ const pkg = JSON.parse(readFileSync2(join5(prefix, "node_modules", "planche", "package.json"), "utf8"));
1776
+ installed = pkg.version;
1777
+ } catch {
1778
+ }
1779
+ try {
1780
+ writeFileSync(join5(root, MANIFEST), `${JSON.stringify({ ...manifest, modules: process.versions.modules, installedAt: (/* @__PURE__ */ new Date()).toISOString() }, null, 2)}
1781
+ `);
1782
+ } catch {
1783
+ }
1784
+ cached = null;
1785
+ clearUpdateCache();
1786
+ console.log(`planche ${installed} installed. Start it with: planche`);
1787
+ return 0;
1788
+ }
1789
+ async function runUninstall(assumeYes) {
1790
+ const { root, manifest } = locate();
1791
+ if (!root || !manifest) {
1792
+ console.error("This copy of planche was not installed by planche.dev/install.sh; there is nothing to uninstall.");
1793
+ console.error("An `npx planche` download lives in the npm cache and is cleared with: npm cache clean --force");
1794
+ return 1;
1795
+ }
1796
+ const targets = [root, ...manifest.bin && existsSync2(manifest.bin) ? [manifest.bin] : []];
1797
+ console.log("This will remove:");
1798
+ for (const t of targets) console.log(` ${t}`);
1799
+ console.log(`
1800
+ Your settings stay: ${PLANCHE_DIR3} (known_hosts, usage counts) is left untouched.`);
1801
+ if (!assumeYes) {
1802
+ if (!process.stdin.isTTY) {
1803
+ console.error("\nRefusing to delete without a confirmation. Re-run with: planche uninstall --yes");
1804
+ return 1;
1805
+ }
1806
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
1807
+ const answer = (await rl.question("\nRemove them? [y/N] ")).trim().toLowerCase();
1808
+ rl.close();
1809
+ if (answer !== "y" && answer !== "yes") {
1810
+ console.log("Nothing was removed.");
1811
+ return 1;
1812
+ }
1813
+ }
1814
+ for (const t of targets) {
1815
+ try {
1816
+ rmSync(t, { recursive: true, force: true });
1817
+ } catch (err) {
1818
+ console.error(`Could not remove ${t}: ${err instanceof Error ? err.message : String(err)}`);
1819
+ return 1;
1820
+ }
1821
+ }
1822
+ console.log("planche has been uninstalled.");
1823
+ return 0;
1824
+ }
1825
+ function readUpdateCache() {
1826
+ try {
1827
+ const data = JSON.parse(readFileSync2(UPDATE_CACHE, "utf8"));
1828
+ return typeof data.checkedAt === "number" && typeof data.latest === "string" ? data : null;
1829
+ } catch {
1830
+ return null;
1831
+ }
1832
+ }
1833
+ function writeUpdateCache(latest) {
1834
+ try {
1835
+ mkdirSync(PLANCHE_DIR3, { recursive: true, mode: 448 });
1836
+ writeFileSync(UPDATE_CACHE, `${JSON.stringify({ checkedAt: Date.now(), latest })}
1837
+ `, { mode: 384 });
1838
+ } catch {
1839
+ }
1840
+ }
1841
+ function clearUpdateCache() {
1842
+ try {
1843
+ rmSync(UPDATE_CACHE, { force: true });
1844
+ } catch {
1845
+ }
1846
+ }
1847
+ function isNewer(candidate, current) {
1848
+ const parse2 = (v) => /^\d+\.\d+\.\d+$/.test(v) ? v.split(".").map(Number) : null;
1849
+ const a = parse2(candidate);
1850
+ const b = parse2(current);
1851
+ if (!a || !b) return false;
1852
+ for (let i = 0; i < 3; i += 1) {
1853
+ if (a[i] !== b[i]) return a[i] > b[i];
1854
+ }
1855
+ return false;
1856
+ }
1857
+ async function updateNotice(current) {
1858
+ if (installKind() !== "standalone") return null;
1859
+ if (process.env.PLANCHE_NO_UPDATE_CHECK) return null;
1860
+ const cache = readUpdateCache();
1861
+ let latest = cache && Date.now() - cache.checkedAt < CHECK_INTERVAL_MS ? cache.latest : null;
1862
+ if (!latest) {
1863
+ const controller = new AbortController();
1864
+ const timer2 = setTimeout(() => controller.abort(), 2500);
1865
+ try {
1866
+ const response = await fetch(REGISTRY, { signal: controller.signal, headers: { accept: "application/json" } });
1867
+ if (!response.ok) return null;
1868
+ const data = await response.json();
1869
+ if (typeof data.version !== "string" || !/^[\w.+-]{1,32}$/.test(data.version)) return null;
1870
+ latest = data.version;
1871
+ writeUpdateCache(latest);
1872
+ } catch {
1873
+ return null;
1874
+ } finally {
1875
+ clearTimeout(timer2);
1876
+ }
1877
+ }
1878
+ return isNewer(latest, current) ? `planche ${latest} is available (you have ${current}) \u2014 update with: planche upgrade` : null;
1879
+ }
1682
1880
 
1683
1881
  // src/server.ts
1684
1882
  import express from "express";
@@ -1960,8 +2158,8 @@ var ConnectionManager = class {
1960
2158
  };
1961
2159
 
1962
2160
  // src/server.ts
1963
- import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
1964
- import { join as join5 } from "path";
2161
+ import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
2162
+ import { join as join6 } from "path";
1965
2163
  function errorStatus(err) {
1966
2164
  const status = err?.status;
1967
2165
  return typeof status === "number" && status >= 400 && status < 600 ? status : 400;
@@ -2093,6 +2291,7 @@ function createAgent(options) {
2093
2291
  activeConnections: manager.activeConnections,
2094
2292
  uptime: process.uptime()
2095
2293
  };
2294
+ if (options.install) body.install = options.install;
2096
2295
  if (options.gateway) body.gateway = { name: options.gateway.name, profiles: options.gateway.profiles.length };
2097
2296
  if (req.headers.authorization !== void 0) {
2098
2297
  if (throttle.locked(peerOf(req))) {
@@ -2255,8 +2454,8 @@ function serveApp(app, appDir) {
2255
2454
  "form-action 'none'",
2256
2455
  "frame-ancestors 'none'"
2257
2456
  ].join("; ");
2258
- const indexFile = join5(appDir, "index.html");
2259
- const indexHtml = existsSync2(indexFile) ? readFileSync2(indexFile, "utf8").replace("<head>", '<head>\n <meta name="planche-agent" content="same-origin" />') : null;
2457
+ const indexFile = join6(appDir, "index.html");
2458
+ const indexHtml = existsSync3(indexFile) ? readFileSync3(indexFile, "utf8").replace("<head>", '<head>\n <meta name="planche-agent" content="same-origin" />') : null;
2260
2459
  const headers = (res) => {
2261
2460
  res.setHeader("Content-Security-Policy", csp);
2262
2461
  res.setHeader("X-Frame-Options", "DENY");
@@ -2281,7 +2480,7 @@ function serveApp(app, appDir) {
2281
2480
  }
2282
2481
 
2283
2482
  // src/index.ts
2284
- var { version: VERSION } = createRequire(import.meta.url)("../package.json");
2483
+ var { version: VERSION } = createRequire2(import.meta.url)("../package.json");
2285
2484
  var DEFAULT_APP_URL = "https://planche.dev";
2286
2485
  var DEV_ORIGINS = [
2287
2486
  "http://localhost:5173",
@@ -2290,8 +2489,8 @@ var DEV_ORIGINS = [
2290
2489
  "http://127.0.0.1:4173"
2291
2490
  ];
2292
2491
  function bundledAppDir() {
2293
- const dir = fileURLToPath(new URL("../app/", import.meta.url));
2294
- return existsSync3(join6(dir, "index.html")) ? dir : null;
2492
+ const dir = fileURLToPath2(new URL("../app/", import.meta.url));
2493
+ return existsSync4(join7(dir, "index.html")) ? dir : null;
2295
2494
  }
2296
2495
  function isLoopbackUrl(url) {
2297
2496
  try {
@@ -2313,8 +2512,8 @@ async function appIsReachable(url, timeoutMs = 2500) {
2313
2512
  }
2314
2513
  }
2315
2514
  function resolveAppDir(explicit) {
2316
- const dir = explicit ? resolve3(explicit) : fileURLToPath(new URL("../app/", import.meta.url));
2317
- if (!existsSync3(join6(dir, "index.html"))) {
2515
+ const dir = explicit ? resolve4(explicit) : fileURLToPath2(new URL("../app/", import.meta.url));
2516
+ if (!existsSync4(join7(dir, "index.html"))) {
2318
2517
  console.error(explicit ? `--app-dir has no index.html: ${dir}` : `This build does not include the web app (${dir}). Install the published package, or pass --app-dir <dir>.`);
2319
2518
  process.exit(2);
2320
2519
  }
@@ -2324,6 +2523,8 @@ function usage() {
2324
2523
  return `planche ${VERSION} \u2014 local agent for the Planche SQL client
2325
2524
 
2326
2525
  Usage: planche [options]
2526
+ planche upgrade [version] Update a standalone install in place
2527
+ planche uninstall [--yes] Remove it again (settings in ~/.planche are kept)
2327
2528
 
2328
2529
  Options:
2329
2530
  -p, --port <n> Port to listen on (default: 8888, env PLANCHE_PORT)
@@ -2371,12 +2572,21 @@ function openInBrowser(url) {
2371
2572
  }
2372
2573
  }
2373
2574
  async function main() {
2575
+ const [subcommand] = process.argv.slice(2);
2576
+ if (subcommand === "upgrade") {
2577
+ process.exit(runUpgrade(process.argv[3] ?? "latest"));
2578
+ }
2579
+ if (subcommand === "uninstall") {
2580
+ process.exit(await runUninstall(process.argv.includes("--yes") || process.argv.includes("-y")));
2581
+ }
2374
2582
  const major = Number(process.versions.node.split(".")[0]);
2375
2583
  if (major < 22) {
2376
2584
  console.error(`planche needs Node.js 22 or newer (you are running ${process.version}).`);
2377
2585
  console.error("Try `nvm use 22` or `npx -p node@22 planche`.");
2378
2586
  process.exit(1);
2379
2587
  }
2588
+ const abi = abiWarning();
2589
+ if (abi) console.warn(`WARNING: ${abi}`);
2380
2590
  let values;
2381
2591
  try {
2382
2592
  values = parseArgs({
@@ -2477,6 +2687,7 @@ async function main() {
2477
2687
  bodyLimit,
2478
2688
  version: VERSION,
2479
2689
  logRequests: flags.verbose ?? false,
2690
+ install: installKind(),
2480
2691
  // Browsers omit a default port from `Host`, so the bare names are allowed too.
2481
2692
  allowedHosts: loopback ? ["127.0.0.1", "localhost", "[::1]", `127.0.0.1:${port}`, `localhost:${port}`, `[::1]:${port}`] : void 0,
2482
2693
  pairingCode,
@@ -2504,6 +2715,9 @@ async function main() {
2504
2715
  }
2505
2716
  console.log(line);
2506
2717
  if (shouldOpen) openInBrowser(pairUrl);
2718
+ void updateNotice(VERSION).then((notice) => {
2719
+ if (notice) console.log(notice);
2720
+ });
2507
2721
  });
2508
2722
  server.on("error", (err) => {
2509
2723
  if (err.code === "EADDRINUSE") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planche",
3
- "version": "0.7.9",
3
+ "version": "0.7.10",
4
4
  "description": "Local agent for Planche \u2014 lets the browser-based Planche SQL client reach MySQL/MariaDB/PostgreSQL/SQLite/SQL Server/Oracle/Neon/Supabase/Cloudflare D1 databases from your machine.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://planche.dev",
@@ -1 +0,0 @@
1
- import{_ as e,c as t,m as n,n as r,t as i}from"./ui-store-VGM_km-l.js";import{R as ee,l as a,u as o,z as s}from"./main-DS4S3IhV.js";import{l as c,m as l,t as u}from"./button-BRD_vJ8s.js";import{a as d,i as f,n as p,r as m,t as h}from"./select-wpCNssiC.js";import{t as g}from"./connection-store-Cn79Ey1H.js";import{O as _,r as v}from"./database-Cl9EPqA9.js";import{n as y}from"./engine-tGsnPQEm.js";import{a as b,i as x,n as S,o as C,t as w}from"./dialog-1MXGAorC.js";var T=e(n(),1),E=c(),D=e=>e instanceof Error?e.message:String(e);function O(){let{t:e}=l(),n=r(e=>e.activeDialog),c=r(e=>e.closeDialog),O=i(`link-column`),k=n===`link-column`&&!!O,A=O?.connectionId??``,j=g(e=>e.activeConnections),M=j.filter(e=>e.serverConnectionId),N=s(e=>e.links),P=s(e=>e.setLink),F=s(e=>e.removeLink),I=O?ee(N,A,O.database,O.table).find(e=>e.column===O.column)??null:null,[L,R]=(0,T.useState)(I?.targetConnectionId??A),z=j.find(e=>e.id===L)?.serverConnectionId,[B,V]=(0,T.useState)([]),[H,U]=(0,T.useState)([]),[W,G]=(0,T.useState)([]),[K,q]=(0,T.useState)(I?.targetDatabase??O?.database??``),[J,Y]=(0,T.useState)(I?.targetTable??``),[X,Z]=(0,T.useState)(I?.targetColumn??``),[Q,$]=(0,T.useState)(null);if((0,T.useEffect)(()=>{if(!k||!z)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listDatabases(v(z));if(e)return;V(t),q(e=>t.includes(e)?e:t[0]??``)}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L]),(0,T.useEffect)(()=>{if(!k||!z||!K)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listTables(v(z),K);if(e)return;U(t.map(e=>e.name))}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L,K]),(0,T.useEffect)(()=>{if(!k||!z||!K||!J)return;let e=!1;return(async()=>{try{let t=await y(L).introspect.listColumns(v(z),K,J);if(e)return;G(t.map(e=>e.name)),Z(e=>t.some(t=>t.name===e)?e:t.find(e=>e.key===`PRI`)?.name??t[0]?.name??``)}catch(t){e||$(D(t))}})(),()=>{e=!0}},[k,z,L,K,J]),!O)return null;function te(){if(!O||!K||!J||!X)return;let e=L!==A;P(A,{database:O.database,table:O.table,column:O.column,...e?{targetConnectionId:L}:{},targetDatabase:K,targetTable:J,targetColumn:X}),_(`column_link`),t(`column_link_set`,{dbms:y(A).id,target_dbms:y(L).id,cross_database:K!==O.database,cross_connection:e}),c()}function ne(){O&&(F(A,O),c())}return(0,E.jsx)(w,{open:k,onOpenChange:e=>{e||c()},children:(0,E.jsxs)(S,{className:`sm:max-w-[460px]`,children:[(0,E.jsx)(b,{children:(0,E.jsx)(C,{children:e(`result.link.title`)})}),(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(a,{children:e(`result.link.source`)}),(0,E.jsx)(o,{value:`${O.database}.${O.table}.${O.column}`,disabled:!0})]}),(0,E.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`result.link.hint`)}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(a,{htmlFor:`link-conn`,children:e(`result.link.targetConnection`)}),(0,E.jsxs)(h,{value:L,onValueChange:e=>{R(e),Y(``),U([]),G([])},children:[(0,E.jsx)(f,{id:`link-conn`,className:`w-full`,children:(0,E.jsx)(d,{})}),(0,E.jsx)(p,{children:M.map(e=>(0,E.jsx)(m,{value:e.id,children:e.hostName||e.host||e.file||e.id},e.id))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(a,{htmlFor:`link-db`,children:e(`result.link.targetDatabase`)}),(0,E.jsxs)(h,{value:K,onValueChange:e=>{q(e),Y(``),G([])},children:[(0,E.jsx)(f,{id:`link-db`,className:`w-full`,children:(0,E.jsx)(d,{})}),(0,E.jsx)(p,{children:B.map(e=>(0,E.jsx)(m,{value:e,children:e},e))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(a,{htmlFor:`link-table`,children:e(`result.link.targetTable`)}),(0,E.jsxs)(h,{value:J,onValueChange:Y,disabled:H.length===0,children:[(0,E.jsx)(f,{id:`link-table`,className:`w-full`,children:(0,E.jsx)(d,{placeholder:e(`result.link.pickTable`)})}),(0,E.jsx)(p,{children:H.map(e=>(0,E.jsx)(m,{value:e,children:e},e))})]})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(a,{htmlFor:`link-column`,children:e(`result.link.targetColumn`)}),(0,E.jsxs)(h,{value:X,onValueChange:Z,disabled:W.length===0,children:[(0,E.jsx)(f,{id:`link-column`,className:`w-full`,children:(0,E.jsx)(d,{placeholder:e(`result.link.pickColumn`)})}),(0,E.jsx)(p,{children:W.map(e=>(0,E.jsx)(m,{value:e,children:e},e))})]})]}),Q&&(0,E.jsx)(`p`,{className:`text-xs text-destructive`,children:Q})]}),(0,E.jsxs)(x,{children:[I&&(0,E.jsx)(u,{variant:`destructive`,onClick:ne,className:`mr-auto`,children:e(`result.link.remove`)}),(0,E.jsx)(u,{variant:`outline`,onClick:c,children:e(`result.link.cancel`)}),(0,E.jsx)(u,{onClick:te,disabled:!K||!J||!X,children:e(`result.link.save`)})]})]})})}export{O as LinkColumnDialog};
@@ -1 +0,0 @@
1
- import{_ as e,m as t,n}from"./ui-store-VGM_km-l.js";import{C as r,J as i,S as a,Y as o,b as ee,ct as te,lt as ne,ot as s,tt as re,ut as ie,w as c,x as l,y as ae}from"./main-DS4S3IhV.js";import{a as u,i as oe,l as d,m as se,t as f}from"./button-BRD_vJ8s.js";import{a as p}from"./i18n-DFsTrccf.js";import{t as m}from"./connection-store-Cn79Ey1H.js";import{o as h}from"./database-Cl9EPqA9.js";import{t as g}from"./engine-tGsnPQEm.js";import{a as ce,i as _,n as v,o as y,t as le}from"./dialog-1MXGAorC.js";var ue=u(`list-ordered`,[[`path`,{d:`M11 5h10`,key:`1cz7ny`}],[`path`,{d:`M11 12h10`,key:`1438ji`}],[`path`,{d:`M11 19h10`,key:`11t30w`}],[`path`,{d:`M4 4h1v5`,key:`10yrso`}],[`path`,{d:`M4 9h2`,key:`r1h2o0`}],[`path`,{d:`M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02`,key:`xtkcd5`}]]),de=u(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),b=u(`skull`,[[`path`,{d:`m12.5 17-.5-1-.5 1h1z`,key:`3me087`}],[`path`,{d:`M15 22a1 1 0 0 0 1-1v-1a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20v1a1 1 0 0 0 1 1z`,key:`1o5pge`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}]]),fe=u(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),x=e(t(),1),S=d(),C=10,pe=[2,5,10,30];function w(){let e=m.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}async function T(){let e=w();if(!e)throw Error(p.t(`command.noActiveConnection`));let t=await h(e,g().getQuery(`SHOW_PROCESS_LIST`));return t.records.map(e=>{let n={};return t.fields.forEach((t,r)=>{n[t.name]=e[r]}),{...n,Id:String(n.Id)}})}function E(e){return/^(sleep|idle)/i.test(e.Command??``)}function me(e){return/lock/i.test(e.State??``)}function he(e){return/PROCESSLIST|pg_stat_activity/i.test(e.Info??``)}function D(e){let t=Number(e.Time);return Number.isFinite(t)?t:0}function O(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m ${e%60}s`:`${Math.floor(e/3600)}h ${Math.floor(e%3600/60)}m`}function k({icon:e,label:t,value:n,tone:r}){return(0,S.jsxs)(`div`,{className:`flex min-w-[120px] flex-1 items-center gap-2.5 rounded-md border bg-muted/30 px-3 py-1.5`,children:[(0,S.jsx)(`div`,{className:`flex size-7 shrink-0 items-center justify-center rounded-md [&_svg]:size-3.5 ${r===`warn`?`bg-catppuccin-yellow/15 text-catppuccin-yellow`:`bg-primary/10 text-primary`}`,children:e}),(0,S.jsxs)(`div`,{className:`min-w-0`,children:[(0,S.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:t}),(0,S.jsx)(`div`,{className:`truncate text-sm font-semibold tabular-nums`,children:n})]})]})}function A(){let{t:e}=se(),{activeDialog:t,closeDialog:u,setFooterMessage:d,requestDestructiveConfirm:p}=n(),[m,A]=(0,x.useState)([]),[j,M]=(0,x.useState)(!1),[N,P]=(0,x.useState)(5),[F,I]=(0,x.useState)(null),[L,R]=(0,x.useState)(``),[z,ge]=(0,x.useState)(!1),[B,_e]=(0,x.useState)(!0),[V,H]=(0,x.useState)(!1),[U,ve]=(0,x.useState)(null),[W,G]=(0,x.useState)(!1),K=(0,x.useRef)(null),q=t===`process-list`,J=(0,x.useCallback)(()=>Promise.resolve().then(()=>(H(!0),T())).then(e=>{A(e),ve(new Date)}).catch(t=>d(e(`command.processList.loadError`,{message:t instanceof Error?t.message:String(t)}))).finally(()=>H(!1)),[d,e]);(0,x.useEffect)(()=>{q&&J()},[q,J]),(0,x.useEffect)(()=>(K.current&&=(clearInterval(K.current),null),j&&q&&(K.current=setInterval(()=>{J()},N*1e3)),()=>{K.current&&=(clearInterval(K.current),null)}),[j,N,q,J]);function Y(e){e||(M(!1),I(null),R(``),u())}let X=(0,x.useMemo)(()=>{let e=m.filter(E).length,t=m.filter(e=>!E(e)).reduce((e,t)=>Math.max(e,D(t)),0);return{total:m.length,active:m.length-e,idle:e,longest:t}},[m]),Z=(0,x.useMemo)(()=>{let e=L.trim().toLowerCase();return m.filter(t=>z&&E(t)?!1:!e||[t.Id,t.User,t.Host,t.db,t.Command,t.State,t.Info].some(t=>(t??``).toString().toLowerCase().includes(e))).sort((e,t)=>B?D(t)-D(e):D(e)-D(t))},[m,L,z,B]),Q=m.find(e=>e.Id===F)??null,ye=(0,x.useCallback)(()=>{Q?.Info&&navigator.clipboard.writeText(Q.Info).then(()=>{G(!0),setTimeout(()=>G(!1),1500)})},[Q]);async function $(t){let n=t??F;if(!n){d(e(`command.processList.selectToKill`));return}let r=w();if(!r)return;let i=m.find(e=>e.Id===n),a=g().getQuery(`KILL_QUERY`,String(n));if(await p({title:e(`command.processList.killConfirmTitle`,{id:n}),description:e(`command.processList.killConfirmDescription`,{user:i?.User??`?`,host:i?.Host??`?`}),confirmLabel:e(`command.processList.killProcess`),statements:[a]}))try{await h(r,a),d(e(`command.processList.killed`,{id:n})),F===n&&I(null),J()}catch(t){d(e(`command.processList.killError`,{message:t instanceof Error?t.message:String(t)}))}}return(0,S.jsx)(le,{open:q,onOpenChange:Y,children:(0,S.jsxs)(v,{className:`flex max-h-[85vh] flex-col sm:max-w-[1000px]`,children:[(0,S.jsx)(ce,{children:(0,S.jsxs)(y,{className:`flex items-center gap-2`,children:[e(`command.processList.title`),U&&(0,S.jsx)(`span`,{className:`text-xs font-normal text-muted-foreground`,children:e(`command.processList.updatedAt`,{time:U.toLocaleTimeString(void 0,{hour12:!1})})})]})}),(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,S.jsx)(k,{icon:(0,S.jsx)(ue,{}),label:e(`command.processList.stats.total`),value:X.total}),(0,S.jsx)(k,{icon:(0,S.jsx)(ie,{}),label:e(`command.processList.stats.active`),value:X.active}),(0,S.jsx)(k,{icon:(0,S.jsx)(de,{}),label:e(`command.processList.stats.idle`),value:X.idle}),(0,S.jsx)(k,{icon:(0,S.jsx)(fe,{}),label:e(`command.processList.stats.longest`),value:O(X.longest),tone:X.longest>=C?`warn`:void 0})]}),(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,S.jsxs)(`div`,{className:`relative`,children:[(0,S.jsx)(i,{className:`pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,S.jsx)(`input`,{className:`h-7 w-56 rounded border bg-background pl-7 pr-6 text-xs placeholder:text-muted-foreground`,placeholder:e(`command.processList.filterPlaceholder`),value:L,onChange:e=>R(e.target.value)}),L&&(0,S.jsx)(`button`,{type:`button`,className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,onClick:()=>R(``),children:(0,S.jsx)(oe,{className:`size-3`})})]}),(0,S.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5 text-xs`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`accent-primary`,checked:z,onChange:e=>ge(e.target.checked)}),e(`command.processList.hideIdle`)]}),(0,S.jsx)(`div`,{className:`flex-1`}),(0,S.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5 text-xs`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`accent-primary`,checked:j,onChange:e=>M(e.target.checked)}),e(`command.processList.autoRefresh`)]}),(0,S.jsx)(`select`,{className:`h-7 rounded border bg-background px-1.5 text-xs disabled:opacity-50`,value:N,onChange:e=>P(Number(e.target.value)),disabled:!j,children:pe.map(e=>(0,S.jsxs)(`option`,{value:e,children:[e,`s`]},e))}),(0,S.jsxs)(f,{variant:`outline`,size:`sm`,className:`h-7`,onClick:()=>{J()},disabled:V,children:[(0,S.jsx)(o,{className:`mr-1 size-3.5 ${V?`animate-spin`:``}`}),e(`command.processList.refresh`)]})]}),(0,S.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto rounded-md border`,children:(0,S.jsxs)(ae,{className:`text-xs`,children:[(0,S.jsx)(r,{className:`sticky top-0 z-10 bg-background`,children:(0,S.jsxs)(c,{children:[(0,S.jsx)(a,{className:`w-[70px]`,children:e(`command.processList.columns.id`)}),(0,S.jsx)(a,{className:`w-[100px]`,children:e(`command.processList.columns.user`)}),(0,S.jsx)(a,{className:`w-[130px]`,children:e(`command.processList.columns.host`)}),(0,S.jsx)(a,{className:`w-[100px]`,children:e(`command.processList.columns.db`)}),(0,S.jsx)(a,{className:`w-[90px]`,children:e(`command.processList.columns.command`)}),(0,S.jsx)(a,{className:`w-[80px] cursor-pointer select-none`,onClick:()=>_e(e=>!e),children:(0,S.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e(`command.processList.columns.time`),B?(0,S.jsx)(ne,{className:`size-3 text-primary`}):(0,S.jsx)(te,{className:`size-3 text-primary`})]})}),(0,S.jsx)(a,{className:`w-[130px]`,children:e(`command.processList.columns.state`)}),(0,S.jsx)(a,{children:e(`command.processList.columns.info`)}),(0,S.jsx)(a,{className:`w-[50px]`})]})}),(0,S.jsx)(ee,{children:Z.length===0?(0,S.jsx)(c,{children:(0,S.jsx)(l,{colSpan:9,className:`py-8 text-center text-muted-foreground`,children:m.length===0?e(`command.processList.empty`):e(`command.processList.noMatch`)})}):Z.map(t=>{let n=E(t),r=D(t),i=!n&&r>=C,a=me(t),o=he(t);return(0,S.jsxs)(c,{"data-state":F===t.Id?`selected`:void 0,className:`cursor-pointer ${n?`text-muted-foreground`:``} ${a?`bg-destructive/5`:i?`bg-catppuccin-yellow/5`:``}`,onClick:()=>I(t.Id),children:[(0,S.jsx)(l,{className:`font-mono tabular-nums`,children:(0,S.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t.Id,o&&(0,S.jsx)(`span`,{className:`rounded bg-primary/10 px-1 text-[9px] font-semibold text-primary`,title:e(`command.processList.selfHint`),children:e(`command.processList.self`)})]})}),(0,S.jsx)(l,{children:t.User}),(0,S.jsx)(l,{className:`font-mono`,children:t.Host}),(0,S.jsx)(l,{className:`font-mono`,children:t.db??``}),(0,S.jsx)(l,{children:(0,S.jsx)(`span`,{className:`rounded px-1.5 py-px text-[10px] font-medium ${n?`bg-muted`:`bg-green-500/10 text-green-600 dark:text-green-400`}`,children:t.Command})}),(0,S.jsx)(l,{className:`tabular-nums ${i?`font-semibold text-catppuccin-yellow`:``}`,children:O(r)}),(0,S.jsx)(l,{className:a?`font-medium text-destructive`:``,children:t.State}),(0,S.jsx)(l,{className:`max-w-[260px] truncate font-mono`,title:t.Info??``,children:t.Info??``}),(0,S.jsx)(l,{className:`text-right`,children:(0,S.jsx)(`button`,{type:`button`,className:`rounded p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,title:e(`command.processList.kill`),onClick:e=>{e.stopPropagation(),$(t.Id)},children:(0,S.jsx)(b,{className:`size-3.5`})})})]},t.Id)})})]})}),Q&&(0,S.jsxs)(`div`,{className:`shrink-0 rounded-md border`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 border-b bg-muted/30 px-3 py-1`,children:[(0,S.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e(`command.processList.statementOf`,{id:Q.Id})}),(0,S.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[Q.User,`@`,Q.Host,Q.db?` · ${Q.db}`:``]}),(0,S.jsx)(`div`,{className:`flex-1`}),(0,S.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40`,onClick:ye,disabled:!Q.Info,children:[W?(0,S.jsx)(s,{className:`size-3`}):(0,S.jsx)(re,{className:`size-3`}),e(W?`command.processList.copied`:`command.processList.copy`)]})]}),(0,S.jsx)(`pre`,{className:`max-h-32 overflow-auto whitespace-pre-wrap break-words px-3 py-2 font-mono text-xs`,children:Q.Info||(0,S.jsx)(`span`,{className:`italic text-muted-foreground`,children:e(`command.processList.noStatement`)})})]}),(0,S.jsxs)(_,{children:[(0,S.jsx)(f,{variant:`destructive`,onClick:()=>{$()},disabled:!F,children:e(`command.processList.killProcess`)}),(0,S.jsx)(f,{variant:`outline`,onClick:()=>Y(!1),children:e(`command.close`)})]})]})})}export{A as ProcessListDialog};
@@ -1 +0,0 @@
1
- import{_ as e,m as t,n}from"./ui-store-VGM_km-l.js";import{G as r,H as i,J as a,K as o,U as s,V as c,X as l,Y as u,Z as d,et as f,ut as p}from"./main-DS4S3IhV.js";import{a as m,f as h,l as g,m as _,o as v,s as y}from"./button-BRD_vJ8s.js";import{_ as b,a as x,o as S,r as C,t as w}from"./dist-BnghYOTd.js";import{r as T}from"./settings-store-hXzC7s8K.js";import{t as E}from"./use-engine-CkfCgSB4.js";import{a as D,n as O,o as k,r as A,t as j}from"./dialog-1MXGAorC.js";var M=m(`plug`,[[`path`,{d:`M12 22v-5`,key:`1ega77`}],[`path`,{d:`M15 8V2`,key:`18g5xt`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`,key:`1xoxul`}],[`path`,{d:`M9 8V2`,key:`14iosj`}]]),N=m(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),P=m(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),F=e(t(),1),I=1,L=.9,R=.8,z=.17,B=.1,ee=.999,te=.9999,ne=.99,re=/[\\\/_+.#"@\[\(\{&]/,ie=/[\\\/_+.#"@\[\(\{&]/g,ae=/[\s-]/,oe=/[\s-]/g;function V(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?I:ne;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=V(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=I:re.test(e.charAt(l-1))?(d*=R,p=e.slice(i,l-1).match(ie),p&&i>0&&(d*=ee**+p.length)):ae.test(e.charAt(l-1))?(d*=L,m=e.slice(i,l-1).match(oe),m&&i>0&&(d*=ee**+m.length)):(d*=z,i>0&&(d*=ee**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=te)),(d<B&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=V(e,t,n,r,l+1,a+2,o),f*B>d&&(d=f*B)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function se(e){return e.toLowerCase().replace(oe,` `)}function ce(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,V(e,t,se(e),se(t),0,0,{})}var H=`[cmdk-group=""]`,U=`[cmdk-group-items=""]`,le=`[cmdk-group-heading=""]`,ue=`[cmdk-item=""]`,de=`${ue}:not([aria-disabled="true"])`,W=`cmdk-item-select`,G=`data-value`,fe=(e,t,n)=>ce(e,t,n),pe=F.createContext(void 0),K=()=>F.useContext(pe),me=F.createContext(void 0),q=()=>F.useContext(me),he=F.createContext(void 0),ge=F.forwardRef((e,t)=>{let n=X(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=X(()=>new Set),i=X(()=>new Map),a=X(()=>new Map),o=X(()=>new Set),s=De(e),{label:c,children:l,value:u,onValueChange:d,filter:f,shouldFilter:p,loop:m,disablePointerSelection:h=!1,vimBindings:g=!0,..._}=e,v=b(),x=b(),S=b(),C=F.useRef(null),w=ke();Y(()=>{if(u!==void 0){let e=u.trim();n.current.value=e,T.emit()}},[u]),Y(()=>{w(6,j)},[]);let T=F.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)A(),O(),w(1,k);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(S);e?e.focus():(i=document.getElementById(v))==null||i.focus()}if(w(7,()=>{n.current.selectedItemId=M()?.id,T.emit()}),r||w(5,j),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}T.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),E=F.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,D(t,r)),w(2,()=>{O(),T.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),w(3,()=>{A(),O(),n.current.value||k(),T.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=M();w(4,()=>{A(),t?.getAttribute(`id`)===e&&k(),T.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:v,inputId:S,labelId:x,listInnerRef:C}),[]);function D(e,t){let r=s.current?.filter??fe;return e?r(e,n.current.search,t):0}function O(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=C.current;N().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(U);t?t.appendChild(e.parentElement===t?e:e.closest(`${U} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${U} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=C.current?.querySelector(`${H}[${G}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function k(){let e=N().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(G);T.setState(`value`,e||void 0)}function A(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=D(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function j(){var e;let t=M();t&&(t.parentElement?.firstChild===t&&((e=t.closest(H)?.querySelector(le))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function M(){return C.current?.querySelector(`${ue}[aria-selected="true"]`)}function N(){return Array.from(C.current?.querySelectorAll(de)||[])}function P(e){let t=N()[e];t&&T.setState(`value`,t.getAttribute(G))}function I(e){var t;let n=M(),r=N(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&T.setState(`value`,a.getAttribute(G))}function L(e){let t=M()?.closest(H),n;for(;t&&!n;)t=e>0?Te(t,H):Ee(t,H),n=t?.querySelector(de);n?T.setState(`value`,n.getAttribute(G)):I(e)}let R=()=>P(N().length-1),z=e=>{e.preventDefault(),e.metaKey?R():e.altKey?L(1):I(1)},B=e=>{e.preventDefault(),e.metaKey?P(0):e.altKey?L(-1):I(-1)};return F.createElement(y.div,{ref:t,tabIndex:-1,..._,"cmdk-root":``,onKeyDown:e=>{var t;(t=_.onKeyDown)==null||t.call(_,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:g&&e.ctrlKey&&z(e);break;case`ArrowDown`:z(e);break;case`p`:case`k`:g&&e.ctrlKey&&B(e);break;case`ArrowUp`:B(e);break;case`Home`:e.preventDefault(),P(0);break;case`End`:e.preventDefault(),R();break;case`Enter`:{e.preventDefault();let t=M();if(t){let e=new Event(W);t.dispatchEvent(e)}}}}},F.createElement(`label`,{"cmdk-label":``,htmlFor:E.inputId,id:E.labelId,style:je},c),Q(e,e=>F.createElement(me.Provider,{value:T},F.createElement(pe.Provider,{value:E},e))))}),_e=F.forwardRef((e,t)=>{let n=b(),r=F.useRef(null),i=F.useContext(he),a=K(),o=De(e),s=o.current?.forceMount??i?.forceMount;Y(()=>{if(!s)return a.item(n,i?.id)},[s]);let c=Oe(n,r,[e.value,e.children,r],e.keywords),l=q(),u=Z(e=>e.value&&e.value===c.current),d=Z(e=>s||a.filter()===!1?!0:!e.search||e.filtered.items.get(n)>0);F.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(W,f),()=>t.removeEventListener(W,f)},[d,e.onSelect,e.disabled]);function f(){var e,t;p(),(t=(e=o.current).onSelect)==null||t.call(e,c.current)}function p(){l.setState(`value`,c.current,!0)}if(!d)return null;let{disabled:m,value:g,onSelect:_,forceMount:v,keywords:x,...S}=e;return F.createElement(y.div,{ref:h(r,t),...S,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!m,"aria-selected":!!u,"data-disabled":!!m,"data-selected":!!u,onPointerMove:m||a.getDisablePointerSelection()?void 0:p,onClick:m?void 0:f},e.children)}),ve=F.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=b(),s=F.useRef(null),c=F.useRef(null),l=b(),u=K(),d=Z(e=>i||u.filter()===!1?!0:!e.search||e.filtered.groups.has(o));Y(()=>u.group(o),[]),Oe(o,s,[e.value,e.heading,c]);let f=F.useMemo(()=>({id:o,forceMount:i}),[i]);return F.createElement(y.div,{ref:h(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:!d||void 0},n&&F.createElement(`div`,{ref:c,"cmdk-group-heading":``,"aria-hidden":!0,id:l},n),Q(e,e=>F.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?l:void 0},F.createElement(he.Provider,{value:f},e))))}),ye=F.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=F.useRef(null),a=Z(e=>!e.search);return!n&&!a?null:F.createElement(y.div,{ref:h(i,t),...r,"cmdk-separator":``,role:`separator`})}),be=F.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=q(),o=Z(e=>e.search),s=Z(e=>e.selectedItemId),c=K();return F.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),F.createElement(y.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),xe=F.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=F.useRef(null),o=F.useRef(null),s=Z(e=>e.selectedItemId),c=K();return F.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),F.createElement(y.div,{ref:h(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:c.listId},Q(e,e=>F.createElement(`div`,{ref:h(o,c.listInnerRef),"cmdk-list-sizer":``},e)))}),Se=F.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return F.createElement(w,{open:n,onOpenChange:r},F.createElement(S,{container:o},F.createElement(x,{"cmdk-overlay":``,className:i}),F.createElement(C,{"aria-label":e.label,"cmdk-dialog":``,className:a},F.createElement(ge,{ref:t,...s}))))}),Ce=F.forwardRef((e,t)=>Z(e=>e.filtered.count===0)?F.createElement(y.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),we=F.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return F.createElement(y.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Q(e,e=>F.createElement(`div`,{"aria-hidden":!0},e)))}),J=Object.assign(ge,{List:xe,Item:_e,Input:be,Group:ve,Separator:ye,Dialog:Se,Empty:Ce,Loading:we});function Te(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Ee(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function De(e){let t=F.useRef(e);return Y(()=>{t.current=e}),t}var Y=typeof window>`u`?F.useEffect:F.useLayoutEffect;function X(e){let t=F.useRef();return t.current===void 0&&(t.current=e()),t}function Z(e){let t=q(),n=()=>e(t.snapshot());return F.useSyncExternalStore(t.subscribe,n,n)}function Oe(e,t,n,r=[]){let i=F.useRef(),a=K();return Y(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(G,s),i.current=s}),i}var ke=()=>{let[e,t]=F.useState(),n=X(()=>new Map);return Y(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Ae(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function Q({asChild:e,children:t},n){return e&&F.isValidElement(t)?F.cloneElement(Ae(t),{ref:t.ref},n(t.props.children)):n(t)}var je={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`},$=g();function Me({className:e,...t}){return(0,$.jsx)(J,{"data-slot":`command`,className:v(`flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground`,e),...t})}function Ne({title:e=`Command Palette`,description:t=`Search for a command to run...`,children:n,className:r,showCloseButton:i=!0,...a}){return(0,$.jsxs)(j,{...a,children:[(0,$.jsxs)(D,{className:`sr-only`,children:[(0,$.jsx)(k,{children:e}),(0,$.jsx)(A,{children:t})]}),(0,$.jsx)(O,{className:v(`overflow-hidden p-0`,r),showCloseButton:i,children:(0,$.jsx)(Me,{className:`**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5`,children:n})})]})}function Pe({className:e,...t}){return(0,$.jsxs)(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-9 items-center gap-2 border-b px-3`,children:[(0,$.jsx)(a,{className:`size-4 shrink-0 opacity-50`}),(0,$.jsx)(J.Input,{"data-slot":`command-input`,className:v(`flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,e),...t})]})}function Fe({className:e,...t}){return(0,$.jsx)(J.List,{"data-slot":`command-list`,className:v(`max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto`,e),...t})}function Ie({...e}){return(0,$.jsx)(J.Empty,{"data-slot":`command-empty`,className:`py-6 text-center text-sm`,...e})}function Le({className:e,...t}){return(0,$.jsx)(J.Group,{"data-slot":`command-group`,className:v(`overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground`,e),...t})}function Re({className:e,...t}){return(0,$.jsx)(J.Item,{"data-slot":`command-item`,className:v(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...t})}function ze({className:e,...t}){return(0,$.jsx)(`span`,{"data-slot":`command-shortcut`,className:v(`ml-auto text-xs tracking-widest text-muted-foreground`,e),...t})}function Be(){let{t:e}=_(),{activeDialog:t,closeDialog:a,openDialog:m}=n(),{executeCurrentQuery:h,addNewQueryTab:g,disconnectActive:v}=c(),{capabilities:y}=E(),b=T(),x=t===`quick-command`,S=(0,F.useCallback)(e=>{a(),e()},[a]),C=[{heading:e(`palette.groups.connection`),commands:[...b?[{id:`connect`,label:e(`palette.commands.connect`),icon:M,action:()=>S(()=>m(`connect`))}]:[],{id:`disconnect`,label:e(`palette.commands.disconnect`),icon:s,action:()=>S(()=>{v()})}]},{heading:e(`palette.groups.query`),commands:[{id:`execute`,label:e(`palette.commands.executeQuery`),icon:d,shortcut:`F9`,action:()=>S(()=>{h()})},{id:`new-tab`,label:e(`palette.commands.newQueryTab`),icon:l,action:()=>S(()=>g())}]},{heading:e(`palette.groups.database`),commands:[{id:`create-db`,capability:`multipleDatabases`,label:e(`palette.commands.createDatabase`),icon:f,action:()=>S(()=>m(`create-database`))}]},{heading:e(`palette.groups.table`),commands:[{id:`create-table`,label:e(`palette.commands.createTable`),icon:o,action:()=>S(()=>m(`create-table`))},{id:`alter-table`,label:e(`palette.commands.alterTable`),icon:P,action:()=>S(()=>m(`alter-table`))}]},{heading:e(`palette.groups.tools`),commands:[{id:`process-list`,capability:`processList`,label:e(`palette.commands.processList`),icon:p,action:()=>S(()=>m(`process-list`))},{id:`variables`,capability:`variables`,label:e(`palette.commands.serverVariables`),icon:N,action:()=>S(()=>m(`variables`))},{id:`status`,capability:`status`,label:e(`palette.commands.serverStatus`),icon:r,action:()=>S(()=>m(`status`))},{id:`flush`,capability:`flush`,label:e(`palette.commands.flush`),icon:u,action:()=>S(()=>m(`flush`))},{id:`user-manager`,capability:`users`,label:e(`palette.commands.userManager`),icon:i,action:()=>S(()=>m(`user-manager`))}]}];(0,F.useEffect)(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key===`k`&&(e.preventDefault(),x?a():m(`quick-command`))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[x,m,a]);function w(e){e||a()}return(0,$.jsxs)(Ne,{open:x,onOpenChange:w,title:e(`palette.title`),description:e(`palette.description`),children:[(0,$.jsx)(Pe,{placeholder:e(`palette.inputPlaceholder`)}),(0,$.jsxs)(Fe,{children:[(0,$.jsx)(Ie,{children:e(`palette.empty`)}),C.map(e=>({...e,commands:e.commands.filter(e=>!e.capability||y[e.capability])})).filter(e=>e.commands.length>0).map(e=>(0,$.jsx)(Le,{heading:e.heading,children:e.commands.map(e=>(0,$.jsxs)(Re,{onSelect:e.action,children:[(0,$.jsx)(e.icon,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{children:e.label}),e.shortcut&&(0,$.jsx)(ze,{children:e.shortcut})]},e.id))},e.heading))]})]})}export{Be as QuickCommandPalette};
@@ -1,2 +0,0 @@
1
- import{_ as e,m as t,n,t as r}from"./ui-store-VGM_km-l.js";import{$ as i,Q as a,f as o,h as s,m as c,nt as l,p as u,rt as d,st as f}from"./main-DS4S3IhV.js";import{a as p,l as m,m as h,t as g}from"./button-BRD_vJ8s.js";import{t as ee}from"./connection-store-Cn79Ey1H.js";import{n as _}from"./settings-store-hXzC7s8K.js";import{r as v}from"./database-Cl9EPqA9.js";import{c as y,t as b}from"./query-execution-v3CrkSv7.js";import{n as x}from"./use-engine-CkfCgSB4.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./dialog-1MXGAorC.js";var O=p(`wand-sparkles`,[[`path`,{d:`m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72`,key:`ul74o6`}],[`path`,{d:`m14 7 3 3`,key:`1r5n42`}],[`path`,{d:`M5 6v4`,key:`ilb8ba`}],[`path`,{d:`M19 14v4`,key:`blhpug`}],[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M7 8H3`,key:`zfb6yr`}],[`path`,{d:`M21 16h-4`,key:`1cnmox`}],[`path`,{d:`M11 3H9`,key:`1obp7u`}]]),k=e(t(),1);function A(e){let t=e.slice(e.indexOf(`(`)+1,e.lastIndexOf(`)`)),n=[],r=/'((?:[^']|'')*)'/g,i;for(;i=r.exec(t);)n.push(i[1].replaceAll(`''`,`'`));return n}function j(e,t={}){let{oracleDate:n=!1}=t,r=e.type.trim(),i=r.toLowerCase(),a=/\bunsigned\b/.test(i);if(/^enum\(/.test(i))return{kind:`enum`,options:A(r)};if(/^set\(/.test(i))return{kind:`set`,options:A(r)};if(/^(tinyint\(1\)|bool|boolean|bit\(1\)|bit)(?![\w(])/.test(i))return{kind:`boolean`};let o=/^number(?:\((\d+|\*)(?:,\s*(-?\d+))?\))?$/.exec(i);if(o)return o[2]&&Number(o[2])>0?{kind:`decimal`}:o[1]?{kind:`integer`}:{kind:`decimal`};if(/^(tinyint|smallint|mediumint|int|integer|bigint|int2|int4|int8|serial|bigserial|smallserial)\b/.test(i))return{kind:`integer`,unsigned:a};if(/^(decimal|numeric|float|double|real|money|float4|float8|double precision)\b/.test(i))return{kind:`decimal`,unsigned:a};if(/^(datetime2|datetime|timestamp|smalldatetime|datetimeoffset)\b/.test(i))return{kind:`datetime`};if(/^date\b/.test(i))return{kind:n?`datetime`:`date`};if(/^(time|timetz)\b/.test(i))return{kind:`time`};if(/^(json|jsonb)\b/.test(i))return{kind:`json`};if(/^(uuid|uniqueidentifier)\b/.test(i))return{kind:`uuid`};if(/^(blob|tinyblob|mediumblob|longblob|binary|varbinary|bytea|raw|image|bfile)\b/.test(i))return{kind:`binary`};if(/^(text|ntext|tinytext|mediumtext|longtext|clob|nclob|long)\b/.test(i)||/^n?(?:var)?char2?\(max\)/.test(i))return{kind:`text`};let s=/^n?(?:var)?char2?(?:acter)?(?:\s+varying)?\((\d+)(?:\s+(?:char|byte))?\)/.exec(i);return s?{kind:`string`,maxLength:Number(s[1])}:{kind:`string`}}var M=/auto_increment|identity|generated/i;function N(e){return M.test(e.extra)||/^(serial|bigserial|smallserial)\b/i.test(e.type)?{mode:`auto`,text:``}:e.defaultValue===null?e.nullable?{mode:`null`,text:``}:{mode:`value`,text:``}:{mode:`default`,text:``}}function P(e){return e==null?{mode:`keep`,text:``}:{mode:`keep`,text:F(e)}}function F(e){if(e==null)return``;if(typeof e==`object`){if(ArrayBuffer.isView(e))return``;if(e instanceof Date)return e.toISOString();try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function I(e,t){let n=t.trim();switch(e.kind){case`integer`:{if(!/^[+-]?\d+$/.test(n))return{error:`integer`};if(e.unsigned&&n.startsWith(`-`))return{error:`unsigned`};let t=Number(n);return{value:Number.isSafeInteger(t)?t:BigInt(n)}}case`decimal`:return n===``||Number.isNaN(Number(n))?{error:`number`}:{value:Number(n)};case`boolean`:return{value:n===`true`||n===`1`};case`json`:try{return{value:JSON.parse(n===``?`null`:n)}}catch{return{error:`json`}}case`set`:return{value:n};case`date`:return n&&!/^\d{4}-\d{2}-\d{2}$/.test(n)?{error:`date`}:{value:n};case`datetime`:return n&&!/^\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2}(:\d{2}(\.\d+)?)?)?([+-]\d{2}:?\d{2}|Z)?$/.test(n)?{error:`datetime`}:{value:n};case`time`:return n&&!/^-?\d{1,3}:\d{2}(:\d{2}(\.\d+)?)?$/.test(n)?{error:`time`}:{value:n};default:return{value:t}}}var L=m(),R={integer:`result.rowForm.invalid.integer`,unsigned:`result.rowForm.invalid.unsigned`,number:`result.rowForm.invalid.number`,json:`result.rowForm.invalid.json`,date:`result.rowForm.invalid.date`,datetime:`result.rowForm.invalid.datetime`,time:`result.rowForm.invalid.time`};function z(e){return String(e).padStart(2,`0`)}function B(e){let t=new Date,n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`,r=`${z(t.getHours())}:${z(t.getMinutes())}:${z(t.getSeconds())}`;return e===`date`?n:e===`time`?r:`${n} ${r}`}function V(e){let t=/^(\d{4})-(\d{2})-(\d{2})/.exec(e.trim());if(!t)return;let n=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(n.getTime())?void 0:n}function H({spec:e,state:t,disabled:n,onText:r}){let{t:i}=h(),a=`w-full rounded border bg-background px-2 py-1 text-sm font-mono outline-none focus:ring-1 focus:ring-primary disabled:opacity-50`;switch(e.kind){case`boolean`:return(0,L.jsxs)(`select`,{className:a,value:t.text===`true`||t.text===`1`?`true`:`false`,onChange:e=>r(e.target.value),disabled:n,children:[(0,L.jsx)(`option`,{value:`true`,children:`TRUE`}),(0,L.jsx)(`option`,{value:`false`,children:`FALSE`})]});case`enum`:return(0,L.jsxs)(`select`,{className:a,value:t.text,onChange:e=>r(e.target.value),disabled:n,children:[!e.options?.includes(t.text)&&(0,L.jsx)(`option`,{value:t.text,children:t.text||`—`}),e.options?.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))]});case`set`:{let i=new Set(t.text.split(`,`).map(e=>e.trim()).filter(Boolean));return(0,L.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 rounded border bg-background px-2 py-1.5`,children:e.options?.map(t=>(0,L.jsxs)(`label`,{className:`flex items-center gap-1 text-xs font-mono`,children:[(0,L.jsx)(`input`,{type:`checkbox`,className:`accent-primary`,checked:i.has(t),disabled:n,onChange:n=>{let a=new Set(i);n.target.checked?a.add(t):a.delete(t),r(e.options.filter(e=>a.has(e)).join(`,`))}}),t]},t))})}case`integer`:case`decimal`:return(0,L.jsx)(`input`,{className:`${a} tabular-nums`,inputMode:`decimal`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`integer`?`0`:`0.00`});case`date`:case`datetime`:{let[d,p]=t.text.trim().split(/[ T]/);return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:e.kind===`date`?`YYYY-MM-DD`:`YYYY-MM-DD HH:MM:SS`}),(0,L.jsxs)(u,{children:[(0,L.jsx)(s,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background p-1.5 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,title:i(`result.rowForm.pickDate`),children:(0,L.jsx)(f,{className:`size-3.5`})})}),(0,L.jsx)(c,{className:`w-auto p-0`,align:`end`,children:(0,L.jsx)(o,{mode:`single`,selected:V(d??``),defaultMonth:V(d??``),onSelect:t=>{if(!t)return;let n=`${t.getFullYear()}-${z(t.getMonth()+1)}-${z(t.getDate())}`;r(e.kind===`date`?n:`${n} ${p||`00:00:00`}`)}})})]}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(e.kind)),title:i(`result.rowForm.now`),children:(0,L.jsx)(l,{className:`size-3.5`})})]})}case`time`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`HH:MM:SS`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(B(`time`)),title:i(`result.rowForm.now`),children:(0,L.jsx)(l,{className:`size-3.5`})})]});case`json`:{let e=!0;try{t.text.trim()&&JSON.parse(t.text)}catch{e=!1}return(0,L.jsxs)(`div`,{className:`space-y-1`,children:[(0,L.jsx)(`textarea`,{className:`${a} min-h-[96px] resize-y text-xs ${e?``:`border-destructive`}`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1,placeholder:`{}`}),(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n||!e||!t.text.trim(),onClick:()=>{try{r(JSON.stringify(JSON.parse(t.text),null,2))}catch{}},children:[(0,L.jsx)(O,{className:`size-3`}),i(`result.rowForm.formatJson`)]}),!e&&(0,L.jsx)(`span`,{className:`text-[10px] text-destructive`,children:i(`result.rowForm.invalid.json`)})]})]})}case`text`:return(0,L.jsx)(`textarea`,{className:`${a} min-h-[72px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1});case`binary`:return(0,L.jsx)(`div`,{className:`rounded border bg-muted/40 px-2 py-1 text-xs italic text-muted-foreground`,children:i(`result.rowForm.binaryUnsupported`)});case`uuid`:return(0,L.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,L.jsx)(`input`,{className:`${a} flex-1`,value:t.text,onChange:e=>r(e.target.value),disabled:n,placeholder:`00000000-0000-0000-0000-000000000000`}),(0,L.jsx)(`button`,{type:`button`,className:`rounded border bg-background px-1.5 py-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,disabled:n,onClick:()=>r(crypto.randomUUID()),title:i(`result.rowForm.generateUuid`),children:(0,L.jsx)(O,{className:`size-3.5`})})]});default:{let i=t.text.length>80||t.text.includes(`
2
- `);return(0,L.jsxs)(`div`,{className:`space-y-0.5`,children:[i?(0,L.jsx)(`textarea`,{className:`${a} min-h-[56px] resize-y`,value:t.text,onChange:e=>r(e.target.value),disabled:n,spellCheck:!1}):(0,L.jsx)(`input`,{className:a,value:t.text,onChange:e=>r(e.target.value),disabled:n,maxLength:e.maxLength}),e.maxLength&&(0,L.jsxs)(`div`,{className:`text-right text-[10px] tabular-nums ${t.text.length>e.maxLength?`text-destructive`:`text-muted-foreground`}`,children:[t.text.length,`/`,e.maxLength]})]})}}}function U(){let{t:e}=h(),t=r(`row-form`),o=n(e=>e.closeDialog),s=n(e=>e.setFooterMessage),c=x(t?.connectionId??``),l=ee(e=>t?e.transactionOpen[t.connectionId]:!1),[u,f]=(0,k.useState)(null),[p,m]=(0,k.useState)(null),[O,A]=(0,k.useState)({}),[M,F]=(0,k.useState)({}),[z,B]=(0,k.useState)(null),[V,U]=(0,k.useState)(!1),W=t?.mode===`edit`;(0,k.useEffect)(()=>{if(!t)return;let e=!1,n=v(t.serverConnectionId);return c.introspect.listColumns(n,t.database,t.table).then(n=>{if(e)return;f(n);let r={};for(let e of n)if(t.mode===`edit`){let n=t.fields.find(t=>t.orgName===e.name);r[e.name]=P(n?t.row?.[n.name]:void 0)}else r[e.name]=N(e);A(r)}).catch(t=>{e||m(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t?.serverConnectionId,t?.database,t?.table,t?.mode]);let G=(0,k.useMemo)(()=>new Map((u??[]).map(e=>[e.name,j(e,{oracleDate:c.id===`oracle`})])),[u,c.id]),K=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{...n[e],mode:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),q=(0,k.useCallback)((e,t)=>{A(n=>({...n,[e]:{mode:`value`,text:t}})),F(t=>{let n={...t};return delete n[e],n})},[]),J=(0,k.useMemo)(()=>({__default:!0}),[]),Y=(0,k.useCallback)(()=>{if(!u)return null;let t=new Map,n={};for(let r of u){let i=O[r.name],a=G.get(r.name);if(!i||i.mode===`auto`||i.mode===`keep`)continue;if(i.mode===`null`){t.set(r.name,null);continue}if(i.mode==="default"){t.set(r.name,J);continue}let o=I(a,i.text);if(`error`in o){n[r.name]=e(R[o.error]??`result.rowForm.invalid.number`);continue}if(a.maxLength&&typeof o.value==`string`&&o.value.length>a.maxLength){n[r.name]=e(`result.rowForm.invalid.length`,{max:a.maxLength});continue}t.set(r.name,o.value)}return F(n),Object.keys(n).length>0?null:{values:t}},[u,O,G,e,J]),X=(0,k.useCallback)(e=>{if(!t)return null;let n=e=>e===J?`DEFAULT`:c.quoteLiteral(e);if(t.mode===`insert`){let r=[...e];return r.length===0?c.getQuery(`INSERT_DEFAULT_VALUES`,t.database,t.table):c.getQuery(`INSERT_TABLE`,t.database,t.table,r.map(([e])=>c.quoteIdentifier(e)).join(`, `),r.map(([,e])=>n(e)).join(`, `))}return!t.where||e.size===0?null:c.getQuery(`UPDATE_TABLE`,t.database,t.table,[...e].map(([e,t])=>`${c.quoteIdentifier(e)} = ${n(t)}`).join(`, `),t.where)},[t,c,J]),Z=(0,k.useMemo)(()=>{if(!u)return``;let e=new Map;for(let t of u){let n=O[t.name];if(!(!n||n.mode===`auto`||n.mode===`keep`)){if(n.mode===`null`)e.set(t.name,null);else if(n.mode==="default")e.set(t.name,J);else{let r=I(G.get(t.name),n.text);e.set(t.name,`error`in r?n.text:r.value)}}}return X(e)??``},[u,O,G,X,J]),Q=e=>{let n={};for(let[r,i]of e){if(i===J)continue;let e=t?.fields.find(e=>e.orgName===r);n[e?.name??r]=typeof i==`bigint`?i.toString():i}return n},te=()=>{let e=Y();!e||!t||(t.onStage?.(t.mode,Q(e.values)),o())},ne=async()=>{let r=Y();if(!r||!t)return;let i=X(r.values);if(!i){B(e(`result.rowForm.nothingToWrite`));return}U(!0),B(null);try{if(_.getState().previewGridCommit&&!await n.getState().requestDestructiveConfirm({title:e(W?`result.rowForm.confirmUpdateTitle`:`result.rowForm.confirmInsertTitle`,{table:`${t.database}.${t.table}`}),statements:[i],confirmLabel:e(W?`result.rowForm.update`:`result.rowForm.insert`)}))return;await y(t.connectionId,i,{database:t.database,skipDestructiveConfirm:!0}),s(e(W?`result.rowForm.updated`:`result.rowForm.inserted`,{table:`${t.database}.${t.table}`})),t.onCommitted?.(t.mode,Q(r.values)),o()}catch(e){if(e instanceof b)return;B(e instanceof Error?e.message:String(e))}finally{U(!1)}};if(!t)return null;let $=(e,t,n,r)=>(0,L.jsx)(`button`,{type:`button`,className:`rounded px-1.5 py-0.5 text-[10px] font-medium ${r===t?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`}`,onClick:()=>K(e,t),children:n});return(0,L.jsx)(D,{open:!0,onOpenChange:e=>{e||o()},children:(0,L.jsxs)(w,{className:`flex max-h-[90vh] flex-col sm:max-w-[860px]`,children:[(0,L.jsxs)(S,{children:[(0,L.jsx)(T,{children:e(W?`result.rowForm.editTitle`:`result.rowForm.insertTitle`)}),(0,L.jsxs)(E,{className:`font-mono text-xs`,children:[t.database,`.`,t.table]})]}),(0,L.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto rounded-md border`,children:[p&&(0,L.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:p}),!u&&!p&&(0,L.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground`,children:[(0,L.jsx)(a,{className:`size-4 animate-spin`}),e(`result.rowForm.loading`)]}),u&&(0,L.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-sm`,children:[(0,L.jsx)(`thead`,{className:`sticky top-0 z-10 bg-background`,children:(0,L.jsxs)(`tr`,{className:`text-left text-[10px] uppercase tracking-wide text-muted-foreground`,children:[(0,L.jsx)(`th`,{className:`w-[38%] border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colColumn`)}),(0,L.jsx)(`th`,{className:`border-b px-2 py-1.5 font-medium`,children:e(`result.rowForm.colValue`)})]})}),(0,L.jsx)(`tbody`,{children:u.map(n=>{let r=O[n.name]??{mode:`value`,text:``},a=G.get(n.name),o=r.mode===`auto`,s=M[n.name],c=n.key===`PRI`,l=t.fields.find(e=>e.orgName===n.name),u=!!l&&!!t.row&&t.row[l.name]===null;return(0,L.jsxs)(`tr`,{className:`align-top ${s?`bg-destructive/5`:`hover:bg-muted/30`}`,children:[(0,L.jsxs)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,L.jsx)(`span`,{className:`truncate font-mono text-sm font-medium`,title:n.name,children:n.name}),c&&(0,L.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5 rounded border border-catppuccin-yellow/50 px-1 text-[9px] font-semibold text-catppuccin-yellow`,children:[(0,L.jsx)(i,{className:`size-2.5`}),`PK`]})]}),(0,L.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] text-muted-foreground`,children:[(0,L.jsx)(`span`,{className:`rounded bg-muted px-1 py-px font-mono`,children:n.type}),!n.nullable&&(0,L.jsx)(`span`,{children:`NOT NULL`}),n.defaultValue!==null&&(0,L.jsxs)(`span`,{className:`font-mono`,title:e(`result.rowForm.defaultValue`),children:[`= `,n.defaultValue]}),n.extra&&(0,L.jsx)(`span`,{children:n.extra})]}),n.comment&&(0,L.jsx)(`div`,{className:`mt-0.5 text-[10px] text-muted-foreground/80`,children:n.comment})]}),(0,L.jsx)(`td`,{className:`border-b border-border/60 px-2 py-2`,children:(0,L.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[r.mode===`keep`?(0,L.jsx)(`div`,{className:`cursor-text truncate rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs text-muted-foreground`,onClick:()=>K(n.name,`value`),title:e(`result.rowForm.clickToChange`),children:u?(0,L.jsx)(`span`,{className:`italic`,children:`NULL`}):r.text||(0,L.jsx)(`span`,{className:`italic`,children:e(`result.rowForm.empty`)})}):r.mode===`value`?(0,L.jsx)(H,{spec:a,state:r,disabled:!1,onText:e=>q(n.name,e)}):(0,L.jsx)(`div`,{className:`rounded border border-dashed bg-muted/30 px-2 py-1 font-mono text-xs italic text-muted-foreground`,children:r.mode===`null`?`NULL`:r.mode==="default"?`DEFAULT (${n.defaultValue??``})`:e(`result.rowForm.autoHint`)}),s&&(0,L.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-[11px] text-destructive`,children:[(0,L.jsx)(d,{className:`size-3`}),s]})]}),(0,L.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 rounded border bg-background p-0.5`,children:[W&&$(n.name,`keep`,e(`result.rowForm.mode.keep`),r.mode),(o||!W&&/auto_increment|identity/i.test(n.extra))&&$(n.name,`auto`,e(`result.rowForm.mode.auto`),r.mode),$(n.name,`value`,e(`result.rowForm.mode.value`),r.mode),n.nullable&&$(n.name,`null`,`NULL`,r.mode),n.defaultValue!==null&&$(n.name,`default`,`DEFAULT`,r.mode)]})]})})]},n.name)})})]})]}),u&&(0,L.jsxs)(`div`,{className:`shrink-0 rounded-md border bg-muted/30`,children:[(0,L.jsx)(`div`,{className:`border-b px-3 py-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e(`result.rowForm.preview`)}),(0,L.jsx)(`pre`,{className:`max-h-24 overflow-auto whitespace-pre-wrap break-words px-3 py-2 font-mono text-xs`,children:Z||(0,L.jsx)(`span`,{className:`italic text-muted-foreground`,children:e(`result.rowForm.nothingToWrite`)})})]}),z&&(0,L.jsx)(`div`,{className:`shrink-0 rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:z}),(0,L.jsxs)(C,{className:`items-center`,children:[l&&(0,L.jsx)(`span`,{className:`mr-auto text-[11px] text-catppuccin-yellow`,children:e(`result.rowForm.inTransaction`)}),(0,L.jsx)(g,{variant:`outline`,onClick:()=>o(),disabled:V,children:e(`command.close`)}),t.onStage&&(0,L.jsx)(g,{variant:`outline`,onClick:te,disabled:V||!u,title:e(`result.rowForm.stageHint`),children:e(W?`result.rowForm.stageEdit`:`result.rowForm.stageInsert`)}),(0,L.jsxs)(g,{onClick:()=>void ne(),disabled:V||!u,children:[V&&(0,L.jsx)(a,{className:`mr-1 size-3.5 animate-spin`}),e(W?`result.rowForm.update`:`result.rowForm.insert`)]})]})]})})}export{U as RowFormDialog};
@@ -1 +0,0 @@
1
- import{c as e,n as t,r as n}from"./ui-store-VGM_km-l.js";import{a as r,i}from"./i18n-DFsTrccf.js";import{i as a,n as o,r as s,t as c}from"./app-storage-B6v72zLH.js";import{t as l}from"./connection-store-Cn79Ey1H.js";import{n as u}from"./query-store-Cu277RoH.js";function d(e,t){let n=globalThis,r=`__planche_${e}`;return r in n||(n[r]=t()),n[r]}var f=new Set([`neon`,`supabase`]);function p(e){return e===`postgres`||f.has(e)}var ee=`_rowid_`,te=`http://127.0.0.1:8888`,m=d(`tunnelAgent`,()=>({url:null,token:null}));function ne(e){m.url=e.url?.replace(/\/+$/,``)||null,m.token=e.token?.trim()||null}var re=new Set([`127.0.0.1`,`localhost`,`[::1]`,`::1`]);function ie(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&re.has(t.hostname)}catch{return!1}}function ae(e){try{return typeof window<`u`&&new URL(e).origin===window.location.origin}catch{return!1}}function oe(e){return ie(e)||ae(e)}function se(){return m.url!==null&&m.url!==`/api`&&!oe(m.url)}function h(){return m.url??te}function ce(){let e=h();return e===`/api`?r.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):e}async function le(){let e=ce(),t;try{let e={};m.token&&(e.Authorization=`Bearer ${m.token}`),t=await(await fetch(`${h()}/health`,{cache:`no-store`,headers:e})).json()}catch(t){return{state:`offline`,url:e,message:t instanceof Error?t.message:String(t)}}return t.name!==`planche`||typeof t.version!=`string`||!/^[\w.+-]{1,32}$/.test(t.version)?{state:`offline`,url:e,message:r.t(`services.agent.notPlanche`)}:t.protocolVersion===2?t.authorized===!1||m.token===null&&t.authorized===void 0?{state:`unauthorized`,url:e,version:t.version}:{state:`online`,url:e,version:t.version,activeConnections:t.activeConnections??0,...t.gateway?{gateway:t.gateway}:{}}:{state:`outdated`,url:e,version:t.version,protocolVersion:t.protocolVersion??0}}async function ue(){let e=await fetch(`${h()}/profiles`,{cache:`no-store`,headers:b()}),t=await e.json().catch(()=>null);if(!e.ok||!t||t.success!==!0)throw new x(t?.message??r.t(`services.agent.httpError`,{status:e.status,statusText:e.statusText}),e.status);return t}function g(e){let t=e.ssh;if(t?.enabled)return{host:t.host,port:t.port,user:t.user,auth:t.auth,password:t.auth===`password`?t.password??``:void 0,privateKey:t.auth===`key`?t.privateKey:void 0,passphrase:t.auth===`key`&&t.passphrase||void 0}}function _(e){return e.gatewayProfile?{profile:e.gatewayProfile}:e.dbms===`sqlite`?{driver:`sqlite`,file:e.file??``,createIfMissing:e.createIfMissing??!1,readonly:e.readOnly??!1}:e.dbms===`d1`?{driver:`d1`,accountId:e.accountId??``,databaseId:e.databaseId??``,apiToken:e.pass}:e.dbms===`postgres`?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:g(e)}:f.has(e.dbms)?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:!0,sslVerify:e.dbms===`neon`}:e.dbms===`mssql`?{driver:`mssql`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`master`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:g(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:g(e)}:{driver:`mysql`,host:e.host,port:e.port,user:e.user,password:e.pass,charset:e.charset===`utf8`?`utf8mb4`:e.charset,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:g(e)}}var v=d(`tunnelAuthTokens`,()=>new Map);function de(e,t){let n=t?.trim();n?v.set(e,n):v.delete(e)}function y(e){return e?.trim()||m.token||void 0}function b(e){let t={"Content-Type":`application/json`},n=y(e);return n&&(t.Authorization=`Bearer ${n}`),t}var x=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function fe(e){if(!(e instanceof x)||e.status!==409)return null;let t=e.body,n=t?.hostKey;if(t?.code!==`host-key-unknown`||!n)return null;let r=typeof n.host==`string`&&/^[A-Za-z0-9._:[\]-]{1,253}$/.test(n.host)?n.host:null,i=typeof n.type==`string`&&/^[\w.@-]{1,64}$/.test(n.type)?n.type:null,a=typeof n.fingerprint==`string`&&/^SHA256:[A-Za-z0-9+/]{43}$/.test(n.fingerprint)?n.fingerprint:null,o=Number.isInteger(n.port)&&n.port>0&&n.port<65536?n.port:null;return r&&i&&a&&o?{host:r,port:o,type:i,fingerprint:a}:null}async function pe(e,t){let n=await fetch(`${e.replace(/\/+$/,``)}/pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:t})}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success||typeof i.token!=`string`)throw Error(i?.message??r.t(`services.agent.httpError`,{status:n.status,statusText:n.statusText}));return i.token}async function S(e,t,n){let i;try{i=await fetch(`${h()}${e}`,{method:`POST`,headers:b(n),body:JSON.stringify(t)})}catch(e){throw Error(r.t(`services.agent.unreachable`,{url:ce(),message:e instanceof Error?e.message:String(e)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new x(a?.message??r.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status,a);if(!a)throw Error(r.t(`services.agent.emptyResponse`));return a}async function me(e,t){let n=await S(`/connect`,e,t);return n.success&&n.connectionId&&(de(n.connectionId,y(t)),ge()),n}async function he(e,t,n){let r=performance.now(),i=await S(`/query`,{connectionId:e,sql:t,database:n},v.get(e));return i.execTime||=Math.round(performance.now()-r),i}function ge(){if(typeof window>`u`)return;let e=d(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of v)fetch(`${h()}/disconnect`,{method:`POST`,headers:b(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function _e(e){try{await S(`/disconnect`,{connectionId:e},v.get(e))}finally{v.delete(e)}}async function ve(e,t){return S(`/test-connection`,e,t)}var C=0;function ye(e){C>=3||(async()=>{try{(await fetch(`${h()}/usage`,{method:`POST`,headers:b(),body:JSON.stringify({feature:e})})).ok?C=0:C+=1}catch{C+=1}})()}function w(e,t,n){return e.map(e=>e.id===t?n(e):e.children.length>0?{...e,children:w(e.children,t,n)}:e)}function be(e,t){for(let n of e){if(n.id===t)return n;let e=be(n.children,t);if(e)return e}return null}function T(e,t,n){let r=new Set(e??[]);if(n)r.add(t);else for(let e of r)(e===t||e.startsWith(`${t}/`))&&r.delete(e);return[...r]}var xe=n()(a(e=>({trees:{},selectedNodeId:{},expandedIds:{},setTree:(t,n)=>e(e=>({trees:{...e.trees,[t]:n}})),setChildren:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:T(e.expandedIds[t],n,!0)},trees:{...e.trees,[t]:w(i,n,e=>({...e,children:r,isLoading:!1,isExpanded:!0,metadata:{...e.metadata,count:r.length}}))}}:e}),setNodeMetadata:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:w(i,n,e=>({...e,metadata:{...e.metadata,...r}}))}}:e}),toggleExpanded:(t,n)=>e(e=>{let r=e.trees[t];if(!r)return e;let i=!be(r,n)?.isExpanded;return{expandedIds:{...e.expandedIds,[t]:T(e.expandedIds[t],n,i)},trees:{...e.trees,[t]:w(r,n,e=>({...e,isExpanded:i}))}}}),setExpanded:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{expandedIds:{...e.expandedIds,[t]:T(e.expandedIds[t],n,r)},trees:{...e.trees,[t]:w(i,n,e=>({...e,isExpanded:r}))}}:e}),setSelected:(t,n)=>e(e=>({selectedNodeId:{...e.selectedNodeId,[t]:n}})),setLoading:(t,n,r)=>e(e=>{let i=e.trees[t];return i?{trees:{...e.trees,[t]:w(i,n,e=>({...e,isLoading:r}))}}:e}),removeTree:t=>e(e=>{let n={...e.trees},r={...e.selectedNodeId};return delete n[t],delete r[t],{trees:n,selectedNodeId:r}})}),{name:`planche-schema`,storage:c(),partialize:e=>({selectedNodeId:e.selectedNodeId,expandedIds:e.expandedIds})})),Se=32,E=24,Ce=931071618,D=931071619,O=(e,t)=>(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0,we=(e,t)=>(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0;function k(e,t,n,r,i=0,a=0){let o=r?O:we;for(let r=t;r<t+n;r+=8)i=i+o(e,r)+a>>>0,a=a+o(e,r+4)+i>>>0;return[i,a]}function Te(e){if(e.byteLength<Se)return null;let t=O(e,0);if(t!==Ce&&t!==D)return null;let n=t===D,r=O(e,8);if(r<512||r>65536||r&r-1)return null;let i=O(e,16),a=O(e,20),[o,s]=k(e,0,24,n);if(o!==O(e,24)||s!==O(e,28))return null;let c=E+r,l=new Map,u=new Map,d=0,f=0,p=0;for(let t=Se;t+c<=e.byteLength&&!(O(e,t+8)!==i||O(e,t+12)!==a||([o,s]=k(e,t,8,n,o,s),[o,s]=k(e,t+E,r,n,o,s),o!==O(e,t+16)||s!==O(e,t+20)));t+=c){let n=O(e,t),r=O(e,t+4);if(n===0)break;if(u.set(n,e.subarray(t+E,t+c)),p++,r>0){for(let[e,t]of u)l.set(e,t);u.clear(),d=r,f+=p,p=0}}return{pageSize:r,dbSizePages:d,pages:l,committedFrames:f}}function A(e,t){let n=Te(t);if(!n||n.committedFrames===0)return{bytes:e,appliedFrames:0};let{pageSize:r,dbSizePages:i,pages:a}=n,o=Math.max(i*r,e.byteLength-e.byteLength%r),s=new Uint8Array(o);s.set(e.subarray(0,Math.min(e.byteLength,o)));for(let[e,t]of a){let n=(e-1)*r;n+r<=o&&s.set(t,n)}return{bytes:i>0?s.subarray(0,i*r):s,appliedFrames:n.committedFrames}}var Ee=`planche-file-handles`,j=`handles`;function De(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB unavailable`));return}let n=indexedDB.open(Ee,1);n.onupgradeneeded=()=>n.result.createObjectStore(j),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function M(e,t){return De().then(n=>new Promise((r,i)=>{let a=t(n.transaction(j,e).objectStore(j));a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error)}))}var N=e=>`${e}:wal`;async function P(e,t){try{await M(`readwrite`,n=>n.put(t,e))}catch{}}async function F(e){try{return await M(`readonly`,t=>t.get(e))??null}catch{return null}}async function I(e){try{await M(`readwrite`,t=>t.delete(e))}catch{}}async function L(e,t){let n=e,r={mode:`readwrite`};try{if(n.queryPermission&&await n.queryPermission(r)===`granted`)return!0;if(t&&n.requestPermission)return await n.requestPermission(r)===`granted`}catch{}return!1}var R=e=>`dbcache-meta:${e}`,z=e=>`${e}.sqlite3`;async function Oe(e){try{let t=await s.getItem(R(e));if(!t)return null;let n=JSON.parse(t),r=await o.get(z(e));return r?{bytes:new Uint8Array(r),meta:n}:null}catch{return null}}async function ke(e,t,n){try{let r=t.slice().buffer;return await o.set(z(e),r)?(await s.setItem(R(e),JSON.stringify(n)),!0):!1}catch(e){return console.warn(`[db-cache] write failed:`,e),!1}}async function Ae(e,t){try{let n=await s.getItem(R(e));if(!n)return;await s.setItem(R(e),JSON.stringify({...JSON.parse(n),...t}))}catch{}}async function je(e){try{await o.remove(z(e)),await s.removeItem(R(e))}catch{}}var Me=`browser:`;function B(e){return typeof e==`string`&&e.startsWith(`browser:`)}var Ne=750;function Pe(e){let t=W.get(e);t?.profileId&&(t.flushTimer&&clearTimeout(t.flushTimer),t.flushTimer=setTimeout(()=>{t.flushTimer=null,V(e)},Ne))}async function V(e){let t=W.get(e);if(t?.profileId)try{let n=await $e(e);await ke(t.profileId,n,Fe(t))}catch(e){console.warn(`[browser-sqlite] cache flush failed:`,e)}}function Fe(e){return{name:e.source.name,lastModified:e.fileMeta.lastModified,size:e.fileMeta.size,dirty:e.dirty,cachedAt:Date.now()}}var H=d(`browserSqliteVisibilityListener`,()=>({installed:!1}));typeof document<`u`&&!H.installed&&(H.installed=!0,document.addEventListener(`visibilitychange`,()=>{if(document.visibilityState===`hidden`)for(let[e,t]of W)t.flushTimer&&(clearTimeout(t.flushTimer),t.flushTimer=null,V(e))}));function U(e){return e.toLowerCase().endsWith(`-wal`)}var W=d(`browserSqliteDatabases`,()=>new Map),Ie=d(`browserSqliteModule`,()=>({promise:null}));async function G(){return Ie.promise||=i(()=>import(`./dist-Roudme38.js`).then(e=>e.default()),[]),Ie.promise}function K(e){let t=W.get(e);if(!t)throw Error(`Browser connection not found: ${e}`);return t}function Le(e){if(!(e.byteLength>=100&&e[0]===83&&e[15]===0)||e[18]!==2&&e[19]!==2)return{bytes:e,wal:!1};let t=new Uint8Array(e);return t[18]=1,t[19]=1,{bytes:t,wal:!0}}var Re=`SQLite format 3\0`;function ze(e){if(e.byteLength===0)return null;if(e.byteLength<100)return r.t(`services.sqliteFile.tooSmall`);if(String.fromCharCode(...e.subarray(0,16))!==Re)return r.t(`services.sqliteFile.notSqlite`);let t=e[16]<<8|e[17],n=t===1?65536:t;return n<512||n&n-1?r.t(`services.sqliteFile.badPageSize`,{size:n}):null}async function Be(e){let t=ze(e);if(t)throw Error(t);let n=await G(),i=new n.oo1.DB;if(e.byteLength===0)return i;let a=n.wasm.allocFromTypedArray(e),o=n.capi,s=o.SQLITE_DESERIALIZE_FREEONCLOSE??1,c=o.SQLITE_DESERIALIZE_RESIZEABLE??2,l=n.capi.sqlite3_deserialize(i.pointer,`main`,a,e.byteLength,e.byteLength,s|c);i.checkRc(l);try{i.exec(`SELECT count(*) FROM sqlite_master`)}catch(e){throw i.close(),Error(r.t(`services.sqliteFile.unreadable`,{message:e instanceof Error?e.message:String(e)}))}return i}async function Ve(e){let t=window.showOpenFilePicker;if(t)try{let n=await t({multiple:e.multiple,types:e.sqliteOnly?[{description:r.t(`services.sqliteFile.pickerDescription`),accept:{"application/vnd.sqlite3":[`.sqlite`,`.sqlite3`,`.db`,`.db3`]}}]:void 0,excludeAcceptAllOption:!1});return Promise.all(n.map(async e=>({file:await e.getFile(),handle:e})))}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return[];throw e}return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,n.multiple=e.multiple,e.sqliteOnly&&(n.accept=`.sqlite,.sqlite3,.db,.db3,application/vnd.sqlite3`),n.onchange=()=>t(Array.from(n.files??[]).map(e=>({file:e}))),n.oncancel=()=>t([]),n.click()})}async function He(){let e=await Ve({multiple:!0,sqliteOnly:!1}),t=e.find(e=>!U(e.file.name));return t?{main:t,wal:e.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${t.file.name.toLowerCase()}-wal`)??e.find(e=>U(e.file.name))}:null}async function Ue(){let[e]=await Ve({multiple:!1,sqliteOnly:!1});return e??null}async function q(e,t,n={}){let{bytes:r,wal:i}=Le(e),a=await Be(r),o=`${Me}${crypto.randomUUID()}`,s={...t,wal:i};return W.set(o,{db:a,source:s,rawBytes:e,profileId:n.profileId,fileMeta:n.fileMeta??{lastModified:0,size:e.byteLength},dirty:n.dirty??!1,flushTimer:null}),{connectionId:o,source:s}}async function J(e,t,n,r={}){let i=e?new Uint8Array(await e.arrayBuffer()):new Uint8Array,a=i,o=!1;n&&(a=A(i,new Uint8Array(await n.file.arrayBuffer())).bytes,o=!0);let s=await q(a,{name:e?.name??`:memory:`,handle:t,walApplied:o,walHandle:n?.handle},{profileId:r.profileId,fileMeta:{lastModified:Math.max(e?.lastModified??0,n?.file.lastModified??0),size:i.byteLength}});return W.get(s.connectionId).rawBytes=i,r.profileId&&V(s.connectionId),s}async function We(e,t,n,r){return await q(t,{name:n.name,handle:r,walApplied:!0},{profileId:e,fileMeta:{lastModified:n.lastModified,size:n.size},dirty:n.dirty})}function Ge(e,t){let n=K(e);n.source={...n.source,handle:t}}function Ke(e){return W.get(e)?.dirty??!1}async function qe(e,t){let n=K(e),r=A(n.rawBytes,new Uint8Array(await t.file.arrayBuffer())),i=await q(r.bytes,{...n.source,walApplied:!0,walHandle:t.handle},{profileId:n.profileId,fileMeta:n.fileMeta});return W.get(i.connectionId).rawBytes=n.rawBytes,X(e),n.profileId&&V(i.connectionId),{...i,appliedFrames:r.appliedFrames}}function Y(e){return W.get(e)?.source??null}function Je(e){return e&&e.trim().toLowerCase().replace(/\(.*$/,``).trim()||null}function Ye(e){return e==null?`null`:typeof e==`number`?Number.isInteger(e)?`integer`:`real`:typeof e==`bigint`?`bigint`:e instanceof Uint8Array?`blob`:`text`}function Xe(e){return typeof e==`bigint`?Number(e):e instanceof Uint8Array?{type:`Buffer`,data:Array.from(e)}:e}async function Ze(e,t){let{db:n}=K(e),r=await G(),i=performance.now(),a=K(e),o=Number(r.capi.sqlite3_total_changes(n.pointer)),s=n.prepare(t);try{if(s.columnCount===0){s.step();let c=Number(n.changes()),l=Number(r.capi.sqlite3_last_insert_rowid(n.pointer)),u=/^\s*(BEGIN|COMMIT|END|ROLLBACK|SAVEPOINT|RELEASE)\b/i.test(t);return(c>0||Number(r.capi.sqlite3_total_changes(n.pointer))!==o||!u)&&(a.dirty=!0,Pe(e)),{success:!0,fields:[],records:[],affectedRows:c,insertId:l,isResultQuery:!1,execTime:Math.round(performance.now()-i)}}let c=[];for(;s.step();)c.push(s.get([]).map(Xe));let l=s.getColumnNames(),u=r.capi,d=s.pointer;return{success:!0,fields:l.map((e,t)=>{let n=Je(u.sqlite3_column_decltype(d,t)),r=u.sqlite3_column_table_name(d,t)??``;return{name:e,orgName:u.sqlite3_column_origin_name(d,t)??e,type:n??Ye(Qe(c,t)),table:r,orgTable:r,db:u.sqlite3_column_database_name(d,t)??``,maxLength:0}}),records:c,affectedRows:0,insertId:0,isResultQuery:!0,execTime:Math.round(performance.now()-i)}}finally{s.finalize()}}function Qe(e,t){for(let n of e){let e=n[t];if(e!=null)return e}return null}async function $e(e){let{db:t}=K(e);return(await G()).capi.sqlite3_js_db_export(t.pointer)}function et(e){let t=W.get(e);if(!t?.source.handle)return null;let{source:n}=t;return n.wal&&!n.walApplied&&!n.walAcknowledged?r.t(`services.sqliteFile.walNotLoaded`):null}function tt(e){let t=K(e);t.source={...t.source,walAcknowledged:!0}}async function nt(e){let{source:t,fileMeta:n}=e;if(!t.handle)return;let i=await t.handle.getFile();if(n.lastModified&&(i.lastModified!==n.lastModified||i.size!==n.size))throw Error(r.t(`services.sqliteFile.changedOnDisk`,{name:t.name}));if(t.walHandle)try{let e=await t.walHandle.getFile();if(e.size>0&&!t.walApplied)throw Error(r.t(`services.sqliteFile.walHasChanges`,{name:t.name}));if(e.size>0&&t.walApplied&&e.lastModified>n.lastModified)throw Error(r.t(`services.sqliteFile.walChangedOnDisk`,{name:t.name}))}catch(e){if(e instanceof Error&&!(e instanceof DOMException))throw e}}async function rt(e){let t=K(e),{source:n}=t,i=et(e);if(i)throw Error(i);n.handle&&await nt(t);let a=await $e(e);if(n.handle){if(!await L(n.handle,!0))throw Error(r.t(`services.sqliteFile.writeDenied`,{name:n.name}));let t=await n.handle.createWritable();await t.write(a),await t.close(),n.walHandle&&await(await n.walHandle.createWritable()).close();let i=K(e);i.dirty=!1;try{let e=await n.handle.getFile();i.fileMeta={lastModified:e.lastModified,size:e.size}}catch{i.fileMeta={lastModified:Date.now(),size:a.byteLength}}return i.profileId&&Ae(i.profileId,{...Fe(i)}),`in-place`}let o=new Blob([a],{type:`application/vnd.sqlite3`}),s=URL.createObjectURL(o),c=document.createElement(`a`);return c.href=s,c.download=n.name===`:memory:`?`database.sqlite`:n.name,c.click(),URL.revokeObjectURL(s),`download`}function X(e){let t=W.get(e);t&&(t.flushTimer&&clearTimeout(t.flushTimer),t.db.close(),W.delete(e))}function Z(e){return W.get(e)?.profileId}async function it(e){await I(e),await I(N(e)),await je(e)}async function at(e,t){let n=await F(e);if(!n)return null;if(!await L(n,t))return`denied`;try{return{handle:n,file:await n.getFile()}}catch(t){if(t instanceof DOMException&&(t.name===`NotFoundError`||t.name===`NotAllowedError`))return await I(e),null;throw t}}async function ot(e,t){let n=await F(N(e));if(!(!n||!await L(n,t)))try{return{file:await n.getFile(),handle:n}}catch{await I(N(e));return}}async function st(e,t){let n={remembered:!0,fromCache:!1,restoredUnsaved:!1,fileDetached:!1,diskChanged:!1},r=await Oe(e),i=await at(e,t.interactive),a=i&&i!==`denied`?i.handle:void 0,o=i&&i!==`denied`?i.file:null;if(r?.meta.dirty){let{connectionId:t,source:i}=await We(e,r.bytes,r.meta,a),s=o?o.lastModified!==r.meta.lastModified||o.size!==r.meta.size:!1;return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,restoredUnsaved:!0,fileDetached:!a,diskChanged:s}}if(o&&a){let{connectionId:r,source:i}=await J(o,a,await ot(e,t.interactive),{profileId:e});return{...n,connectionId:r,fileName:i.name,wal:i.wal,walApplied:i.walApplied}}if(r){let{connectionId:t,source:i}=await We(e,r.bytes,r.meta);return{...n,connectionId:t,fileName:i.name,wal:i.wal,walApplied:i.walApplied,fromCache:!0,fileDetached:!0}}if(!t.interactive)return null;let s=await He();if(!s)return null;let{connectionId:c,source:l}=await J(s.main.file,s.main.handle,s.wal,{profileId:e});return s.main.handle?await P(e,s.main.handle):await I(e),s.wal?.handle?await P(N(e),s.wal.handle):await I(N(e)),{...n,connectionId:c,fileName:l.name,wal:l.wal,walApplied:l.walApplied,remembered:!1}}var ct=`SQLite format 3\0`;async function lt(e){if(e.size===0)return!0;if(e.size<100)return!1;let t=new Uint8Array(await e.slice(0,16).arrayBuffer());return String.fromCharCode(...t)===ct}async function ut(e,t){try{let n=await F(e);return n?await n.isSameEntry(t):!1}catch{return!1}}async function dt(n){let i=n.find(e=>!U(e.file.name));if(!i)return;if(!await lt(i.file))throw Error(r.t(`app.dropNotSqlite`,{name:i.file.name}));let a=n.find(e=>U(e.file.name)&&e.file.name.toLowerCase()===`${i.file.name.toLowerCase()}-wal`),o=l.getState(),s;for(let e of o.savedConnections)if(!(e.dbms!==`sqlite`||(e.transport??`browser`)!==`browser`||e.sample||e.file!==i.file.name)&&i.handle&&await ut(e.id,i.handle)){s=e;break}let c=s??{id:crypto.randomUUID(),hostName:i.file.name.replace(/\.(db|sqlite|sqlite3|db3)$/i,``),host:``,user:``,pass:``,charset:`utf8`,port:0,dbms:`sqlite`,transport:`browser`,file:i.file.name,autoConnection:!1,savePassword:!0,authToken:``};e(`sqlite_file_drop`,{reused:!!s,wal:!!a,handle:!!i.handle});let d=o.activeConnections.some(e=>e.id===c.id),f=o.activeConnections.find(e=>e.id===c.id)?.serverConnectionId,{connectionId:p}=await J(i.file,i.handle,a,{profileId:c.id});f&&f!==p&&B(f)&&X(f),i.handle?await P(c.id,i.handle):await I(c.id),a?.handle?await P(N(c.id),a.handle):await I(N(c.id)),s||o.addSavedConnection(c),o.openConnection({...c,serverConnectionId:p}),o.setPendingReopen(c.id,!1),o.setFileDetached(c.id,!1),d?xe.getState().removeTree(c.id):u.getState().addQueryTab(c.id,{id:`tab-${Date.now()}`,title:r.t(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),t.getState().setWelcomeVisible(!1)}async function ft(e,t){let n=await at(e,!0);return!n||n===`denied`?!1:(Ge(t,n.handle),!0)}async function pt(e){let t=Z(e),n=Y(e);return n&&!n.handle&&t&&await ft(t,e),rt(e)}function mt(e){let t=Y(e);return t?t.name===`:memory:`?r.t(`services.save.inMemory`):typeof window<`u`&&!(`showOpenFilePicker`in window)?r.t(`services.save.noFileSystemAccess`):!t.handle&&!Z(e)?r.t(`services.save.noWritableHandle`):null:r.t(`services.save.notBrowserSqlite`)}async function ht(e,t){let n=await Ue();if(!n)return null;let r=await qe(t,n);return n.handle&&await P(N(e),n.handle),{connectionId:r.connectionId,appliedFrames:r.appliedFrames}}function gt(e){if(!B(e))return null;let t=Y(e);return t?{wal:t.wal,walApplied:t.walApplied,walAcknowledged:t.walAcknowledged??!1}:null}function _t(e){return e.dbms===`sqlite`&&e.transport===`browser`?`browser`:`tunnel`}async function vt(e,t){return me(e,t)}async function yt(e,t){return ve(e,t)}async function bt(e,t,n){let r=e=>({success:!1,fields:[],records:[],affectedRows:0,insertId:0,isResultQuery:!1,execTime:0,message:e instanceof Error?e.message:String(e)});if(B(e))try{return await Ze(e,t)}catch(e){return r(e)}let i=Q.get(e)??e;try{return await he(i,t,n)}catch(e){if(!(e instanceof x)||e.status!==404)return r(e);let a=await xt(i);if(!a)return r(e);try{return await he(a,t,n)}catch(e){return r(e)}}}var Q=new Map,$=new Map;function xt(e){let n=$.get(e);if(n)return n;let i=(async()=>{let n=l.getState(),i=n.activeConnections.find(t=>t.serverConnectionId===e||Q.get(t.serverConnectionId??``)===e);if(!i||_t(i)===`browser`||se())return null;if(i.serverConnectionId&&i.serverConnectionId!==e&&!Q.has(i.serverConnectionId))return Q.set(e,i.serverConnectionId),i.serverConnectionId;let a=n.resolveCredentials(i),o=a.ssh?.enabled&&a.ssh.auth===`password`&&!a.ssh.password;if(!a.pass&&i.pass===``&&i.dbms!==`sqlite`||o)return null;try{let n=await me(_(a),a.authToken||void 0);if(!n.success||!n.connectionId)return null;for(let[t,r]of Q)r===e&&Q.set(t,n.connectionId);return Q.set(e,n.connectionId),l.getState().updateServerConnectionId(i.id,n.connectionId),l.getState().setTransactionOpen(i.id,!1),t.getState().setFooterMessage(r.t(`services.agent.reconnected`,{name:i.hostName||i.host||i.databaseId||i.file||i.id})),n.connectionId}catch{return null}})();return $.set(e,i),i.finally(()=>$.delete(e)),i}async function St(e){if(B(e)){let t=Z(e);X(e),t&&await je(t);return}return _e(e)}function Ct(e){return async(t,n)=>{let i=await bt(e,t,n);if(!i.success)throw Error(i.message??r.t(`services.query.failed`));return i}}export{f as A,ne as C,pe as D,oe as E,p as M,d as N,ye as O,le as S,fe as T,B as _,St as a,xe as b,gt as c,dt as d,ft as f,et as g,tt as h,mt as i,ee as j,_ as k,_t as l,yt as m,vt as n,bt as o,pt as p,Ct as r,it as s,st as t,ht as u,Ke as v,ue as w,se as x,J as y};