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.
- package/README.md +17 -1
- package/app/assets/{AboutDialog-BPNsHm3y.js → AboutDialog-CNjQdT5u.js} +1 -1
- package/app/assets/{ConnectDialog-Crrymc0W.js → ConnectDialog-JmGFmUJv.js} +1 -1
- package/app/assets/{CopyDatabaseDialog-DjSg4U1o.js → CopyDatabaseDialog-BeIaHJEE.js} +1 -1
- package/app/assets/{CopyTableDialog-BTEo-QH8.js → CopyTableDialog-RTJBBuHd.js} +1 -1
- package/app/assets/{CreateDatabaseDialog-Bm_6YvoO.js → CreateDatabaseDialog-EQk84TRf.js} +1 -1
- package/app/assets/{DataDiffDialog-C70b85TC.js → DataDiffDialog-Bsk7fEYT.js} +1 -1
- package/app/assets/{DownloadToCSVDialog-DUwB188z.js → DownloadToCSVDialog-fZOrfJCY.js} +2 -2
- package/app/assets/{EditSchemaDialog-Bth2OKEy.js → EditSchemaDialog-C8sd3QZp.js} +1 -1
- package/app/assets/{FindReplaceDialog-DpGsdMkt.js → FindReplaceDialog-Q-kOCd30.js} +1 -1
- package/app/assets/{FlushDialog-1cjuJ1Ft.js → FlushDialog-DuPXbGV8.js} +1 -1
- package/app/assets/LinkColumnDialog-Vfx3YnVz.js +1 -0
- package/app/assets/{LocalHistoryDialog-CIf-F4_K.js → LocalHistoryDialog-D7PbCc1T.js} +1 -1
- package/app/assets/ProcessListDialog-BcrS--N5.js +1 -0
- package/app/assets/QuickCommandPalette-DgmR-AEB.js +1 -0
- package/app/assets/RowFormDialog-BeY3wZoM.js +2 -0
- package/app/assets/{SafetySettingsDialog-U3Iblh6j.js → SafetySettingsDialog-COTjlwgg.js} +1 -1
- package/app/assets/{SchemaDiffDialog-CNNDRLbw.js → SchemaDiffDialog-DShgozcV.js} +1 -1
- package/app/assets/{SchemaToHTMLDialog-_DVyXheD.js → SchemaToHTMLDialog-6ZXb_qWR.js} +1 -1
- package/app/assets/{StatusDialog-CvzzTqId.js → StatusDialog-DYnmWcrB.js} +1 -1
- package/app/assets/{UserAddDialog-C9VvsXb8.js → UserAddDialog-WJfSy3UY.js} +1 -1
- package/app/assets/{UserManagerDialog-CIYWAeaA.js → UserManagerDialog-Bp3YK2PA.js} +1 -1
- package/app/assets/{VariablesDialog-CdIkSdn9.js → VariablesDialog-CofNmdTr.js} +1 -1
- package/app/assets/database-C07SXivf.js +1 -0
- package/app/assets/de-BHXb0E0M.js +2 -0
- package/app/assets/fr-vqo4FVRK.js +2 -0
- package/app/assets/{i18n-DFsTrccf.js → i18n-ByO9kvGG.js} +2 -2
- package/app/assets/ja-BosgFbQC.js +2 -0
- package/app/assets/ko-CvSx-uAq.js +2 -0
- package/app/assets/main-BKsXOMU1.css +2 -0
- package/app/assets/{main-DS4S3IhV.js → main-DKTBYrT9.js} +188 -188
- package/app/assets/{query-execution-v3CrkSv7.js → query-execution-Bqix04tS.js} +3 -3
- package/app/assets/{select-wpCNssiC.js → select-teWP1vRl.js} +1 -1
- package/app/assets/{table-copy-B-45A0tf.js → table-copy-NGGO-qDb.js} +1 -1
- package/app/assets/zh-B0EkNPpR.js +2 -0
- package/app/index.html +7 -6
- package/dist/index.js +241 -27
- package/package.json +1 -1
- package/app/assets/LinkColumnDialog-BL3oERQj.js +0 -1
- package/app/assets/ProcessListDialog-BiN41WSu.js +0 -1
- package/app/assets/QuickCommandPalette-BEC2Yj8l.js +0 -1
- package/app/assets/RowFormDialog-JuI6sB3V.js +0 -2
- package/app/assets/database-Cl9EPqA9.js +0 -1
- package/app/assets/de-2Oaocuns.js +0 -2
- package/app/assets/fr-BtMPo4Nu.js +0 -2
- package/app/assets/ja-D0iEKYDl.js +0 -2
- package/app/assets/ko-BSY6NOqF.js +0 -2
- package/app/assets/main-CVAqRUdH.css +0 -2
- 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
|
|
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
|
|
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
|
|
618
|
-
if (
|
|
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
|
|
764
|
-
if (
|
|
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
|
|
933
|
-
if (
|
|
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((
|
|
1373
|
-
client.once("ready",
|
|
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((
|
|
1408
|
+
await new Promise((resolve5, reject) => {
|
|
1404
1409
|
server.once("error", reject);
|
|
1405
|
-
server.listen(0, "127.0.0.1", () =>
|
|
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((
|
|
1413
|
-
if (closed) return
|
|
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
|
-
|
|
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
|
|
1680
|
-
import { join as
|
|
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
|
|
1964
|
-
import { join as
|
|
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 =
|
|
2259
|
-
const indexHtml =
|
|
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 } =
|
|
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 =
|
|
2294
|
-
return
|
|
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 ?
|
|
2317
|
-
if (!
|
|
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.
|
|
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};
|