From ed069dcf7a69c5281afbe7db0ed8ab5d7cf6ba10 Mon Sep 17 00:00:00 2001 From: zknpr <96851588+zknpr@users.noreply.github.com> Date: Sat, 24 Oct 2026 12:48:08 +0200 Subject: [PATCH] fix: re-sync the viewer from the 1.8.3 desktop port Sync from desktop-dev-port at b7cf55a, which merges the extension's v1.8.3 tag. viewer-dist/native/tjs moves to the runtime re-pinned to txiki.js b45ac83, and the two worker bundles are rebuilt for a refactor of the shared NUL containment helper that leaves the grid's behavior unchanged. The viewer, WebAssembly glue and query-plan library are byte-identical. The runtime follow-ups from the review of 9875455: a statement whose rows fail to convert is reset instead of left running, synchronous row conversion checks every step, vacuumInto errors carry SQLite's message (so a failed export says why instead of the generic text of the error code), and the authorizer calls uv_thread_self only for ATTACH of a named file. Inventory and notices: txiki.js 9875455 -> b45ac83. Every notice file is unchanged between them (the runtime commit touches only src/mod_sqlite3.c, tests and its CI workflow), so only the pins change. viewerSource and the README pin follow b7cf55a; the README names the extension's 1.8.3 release. --- README.md | 9 ++++---- THIRD_PARTY_NOTICES.txt | 22 +++++++++--------- third-party/inventory.json | 24 ++++++++++---------- viewer-dist/manifest.json | 10 ++++---- viewer-dist/native/native-worker-desktop.js | 24 ++++++++++---------- viewer-dist/native/tjs | Bin 3352960 -> 3352960 bytes viewer-dist/worker.js | 20 ++++++++-------- 7 files changed, 54 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index afd4139..4122e6c 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,8 @@ Linux and Windows. It shares its viewer with the [SQLite Explorer VS Code extension](https://github.com/zknpr/SQLite-Explorer) and runs in a Tauri desktop shell. -The current desktop version is **0.3.2**, integrating the extension's **1.8.2** -release, its unreleased native-runtime and NUL-text fixes, and desktop-specific -fixes. Packages for macOS, Linux and Windows are +The current desktop version is **0.3.2**, integrating the extension's **1.8.3** +release and desktop-specific fixes. Packages for macOS, Linux and Windows are attached to each [release](https://github.com/zknpr/SQLite-Explorer-App/releases); see [Install](#install). See [release readiness](docs/release-readiness.md) for the remaining distribution gates. @@ -102,12 +101,12 @@ other target, first sync from a checkout containing the exact source commit: ```sh git clone --branch desktop-dev-port https://github.com/zknpr/SQLite-Explorer ../SQLite-Explorer -node scripts/sync-viewer.mjs --source ../SQLite-Explorer --ref b4a33419988b017cb8dd576a83b30967038b65db +node scripts/sync-viewer.mjs --source ../SQLite-Explorer --ref b7cf55aece690860c2c1be7e498b0503e7ff18de node scripts/sync-viewer.mjs --verify ``` The pin is on the extension repository's `desktop-dev-port` branch. -Substituting the extension's `v1.8.2` tag omits the desktop fixes validated here. +Substituting the extension's `v1.8.3` tag omits the desktop fixes validated here. Build on the destination OS and CPU: diff --git a/THIRD_PARTY_NOTICES.txt b/THIRD_PARTY_NOTICES.txt index e8d8774..1e1eeed 100644 --- a/THIRD_PARTY_NOTICES.txt +++ b/THIRD_PARTY_NOTICES.txt @@ -75681,9 +75681,9 @@ library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ============================================================================== -txiki.js 9875455640b8ae62f52200a9fa7fa2a66d079dc7 +txiki.js b45ac83ec0d7809c413afcf4091d7ecf12a46452 ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7 +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452 --- LICENSE --- The MIT License (MIT) @@ -75711,7 +75711,7 @@ SOFTWARE. ============================================================================== txiki embedded src/js/core/path.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/core/path.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/core/path.js --- src/js/core/path.js --- // Copyright Joyent, Inc. and other Node contributors. @@ -75742,7 +75742,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== txiki embedded src/js/stdlib/utils.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/stdlib/utils.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/stdlib/utils.js --- src/js/stdlib/utils.js --- // Code from https://github.com/browserify/node-util @@ -75773,7 +75773,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== txiki embedded src/js/run-repl/repl.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/run-repl/repl.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/run-repl/repl.js --- src/js/run-repl/repl.js --- /* global tjs */ @@ -75810,7 +75810,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== txiki embedded src/js/polyfills/text-encode-transform.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/text-encode-transform.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/text-encode-transform.js --- src/js/polyfills/text-encode-transform.js --- // Adapted from: @@ -75834,7 +75834,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== deps/miniz/miniz.c ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/miniz/miniz.c +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/miniz/miniz.c --- deps/miniz/miniz.c --- /************************************************************************** @@ -75866,7 +75866,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== deps/sqlite3/sqlite3.c ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/sqlite3/sqlite3.c +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/sqlite3/sqlite3.c --- deps/sqlite3/sqlite3.c --- /****************************************************************************** @@ -75897,7 +75897,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== miniz header public-domain attribution ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/miniz/miniz.h +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/miniz/miniz.h --- deps/miniz/miniz.h header --- #ifndef MINIZ_EXPORT @@ -75911,7 +75911,7 @@ Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66 ============================================================================== formdata-polyfill adapted in txiki.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/form-data.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/form-data.js --- LICENSE (https://github.com/jimmywarting/FormData/blob/master/LICENSE) --- MIT License @@ -75939,7 +75939,7 @@ SOFTWARE. ============================================================================== event-target-shim adapted in txiki.js ============================================================================== -Source: https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/event-target.js +Source: https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/event-target.js --- LICENSE (https://github.com/mysticatea/event-target-shim/blob/master/LICENSE) --- The MIT License (MIT) diff --git a/third-party/inventory.json b/third-party/inventory.json index ae3ebd3..1db886b 100644 --- a/third-party/inventory.json +++ b/third-party/inventory.json @@ -1,6 +1,6 @@ { "format": 1, - "viewerSource": "b4a33419988b017cb8dd576a83b30967038b65db", + "viewerSource": "b7cf55aece690860c2c1be7e498b0503e7ff18de", "components": [ { "component": "@vscode/codicons 0.0.45", @@ -7532,8 +7532,8 @@ ] }, { - "component": "txiki.js 9875455640b8ae62f52200a9fa7fa2a66d079dc7", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7", + "component": "txiki.js b45ac83ec0d7809c413afcf4091d7ecf12a46452", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452", "notices": [ { "file": "LICENSE", @@ -7543,7 +7543,7 @@ }, { "component": "txiki embedded src/js/core/path.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/core/path.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/core/path.js", "notices": [ { "file": "src/js/core/path.js", @@ -7553,7 +7553,7 @@ }, { "component": "txiki embedded src/js/stdlib/utils.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/stdlib/utils.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/stdlib/utils.js", "notices": [ { "file": "src/js/stdlib/utils.js", @@ -7563,7 +7563,7 @@ }, { "component": "txiki embedded src/js/run-repl/repl.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/run-repl/repl.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/run-repl/repl.js", "notices": [ { "file": "src/js/run-repl/repl.js", @@ -7573,7 +7573,7 @@ }, { "component": "txiki embedded src/js/polyfills/text-encode-transform.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/text-encode-transform.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/text-encode-transform.js", "notices": [ { "file": "src/js/polyfills/text-encode-transform.js", @@ -7583,7 +7583,7 @@ }, { "component": "deps/miniz/miniz.c", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/miniz/miniz.c", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/miniz/miniz.c", "notices": [ { "file": "deps/miniz/miniz.c", @@ -7593,7 +7593,7 @@ }, { "component": "deps/sqlite3/sqlite3.c", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/sqlite3/sqlite3.c", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/sqlite3/sqlite3.c", "notices": [ { "file": "deps/sqlite3/sqlite3.c", @@ -7603,7 +7603,7 @@ }, { "component": "miniz header public-domain attribution", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/deps/miniz/miniz.h", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/deps/miniz/miniz.h", "notices": [ { "file": "deps/miniz/miniz.h header", @@ -7613,7 +7613,7 @@ }, { "component": "formdata-polyfill adapted in txiki.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/form-data.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/form-data.js", "notices": [ { "file": "LICENSE", @@ -7624,7 +7624,7 @@ }, { "component": "event-target-shim adapted in txiki.js", - "source": "https://github.com/zknpr/txiki.js/tree/9875455640b8ae62f52200a9fa7fa2a66d079dc7/src/js/polyfills/event-target.js", + "source": "https://github.com/zknpr/txiki.js/tree/b45ac83ec0d7809c413afcf4091d7ecf12a46452/src/js/polyfills/event-target.js", "notices": [ { "file": "LICENSE", diff --git a/viewer-dist/manifest.json b/viewer-dist/manifest.json index 04a92c0..d2ceec8 100644 --- a/viewer-dist/manifest.json +++ b/viewer-dist/manifest.json @@ -1,18 +1,18 @@ { "source": "SQLite-Explorer desktop/ build target", - "ref": "b4a33419988b017cb8dd576a83b30967038b65db", + "ref": "b7cf55aece690860c2c1be7e498b0503e7ff18de", "target": "aarch64-macos", - "syncedAt": "2026-10-23T22:35:53.418Z", + "syncedAt": "2026-10-24T14:09:14.788Z", "files": { "viewer.html": "0a94f34a9565b29e6830463387dfc0747acece8bc5b0e98848007c5b7d4e0699", - "worker.js": "615ed08cd58a406c527e355bbba8e946ebdf6195da6c381619fa4721a1f1ac3d", + "worker.js": "699e993b4ce9503753a734cd8e6d6d85bc5d0e00db02c09e305834a6d80e73c3", "sql-wasm.js": "5e68997539968392caf70207e26b78486ef2e9b1a50c04cdefa966030b782106", "sql-wasm.wasm": "ea94cafe49733bd55b8b2481d5cf0f07c5e006728c94b04999be04582b19a1e7", "dev-harness.html": "baf76f7b3494a2e76ff156aed1297d28e8cedd44f0ca383fa9f917ce8a869c2f", "codicons/codicon.css": "04fca10892d8f2be5104c920b640d9a58ddcf87f4902ea300fcf08de6634f3f6", "codicons/codicon.ttf": "2bb558cb693451e73c28c33fe64aa89bc19b1a4b70f95948322c243f93476920", - "native/native-worker-desktop.js": "e0526538dfe3b01fb911a607d8be742e89aa521aea555803f9f540b1b4606e30", + "native/native-worker-desktop.js": "cf1b0ddff3300fd8c6eca21cf22a67554a1b86694bc4fe4bcc9d4e6092bae311", "native/query-plan.dylib": "3a51dcd0ebc627e63d664e9b9c317667cb356f197e0d5645262bc3b5ef7b8c3c", - "native/tjs": "833325341cd47a1887fadc69cf637a26c0b120fcaa1b52ce486537bab2bc3325" + "native/tjs": "eabb77e38e127d0cd6276f12195524981ac0a8362ce58b56757ce74d660175c8" } } diff --git a/viewer-dist/native/native-worker-desktop.js b/viewer-dist/native/native-worker-desktop.js index 63ea8e9..6bfdfc6 100644 --- a/viewer-dist/native/native-worker-desktop.js +++ b/viewer-dist/native/native-worker-desktop.js @@ -1,7 +1,7 @@ -/*! sqlite-explorer-native-worker-sha256:c055230c79b255cab5384406f31b04304478737f79b77c0d14041ee58ea82239 */ +/*! sqlite-explorer-native-worker-sha256:bc84f44e841922968aee54bd6dee8ac6926ea0923ea1af1da67a7728a245bad6 */ var M=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};function al(e,t){let n=xo[t];return n!==void 0&&String(e).trim()===n.text}function cl(e){let t=[];for(let n=0;ni.kind==="word");if(!r||!ll.has(r.value.toUpperCase())||n.some(i=>i.kind==="word"&&i.value.toUpperCase()==="WITH"))return null;let o=[];for(let i=0;i=fl)))break}return o}function pl(e){let t=Io(e),n=t.find(s=>s.kind==="word");if(!n||n.value.toUpperCase()!=="CREATE")return;let r=-1;for(let s=0;s=ml||typeof t.viewSql!="function")continue;let a=i.toLowerCase();if(r.has(a))continue;r.add(a);let s=pl(t.viewSql(i)??"");if(!s)continue;let l=Ao(s);if(!(!l||l.length===0))for(let u of _o(l,t,n+1,r))o.includes(u)||o.push(u)}return o}function No(e,t,n,r){if(!al(t,e))return;let o=xo[e];if(e===1&&n&&r){let a=Ao(n);if(a&&a.length>0){let s=_o(a,r);if(s.length>0)return s.map(l=>`no such table: ${l}`).join("; ")}}let i=o.detail?`: ${o.detail}`:"";return`${o.text} (${o.name}${i})`}var xo,ll,ul,dl,Fn,fl,ml,Oo=M(()=>{"use strict";A();xo=Object.freeze({1:{name:"SQLITE_ERROR",text:"SQL logic error",detail:"a misspelled name, a syntax error, or a misused construct \u2014 the native engine cannot report SQLite\u2019s detailed message"},3:{name:"SQLITE_PERM",text:"access permission denied",detail:""},4:{name:"SQLITE_ABORT",text:"query aborted",detail:"the statement was rolled back before it finished"},5:{name:"SQLITE_BUSY",text:"database is locked",detail:"another connection holds a write lock on this file"},6:{name:"SQLITE_LOCKED",text:"database table is locked",detail:"a table is locked by another statement on this same connection"},7:{name:"SQLITE_NOMEM",text:"out of memory",detail:""},8:{name:"SQLITE_READONLY",text:"attempt to write a readonly database",detail:""},9:{name:"SQLITE_INTERRUPT",text:"interrupted",detail:"the query deadline elapsed or the run was cancelled"},10:{name:"SQLITE_IOERR",text:"disk I/O error",detail:""},11:{name:"SQLITE_CORRUPT",text:"database disk image is malformed",detail:""},12:{name:"SQLITE_NOTFOUND",text:"unknown operation",detail:""},13:{name:"SQLITE_FULL",text:"database or disk is full",detail:""},14:{name:"SQLITE_CANTOPEN",text:"unable to open database file",detail:""},15:{name:"SQLITE_PROTOCOL",text:"locking protocol",detail:""},17:{name:"SQLITE_SCHEMA",text:"database schema has changed",detail:""},18:{name:"SQLITE_TOOBIG",text:"string or blob too big",detail:"a value exceeded SQLite\u2019s maximum length for this build"},19:{name:"SQLITE_CONSTRAINT",text:"constraint failed",detail:"a NOT NULL, UNIQUE, CHECK, PRIMARY KEY or FOREIGN KEY constraint rejected the row"},20:{name:"SQLITE_MISMATCH",text:"datatype mismatch",detail:"a value does not fit the target column (an INTEGER PRIMARY KEY only accepts integers)"},21:{name:"SQLITE_MISUSE",text:"bad parameter or other API misuse",detail:""},23:{name:"SQLITE_AUTH",text:"authorization denied",detail:""},25:{name:"SQLITE_RANGE",text:"column index out of range",detail:""},26:{name:"SQLITE_NOTADB",text:"file is not a database",detail:""}});ll=new Set(["SELECT","INSERT","REPLACE","UPDATE","DELETE","VALUES"]);ul=new Set(["FROM","JOIN","INTO","UPDATE"]),dl=new Set(["SELECT","VALUES","WITH"]),Fn=/[A-Za-z0-9_$\u0080-\uffff]/,fl=4,ml=4});function xl(e){let t=new Error(`${e.toUpperCase()} is blocked on the native engine: it can open or create a database file outside the path this session is bound to, which would defeat the desktop path sandbox. Only the bound database is reachable.`);return t.code=Cl,t}function Il(){let e=new Error("VACUUM ... INTO is blocked on the native engine: it writes a full copy of the database to an arbitrary path outside the one this session is bound to, defeating the desktop path sandbox. Plain VACUUM (in place) is allowed.");return e.code=Rl,e}function jn(e){let t=0;for(;;){let n=t;for(;t{let r=/^(.*):\d+$/.exec(n);return r!==null&&t.has(r[1])})}function Ll(e,t){return typeof e=="bigint"&&!t?Number(e):e}function kt(e,t,n,r){if(n>=t.length)return null;let o=t.slice(n),i=jn(o),a=El.exec(i);if(a)throw xl(a[0]);let s;try{s=e.prepare(o)}catch(d){throw Hn(d,o,r)}let l;try{l=String(s)}catch(d){throw Z(s),d}if(l==="")return Z(s),null;let u=Nl(o,l);if(u<0)throw Z(s),new Error("Unable to determine the SQL statement boundary: the compiled statement text does not align with its source");let c=o.slice(0,u);if(wl.test(i)&&bl.test(c))throw Z(s),Il();return{compiled:s,source:c,expanded:l,end:n+u}}function Z(e){try{e?.finalize?.()}catch{}}function $l(e,t,n){let r=0;for(;;){let o=kt(e,t,r,n);if(o===null)return;r=o.end,Z(o.compiled)}}function Wn(e,t,n,r){let o=t,i,a=null,s,l=null,u=-1,c=n===r?n:r,d=()=>{if(e.assertUsable(),o===null)throw new Error("Statement closed")},f=()=>{if(s!==void 0)return s;let g=e.probeColumnNames(c);return s=g&&n!==r&&Ol(g)?null:g,s},m=()=>{if(a!==null)return a;let g;try{g=i===void 0?o.all():o.all(i)}catch(R){throw Hn(R,n,e.describeError)}let S=g.length>0?Object.keys(g[0]):[],w=g.map(R=>S.map(I=>R[I]));if(s&&g.length>0&&s.length!==S.length){let R=n===r?e.readRowsThroughView(c):null;if(R)return a=R,a;s=S,l=S}return a={columns:s??S,values:w},a},E=()=>{if(l!==null)return l;if(a!==null)return l=a.columns,l;let g=f();return g?(l=g,l):hl.test(jn(c))?(l=m().columns,l):[]},y={bind(g){return d(),i=g??void 0,a=null,u=-1,!0},step(){return d(),m(),u+=1,u=a.values.length)return[];let w=S?.useBigInt===!0;return a.values[u].map(R=>Ll(R,w))},getColumnNames(){return d(),E().slice()},run(g){return d(),g!=null&&y.bind(g),y.step(),y.reset()},reset(){return d(),i=void 0,a=null,u=-1,!0},getSQL(){return n},free(){if(o===null)return!1;let g=o;return o=null,e.forget(y),Z(g),!0}};return e.register(y),y}function $o(e={},t={}){let n=t.sqlite;if(typeof n?.Database!="function")throw new Error("createShimDatabase requires deps.sqlite.Database");if(e.content!==void 0)throw new Error("createShimDatabase: opening from bytes is not supported by the native engine; open by path ({ path, readOnly }) or use the WASM engine");let r=e.readOnly===!0,o=e.path===void 0||e.path===null?new n.Database(":memory:"):new n.Database(e.path,r?{readOnly:!0}:{create:!0}),i=!1,a=new Set,s=null,l=null,u=()=>{if(l!==null)throw l;if(i)throw new Error("Database closed")},c=(p,b)=>{try{t.onCleanupFailure?.(p,b)}catch{}},d=p=>{let b=o.prepare(p);try{let k=b.all()[0];return k===void 0?void 0:k[Object.keys(k)[0]]}finally{Z(b)}},f=()=>{try{o.exec("PRAGMA query_only = 1")}catch(p){throw st(new Error(`Unable to enforce read-only mode: ${p?.message??p}`),p)}if(Number(d("PRAGMA query_only"))!==1)throw new Error("Unable to enforce read-only mode: PRAGMA query_only did not take")};if(r)try{f()}catch(p){throw o.close(),p}let m=!1,E=p=>{if(!r)return p();if(l!==null)throw l;if(m)throw new Error("Internal error: read-only write lift is not re-entrant");o.exec("PRAGMA query_only = 0"),m=!0;let b=null,N;try{N=p()}catch(k){b=k}try{o.exec("PRAGMA query_only = 1")}catch(k){l=st(new Error("Read-only enforcement could not be restored (PRAGMA query_only); this connection is no longer trustworthy and has been disabled"),k),l.cause=k,b?b.cause===void 0&&(b.cause=k):b=l}finally{m=!1}if(b)throw b;return N},y=(p,b)=>{let N=jn(p);if(N==="")return null;let k=`_sqlx_shim_cols_${++gl}`,U=`"${k}"`,j=`'${k}'`;try{E(()=>{let F=o.prepare(`CREATE TEMP VIEW ${U} AS ${N}`);try{F.run()}finally{Z(F)}})}catch(F){if(l!==null)throw l;if(_l(F)&&Sl.test(N))throw st(new Error(`Column names are unavailable: this connection refuses writes (PRAGMA query_only is armed) but was not opened read-only, so the probe cannot create the temporary view it reads them from. Close and reopen the database to clear it. (A session made read-only after opening must be escalated through enforceReadOnly(), which is what lets the probe lift query_only. SQLite: ${F?.message??F})`),F);return null}try{return b({quoted:U,literal:j})}catch{if(l!==null)throw l;return null}finally{try{E(()=>o.exec(`DROP VIEW IF EXISTS temp.${U}`))}catch(F){c(F,"drop column-probe view")}}},g=p=>{let b;try{b=o.prepare(`SELECT 1 FROM "${String(p).replace(/"/g,'""')}" WHERE 0`)}catch{return!1}return Z(b),!0},S=p=>{let b;try{b=o.prepare("SELECT count(*) AS c FROM (SELECT name FROM sqlite_schema UNION ALL SELECT name FROM sqlite_temp_schema) WHERE name = ? COLLATE NOCASE")}catch{return!0}try{return Number(b.all([String(p)])[0]?.c??1)>0}catch{return!0}finally{Z(b)}},w=p=>{let b;try{b=o.prepare("SELECT sql FROM (SELECT name, type, sql FROM sqlite_schema UNION ALL SELECT name, type, sql FROM sqlite_temp_schema) WHERE type = 'view' AND name = ? COLLATE NOCASE LIMIT 1")}catch{return}try{let N=b.all([String(p)])[0]?.sql;return typeof N=="string"?N:void 0}catch{return}finally{Z(b)}},R=(p,b)=>No(p.errno,p.message,b,{resolves:g,inCatalog:S,viewSql:w}),I={assertUsable:()=>{if(l!==null)throw l},describeError:R,register:p=>a.add(p),forget:p=>a.delete(p),probeColumnNames:p=>y(p,({literal:b})=>{let N=o.prepare(`SELECT name FROM pragma_table_info(${b})`);try{let k=N.all().map(U=>U.name);return k.length>0?k:null}finally{Z(N)}}),readRowsThroughView:p=>y(p,({quoted:b})=>{let N=o.prepare(`SELECT * FROM ${b}`);try{let k=N.all();if(k.length===0)return null;let U=Object.keys(k[0]);return{columns:U,values:k.map(j=>U.map(F=>j[F]))}}finally{Z(N)}})},T=p=>{let b=kt(o,p,0,R);if(b===null)throw new Error("Nothing to prepare");return Wn(I,b.compiled,b.source,b.expanded)},_=()=>{let p=t.fs;if(!p||typeof p.makeTempDir!="function"||typeof p.readFile!="function"||typeof p.remove!="function")throw new Error("export() requires deps.fs with makeTempDir/readFile/remove");return p},$=null,O=p=>E(()=>{o.vacuumInto(p)}),D={exec(p,b,N){u();let k=[],U=0;for(;;){let j=kt(o,p,U,R);if(j===null)break;U=j.end;let F=Wn(I,j.compiled,j.source,j.expanded);try{b!=null&&F.bind(b),F.getColumnNames();let re=null,Lt=[];for(;F.step();)re===null&&(re=F.getColumnNames()),Lt.push(F.get(null,N));re!==null&&k.push({columns:re,values:Lt})}finally{F.free()}}return k},run(p,b){if(u(),b!=null){let N=T(p);try{N.bind(b),N.step()}finally{N.free()}}else{Tl.test(p)&&$l(o,p,R);try{o.exec(p)}catch(N){throw Hn(N,p,R)}}return D},prepare(p,b){u();let N=T(p);return b!=null&&N.bind(b),N},iterateStatements(p){u();let b=0,N=null,k=!1;return{next(){if(N!==null&&(N.free(),N=null),k)return{done:!0};u();let U;try{U=kt(o,p,b,R)}catch(j){throw k=!0,j}return U===null?(k=!0,{done:!0}):(b=U.end,N=Wn(I,U.compiled,U.source,U.expanded),{value:N,done:!1})},getRemainingSQL(){return p.slice(b)},[Symbol.iterator](){return this}}},getRowsModified(){return u(),s??=o.prepare("SELECT changes() AS c"),Number(s.all()[0].c)},export(){u();let p=_(),b=p.makeTempDir();if(typeof b?.then=="function")throw new Error("export() requires a synchronous deps.fs; use exportAsync() on runtimes whose filesystem API is promise-based (tjs)");try{let N=`${b}/export.sqlite`;O(N);let k=p.readFile(N);if(typeof k?.then=="function")throw new Error("export() requires a synchronous deps.fs.readFile; use exportAsync()");return k}finally{try{p.remove(b)}catch(N){c(N,"remove export temp directory")}}},async exportAsync(){u();let p=_(),b=await p.makeTempDir();try{let N=`${b}/export.sqlite`;return O(N),await p.readFile(N)}finally{try{await p.remove(b)}catch(N){c(N,"remove export temp directory")}}},async exportToPath(p){if(u(),typeof p!="string"||p.length===0)throw new Error("exportToPath requires a non-empty target path");O(p)},progress_handler(p,b){u(),$=b==null?null:{interval:p,callback:b}},get progressHandler(){return $},setQueryDeadline(p){u(),o.setQueryDeadline?.(p)},clearQueryDeadline(){u(),o.clearQueryDeadline?.()},interrupt(){u(),o.interrupt?.()},get inTransaction(){return u(),o.inTransaction===!0},enforceReadOnly(){if(u(),r)return!0;if(m)throw new Error("Internal error: cannot escalate to read-only while an internal write lift is open");try{f()}catch(p){throw l=st(new Error(`Read-only enforcement could not be armed (${p?.message??p}); this connection is no longer trustworthy and has been disabled`),p),l.cause=p,l}return r=!0,!0},close(){if(!i){i=!0;for(let p of[...a])p.free();a.clear(),Z(s),s=null,o.close()}},get backingDatabase(){return o}};return D}var gl,yl,hl,El,wl,Sl,bl,Tl,Cl,Rl,Lo,Al,vo=M(()=>{"use strict";A();Oo();gl=0,yl=/^(?:\?\d*|[:@$][A-Za-z0-9_$\u0080-\uffff]+(?:\([^()]*\))?)/,hl=/^explain\b/i,El=/^(?:attach|detach)\b/i,wl=/^vacuum\b/i,Sl=/^(?:select|values|with)\b/i,bl=/\binto\b/i,Tl=/\b(?:attach|detach|vacuum)\b/i,Cl="ERR_NATIVE_SQL_ATTACH_BLOCKED",Rl="ERR_NATIVE_SQL_VACUUM_INTO_BLOCKED";Lo="NULL";Al=8});function zn(e){return Number.isNaN(e)?Po:e>0?ko:Kn}function Xn(e){return e.startsWith("~")?`~${e}`:e}function Gn(e){return e.startsWith("~~")?e.slice(1):e===ko?Number.POSITIVE_INFINITY:e===Kn?Number.NEGATIVE_INFINITY:e===Po?Number.NaN:e}var Qn,ko,Kn,Po,vl,Pt=M(()=>{"use strict";A();Qn="~sqlite-explorer-non-finite:",ko=`${Qn}Infinity`,Kn=`${Qn}-Infinity`,Po=`${Qn}NaN`,vl=Kn.length+2});function Fo(e,t,n){return new at({code:kl,direction:e,actualBytes:t,limitBytes:n,message:`Native frame rejected: ${e} payload is ${t} bytes and exceeds the ${n}-byte frame limit.`})}function Dt(e,t){return new at({code:Pl,direction:"incoming",message:`Native frame rejected: ${e}`,cause:t})}function ql(e,t){return new at({code:Dl,direction:"incoming",actualBytes:e,limitBytes:t,fatal:!0,message:`Native frame stream desynchronised: header declares ${e} bytes, beyond the ${t}-byte recoverable-drain limit. The stream is no longer framed; reading has stopped.`})}function Wo(e){if(e===void 0)return qo;if(!Number.isSafeInteger(e)||e<1||e>Do)throw new RangeError(`Native frame limit must be an integer in [1, ${Do}], got ${e}`);return e}function Vl(e,t){if(e===void 0)return t*Vo;if(!Number.isSafeInteger(e)||eMt)throw new RangeError(`Native frame drain limit must be an integer in [${t}, ${Mt}], got ${e}`);return e}function Yn(e){if(e.length===0)return"";let t=[];for(let n=0;nMt)throw new RangeError(`Native frame header must be an integer in [0, ${Mt}], got ${e}`);return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function jl(e,t=0){if(!e||e.length>>0}function Uo(e){return e.length<=Mo?e:`${e.slice(0,Mo)}\u2026 [truncated]`}function Ut(e){if(!e||typeof e!="object")return{name:"Error",message:Uo(typeof e=="string"?e:String(e))};let t={name:typeof e.name=="string"?e.name:"Error",message:Uo(typeof e.message=="string"?e.message:String(e))};return typeof e.code=="string"&&(t.code=e.code),Number.isSafeInteger(e.errno)&&(t.errno=e.errno),t}function Hl(e){if(!e||typeof e!="object"||typeof e.message!="string")return;let t=new Error(e.message);return typeof e.name=="string"&&(t.name=e.name),typeof e.code=="string"&&(t.code=e.code),Number.isSafeInteger(e.errno)&&(t.errno=e.errno),t}function Jn(e){return!!e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"}function Ql(e){return Zn(e,new WeakSet)}function Zn(e,t){if(typeof e=="bigint")return{__type:"BigInt",decimal:e.toString()};if(typeof e=="number")return Number.isFinite(e)?e:zn(e);if(typeof e=="string")return Xn(e);if(e instanceof Uint8Array)return{__type:"Uint8Array",base64:Yn(e)};if(ArrayBuffer.isView(e))return{__type:"Uint8Array",base64:Yn(new Uint8Array(e.buffer,e.byteOffset,e.byteLength))};if(e instanceof ArrayBuffer)return{__type:"Uint8Array",base64:Yn(new Uint8Array(e))};if(e instanceof Error)return{__type:"Error",error:Ut(e)};if(e===null||typeof e!="object")return e;if(t.has(e))throw new TypeError("Native frame value: circular reference");t.add(e);try{if(Array.isArray(e))return e.map(r=>Zn(r,t));if(!Jn(e))return e;let n={};for(let r of Object.keys(e))jo(n,r,Zn(e[r],t));return n}finally{t.delete(e)}}function Bt(e,t,n){return t.length===2&&t.includes("__type")&&t.includes(n)}function jo(e,t,n){if(t==="__proto__"){Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0});return}e[t]=n}function er(e){if(typeof e=="string")return Gn(e);if(Array.isArray(e))return e.map(er);if(!Jn(e))return e;let t=Object.keys(e);if(e.__type==="BigInt"&&typeof e.decimal=="string"&&Bt(e,t,"decimal")){if(!Ul.test(e.decimal))throw new TypeError(`Native frame value: invalid BigInt marker payload ${JSON.stringify(e.decimal)}`);return BigInt(e.decimal)}if(e.__type==="Uint8Array"&&typeof e.base64=="string"&&Bt(e,t,"base64"))return Fl(e.base64);if(e.__type==="Uint8Array"&&Array.isArray(e.data)&&Bt(e,t,"data"))return new Uint8Array(e.data);if(e.__type==="Error"&&Jn(e.error)&&Bt(e,t,"error")){let r=Hl(e.error);if(!r)throw new TypeError("Native frame value: invalid Error marker payload");return r}let n={};for(let r of t)jo(n,r,er(e[r]));return n}function Kl(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function tr(e,t){let n=Wo(t?.maxFrameBytes),r=JSON.stringify(Ql(e));if(typeof r!="string")throw new TypeError("Native frame: message is not JSON-serialisable");if(r.length*3>n){let a=Kl(r);if(a>n)throw Fo("outgoing",a,n)}let o=Bl.encode(r),i=new Uint8Array(Oe+o.length);return i.set(Wl(o.length),0),i.set(o,Oe),i}function Ho(e,t,n){let r=Wo(n?.maxFrameBytes),o=Vl(n?.maxDrainBytes,r),i=[],a=0,s=0,l=-1,u=0,c=!1,d=!1,f=g=>{s-=g;let S=g;for(;S>0;){let R=i[0].length-a;R>S?(a+=S,S=0):(S-=R,i.shift(),a=0)}},m=g=>{if(g===0)return new Uint8Array(0);let S=i[0];if(S.length-a>=g){let I=S.subarray(a,a+g);return f(g),I}let w=new Uint8Array(g),R=0;for(;R{let S;try{S=Ml.decode(g)}catch(I){t(Dt(`payload is not valid UTF-8 (${g.length} bytes)`,I));return}let w;try{w=JSON.parse(S)}catch(I){t(Dt(`payload is not valid JSON (${g.length} bytes)`,I));return}let R;try{R=er(w)}catch(I){t(Dt(`payload carries an invalid tagged value: ${I?.message??I}`,I));return}e(R)},y=()=>{for(;;){if(u>0){let S=Math.min(u,s);if(S>0&&(f(S),u-=S),u>0)return;continue}if(l<0){if(so){d=!0,i.length=0,a=0,s=0,u=0,t(ql(S,o));return}if(S>r){u=S,t(Fo("incoming",S,r));continue}l=S}if(s0||l>=0))){let g=l>=0?l-s:null;t(Dt(g===null?`stream ended with a truncated frame header (${s} of ${Oe} bytes)`:`stream ended with a truncated frame payload (${g} of ${l} bytes missing)`))}},get bufferedBytes(){return s},get skipRemainingBytes(){return u},get fatal(){return d}}}function qe(e,t=null){let n=Ut(e);return{channel:"rpc",content:{kind:"response",messageId:t,success:!1,errorMessage:n.message,error:n}}}var Oe,qo,Vo,Ef,Do,Mt,kl,Pl,Dl,Bl,Ml,Ul,Bo,Mo,at,nr=M(()=>{"use strict";A();Pt();Oe=4,qo=16*1024*1024,Vo=4,Ef=qo*Vo,Do=268435456,Mt=4294967295,kl="ERR_NATIVE_FRAME_TOO_LARGE",Pl="ERR_NATIVE_FRAME_MALFORMED",Dl="ERR_NATIVE_FRAME_DESYNC",Bl=new TextEncoder,Ml=new TextDecoder("utf-8",{fatal:!0}),Ul=/^-?(?:0|[1-9][0-9]*)$/,Bo=32768,Mo=512,at=class extends Error{constructor(t){super(t.message,t.cause===void 0?void 0:{cause:t.cause}),this.name="NativeFrameError",this.code=t.code,this.direction=t.direction,this.actualBytes=t.actualBytes,this.limitBytes=t.limitBytes,this.fatal=t.fatal===!0}}});function Qo(e={}){let t=e.stdin??globalThis.tjs?.stdin,n=e.stdout??globalThis.tjs?.stdout;if(!t||typeof t.getReader!="function")throw new TypeError("stdio transport requires a WHATWG readable stdin (getReader)");if(!n||typeof n.getWriter!="function")throw new TypeError("stdio transport requires a WHATWG writable stdout (getWriter)");let r={};e.maxFrameBytes!==void 0&&(r.maxFrameBytes=e.maxFrameBytes),e.maxDrainBytes!==void 0&&(r.maxDrainBytes=e.maxDrainBytes);let o=e.maxFrameBytes===void 0?void 0:{maxFrameBytes:e.maxFrameBytes},i=t.getReader(),a=n.getWriter(),s=null,l=!1,u=!1,c=null,d=Promise.resolve(),f=(w,R,I)=>{try{R(I)}catch(T){console.error(`[stdio-transport] ${w} callback threw`,T)}},m=w=>{e.onTransportError?f("onTransportError",e.onTransportError,w):console.error("[stdio-transport]",w)},E=w=>{let R=d.then(()=>a.write(w));return d=R.then(()=>{},()=>{}),R.catch(m),R},y=Ho(w=>{if(!s){m(new Error("stdio transport received a frame before onmessage was installed"));return}f("onmessage",s,{data:w})},w=>{try{E(tr(qe(w),o))}catch(R){m(R)}w?.fatal===!0&&(c=w)},r),g=w=>{u||(u=!0,e.onEof&&f("onEof",e.onEof,w))},S=async()=>{let w={kind:"eof"};try{for(;;){let R=await i.read();if(R.done)break;let I=R.value;if(I&&I.length>0&&y.push(I),c){w={kind:"fatal",error:c};break}}}catch(R){m(R),w={kind:"stream-error",error:R}}finally{y.end(),g(w)}};return{get onmessage(){return s},set onmessage(w){s=w},postMessage(w){return E(tr(w,o))},start(){if(l)throw new Error("stdio transport already started");return l=!0,S()},flush(){return d}}}var Ko=M(()=>{"use strict";A();nr()});function zo(e){return e.startsWith("--path-utf8=")?decodeURIComponent(e.slice(12)):e}var Xo=M(()=>{"use strict";A()});import{Database as zl}from"tjs:sqlite";import Go from"tjs:path";async function ec(e){let t=Go.dirname(tjs.exePath);for(let n of["query-plan.dylib","query-plan.so","query-plan.dll"]){let r=Go.join(t,n);try{await tjs.stat(r)}catch(o){if(o?.code==="ENOENT")continue;throw o}e.backingDatabase.loadExtension(r,"sqlite3_sqliteexplorer_init");return}throw new Error("Missing bundled query-plan reader beside the native runtime.")}async function B(e){if(Ve=null,e?.path!==qt)throw new Error(`refusing to open a database other than the one this sidecar was bound to at spawn (got ${JSON.stringify(e?.path??null)})`);let t=e.readOnlyMode===!0;if(Yl&&!t)throw new Error("refusing a writable open: this sidecar was spawned for a read-only session");let n=$o({path:qt,readOnly:t},Zl);try{await ec(n)}catch(i){throw n.close(),new Error(`Unable to initialize the bounded query-plan reader: ${i?.message??i}`,{cause:i})}let r=Number.isFinite(e.queryTimeout)&&e.queryTimeout>0?e.queryTimeout:Xl,o=n.progress_handler.bind(n);return n.progress_handler=(i,a)=>{o(i,a),i!=null&&typeof a=="function"?n.setQueryDeadline(r):n.clearQueryDeadline()},Ve=n,{SQL:Object.freeze({engine:"tjs-native",queryPlanReaderActive:!0}),db:n}}async function rc(e,t){let n=`__shell_export_${++tc}_${Math.random().toString(36).slice(2)}`,r=null;Vt.set(n,o=>{r=o});try{if(typeof globalThis.onmessage!="function")throw new Error("worker method layer is not loaded (no onmessage handler)");await globalThis.onmessage({data:{channel:"rpc",content:{kind:"invoke",messageId:n,targetMethod:e,payload:t}}})}finally{Vt.delete(n)}if(r===null)throw new Error(`in-process ${e} completed without posting a response`);if(r.success!==!0){let o=new Error(r.errorMessage||`${e} failed`);throw typeof r.error?.code=="string"&&(o.code=r.error.code),Number.isSafeInteger(r.error?.errno)&&(o.errno=r.error.errno),o}return r.data}async function oc(e){try{if(!Ve)throw new Error("No database initialized");let t=await Ve.exportAsync();We({channel:"rpc",content:{kind:"response",messageId:e,success:!0,data:t}})}catch(t){We(qe(t,e))}}async function ic(e){let t=typeof e?.messageId=="string"||typeof e?.messageId=="number"?e.messageId:null;if(t===null){console.error("[native-worker] shell export request without a messageId; dropped");return}try{let n=e.method,r=e.tempPath;if(n!=="exportDatabase"&&n!=="exportTable")throw new Error(`unknown shell export method ${JSON.stringify(n??null)}`);if(typeof r!="string"||r.length===0)throw new Error("shell export request carries no tempPath");let o;if(n==="exportDatabase"){if(!Ve)throw new Error("No database initialized");await Ve.exportToPath(r),o=(await tjs.stat(r)).size}else{if(!Array.isArray(e.args))throw new Error("shell exportTable request carries no args array");let a=(await rc("exportTable",e.args))?.contentChunks;if(!Array.isArray(a))throw new Error("exportTable returned no contentChunks array");o=await sc(r,a)}We({channel:"shell",content:{kind:"export-result",messageId:t,success:!0,bytesWritten:o}})}catch(n){We({channel:"shell",content:{kind:"export-result",messageId:t,success:!1,error:Ut(n)}})}}async function sc(e,t){let n=await tjs.open(e,"wx"),r=0,o=null;try{let i=new TextEncoder;for(let a of t){let s;if(typeof a=="string")s=i.encode(a);else if(a instanceof Uint8Array)s=a;else throw new Error(`exportTable produced an unwritable chunk (${typeof a})`);for(;s.length>0;){let l=await n.write(s);if(!Number.isInteger(l)||l<=0)throw new Error(`short write to export temp file (wrote ${l})`);r+=l,s=s.subarray(l)}}return await n.sync(),r}catch(i){throw o=i,i}finally{try{await n.close()}catch(i){if(o===null)throw i;console.error(`[native-worker] failed to close export temp file: ${i?.message??i}`)}}}var Zo,ei,ti,Yo,Xl,Gl,Le,qt,Yl,Jl,Zl,Ve,ni,ri,Fe,oi,We,Vt,tc,nc,Jo,rr=M(()=>{"use strict";A();vo();Ko();nr();Xo();Zo=0,ei=1,ti=2,Yo=3,Xl=3e4,Gl=1e3,Le=tjs.args.slice(3);(Le.length!==2||Le[0]===""||Le[1]!=="ro"&&Le[1]!=="rw")&&(console.error(`[native-worker] bad argv ${JSON.stringify(Le)}; usage: tjs run native-worker-desktop.js ro|rw`),tjs.exit(ti));try{if(qt=zo(Le[0]),!qt)throw new Error("database path is empty")}catch(e){console.error(`[native-worker] invalid bound path: ${e.message}`),tjs.exit(ti)}Yl=Le[1]==="ro",Jl=(tjs.env.TMPDIR??tjs.env.TEMP??tjs.env.TMP??"/tmp").replace(/[\\/]+$/,""),Zl={sqlite:{Database:zl},fs:{makeTempDir:()=>tjs.makeTempDir(`${Jl}/sqlite-explorer-export-XXXXXX`),readFile:e=>tjs.readFile(e),remove:e=>tjs.remove(e,{recursive:!0})},onCleanupFailure:(e,t)=>{console.error(`[native-worker] cleanup failed (${t}): ${e?.message??e}`)}},Ve=null;ni={kind:"eof"},ri=()=>ni,Fe=Qo({onEof:e=>{ni=e},onTransportError:e=>{console.error(`[native-worker] transport error: ${e?.message??e}`)}}),oi=e=>{let t=e?.content?.messageId;return typeof t=="string"||typeof t=="number"?t:null},We=e=>{try{Fe.postMessage(e)}catch(t){try{Fe.postMessage(qe(t,oi(e)))}catch(n){console.error(`[native-worker] failed to send bounded error response: ${n?.message??n}`)}}};globalThis.postMessage=(e,t)=>{nc(e)||We(e)};Vt=new Map,tc=0,nc=e=>{if(e?.channel!=="rpc"||e?.content?.kind!=="response")return!1;let t=Vt.get(e.content.messageId);return t===void 0?!1:(Vt.delete(e.content.messageId),t(e.content),!0)};Fe.onmessage=async e=>{let t=e?.data;try{if(t?.channel==="shell"){t.content?.kind==="export"?await ic(t.content):console.error(`[native-worker] unknown shell message kind ${JSON.stringify(t.content?.kind??null)}; dropped`);return}let n=t?.channel==="rpc"?t.content:void 0;if(n?.kind==="invoke"&&n.targetMethod==="exportDatabase"){await oc(n.messageId);return}await globalThis.onmessage?.(e)}catch(n){We(qe(n,oi(t)))}};Jo=tjs.ppid;setInterval(()=>{tjs.ppid!==Jo&&(console.error(`[native-worker] parent process ${Jo} vanished without closing stdin (ppid now ${tjs.ppid}); exiting (code ${Yo})`),tjs.exit(Yo))},Gl)});var A=M(()=>{"use strict";rr()});function ge(e){if(e==="utf-8")return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});let t=e==="utf-16le";return{decode(n){if(n.length%2!==0)throw new TypeError(`Invalid ${e}: odd byte length`);let r=a=>t?n[a]|n[a+1]<<8:n[a]<<8|n[a+1],o=[],i="";for(let a=0;a=55296&&s<=56319){let l=a+257343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s,l),a+=2}else{if(s>=56320&&s<=57343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s)}i.length>=8192&&(o.push(i),i="")}return o.push(i),o.join("")}}}var Ft=M(()=>{"use strict";A()});function C(e){return`"${e.replace(/"/g,'""')}"`}function L(e){return`main.${C(e)}`}function z(e,t="Identifier"){if(typeof e!="string"||e.length===0)throw new Error(`${t} is required`);if(e.includes("\0"))throw new Error(`${t} cannot contain NUL characters`)}function or(e){if(!e||typeof e!="string")throw new Error("Invalid SQL type: Type must be a non-empty string");if(/['";\-\/\*]/.test(e))throw new Error(`Invalid SQL type: "${e}" contains potentially unsafe characters`);if(!/^[a-zA-Z0-9_\s]+(?:\([0-9\s,]+\)[a-zA-Z0-9_\s]*)?$/.test(e.trim()))throw new Error(`Invalid SQL type: "${e}" does not match allowed format`)}function ii(e){if(e==null)return"NULL";if(typeof e=="number")return String(e);if(typeof e=="bigint")return e.toString();if(typeof e=="string"){if(e.includes("\0")){let n=new TextEncoder().encode(e);return`CAST(X'${Array.from(n).map(o=>o.toString(16).padStart(2,"0")).join("")}' AS TEXT)`}return`'${e.replace(/'/g,"''")}'`}return e instanceof Uint8Array?`X'${Array.from(e).map(n=>n.toString(16).padStart(2,"0")).join("")}'`:`'${String(e).replace(/'/g,"''")}'`}function lt(e,t="\\"){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`[${n}%_]`,"g");return e.replace(r,o=>t+o)}function H(e){let t=typeof e;if(t!=="string"&&t!=="number"&&t!=="bigint")throw new Error(`Invalid rowid: ${e}`);if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`Invalid rowid: ${e}`);return e}let n=typeof e=="string"?e.trim():e.toString();if(!/^[+-]?\d+$/.test(n))throw new Error(`Invalid rowid: ${e}`);let r=BigInt(n);if(rlc)throw new Error(`Invalid rowid: ${e}`);let o=Number(r);return Number.isSafeInteger(o)?o:r.toString()}var ac,lc,Y=M(()=>{"use strict";A();ac=-9223372036854775808n,lc=9223372036854775807n});function si(e){return/[A-Za-z0-9_$\u0080-\uFFFF]/.test(e)}function ci(e){let t=[],n=0;for(;n{let r=/^(.*):\d+$/.exec(n);return r!==null&&t.has(r[1])})}function Ll(e,t){return typeof e=="bigint"&&!t?Number(e):e}function kt(e,t,n,r){if(n>=t.length)return null;let o=t.slice(n),i=jn(o),a=El.exec(i);if(a)throw xl(a[0]);let s;try{s=e.prepare(o)}catch(d){throw Hn(d,o,r)}let l;try{l=String(s)}catch(d){throw Z(s),d}if(l==="")return Z(s),null;let u=Nl(o,l);if(u<0)throw Z(s),new Error("Unable to determine the SQL statement boundary: the compiled statement text does not align with its source");let c=o.slice(0,u);if(wl.test(i)&&bl.test(c))throw Z(s),Il();return{compiled:s,source:c,expanded:l,end:n+u}}function Z(e){try{e?.finalize?.()}catch{}}function $l(e,t,n){let r=0;for(;;){let o=kt(e,t,r,n);if(o===null)return;r=o.end,Z(o.compiled)}}function Wn(e,t,n,r){let o=t,i,a=null,s,l=null,u=-1,c=n===r?n:r,d=()=>{if(e.assertUsable(),o===null)throw new Error("Statement closed")},f=()=>{if(s!==void 0)return s;let g=e.probeColumnNames(c);return s=g&&n!==r&&Ol(g)?null:g,s},m=()=>{if(a!==null)return a;let g;try{g=i===void 0?o.all():o.all(i)}catch(R){throw Hn(R,n,e.describeError)}let S=g.length>0?Object.keys(g[0]):[],w=g.map(R=>S.map(I=>R[I]));if(s&&g.length>0&&s.length!==S.length){let R=n===r?e.readRowsThroughView(c):null;if(R)return a=R,a;s=S,l=S}return a={columns:s??S,values:w},a},E=()=>{if(l!==null)return l;if(a!==null)return l=a.columns,l;let g=f();return g?(l=g,l):hl.test(jn(c))?(l=m().columns,l):[]},y={bind(g){return d(),i=g??void 0,a=null,u=-1,!0},step(){return d(),m(),u+=1,u=a.values.length)return[];let w=S?.useBigInt===!0;return a.values[u].map(R=>Ll(R,w))},getColumnNames(){return d(),E().slice()},run(g){return d(),g!=null&&y.bind(g),y.step(),y.reset()},reset(){return d(),i=void 0,a=null,u=-1,!0},getSQL(){return n},free(){if(o===null)return!1;let g=o;return o=null,e.forget(y),Z(g),!0}};return e.register(y),y}function $o(e={},t={}){let n=t.sqlite;if(typeof n?.Database!="function")throw new Error("createShimDatabase requires deps.sqlite.Database");if(e.content!==void 0)throw new Error("createShimDatabase: opening from bytes is not supported by the native engine; open by path ({ path, readOnly }) or use the WASM engine");let r=e.readOnly===!0,o=e.path===void 0||e.path===null?new n.Database(":memory:"):new n.Database(e.path,r?{readOnly:!0}:{create:!0}),i=!1,a=new Set,s=null,l=null,u=()=>{if(l!==null)throw l;if(i)throw new Error("Database closed")},c=(p,b)=>{try{t.onCleanupFailure?.(p,b)}catch{}},d=p=>{let b=o.prepare(p);try{let k=b.all()[0];return k===void 0?void 0:k[Object.keys(k)[0]]}finally{Z(b)}},f=()=>{try{o.exec("PRAGMA query_only = 1")}catch(p){throw st(new Error(`Unable to enforce read-only mode: ${p?.message??p}`),p)}if(Number(d("PRAGMA query_only"))!==1)throw new Error("Unable to enforce read-only mode: PRAGMA query_only did not take")};if(r)try{f()}catch(p){throw o.close(),p}let m=!1,E=p=>{if(!r)return p();if(l!==null)throw l;if(m)throw new Error("Internal error: read-only write lift is not re-entrant");o.exec("PRAGMA query_only = 0"),m=!0;let b=null,N;try{N=p()}catch(k){b=k}try{o.exec("PRAGMA query_only = 1")}catch(k){l=st(new Error("Read-only enforcement could not be restored (PRAGMA query_only); this connection is no longer trustworthy and has been disabled"),k),l.cause=k,b?b.cause===void 0&&(b.cause=k):b=l}finally{m=!1}if(b)throw b;return N},y=(p,b)=>{let N=jn(p);if(N==="")return null;let k=`_sqlx_shim_cols_${++gl}`,U=`"${k}"`,j=`'${k}'`;try{E(()=>{let F=o.prepare(`CREATE TEMP VIEW ${U} AS ${N}`);try{F.run()}finally{Z(F)}})}catch(F){if(l!==null)throw l;if(_l(F)&&Sl.test(N))throw st(new Error(`Column names are unavailable: this connection refuses writes (PRAGMA query_only is armed) but was not opened read-only, so the probe cannot create the temporary view it reads them from. Close and reopen the database to clear it. (A session made read-only after opening must be escalated through enforceReadOnly(), which is what lets the probe lift query_only. SQLite: ${F?.message??F})`),F);return null}try{return b({quoted:U,literal:j})}catch{if(l!==null)throw l;return null}finally{try{E(()=>o.exec(`DROP VIEW IF EXISTS temp.${U}`))}catch(F){c(F,"drop column-probe view")}}},g=p=>{let b;try{b=o.prepare(`SELECT 1 FROM "${String(p).replace(/"/g,'""')}" WHERE 0`)}catch{return!1}return Z(b),!0},S=p=>{let b;try{b=o.prepare("SELECT count(*) AS c FROM (SELECT name FROM sqlite_schema UNION ALL SELECT name FROM sqlite_temp_schema) WHERE name = ? COLLATE NOCASE")}catch{return!0}try{return Number(b.all([String(p)])[0]?.c??1)>0}catch{return!0}finally{Z(b)}},w=p=>{let b;try{b=o.prepare("SELECT sql FROM (SELECT name, type, sql FROM sqlite_schema UNION ALL SELECT name, type, sql FROM sqlite_temp_schema) WHERE type = 'view' AND name = ? COLLATE NOCASE LIMIT 1")}catch{return}try{let N=b.all([String(p)])[0]?.sql;return typeof N=="string"?N:void 0}catch{return}finally{Z(b)}},R=(p,b)=>No(p.errno,p.message,b,{resolves:g,inCatalog:S,viewSql:w}),I={assertUsable:()=>{if(l!==null)throw l},describeError:R,register:p=>a.add(p),forget:p=>a.delete(p),probeColumnNames:p=>y(p,({literal:b})=>{let N=o.prepare(`SELECT name FROM pragma_table_info(${b})`);try{let k=N.all().map(U=>U.name);return k.length>0?k:null}finally{Z(N)}}),readRowsThroughView:p=>y(p,({quoted:b})=>{let N=o.prepare(`SELECT * FROM ${b}`);try{let k=N.all();if(k.length===0)return null;let U=Object.keys(k[0]);return{columns:U,values:k.map(j=>U.map(F=>j[F]))}}finally{Z(N)}})},T=p=>{let b=kt(o,p,0,R);if(b===null)throw new Error("Nothing to prepare");return Wn(I,b.compiled,b.source,b.expanded)},_=()=>{let p=t.fs;if(!p||typeof p.makeTempDir!="function"||typeof p.readFile!="function"||typeof p.remove!="function")throw new Error("export() requires deps.fs with makeTempDir/readFile/remove");return p},$=null,O=p=>E(()=>{o.vacuumInto(p)}),D={exec(p,b,N){u();let k=[],U=0;for(;;){let j=kt(o,p,U,R);if(j===null)break;U=j.end;let F=Wn(I,j.compiled,j.source,j.expanded);try{b!=null&&F.bind(b),F.getColumnNames();let re=null,Lt=[];for(;F.step();)re===null&&(re=F.getColumnNames()),Lt.push(F.get(null,N));re!==null&&k.push({columns:re,values:Lt})}finally{F.free()}}return k},run(p,b){if(u(),b!=null){let N=T(p);try{N.bind(b),N.step()}finally{N.free()}}else{Tl.test(p)&&$l(o,p,R);try{o.exec(p)}catch(N){throw Hn(N,p,R)}}return D},prepare(p,b){u();let N=T(p);return b!=null&&N.bind(b),N},iterateStatements(p){u();let b=0,N=null,k=!1;return{next(){if(N!==null&&(N.free(),N=null),k)return{done:!0};u();let U;try{U=kt(o,p,b,R)}catch(j){throw k=!0,j}return U===null?(k=!0,{done:!0}):(b=U.end,N=Wn(I,U.compiled,U.source,U.expanded),{value:N,done:!1})},getRemainingSQL(){return p.slice(b)},[Symbol.iterator](){return this}}},getRowsModified(){return u(),s??=o.prepare("SELECT changes() AS c"),Number(s.all()[0].c)},export(){u();let p=_(),b=p.makeTempDir();if(typeof b?.then=="function")throw new Error("export() requires a synchronous deps.fs; use exportAsync() on runtimes whose filesystem API is promise-based (tjs)");try{let N=`${b}/export.sqlite`;O(N);let k=p.readFile(N);if(typeof k?.then=="function")throw new Error("export() requires a synchronous deps.fs.readFile; use exportAsync()");return k}finally{try{p.remove(b)}catch(N){c(N,"remove export temp directory")}}},async exportAsync(){u();let p=_(),b=await p.makeTempDir();try{let N=`${b}/export.sqlite`;return O(N),await p.readFile(N)}finally{try{await p.remove(b)}catch(N){c(N,"remove export temp directory")}}},async exportToPath(p){if(u(),typeof p!="string"||p.length===0)throw new Error("exportToPath requires a non-empty target path");O(p)},progress_handler(p,b){u(),$=b==null?null:{interval:p,callback:b}},get progressHandler(){return $},setQueryDeadline(p){u(),o.setQueryDeadline?.(p)},clearQueryDeadline(){u(),o.clearQueryDeadline?.()},interrupt(){u(),o.interrupt?.()},get inTransaction(){return u(),o.inTransaction===!0},enforceReadOnly(){if(u(),r)return!0;if(m)throw new Error("Internal error: cannot escalate to read-only while an internal write lift is open");try{f()}catch(p){throw l=st(new Error(`Read-only enforcement could not be armed (${p?.message??p}); this connection is no longer trustworthy and has been disabled`),p),l.cause=p,l}return r=!0,!0},close(){if(!i){i=!0;for(let p of[...a])p.free();a.clear(),Z(s),s=null,o.close()}},get backingDatabase(){return o}};return D}var gl,yl,hl,El,wl,Sl,bl,Tl,Cl,Rl,Lo,Al,vo=M(()=>{"use strict";A();Oo();gl=0,yl=/^(?:\?\d*|[:@$][A-Za-z0-9_$\u0080-\uffff]+(?:\([^()]*\))?)/,hl=/^explain\b/i,El=/^(?:attach|detach)\b/i,wl=/^vacuum\b/i,Sl=/^(?:select|values|with)\b/i,bl=/\binto\b/i,Tl=/\b(?:attach|detach|vacuum)\b/i,Cl="ERR_NATIVE_SQL_ATTACH_BLOCKED",Rl="ERR_NATIVE_SQL_VACUUM_INTO_BLOCKED";Lo="NULL";Al=8});function zn(e){return Number.isNaN(e)?Po:e>0?ko:Kn}function Xn(e){return e.startsWith("~")?`~${e}`:e}function Gn(e){return e.startsWith("~~")?e.slice(1):e===ko?Number.POSITIVE_INFINITY:e===Kn?Number.NEGATIVE_INFINITY:e===Po?Number.NaN:e}var Qn,ko,Kn,Po,vl,Pt=M(()=>{"use strict";A();Qn="~sqlite-explorer-non-finite:",ko=`${Qn}Infinity`,Kn=`${Qn}-Infinity`,Po=`${Qn}NaN`,vl=Kn.length+2});function Fo(e,t,n){return new at({code:kl,direction:e,actualBytes:t,limitBytes:n,message:`Native frame rejected: ${e} payload is ${t} bytes and exceeds the ${n}-byte frame limit.`})}function Dt(e,t){return new at({code:Pl,direction:"incoming",message:`Native frame rejected: ${e}`,cause:t})}function ql(e,t){return new at({code:Dl,direction:"incoming",actualBytes:e,limitBytes:t,fatal:!0,message:`Native frame stream desynchronised: header declares ${e} bytes, beyond the ${t}-byte recoverable-drain limit. The stream is no longer framed; reading has stopped.`})}function Wo(e){if(e===void 0)return qo;if(!Number.isSafeInteger(e)||e<1||e>Do)throw new RangeError(`Native frame limit must be an integer in [1, ${Do}], got ${e}`);return e}function Vl(e,t){if(e===void 0)return t*Vo;if(!Number.isSafeInteger(e)||eMt)throw new RangeError(`Native frame drain limit must be an integer in [${t}, ${Mt}], got ${e}`);return e}function Yn(e){if(e.length===0)return"";let t=[];for(let n=0;nMt)throw new RangeError(`Native frame header must be an integer in [0, ${Mt}], got ${e}`);return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function jl(e,t=0){if(!e||e.length>>0}function Uo(e){return e.length<=Mo?e:`${e.slice(0,Mo)}\u2026 [truncated]`}function Ut(e){if(!e||typeof e!="object")return{name:"Error",message:Uo(typeof e=="string"?e:String(e))};let t={name:typeof e.name=="string"?e.name:"Error",message:Uo(typeof e.message=="string"?e.message:String(e))};return typeof e.code=="string"&&(t.code=e.code),Number.isSafeInteger(e.errno)&&(t.errno=e.errno),t}function Hl(e){if(!e||typeof e!="object"||typeof e.message!="string")return;let t=new Error(e.message);return typeof e.name=="string"&&(t.name=e.name),typeof e.code=="string"&&(t.code=e.code),Number.isSafeInteger(e.errno)&&(t.errno=e.errno),t}function Jn(e){return!!e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"}function Ql(e){return Zn(e,new WeakSet)}function Zn(e,t){if(typeof e=="bigint")return{__type:"BigInt",decimal:e.toString()};if(typeof e=="number")return Number.isFinite(e)?e:zn(e);if(typeof e=="string")return Xn(e);if(e instanceof Uint8Array)return{__type:"Uint8Array",base64:Yn(e)};if(ArrayBuffer.isView(e))return{__type:"Uint8Array",base64:Yn(new Uint8Array(e.buffer,e.byteOffset,e.byteLength))};if(e instanceof ArrayBuffer)return{__type:"Uint8Array",base64:Yn(new Uint8Array(e))};if(e instanceof Error)return{__type:"Error",error:Ut(e)};if(e===null||typeof e!="object")return e;if(t.has(e))throw new TypeError("Native frame value: circular reference");t.add(e);try{if(Array.isArray(e))return e.map(r=>Zn(r,t));if(!Jn(e))return e;let n={};for(let r of Object.keys(e))jo(n,r,Zn(e[r],t));return n}finally{t.delete(e)}}function Bt(e,t,n){return t.length===2&&t.includes("__type")&&t.includes(n)}function jo(e,t,n){if(t==="__proto__"){Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0});return}e[t]=n}function er(e){if(typeof e=="string")return Gn(e);if(Array.isArray(e))return e.map(er);if(!Jn(e))return e;let t=Object.keys(e);if(e.__type==="BigInt"&&typeof e.decimal=="string"&&Bt(e,t,"decimal")){if(!Ul.test(e.decimal))throw new TypeError(`Native frame value: invalid BigInt marker payload ${JSON.stringify(e.decimal)}`);return BigInt(e.decimal)}if(e.__type==="Uint8Array"&&typeof e.base64=="string"&&Bt(e,t,"base64"))return Fl(e.base64);if(e.__type==="Uint8Array"&&Array.isArray(e.data)&&Bt(e,t,"data"))return new Uint8Array(e.data);if(e.__type==="Error"&&Jn(e.error)&&Bt(e,t,"error")){let r=Hl(e.error);if(!r)throw new TypeError("Native frame value: invalid Error marker payload");return r}let n={};for(let r of t)jo(n,r,er(e[r]));return n}function Kl(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function tr(e,t){let n=Wo(t?.maxFrameBytes),r=JSON.stringify(Ql(e));if(typeof r!="string")throw new TypeError("Native frame: message is not JSON-serialisable");if(r.length*3>n){let a=Kl(r);if(a>n)throw Fo("outgoing",a,n)}let o=Bl.encode(r),i=new Uint8Array(Oe+o.length);return i.set(Wl(o.length),0),i.set(o,Oe),i}function Ho(e,t,n){let r=Wo(n?.maxFrameBytes),o=Vl(n?.maxDrainBytes,r),i=[],a=0,s=0,l=-1,u=0,c=!1,d=!1,f=g=>{s-=g;let S=g;for(;S>0;){let R=i[0].length-a;R>S?(a+=S,S=0):(S-=R,i.shift(),a=0)}},m=g=>{if(g===0)return new Uint8Array(0);let S=i[0];if(S.length-a>=g){let I=S.subarray(a,a+g);return f(g),I}let w=new Uint8Array(g),R=0;for(;R{let S;try{S=Ml.decode(g)}catch(I){t(Dt(`payload is not valid UTF-8 (${g.length} bytes)`,I));return}let w;try{w=JSON.parse(S)}catch(I){t(Dt(`payload is not valid JSON (${g.length} bytes)`,I));return}let R;try{R=er(w)}catch(I){t(Dt(`payload carries an invalid tagged value: ${I?.message??I}`,I));return}e(R)},y=()=>{for(;;){if(u>0){let S=Math.min(u,s);if(S>0&&(f(S),u-=S),u>0)return;continue}if(l<0){if(so){d=!0,i.length=0,a=0,s=0,u=0,t(ql(S,o));return}if(S>r){u=S,t(Fo("incoming",S,r));continue}l=S}if(s0||l>=0))){let g=l>=0?l-s:null;t(Dt(g===null?`stream ended with a truncated frame header (${s} of ${Oe} bytes)`:`stream ended with a truncated frame payload (${g} of ${l} bytes missing)`))}},get bufferedBytes(){return s},get skipRemainingBytes(){return u},get fatal(){return d}}}function qe(e,t=null){let n=Ut(e);return{channel:"rpc",content:{kind:"response",messageId:t,success:!1,errorMessage:n.message,error:n}}}var Oe,qo,Vo,wf,Do,Mt,kl,Pl,Dl,Bl,Ml,Ul,Bo,Mo,at,nr=M(()=>{"use strict";A();Pt();Oe=4,qo=16*1024*1024,Vo=4,wf=qo*Vo,Do=268435456,Mt=4294967295,kl="ERR_NATIVE_FRAME_TOO_LARGE",Pl="ERR_NATIVE_FRAME_MALFORMED",Dl="ERR_NATIVE_FRAME_DESYNC",Bl=new TextEncoder,Ml=new TextDecoder("utf-8",{fatal:!0}),Ul=/^-?(?:0|[1-9][0-9]*)$/,Bo=32768,Mo=512,at=class extends Error{constructor(t){super(t.message,t.cause===void 0?void 0:{cause:t.cause}),this.name="NativeFrameError",this.code=t.code,this.direction=t.direction,this.actualBytes=t.actualBytes,this.limitBytes=t.limitBytes,this.fatal=t.fatal===!0}}});function Qo(e={}){let t=e.stdin??globalThis.tjs?.stdin,n=e.stdout??globalThis.tjs?.stdout;if(!t||typeof t.getReader!="function")throw new TypeError("stdio transport requires a WHATWG readable stdin (getReader)");if(!n||typeof n.getWriter!="function")throw new TypeError("stdio transport requires a WHATWG writable stdout (getWriter)");let r={};e.maxFrameBytes!==void 0&&(r.maxFrameBytes=e.maxFrameBytes),e.maxDrainBytes!==void 0&&(r.maxDrainBytes=e.maxDrainBytes);let o=e.maxFrameBytes===void 0?void 0:{maxFrameBytes:e.maxFrameBytes},i=t.getReader(),a=n.getWriter(),s=null,l=!1,u=!1,c=null,d=Promise.resolve(),f=(w,R,I)=>{try{R(I)}catch(T){console.error(`[stdio-transport] ${w} callback threw`,T)}},m=w=>{e.onTransportError?f("onTransportError",e.onTransportError,w):console.error("[stdio-transport]",w)},E=w=>{let R=d.then(()=>a.write(w));return d=R.then(()=>{},()=>{}),R.catch(m),R},y=Ho(w=>{if(!s){m(new Error("stdio transport received a frame before onmessage was installed"));return}f("onmessage",s,{data:w})},w=>{try{E(tr(qe(w),o))}catch(R){m(R)}w?.fatal===!0&&(c=w)},r),g=w=>{u||(u=!0,e.onEof&&f("onEof",e.onEof,w))},S=async()=>{let w={kind:"eof"};try{for(;;){let R=await i.read();if(R.done)break;let I=R.value;if(I&&I.length>0&&y.push(I),c){w={kind:"fatal",error:c};break}}}catch(R){m(R),w={kind:"stream-error",error:R}}finally{y.end(),g(w)}};return{get onmessage(){return s},set onmessage(w){s=w},postMessage(w){return E(tr(w,o))},start(){if(l)throw new Error("stdio transport already started");return l=!0,S()},flush(){return d}}}var Ko=M(()=>{"use strict";A();nr()});function zo(e){return e.startsWith("--path-utf8=")?decodeURIComponent(e.slice(12)):e}var Xo=M(()=>{"use strict";A()});import{Database as zl}from"tjs:sqlite";import Go from"tjs:path";async function ec(e){let t=Go.dirname(tjs.exePath);for(let n of["query-plan.dylib","query-plan.so","query-plan.dll"]){let r=Go.join(t,n);try{await tjs.stat(r)}catch(o){if(o?.code==="ENOENT")continue;throw o}e.backingDatabase.loadExtension(r,"sqlite3_sqliteexplorer_init");return}throw new Error("Missing bundled query-plan reader beside the native runtime.")}async function B(e){if(Ve=null,e?.path!==qt)throw new Error(`refusing to open a database other than the one this sidecar was bound to at spawn (got ${JSON.stringify(e?.path??null)})`);let t=e.readOnlyMode===!0;if(Yl&&!t)throw new Error("refusing a writable open: this sidecar was spawned for a read-only session");let n=$o({path:qt,readOnly:t},Zl);try{await ec(n)}catch(i){throw n.close(),new Error(`Unable to initialize the bounded query-plan reader: ${i?.message??i}`,{cause:i})}let r=Number.isFinite(e.queryTimeout)&&e.queryTimeout>0?e.queryTimeout:Xl,o=n.progress_handler.bind(n);return n.progress_handler=(i,a)=>{o(i,a),i!=null&&typeof a=="function"?n.setQueryDeadline(r):n.clearQueryDeadline()},Ve=n,{SQL:Object.freeze({engine:"tjs-native",queryPlanReaderActive:!0}),db:n}}async function rc(e,t){let n=`__shell_export_${++tc}_${Math.random().toString(36).slice(2)}`,r=null;Vt.set(n,o=>{r=o});try{if(typeof globalThis.onmessage!="function")throw new Error("worker method layer is not loaded (no onmessage handler)");await globalThis.onmessage({data:{channel:"rpc",content:{kind:"invoke",messageId:n,targetMethod:e,payload:t}}})}finally{Vt.delete(n)}if(r===null)throw new Error(`in-process ${e} completed without posting a response`);if(r.success!==!0){let o=new Error(r.errorMessage||`${e} failed`);throw typeof r.error?.code=="string"&&(o.code=r.error.code),Number.isSafeInteger(r.error?.errno)&&(o.errno=r.error.errno),o}return r.data}async function oc(e){try{if(!Ve)throw new Error("No database initialized");let t=await Ve.exportAsync();We({channel:"rpc",content:{kind:"response",messageId:e,success:!0,data:t}})}catch(t){We(qe(t,e))}}async function ic(e){let t=typeof e?.messageId=="string"||typeof e?.messageId=="number"?e.messageId:null;if(t===null){console.error("[native-worker] shell export request without a messageId; dropped");return}try{let n=e.method,r=e.tempPath;if(n!=="exportDatabase"&&n!=="exportTable")throw new Error(`unknown shell export method ${JSON.stringify(n??null)}`);if(typeof r!="string"||r.length===0)throw new Error("shell export request carries no tempPath");let o;if(n==="exportDatabase"){if(!Ve)throw new Error("No database initialized");await Ve.exportToPath(r),o=(await tjs.stat(r)).size}else{if(!Array.isArray(e.args))throw new Error("shell exportTable request carries no args array");let a=(await rc("exportTable",e.args))?.contentChunks;if(!Array.isArray(a))throw new Error("exportTable returned no contentChunks array");o=await sc(r,a)}We({channel:"shell",content:{kind:"export-result",messageId:t,success:!0,bytesWritten:o}})}catch(n){We({channel:"shell",content:{kind:"export-result",messageId:t,success:!1,error:Ut(n)}})}}async function sc(e,t){let n=await tjs.open(e,"wx"),r=0,o=null;try{let i=new TextEncoder;for(let a of t){let s;if(typeof a=="string")s=i.encode(a);else if(a instanceof Uint8Array)s=a;else throw new Error(`exportTable produced an unwritable chunk (${typeof a})`);for(;s.length>0;){let l=await n.write(s);if(!Number.isInteger(l)||l<=0)throw new Error(`short write to export temp file (wrote ${l})`);r+=l,s=s.subarray(l)}}return await n.sync(),r}catch(i){throw o=i,i}finally{try{await n.close()}catch(i){if(o===null)throw i;console.error(`[native-worker] failed to close export temp file: ${i?.message??i}`)}}}var Zo,ei,ti,Yo,Xl,Gl,Le,qt,Yl,Jl,Zl,Ve,ni,ri,Fe,oi,We,Vt,tc,nc,Jo,rr=M(()=>{"use strict";A();vo();Ko();nr();Xo();Zo=0,ei=1,ti=2,Yo=3,Xl=3e4,Gl=1e3,Le=tjs.args.slice(3);(Le.length!==2||Le[0]===""||Le[1]!=="ro"&&Le[1]!=="rw")&&(console.error(`[native-worker] bad argv ${JSON.stringify(Le)}; usage: tjs run native-worker-desktop.js ro|rw`),tjs.exit(ti));try{if(qt=zo(Le[0]),!qt)throw new Error("database path is empty")}catch(e){console.error(`[native-worker] invalid bound path: ${e.message}`),tjs.exit(ti)}Yl=Le[1]==="ro",Jl=(tjs.env.TMPDIR??tjs.env.TEMP??tjs.env.TMP??"/tmp").replace(/[\\/]+$/,""),Zl={sqlite:{Database:zl},fs:{makeTempDir:()=>tjs.makeTempDir(`${Jl}/sqlite-explorer-export-XXXXXX`),readFile:e=>tjs.readFile(e),remove:e=>tjs.remove(e,{recursive:!0})},onCleanupFailure:(e,t)=>{console.error(`[native-worker] cleanup failed (${t}): ${e?.message??e}`)}},Ve=null;ni={kind:"eof"},ri=()=>ni,Fe=Qo({onEof:e=>{ni=e},onTransportError:e=>{console.error(`[native-worker] transport error: ${e?.message??e}`)}}),oi=e=>{let t=e?.content?.messageId;return typeof t=="string"||typeof t=="number"?t:null},We=e=>{try{Fe.postMessage(e)}catch(t){try{Fe.postMessage(qe(t,oi(e)))}catch(n){console.error(`[native-worker] failed to send bounded error response: ${n?.message??n}`)}}};globalThis.postMessage=(e,t)=>{nc(e)||We(e)};Vt=new Map,tc=0,nc=e=>{if(e?.channel!=="rpc"||e?.content?.kind!=="response")return!1;let t=Vt.get(e.content.messageId);return t===void 0?!1:(Vt.delete(e.content.messageId),t(e.content),!0)};Fe.onmessage=async e=>{let t=e?.data;try{if(t?.channel==="shell"){t.content?.kind==="export"?await ic(t.content):console.error(`[native-worker] unknown shell message kind ${JSON.stringify(t.content?.kind??null)}; dropped`);return}let n=t?.channel==="rpc"?t.content:void 0;if(n?.kind==="invoke"&&n.targetMethod==="exportDatabase"){await oc(n.messageId);return}await globalThis.onmessage?.(e)}catch(n){We(qe(n,oi(t)))}};Jo=tjs.ppid;setInterval(()=>{tjs.ppid!==Jo&&(console.error(`[native-worker] parent process ${Jo} vanished without closing stdin (ppid now ${tjs.ppid}); exiting (code ${Yo})`),tjs.exit(Yo))},Gl)});var A=M(()=>{"use strict";rr()});function ge(e){if(e==="utf-8")return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});let t=e==="utf-16le";return{decode(n){if(n.length%2!==0)throw new TypeError(`Invalid ${e}: odd byte length`);let r=a=>t?n[a]|n[a+1]<<8:n[a]<<8|n[a+1],o=[],i="";for(let a=0;a=55296&&s<=56319){let l=a+257343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s,l),a+=2}else{if(s>=56320&&s<=57343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s)}i.length>=8192&&(o.push(i),i="")}return o.push(i),o.join("")}}}var Ft=M(()=>{"use strict";A()});function C(e){return`"${e.replace(/"/g,'""')}"`}function L(e){return`main.${C(e)}`}function z(e,t="Identifier"){if(typeof e!="string"||e.length===0)throw new Error(`${t} is required`);if(e.includes("\0"))throw new Error(`${t} cannot contain NUL characters`)}function or(e){if(!e||typeof e!="string")throw new Error("Invalid SQL type: Type must be a non-empty string");if(/['";\-\/\*]/.test(e))throw new Error(`Invalid SQL type: "${e}" contains potentially unsafe characters`);if(!/^[a-zA-Z0-9_\s]+(?:\([0-9\s,]+\)[a-zA-Z0-9_\s]*)?$/.test(e.trim()))throw new Error(`Invalid SQL type: "${e}" does not match allowed format`)}function ii(e){if(e==null)return"NULL";if(typeof e=="number")return String(e);if(typeof e=="bigint")return e.toString();if(typeof e=="string"){if(e.includes("\0")){let n=new TextEncoder().encode(e);return`CAST(X'${Array.from(n).map(o=>o.toString(16).padStart(2,"0")).join("")}' AS TEXT)`}return`'${e.replace(/'/g,"''")}'`}return e instanceof Uint8Array?`X'${Array.from(e).map(n=>n.toString(16).padStart(2,"0")).join("")}'`:`'${String(e).replace(/'/g,"''")}'`}function lt(e,t="\\"){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`[${n}%_]`,"g");return e.replace(r,o=>t+o)}function H(e){let t=typeof e;if(t!=="string"&&t!=="number"&&t!=="bigint")throw new Error(`Invalid rowid: ${e}`);if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`Invalid rowid: ${e}`);return e}let n=typeof e=="string"?e.trim():e.toString();if(!/^[+-]?\d+$/.test(n))throw new Error(`Invalid rowid: ${e}`);let r=BigInt(n);if(rlc)throw new Error(`Invalid rowid: ${e}`);let o=Number(r);return Number.isSafeInteger(o)?o:r.toString()}var ac,lc,Y=M(()=>{"use strict";A();ac=-9223372036854775808n,lc=9223372036854775807n});function si(e){return/[A-Za-z0-9_$\u0080-\uFFFF]/.test(e)}function ci(e){let t=[],n=0;for(;nt.toLowerCase())}function je(e,t){if(!ye(e[t]))throw new Error("Expected an SQL identifier");return t+1}function cc(e,t){return t=je(e,t),e[t]?.kind==="symbol"&&e[t].value==="."&&(t=je(e,t+1)),t}function jt(e){let t=ci(e),n=[],r,o=0,i=d=>{if(!X(t[o],d))throw new Error(`Expected ${d} in stored CREATE TRIGGER SQL`);o++};if(i("CREATE"),(X(t[o],"TEMP")||X(t[o],"TEMPORARY"))&&o++,i("TRIGGER"),X(t[o],"IF")&&(o++,i("NOT"),i("EXISTS")),o=cc(t,o),X(t[o],"BEFORE")||X(t[o],"AFTER")?o++:X(t[o],"INSTEAD")&&(o++,i("OF")),X(t[o],"INSERT"))r="insert",o++;else if(X(t[o],"DELETE"))r="delete",o++;else if(X(t[o],"UPDATE")){if(r="update",o++,X(t[o],"OF")){if(o++,!ye(t[o]))throw new Error("Expected an SQL identifier after UPDATE OF");for(n.push(t[o]),o=je(t,o);t[o]?.kind==="symbol"&&t[o].value===",";){if(o++,!ye(t[o]))throw new Error("Expected an SQL identifier in UPDATE OF column list");n.push(t[o]),o=je(t,o)}}}else throw new Error("Expected a trigger event in stored CREATE TRIGGER SQL");i("ON");let a=o,s=t[o];o=je(t,o);let l;t[o]?.kind==="symbol"&&t[o].value==="."&&(l=s.value,o=je(t,o+1));let u=o,c=t.findIndex((d,f)=>f>=o&&X(d,"BEGIN"));if(c<0)throw new Error("Expected BEGIN in stored CREATE TRIGGER SQL");return{tokens:t,event:r,targetSchema:l,targetStartIndex:a,updateOfColumns:n,referenceStartIndex:u,bodyStartIndex:c+1}}function sr(e){let t=jt(e);return{event:t.event,targetSchema:t.targetSchema,updateOfColumns:t.updateOfColumns.map(n=>n.value)}}function Ht(e,t,n,r){let o=sr(e),i=`${C(t)}.${C(n)}`;if(o.event==="insert")return`EXPLAIN INSERT INTO ${i} DEFAULT VALUES`;if(o.event==="delete")return`EXPLAIN DELETE FROM ${i} WHERE 0`;let a=new Map(r.map(c=>[he(c),c])),s=o.updateOfColumns.map(c=>a.get(he(c))).find(c=>c!==void 0);if(o.updateOfColumns.length>0&&s===void 0)return;let l=s??r[0];if(l===void 0)throw new Error(`Trigger target ${t}.${n} has no writable column to probe`);let u=C(l);return`EXPLAIN UPDATE ${i} SET ${u} = ${u} WHERE 0`}function uc(e){return jt(e).targetSchema}function oe(e){return`main.${C(e)}`}function ui(e,t){let n=`-- TRIGGER ${t}`;return e.some(r=>r.some(o=>o===n))}function di(e,t){if(t.length!==Wt.length)throw new Error(`View trigger definition fetch was incomplete for ${e}`);let n=[],r=[],o=[];return Wt.forEach((i,a)=>{t[a].forEach(s=>{if(typeof s[0]!="string"||typeof s[1]!="string")throw new Error(`View trigger definition is unavailable for ${e}`);if(i.temporary){let l=s[2]===1||s[2]===1n;if(s[2]!==0&&s[2]!==0n&&!l)throw new Error(`Temporary view shadow state is unavailable for ${e}`);let u;try{u=uc(s[1])}catch(c){let d=c instanceof Error?c.message:String(c);throw new Error(`Unable to determine the target of temporary trigger ${s[0]}: ${d}`)}if(u!==void 0&&he(u)!=="main")return;if(u===void 0){o.push({identifier:s[0],sql:s[1],temporary:!0});return}}n.push(i.temporary?{identifier:s[0],sql:s[1],temporary:!0}:{identifier:s[0],sql:s[1]})})}),{triggers:n,ambiguousTemporaryTriggerNames:r,unqualifiedTemporaryTriggers:o}}function Qt(e){let t=e.ambiguousTemporaryTriggerNames??[];if(t.length===0)return;let n=t.map(r=>`"${r}"`).join(", ");throw new Error(`Cannot modify main view "${e.identifier}" because temporary trigger target ownership is ambiguous for ${n}. Each named trigger uses an unqualified ON target whose historical schema cannot be proven. Drop the TEMP trigger, or recreate it with an explicitly schema-qualified target, before editing or dropping the main view.`)}function Ee(e){let t=e.trim();if(!t)throw new Error("View SELECT definition is required");let n=-1,r,o=!1,i=!1;for(let a=0;a=0&&t[n]===";"?(t.slice(0,n).trimEnd()+t.slice(n+1)).trim():t}function fi(e){let t=0,n=-1,r=-1;for(let o of ci(e)){if(o.kind==="symbol"&&o.value==="("){t===0&&n===-1&&(n=o.start),t++;continue}if(o.kind==="symbol"&&o.value===")"){t===1&&n!==-1&&r===-1&&(r=o.end),t=Math.max(0,t-1);continue}if(t===0&&X(o,"AS"))return{selectStart:o.end,columnListSql:n!==-1&&r!==-1?e.slice(n,r):void 0}}throw new Error("Unable to locate the SELECT body in the stored view definition")}function mi(e){let{selectStart:t}=fi(e);return Ee(e.slice(t))}function ar(e){return fi(e).columnListSql}function ct(e,t,n,r){let o=n??(r?.length?`(${r.map(i=>C(i)).join(", ")})`:void 0);return`CREATE VIEW ${C(e)}${o?` ${o}`:""} AS ${t}`}function lr(e,t){let n=jt(e);if(n.targetSchema===void 0){let r=n.tokens[n.targetStartIndex];return`${e.slice(0,r.start)}main.${e.slice(r.start)}`}if(he(n.targetSchema)!=="main")throw new Error(`Unable to recreate temporary trigger ${t}: target is not in main`);return e}function cr(e){if(!e.temporary)return e.sql;let t=/^(\s*CREATE\s+)(?:(?:TEMP|TEMPORARY)\s+)?(TRIGGER\b)/i;if(!t.test(e.sql))throw new Error(`Unable to recreate temporary trigger ${e.identifier}: stored SQL is not a CREATE TRIGGER statement`);return lr(e.sql,e.identifier).replace(t,"$1TEMP $2")}function ir(e,t){return e.push({parent:t,aliases:new Set,hasAmbiguousSource:!1}),e.length-1}function mc(e){let{tokens:t,referenceStartIndex:n,bodyStartIndex:r}=e,o=[],i=new Array(t.length),a=new Map,s=[],l=[ir(o)],u=!1;for(let c=n;c1&&l.pop()}else d.kind==="symbol"&&d.value===";"&&l.length===1&&(u=!0)}return{scopes:o,tokenScopes:i,matchingParentheses:a}}function pc(e,t){t&&/^(?:NEW|OLD)$/i.test(t)&&e.aliases.add(he(t))}function ai(e,t,n,r){let o=r.scopes[n],i=t,a;if(e[i]?.kind==="symbol"&&e[i].value==="("){let l=r.matchingParentheses.get(i);if(l===void 0)return o.hasAmbiguousSource=!0,i+1;i=l+1}else if(ye(e[i])){if(a=e[i].value,i++,e[i]?.kind==="symbol"&&e[i].value==="."){if(!ye(e[i+1]))return o.hasAmbiguousSource=!0,i+1;a=e[i+1].value,i+=2}if(e[i]?.kind==="symbol"&&e[i].value==="("){let l=r.matchingParentheses.get(i);if(l===void 0)return o.hasAmbiguousSource=!0,i+1;i=l+1}}else return o.hasAmbiguousSource=!0,i+1;let s;if(X(e[i],"AS")){if(!ye(e[i+1]))return o.hasAmbiguousSource=!0,i+1;s=e[i+1].value,i+=2}else if(ye(e[i])){let l=e[i];l.kind==="word"&&dc.has(l.value.toUpperCase())||(s=l.value,i++)}return pc(o,s??a),i}function gc(e,t){let n=new Map;for(let r=e.referenceStartIndex;r{let o=t[r];return n.identifier===o.identifier&&n.sql===o.sql&&n.temporary===!0==(o.temporary===!0)})}function Kt(e,t,n,r){if(e!==void 0&&!hc(e,t)||!Ec(n,r))throw new Error(yi)}function hi(e,t){if(e===null||t===null){if(e!==t)throw new Error(yi);return}Kt(e.sql,t.sql,e.triggers,t.triggers)}var Wt,dc,fc,yi,ut=M(()=>{"use strict";A();Y();Wt=[{sql:"SELECT name, sql FROM main.sqlite_schema WHERE type = 'trigger' AND tbl_name = ? COLLATE NOCASE ORDER BY rowid",params:e=>[e],temporary:!1},{sql:"SELECT temp_trigger.name, temp_trigger.sql, EXISTS (SELECT 1 FROM sqlite_temp_schema AS temp_view WHERE temp_view.type = 'view' AND temp_view.name = ? COLLATE NOCASE) FROM sqlite_temp_schema AS temp_trigger WHERE temp_trigger.type = 'trigger' AND temp_trigger.tbl_name = ? COLLATE NOCASE ORDER BY temp_trigger.rowid",params:e=>[e,e],temporary:!0}];dc=new Set(["AS","CROSS","END","EXCEPT","FULL","GROUP","HAVING","INDEXED","INNER","INTERSECT","JOIN","LEFT","LIMIT","NATURAL","NOT","OFFSET","ON","ORDER","OUTER","RETURNING","RIGHT","SET","UNION","USING","VALUES","WHERE","WINDOW"]),fc=new Set(["END","EXCEPT","GROUP","HAVING","INTERSECT","LIMIT","OFFSET","ON","ORDER","RETURNING","SET","UNION","USING","VALUES","WHERE","WINDOW"]);yi="The view changed outside this editor. Reload before saving; the view was not modified."});function fr(e){return e.replace(/[A-Z]/g,t=>t.toLowerCase())}function dr(e){return JSON.stringify(e.map(fr))}function ur(e,t,n,r,o){let i=[e,t,n];return dr(r===void 0||o===void 0?i:[...i,r,o])}function Ei(e){let t=e instanceof Error?e.message:String(e);return t.length>500?`${t.slice(0,500)}...`:t}function Xt(e,t,n){if(!(e<=t))throw new Error(`View dependency validation refused to inspect ${e} ${n}; the fail-closed limit is ${t}`)}async function Sc(e){let t=await e.queryRows("PRAGMA database_list"),n=[],r=new Set;for(let o of t){if(typeof o[1]!="string")throw new Error("SQLite returned invalid database-list metadata during view validation");let i=fr(o[1]);r.has(i)||(r.add(i),n.push(o[1]))}return r.has("temp")||n.unshift("temp"),Xt(n.length,wc,"database schemas"),n}async function bc(e,t){let n=[];for(let r of t){let o=zt-n.length;o<0&&Xt(n.length,zt,"schema objects");let i=await e.queryRows(`SELECT type, name, tbl_name, sql FROM ${C(r)}.sqlite_schema WHERE type IN ('view', 'trigger') ORDER BY type, name LIMIT ${o+1}`);for(let a of i){let[s,l,u,c]=a;if(s!=="view"&&s!=="trigger"||typeof l!="string"||typeof c!="string"||s==="trigger"&&typeof u!="string")throw new Error(`SQLite returned invalid ${r} schema metadata during view validation`);n.push({schema:r,kind:s,identifier:l,targetIdentifier:s==="trigger"?u:void 0,sql:c})}Xt(n.length,zt,"schema objects")}return n}async function Tc(e,t,n){return(await e.queryRows(`SELECT 1 FROM ${C(t)}.sqlite_schema WHERE type IN ('table', 'view') AND name = ? COLLATE NOCASE LIMIT 1`,[n])).length>0}async function Cc(e,t,n){let r=sr(n.sql);if(r.targetSchema!==void 0)return[r.targetSchema];if(fr(n.schema)!=="temp")return[n.schema];let o=[];for(let i of t)await Tc(e,i,n.targetIdentifier)&&o.push(i);return o.length>0?o:["main"]}async function Rc(e,t,n){let r=await e.queryRows(`PRAGMA ${C(t)}.table_xinfo(${C(n)})`),o=[];for(let i of r){if(typeof i[1]!="string")throw new Error(`SQLite returned invalid column metadata for ${t}.${n}`);let a=i[6];a!==2&&a!==2n&&a!==3&&a!==3n&&o.push(i[1])}return o}async function wi(e){let t=await Sc(e),n=await bc(e,t),r=new Map,o=[],i=new Map;for(let s of n){if(s.kind==="view"){o.push({key:ur("view",s.schema,s.identifier),kind:"view",schema:s.schema,identifier:s.identifier,sql:`EXPLAIN SELECT * FROM ${C(s.schema)}.${C(s.identifier)}`});continue}let l;try{l=await Cc(e,t,s)}catch(u){let c=ur("trigger",s.schema,s.identifier);r.set(c,{key:c,kind:"trigger",schema:s.schema,identifier:s.identifier,valid:!1,error:Ei(u)});continue}for(let u of l){let c=s.targetIdentifier,d=ur("trigger",s.schema,s.identifier,u,c);try{let f=dr([u,c]),m=i.get(f);m||(m=Rc(e,u,c),i.set(f,m));let E=Ht(s.sql,u,c,await m);if(E===void 0){r.set(d,{key:d,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:u,targetIdentifier:c,valid:!0});continue}o.push({key:d,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:u,targetIdentifier:c,sql:E})}catch(f){r.set(d,{key:d,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:u,targetIdentifier:c,valid:!1,error:Ei(f)})}}}Xt(o.length+r.size,zt,"view and trigger probes");let a=await e.compileStatements(o.map(s=>s.sql));if(a.length!==o.length)throw new Error("View dependency validation returned an incomplete probe result set");return o.forEach((s,l)=>{let u=a[l];r.set(s.key,{key:s.key,kind:s.kind,schema:s.schema,identifier:s.identifier,targetSchema:s.targetSchema,targetIdentifier:s.targetIdentifier,valid:u===void 0,...u===void 0?{}:{error:u}})}),r}function we(e,t){for(let n of e.values()){if(!n.valid)continue;let r=t.get(n.key);if(!r||r.valid)continue;let o=r.targetSchema&&r.targetIdentifier?` on ${r.targetSchema}.${r.targetIdentifier}`:"";throw new Error(`Schema change would break existing ${r.kind} "${r.schema}.${r.identifier}"${o}: ${r.error??"SQLite rejected it"}`)}}var wc,zt,Si=M(()=>{"use strict";A();Y();ut();wc=32,zt=1024});function dt(e){return e.replace(/[A-Z]/g,t=>t.toLowerCase())}function xc(e){return/[A-Za-z_\u0080-\uFFFF]/.test(e)}function Ic(e){return/[A-Za-z0-9_$\u0080-\uFFFF]/.test(e)}function Ac(e,t,n){let r=t+1,o="";for(;rbi)throw new Error(`Cannot inspect index dependency: definition exceeds ${bi} characters`);let t=[],n=o=>{if(t.push(o),t.length>Ti)throw new Error(`Cannot inspect index dependency: definition exceeds ${Ti} tokens`)},r=0;for(;rs.kind==="word"&&s.value.toUpperCase()==="INDEX"),r=t.findIndex((s,l)=>l>n&&s.kind==="word"&&s.value.toUpperCase()==="ON"),o=t.findIndex((s,l)=>l>r&&s.kind==="symbol"&&s.value==="(");if(n<0||r<0||o<0)throw new Error("Cannot inspect index dependency: unsupported CREATE INDEX definition");let i=t.filter((s,l)=>l>=o&&s.kind==="symbol"&&s.value===";");if(i.length>1||i.length===1&&t.at(-1)!==i[0])throw new Error("Cannot inspect index dependency: multiple statements are not allowed");let a=i[0]?.start??e.length;return e.slice(t[o].start,a).trim()}function Ci(e,t){let n=[...t],r=`${e}_dummy`,o=new Set(t.map(dt));for(;o.has(dt(r));)r+="_";return n.push(r),`CREATE TEMP TABLE ${C(e)} (${n.map(C).join(", ")})`}function Ri(e,t){let n=new Set(t.map(dt));return e.filter(r=>n.has(dt(r)))}function xi(e,t,n){let r=Nc(n);return`CREATE INDEX temp.${C(t)} ON ${C(e)} ${r}`}function Ii(e,t,n={}){if(z(e,"Table name"),t.length===0)throw new Error("At least one column is required");if(!n||typeof n!="object"||Array.isArray(n)||n.withoutRowid!==void 0&&typeof n.withoutRowid!="boolean")throw new Error("Invalid Create Table options");let r=t.filter(s=>s.primaryKey);if(n.withoutRowid&&r.length===0)throw new Error("WITHOUT ROWID requires a primary key");let o=r.length>1,i=new Set,a=t.map(s=>{if(typeof s=="string")throw new Error("Legacy string column definitions not supported for security");z(s.name,"Column name"),or(s.type);let l=dt(s.name);if(i.has(l))throw new Error(`Column ${JSON.stringify(s.name)} is defined more than once`);i.add(l);let u=`${C(s.name)} ${s.type}`;return s.primaryKey&&!o&&(u+=" PRIMARY KEY"),s.notNull&&(u+=" NOT NULL"),u+=Oc(s.defaultValue),u});return o&&a.push(`PRIMARY KEY (${r.map(s=>C(s.name)).join(", ")})`),`CREATE TABLE ${L(e)} (${a.join(", ")})${n.withoutRowid?" WITHOUT ROWID":""}`}function Oc(e){return e==null||e===""?"":e.toLowerCase()==="null"?" DEFAULT NULL":/^-?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(e)?` DEFAULT ${e}`:` DEFAULT '${e.replace(/'/g,"''")}'`}var bi,Ti,mr=M(()=>{"use strict";A();Y();bi=1024*1024,Ti=2e5});function Ai(){return{dangerousPrefix:!1,prefixOpen:!0,needsQuotes:!1}}function _i(e,t){if((t.includes(",")||t.includes('"')||t.includes(` @@ -34,26 +34,26 @@ ${e} `,w=g?"":`, ${m} AS ${C(Yc)}`,R=g?` UNION ALL SELECT (SELECT COALESCE(group_concat(${m}, char(10)), '') FROM ${f})${t>1?`, ${Array(t-1).fill("NULL").join(", ")}`:""}`:"";return{sql:S+`SELECT ${d.join(", ")}${w}${y} FROM ${f}`+R,metadataTrailer:g,primaryTransportColumnCount:t+(g?0:1)+c.length,valueColumnCount:t,metadataColumnIndex:t,transportColumnCount:t+1+c.length,rawTextColumnStart:t+1,rawTextColumnCount:c.length,rawTextTransport:o,rawTextColumnIndices:c,rawTextValidationUnavailable:u,effectiveInlineCellBytes:i}}function rs(e,t,n){if(!n.metadataTrailer){if(t!==void 0)throw new Error("Cell containment received unexpected separate metadata rows");return e}if(t!==void 0)throw new Error("Cell containment metadata must come from the value statement");let r=e.at(-1);if(!r||r.length!==n.primaryTransportColumnCount)throw new Error("Cell containment metadata trailer is missing or malformed");if(typeof r[0]!="string"||r.slice(1).some(a=>a!==null))throw new Error("Cell containment metadata trailer is not one packed text value");let o=e.slice(0,-1),i=r[0]===""?[]:r[0].split(` -`);if(i.length!==o.length)throw new Error("Cell containment metadata row count does not match the value page");return o.map((a,s)=>{if(a.length{if(!s)return;let l={};for(let[u,c]of Object.entries(s)){let d=Number(u);l[d]={};for(let[f,m]of Object.entries(c))l[d][Number(f)+1]=m}return l},o=r(t.exactIntegerTexts),i;for(let s of[n,o])if(s){i??={};for(let[l,u]of Object.entries(s)){let c=Number(l);i[c]??={},Object.assign(i[c],u)}}let a=r(t.oversizedCells);return{rows:t.rows.map((s,l)=>[e[l],...s]),...a?{oversizedCells:a}:{},...i?{exactIntegerTexts:i}:{}}}function is(e,t){let n,r=0,o,i=s=>{if(s>=48&&s<=57)return s-48;let l=s|32;return l>=97&&l<=102?l-87:-1},a=(s,l,u)=>{let c=typeof s=="string"?s.length/2:NaN;if(typeof s!="string"||!Number.isSafeInteger(c)||!Number.isSafeInteger(t.effectiveInlineCellBytes)||t.effectiveInlineCellBytes<0||c>t.effectiveInlineCellBytes)throw new Error(`Raw TEXT value at row ${l}, key ${u} is not bounded hexadecimal text`);if(c===0)return o??=new Uint8Array(0);let d;c>Yi?d=new Uint8Array(c):((!n||n.byteLength-r{if(s.length{let d=s[t.rawTextColumnStart+c];if(d!==null&&t.rawTextTransport==="hex")return a(d,l,c);if(d!==null&&!(d instanceof Uint8Array))throw new Error(`Raw TEXT value at row ${l}, key ${c} is not a BLOB`);return d})})}function sn(e,t,n){if(n.includes("\0"))return!1;try{return e.decode(t)===n}catch{return!1}}function ss(e){if(e.sourceRows.length===0||e.sourceColumnIndices.length===0)return;if(e.rawTextValidationUnavailable)return new Set(e.sourceRows.map((o,i)=>i));if(e.rawTextRows.length!==e.sourceRows.length)throw new Error("Raw TEXT validation row count does not match the source page");let t=e.sourceColumnIndices.map(o=>{let i=e.rawTextColumnIndices.indexOf(o);if(i<0)throw new Error(`Raw TEXT validation column ${o} was not projected`);return i}),n=ge(e.textEncoding),r;return e.sourceRows.forEach((o,i)=>{let a=e.rawTextRows[i];if(!a||a.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT validation row ${i} has the wrong width`);for(let s=0;sArray.from(s)),n;if(e.contained.oversizedCells){n={};for(let[s,l]of Object.entries(e.contained.oversizedCells))n[Number(s)]={...l}}let r;if(e.contained.exactIntegerTexts){r={};for(let[s,l]of Object.entries(e.contained.exactIntegerTexts))r[Number(s)]={...l}}let o=ue-St,i=ln(t)+cn(n)+un(r),a=ge(e.textEncoding);if(e.sourceRows.forEach((s,l)=>{let u=e.rawTextRows[l];if(!u||u.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT containment row ${l} has the wrong width`);e.rawTextColumnIndices.forEach((c,d)=>{let f=s[c];if(typeof f!="string"||n?.[l]?.[c])return;let m=u[d];if(!(m instanceof Uint8Array))throw new Error(`Raw TEXT containment bytes are missing at row ${l}, column ${c}`);if(sn(a,m,f))return;let E=t[l][c],y=ls(n,l,c);n??={},n[l]??={},n[l][c]={storageClass:"text",byteLength:m.byteLength};let g=Math.max(0,o-i-y+de(E)),S=g>wt?Math.floor((g-wt)/4)*3:0,w=Math.min(m.byteLength,Kc,S);if(w===0)throw new Error(`Raw TEXT containment cannot retain an authoritative byte prefix for row ${l}, column ${c} within the webview transport limit`);let R=m.slice(0,w);t[l][c]=R,i+=de(R)-de(E)+y,r?.[l]&&(delete r[l][c],Object.keys(r[l]).length===0&&delete r[l])})}),i>o)throw new Error(`Raw TEXT containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:t,...n?{oversizedCells:n}:{},...r&&Object.keys(r).length>0?{exactIntegerTexts:r}:{}}}function ru(e,t,n){if(e==="")return;let r=/^([tb])([1-9]\d*)$/.exec(e);if(!r)throw new Error(`Invalid oversized-cell metadata at row ${t}, column ${n}`);let o=Number(r[2]);if(!Number.isSafeInteger(o))throw new Error(`Oversized-cell byte length is unsafe at row ${t}, column ${n}`);return{storageClass:r[1]==="t"?"text":"blob",byteLength:o}}function an(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function ou(e){if(typeof e=="string")return an(e);if(e instanceof Uint8Array)return e.byteLength}function Zi(e){return e==="text"?"":new Uint8Array(0)}function iu(e){return 4*Math.ceil(e/3)}function de(e){return e instanceof Uint8Array?iu(e.byteLength)+wt:typeof e=="string"?an(e)+2:8}function xe(e){return an(e)+3}function ln(e){let t=2+Math.max(0,e.length-1);for(let n of e){t+=2+Math.max(0,n.length-1);for(let r of n)t+=de(r)}return t}function cn(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=xe(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a]of i)n+=xe(a)+Rr}return n}function ls(e,t,n){if(e?.[t]?.[n])return 0;let r=xe(String(n))+Rr;if(e?.[t])return 1+r;let i=xe(String(t))+2+r;return e?1+i:2+i}function un(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=xe(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a,s]of i)n+=xe(a)+an(s)+2}return n}function cs(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t)n+=xe(r)+de(o);return n}function dn(e,t,n,r=be){let o=tn(r,be),i,a=0,s=!1,l=[],u=(E,y,g)=>{i??={},i[E]??={},i[E][y]??=g},c=e.map((E,y)=>{if(E.length{let T=ru(R,y,I);T&&u(y,I,T);let _=w[I],$=ou(_);if($===void 0||$===0)return;let O=T??{storageClass:typeof _=="string"?"text":"blob",byteLength:$};if(s||$>o-a){s=!0,u(y,I,O),w[I]=Zi(O.storageClass);return}a+=$,l.push({rowIndex:y,columnIndex:I,metadata:O})}),w}),d;if(n)for(let[E,y]of Object.entries(n))for(let[g,S]of Object.entries(y)){let w=Number(g);w>=t||(d??={},d[Number(E)]??={},d[Number(E)][w]=S)}let f=ue-St,m=ln(c)+cn(i)+un(d);for(let E=l.length-1;E>=0&&m>f;E--){let y=l[E],g=c[y.rowIndex][y.columnIndex],S=Zi(y.metadata.storageClass),w=de(S)-de(g)+ls(i,y.rowIndex,y.columnIndex);w>=0||(u(y.rowIndex,y.columnIndex,y.metadata),c[y.rowIndex][y.columnIndex]=S,m+=w)}if(m>f)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:c,...i?{oversizedCells:i}:{},...d?{exactIntegerTexts:d}:{}}}function es(e,t){if(!e)return;let n;for(let[r,o]of Object.entries(e))for(let[i,a]of Object.entries(o)){let s=Number(i);s>=t||(n??={},n[Number(r)]??={},n[Number(r)][s+1]=a)}return n}function ts(e,t){if(!e)return;let n;for(let[r,o]of Object.entries(e))for(let[i,a]of Object.entries(o)){let s=Number(i);s!==t&&(n??={},n[Number(r)]??={},n[Number(r)][s]=a)}return n}function us(e){let t=`Row is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity.`,n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o=e.rows.map((u,c)=>{if(u.length===0)throw new Error(`Shadowed rowid result row ${c} has no identity slot`);let d=n+c;if(!Number.isSafeInteger(d))throw new Error("Shadowed rowid result ordinal exceeds the safe integer range");return r??={},r[c]=t,[ht(t,d),...u.slice(1)]}),i=ts(e.oversizedCells,0),a=ts(e.exactIntegerTexts,0),s=ue-St;if(ln(o)+cn(i)+un(a)+cs(r)>s)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:o,...i?{oversizedCells:i}:{},...a?{exactIntegerTexts:a}:{},...r?{readOnlyRowReasons:r}:{}}}function nn(e){return`"${e.length<=128?e:`${e.slice(0,125)}...`}"`}function ds(e){let t=e.slice(0,8).map(nn);return e.length>t.length?`${t.join(", ")}, and ${e.length-t.length} more`:t.join(", ")}function su(e,t){if(e.length===1){let r=e[0];return`Row is read-only because WITHOUT ROWID primary-key column ${nn(r.identifier)} is ${r.byteLength} bytes and exceeds the ${t}-byte inline limit; its identity was not transported.`}let n=e.slice(0,8).map(r=>`${nn(r.identifier)} (${r.byteLength} bytes)`);return e.length>n.length&&n.push(`and ${e.length-n.length} more`),`Row is read-only because WITHOUT ROWID primary-key columns ${n.join(", ")} exceed the ${t}-byte inline limit; their identity was not transported.`}function fs(e){return e==="utf-8"?"UTF-8":e==="utf-16le"?"UTF-16LE":"UTF-16BE"}function bt(e){if(e.columns.length*2>Cr)throw new Error(`Cannot mint a byte-faithful WITHOUT ROWID identity with ${e.columns.length} primary-key columns within SQLite's result-column limit`);let t=e.columns.map(r=>C(r.identifier)),n=t.map((r,o)=>`CASE WHEN typeof(${r}) = 'text' THEN CAST(${r} AS BLOB) END AS `+C(`${ns}${o}`));return[...t,...n].join(", ")}function Tt(e,t,n,r){let o=e.columns.length;if(t.length!==o*2)throw new Error(`${r}: SQLite returned an invalid primary-key validation row`);let i=t.slice(0,o),a=ge(n);for(let s=0;s{let g=e.sourceColumns.indexOf(y.identifier);if(g<0)throw new Error(`Primary-key column missing from table fetch: ${y.identifier}`);return g}),n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o,i=[],a=ge(e.textEncoding),s=e.rawTextValidationUnavailable?[]:t.map(y=>{let g=e.rawTextColumnIndices.indexOf(y);if(g<0)throw new Error(`Primary-key raw TEXT column ${y} was not projected`);return g}),l=e.rows.map((y,g)=>{let S=e.identity.columns.flatMap((_,$)=>{let O=e.oversizedCells?.[g]?.[t[$]];return O?[{identifier:_.identifier,byteLength:O.byteLength}]:[]}),w=e.identityRows[g];if(!w)throw new Error(`Primary-key identity row missing at index ${g}`);let R=e.rawTextBytes[g];if(!e.rawTextValidationUnavailable&&(!R||R.length!==e.rawTextColumnIndices.length))throw new Error(`Primary-key raw TEXT row missing at index ${g}`);let I=e.rawTextValidationUnavailable?e.identity.columns.map(_=>_.identifier):e.identity.columns.flatMap((_,$)=>{let O=w[t[$]];if(typeof O!="string")return[];let D=e.oversizedCells?.[g]?.[t[$]];if(D&&D.byteLength>e.effectiveInlineCellBytes)return[];let p=R[s[$]];return p instanceof Uint8Array?sn(a,p,O)?[]:[_.identifier]:[_.identifier]}),T;if(e.rawTextValidationUnavailable&&(o??=new Set,o.add(g)),I.length>0){let _=e.rawTextValidationUnavailable?lu(I):au(I,e.textEncoding);r??={},r[g]=_,o??=new Set,o.add(g),T=ht(_,n+g)}else if(S.length>0){let _=su(S,e.effectiveInlineCellBytes);r??={},r[g]=_,T=ht(_,n+g)}else T=Ke(e.identity.columns,t.map(_=>w[_])),i.push(g);return[T,...y.slice(0,e.visibleColumnCount)]}),u=es(e.oversizedCells,e.visibleColumnCount),c=es(e.exactIntegerTexts,e.visibleColumnCount),d=ue-St,f=ln(l)+cn(u)+un(c)+cs(r),m="Row is read-only because its encoded WITHOUT ROWID primary-key identity exceeds the page transport budget.",E=y=>{if(r?.[y]!==void 0)return 0;let g=xe(String(y))+de(m);return r?1+g:2+g};for(let y=i.length-1;y>=0&&f>d;y--){let g=i[y],S=l[g][0],w=ht(m,n+g),R=de(w)-de(S)+E(g);R>=0||(l[g][0]=w,r??={},r[g]=m,f+=R)}if(f>d)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:l,...u?{oversizedCells:u}:{},...c?{exactIntegerTexts:c}:{},...r?{readOnlyRowReasons:r}:{},...o?{unrepresentableTextKeyRows:o}:{}}}var rn,be,Qc,ue,Kc,wt,St,Rr,zc,Xc,Gc,Yc,ns,Yi,Ji,Jc,Cr,fn=M(()=>{"use strict";A();Y();Ft();Et();rn=1024*1024,be=16*1024*1024,Qc=256,ue=2*be,Kc=64*1024,wt=40,St=512*1024,Rr=45,zc=2,Xc="__sqlite_explorer_cell_source",Gc="__sqlite_explorer_cell_value_",Yc="__sqlite_explorer_cell_metadata",ns="__sqlite_explorer_cell_raw_text_",Yi=64*1024,Ji=400,Jc=4,Cr=2e3});function gs(e){if(e.length>ps)throw new Error("Query text exceeds 65,536 characters.");let t=Ee(e),n="",r=0,o=0;for(let i=0;i{if(a.length{if(!s)return;let l={};for(let[u,c]of Object.entries(s)){let d=Number(u);l[d]={};for(let[f,m]of Object.entries(c))l[d][Number(f)+1]=m}return l},o=r(t.exactIntegerTexts),i;for(let s of[n,o])if(s){i??={};for(let[l,u]of Object.entries(s)){let c=Number(l);i[c]??={},Object.assign(i[c],u)}}let a=r(t.oversizedCells);return{rows:t.rows.map((s,l)=>[e[l],...s]),...a?{oversizedCells:a}:{},...i?{exactIntegerTexts:i}:{}}}function is(e,t){let n,r=0,o,i=s=>{if(s>=48&&s<=57)return s-48;let l=s|32;return l>=97&&l<=102?l-87:-1},a=(s,l,u)=>{let c=typeof s=="string"?s.length/2:NaN;if(typeof s!="string"||!Number.isSafeInteger(c)||!Number.isSafeInteger(t.effectiveInlineCellBytes)||t.effectiveInlineCellBytes<0||c>t.effectiveInlineCellBytes)throw new Error(`Raw TEXT value at row ${l}, key ${u} is not bounded hexadecimal text`);if(c===0)return o??=new Uint8Array(0);let d;c>Yi?d=new Uint8Array(c):((!n||n.byteLength-r{if(s.length{let d=s[t.rawTextColumnStart+c];if(d!==null&&t.rawTextTransport==="hex")return a(d,l,c);if(d!==null&&!(d instanceof Uint8Array))throw new Error(`Raw TEXT value at row ${l}, key ${c} is not a BLOB`);return d})})}function ru(e,t){return e===t&&!t.includes("\0")}function sn(e,t,n){try{return ru(e.decode(t),n)}catch{return!1}}function ss(e){if(e.sourceRows.length===0||e.sourceColumnIndices.length===0)return;if(e.rawTextValidationUnavailable)return new Set(e.sourceRows.map((o,i)=>i));if(e.rawTextRows.length!==e.sourceRows.length)throw new Error("Raw TEXT validation row count does not match the source page");let t=e.sourceColumnIndices.map(o=>{let i=e.rawTextColumnIndices.indexOf(o);if(i<0)throw new Error(`Raw TEXT validation column ${o} was not projected`);return i}),n=ge(e.textEncoding),r;return e.sourceRows.forEach((o,i)=>{let a=e.rawTextRows[i];if(!a||a.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT validation row ${i} has the wrong width`);for(let s=0;sArray.from(s)),n;if(e.contained.oversizedCells){n={};for(let[s,l]of Object.entries(e.contained.oversizedCells))n[Number(s)]={...l}}let r;if(e.contained.exactIntegerTexts){r={};for(let[s,l]of Object.entries(e.contained.exactIntegerTexts))r[Number(s)]={...l}}let o=ue-St,i=ln(t)+cn(n)+un(r),a=ge(e.textEncoding);if(e.sourceRows.forEach((s,l)=>{let u=e.rawTextRows[l];if(!u||u.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT containment row ${l} has the wrong width`);e.rawTextColumnIndices.forEach((c,d)=>{let f=s[c];if(typeof f!="string"||n?.[l]?.[c])return;let m=u[d];if(!(m instanceof Uint8Array))throw new Error(`Raw TEXT containment bytes are missing at row ${l}, column ${c}`);if(sn(a,m,f))return;let E=t[l][c],y=ls(n,l,c);n??={},n[l]??={},n[l][c]={storageClass:"text",byteLength:m.byteLength};let g=Math.max(0,o-i-y+de(E)),S=g>wt?Math.floor((g-wt)/4)*3:0,w=Math.min(m.byteLength,Kc,S);if(w===0)throw new Error(`Raw TEXT containment cannot retain an authoritative byte prefix for row ${l}, column ${c} within the webview transport limit`);let R=m.slice(0,w);t[l][c]=R,i+=de(R)-de(E)+y,r?.[l]&&(delete r[l][c],Object.keys(r[l]).length===0&&delete r[l])})}),i>o)throw new Error(`Raw TEXT containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:t,...n?{oversizedCells:n}:{},...r&&Object.keys(r).length>0?{exactIntegerTexts:r}:{}}}function ou(e,t,n){if(e==="")return;let r=/^([tb])([1-9]\d*)$/.exec(e);if(!r)throw new Error(`Invalid oversized-cell metadata at row ${t}, column ${n}`);let o=Number(r[2]);if(!Number.isSafeInteger(o))throw new Error(`Oversized-cell byte length is unsafe at row ${t}, column ${n}`);return{storageClass:r[1]==="t"?"text":"blob",byteLength:o}}function an(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function iu(e){if(typeof e=="string")return an(e);if(e instanceof Uint8Array)return e.byteLength}function Zi(e){return e==="text"?"":new Uint8Array(0)}function su(e){return 4*Math.ceil(e/3)}function de(e){return e instanceof Uint8Array?su(e.byteLength)+wt:typeof e=="string"?an(e)+2:8}function xe(e){return an(e)+3}function ln(e){let t=2+Math.max(0,e.length-1);for(let n of e){t+=2+Math.max(0,n.length-1);for(let r of n)t+=de(r)}return t}function cn(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=xe(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a]of i)n+=xe(a)+Rr}return n}function ls(e,t,n){if(e?.[t]?.[n])return 0;let r=xe(String(n))+Rr;if(e?.[t])return 1+r;let i=xe(String(t))+2+r;return e?1+i:2+i}function un(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=xe(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a,s]of i)n+=xe(a)+an(s)+2}return n}function cs(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t)n+=xe(r)+de(o);return n}function dn(e,t,n,r=be){let o=tn(r,be),i,a=0,s=!1,l=[],u=(E,y,g)=>{i??={},i[E]??={},i[E][y]??=g},c=e.map((E,y)=>{if(E.length{let T=ou(R,y,I);T&&u(y,I,T);let _=w[I],$=iu(_);if($===void 0||$===0)return;let O=T??{storageClass:typeof _=="string"?"text":"blob",byteLength:$};if(s||$>o-a){s=!0,u(y,I,O),w[I]=Zi(O.storageClass);return}a+=$,l.push({rowIndex:y,columnIndex:I,metadata:O})}),w}),d;if(n)for(let[E,y]of Object.entries(n))for(let[g,S]of Object.entries(y)){let w=Number(g);w>=t||(d??={},d[Number(E)]??={},d[Number(E)][w]=S)}let f=ue-St,m=ln(c)+cn(i)+un(d);for(let E=l.length-1;E>=0&&m>f;E--){let y=l[E],g=c[y.rowIndex][y.columnIndex],S=Zi(y.metadata.storageClass),w=de(S)-de(g)+ls(i,y.rowIndex,y.columnIndex);w>=0||(u(y.rowIndex,y.columnIndex,y.metadata),c[y.rowIndex][y.columnIndex]=S,m+=w)}if(m>f)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:c,...i?{oversizedCells:i}:{},...d?{exactIntegerTexts:d}:{}}}function es(e,t){if(!e)return;let n;for(let[r,o]of Object.entries(e))for(let[i,a]of Object.entries(o)){let s=Number(i);s>=t||(n??={},n[Number(r)]??={},n[Number(r)][s+1]=a)}return n}function ts(e,t){if(!e)return;let n;for(let[r,o]of Object.entries(e))for(let[i,a]of Object.entries(o)){let s=Number(i);s!==t&&(n??={},n[Number(r)]??={},n[Number(r)][s]=a)}return n}function us(e){let t=`Row is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity.`,n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o=e.rows.map((u,c)=>{if(u.length===0)throw new Error(`Shadowed rowid result row ${c} has no identity slot`);let d=n+c;if(!Number.isSafeInteger(d))throw new Error("Shadowed rowid result ordinal exceeds the safe integer range");return r??={},r[c]=t,[ht(t,d),...u.slice(1)]}),i=ts(e.oversizedCells,0),a=ts(e.exactIntegerTexts,0),s=ue-St;if(ln(o)+cn(i)+un(a)+cs(r)>s)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:o,...i?{oversizedCells:i}:{},...a?{exactIntegerTexts:a}:{},...r?{readOnlyRowReasons:r}:{}}}function nn(e){return`"${e.length<=128?e:`${e.slice(0,125)}...`}"`}function ds(e){let t=e.slice(0,8).map(nn);return e.length>t.length?`${t.join(", ")}, and ${e.length-t.length} more`:t.join(", ")}function au(e,t){if(e.length===1){let r=e[0];return`Row is read-only because WITHOUT ROWID primary-key column ${nn(r.identifier)} is ${r.byteLength} bytes and exceeds the ${t}-byte inline limit; its identity was not transported.`}let n=e.slice(0,8).map(r=>`${nn(r.identifier)} (${r.byteLength} bytes)`);return e.length>n.length&&n.push(`and ${e.length-n.length} more`),`Row is read-only because WITHOUT ROWID primary-key columns ${n.join(", ")} exceed the ${t}-byte inline limit; their identity was not transported.`}function fs(e){return e==="utf-8"?"UTF-8":e==="utf-16le"?"UTF-16LE":"UTF-16BE"}function bt(e){if(e.columns.length*2>Cr)throw new Error(`Cannot mint a byte-faithful WITHOUT ROWID identity with ${e.columns.length} primary-key columns within SQLite's result-column limit`);let t=e.columns.map(r=>C(r.identifier)),n=t.map((r,o)=>`CASE WHEN typeof(${r}) = 'text' THEN CAST(${r} AS BLOB) END AS `+C(`${ns}${o}`));return[...t,...n].join(", ")}function Tt(e,t,n,r){let o=e.columns.length;if(t.length!==o*2)throw new Error(`${r}: SQLite returned an invalid primary-key validation row`);let i=t.slice(0,o),a=ge(n);for(let s=0;s{let g=e.sourceColumns.indexOf(y.identifier);if(g<0)throw new Error(`Primary-key column missing from table fetch: ${y.identifier}`);return g}),n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o,i=[],a=ge(e.textEncoding),s=e.rawTextValidationUnavailable?[]:t.map(y=>{let g=e.rawTextColumnIndices.indexOf(y);if(g<0)throw new Error(`Primary-key raw TEXT column ${y} was not projected`);return g}),l=e.rows.map((y,g)=>{let S=e.identity.columns.flatMap((_,$)=>{let O=e.oversizedCells?.[g]?.[t[$]];return O?[{identifier:_.identifier,byteLength:O.byteLength}]:[]}),w=e.identityRows[g];if(!w)throw new Error(`Primary-key identity row missing at index ${g}`);let R=e.rawTextBytes[g];if(!e.rawTextValidationUnavailable&&(!R||R.length!==e.rawTextColumnIndices.length))throw new Error(`Primary-key raw TEXT row missing at index ${g}`);let I=e.rawTextValidationUnavailable?e.identity.columns.map(_=>_.identifier):e.identity.columns.flatMap((_,$)=>{let O=w[t[$]];if(typeof O!="string")return[];let D=e.oversizedCells?.[g]?.[t[$]];if(D&&D.byteLength>e.effectiveInlineCellBytes)return[];let p=R[s[$]];return p instanceof Uint8Array?sn(a,p,O)?[]:[_.identifier]:[_.identifier]}),T;if(e.rawTextValidationUnavailable&&(o??=new Set,o.add(g)),I.length>0){let _=e.rawTextValidationUnavailable?cu(I):lu(I,e.textEncoding);r??={},r[g]=_,o??=new Set,o.add(g),T=ht(_,n+g)}else if(S.length>0){let _=au(S,e.effectiveInlineCellBytes);r??={},r[g]=_,T=ht(_,n+g)}else T=Ke(e.identity.columns,t.map(_=>w[_])),i.push(g);return[T,...y.slice(0,e.visibleColumnCount)]}),u=es(e.oversizedCells,e.visibleColumnCount),c=es(e.exactIntegerTexts,e.visibleColumnCount),d=ue-St,f=ln(l)+cn(u)+un(c)+cs(r),m="Row is read-only because its encoded WITHOUT ROWID primary-key identity exceeds the page transport budget.",E=y=>{if(r?.[y]!==void 0)return 0;let g=xe(String(y))+de(m);return r?1+g:2+g};for(let y=i.length-1;y>=0&&f>d;y--){let g=i[y],S=l[g][0],w=ht(m,n+g),R=de(w)-de(S)+E(g);R>=0||(l[g][0]=w,r??={},r[g]=m,f+=R)}if(f>d)throw new Error(`Cell containment cannot fit this page within the ${ue}-byte transport limit`);return{rows:l,...u?{oversizedCells:u}:{},...c?{exactIntegerTexts:c}:{},...r?{readOnlyRowReasons:r}:{},...o?{unrepresentableTextKeyRows:o}:{}}}var rn,be,Qc,ue,Kc,wt,St,Rr,zc,Xc,Gc,Yc,ns,Yi,Ji,Jc,Cr,fn=M(()=>{"use strict";A();Y();Ft();Et();rn=1024*1024,be=16*1024*1024,Qc=256,ue=2*be,Kc=64*1024,wt=40,St=512*1024,Rr=45,zc=2,Xc="__sqlite_explorer_cell_source",Gc="__sqlite_explorer_cell_value_",Yc="__sqlite_explorer_cell_metadata",ns="__sqlite_explorer_cell_raw_text_",Yi=64*1024,Ji=400,Jc=4,Cr=2e3});function gs(e){if(e.length>ps)throw new Error("Query text exceeds 65,536 characters.");let t=Ee(e),n="",r=0,o=0;for(let i=0;ia+1?Number(t.slice(a+1,i)):r+1;if(!Number.isInteger(l)||l<1||l>100)throw new Error("Use at most 100 positional parameters.");r=Math.max(r,l),n+="NULL";continue}else{if(s==="("&&o++,s===")"&&--o<0)throw new Error("Unbalanced query parentheses.");if(s===";")throw new Error("Exactly one read query is required.");if(s===":"||s==="@"||s==="$")throw new Error("Use positional ? or ?NNN parameters. Named parameters are not supported.");i++}n+=t.slice(a,i)}if(o!==0)throw new Error("Unbalanced query parentheses.");return{sourceSql:t,sql:`SELECT * FROM ( ${t} ) LIMIT ${Ie+1}`,metadataSql:`SELECT * FROM ( ${n} -) LIMIT 0`,parameterCount:r}}function ys(e,t){return{sql:`SELECT sqlite_explorer_query_plan(${Array(t.length+1).fill("?").join(", ")}) AS plan`,params:[e,...t]}}function hs(e){if(typeof e!="string"||e.length>xr)throw new Error("SQLite returned an invalid query plan.");let t=JSON.parse(e);if(!Array.isArray(t)||t.length>Ie+1||t.some(n=>!Array.isArray(n)||n.length!==4||n.slice(0,3).some(r=>!Number.isSafeInteger(r))||typeof n[3]!="string"))throw new Error("SQLite returned an invalid query plan.");return{headers:["id","parent","notused","detail"],rows:t}}function Es(e){if(e.length>ps)throw new Error("Parameters exceed 65,536 characters.");let t=JSON.parse(e);if(!Array.isArray(t)||t.length>100)throw new Error("Enter a JSON array of at most 100 values.");for(let n of t){if(n!==null&&typeof n!="string"&&typeof n!="number")throw new Error("Parameters must be null, string, or number.");if(typeof n=="number"&&(!Number.isFinite(n)||Number.isInteger(n)&&!Number.isSafeInteger(n)))throw new Error("Numbers must be finite and integer values must be safe integers. Supply an exact integer as a quoted string and use CAST(? AS INTEGER).")}return t}function ws(e,t){if(t<1||t>mn)throw new Error("Queries support 1 to 128 result columns.");let n=on(e,t,{limit:Ie+1,maxInlineCellBytes:64*1024,maxPageResponseBytes:xr});return mt(n.sql,n.primaryTransportColumnCount)}function Ss(e,t,n){let r=Qe(t,n);return{headers:e,...dn(r.rows,e.length,r.exactIntegerTexts,xr)}}var Ie,xr,ps,mn,bs=M(()=>{"use strict";A();ut();fn();pt();hr();Ie=1e3,xr=4*1024*1024,ps=64*1024,mn=128});function cu(e){return e.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Cs(e,t){let n=cu(t);return new RegExp(`(^|[^A-Za-z0-9_$])${n}($|[^A-Za-z0-9_$])`,"i").test(e)}async function Rs(e,t,n,r){let o=`main.${C(e)}`;for(let i of n??[])await r(`DROP INDEX IF EXISTS main.${C(i)}`);for(let i of t)await r(`ALTER TABLE ${o} DROP COLUMN ${C(i)}`)}var Ts,Cm,Rm,xs=M(()=>{"use strict";A();Et();mr();Y();ut();Ts=` +) LIMIT 0`,parameterCount:r}}function ys(e,t){return{sql:`SELECT sqlite_explorer_query_plan(${Array(t.length+1).fill("?").join(", ")}) AS plan`,params:[e,...t]}}function hs(e){if(typeof e!="string"||e.length>xr)throw new Error("SQLite returned an invalid query plan.");let t=JSON.parse(e);if(!Array.isArray(t)||t.length>Ie+1||t.some(n=>!Array.isArray(n)||n.length!==4||n.slice(0,3).some(r=>!Number.isSafeInteger(r))||typeof n[3]!="string"))throw new Error("SQLite returned an invalid query plan.");return{headers:["id","parent","notused","detail"],rows:t}}function Es(e){if(e.length>ps)throw new Error("Parameters exceed 65,536 characters.");let t=JSON.parse(e);if(!Array.isArray(t)||t.length>100)throw new Error("Enter a JSON array of at most 100 values.");for(let n of t){if(n!==null&&typeof n!="string"&&typeof n!="number")throw new Error("Parameters must be null, string, or number.");if(typeof n=="number"&&(!Number.isFinite(n)||Number.isInteger(n)&&!Number.isSafeInteger(n)))throw new Error("Numbers must be finite and integer values must be safe integers. Supply an exact integer as a quoted string and use CAST(? AS INTEGER).")}return t}function ws(e,t){if(t<1||t>mn)throw new Error("Queries support 1 to 128 result columns.");let n=on(e,t,{limit:Ie+1,maxInlineCellBytes:64*1024,maxPageResponseBytes:xr});return mt(n.sql,n.primaryTransportColumnCount)}function Ss(e,t,n){let r=Qe(t,n);return{headers:e,...dn(r.rows,e.length,r.exactIntegerTexts,xr)}}var Ie,xr,ps,mn,bs=M(()=>{"use strict";A();ut();fn();pt();hr();Ie=1e3,xr=4*1024*1024,ps=64*1024,mn=128});function uu(e){return e.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Cs(e,t){let n=uu(t);return new RegExp(`(^|[^A-Za-z0-9_$])${n}($|[^A-Za-z0-9_$])`,"i").test(e)}async function Rs(e,t,n,r){let o=`main.${C(e)}`;for(let i of n??[])await r(`DROP INDEX IF EXISTS main.${C(i)}`);for(let i of t)await r(`ALTER TABLE ${o} DROP COLUMN ${C(i)}`)}var Ts,Rm,xm,xs=M(()=>{"use strict";A();Et();mr();Y();ut();Ts=` SELECT type, name, sql FROM main.sqlite_schema WHERE type IN ('view', 'trigger') AND sql IS NOT NULL -ORDER BY type, name`;Cm=2*1024*1024,Rm=64*1024});function Ae(e){let t=e==null?"":String(e);return t.trim()?t:void 0}var Ir=M(()=>{"use strict";A()});function yn(e,t,n="set"){if(n==="json_patch")return{value:e,operation:"json_patch"};if(typeof e!="string"||typeof t!="string"||!(e.startsWith("{")||e.startsWith("["))||!(t.startsWith("{")||t.startsWith("[")))return{value:e,operation:"set"};try{let r=JSON.parse(t),o=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r)||!o||typeof o!="object"||Array.isArray(o))return{value:e,operation:"set"};let i=Ns(r,o);return i===void 0||_s(i)?{value:e,operation:"set"}:{value:JSON.stringify(i),operation:"json_patch"}}catch{return{value:e,operation:"set"}}}function _s(e){return e===null?!0:ee(e)?Object.values(e).some(_s):!1}function Ns(e,t,n=0){if(n>1e3)throw new Error("JSON merge patch depth limit exceeded");if(e===t)return;if(!ee(e)||!ee(t)||Array.isArray(e)||Array.isArray(t))return t;let r=Object.create(null),o=!1;for(let i of Object.keys(t)){let a=Object.prototype.hasOwnProperty.call(e,i)?e[i]:void 0,s=t[i];if(a===void 0)r[i]=s,o=!0;else if(a!==s){let l=Ns(a,s,n+1);l!==void 0&&(r[i]=l,o=!0)}}for(let i of Object.keys(e))Object.prototype.hasOwnProperty.call(t,i)||(r[i]=null,o=!0);return o?r:void 0}function Os(e,t,n=0){if(n>1e3)throw new Error("JSON apply merge patch depth limit exceeded");if(t===null)return null;if(typeof t!="object"||Array.isArray(t))return t;let r;typeof e!="object"||e===null||Array.isArray(e)?r=Object.create(null):r=Object.assign(Object.create(null),e);let o=t;for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i)){let a=o[i];a===null?delete r[i]:r[i]=Os(r[i],a,n+1)}return r}function pn(e){if(typeof e=="string")try{let t=JSON.parse(e);return ee(t)?t:void 0}catch{return}}function Ls(e,t,n,r,o){let i=o==="undo"?r:n,a=o==="undo"?n:r,s=()=>As(e,i)?{kind:"write",value:a}:{kind:"conflict"};if(gn(e)||gn(t)||gn(n)||gn(r))return s();let l=pn(e),u=pn(t),c=pn(n),d=pn(r);if(!l||!u||!c||!d)return s();if(!$s(l,o==="undo"?d:c,u,c,0))return{kind:"conflict"};if(As(e,i))return{kind:"write",value:a};let m=o==="undo"?_r(l,u,c,0):Os(l,u,0);return{kind:"write",value:JSON.stringify(m)}}function $s(e,t,n,r,o){if(o>1e3)throw new Error("JSON history replay depth limit exceeded");for(let i of Object.keys(n)){let a=n[i],s=Object.prototype.hasOwnProperty.call(e,i),l=Object.prototype.hasOwnProperty.call(t,i),u=Object.prototype.hasOwnProperty.call(r,i),c=s?e[i]:void 0,d=l?t[i]:void 0,f=u?r[i]:void 0;if(ee(a)){if(!u||!ee(f)){if(!Is(s,c,l,d,o+1))return!1;continue}if(!s||!ee(c)||!l||!ee(d)||!$s(c,d,a,f,o+1))return!1;continue}if(!Is(s,c,l,d,o+1))return!1}return!0}function Is(e,t,n,r,o){return e===n&&(!e||Ar(t,r,o))}function Ar(e,t,n){if(n>1e3)throw new Error("JSON history replay depth limit exceeded");if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((i,a)=>Ar(i,t[a],n+1));if(!ee(e)||!ee(t))return!1;let r=Object.keys(e),o=Object.keys(t);return r.length!==o.length?!1:r.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&Ar(e[i],t[i],n+1))}function As(e,t){return e instanceof Uint8Array||t instanceof Uint8Array?!(e instanceof Uint8Array)||!(t instanceof Uint8Array)?!1:e.length===t.length&&e.every((n,r)=>n===t[r]):Object.is(e,t)}function _r(e,t,n,r){if(r>1e3)throw new Error("JSON undo restore depth limit exceeded");let o=Object.assign(Object.create(null),e);for(let i of Object.keys(t)){let a=t[i],s=Object.prototype.hasOwnProperty.call(n,i),l=s?n[i]:void 0;if(ee(a))if(s&&ee(l))if(Object.prototype.hasOwnProperty.call(o,i)&&ee(o[i])){let u=o[i];o[i]=_r(u,a,l,r+1)}else o[i]=l;else if(s)o[i]=l;else{let u=Object.prototype.hasOwnProperty.call(o,i)&&ee(o[i])?o[i]:Object.create(null),c=_r(u,a,Object.create(null),r+1);Object.keys(c).length===0?delete o[i]:o[i]=c}else s?o[i]=l:delete o[i]}return o}function gn(e){if(typeof e!="string")return!1;let n=e.replace(/"(?:\\.|[^"\\])*"/g,'""').match(/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g);return n?n.some(r=>{let o=Number(r);return!Number.isFinite(o)||JSON.stringify(o)!==r}):!1}function ee(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var vs=M(()=>{"use strict";A()});function se(e){let t=C(e);return`typeof(${t}), CASE WHEN typeof(${t}) = 'text' THEN CAST(${t} AS BLOB) ELSE ${t} END`}function mu(e,t,n){if(!t)throw new Error(`SQLite text encoding is required for ${n}`);try{return{value:ge(t).decode(e)}}catch{return{value:"",rawTextBytes:e}}}function K(e,t,n,r={}){if(typeof e!="string"||!uu.has(e))throw new Error(`SQLite returned an invalid storage class for ${n}`);let o=e;if(o!=="text"&&r.rawTextBytes!==void 0)throw new Error(`SQLite returned raw TEXT bytes for non-TEXT ${n}`);if(o==="text"){if(t instanceof Uint8Array)return{storageClass:o,...mu(t,r.textEncoding,n)};if(typeof t!="string")throw new Error(`SQLite returned an invalid text value for ${n}`);if(r.rawTextBytes!==void 0&&!(r.rawTextBytes instanceof Uint8Array))throw new Error(`SQLite returned invalid raw TEXT bytes for ${n}`);return{storageClass:o,value:t,...r.rawTextBytes instanceof Uint8Array?{rawTextBytes:r.rawTextBytes}:{}}}if(!(o==="null"?t===null:o==="integer"?typeof t=="bigint"||typeof t=="number"&&Number.isInteger(t):o==="real"?typeof t=="number":t instanceof Uint8Array))throw new Error(`SQLite returned an invalid ${o} value for ${n}`);return{storageClass:o,value:t}}function Rt(e){if(!e||typeof e!="object")throw new Ct;K(e.storageClass,e.value,"cell history",{rawTextBytes:e.rawTextBytes})}function Nr(e,t){if(e.storageClass!==t.storageClass)return!1;if(e.storageClass==="text"){let o=e.rawTextBytes,i=t.rawTextBytes;if(o||i)return!o||!i?!1:o.length===i.length&&o.every((a,s)=>a===i[s])}let n=e.value,r=t.value;return e.storageClass==="integer"&&typeof n!=typeof r?typeof n=="number"&&Number.isSafeInteger(n)&&typeof r=="bigint"?BigInt(n)===r:typeof r=="number"&&Number.isSafeInteger(r)&&typeof n=="bigint"?n===BigInt(r):!1:n instanceof Uint8Array||r instanceof Uint8Array?!(n instanceof Uint8Array)||!(r instanceof Uint8Array)?!1:n.length===r.length&&n.every((o,i)=>o===r[i]):Object.is(n,r)}function hn(e,t=()=>"?"){switch(Rt(e),e.storageClass){case"null":return{sql:"NULL",params:[]};case"integer":return{sql:t(e.value),params:[e.value]};case"real":return{sql:"CAST(? AS REAL)",params:[e.value]};case"text":return{sql:e.rawTextBytes?"CAST(substr(?, 1) AS TEXT)":"CAST(? AS TEXT)",params:[e.rawTextBytes??e.value]};case"blob":return{sql:"?",params:[e.value]}}}function En(e,t,n=()=>"?"){Rt(t);let r=C(e);switch(t.storageClass){case"null":return{sql:`typeof(${r}) = 'null'`,params:[]};case"integer":{let o=n(t.value);return{sql:`typeof(${r}) = 'integer' AND ${r} IS ${o}`,params:[t.value]}}case"real":return{sql:`typeof(${r}) = 'real' AND ${r} IS CAST(? AS REAL)`,params:[t.value]};case"text":return{sql:`typeof(${r}) = 'text' AND CAST(${r} AS BLOB) = CAST(? AS BLOB)`,params:[t.rawTextBytes??t.value]};case"blob":return{sql:`typeof(${r}) = 'blob' AND ${r} IS ?`,params:[t.value]}}}var uu,du,fu,fe,Ct,Or=M(()=>{"use strict";A();Y();Ft();uu=new Set(["null","integer","real","text","blob"]),du="Cell changed outside SQLite Explorer history; undo/redo was not applied.",fu="This edit predates guarded cell history and cannot be replayed safely. Save or reload the database.",fe=class extends Error{code="SQLITE_EXPLORER_CELL_HISTORY_CONFLICT";constructor(t,n){let r=n.length===1?`${t}.${n[0]}`:`${n.length} cells in ${t}`;super(`${r}: ${du}`),this.name="CellHistoryConflictError"}},Ct=class extends Error{code="SQLITE_EXPLORER_LEGACY_CELL_HISTORY";constructor(){super(fu),this.name="LegacyCellHistoryError"}}});function xt(e){if(!Array.isArray(e.storageClasses))throw new J;let t=new Set;return e.storageClasses.map(n=>{let r=typeof n?.column=="string"?Yt(n.column):void 0;if(!n||typeof n.column!="string"||r===void 0||t.has(r)||!Object.prototype.hasOwnProperty.call(e.row,n.column))throw new J;t.add(r);let o=e.row[n.column],i=n.storageClass==="text"&&o instanceof Uint8Array?o:void 0;return{column:n.column,state:K(n.storageClass,i?"":o,`row history column ${n.column}`,{rawTextBytes:i})}})}function Lr(e,t=()=>"?"){let n=xt(e).map(({column:r,state:o})=>En(r,o,t));return{sql:n.length>0?n.map(r=>`(${r.sql})`).join(" AND "):"1",params:n.flatMap(r=>r.params)}}function ks(e,t=()=>"?"){return xt(e).map(({column:n,state:r})=>({column:n,write:hn(r,t)}))}var pu,gu,_e,J,Ps=M(()=>{"use strict";A();Or();pt();pu="Row changed outside SQLite Explorer history; undo/redo was not applied.",gu="This row edit predates guarded row history and cannot be replayed safely. Save or reload the database.",_e=class extends Error{code="SQLITE_EXPLORER_ROW_HISTORY_CONFLICT";constructor(t){super(`${t}: ${pu}`),this.name="RowHistoryConflictError"}},J=class extends Error{code="SQLITE_EXPLORER_LEGACY_ROW_HISTORY";constructor(){super(gu),this.name="LegacyRowHistoryError"}}});function It(e){let t=new Set,n=[e],r=0;for(;n.length>0;){let o=n.pop();if(o!=null){if(typeof o=="boolean")r+=4;else if(typeof o=="number"||typeof o=="bigint")r+=8;else if(typeof o=="string")r+=o.length*2;else if(o instanceof Uint8Array)r+=o.byteLength;else if(typeof o=="object"){if(t.has(o))continue;if(t.add(o),r+=8,Array.isArray(o))for(let i of o)n.push(i);else for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r+=i.length*2,n.push(o[i]))}}}return r}var wn=M(()=>{"use strict";A();Pt()});function Ds(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||Number(n)<0)throw new Error(`SQLite returned an unsafe ${t} during delete undo preflight`);return Number(n)}function Bs(e,t){return[...e]}function Ms(e,t,n){return{sql:`SELECT COUNT(*), COALESCE(SUM(${t.map(o=>{let i=C(o);return`CASE typeof(${i}) WHEN 'text' THEN 2 * octet_length(${i}) WHEN 'blob' THEN octet_length(${i}) WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 0 END`}).join(" + ")||"0"}), 0) FROM ${L(e)} WHERE ${n.sql}`,params:n.params}}function Us(e){if(!e||e.length<2)throw new Error("SQLite omitted delete undo preflight metadata");return{rowCount:Ds(e[0],"row count"),valueBytes:Ds(e[1],"value byte count")}}function qs(e){if(!Number.isSafeInteger(e.maxSnapshotBytes)||e.maxSnapshotBytes<0)throw new Error("Delete undo snapshot budget must be a non-negative safe integer");if(e.rowCount!==e.rowIds.length)throw new Error(`Cannot delete from ${e.table}: one or more row identities no longer exist`);let n=[...new Set(e.insertableColumns)].reduce((a,s)=>a+s.length*2,0),r=e.rowIds.reduce((a,s)=>a+It(s),0),o=e.rowCount*e.insertableColumns.reduce((a,s)=>a+s.length*2+hu,0),i=e.valueBytes+r+e.rowCount*(yu+n)+o;if(!Number.isSafeInteger(i)||i>e.maxSnapshotBytes){let a=e.operation??"Delete";throw new Error(`${a} undo snapshot exceeds the ${e.maxSnapshotBytes}-byte memory budget; ${a.toLowerCase()} fewer rows or increase sqliteExplorer.maxUndoMemory.`)}}var yu,hu,Vs=M(()=>{"use strict";A();wn();Y();yu=32,hu=48});function kr(e){return e.orderBy?.toLowerCase()==="rowid"&&e.columns?.[0]?.toLowerCase()==="rowid"&&!e.columns.slice(1).some(t=>t.toLowerCase()==="rowid")}function Pr(e,t){let n=(t.filters??[]).flatMap(l=>{let u=Ae(l.value);return u===void 0?[]:[[l.column,u]]}),r=Ae(t.globalFilter)??null,o=r===null?null:t.globalFilterColumns??t.columns??null,i=typeof t.orderBy=="string"&&t.orderBy!==""?t.orderBy:null,a=i!==null&&t.orderDir==="DESC"?"DESC":"ASC",s=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)?t.limit:null;return JSON.stringify([bn,e,i,a,s,n,r,o])}function Dr(e,t){if(!t||e.orderByColumns?.length)return;let n=t.kind==="rowid"?["rowid"]:t.columns.map(i=>i.identifier);if(n.length===0)return;let r=typeof e.orderBy=="string"&&e.orderBy!==""?e.orderBy:void 0;if(r===void 0)return{keyColumns:n,nullableSortKey:!1,direction:"ASC"};let o=e.orderDir==="DESC"?"DESC":"ASC";return kr(e)?{keyColumns:n,nullableSortKey:!1,direction:o}:n.includes(r)?{keyColumns:[r,...n.filter(i=>i!==r)],nullableSortKey:!1,direction:o}:{keyColumns:[r,...n],nullableSortKey:!0,direction:o}}function Fs(e,t){if(!(!e||t))return{orderByColumns:e.keyColumns,orderDir:e.direction}}function wu(e){return e===null?["null"]:Zt(e)}function Su(e){return Array.isArray(e)&&e.length===1&&e[0]==="null"?{value:null,storageClass:"null"}:{value:Ki(e),storageClass:e[0]}}function bu(e,t){if(t.length===0)throw new Error("Keyset anchor requires at least one key value");let n={v:bn,t:e,k:t.map(wu)};return Sn+encodeURIComponent(JSON.stringify(n))}function Tu(e){if(e.length>vr)throw new Error(`Keyset anchor exceeds the ${vr}-byte limit`)}function Cu(e){if(typeof e!="string"||!e.startsWith(Sn))throw new Error("Invalid keyset anchor");Tu(e);let t;try{t=JSON.parse(decodeURIComponent(e.slice(Sn.length)))}catch{throw new Error("Invalid keyset anchor encoding")}if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==3||t.v!==bn||typeof t.t!="string"||!Array.isArray(t.k))throw new Error("Invalid keyset anchor payload");let n=t.k;if(n.length===0)throw new Error("Keyset anchor has no key values");let r,o;try{let a=n.map(Su);r=a.map(s=>s.value),o=a.map(s=>s.storageClass)}catch(a){throw new Error(`Invalid keyset anchor value: ${a instanceof Error?a.message:String(a)}`)}if(Sn+encodeURIComponent(JSON.stringify({v:bn,t:t.t,k:n}))!==e)throw new Error("Keyset anchor is not canonical");return{tag:t.t,values:r,valueClasses:o}}function Ws(e,t,n){let r=t.keyset;if(!r||typeof r!="object"||Array.isArray(r)||!Eu.includes(r.mode))return;let o=Dr(t,n);if(!o)return;let i=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)&&t.limit>0?t.limit:void 0;if(i===void 0)return;if(r.mode==="first")return{...o,mode:"first",limit:i};if(r.mode==="last"){let l=r.lastPageRowCount??i;return typeof l!="number"||!Number.isSafeInteger(l)||l<1||l>i?void 0:{...o,mode:"last",limit:l}}if(r.anchor===void 0)return;let a=Cu(r.anchor);if(a.tag!==Pr(e,t)||a.values.length!==o.keyColumns.length)return;let s=o.nullableSortKey?1:0;if(a.values.some((l,u)=>l===null&&u>=s))throw new Error("Keyset anchor has NULL in an identity slot");return{...o,mode:r.mode,values:a.values,valueClasses:a.valueClasses,limit:i}}function $r(e,t,n){return e.length===1?`${e[0]} ${t} ${n[0]}`:`(${e.join(", ")}) ${t} (${n.join(", ")})`}function Ru(e){let t=e.values,r=e.mode==="before"?e.direction==="ASC"?"DESC":"ASC":e.direction,o=(r==="ASC"?">":"<")+(e.mode==="atOrAfter"?"=":""),i=e.keyColumns.map(C),a=e.keyColumns.map((f,m)=>e.valueClasses?.[m]==="integer"?"CAST(? AS INTEGER)":"?");if(!e.nullableSortKey)return{sql:$r(i,o,a),params:t};let s=i[0],l=i.slice(1),u=t[0],c=t.slice(1);if(u===null){let f=$r(l,o,a.slice(1));return r==="ASC"?{sql:`((${s} IS NULL AND ${f}) OR ${s} IS NOT NULL)`,params:c}:{sql:`(${s} IS NULL AND ${f})`,params:c}}let d=$r(i,o,a);return r==="ASC"?{sql:d,params:t}:{sql:`(${d} OR ${s} IS NULL)`,params:t}}function js(e){let{plan:t}=e,n=t.mode==="before"||t.mode==="last",r=n?t.direction==="ASC"?"DESC":"ASC":t.direction,o=[...e.whereClauses],i=[...e.filterParams];if(t.mode!=="first"&&t.mode!=="last"){let u=Ru(t);o.push(u.sql),i.push(...u.params)}let a=t.keyColumns.map(C),s=u=>a.map(c=>`${c} ${u}`).join(", "),l=`SELECT ${e.selectListSql} FROM ${e.escapedTable}`;return o.length>0&&(l+=` WHERE ${o.join(" AND ")}`),l+=` ORDER BY ${s(r)} LIMIT ${t.limit}`,n&&(l=`SELECT * FROM (${l}) ORDER BY ${s(t.direction)}`),{sql:l,params:i}}function Hs(e){if(e.rows.length===0)return;let t=e.key.keyColumns.map(i=>e.projectionColumns.indexOf(i));if(t.some(i=>i<0))return;let n=i=>{if(e.excludedRowIndices?.has(i))return;let a=e.rows[i],s=[];for(let u=0;u{"use strict";A();Y();Ir();Et();Sn="ksa:",bn=1,vr=128*1024,Eu=["first","after","atOrAfter","before","last"]});function xu(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<1)throw new Error("Table page limit must be a positive safe integer");return Math.min(e,1e5)}function Iu(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new Error("Table page offset must be a non-negative safe integer");return e}function Ks(e,t=5e3){return{...e,limit:xu(e.limit??t),offset:Iu(e.offset??0)}}var zs=M(()=>{"use strict";A()});function Gs(e){if(!e||typeof e!="object")throw new Error("Cell read target is required");if(typeof e.table!="string"||e.table.length===0)throw new Error("Cell read table must be a non-empty string");if(typeof e.column!="string"||e.column.length===0)throw new Error("Cell read column must be a non-empty string")}function Ys(e,t){if(!Number.isSafeInteger(e)||e<0)throw new Error("Cell read byte offset must be a non-negative safe integer");if(!Number.isSafeInteger(t)||t<1||t>Xs)throw new Error(`Cell read chunk size must be an integer from 1 through ${Xs}`)}function ke(e){let t=String(e).toLowerCase().replace(/[_\s-]/g,"");if(t==="utf8")return"utf-8";if(t==="utf16le")return"utf-16le";if(t==="utf16be")return"utf-16be";throw new Error(`Unsupported SQLite text encoding: ${String(e)}`)}function Js(e,t,n){if(e.length!==1)throw new Error(e.length===0?`Cell ${n.table}.${n.column} no longer exists`:`Cell ${n.table}.${n.column} matched more than one row`);let r=e[0][0];if(typeof r!="string"||!Au.has(r))throw new Error(`SQLite returned an invalid storage class for ${n.table}.${n.column}`);let o=e[0][1],i=typeof o=="bigint"?Number(o):o;if(!Number.isSafeInteger(i)||Number(i)<0)throw new Error(`SQLite returned an unsafe byte length for ${n.table}.${n.column}`);return{storageClass:r,byteLength:Number(i),...r==="text"?{textEncoding:t}:{}}}function Ur(e,t){return Number.isFinite(e)&&Number(e)>=1?Math.floor(Number(e)):t}var Xs,Br,Mr,Au,Zs=M(()=>{"use strict";A();Y();Xs=1024*1024,Br=3e4,Mr=5*6e4,Au=new Set(["null","integer","real","text","blob"])});var Xe,Tn,Cn=M(()=>{"use strict";A();fn();Pt();Xe=be,Tn=ue});function _u(e){let t=0;for(let n=0;n=55296&&r<=56319){let o=e.charCodeAt(n+1);o>=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Ye(e,t){if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);let n=typeof e=="string"?"text":e instanceof Uint8Array?"blob":void 0;if(!n)return;let r=typeof e=="string"?_u(e):e instanceof Uint8Array?e.byteLength:0;if(r>t)throw new Fr(n,r,t)}function na(e){let t=e??ta;if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);return t}function Je(e,t){let n=na(t);for(let r of e)Ye(r,n);return n}function ra(e,t){let n=na(t);if(!e||e.storageClass!=="text"&&e.storageClass!=="blob"||!Number.isSafeInteger(e.byteLength)||e.byteLength<=n)throw new Error("Guarded oversized-cell replacement requires exact TEXT/BLOB metadata above the edit limit");return n}function Nu(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="CellEditPolicyError"||t.code!==qr||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"CellEditPolicyError",code:qr,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function Ou(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="OversizedCellReplacementRequiredError"||t.code!==Vr||typeof t.table!="string"||typeof t.column!="string"||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"OversizedCellReplacementRequiredError",code:Vr,table:t.table,column:t.column,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function oa(e){return Nu(e)??Ou(e)}var qr,Vr,ea,ta,Fr,Ge,Wr=M(()=>{"use strict";A();Cn();qr="SQLITE_EXPLORER_CELL_EDIT_VALUE_TOO_LARGE",Vr="SQLITE_EXPLORER_OVERSIZED_CELL_REPLACEMENT_REQUIRED",ea="Oversized cell metadata changed before the confirmed replacement was applied",ta=Xe,Fr=class extends Error{constructor(n,r,o,i=`New ${n.toUpperCase()} cell value is ${r} bytes and exceeds the ${o}-byte edit limit.`){super(i);this.storageClass=n;this.actualBytes=r;this.limitBytes=o}storageClass;actualBytes;limitBytes;name="CellEditPolicyError";code=qr},Ge=class extends Error{constructor(n,r,o,i,a,s=`Existing ${o.toUpperCase()} cell ${n}.${r} is ${i} bytes. Use the explicitly confirmed oversized-cell replacement path.`){super(s);this.table=n;this.column=r;this.storageClass=o;this.actualBytes=i;this.limitBytes=a}table;column;storageClass;actualBytes;limitBytes;name="OversizedCellReplacementRequiredError";code=Vr}});var dp,At,ia=M(()=>{"use strict";A();Cn();dp=1024*1024*1024,At=2145386496});function jr(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:Lu}function Hr(e){return e.storage==="paged"&&!e.filtered&&e.authorityConfirmedRowIdTable&&e.pagedFileSizeBytes>e.exactCountMaxFileBytes}function la(e){let t=L(e);return`SELECT (SELECT CAST(min(rowid) AS TEXT) FROM ${t}), (SELECT CAST(max(rowid) AS TEXT) FROM ${t})`}function ca(e){return`SELECT COUNT(*) FROM (SELECT 1 FROM ${L(e)} LIMIT ?)`}function ua(e,t){if(!(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>Ze+1))return e<=Ze?{count:e,isExact:!0}:{count:Qr(t,e),isExact:!1}}function Qr(e,t=Ze+1){return(!Number.isSafeInteger(t)||t<0)&&(t=Ze+1),!Number.isSafeInteger(e)||eBigInt(Number.MAX_SAFE_INTEGER)))return Number(i)}var Lu,Ze,aa,fa=M(()=>{"use strict";A();Y();Lu=64*1024*1024,Ze=1e4,aa=`SELECT 1 FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? AND "type" IN ('table', 'shadow') AND "wr" = 1 LIMIT 1`});var ma=M(()=>{"use strict";A()});var pa=M(()=>{"use strict";A()});var xp,Kr,zr,Xr,ga=M(()=>{"use strict";A();pa();wn();Wr();xp=64*1024*1024,Kr=1e5,zr=256,Xr=2e6});var af={};function Pu(e){if(!e||typeof e!="string")throw new Error("Invalid SQL type: Type must be a non-empty string");if(/['";\-\/\*]/.test(e))throw new Error(`Invalid SQL type: "${e}" contains potentially unsafe characters`);if(!/^[a-zA-Z0-9_\s]+(?:\([0-9\s,]+\)[a-zA-Z0-9_\s]*)?$/.test(e.trim()))throw new Error(`Invalid SQL type: "${e}" does not match allowed format`)}function Du(e){let t=String(e);return t.toLowerCase()==="null"?"NULL":/^-?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(t)?t:`'${t.replace(/'/g,"''")}'`}function V(e){return wa++,C(`${e}_${wa}`)}function nt(e){let t=`/*sqlite_explorer_boundary_${crypto.randomUUID().replace(/-/g,"")}*/`,n=h.prepare(`${e} -${t}`);if(!n.getSQL().trimEnd().endsWith(t))throw n.free(),new Error("Exactly one SQL statement is required");return n}function x(e){nt(e).free();let n=h.prepare(e);try{n.run()}finally{n.free()}}function P(e){return e?.map(t=>{if(Oa(t))return Bu(t);if(typeof t!="bigint")return t;let n=Number(t);return Number.isSafeInteger(n)?n:t.toString()})}function Oa(e){return typeof e=="string"&&e.includes("\0")}function ne(e){return typeof e=="bigint"&&!Number.isSafeInteger(Number(e))?"CAST(? AS INTEGER)":Oa(e)?"CAST(? AS TEXT)":"?"}function Bu(e){let t=ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]);if(t==="utf-8")return new TextEncoder().encode(e);let n=t==="utf-16le",r=new Uint8Array(e.length*2);for(let o=0;o>>8,r[o*2+1]=n?i>>>8:i&255}return r}function ot(e){nt(e).free()}function rt(e,t){if(t!==void 0&&!(typeof SharedArrayBuffer=="function"&&t instanceof Int32Array&&t.length>0&&t.buffer instanceof SharedArrayBuffer))throw new Error("Invalid query cancellation flag");let n=()=>t!==void 0&&Atomics.load(t,0)!==0,r=()=>{let a=new Error("Query execution cancelled");throw a.name="AbortError",a};n()&&r();let o=Date.now()+Jr,i;h.progress_handler($u,()=>n()?(i="cancelled",!0):Date.now(){let n=nt(e),r=n.getColumnNames();n.free();let o=mt(e,r.length),i=nt(o.sql),a=[];try{for(;i.step();)a.push(i.get(null,{useBigInt:!0}));let{rows:s,exactIntegerTexts:l}=Qe(a,o.valueColumnCount);return{headers:r,rows:s,exactIntegerTexts:l}}finally{i.free()}},t)}function La(e,t){if(t!=null)return t;let n=e??[];return n[0]==="rowid"?n.slice(1):n}function W(e,t){try{x(`ROLLBACK TO ${e}`),x(`RELEASE ${e}`)}catch(n){console.warn(`Failed to rollback savepoint (${t}):`,Te(n))}}function Mu(e){for(Pe.add(e);Pe.size>64;)Pe.delete(Pe.values().next().value)}function $a(e){x(`ROLLBACK TO ${e}`),x(`RELEASE ${e}`)}function Ln(e){let t=tt;if(!t||e!==void 0&&t.sessionId!==e)return!1;tt=null,Mu(t.sessionId),t.expiryTimer!==void 0&&clearTimeout(t.expiryTimer);try{x(`RELEASE ${t.savepointName}`)}catch(n){try{$a(t.savepointName)}catch(r){let o=[n,r];try{h?.close()}catch(i){o.push(i)}finally{h=null}throw new AggregateError(o,"Cell read snapshot cleanup failed; the owning web database was closed")}}return!0}function va(e){e.expiryTimer!==void 0&&clearTimeout(e.expiryTimer),e.expiresAt=Math.min(e.absoluteExpiresAt,e.lastAccessAt+co),e.expiryTimer=setTimeout(()=>{try{Ln(e.sessionId)}catch(t){console.error("[Worker] Failed to expire cell read session:",Te(t))}},Math.max(1,e.expiresAt-Date.now()))}async function ka(e){Gs(e);let t=await le(e.table),n=Q(e.rowId,t);return{table:e.table,column:e.column,predicateSql:n.sql,predicateParams:n.params}}function Uu(e){let t=C(e.column);return{sql:`SELECT typeof(${t}), CASE WHEN ${t} IS NULL THEN 0 ELSE length(CAST(${t} AS BLOB)) END FROM ${L(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function qu(e){return{sql:`SELECT substr(CAST(${C(e.column)} AS BLOB), ? + 1, ?) FROM ${L(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function Be(){return ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0])}function Pa(e,t){let n=Uu(t),r=h.exec(n.sql,P(n.params),{useBigInt:!0});return Js(r[0]?.values??[],Be(),e)}async function _n(e){if(!h)throw new Error("No database initialized");let t=await ka(e);return Pa(e,t)}async function Vu(e){if(!h)throw new Error("No database initialized");if(tt)throw new Error("At most one web cell read session may be open");let t=await ka(e),n=V("sp_cell_read");x(`SAVEPOINT ${n}`);try{let r=Pa(e,t),o=Date.now(),i={sessionId:crypto.randomUUID(),target:e,sqlTarget:t,metadata:r,savepointName:n,lastAccessAt:o,absoluteExpiresAt:o+Na,expiresAt:o+co,expiryTimer:void 0};return tt=i,va(i),{sessionId:i.sessionId,metadata:r,expiresAt:i.expiresAt}}catch(r){try{$a(n)}catch(o){let i=[r,o];try{h?.close()}catch(a){i.push(a)}finally{h=null}throw new AggregateError(i,"Cell read session open failed; the owning web database was closed")}throw r}}async function Fu(e,t,n){Ys(t,n);let r=tt;if(!r||r.sessionId!==e)throw new Error(Pe.has(e)?`Cell read session ${e} is closed or expired`:`Unknown cell read session: ${String(e)}`);if(Date.now()>=r.expiresAt)throw Ln(e),new Error(`Cell read session ${e} is closed or expired`);let o=qu(r.sqlTarget),a=h.exec(o.sql,P([t,n,...o.params]))[0]?.values??[];if(a.length!==1)throw new Error(a.length===0?`Cell ${r.target.table}.${r.target.column} no longer exists in its snapshot`:`Cell ${r.target.table}.${r.target.column} matched more than one row`);let s=a[0][0],l=s===null?new Uint8Array(0):s;if(!(l instanceof Uint8Array))throw new Error(`SQLite returned a non-BLOB chunk for ${r.target.table}.${r.target.column}`);return r.lastAccessAt=Date.now(),va(r),{byteOffset:t,bytes:l.slice(),done:t+l.byteLength>=r.metadata.byteLength}}async function Wu(e){if(typeof e!="string"||e.length===0)throw new Error("Cell read session id is required");if(!Ln(e)&&!Pe.has(e))throw new Error(`Unknown cell read session: ${e}`)}function ju(e){if(tt&&!["readCellChunk","closeCellReadSession","initializeDatabase"].includes(e))throw new Error("A cell read snapshot is active; close it before another database operation")}function Hu(e){if(e===void 0)return At;if(!Number.isSafeInteger(e)||e<1)throw new Error("pagedExportMaxBytes must be a positive safe integer");if(e>At)throw new Error(`pagedExportMaxBytes must not exceed ${At} bytes`);return e}function Te(e){let t="Unknown error";try{t=e&&typeof e=="object"&&typeof e.message=="string"&&e.message?e.message:String(e)}catch{}return t||(t="Unknown error"),t.length<=ya?t:t.slice(0,ya)+`... [truncated from ${t.length} characters]`}async function Qu(e,t){if(Ln(),h&&(h.close(),h=null),Jr=Number.isFinite(t.queryTimeout)&&t.queryTimeout>0?t.queryTimeout:Ia,ae=t.readOnlyMode===!0,Rn=null,Nt="memory",_t=0,In=Hu(t.pagedExportMaxBytes),_a=jr(t.pagedExactCountMaxFileBytes),co=Ur(t.cellReadSessionIdleTimeoutMs,Br),Na=Ur(t.cellReadSessionAbsoluteTimeoutMs,Mr),Pe.clear(),{SQL:Ea,db:h}=await B(t),Aa=Ea.queryPlanReaderActive===!0,h.run("PRAGMA foreign_keys = ON"),!ae){let n=zu();n&&(ae=!0,Rn=n)}return ae&&(typeof h.enforceReadOnly=="function"?h.enforceReadOnly():h.run("PRAGMA query_only = ON")),{operations:{},isReadOnly:ae,storage:Nt,...Rn?{readOnlyReason:Rn}:{}}}function Sa(e){return e?.errno===Ku||/read[\s-]?only/i.test(Te(e))?"This database cannot be written by this process, so it is open read-only (SQLite: attempt to write a readonly database).":null}function zu(){let e=Number(h.exec("PRAGMA user_version")[0]?.values?.[0]?.[0])|0;try{h.run("BEGIN")}catch(n){return Sa(n)}let t=null;try{h.run(`PRAGMA user_version = ${e}`)}catch(n){t=Sa(n)}finally{h.run("ROLLBACK")}return t}async function Xu(e,t=[],n){if(!h)throw new Error("No database initialized");if(ae)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");try{return rt(()=>h.exec(e,t),n).map(o=>({headers:o.columns,rows:o.values}))}catch(r){throw r}}async function Gu(e,t="[]",n){if(!h)throw new Error("No database initialized");if(typeof e!="string"||typeof t!="string")throw new TypeError("SQL and parameter JSON must be strings");let r=gs(e),o=Es(t);if(o.length!==r.parameterCount)throw new Error(`Expected ${r.parameterCount} positional parameters.`);let i=`query_columns_${crypto.randomUUID().replace(/-/g,"")}`,a=Number(h.exec("PRAGMA query_only")[0]?.values[0]?.[0])===1,s=!1,l;try{a&&x("PRAGMA query_only = OFF"),l=rt(()=>{x(`CREATE TEMP VIEW "${i}" AS ${r.metadataSql}`),s=!0;let u=(h.exec("SELECT substr(name, 1, 4097) FROM pragma.pragma_table_info(?, 'temp') ORDER BY cid LIMIT ?",[i,mn+1])[0]?.values??[]).map(c=>String(c[0]));if(!u.length||u.length>mn)throw new Error("Queries support 1 to 128 result columns.");if(u.some(c=>c.length>4096))throw new Error("Result column labels must be at most 4096 characters.");return u},n)}finally{try{s&&(a&&x("PRAGMA query_only = OFF"),x(`DROP VIEW temp."${i}"`))}finally{if(a)try{x("PRAGMA query_only = ON")}catch(u){let c=h;throw h=null,c.close(),u}}}return rt(()=>{let u=ws(r.sql,l.length),c=nt(u.sql);try{c.bind(o);let d=[];for(;d.length<=Ie&&c.step();)d.push(c.get(null,{useBigInt:!0}));return Ss(l,d,u.valueColumnCount)}finally{c.free()}},n)}function Yu(e){if(e==null)return 5e3;let t=Number(e);return Number.isFinite(t)?Math.min(5e4,Math.max(1,Math.trunc(t))):5e3}function Ju(e){if(e==null)return 1/0;let t=Number(e);return Number.isFinite(t)?Math.max(1,Math.trunc(t)):1/0}function Zu(e){if(e==null)return[];if(!Array.isArray(e))throw new Error("Console parameters must be a JSON array.");if(e.length>ba)throw new Error(`Use at most ${ba} positional parameters.`);for(let t of e)if(t!==null){if(typeof t=="string"){if(t.includes("\0"))throw new Error("Console parameters must not contain NUL bytes; SQLite would bind the text truncated at the first one.");continue}if(!(typeof t=="number"&&Number.isFinite(t)))throw new Error("Console parameters must be null, string, or finite number values.")}return e}function Da(e,t){try{e.bind(t)}catch(n){throw new Error(`cannot bind ${t.length} positional parameter${t.length===1?"":"s"}: `+Te(n))}}function Ua(e){let t=0;for(;;){let n=t;for(;tIe}}function od(e,t){let n=ys(e,t),r=h.prepare(n.sql);try{if(r.bind(n.params),!r.step())throw new Error(Ma);return Va(hs(r.get()[0]).rows)}finally{r.free()}}function id(e,t){if(nd.test(Ua(e)))throw new Error("PRAGMA statements have no query plan (and some pragmas take effect while being compiled, so they are not even prepared here). Use Run.");let n=nt(`EXPLAIN QUERY PLAN ${e}`);try{t.length>0&&Da(n,t);let r=[];for(;r.length<=Ie&&n.step();){let o=n.get();if(o.length!==Ba.length||typeof o[3]!="string")throw new Error(Ma);if(new TextEncoder().encode(o[3]).byteLength>td)throw new Error("Query plan detail exceeds the 65,536-byte limit.");r.push(o)}return Va(r)}finally{n.free()}}function sd(e,t){if(typeof e!="string"||e.trim()==="")throw new Error("Enter one SQL statement to explain.");if(new TextEncoder().encode(e).byteLength>ed)throw new Error("Query plan SQL exceeds 262,144 UTF-8 bytes.");let n=Ee(e);for(let r of n.matchAll(qa))if(r[0]===";")throw new Error("Exactly one SQL statement is required");return Aa&&rd(n)?od(n,t):id(n,t)}async function ad(e,t={},n){if(!h)throw new Error("No database initialized");if(ae)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");if(typeof e=="string"&&e.includes("\0"))throw new Error("SQL contains a NUL byte; SQLite stops compiling at the first NUL, so the rest of the script would be silently skipped");let r=Zu(t.params),o=Yu(t.maxRows),i=Ju(t.maxStatements),a=Date.now(),s=h.exec("SELECT total_changes()")[0].values[0][0],l=h.exec("PRAGMA schema_version")[0].values[0][0],u=()=>{let E=h.exec("SELECT total_changes()")[0].values[0][0],y=h.exec("PRAGMA schema_version")[0].values[0][0];return{mutated:E-s>0||y!==l,changes:E-s,durationMs:Date.now()-a}},c=()=>{try{return u()}catch{return{mutated:!0,changes:0,durationMs:Date.now()-a}}};if(t.explain===!0)try{return{results:[rt(()=>sd(e,r),n)],explain:!0,statementsSkipped:!1,...u()}}catch(E){return{results:[],error:Te(E),explain:!0,multiStatement:!1,statementsSkipped:!1,...c()}}let d=0,f=!1,m;try{m=rt(()=>{let E=[],y=h.iterateStatements(e),g=!1;for(;;){if(d>=i){g=!0;break}d++;let S=y.next();if(S.done)break;let w=S.value;try{r.length>0&&Da(w,r);let R=w.getColumnNames(),I=!1,T=!1;if(R.length===0&&(T=w.step(),I=!0,T&&(R=w.getColumnNames())),R.length===0){if(!I||T)for(;w.step(););}else{let _=[],$=!1;for(I||(T=w.step());T;)_.length1,statementsSkipped:f,...g}}return{results:m,statementsSkipped:f,...u()}}async function ld(e){if(!h)throw new Error("No database initialized");let t=Nt==="paged"&&!ae;if(Nt==="paged"&&ae)throw new Error("paged databases are read-only snapshots; export() is only available on openPagedWritable instances");let n=()=>new Error(`Cannot download this page-on-demand database: the merged image would exceed the ${In}-byte browser memory limit. Saving materializes the complete database in memory; use the desktop extension or reduce the database size.`);if(t&&_t>In)throw n();let r;try{r=h.export()}catch(o){let i=Te(o);throw t&&/transaction is open|while a transaction/i.test(i)?new Error("Cannot save while a database transaction is open; retry after the edit completes.",{cause:o}):o}if(t&&r.byteLength>In)throw n();return r}async function cd(e,t,n,r,o={}){if(!h)throw new Error("No database initialized");let i=e?.table;if(!i)throw new Error("No table specified");let{format:a="csv",header:s=!0,includeTableName:l=!0,rowIds:u=null,maxExportBytes:c}=o;if(!["csv","json","sql","excel"].includes(a))throw new Error(`Unsupported export format: ${a}`);let d=Number.isSafeInteger(c)&&c>0?Math.min(c,ku):ao,f=[{sql:"",params:[]}];if(u&&u.length>0){let O=await le(i);if(u.some(ie)&&!u.every(ie))throw new Error("Cannot mix rowid and primary-key row identities");let D=new Set,p=[];for(let b of u){let N=O.kind==="rowid"?H(b):b,k=String(N);D.has(k)||(D.add(k),p.push(N))}f=ze(p,O)}let m=t&&t.length>0?t:ud(i);if(m.length>An)throw new Error(`Cannot export more than ${An} columns`);let E=a!=="csv"&&a!=="excel",y=m.map((O,D)=>{let p=C(O),b=`typeof(${p})`,N=`octet_length(${p})`;return`CASE ${b} WHEN 'null' THEN 'n:0:' WHEN 'integer' THEN 'i:0:' || CAST(${p} AS TEXT) WHEN 'real' THEN 'r:0:' || printf('%!.17g', ${p}) WHEN 'text' THEN 't:' || CAST(${N} AS TEXT) || ':' || hex(CAST(${p} AS BLOB)) WHEN 'blob' THEN 'b:' || CAST(${N} AS TEXT) || ':' || `+(E?`hex(${p}) `:"'' ")+`END AS ${C(`__export_cell_${D}`)}`}).join(", "),g=V("sp_export_rows");x(`SAVEPOINT ${g}`);let S=[];try{let O=1024;for(let D of f){let p=D.sql?` WHERE ${D.sql}`:"";if(O+=pd(i,m,p,D.params,a,d),!Number.isSafeInteger(O)||O>d)throw uo(d)}for(let D of f){let p=D.sql?` WHERE ${D.sql}`:"",b=h.exec(`SELECT ${y} FROM ${L(i)}${p}`,D.params);b.length>0&&S.push(...b[0].values)}x(`RELEASE ${g}`)}catch(O){throw W(g,"exportTable"),O}let w=m,R=ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),I=S.map((O,D)=>{if(O.length!==m.length)throw new Error(`SQLite returned ${O.length} packed export cells for row ${D}; expected ${m.length}`);return m.map((p,b)=>fd(i,p,O[b],E,R))}),T=new eo(d),_="text/plain",$=`${i}.${a}`;switch(a){case"csv":Ta(w,I,s,T),_="text/csv";break;case"json":gd(w,I,T),_="application/json";break;case"sql":yd(i,w,I,l,T),_="text/sql";break;case"excel":Ta(w,I,s,T),_="text/csv",$=`${i}.csv`;break}return{contentChunks:T.finish(),filename:$,mimeType:_}}function uo(e){if(e===ao)return new Error(`Web demo exports are limited to ${vu} because the worker RPC cannot stream downloads; use the desktop extension for larger exports.`);let t=e/(1024*1024);return new Error(`Export exceeds the ${t} MiB (${e} bytes) limit; the worker assembles the whole file in memory, so larger exports need the native engine.`)}function ud(e){let t=h.prepare(`SELECT * FROM ${L(e)} LIMIT 0`);try{return t.getColumnNames()}finally{t.free()}}function dd(e,t,n){if(e.length!==t*2||/[^0-9a-f]/i.test(e))throw new Error(`SQLite returned invalid packed bytes for ${n}`);let r=new Uint8Array(t);for(let o=0;o1;){let n=[];for(let r=0;r{let f=C(d),m=`length(${f})`,E=o==="csv"||o==="excel"?"64":o==="json"?`((${m} + 2) / 3) * 4 + 64`:`${m} * 2 + 64`;return`CASE typeof(${f}) WHEN 'text' THEN length(CAST(${f} AS BLOB)) * 6 + 64 WHEN 'blob' THEN ${E} ELSE 64 END`})),l=h.exec(`SELECT COUNT(*), COALESCE(SUM(${a}), 0) FROM ${L(e)}${n}`,r)[0]?.values?.[0]??[0,0],u=Number(l[0]),c=Number(l[1])+u*128;if(!Number.isSafeInteger(c)||c<0)throw uo(i);return c}function Zr(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Ta(e,t,n,r){let o=!1,i=a=>{o&&r.append(` -`),r.append(a.join(",")),o=!0};n&&i(e.map(a=>yr({storageClass:"text",value:a})));for(let a of t)i(a.map(yr))}function gd(e,t,n){n.append("[");for(let r=0;r{"use strict";A()});function yn(e,t,n="set"){if(n==="json_patch")return{value:e,operation:"json_patch"};if(typeof e!="string"||typeof t!="string"||!(e.startsWith("{")||e.startsWith("["))||!(t.startsWith("{")||t.startsWith("[")))return{value:e,operation:"set"};try{let r=JSON.parse(t),o=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r)||!o||typeof o!="object"||Array.isArray(o))return{value:e,operation:"set"};let i=Ns(r,o);return i===void 0||_s(i)?{value:e,operation:"set"}:{value:JSON.stringify(i),operation:"json_patch"}}catch{return{value:e,operation:"set"}}}function _s(e){return e===null?!0:ee(e)?Object.values(e).some(_s):!1}function Ns(e,t,n=0){if(n>1e3)throw new Error("JSON merge patch depth limit exceeded");if(e===t)return;if(!ee(e)||!ee(t)||Array.isArray(e)||Array.isArray(t))return t;let r=Object.create(null),o=!1;for(let i of Object.keys(t)){let a=Object.prototype.hasOwnProperty.call(e,i)?e[i]:void 0,s=t[i];if(a===void 0)r[i]=s,o=!0;else if(a!==s){let l=Ns(a,s,n+1);l!==void 0&&(r[i]=l,o=!0)}}for(let i of Object.keys(e))Object.prototype.hasOwnProperty.call(t,i)||(r[i]=null,o=!0);return o?r:void 0}function Os(e,t,n=0){if(n>1e3)throw new Error("JSON apply merge patch depth limit exceeded");if(t===null)return null;if(typeof t!="object"||Array.isArray(t))return t;let r;typeof e!="object"||e===null||Array.isArray(e)?r=Object.create(null):r=Object.assign(Object.create(null),e);let o=t;for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i)){let a=o[i];a===null?delete r[i]:r[i]=Os(r[i],a,n+1)}return r}function pn(e){if(typeof e=="string")try{let t=JSON.parse(e);return ee(t)?t:void 0}catch{return}}function Ls(e,t,n,r,o){let i=o==="undo"?r:n,a=o==="undo"?n:r,s=()=>As(e,i)?{kind:"write",value:a}:{kind:"conflict"};if(gn(e)||gn(t)||gn(n)||gn(r))return s();let l=pn(e),u=pn(t),c=pn(n),d=pn(r);if(!l||!u||!c||!d)return s();if(!$s(l,o==="undo"?d:c,u,c,0))return{kind:"conflict"};if(As(e,i))return{kind:"write",value:a};let m=o==="undo"?_r(l,u,c,0):Os(l,u,0);return{kind:"write",value:JSON.stringify(m)}}function $s(e,t,n,r,o){if(o>1e3)throw new Error("JSON history replay depth limit exceeded");for(let i of Object.keys(n)){let a=n[i],s=Object.prototype.hasOwnProperty.call(e,i),l=Object.prototype.hasOwnProperty.call(t,i),u=Object.prototype.hasOwnProperty.call(r,i),c=s?e[i]:void 0,d=l?t[i]:void 0,f=u?r[i]:void 0;if(ee(a)){if(!u||!ee(f)){if(!Is(s,c,l,d,o+1))return!1;continue}if(!s||!ee(c)||!l||!ee(d)||!$s(c,d,a,f,o+1))return!1;continue}if(!Is(s,c,l,d,o+1))return!1}return!0}function Is(e,t,n,r,o){return e===n&&(!e||Ar(t,r,o))}function Ar(e,t,n){if(n>1e3)throw new Error("JSON history replay depth limit exceeded");if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((i,a)=>Ar(i,t[a],n+1));if(!ee(e)||!ee(t))return!1;let r=Object.keys(e),o=Object.keys(t);return r.length!==o.length?!1:r.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&Ar(e[i],t[i],n+1))}function As(e,t){return e instanceof Uint8Array||t instanceof Uint8Array?!(e instanceof Uint8Array)||!(t instanceof Uint8Array)?!1:e.length===t.length&&e.every((n,r)=>n===t[r]):Object.is(e,t)}function _r(e,t,n,r){if(r>1e3)throw new Error("JSON undo restore depth limit exceeded");let o=Object.assign(Object.create(null),e);for(let i of Object.keys(t)){let a=t[i],s=Object.prototype.hasOwnProperty.call(n,i),l=s?n[i]:void 0;if(ee(a))if(s&&ee(l))if(Object.prototype.hasOwnProperty.call(o,i)&&ee(o[i])){let u=o[i];o[i]=_r(u,a,l,r+1)}else o[i]=l;else if(s)o[i]=l;else{let u=Object.prototype.hasOwnProperty.call(o,i)&&ee(o[i])?o[i]:Object.create(null),c=_r(u,a,Object.create(null),r+1);Object.keys(c).length===0?delete o[i]:o[i]=c}else s?o[i]=l:delete o[i]}return o}function gn(e){if(typeof e!="string")return!1;let n=e.replace(/"(?:\\.|[^"\\])*"/g,'""').match(/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g);return n?n.some(r=>{let o=Number(r);return!Number.isFinite(o)||JSON.stringify(o)!==r}):!1}function ee(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var vs=M(()=>{"use strict";A()});function se(e){let t=C(e);return`typeof(${t}), CASE WHEN typeof(${t}) = 'text' THEN CAST(${t} AS BLOB) ELSE ${t} END`}function pu(e,t,n){if(!t)throw new Error(`SQLite text encoding is required for ${n}`);try{return{value:ge(t).decode(e)}}catch{return{value:"",rawTextBytes:e}}}function K(e,t,n,r={}){if(typeof e!="string"||!du.has(e))throw new Error(`SQLite returned an invalid storage class for ${n}`);let o=e;if(o!=="text"&&r.rawTextBytes!==void 0)throw new Error(`SQLite returned raw TEXT bytes for non-TEXT ${n}`);if(o==="text"){if(t instanceof Uint8Array)return{storageClass:o,...pu(t,r.textEncoding,n)};if(typeof t!="string")throw new Error(`SQLite returned an invalid text value for ${n}`);if(r.rawTextBytes!==void 0&&!(r.rawTextBytes instanceof Uint8Array))throw new Error(`SQLite returned invalid raw TEXT bytes for ${n}`);return{storageClass:o,value:t,...r.rawTextBytes instanceof Uint8Array?{rawTextBytes:r.rawTextBytes}:{}}}if(!(o==="null"?t===null:o==="integer"?typeof t=="bigint"||typeof t=="number"&&Number.isInteger(t):o==="real"?typeof t=="number":t instanceof Uint8Array))throw new Error(`SQLite returned an invalid ${o} value for ${n}`);return{storageClass:o,value:t}}function Rt(e){if(!e||typeof e!="object")throw new Ct;K(e.storageClass,e.value,"cell history",{rawTextBytes:e.rawTextBytes})}function Nr(e,t){if(e.storageClass!==t.storageClass)return!1;if(e.storageClass==="text"){let o=e.rawTextBytes,i=t.rawTextBytes;if(o||i)return!o||!i?!1:o.length===i.length&&o.every((a,s)=>a===i[s])}let n=e.value,r=t.value;return e.storageClass==="integer"&&typeof n!=typeof r?typeof n=="number"&&Number.isSafeInteger(n)&&typeof r=="bigint"?BigInt(n)===r:typeof r=="number"&&Number.isSafeInteger(r)&&typeof n=="bigint"?n===BigInt(r):!1:n instanceof Uint8Array||r instanceof Uint8Array?!(n instanceof Uint8Array)||!(r instanceof Uint8Array)?!1:n.length===r.length&&n.every((o,i)=>o===r[i]):Object.is(n,r)}function hn(e,t=()=>"?"){switch(Rt(e),e.storageClass){case"null":return{sql:"NULL",params:[]};case"integer":return{sql:t(e.value),params:[e.value]};case"real":return{sql:"CAST(? AS REAL)",params:[e.value]};case"text":return{sql:e.rawTextBytes?"CAST(substr(?, 1) AS TEXT)":"CAST(? AS TEXT)",params:[e.rawTextBytes??e.value]};case"blob":return{sql:"?",params:[e.value]}}}function En(e,t,n=()=>"?"){Rt(t);let r=C(e);switch(t.storageClass){case"null":return{sql:`typeof(${r}) = 'null'`,params:[]};case"integer":{let o=n(t.value);return{sql:`typeof(${r}) = 'integer' AND ${r} IS ${o}`,params:[t.value]}}case"real":return{sql:`typeof(${r}) = 'real' AND ${r} IS CAST(? AS REAL)`,params:[t.value]};case"text":return{sql:`typeof(${r}) = 'text' AND CAST(${r} AS BLOB) = CAST(? AS BLOB)`,params:[t.rawTextBytes??t.value]};case"blob":return{sql:`typeof(${r}) = 'blob' AND ${r} IS ?`,params:[t.value]}}}var du,fu,mu,fe,Ct,Or=M(()=>{"use strict";A();Y();Ft();du=new Set(["null","integer","real","text","blob"]),fu="Cell changed outside SQLite Explorer history; undo/redo was not applied.",mu="This edit predates guarded cell history and cannot be replayed safely. Save or reload the database.",fe=class extends Error{code="SQLITE_EXPLORER_CELL_HISTORY_CONFLICT";constructor(t,n){let r=n.length===1?`${t}.${n[0]}`:`${n.length} cells in ${t}`;super(`${r}: ${fu}`),this.name="CellHistoryConflictError"}},Ct=class extends Error{code="SQLITE_EXPLORER_LEGACY_CELL_HISTORY";constructor(){super(mu),this.name="LegacyCellHistoryError"}}});function xt(e){if(!Array.isArray(e.storageClasses))throw new J;let t=new Set;return e.storageClasses.map(n=>{let r=typeof n?.column=="string"?Yt(n.column):void 0;if(!n||typeof n.column!="string"||r===void 0||t.has(r)||!Object.prototype.hasOwnProperty.call(e.row,n.column))throw new J;t.add(r);let o=e.row[n.column],i=n.storageClass==="text"&&o instanceof Uint8Array?o:void 0;return{column:n.column,state:K(n.storageClass,i?"":o,`row history column ${n.column}`,{rawTextBytes:i})}})}function Lr(e,t=()=>"?"){let n=xt(e).map(({column:r,state:o})=>En(r,o,t));return{sql:n.length>0?n.map(r=>`(${r.sql})`).join(" AND "):"1",params:n.flatMap(r=>r.params)}}function ks(e,t=()=>"?"){return xt(e).map(({column:n,state:r})=>({column:n,write:hn(r,t)}))}var gu,yu,_e,J,Ps=M(()=>{"use strict";A();Or();pt();gu="Row changed outside SQLite Explorer history; undo/redo was not applied.",yu="This row edit predates guarded row history and cannot be replayed safely. Save or reload the database.",_e=class extends Error{code="SQLITE_EXPLORER_ROW_HISTORY_CONFLICT";constructor(t){super(`${t}: ${gu}`),this.name="RowHistoryConflictError"}},J=class extends Error{code="SQLITE_EXPLORER_LEGACY_ROW_HISTORY";constructor(){super(yu),this.name="LegacyRowHistoryError"}}});function It(e){let t=new Set,n=[e],r=0;for(;n.length>0;){let o=n.pop();if(o!=null){if(typeof o=="boolean")r+=4;else if(typeof o=="number"||typeof o=="bigint")r+=8;else if(typeof o=="string")r+=o.length*2;else if(o instanceof Uint8Array)r+=o.byteLength;else if(typeof o=="object"){if(t.has(o))continue;if(t.add(o),r+=8,Array.isArray(o))for(let i of o)n.push(i);else for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r+=i.length*2,n.push(o[i]))}}}return r}var wn=M(()=>{"use strict";A();Pt()});function Ds(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||Number(n)<0)throw new Error(`SQLite returned an unsafe ${t} during delete undo preflight`);return Number(n)}function Bs(e,t){return[...e]}function Ms(e,t,n){return{sql:`SELECT COUNT(*), COALESCE(SUM(${t.map(o=>{let i=C(o);return`CASE typeof(${i}) WHEN 'text' THEN 2 * octet_length(${i}) WHEN 'blob' THEN octet_length(${i}) WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 0 END`}).join(" + ")||"0"}), 0) FROM ${L(e)} WHERE ${n.sql}`,params:n.params}}function Us(e){if(!e||e.length<2)throw new Error("SQLite omitted delete undo preflight metadata");return{rowCount:Ds(e[0],"row count"),valueBytes:Ds(e[1],"value byte count")}}function qs(e){if(!Number.isSafeInteger(e.maxSnapshotBytes)||e.maxSnapshotBytes<0)throw new Error("Delete undo snapshot budget must be a non-negative safe integer");if(e.rowCount!==e.rowIds.length)throw new Error(`Cannot delete from ${e.table}: one or more row identities no longer exist`);let n=[...new Set(e.insertableColumns)].reduce((a,s)=>a+s.length*2,0),r=e.rowIds.reduce((a,s)=>a+It(s),0),o=e.rowCount*e.insertableColumns.reduce((a,s)=>a+s.length*2+Eu,0),i=e.valueBytes+r+e.rowCount*(hu+n)+o;if(!Number.isSafeInteger(i)||i>e.maxSnapshotBytes){let a=e.operation??"Delete";throw new Error(`${a} undo snapshot exceeds the ${e.maxSnapshotBytes}-byte memory budget; ${a.toLowerCase()} fewer rows or increase sqliteExplorer.maxUndoMemory.`)}}var hu,Eu,Vs=M(()=>{"use strict";A();wn();Y();hu=32,Eu=48});function kr(e){return e.orderBy?.toLowerCase()==="rowid"&&e.columns?.[0]?.toLowerCase()==="rowid"&&!e.columns.slice(1).some(t=>t.toLowerCase()==="rowid")}function Pr(e,t){let n=(t.filters??[]).flatMap(l=>{let u=Ae(l.value);return u===void 0?[]:[[l.column,u]]}),r=Ae(t.globalFilter)??null,o=r===null?null:t.globalFilterColumns??t.columns??null,i=typeof t.orderBy=="string"&&t.orderBy!==""?t.orderBy:null,a=i!==null&&t.orderDir==="DESC"?"DESC":"ASC",s=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)?t.limit:null;return JSON.stringify([bn,e,i,a,s,n,r,o])}function Dr(e,t){if(!t||e.orderByColumns?.length)return;let n=t.kind==="rowid"?["rowid"]:t.columns.map(i=>i.identifier);if(n.length===0)return;let r=typeof e.orderBy=="string"&&e.orderBy!==""?e.orderBy:void 0;if(r===void 0)return{keyColumns:n,nullableSortKey:!1,direction:"ASC"};let o=e.orderDir==="DESC"?"DESC":"ASC";return kr(e)?{keyColumns:n,nullableSortKey:!1,direction:o}:n.includes(r)?{keyColumns:[r,...n.filter(i=>i!==r)],nullableSortKey:!1,direction:o}:{keyColumns:[r,...n],nullableSortKey:!0,direction:o}}function Fs(e,t){if(!(!e||t))return{orderByColumns:e.keyColumns,orderDir:e.direction}}function Su(e){return e===null?["null"]:Zt(e)}function bu(e){return Array.isArray(e)&&e.length===1&&e[0]==="null"?{value:null,storageClass:"null"}:{value:Ki(e),storageClass:e[0]}}function Tu(e,t){if(t.length===0)throw new Error("Keyset anchor requires at least one key value");let n={v:bn,t:e,k:t.map(Su)};return Sn+encodeURIComponent(JSON.stringify(n))}function Cu(e){if(e.length>vr)throw new Error(`Keyset anchor exceeds the ${vr}-byte limit`)}function Ru(e){if(typeof e!="string"||!e.startsWith(Sn))throw new Error("Invalid keyset anchor");Cu(e);let t;try{t=JSON.parse(decodeURIComponent(e.slice(Sn.length)))}catch{throw new Error("Invalid keyset anchor encoding")}if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==3||t.v!==bn||typeof t.t!="string"||!Array.isArray(t.k))throw new Error("Invalid keyset anchor payload");let n=t.k;if(n.length===0)throw new Error("Keyset anchor has no key values");let r,o;try{let a=n.map(bu);r=a.map(s=>s.value),o=a.map(s=>s.storageClass)}catch(a){throw new Error(`Invalid keyset anchor value: ${a instanceof Error?a.message:String(a)}`)}if(Sn+encodeURIComponent(JSON.stringify({v:bn,t:t.t,k:n}))!==e)throw new Error("Keyset anchor is not canonical");return{tag:t.t,values:r,valueClasses:o}}function Ws(e,t,n){let r=t.keyset;if(!r||typeof r!="object"||Array.isArray(r)||!wu.includes(r.mode))return;let o=Dr(t,n);if(!o)return;let i=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)&&t.limit>0?t.limit:void 0;if(i===void 0)return;if(r.mode==="first")return{...o,mode:"first",limit:i};if(r.mode==="last"){let l=r.lastPageRowCount??i;return typeof l!="number"||!Number.isSafeInteger(l)||l<1||l>i?void 0:{...o,mode:"last",limit:l}}if(r.anchor===void 0)return;let a=Ru(r.anchor);if(a.tag!==Pr(e,t)||a.values.length!==o.keyColumns.length)return;let s=o.nullableSortKey?1:0;if(a.values.some((l,u)=>l===null&&u>=s))throw new Error("Keyset anchor has NULL in an identity slot");return{...o,mode:r.mode,values:a.values,valueClasses:a.valueClasses,limit:i}}function $r(e,t,n){return e.length===1?`${e[0]} ${t} ${n[0]}`:`(${e.join(", ")}) ${t} (${n.join(", ")})`}function xu(e){let t=e.values,r=e.mode==="before"?e.direction==="ASC"?"DESC":"ASC":e.direction,o=(r==="ASC"?">":"<")+(e.mode==="atOrAfter"?"=":""),i=e.keyColumns.map(C),a=e.keyColumns.map((f,m)=>e.valueClasses?.[m]==="integer"?"CAST(? AS INTEGER)":"?");if(!e.nullableSortKey)return{sql:$r(i,o,a),params:t};let s=i[0],l=i.slice(1),u=t[0],c=t.slice(1);if(u===null){let f=$r(l,o,a.slice(1));return r==="ASC"?{sql:`((${s} IS NULL AND ${f}) OR ${s} IS NOT NULL)`,params:c}:{sql:`(${s} IS NULL AND ${f})`,params:c}}let d=$r(i,o,a);return r==="ASC"?{sql:d,params:t}:{sql:`(${d} OR ${s} IS NULL)`,params:t}}function js(e){let{plan:t}=e,n=t.mode==="before"||t.mode==="last",r=n?t.direction==="ASC"?"DESC":"ASC":t.direction,o=[...e.whereClauses],i=[...e.filterParams];if(t.mode!=="first"&&t.mode!=="last"){let u=xu(t);o.push(u.sql),i.push(...u.params)}let a=t.keyColumns.map(C),s=u=>a.map(c=>`${c} ${u}`).join(", "),l=`SELECT ${e.selectListSql} FROM ${e.escapedTable}`;return o.length>0&&(l+=` WHERE ${o.join(" AND ")}`),l+=` ORDER BY ${s(r)} LIMIT ${t.limit}`,n&&(l=`SELECT * FROM (${l}) ORDER BY ${s(t.direction)}`),{sql:l,params:i}}function Hs(e){if(e.rows.length===0)return;let t=e.key.keyColumns.map(i=>e.projectionColumns.indexOf(i));if(t.some(i=>i<0))return;let n=i=>{if(e.excludedRowIndices?.has(i))return;let a=e.rows[i],s=[];for(let u=0;u{"use strict";A();Y();Ir();Et();Sn="ksa:",bn=1,vr=128*1024,wu=["first","after","atOrAfter","before","last"]});function Iu(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<1)throw new Error("Table page limit must be a positive safe integer");return Math.min(e,1e5)}function Au(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new Error("Table page offset must be a non-negative safe integer");return e}function Ks(e,t=5e3){return{...e,limit:Iu(e.limit??t),offset:Au(e.offset??0)}}var zs=M(()=>{"use strict";A()});function Gs(e){if(!e||typeof e!="object")throw new Error("Cell read target is required");if(typeof e.table!="string"||e.table.length===0)throw new Error("Cell read table must be a non-empty string");if(typeof e.column!="string"||e.column.length===0)throw new Error("Cell read column must be a non-empty string")}function Ys(e,t){if(!Number.isSafeInteger(e)||e<0)throw new Error("Cell read byte offset must be a non-negative safe integer");if(!Number.isSafeInteger(t)||t<1||t>Xs)throw new Error(`Cell read chunk size must be an integer from 1 through ${Xs}`)}function ke(e){let t=String(e).toLowerCase().replace(/[_\s-]/g,"");if(t==="utf8")return"utf-8";if(t==="utf16le")return"utf-16le";if(t==="utf16be")return"utf-16be";throw new Error(`Unsupported SQLite text encoding: ${String(e)}`)}function Js(e,t,n){if(e.length!==1)throw new Error(e.length===0?`Cell ${n.table}.${n.column} no longer exists`:`Cell ${n.table}.${n.column} matched more than one row`);let r=e[0][0];if(typeof r!="string"||!_u.has(r))throw new Error(`SQLite returned an invalid storage class for ${n.table}.${n.column}`);let o=e[0][1],i=typeof o=="bigint"?Number(o):o;if(!Number.isSafeInteger(i)||Number(i)<0)throw new Error(`SQLite returned an unsafe byte length for ${n.table}.${n.column}`);return{storageClass:r,byteLength:Number(i),...r==="text"?{textEncoding:t}:{}}}function Ur(e,t){return Number.isFinite(e)&&Number(e)>=1?Math.floor(Number(e)):t}var Xs,Br,Mr,_u,Zs=M(()=>{"use strict";A();Y();Xs=1024*1024,Br=3e4,Mr=5*6e4,_u=new Set(["null","integer","real","text","blob"])});var Xe,Tn,Cn=M(()=>{"use strict";A();fn();Pt();Xe=be,Tn=ue});function Nu(e){let t=0;for(let n=0;n=55296&&r<=56319){let o=e.charCodeAt(n+1);o>=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Ye(e,t){if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);let n=typeof e=="string"?"text":e instanceof Uint8Array?"blob":void 0;if(!n)return;let r=typeof e=="string"?Nu(e):e instanceof Uint8Array?e.byteLength:0;if(r>t)throw new Fr(n,r,t)}function na(e){let t=e??ta;if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);return t}function Je(e,t){let n=na(t);for(let r of e)Ye(r,n);return n}function ra(e,t){let n=na(t);if(!e||e.storageClass!=="text"&&e.storageClass!=="blob"||!Number.isSafeInteger(e.byteLength)||e.byteLength<=n)throw new Error("Guarded oversized-cell replacement requires exact TEXT/BLOB metadata above the edit limit");return n}function Ou(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="CellEditPolicyError"||t.code!==qr||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"CellEditPolicyError",code:qr,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function Lu(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="OversizedCellReplacementRequiredError"||t.code!==Vr||typeof t.table!="string"||typeof t.column!="string"||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"OversizedCellReplacementRequiredError",code:Vr,table:t.table,column:t.column,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function oa(e){return Ou(e)??Lu(e)}var qr,Vr,ea,ta,Fr,Ge,Wr=M(()=>{"use strict";A();Cn();qr="SQLITE_EXPLORER_CELL_EDIT_VALUE_TOO_LARGE",Vr="SQLITE_EXPLORER_OVERSIZED_CELL_REPLACEMENT_REQUIRED",ea="Oversized cell metadata changed before the confirmed replacement was applied",ta=Xe,Fr=class extends Error{constructor(n,r,o,i=`New ${n.toUpperCase()} cell value is ${r} bytes and exceeds the ${o}-byte edit limit.`){super(i);this.storageClass=n;this.actualBytes=r;this.limitBytes=o}storageClass;actualBytes;limitBytes;name="CellEditPolicyError";code=qr},Ge=class extends Error{constructor(n,r,o,i,a,s=`Existing ${o.toUpperCase()} cell ${n}.${r} is ${i} bytes. Use the explicitly confirmed oversized-cell replacement path.`){super(s);this.table=n;this.column=r;this.storageClass=o;this.actualBytes=i;this.limitBytes=a}table;column;storageClass;actualBytes;limitBytes;name="OversizedCellReplacementRequiredError";code=Vr}});var fp,At,ia=M(()=>{"use strict";A();Cn();fp=1024*1024*1024,At=2145386496});function jr(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:$u}function Hr(e){return e.storage==="paged"&&!e.filtered&&e.authorityConfirmedRowIdTable&&e.pagedFileSizeBytes>e.exactCountMaxFileBytes}function la(e){let t=L(e);return`SELECT (SELECT CAST(min(rowid) AS TEXT) FROM ${t}), (SELECT CAST(max(rowid) AS TEXT) FROM ${t})`}function ca(e){return`SELECT COUNT(*) FROM (SELECT 1 FROM ${L(e)} LIMIT ?)`}function ua(e,t){if(!(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>Ze+1))return e<=Ze?{count:e,isExact:!0}:{count:Qr(t,e),isExact:!1}}function Qr(e,t=Ze+1){return(!Number.isSafeInteger(t)||t<0)&&(t=Ze+1),!Number.isSafeInteger(e)||eBigInt(Number.MAX_SAFE_INTEGER)))return Number(i)}var $u,Ze,aa,fa=M(()=>{"use strict";A();Y();$u=64*1024*1024,Ze=1e4,aa=`SELECT 1 FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? AND "type" IN ('table', 'shadow') AND "wr" = 1 LIMIT 1`});var ma=M(()=>{"use strict";A()});var pa=M(()=>{"use strict";A()});var Ip,Kr,zr,Xr,ga=M(()=>{"use strict";A();pa();wn();Wr();Ip=64*1024*1024,Kr=1e5,zr=256,Xr=2e6});var lf={};function Du(e){if(!e||typeof e!="string")throw new Error("Invalid SQL type: Type must be a non-empty string");if(/['";\-\/\*]/.test(e))throw new Error(`Invalid SQL type: "${e}" contains potentially unsafe characters`);if(!/^[a-zA-Z0-9_\s]+(?:\([0-9\s,]+\)[a-zA-Z0-9_\s]*)?$/.test(e.trim()))throw new Error(`Invalid SQL type: "${e}" does not match allowed format`)}function Bu(e){let t=String(e);return t.toLowerCase()==="null"?"NULL":/^-?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(t)?t:`'${t.replace(/'/g,"''")}'`}function V(e){return wa++,C(`${e}_${wa}`)}function nt(e){let t=`/*sqlite_explorer_boundary_${crypto.randomUUID().replace(/-/g,"")}*/`,n=h.prepare(`${e} +${t}`);if(!n.getSQL().trimEnd().endsWith(t))throw n.free(),new Error("Exactly one SQL statement is required");return n}function x(e){nt(e).free();let n=h.prepare(e);try{n.run()}finally{n.free()}}function P(e){return e?.map(t=>{if(Oa(t))return Mu(t);if(typeof t!="bigint")return t;let n=Number(t);return Number.isSafeInteger(n)?n:t.toString()})}function Oa(e){return typeof e=="string"&&e.includes("\0")}function ne(e){return typeof e=="bigint"&&!Number.isSafeInteger(Number(e))?"CAST(? AS INTEGER)":Oa(e)?"CAST(? AS TEXT)":"?"}function Mu(e){let t=ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]);if(t==="utf-8")return new TextEncoder().encode(e);let n=t==="utf-16le",r=new Uint8Array(e.length*2);for(let o=0;o>>8,r[o*2+1]=n?i>>>8:i&255}return r}function ot(e){nt(e).free()}function rt(e,t){if(t!==void 0&&!(typeof SharedArrayBuffer=="function"&&t instanceof Int32Array&&t.length>0&&t.buffer instanceof SharedArrayBuffer))throw new Error("Invalid query cancellation flag");let n=()=>t!==void 0&&Atomics.load(t,0)!==0,r=()=>{let a=new Error("Query execution cancelled");throw a.name="AbortError",a};n()&&r();let o=Date.now()+Jr,i;h.progress_handler(vu,()=>n()?(i="cancelled",!0):Date.now(){let n=nt(e),r=n.getColumnNames();n.free();let o=mt(e,r.length),i=nt(o.sql),a=[];try{for(;i.step();)a.push(i.get(null,{useBigInt:!0}));let{rows:s,exactIntegerTexts:l}=Qe(a,o.valueColumnCount);return{headers:r,rows:s,exactIntegerTexts:l}}finally{i.free()}},t)}function La(e,t){if(t!=null)return t;let n=e??[];return n[0]==="rowid"?n.slice(1):n}function W(e,t){try{x(`ROLLBACK TO ${e}`),x(`RELEASE ${e}`)}catch(n){console.warn(`Failed to rollback savepoint (${t}):`,Te(n))}}function Uu(e){for(Pe.add(e);Pe.size>64;)Pe.delete(Pe.values().next().value)}function $a(e){x(`ROLLBACK TO ${e}`),x(`RELEASE ${e}`)}function Ln(e){let t=tt;if(!t||e!==void 0&&t.sessionId!==e)return!1;tt=null,Uu(t.sessionId),t.expiryTimer!==void 0&&clearTimeout(t.expiryTimer);try{x(`RELEASE ${t.savepointName}`)}catch(n){try{$a(t.savepointName)}catch(r){let o=[n,r];try{h?.close()}catch(i){o.push(i)}finally{h=null}throw new AggregateError(o,"Cell read snapshot cleanup failed; the owning web database was closed")}}return!0}function va(e){e.expiryTimer!==void 0&&clearTimeout(e.expiryTimer),e.expiresAt=Math.min(e.absoluteExpiresAt,e.lastAccessAt+co),e.expiryTimer=setTimeout(()=>{try{Ln(e.sessionId)}catch(t){console.error("[Worker] Failed to expire cell read session:",Te(t))}},Math.max(1,e.expiresAt-Date.now()))}async function ka(e){Gs(e);let t=await le(e.table),n=Q(e.rowId,t);return{table:e.table,column:e.column,predicateSql:n.sql,predicateParams:n.params}}function qu(e){let t=C(e.column);return{sql:`SELECT typeof(${t}), CASE WHEN ${t} IS NULL THEN 0 ELSE length(CAST(${t} AS BLOB)) END FROM ${L(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function Vu(e){return{sql:`SELECT substr(CAST(${C(e.column)} AS BLOB), ? + 1, ?) FROM ${L(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function Be(){return ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0])}function Pa(e,t){let n=qu(t),r=h.exec(n.sql,P(n.params),{useBigInt:!0});return Js(r[0]?.values??[],Be(),e)}async function _n(e){if(!h)throw new Error("No database initialized");let t=await ka(e);return Pa(e,t)}async function Fu(e){if(!h)throw new Error("No database initialized");if(tt)throw new Error("At most one web cell read session may be open");let t=await ka(e),n=V("sp_cell_read");x(`SAVEPOINT ${n}`);try{let r=Pa(e,t),o=Date.now(),i={sessionId:crypto.randomUUID(),target:e,sqlTarget:t,metadata:r,savepointName:n,lastAccessAt:o,absoluteExpiresAt:o+Na,expiresAt:o+co,expiryTimer:void 0};return tt=i,va(i),{sessionId:i.sessionId,metadata:r,expiresAt:i.expiresAt}}catch(r){try{$a(n)}catch(o){let i=[r,o];try{h?.close()}catch(a){i.push(a)}finally{h=null}throw new AggregateError(i,"Cell read session open failed; the owning web database was closed")}throw r}}async function Wu(e,t,n){Ys(t,n);let r=tt;if(!r||r.sessionId!==e)throw new Error(Pe.has(e)?`Cell read session ${e} is closed or expired`:`Unknown cell read session: ${String(e)}`);if(Date.now()>=r.expiresAt)throw Ln(e),new Error(`Cell read session ${e} is closed or expired`);let o=Vu(r.sqlTarget),a=h.exec(o.sql,P([t,n,...o.params]))[0]?.values??[];if(a.length!==1)throw new Error(a.length===0?`Cell ${r.target.table}.${r.target.column} no longer exists in its snapshot`:`Cell ${r.target.table}.${r.target.column} matched more than one row`);let s=a[0][0],l=s===null?new Uint8Array(0):s;if(!(l instanceof Uint8Array))throw new Error(`SQLite returned a non-BLOB chunk for ${r.target.table}.${r.target.column}`);return r.lastAccessAt=Date.now(),va(r),{byteOffset:t,bytes:l.slice(),done:t+l.byteLength>=r.metadata.byteLength}}async function ju(e){if(typeof e!="string"||e.length===0)throw new Error("Cell read session id is required");if(!Ln(e)&&!Pe.has(e))throw new Error(`Unknown cell read session: ${e}`)}function Hu(e){if(tt&&!["readCellChunk","closeCellReadSession","initializeDatabase"].includes(e))throw new Error("A cell read snapshot is active; close it before another database operation")}function Qu(e){if(e===void 0)return At;if(!Number.isSafeInteger(e)||e<1)throw new Error("pagedExportMaxBytes must be a positive safe integer");if(e>At)throw new Error(`pagedExportMaxBytes must not exceed ${At} bytes`);return e}function Te(e){let t="Unknown error";try{t=e&&typeof e=="object"&&typeof e.message=="string"&&e.message?e.message:String(e)}catch{}return t||(t="Unknown error"),t.length<=ya?t:t.slice(0,ya)+`... [truncated from ${t.length} characters]`}async function Ku(e,t){if(Ln(),h&&(h.close(),h=null),Jr=Number.isFinite(t.queryTimeout)&&t.queryTimeout>0?t.queryTimeout:Ia,ae=t.readOnlyMode===!0,Rn=null,Nt="memory",_t=0,In=Qu(t.pagedExportMaxBytes),_a=jr(t.pagedExactCountMaxFileBytes),co=Ur(t.cellReadSessionIdleTimeoutMs,Br),Na=Ur(t.cellReadSessionAbsoluteTimeoutMs,Mr),Pe.clear(),{SQL:Ea,db:h}=await B(t),Aa=Ea.queryPlanReaderActive===!0,h.run("PRAGMA foreign_keys = ON"),!ae){let n=Xu();n&&(ae=!0,Rn=n)}return ae&&(typeof h.enforceReadOnly=="function"?h.enforceReadOnly():h.run("PRAGMA query_only = ON")),{operations:{},isReadOnly:ae,storage:Nt,...Rn?{readOnlyReason:Rn}:{}}}function Sa(e){return e?.errno===zu||/read[\s-]?only/i.test(Te(e))?"This database cannot be written by this process, so it is open read-only (SQLite: attempt to write a readonly database).":null}function Xu(){let e=Number(h.exec("PRAGMA user_version")[0]?.values?.[0]?.[0])|0;try{h.run("BEGIN")}catch(n){return Sa(n)}let t=null;try{h.run(`PRAGMA user_version = ${e}`)}catch(n){t=Sa(n)}finally{h.run("ROLLBACK")}return t}async function Gu(e,t=[],n){if(!h)throw new Error("No database initialized");if(ae)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");try{return rt(()=>h.exec(e,t),n).map(o=>({headers:o.columns,rows:o.values}))}catch(r){throw r}}async function Yu(e,t="[]",n){if(!h)throw new Error("No database initialized");if(typeof e!="string"||typeof t!="string")throw new TypeError("SQL and parameter JSON must be strings");let r=gs(e),o=Es(t);if(o.length!==r.parameterCount)throw new Error(`Expected ${r.parameterCount} positional parameters.`);let i=`query_columns_${crypto.randomUUID().replace(/-/g,"")}`,a=Number(h.exec("PRAGMA query_only")[0]?.values[0]?.[0])===1,s=!1,l;try{a&&x("PRAGMA query_only = OFF"),l=rt(()=>{x(`CREATE TEMP VIEW "${i}" AS ${r.metadataSql}`),s=!0;let u=(h.exec("SELECT substr(name, 1, 4097) FROM pragma.pragma_table_info(?, 'temp') ORDER BY cid LIMIT ?",[i,mn+1])[0]?.values??[]).map(c=>String(c[0]));if(!u.length||u.length>mn)throw new Error("Queries support 1 to 128 result columns.");if(u.some(c=>c.length>4096))throw new Error("Result column labels must be at most 4096 characters.");return u},n)}finally{try{s&&(a&&x("PRAGMA query_only = OFF"),x(`DROP VIEW temp."${i}"`))}finally{if(a)try{x("PRAGMA query_only = ON")}catch(u){let c=h;throw h=null,c.close(),u}}}return rt(()=>{let u=ws(r.sql,l.length),c=nt(u.sql);try{c.bind(o);let d=[];for(;d.length<=Ie&&c.step();)d.push(c.get(null,{useBigInt:!0}));return Ss(l,d,u.valueColumnCount)}finally{c.free()}},n)}function Ju(e){if(e==null)return 5e3;let t=Number(e);return Number.isFinite(t)?Math.min(5e4,Math.max(1,Math.trunc(t))):5e3}function Zu(e){if(e==null)return 1/0;let t=Number(e);return Number.isFinite(t)?Math.max(1,Math.trunc(t)):1/0}function ed(e){if(e==null)return[];if(!Array.isArray(e))throw new Error("Console parameters must be a JSON array.");if(e.length>ba)throw new Error(`Use at most ${ba} positional parameters.`);for(let t of e)if(t!==null){if(typeof t=="string"){if(t.includes("\0"))throw new Error("Console parameters must not contain NUL bytes; SQLite would bind the text truncated at the first one.");continue}if(!(typeof t=="number"&&Number.isFinite(t)))throw new Error("Console parameters must be null, string, or finite number values.")}return e}function Da(e,t){try{e.bind(t)}catch(n){throw new Error(`cannot bind ${t.length} positional parameter${t.length===1?"":"s"}: `+Te(n))}}function Ua(e){let t=0;for(;;){let n=t;for(;tIe}}function id(e,t){let n=ys(e,t),r=h.prepare(n.sql);try{if(r.bind(n.params),!r.step())throw new Error(Ma);return Va(hs(r.get()[0]).rows)}finally{r.free()}}function sd(e,t){if(rd.test(Ua(e)))throw new Error("PRAGMA statements have no query plan (and some pragmas take effect while being compiled, so they are not even prepared here). Use Run.");let n=nt(`EXPLAIN QUERY PLAN ${e}`);try{t.length>0&&Da(n,t);let r=[];for(;r.length<=Ie&&n.step();){let o=n.get();if(o.length!==Ba.length||typeof o[3]!="string")throw new Error(Ma);if(new TextEncoder().encode(o[3]).byteLength>nd)throw new Error("Query plan detail exceeds the 65,536-byte limit.");r.push(o)}return Va(r)}finally{n.free()}}function ad(e,t){if(typeof e!="string"||e.trim()==="")throw new Error("Enter one SQL statement to explain.");if(new TextEncoder().encode(e).byteLength>td)throw new Error("Query plan SQL exceeds 262,144 UTF-8 bytes.");let n=Ee(e);for(let r of n.matchAll(qa))if(r[0]===";")throw new Error("Exactly one SQL statement is required");return Aa&&od(n)?id(n,t):sd(n,t)}async function ld(e,t={},n){if(!h)throw new Error("No database initialized");if(ae)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");if(typeof e=="string"&&e.includes("\0"))throw new Error("SQL contains a NUL byte; SQLite stops compiling at the first NUL, so the rest of the script would be silently skipped");let r=ed(t.params),o=Ju(t.maxRows),i=Zu(t.maxStatements),a=Date.now(),s=h.exec("SELECT total_changes()")[0].values[0][0],l=h.exec("PRAGMA schema_version")[0].values[0][0],u=()=>{let E=h.exec("SELECT total_changes()")[0].values[0][0],y=h.exec("PRAGMA schema_version")[0].values[0][0];return{mutated:E-s>0||y!==l,changes:E-s,durationMs:Date.now()-a}},c=()=>{try{return u()}catch{return{mutated:!0,changes:0,durationMs:Date.now()-a}}};if(t.explain===!0)try{return{results:[rt(()=>ad(e,r),n)],explain:!0,statementsSkipped:!1,...u()}}catch(E){return{results:[],error:Te(E),explain:!0,multiStatement:!1,statementsSkipped:!1,...c()}}let d=0,f=!1,m;try{m=rt(()=>{let E=[],y=h.iterateStatements(e),g=!1;for(;;){if(d>=i){g=!0;break}d++;let S=y.next();if(S.done)break;let w=S.value;try{r.length>0&&Da(w,r);let R=w.getColumnNames(),I=!1,T=!1;if(R.length===0&&(T=w.step(),I=!0,T&&(R=w.getColumnNames())),R.length===0){if(!I||T)for(;w.step(););}else{let _=[],$=!1;for(I||(T=w.step());T;)_.length1,statementsSkipped:f,...g}}return{results:m,statementsSkipped:f,...u()}}async function cd(e){if(!h)throw new Error("No database initialized");let t=Nt==="paged"&&!ae;if(Nt==="paged"&&ae)throw new Error("paged databases are read-only snapshots; export() is only available on openPagedWritable instances");let n=()=>new Error(`Cannot download this page-on-demand database: the merged image would exceed the ${In}-byte browser memory limit. Saving materializes the complete database in memory; use the desktop extension or reduce the database size.`);if(t&&_t>In)throw n();let r;try{r=h.export()}catch(o){let i=Te(o);throw t&&/transaction is open|while a transaction/i.test(i)?new Error("Cannot save while a database transaction is open; retry after the edit completes.",{cause:o}):o}if(t&&r.byteLength>In)throw n();return r}async function ud(e,t,n,r,o={}){if(!h)throw new Error("No database initialized");let i=e?.table;if(!i)throw new Error("No table specified");let{format:a="csv",header:s=!0,includeTableName:l=!0,rowIds:u=null,maxExportBytes:c}=o;if(!["csv","json","sql","excel"].includes(a))throw new Error(`Unsupported export format: ${a}`);let d=Number.isSafeInteger(c)&&c>0?Math.min(c,Pu):ao,f=[{sql:"",params:[]}];if(u&&u.length>0){let O=await le(i);if(u.some(ie)&&!u.every(ie))throw new Error("Cannot mix rowid and primary-key row identities");let D=new Set,p=[];for(let b of u){let N=O.kind==="rowid"?H(b):b,k=String(N);D.has(k)||(D.add(k),p.push(N))}f=ze(p,O)}let m=t&&t.length>0?t:dd(i);if(m.length>An)throw new Error(`Cannot export more than ${An} columns`);let E=a!=="csv"&&a!=="excel",y=m.map((O,D)=>{let p=C(O),b=`typeof(${p})`,N=`octet_length(${p})`;return`CASE ${b} WHEN 'null' THEN 'n:0:' WHEN 'integer' THEN 'i:0:' || CAST(${p} AS TEXT) WHEN 'real' THEN 'r:0:' || printf('%!.17g', ${p}) WHEN 'text' THEN 't:' || CAST(${N} AS TEXT) || ':' || hex(CAST(${p} AS BLOB)) WHEN 'blob' THEN 'b:' || CAST(${N} AS TEXT) || ':' || `+(E?`hex(${p}) `:"'' ")+`END AS ${C(`__export_cell_${D}`)}`}).join(", "),g=V("sp_export_rows");x(`SAVEPOINT ${g}`);let S=[];try{let O=1024;for(let D of f){let p=D.sql?` WHERE ${D.sql}`:"";if(O+=gd(i,m,p,D.params,a,d),!Number.isSafeInteger(O)||O>d)throw uo(d)}for(let D of f){let p=D.sql?` WHERE ${D.sql}`:"",b=h.exec(`SELECT ${y} FROM ${L(i)}${p}`,D.params);b.length>0&&S.push(...b[0].values)}x(`RELEASE ${g}`)}catch(O){throw W(g,"exportTable"),O}let w=m,R=ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),I=S.map((O,D)=>{if(O.length!==m.length)throw new Error(`SQLite returned ${O.length} packed export cells for row ${D}; expected ${m.length}`);return m.map((p,b)=>md(i,p,O[b],E,R))}),T=new eo(d),_="text/plain",$=`${i}.${a}`;switch(a){case"csv":Ta(w,I,s,T),_="text/csv";break;case"json":yd(w,I,T),_="application/json";break;case"sql":hd(i,w,I,l,T),_="text/sql";break;case"excel":Ta(w,I,s,T),_="text/csv",$=`${i}.csv`;break}return{contentChunks:T.finish(),filename:$,mimeType:_}}function uo(e){if(e===ao)return new Error(`Web demo exports are limited to ${ku} because the worker RPC cannot stream downloads; use the desktop extension for larger exports.`);let t=e/(1024*1024);return new Error(`Export exceeds the ${t} MiB (${e} bytes) limit; the worker assembles the whole file in memory, so larger exports need the native engine.`)}function dd(e){let t=h.prepare(`SELECT * FROM ${L(e)} LIMIT 0`);try{return t.getColumnNames()}finally{t.free()}}function fd(e,t,n){if(e.length!==t*2||/[^0-9a-f]/i.test(e))throw new Error(`SQLite returned invalid packed bytes for ${n}`);let r=new Uint8Array(t);for(let o=0;o1;){let n=[];for(let r=0;r{let f=C(d),m=`length(${f})`,E=o==="csv"||o==="excel"?"64":o==="json"?`((${m} + 2) / 3) * 4 + 64`:`${m} * 2 + 64`;return`CASE typeof(${f}) WHEN 'text' THEN length(CAST(${f} AS BLOB)) * 6 + 64 WHEN 'blob' THEN ${E} ELSE 64 END`})),l=h.exec(`SELECT COUNT(*), COALESCE(SUM(${a}), 0) FROM ${L(e)}${n}`,r)[0]?.values?.[0]??[0,0],u=Number(l[0]),c=Number(l[1])+u*128;if(!Number.isSafeInteger(c)||c<0)throw uo(i);return c}function Zr(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Ta(e,t,n,r){let o=!1,i=a=>{o&&r.append(` +`),r.append(a.join(",")),o=!0};n&&i(e.map(a=>yr({storageClass:"text",value:a})));for(let a of t)i(a.map(yr))}function yd(e,t,n){n.append("[");for(let r=0;r{l>0&&n.append(`, `),n.append(` ${JSON.stringify(s)}: ${Oi(i[s])}`)}),n.append(` }`)}n.append(t.length===0?"]":` -]`)}function yd(e,t,n,r,o){let i=r?C(e):'"table_name"',a=t.map(C).join(", ");n.forEach((s,l)=>{let u=s.map(Li).join(", ");l>0&&o.append(` -`),o.append(`INSERT INTO ${i} (${a}) VALUES (${u});`)})}async function Fa(e){let t=h.exec(`SELECT "type", "wr" FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? LIMIT 1`,[e]);if((t[0]?.values.length??0)===0)return;let n=br(t[0].values[0][0],t[0].values[0][1]);if(!n)return;if(n==="rowid")return{kind:"rowid"};let r=Tr(await po(e));if(r.length===0)throw new Error(`WITHOUT ROWID table ${e} has no declared primary key`);return{kind:"primaryKey",columns:r}}async function le(e){let t=await Fa(e);if(!t)throw new Error(`Table not found: ${e}`);if(t.kind==="rowid"&&(h.exec(ft,[e,e])[0]?.values.length??0)!==1)throw new Error(`Table ${e} is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity`);return t}function to(e){return new Error(`An UPDATE trigger changed or removed the primary-key identity in ${e}; the edit was rolled back because SQLite Explorer cannot safely identify the resulting row.`)}function $n(e,t,n,r){let i=h.exec(`SELECT ${bt(t)} FROM ${L(e)} WHERE ${n.sql} LIMIT 2`,P(n.params),{useBigInt:!0})[0]?.values??[];if(i.length===0)throw r??new Error(`Updated row in ${e} no longer exists`);if(i.length!==1)throw new Error(`Primary-key identity for ${e} matched more than one row`);return Tt(t,i[0],ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot resolve updated identity in ${e}`)}function fo(e){let t=h.exec(ki,[e]);return Di(t[0]?.values??[],e)}function hd(e,t,n=!0){let r=[...new Set(t)];if(r.length===0)throw new Error("UPDATE trigger probe requires at least one column");let o=r.map(a=>{let s=C(a);return`${s} = ${s}`}),i=n?"rowid = ?":"0";return`EXPLAIN UPDATE ${L(e)} SET ${o.join(", ")} WHERE ${i}`}function Ed(e,t){return`EXPLAIN ${t.length===0?`INSERT INTO ${L(e)} DEFAULT VALUES`:`INSERT INTO ${L(e)} (${t.map(C).join(", ")}) VALUES (${t.map(()=>"NULL").join(", ")})`}`}function wd(e){return`EXPLAIN DELETE FROM ${L(e)} WHERE 0`}function Ot(e,t,n=!0){let r=h.exec(Fi,P([e]),{useBigInt:!0}),o=Wi(r[0]?.values??[],e),i=h.exec(hd(e,t,n),P(n?[0]:[]),{useBigInt:!0});ji(e,o,i[0]?.values??[],n?"rowid":"primary-key")}function De(e,t,n=[]){let r=e==="INSERT"?Ed(t,n):wd(t),o=h.exec(r,[],{useBigInt:!0});Hi(e,t,o[0]?.values??[])}function mo(e,t,n,r,o){let i=t!==void 0&&r!==void 0&&He(t,r),a=i?C(t):"rowid",s=i?o:n,u=h.exec(`SELECT CAST(rowid AS TEXT) FROM ${L(e)} WHERE ${a} = ? LIMIT 2`,P([s??null]),{useBigInt:!0})[0]?.values??[];if(u.length===0)throw yt(e);if(u.length!==1)throw new Error(`Rowid identity for ${e} matched more than one row`);return H(u[0][0])}function no(e,t){let n=typeof t=="string"?t:JSON.stringify(t),r=h.exec("SELECT json_patch(COALESCE(?, '{}'), ?)",P([e,n]))[0]?.values?.[0]?.[0];if(typeof r!="string")throw new Error("SQLite returned an invalid json_patch result");return r}function Sd(e,t,n,r,o){let i=Be(),a=new Map;for(let l of n){let u=H(l.rowId),c=a.get(u)??[];c.push({...l,rowId:u}),a.set(u,c)}let s=[];for(let[l,u]of a){let c=[...new Set(u.map(y=>y.column))];if(c.length!==u.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let d=h.exec(`SELECT ${c.map(se).join(", ")} FROM ${L(e)} WHERE rowid = ? LIMIT 2`,P([l]),{useBigInt:!0})[0];if((d?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let f=u.map((y,g)=>{let S=K(d.values[0][g*2],d.values[0][g*2+1],`${e}.${y.column}`,{textEncoding:i}),w=S.value,R=yn(y.value,w,y.operation??"set"),I=R.operation==="json_patch"?no(w,R.value):R.value;return!o&&R.operation==="json_patch"&&Ye(I,r),{update:y,priorValue:w,priorState:S,prepared:R,storedValue:I}}),m=l;for(let y of f){let g=C(y.update.column),S=y.prepared.operation==="json_patch",w=S?typeof y.prepared.value=="string"?y.prepared.value:JSON.stringify(y.prepared.value):y.storedValue,R=S?`json_patch(COALESCE(${g}, '{}'), ?)`:ne(y.storedValue);if(h.run(`UPDATE ${L(e)} SET ${g} = ${R} WHERE rowid = ?`,P([w,m])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);m=mo(e,t,m,y.update.column,y.storedValue)}let E=h.exec(`SELECT ${c.map(se).join(", ")} FROM ${L(e)} WHERE rowid = ? LIMIT 2`,P([m]),{useBigInt:!0})[0];if((E?.values.length??0)!==1)throw yt(e);for(let[y,g]of f.entries())s.push({rowId:l,newRowId:m,columnName:g.update.column,priorValue:g.priorValue,newValue:g.prepared.value,priorState:g.priorState,postState:K(E.values[0][y*2],E.values[0][y*2+1],`${e}.${g.update.column}`,{textEncoding:i}),operation:g.prepared.operation})}return s}async function bd(e,t={}){if(!h)throw new Error("No database initialized");t=Ks(t,1e3);let{columns:n=null,offset:r,limit:o,orderBy:i=null,orderDir:a="ASC",filters:s=[],globalFilter:l="",globalFilterColumns:u=null}=t,c=n,d=i,f=null,m,E,y=!1;if(n?.[0]?.toLowerCase()==="rowid")if(E=await Fa(e),E?.kind==="primaryKey"){let v=E,q=n.slice(1),ce=v.columns.map(Re=>Re.identifier).filter(Re=>!q.includes(Re));c=[...q,...ce],m={identity:v,visibleColumns:q},kr({...t,columns:n})&&(d=null,f=v.columns.map(Re=>Re.identifier))}else E?.kind==="rowid"&&(y=(h.exec(ft,[e,e])[0]?.values.length??0)>0);let g=E?.kind==="primaryKey"||y?E:void 0,S=Dr(t,g),w=S?Pr(e,t):void 0,R=S?Ws(e,t,g):void 0,I=y&&c?.[0]?.toLowerCase()==="rowid"&&c.length>An,T=I?c.slice(1):c,_;T&&T.length>0?_=T.map((v,q)=>y&&q===0&&v.toLowerCase()==="rowid"?`${C(v)} AS ${C("rowid")}`:C(v)).join(", "):_="*";let $=[],O=[];if(s&&s.length>0)for(let v of s){let q=Ae(v.value);v.column&&q!==void 0&&($.push(`${C(v.column)} LIKE ? ESCAPE '\\'`),O.push(`%${lt(q)}%`))}let D=Ae(l);if(D!==void 0){let v=La(n,u);if(v.length>0){let q=v.map(ce=>`${C(ce)} LIKE ? ESCAPE '\\'`);$.push(`(${q.join(" OR ")})`);for(let ce=0;ce{if(R)return js({selectListSql:v,escapedTable:L(e),whereClauses:$,filterParams:p,plan:R});let q=`SELECT ${v} FROM ${L(e)}`;$.length>0&&(q+=` WHERE ${$.join(" AND ")}`);let ce=Fs(S,R),Re=ce?ce.orderByColumns:f??(d?[d]:[]);if(Re.length>0){let il=ce?ce.orderDir:a==="DESC"?"DESC":"ASC";q+=` ORDER BY ${Re.map(sl=>`${C(sl)} ${il}`).join(", ")}`}return q+=` LIMIT ${parseInt(o,10)} OFFSET ${parseInt(r,10)}`,{sql:q,params:p}},{sql:N,params:k}=b(_);O=k;let U=I?b(C("rowid")):void 0,j=h.prepare(N,O),F=j.getColumnNames(),re=I?["rowid",...F]:F;j.free();let Lt=Number.isSafeInteger(t.maxInlineCellBytes)&&t.maxInlineCellBytes>0?t.maxInlineCellBytes:rn,Za=Number.isSafeInteger(t.maxPageResponseBytes)&&t.maxPageResponseBytes>0?t.maxPageResponseBytes:be,yo={limit:parseInt(o,10),maxInlineCellBytes:Math.min(rn,Lt),maxPageResponseBytes:Math.min(be,Za)},el=m?m.identity.columns.map(v=>{let q=re.indexOf(v.identifier);if(q<0)throw new Error(`Primary-key column missing from table fetch: ${v.identifier}`);return q}):[],ho=S?S.keyColumns.map(v=>re.indexOf(v)).filter(v=>v>=0):[],Eo=[...new Set([...el,...ho])],tl=I?Eo.filter(v=>v>0).map(v=>v-1):Eo,wo=F.length*2+1<=An?F.map((v,q)=>q):tl,me=on(N,F.length,yo,wo),kn=mt(me.sql,me.primaryTransportColumnCount),nl=h.exec(kn.sql,O,{useBigInt:!0}),$t=rs(nl[0]?.values??[],void 0,me),Me=(U?h.exec(U.sql,U.params,{useBigInt:!0}):void 0)?.[0]?.values;if(Me&&Me.length!==$t.length)throw new Error("Synthetic rowid companion row count does not match the value page");let Ce=Me?Me.map((v,q)=>{if(v.length!==1)throw new Error(`Synthetic rowid companion row ${q} is not one value`);return[v[0],...$t[q]]}):$t,So=[],Pn=re[0]?.toLowerCase()==="rowid",Dn=Pn&&Bi(Ce,0),bo=kn.valueColumnCount===void 0&&Pn;if(!y&&(bo||Dn)&&Ce.length>0&&(y=(h.exec(ft,[e,e])[0]?.values.length??0)>0),y&&bo)for(let v of Mi(e,re,Ce.map(q=>q[0]))){let q=h.exec(v.sql,v.params,{useBigInt:!0});So.push({query:v,rows:q[0]?.values??[]})}let To=Ui(Ce,So),Bn=Qe($t,kn.valueColumnCount,I?void 0:To,!I&&y&&Dn?0:void 0),Co=dn(Bn.rows,F.length,Bn.exactIntegerTexts,yo.maxPageResponseBytes),Ro=Me?os(Qe(Me,void 0,void 0,Dn?0:void 0).rows.map(v=>v[0]),Co,To):Co,Mn=is(Bn.rows,me),Ue=wo.length>0?ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]):void 0,Un=I?me.rawTextColumnIndices.map(v=>v+1):me.rawTextColumnIndices,rl=Ue?as({sourceRows:Ce,rawTextRows:Mn,rawTextColumnIndices:Un,textEncoding:Ue,contained:Ro}):Ro,{rows:qn,oversizedCells:it,exactIntegerTexts:Vn}=rl,pe=E?.kind==="rowid"&&Pn&&!y?us({rows:qn,oversizedCells:it,exactIntegerTexts:Vn,rowOffset:parseInt(r,10)}):void 0,Ne=m&&Ue?ms({identity:m.identity,sourceColumns:re,visibleColumnCount:m.visibleColumns.length,identityRows:Ce,rawTextBytes:Mn,rawTextColumnIndices:Un,rawTextValidationUnavailable:me.rawTextValidationUnavailable,textEncoding:Ue,rows:qn,oversizedCells:it,exactIntegerTexts:Vn,effectiveInlineCellBytes:me.effectiveInlineCellBytes,rowOffset:parseInt(r,10)}):void 0,ol=S&&Ue?ss({sourceRows:Ce,sourceColumnIndices:ho,rawTextRows:Mn,rawTextColumnIndices:Un,textEncoding:Ue,rawTextValidationUnavailable:me.rawTextValidationUnavailable}):void 0,vt=S&&w!==void 0?Hs({tag:w,key:S,projectionColumns:re,rows:Ce,oversizedCells:it,excludedRowIndices:ol}):void 0;return m&&Ne?{headers:["rowid",...m.visibleColumns],rows:Ne.rows,exactIntegerTexts:Ne.exactIntegerTexts,...Ne.oversizedCells?{oversizedCells:Ne.oversizedCells}:{},...Ne.readOnlyRowReasons?{readOnlyRowReasons:Ne.readOnlyRowReasons}:{},...vt?{keysetAnchors:vt}:{}}:{headers:re,rows:pe?.rows??qn,exactIntegerTexts:pe?pe.exactIntegerTexts:Vn,...(pe?pe.oversizedCells:it)?{oversizedCells:pe?pe.oversizedCells:it}:{},...pe?.readOnlyRowReasons?{readOnlyRowReasons:pe.readOnlyRowReasons}:{},...vt?{keysetAnchors:vt}:{}}}async function Td(e,t={}){if(!h)throw new Error("No database initialized");let{columns:n=[],filters:r=[],globalFilter:o="",globalFilterColumns:i=null}=t,a=`SELECT COUNT(*) FROM ${L(e)}`,s=[],l=[];if(r&&r.length>0)for(let f of r){let m=Ae(f.value);f.column&&m!==void 0&&(s.push(`${C(f.column)} LIKE ? ESCAPE '\\'`),l.push(`%${lt(m)}%`))}let u=Ae(o);if(u!==void 0){let f=La(n,i);if(f.length>0){let m=f.map(E=>`${C(E)} LIKE ? ESCAPE '\\'`);s.push(`(${m.join(" OR ")})`);for(let E=0;E0&&(a+=` WHERE ${s.join(" AND ")}`);let c={storage:Nt,filtered:s.length>0,authorityConfirmedRowIdTable:!0,pagedFileSizeBytes:_t,exactCountMaxFileBytes:_a};if(Hr(c)){let f=!1;try{if(f=(h.exec(ft,[e,e])[0]?.values.length??0)>0,Hr({...c,authorityConfirmedRowIdTable:f})){let E=h.exec(la(e)),y=da(E[0]?.values?.[0]);if(y!==void 0)return{count:y,isExact:!1}}}catch{}if(!f){let m=!1;try{m=(h.exec(aa,[e])[0]?.values.length??0)>0}catch{}if(m){try{let E=h.exec(ca(e),[Ze+1]),y=ua(E[0]?.values?.[0]?.[0],_t);if(y)return y}catch{}return{count:Qr(_t),isExact:!1}}}}let d=h.exec(a,l);return d.length===0||d[0].values.length===0?{count:0,isExact:!0}:{count:d[0].values[0][0],isExact:!0}}async function Cd(){if(!h)throw new Error("No database initialized");let e=h.exec(` +]`)}function hd(e,t,n,r,o){let i=r?C(e):'"table_name"',a=t.map(C).join(", ");n.forEach((s,l)=>{let u=s.map(Li).join(", ");l>0&&o.append(` +`),o.append(`INSERT INTO ${i} (${a}) VALUES (${u});`)})}async function Fa(e){let t=h.exec(`SELECT "type", "wr" FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? LIMIT 1`,[e]);if((t[0]?.values.length??0)===0)return;let n=br(t[0].values[0][0],t[0].values[0][1]);if(!n)return;if(n==="rowid")return{kind:"rowid"};let r=Tr(await po(e));if(r.length===0)throw new Error(`WITHOUT ROWID table ${e} has no declared primary key`);return{kind:"primaryKey",columns:r}}async function le(e){let t=await Fa(e);if(!t)throw new Error(`Table not found: ${e}`);if(t.kind==="rowid"&&(h.exec(ft,[e,e])[0]?.values.length??0)!==1)throw new Error(`Table ${e} is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity`);return t}function to(e){return new Error(`An UPDATE trigger changed or removed the primary-key identity in ${e}; the edit was rolled back because SQLite Explorer cannot safely identify the resulting row.`)}function $n(e,t,n,r){let i=h.exec(`SELECT ${bt(t)} FROM ${L(e)} WHERE ${n.sql} LIMIT 2`,P(n.params),{useBigInt:!0})[0]?.values??[];if(i.length===0)throw r??new Error(`Updated row in ${e} no longer exists`);if(i.length!==1)throw new Error(`Primary-key identity for ${e} matched more than one row`);return Tt(t,i[0],ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot resolve updated identity in ${e}`)}function fo(e){let t=h.exec(ki,[e]);return Di(t[0]?.values??[],e)}function Ed(e,t,n=!0){let r=[...new Set(t)];if(r.length===0)throw new Error("UPDATE trigger probe requires at least one column");let o=r.map(a=>{let s=C(a);return`${s} = ${s}`}),i=n?"rowid = ?":"0";return`EXPLAIN UPDATE ${L(e)} SET ${o.join(", ")} WHERE ${i}`}function wd(e,t){return`EXPLAIN ${t.length===0?`INSERT INTO ${L(e)} DEFAULT VALUES`:`INSERT INTO ${L(e)} (${t.map(C).join(", ")}) VALUES (${t.map(()=>"NULL").join(", ")})`}`}function Sd(e){return`EXPLAIN DELETE FROM ${L(e)} WHERE 0`}function Ot(e,t,n=!0){let r=h.exec(Fi,P([e]),{useBigInt:!0}),o=Wi(r[0]?.values??[],e),i=h.exec(Ed(e,t,n),P(n?[0]:[]),{useBigInt:!0});ji(e,o,i[0]?.values??[],n?"rowid":"primary-key")}function De(e,t,n=[]){let r=e==="INSERT"?wd(t,n):Sd(t),o=h.exec(r,[],{useBigInt:!0});Hi(e,t,o[0]?.values??[])}function mo(e,t,n,r,o){let i=t!==void 0&&r!==void 0&&He(t,r),a=i?C(t):"rowid",s=i?o:n,u=h.exec(`SELECT CAST(rowid AS TEXT) FROM ${L(e)} WHERE ${a} = ? LIMIT 2`,P([s??null]),{useBigInt:!0})[0]?.values??[];if(u.length===0)throw yt(e);if(u.length!==1)throw new Error(`Rowid identity for ${e} matched more than one row`);return H(u[0][0])}function no(e,t){let n=typeof t=="string"?t:JSON.stringify(t),r=h.exec("SELECT json_patch(COALESCE(?, '{}'), ?)",P([e,n]))[0]?.values?.[0]?.[0];if(typeof r!="string")throw new Error("SQLite returned an invalid json_patch result");return r}function bd(e,t,n,r,o){let i=Be(),a=new Map;for(let l of n){let u=H(l.rowId),c=a.get(u)??[];c.push({...l,rowId:u}),a.set(u,c)}let s=[];for(let[l,u]of a){let c=[...new Set(u.map(y=>y.column))];if(c.length!==u.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let d=h.exec(`SELECT ${c.map(se).join(", ")} FROM ${L(e)} WHERE rowid = ? LIMIT 2`,P([l]),{useBigInt:!0})[0];if((d?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let f=u.map((y,g)=>{let S=K(d.values[0][g*2],d.values[0][g*2+1],`${e}.${y.column}`,{textEncoding:i}),w=S.value,R=yn(y.value,w,y.operation??"set"),I=R.operation==="json_patch"?no(w,R.value):R.value;return!o&&R.operation==="json_patch"&&Ye(I,r),{update:y,priorValue:w,priorState:S,prepared:R,storedValue:I}}),m=l;for(let y of f){let g=C(y.update.column),S=y.prepared.operation==="json_patch",w=S?typeof y.prepared.value=="string"?y.prepared.value:JSON.stringify(y.prepared.value):y.storedValue,R=S?`json_patch(COALESCE(${g}, '{}'), ?)`:ne(y.storedValue);if(h.run(`UPDATE ${L(e)} SET ${g} = ${R} WHERE rowid = ?`,P([w,m])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);m=mo(e,t,m,y.update.column,y.storedValue)}let E=h.exec(`SELECT ${c.map(se).join(", ")} FROM ${L(e)} WHERE rowid = ? LIMIT 2`,P([m]),{useBigInt:!0})[0];if((E?.values.length??0)!==1)throw yt(e);for(let[y,g]of f.entries())s.push({rowId:l,newRowId:m,columnName:g.update.column,priorValue:g.priorValue,newValue:g.prepared.value,priorState:g.priorState,postState:K(E.values[0][y*2],E.values[0][y*2+1],`${e}.${g.update.column}`,{textEncoding:i}),operation:g.prepared.operation})}return s}async function Td(e,t={}){if(!h)throw new Error("No database initialized");t=Ks(t,1e3);let{columns:n=null,offset:r,limit:o,orderBy:i=null,orderDir:a="ASC",filters:s=[],globalFilter:l="",globalFilterColumns:u=null}=t,c=n,d=i,f=null,m,E,y=!1;if(n?.[0]?.toLowerCase()==="rowid")if(E=await Fa(e),E?.kind==="primaryKey"){let v=E,q=n.slice(1),ce=v.columns.map(Re=>Re.identifier).filter(Re=>!q.includes(Re));c=[...q,...ce],m={identity:v,visibleColumns:q},kr({...t,columns:n})&&(d=null,f=v.columns.map(Re=>Re.identifier))}else E?.kind==="rowid"&&(y=(h.exec(ft,[e,e])[0]?.values.length??0)>0);let g=E?.kind==="primaryKey"||y?E:void 0,S=Dr(t,g),w=S?Pr(e,t):void 0,R=S?Ws(e,t,g):void 0,I=y&&c?.[0]?.toLowerCase()==="rowid"&&c.length>An,T=I?c.slice(1):c,_;T&&T.length>0?_=T.map((v,q)=>y&&q===0&&v.toLowerCase()==="rowid"?`${C(v)} AS ${C("rowid")}`:C(v)).join(", "):_="*";let $=[],O=[];if(s&&s.length>0)for(let v of s){let q=Ae(v.value);v.column&&q!==void 0&&($.push(`${C(v.column)} LIKE ? ESCAPE '\\'`),O.push(`%${lt(q)}%`))}let D=Ae(l);if(D!==void 0){let v=La(n,u);if(v.length>0){let q=v.map(ce=>`${C(ce)} LIKE ? ESCAPE '\\'`);$.push(`(${q.join(" OR ")})`);for(let ce=0;ce{if(R)return js({selectListSql:v,escapedTable:L(e),whereClauses:$,filterParams:p,plan:R});let q=`SELECT ${v} FROM ${L(e)}`;$.length>0&&(q+=` WHERE ${$.join(" AND ")}`);let ce=Fs(S,R),Re=ce?ce.orderByColumns:f??(d?[d]:[]);if(Re.length>0){let il=ce?ce.orderDir:a==="DESC"?"DESC":"ASC";q+=` ORDER BY ${Re.map(sl=>`${C(sl)} ${il}`).join(", ")}`}return q+=` LIMIT ${parseInt(o,10)} OFFSET ${parseInt(r,10)}`,{sql:q,params:p}},{sql:N,params:k}=b(_);O=k;let U=I?b(C("rowid")):void 0,j=h.prepare(N,O),F=j.getColumnNames(),re=I?["rowid",...F]:F;j.free();let Lt=Number.isSafeInteger(t.maxInlineCellBytes)&&t.maxInlineCellBytes>0?t.maxInlineCellBytes:rn,Za=Number.isSafeInteger(t.maxPageResponseBytes)&&t.maxPageResponseBytes>0?t.maxPageResponseBytes:be,yo={limit:parseInt(o,10),maxInlineCellBytes:Math.min(rn,Lt),maxPageResponseBytes:Math.min(be,Za)},el=m?m.identity.columns.map(v=>{let q=re.indexOf(v.identifier);if(q<0)throw new Error(`Primary-key column missing from table fetch: ${v.identifier}`);return q}):[],ho=S?S.keyColumns.map(v=>re.indexOf(v)).filter(v=>v>=0):[],Eo=[...new Set([...el,...ho])],tl=I?Eo.filter(v=>v>0).map(v=>v-1):Eo,wo=F.length*2+1<=An?F.map((v,q)=>q):tl,me=on(N,F.length,yo,wo),kn=mt(me.sql,me.primaryTransportColumnCount),nl=h.exec(kn.sql,O,{useBigInt:!0}),$t=rs(nl[0]?.values??[],void 0,me),Me=(U?h.exec(U.sql,U.params,{useBigInt:!0}):void 0)?.[0]?.values;if(Me&&Me.length!==$t.length)throw new Error("Synthetic rowid companion row count does not match the value page");let Ce=Me?Me.map((v,q)=>{if(v.length!==1)throw new Error(`Synthetic rowid companion row ${q} is not one value`);return[v[0],...$t[q]]}):$t,So=[],Pn=re[0]?.toLowerCase()==="rowid",Dn=Pn&&Bi(Ce,0),bo=kn.valueColumnCount===void 0&&Pn;if(!y&&(bo||Dn)&&Ce.length>0&&(y=(h.exec(ft,[e,e])[0]?.values.length??0)>0),y&&bo)for(let v of Mi(e,re,Ce.map(q=>q[0]))){let q=h.exec(v.sql,v.params,{useBigInt:!0});So.push({query:v,rows:q[0]?.values??[]})}let To=Ui(Ce,So),Bn=Qe($t,kn.valueColumnCount,I?void 0:To,!I&&y&&Dn?0:void 0),Co=dn(Bn.rows,F.length,Bn.exactIntegerTexts,yo.maxPageResponseBytes),Ro=Me?os(Qe(Me,void 0,void 0,Dn?0:void 0).rows.map(v=>v[0]),Co,To):Co,Mn=is(Bn.rows,me),Ue=wo.length>0?ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]):void 0,Un=I?me.rawTextColumnIndices.map(v=>v+1):me.rawTextColumnIndices,rl=Ue?as({sourceRows:Ce,rawTextRows:Mn,rawTextColumnIndices:Un,textEncoding:Ue,contained:Ro}):Ro,{rows:qn,oversizedCells:it,exactIntegerTexts:Vn}=rl,pe=E?.kind==="rowid"&&Pn&&!y?us({rows:qn,oversizedCells:it,exactIntegerTexts:Vn,rowOffset:parseInt(r,10)}):void 0,Ne=m&&Ue?ms({identity:m.identity,sourceColumns:re,visibleColumnCount:m.visibleColumns.length,identityRows:Ce,rawTextBytes:Mn,rawTextColumnIndices:Un,rawTextValidationUnavailable:me.rawTextValidationUnavailable,textEncoding:Ue,rows:qn,oversizedCells:it,exactIntegerTexts:Vn,effectiveInlineCellBytes:me.effectiveInlineCellBytes,rowOffset:parseInt(r,10)}):void 0,ol=S&&Ue?ss({sourceRows:Ce,sourceColumnIndices:ho,rawTextRows:Mn,rawTextColumnIndices:Un,textEncoding:Ue,rawTextValidationUnavailable:me.rawTextValidationUnavailable}):void 0,vt=S&&w!==void 0?Hs({tag:w,key:S,projectionColumns:re,rows:Ce,oversizedCells:it,excludedRowIndices:ol}):void 0;return m&&Ne?{headers:["rowid",...m.visibleColumns],rows:Ne.rows,exactIntegerTexts:Ne.exactIntegerTexts,...Ne.oversizedCells?{oversizedCells:Ne.oversizedCells}:{},...Ne.readOnlyRowReasons?{readOnlyRowReasons:Ne.readOnlyRowReasons}:{},...vt?{keysetAnchors:vt}:{}}:{headers:re,rows:pe?.rows??qn,exactIntegerTexts:pe?pe.exactIntegerTexts:Vn,...(pe?pe.oversizedCells:it)?{oversizedCells:pe?pe.oversizedCells:it}:{},...pe?.readOnlyRowReasons?{readOnlyRowReasons:pe.readOnlyRowReasons}:{},...vt?{keysetAnchors:vt}:{}}}async function Cd(e,t={}){if(!h)throw new Error("No database initialized");let{columns:n=[],filters:r=[],globalFilter:o="",globalFilterColumns:i=null}=t,a=`SELECT COUNT(*) FROM ${L(e)}`,s=[],l=[];if(r&&r.length>0)for(let f of r){let m=Ae(f.value);f.column&&m!==void 0&&(s.push(`${C(f.column)} LIKE ? ESCAPE '\\'`),l.push(`%${lt(m)}%`))}let u=Ae(o);if(u!==void 0){let f=La(n,i);if(f.length>0){let m=f.map(E=>`${C(E)} LIKE ? ESCAPE '\\'`);s.push(`(${m.join(" OR ")})`);for(let E=0;E0&&(a+=` WHERE ${s.join(" AND ")}`);let c={storage:Nt,filtered:s.length>0,authorityConfirmedRowIdTable:!0,pagedFileSizeBytes:_t,exactCountMaxFileBytes:_a};if(Hr(c)){let f=!1;try{if(f=(h.exec(ft,[e,e])[0]?.values.length??0)>0,Hr({...c,authorityConfirmedRowIdTable:f})){let E=h.exec(la(e)),y=da(E[0]?.values?.[0]);if(y!==void 0)return{count:y,isExact:!1}}}catch{}if(!f){let m=!1;try{m=(h.exec(aa,[e])[0]?.values.length??0)>0}catch{}if(m){try{let E=h.exec(ca(e),[Ze+1]),y=ua(E[0]?.values?.[0]?.[0],_t);if(y)return y}catch{}return{count:Qr(_t),isExact:!1}}}}let d=h.exec(a,l);return d.length===0||d[0].values.length===0?{count:0,isExact:!0}:{count:d[0].values[0][0],isExact:!0}}async function Rd(){if(!h)throw new Error("No database initialized");let e=h.exec(` SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name @@ -65,6 +65,6 @@ ${t}`);if(!n.getSQL().trimEnd().endsWith(t))throw n.free(),new Error("Exactly on SELECT name, tbl_name FROM sqlite_master WHERE type = 'index' AND name NOT LIKE 'sqlite_%' ORDER BY name - `)[0]?.values||[]).map(l=>({identifier:l[0],parentTable:l[1]}));return{tables:r,views:i,indexes:s}}async function po(e){if(!h)throw new Error("No database initialized");let t=h.exec(Pi,[e]);return t.length===0?[]:t[0].values.filter(n=>Number(n[6]??0)!==1).map(n=>({ordinal:n[0],identifier:n[1],declaredType:n[2],isRequired:n[3],defaultExpression:n[4],primaryKeyPosition:n[5],isGenerated:Number(n[6]??0)===2||Number(n[6]??0)===3,isRowidAlias:Number(n[7]??0)===1}))}function Wa(){let e=n=>{let r=h.prepare(n),o=[];try{for(;r.step();)o.push(r.get());return o}finally{r.free()}},t=e("PRAGMA main.schema_version")[0]?.[0];if(!Number.isSafeInteger(t))throw new Error("Unable to read the destination database schema version.");return JSON.stringify([t,e("SELECT type, name, tbl_name, sql FROM temp.sqlite_schema ORDER BY type, name")])}async function Rd(e){if(!h)throw new Error("No database initialized");z(e,"Table name");let t=V("sp_import_preview");x(`SAVEPOINT ${t}`);try{let n=await po(e);if(!n.length)throw new Error(`Table not found: ${e}`);let r=Wa();return x(`RELEASE SAVEPOINT ${t}`),{columns:n,schemaVersion:r}}catch(n){throw W(t,"getImportTarget"),n}}function Nn(e){return(h.exec("SELECT name FROM pragma.pragma_table_xinfo(?) WHERE hidden = 0 ORDER BY cid",[e])[0]?.values??[]).map(n=>{if(typeof n[0]!="string")throw new Error(`SQLite returned invalid column metadata for ${e}`);return n[0]})}function xd(e,t,n,r){let o=Be(),i=Q(n,t),a=r.map(se),l=h.exec(`SELECT ${a.join(", ")||"1"} FROM ${L(e)} WHERE ${i.sql} LIMIT 2`,P(i.params),{useBigInt:!0})[0]?.values??[];if(l.length!==1)throw new _e(e);let u=r.map((c,d)=>K(l[0][d*2],l[0][d*2+1],`${e}.${c}`,{textEncoding:o}));return{rowId:n,row:Object.fromEntries(r.map((c,d)=>[c,u[d].rawTextBytes??u[d].value])),storageClasses:r.map((c,d)=>({column:c,storageClass:u[d].storageClass}))}}function Id(e,t,n,r,o){if(o===void 0)return;let i=Q(n,t),a=Bs(r,t.kind==="rowid"),s=Ms(e,a,i),l=h.exec(s.sql,P(s.params),{useBigInt:!0})[0]?.values?.[0],u=Us(l);qs({table:e,insertableColumns:r,includeSyntheticRowId:t.kind==="rowid",rowIds:[n],rowCount:u.rowCount,valueBytes:u.valueBytes,maxSnapshotBytes:o,operation:"Insert"})}function Ca(e,t,n,r){let o=Nn(e),i=Q(n,t);return oo(e,[n],o,[i]),Id(e,t,n,o,r),xd(e,t,n,o)}async function Ad(){if(!h)throw new Error("No database initialized");let e={},t=["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","encoding","auto_vacuum"];for(let n of t)try{let r=h.exec(`PRAGMA ${n}`);r.length>0&&r[0].values.length>0&&(e[n]=r[0].values[0][0])}catch{}return e}async function _d(e,t){if(!h)throw new Error("No database initialized");if(te("Pragma updates"),!["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","auto_vacuum"].includes(e))throw new Error(`Invalid or disallowed PRAGMA: ${e}`);let r;if(typeof t=="string"){if(!/^[a-zA-Z0-9_-]+$/.test(t))throw new Error("Invalid PRAGMA string value: contains disallowed characters");r=`PRAGMA ${e} = '${t}'`}else if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("Invalid PRAGMA numeric value: must be finite");r=`PRAGMA ${e} = ${t}`}else if(typeof t=="boolean")r=`PRAGMA ${e} = ${t?"ON":"OFF"}`;else throw new Error(`Invalid PRAGMA value type: ${typeof t}`);x(r)}async function Nd(e,t,n,r,o,i,a){let s=a===lo,l=!s&&i!==void 0,u=s?0:Je([r],i);if(ve(t),!h)throw new Error("No database initialized");if(te("Cell updates"),ie(t))return(await Ya(e,[{rowId:t,column:n,value:r,operation:"set"}],void 0,i,a))[0]?.newRowId??t;let c=H(t);if((await le(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let f=V("sp_update_rowid_cell");x(`SAVEPOINT ${f}`);try{let m=fo(e);Ot(e,[n]);let E=C(n);if(h.run(`UPDATE ${L(e)} SET ${E} = ${ne(r)} WHERE rowid = ?`+(l?` AND NOT (typeof(${E}) IN ('text', 'blob') AND length(CAST(${E} AS BLOB)) > ?)`:""),P(l?[r,c,u]:[r,c])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1){if(l){let S=await _n({table:e,rowId:c,column:n});if((S.storageClass==="text"||S.storageClass==="blob")&&S.byteLength>u)throw new Ge(e,n,S.storageClass,S.byteLength,u)}throw new Error(`Cannot update ${e}.${n}: row ${t} no longer exists`)}let g=mo(e,m,c,n,r);return x(`RELEASE ${f}`),g}catch(m){throw W(f,"updateCell"),m}}async function Od(e,t,n,r,o,i){let a=Je([r],i);if(ra(o,a),ve(t),!h)throw new Error("No database initialized");te("Oversized cell replacement");let s=await le(e),l=Q(t,s),u=C(n),c=()=>{if(h.run(`UPDATE ${L(e)} SET ${u} = ${ne(r)} WHERE ${l.sql} AND typeof(${u}) = ? AND length(CAST(${u} AS BLOB)) = ?`,P([r,...l.params,o.storageClass,o.byteLength])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(ea);if(s.kind==="rowid")return mo(e,fo(e),H(t),n,r);let m=s.columns.findIndex(y=>y.identifier===n),E=Sr(t,s,m>=0?[{column:n,value:r}]:[]);return $n(e,s,Q(E,s),to(e))},d=V("sp_replace_oversized_cell");x(`SAVEPOINT ${d}`);try{Ot(e,[n],s.kind==="rowid");let f=c();return x(`RELEASE ${d}`),f}catch(f){throw W(d,"replaceOversizedCell"),f}}async function ja(e,t,n,r,o,i){if(!h)throw new Error("No database initialized");te("Row insertion"),r!==lo&&Je(Object.values(t),n);let a=Object.keys(t),s=Object.values(t),l=await le(e),u;if(a.length===0)u=`INSERT INTO ${L(e)} DEFAULT VALUES`;else{let d=a.map(C).join(", "),f=s.map(ne).join(", ");u=`INSERT INTO ${L(e)} (${d}) VALUES (${f})`}if(l.kind==="primaryKey"){let d=V("sp_insert_pk_row");x(`SAVEPOINT ${d}`);try{De("INSERT",e,a);let f=h.prepare(`${u} RETURNING `+bt(l),P(s)),m;try{if(!f.step())throw new Error(`Insert into ${e} did not return a primary-key identity`);if(m=f.get(null,{useBigInt:!0}),!m||f.step())throw new Error(`Insert into ${e} did not return exactly one primary-key identity`)}finally{f.free()}let E=Tt(l,m,ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot insert into ${e}`),y=$n(e,l,Q(E,l)),g=o?Ca(e,l,y,i):y;return x(`RELEASE ${d}`),g}catch(f){throw W(d,"insertPrimaryKeyRow"),f}}let c=V("sp_insert_rowid_row");x(`SAVEPOINT ${c}`);try{De("INSERT",e,a),h.run(u,P(s));let d=h.exec("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")[0]?.values?.[0];if(!d||Number(d[0])!==1)throw new Error(`Insert into ${e} did not create exactly one row`);let f=H(d[1]),m=Q(f,l);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE ${m.sql} LIMIT 2`,P(m.params))[0]?.values.length??0)!==1)throw new Error(`Insert into ${e} did not leave one addressable row; the insert was rolled back`);let y=o?Ca(e,l,f,i):f;return x(`RELEASE ${c}`),y}catch(d){throw W(c,"insertRowIdRow"),d}}async function Ld(e,t,n,r){return ja(e,t,n,r,!1)}async function $d(e,t,n,r){return ja(e,t,n,void 0,!0,r)}function vd(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Import options must be an object");if(e.expectedSchemaVersion!==void 0&&typeof e.expectedSchemaVersion!="string")throw new Error("Import expectedSchemaVersion must be a string");let t=n=>{let r=e[n];if(r!==void 0){if(!Number.isSafeInteger(r)||r<0)throw new Error(`Import ${n} must be a non-negative safe integer`);return r}};return{maxEditValueBytes:e.maxEditValueBytes,maxUndoSnapshotBytes:t("maxUndoSnapshotBytes"),maxSnapshotTransportBytes:t("maxSnapshotTransportBytes")}}function kd(e,t){if(!Array.isArray(e))throw new Error("Import rows must be an array");if(e.length===0)throw new Error("Import requires at least one row");if(e.length>Kr)throw new Error(`Import supports at most ${Kr.toLocaleString("en-US")} rows`);let n=Je([],t),r=new Array(e.length),o=0;for(let i=0;izr)throw new Error(`Import supports at most ${zr} columns`);if(o+=s.length,o>Xr)throw new Error(`Import supports at most ${Xr.toLocaleString("en-US")} cells; split the file into smaller imports`);for(let l of s)z(l,"Column name"),Ye(a[l],n);r[i]=s}return r}function Pd(e,t,n,r){let o=L(e),i=t.length===0?`INSERT INTO ${o} DEFAULT VALUES`:`INSERT INTO ${o} (${t.map(C).join(", ")}) VALUES (${n.join(", ")})`;return r.kind!=="primaryKey"?i:`${i} RETURNING ${bt(r)}`}function Dd(e,t,n,r){let o=Nn(e),i=ze(n,t),a=t.kind==="rowid"?"CAST(rowid AS TEXT)":bt(t),s=t.kind==="rowid"?1:t.columns.length*2,l=o.map(se),u=new Map(n.map((E,y)=>[String(E),y])),c=[],d=new Map,f=new Array(n.length),m=0;for(let E of i){let y=h.exec(`SELECT ${a}${l.length>0?", ":""}${l.join(", ")} FROM ${L(e)} WHERE ${E.sql}`,P(E.params),{useBigInt:!0})[0];for(let g of y?.values??[]){let S=t.kind==="rowid"?H(g[0]):Tt(t,g.slice(0,s),r,`Cannot import into ${e}`),w=u.get(String(S));if(w===void 0||f[w]!==void 0)throw new Error(`Import into ${e} could not re-read an inserted row by its identity`);let R=o.map(($,O)=>K(g[s+O*2],g[s+O*2+1],`${e}.${$}`,{textEncoding:r})),I=R.map($=>$.storageClass),T=I.join(","),_=d.get(T);_===void 0&&(_=c.length,c.push(I),d.set(T,_)),f[w]={rowId:S,values:R.map($=>$.rawTextBytes??$.value),pattern:_},m+=1}}if(m!==n.length)throw new Error(`Import into ${e} inserted ${n.length} rows but could re-read only ${m}`);return{columns:o,storageClassPatterns:c,rows:f}}function ro(e){if(e==null)return 4;switch(typeof e){case"string":{let t=Zr(e)+2;for(let n=0;nr.maxUndoSnapshotBytes)throw new Error(`Import undo history for ${t} rows into ${e} needs ${a} bytes, over the ${r.maxUndoSnapshotBytes}-byte undo memory budget; import fewer rows at a time or increase maxUndoMemory. No rows were imported.`)}let o=Math.min(r.maxSnapshotTransportBytes??Number.MAX_SAFE_INTEGER,Tn),i=ro({rowCount:t,snapshots:n});if(i>o)throw new Error(`Import undo history for ${t} rows into ${e} is about ${i} bytes encoded, over the ${o}-byte limit this engine can return in one edit; import fewer rows at a time. No rows were imported.`)}async function Md(e,t,n={}){if(!h)throw new Error("No database initialized");te("Row import"),z(e,"Table name");let r=vd(n??{}),o=kd(t,r.maxEditValueBytes),i=V("sp_import_rows");x(`SAVEPOINT ${i}`);try{if(n?.expectedSchemaVersion!==void 0&&Wa()!==n.expectedSchemaVersion)throw new Error("The destination database schema changed after the preview was prepared. Start the import again.");let a=await le(e),s=Be(),l=new Array(t.length),u=new Map,c=null;try{for(let f=0;fm[I]),g=y.map(ne),S=`${JSON.stringify(E)}|${g.join(",")}`,w=u.get(S);if(w||(De("INSERT",e,E),w=h.prepare(Pd(e,E,g,a)),u.set(S,w)),w.bind(P(y)),a.kind==="primaryKey"){if(!w.step())throw new Error(`Import into ${e} did not return a primary-key identity`);let I=w.get(null,{useBigInt:!0});if(!I||w.step())throw new Error(`Import into ${e} did not return exactly one primary-key identity`);w.reset();let T=Tt(a,I,s,`Cannot import into ${e}`);l[f]=$n(e,a,Q(T,a));continue}w.step(),w.reset(),c??=h.prepare("SELECT changes(), CAST(last_insert_rowid() AS TEXT)"),c.step();let R=c.get(null,{useBigInt:!0});if(c.reset(),!R||Number(R[0])!==1)throw new Error(`Import into ${e} did not create exactly one row for row ${f+1}`);l[f]=H(R[1])}}finally{for(let f of u.values())f.free();c?.free()}let d=Dd(e,a,l,s);return Bd(e,t.length,d,r),x(`RELEASE ${i}`),{rowCount:t.length,snapshots:d}}catch(a){throw W(i,"importRows"),a}}function Ha(e){if(e===null||typeof e!="object"||!Array.isArray(e.columns)||!Array.isArray(e.storageClassPatterns)||!Array.isArray(e.rows)||e.rows.length===0||e.columns.some(r=>typeof r!="string"))throw new J;let t=e.columns.length,n=e.storageClassPatterns.map(r=>{if(!Array.isArray(r)||r.length!==t)throw new J;return e.columns.map((o,i)=>({column:o,storageClass:r[i]}))});return e.rows.map(r=>{if(r===null||typeof r!="object"||!Array.isArray(r.values)||r.values.length!==t||!Number.isInteger(r.pattern)||r.pattern<0||r.pattern>=n.length)throw new J;return{rowId:r.rowId,row:Object.fromEntries(e.columns.map((o,i)=>[o,r.values[i]])),storageClasses:n[r.pattern]}})}function Yr(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||n<0)throw new Error(`Demo delete snapshot ${t} exceeds the web transport safety bound`);return n}function Ud(e){let t=C(e);return`CASE typeof(${t}) WHEN 'text' THEN 6 * octet_length(${t}) WHEN 'blob' THEN 4 * ((octet_length(${t}) + 2) / 3) + 40 WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 4 END`}function qd(e){let t=C(e);return`COALESCE(MAX(CASE WHEN typeof(${t}) = 'blob' THEN octet_length(${t}) ELSE 0 END), 0)`}function oo(e,t,n,r){let o=1024;for(let s of t)o+=64+6*String(s).length;let i=128+n.reduce((s,l)=>s+48+6*l.length,0),a=0;for(let s of r)for(let l=0;l0?", ":""}`+u.map(qd).join(", ")+` FROM ${L(e)} WHERE ${s.sql}`,P(s.params),{useBigInt:!0})[0]?.values?.[0];if(!c)throw new Error("Demo delete snapshot preflight returned no metadata");let d=Yr(c[0],"row count");l===0&&(a+=d,o+=d*i),o+=Yr(c[1],"encoded size");for(let f of c.slice(2))if(Yr(f,"BLOB size")>Xe)throw new Error(`Demo delete snapshot exceeds the ${Xe}-byte web transport binary limit; the row was not deleted`);if(!Number.isSafeInteger(o))throw new Error("Demo delete snapshot exceeds the web transport safety bound")}if(a!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);if(o>Tn)throw new Error(`Demo delete snapshot exceeds the ${Tn}-byte web transport response limit; no rows were deleted`)}async function Vd(e,t){if(t.forEach(ve),!h)throw new Error("No database initialized");if(te("Row deletion"),t.length===0)return[];let n=await le(e),r=Be();if(t.some(ie)){if(!t.every(ie))throw new Error("Cannot mix rowid and primary-key row identities");if(n.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let a=ze(t,n),s=V("sp_delete_pk_rows");x(`SAVEPOINT ${s}`);try{De("DELETE",e);let l=Nn(e);oo(e,t,l,a);let u=[];for(let c of a){let f=h.exec(`SELECT ${l.map(se).join(", ")||"1"} FROM ${L(e)} WHERE ${c.sql}`,P(c.params),{useBigInt:!0})[0]?.values??[],m=n.columns.map(E=>{let y=l.indexOf(E.identifier);if(y<0)throw new Error(`Primary-key column missing from ${e}: ${E.identifier}`);return y});u.push(...f.map(E=>{let y=l.map((g,S)=>K(E[S*2],E[S*2+1],`${e}.${g}`,{textEncoding:r}));return{rowId:Ke(n.columns,m.map(g=>y[g].value)),row:Object.fromEntries(l.map((g,S)=>[g,y[S].rawTextBytes??y[S].value])),storageClasses:l.map((g,S)=>({column:g,storageClass:y[S].storageClass}))}}))}if(u.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let c of a)h.run(`DELETE FROM ${L(e)} WHERE ${c.sql}`,P(c.params));return x(`RELEASE ${s}`),u}catch(l){throw W(s,"deletePrimaryKeyRows"),l}}if(n.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let o=ze(t,n),i=V("sp_delete_rowid_rows");x(`SAVEPOINT ${i}`);try{De("DELETE",e);let a=Nn(e);oo(e,t,a,o);let s=[];for(let l of o){let u=h.exec(`SELECT CAST(rowid AS TEXT)${a.length>0?", ":""}${a.map(se).join(", ")} FROM ${L(e)} WHERE ${l.sql}`,P(l.params),{useBigInt:!0})[0];s.push(...(u?.values??[]).map(c=>{let d=H(c[0]),f=a.map((m,E)=>K(c[E*2+1],c[E*2+2],`${e}.${m}`,{textEncoding:r}));return{rowId:d,row:Object.fromEntries(a.map((m,E)=>[m,f[E].rawTextBytes??f[E].value])),storageClasses:a.map((m,E)=>({column:m,storageClass:f[E].storageClass}))}}))}if(s.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let l of o)h.run(`DELETE FROM ${L(e)} WHERE ${l.sql}`,P(l.params));return x(`RELEASE ${i}`),s}catch(a){throw W(i,"deleteRowidRows"),a}}async function Qa(e,t){if(!h)throw new Error("No database initialized");if(!Array.isArray(t))throw new Error("Column names must be an array");z(e,"Table name"),t.forEach(d=>z(d,"Column name"));let r=(h.exec("SELECT name, sql FROM main.sqlite_schema WHERE type = 'index' AND tbl_name = ? AND sql IS NOT NULL ORDER BY name",[e])[0]?.values??[]).map(d=>({identifier:d[0],sql:d[1]}));if(r.length===0||t.length===0)return[];let i=(h.exec(`PRAGMA main.table_xinfo(${C(e)})`)[0]?.values??[]).map(d=>d[1]),a=Ri(i,t);if(a.length===0)return[];let s=crypto.randomUUID().replace(/-/g,""),l=`__sqlite_explorer_index_probe_${s}`,u=`__sqlite_explorer_index_candidate_${s}`,c=V("sp_index_dependencies");x(`SAVEPOINT ${c}`);try{x(Ci(l,i));let d=V("sp_index_baseline");x(`SAVEPOINT ${d}`);try{for(let m of a)x(`ALTER TABLE temp.${C(l)} DROP COLUMN ${C(m)}`);x(`ROLLBACK TO ${d}`),x(`RELEASE ${d}`)}catch(m){throw W(d,"findDependentIndexBaseline"),new Error("Cannot establish the index dependency probe baseline",{cause:m})}let f=[];for(let m of r){let E=V("sp_index_candidate");x(`SAVEPOINT ${E}`);try{x(xi(l,u,m.sql));let y=!1;for(let g of a)try{x(`ALTER TABLE temp.${C(l)} DROP COLUMN ${C(g)}`)}catch{y=!0;break}x(`ROLLBACK TO ${E}`),x(`RELEASE ${E}`),y&&f.push(m)}catch(y){throw W(E,"findDependentIndex"),new Error(`Cannot inspect dependency for index ${C(m.identifier)}`,{cause:y})}}return x(`ROLLBACK TO ${c}`),x(`RELEASE ${c}`),f}catch(d){throw W(c,"findDependentIndexes"),d}}function Fd(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Dependent-index confirmation must be an array");return e.map(t=>{if(!t||typeof t!="object"||Array.isArray(t)||typeof t.identifier!="string"||typeof t.sql!="string")throw new Error("Dependent-index confirmation contains an invalid definition");return z(t.identifier,"Index name"),{identifier:t.identifier,sql:t.sql}})}}function Wd(e,t,n){if(t.length===0&&(n?.length??0)===0)return;if(!n)throw new Error("Column deletion requires confirmation for dependent indexes: "+t.map(i=>i.identifier).join(", "));let r=new Map(n.map(i=>[i.identifier,i.sql]));if(!(r.size===n.length&&n.length===t.length&&t.every(i=>r.get(i.identifier)===i.sql)))throw new Error(`Cannot delete columns from ${e}: dependent indexes changed while the confirmation was open`)}async function jd(e,t,n){if(!h)throw new Error("No database initialized");if(te("Column deletion"),t.length===0)return;let r=V("sp_delete_columns");x(`SAVEPOINT ${r}`);try{let o=Fd(n),i=await Qa(e,t);Wd(e,i,o),await Rs(e,t,i.map(a=>a.identifier),a=>x(a)),x(`RELEASE ${r}`)}catch(o){throw W(r,"deleteColumns"),Hd(o,t)}}function Hd(e,t){let n;try{n=Qd(t)}catch{return e}if(n.length===0)return e;let r=e instanceof Error?e.message:String(e),o=n.map(i=>`${i.type} ${i.identifier}`).join(", ");return new Error(`${r} \u2014 these schema objects mention ${t.join(", ")} and may be blocking the drop: ${o}. Drop or edit them first.`,{cause:e})}function Qd(e){return(h.exec(Ts)[0]?.values??[]).filter(n=>typeof n[1]=="string"&&typeof n[2]=="string"&&e.some(r=>Cs(n[2],r))).map(n=>({type:n[0],identifier:n[1]}))}async function Kd(e,t,n){if(!h)throw new Error("No database initialized");te("Table creation");let r=Ii(e,t,n),o=V("sp_create_table");x(`SAVEPOINT ${o}`);try{let i=await G();x(r),we(i,await G()),x(`RELEASE ${o}`)}catch(i){throw W(o,"createTable"),i}}async function Ka(e,t=!1){if(!h)throw new Error("No database initialized");let r=h.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0]?.[0];if(typeof r!="string")return null;let o=Wt.map(c=>h.exec(c.sql,c.params(e))[0]?.values||[]),{triggers:i,ambiguousTemporaryTriggerNames:a,unqualifiedTemporaryTriggers:s}=di(e,o);if(s.length>0){let d=(h.exec("SELECT name FROM pragma.pragma_table_xinfo(?, 'main') ORDER BY cid",[e])[0]?.values??[]).map(f=>{if(typeof f[0]!="string")throw new Error(`SQLite returned invalid view column metadata for ${e}`);return f[0]});for(let f of s){if(i.some(m=>!m.temporary&&He(m.identifier,f.identifier))){a.push(f.identifier);continue}try{let m=Ht(f.sql,"main",e,d);if(m===void 0){a.push(f.identifier);continue}let E=h.exec(m);ui(E[0]?.values??[],f.identifier)&&i.push({...f,sql:lr(f.sql,f.identifier)})}catch{a.push(f.identifier)}}}let l,u;try{l=mi(r),u=ar(r)}catch(c){if(!t)throw c;l=""}return{identifier:e,sql:r,selectSql:l,columnListSql:u,triggers:i,...a.length>0?{ambiguousTemporaryTriggerNames:a}:{}}}async function za(e,t=!1){let n=await Ka(e,t);if(!n)throw new Error(`View not found: ${e}`);return n}async function On(e){return za(e,!1)}function G(){return wi({queryRows:async(e,t)=>h.exec(e,P(t))[0]?.values??[],compileStatements:async e=>e.map(t=>{try{ot(t);return}catch(n){return Te(n)}})})}function Xa(e,t){let r=h.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0];gi(e,r!==void 0,t);let o=r?.[0];return{storedSql:o,columnListSql:typeof o=="string"?ar(o):void 0}}function te(e){if(ae)throw new Error(`${e} is unavailable because the database is read-only`)}async function zd(e,t,n="edit"){if(z(e,"View name"),!h)throw new Error("No database initialized");if(ae)throw new Error("View validation is unavailable because the database is read-only");let r=Ee(t),{storedSql:o,columnListSql:i}=Xa(e,n),a=V("sp_validate_view");x(`SAVEPOINT ${a}`);try{let s=await G();typeof o=="string"&&x(`DROP VIEW ${oe(e)}`),x(ct(e,r,i)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),we(s,await G()),x(`ROLLBACK TO ${a}`),x(`RELEASE ${a}`)}catch(s){throw W(a,"validateViewDefinition"),s}}async function Xd(e,t,n=50,r="edit",o){if(z(e,"View name"),!h)throw new Error("No database initialized");let i=Ee(t),a=Math.max(1,Math.min(100,Math.trunc(n)||50)),{storedSql:s,columnListSql:l}=Xa(e,r);if(ae){let c=C(e);return Gr(l?`WITH ${c} ${l} AS (${i} + `)[0]?.values||[]).map(l=>({identifier:l[0],parentTable:l[1]}));return{tables:r,views:i,indexes:s}}async function po(e){if(!h)throw new Error("No database initialized");let t=h.exec(Pi,[e]);return t.length===0?[]:t[0].values.filter(n=>Number(n[6]??0)!==1).map(n=>({ordinal:n[0],identifier:n[1],declaredType:n[2],isRequired:n[3],defaultExpression:n[4],primaryKeyPosition:n[5],isGenerated:Number(n[6]??0)===2||Number(n[6]??0)===3,isRowidAlias:Number(n[7]??0)===1}))}function Wa(){let e=n=>{let r=h.prepare(n),o=[];try{for(;r.step();)o.push(r.get());return o}finally{r.free()}},t=e("PRAGMA main.schema_version")[0]?.[0];if(!Number.isSafeInteger(t))throw new Error("Unable to read the destination database schema version.");return JSON.stringify([t,e("SELECT type, name, tbl_name, sql FROM temp.sqlite_schema ORDER BY type, name")])}async function xd(e){if(!h)throw new Error("No database initialized");z(e,"Table name");let t=V("sp_import_preview");x(`SAVEPOINT ${t}`);try{let n=await po(e);if(!n.length)throw new Error(`Table not found: ${e}`);let r=Wa();return x(`RELEASE SAVEPOINT ${t}`),{columns:n,schemaVersion:r}}catch(n){throw W(t,"getImportTarget"),n}}function Nn(e){return(h.exec("SELECT name FROM pragma.pragma_table_xinfo(?) WHERE hidden = 0 ORDER BY cid",[e])[0]?.values??[]).map(n=>{if(typeof n[0]!="string")throw new Error(`SQLite returned invalid column metadata for ${e}`);return n[0]})}function Id(e,t,n,r){let o=Be(),i=Q(n,t),a=r.map(se),l=h.exec(`SELECT ${a.join(", ")||"1"} FROM ${L(e)} WHERE ${i.sql} LIMIT 2`,P(i.params),{useBigInt:!0})[0]?.values??[];if(l.length!==1)throw new _e(e);let u=r.map((c,d)=>K(l[0][d*2],l[0][d*2+1],`${e}.${c}`,{textEncoding:o}));return{rowId:n,row:Object.fromEntries(r.map((c,d)=>[c,u[d].rawTextBytes??u[d].value])),storageClasses:r.map((c,d)=>({column:c,storageClass:u[d].storageClass}))}}function Ad(e,t,n,r,o){if(o===void 0)return;let i=Q(n,t),a=Bs(r,t.kind==="rowid"),s=Ms(e,a,i),l=h.exec(s.sql,P(s.params),{useBigInt:!0})[0]?.values?.[0],u=Us(l);qs({table:e,insertableColumns:r,includeSyntheticRowId:t.kind==="rowid",rowIds:[n],rowCount:u.rowCount,valueBytes:u.valueBytes,maxSnapshotBytes:o,operation:"Insert"})}function Ca(e,t,n,r){let o=Nn(e),i=Q(n,t);return oo(e,[n],o,[i]),Ad(e,t,n,o,r),Id(e,t,n,o)}async function _d(){if(!h)throw new Error("No database initialized");let e={},t=["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","encoding","auto_vacuum"];for(let n of t)try{let r=h.exec(`PRAGMA ${n}`);r.length>0&&r[0].values.length>0&&(e[n]=r[0].values[0][0])}catch{}return e}async function Nd(e,t){if(!h)throw new Error("No database initialized");if(te("Pragma updates"),!["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","auto_vacuum"].includes(e))throw new Error(`Invalid or disallowed PRAGMA: ${e}`);let r;if(typeof t=="string"){if(!/^[a-zA-Z0-9_-]+$/.test(t))throw new Error("Invalid PRAGMA string value: contains disallowed characters");r=`PRAGMA ${e} = '${t}'`}else if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("Invalid PRAGMA numeric value: must be finite");r=`PRAGMA ${e} = ${t}`}else if(typeof t=="boolean")r=`PRAGMA ${e} = ${t?"ON":"OFF"}`;else throw new Error(`Invalid PRAGMA value type: ${typeof t}`);x(r)}async function Od(e,t,n,r,o,i,a){let s=a===lo,l=!s&&i!==void 0,u=s?0:Je([r],i);if(ve(t),!h)throw new Error("No database initialized");if(te("Cell updates"),ie(t))return(await Ya(e,[{rowId:t,column:n,value:r,operation:"set"}],void 0,i,a))[0]?.newRowId??t;let c=H(t);if((await le(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let f=V("sp_update_rowid_cell");x(`SAVEPOINT ${f}`);try{let m=fo(e);Ot(e,[n]);let E=C(n);if(h.run(`UPDATE ${L(e)} SET ${E} = ${ne(r)} WHERE rowid = ?`+(l?` AND NOT (typeof(${E}) IN ('text', 'blob') AND length(CAST(${E} AS BLOB)) > ?)`:""),P(l?[r,c,u]:[r,c])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1){if(l){let S=await _n({table:e,rowId:c,column:n});if((S.storageClass==="text"||S.storageClass==="blob")&&S.byteLength>u)throw new Ge(e,n,S.storageClass,S.byteLength,u)}throw new Error(`Cannot update ${e}.${n}: row ${t} no longer exists`)}let g=mo(e,m,c,n,r);return x(`RELEASE ${f}`),g}catch(m){throw W(f,"updateCell"),m}}async function Ld(e,t,n,r,o,i){let a=Je([r],i);if(ra(o,a),ve(t),!h)throw new Error("No database initialized");te("Oversized cell replacement");let s=await le(e),l=Q(t,s),u=C(n),c=()=>{if(h.run(`UPDATE ${L(e)} SET ${u} = ${ne(r)} WHERE ${l.sql} AND typeof(${u}) = ? AND length(CAST(${u} AS BLOB)) = ?`,P([r,...l.params,o.storageClass,o.byteLength])),h.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(ea);if(s.kind==="rowid")return mo(e,fo(e),H(t),n,r);let m=s.columns.findIndex(y=>y.identifier===n),E=Sr(t,s,m>=0?[{column:n,value:r}]:[]);return $n(e,s,Q(E,s),to(e))},d=V("sp_replace_oversized_cell");x(`SAVEPOINT ${d}`);try{Ot(e,[n],s.kind==="rowid");let f=c();return x(`RELEASE ${d}`),f}catch(f){throw W(d,"replaceOversizedCell"),f}}async function ja(e,t,n,r,o,i){if(!h)throw new Error("No database initialized");te("Row insertion"),r!==lo&&Je(Object.values(t),n);let a=Object.keys(t),s=Object.values(t),l=await le(e),u;if(a.length===0)u=`INSERT INTO ${L(e)} DEFAULT VALUES`;else{let d=a.map(C).join(", "),f=s.map(ne).join(", ");u=`INSERT INTO ${L(e)} (${d}) VALUES (${f})`}if(l.kind==="primaryKey"){let d=V("sp_insert_pk_row");x(`SAVEPOINT ${d}`);try{De("INSERT",e,a);let f=h.prepare(`${u} RETURNING `+bt(l),P(s)),m;try{if(!f.step())throw new Error(`Insert into ${e} did not return a primary-key identity`);if(m=f.get(null,{useBigInt:!0}),!m||f.step())throw new Error(`Insert into ${e} did not return exactly one primary-key identity`)}finally{f.free()}let E=Tt(l,m,ke(h.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot insert into ${e}`),y=$n(e,l,Q(E,l)),g=o?Ca(e,l,y,i):y;return x(`RELEASE ${d}`),g}catch(f){throw W(d,"insertPrimaryKeyRow"),f}}let c=V("sp_insert_rowid_row");x(`SAVEPOINT ${c}`);try{De("INSERT",e,a),h.run(u,P(s));let d=h.exec("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")[0]?.values?.[0];if(!d||Number(d[0])!==1)throw new Error(`Insert into ${e} did not create exactly one row`);let f=H(d[1]),m=Q(f,l);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE ${m.sql} LIMIT 2`,P(m.params))[0]?.values.length??0)!==1)throw new Error(`Insert into ${e} did not leave one addressable row; the insert was rolled back`);let y=o?Ca(e,l,f,i):f;return x(`RELEASE ${c}`),y}catch(d){throw W(c,"insertRowIdRow"),d}}async function $d(e,t,n,r){return ja(e,t,n,r,!1)}async function vd(e,t,n,r){return ja(e,t,n,void 0,!0,r)}function kd(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Import options must be an object");if(e.expectedSchemaVersion!==void 0&&typeof e.expectedSchemaVersion!="string")throw new Error("Import expectedSchemaVersion must be a string");let t=n=>{let r=e[n];if(r!==void 0){if(!Number.isSafeInteger(r)||r<0)throw new Error(`Import ${n} must be a non-negative safe integer`);return r}};return{maxEditValueBytes:e.maxEditValueBytes,maxUndoSnapshotBytes:t("maxUndoSnapshotBytes"),maxSnapshotTransportBytes:t("maxSnapshotTransportBytes")}}function Pd(e,t){if(!Array.isArray(e))throw new Error("Import rows must be an array");if(e.length===0)throw new Error("Import requires at least one row");if(e.length>Kr)throw new Error(`Import supports at most ${Kr.toLocaleString("en-US")} rows`);let n=Je([],t),r=new Array(e.length),o=0;for(let i=0;izr)throw new Error(`Import supports at most ${zr} columns`);if(o+=s.length,o>Xr)throw new Error(`Import supports at most ${Xr.toLocaleString("en-US")} cells; split the file into smaller imports`);for(let l of s)z(l,"Column name"),Ye(a[l],n);r[i]=s}return r}function Dd(e,t,n,r){let o=L(e),i=t.length===0?`INSERT INTO ${o} DEFAULT VALUES`:`INSERT INTO ${o} (${t.map(C).join(", ")}) VALUES (${n.join(", ")})`;return r.kind!=="primaryKey"?i:`${i} RETURNING ${bt(r)}`}function Bd(e,t,n,r){let o=Nn(e),i=ze(n,t),a=t.kind==="rowid"?"CAST(rowid AS TEXT)":bt(t),s=t.kind==="rowid"?1:t.columns.length*2,l=o.map(se),u=new Map(n.map((E,y)=>[String(E),y])),c=[],d=new Map,f=new Array(n.length),m=0;for(let E of i){let y=h.exec(`SELECT ${a}${l.length>0?", ":""}${l.join(", ")} FROM ${L(e)} WHERE ${E.sql}`,P(E.params),{useBigInt:!0})[0];for(let g of y?.values??[]){let S=t.kind==="rowid"?H(g[0]):Tt(t,g.slice(0,s),r,`Cannot import into ${e}`),w=u.get(String(S));if(w===void 0||f[w]!==void 0)throw new Error(`Import into ${e} could not re-read an inserted row by its identity`);let R=o.map(($,O)=>K(g[s+O*2],g[s+O*2+1],`${e}.${$}`,{textEncoding:r})),I=R.map($=>$.storageClass),T=I.join(","),_=d.get(T);_===void 0&&(_=c.length,c.push(I),d.set(T,_)),f[w]={rowId:S,values:R.map($=>$.rawTextBytes??$.value),pattern:_},m+=1}}if(m!==n.length)throw new Error(`Import into ${e} inserted ${n.length} rows but could re-read only ${m}`);return{columns:o,storageClassPatterns:c,rows:f}}function ro(e){if(e==null)return 4;switch(typeof e){case"string":{let t=Zr(e)+2;for(let n=0;nr.maxUndoSnapshotBytes)throw new Error(`Import undo history for ${t} rows into ${e} needs ${a} bytes, over the ${r.maxUndoSnapshotBytes}-byte undo memory budget; import fewer rows at a time or increase maxUndoMemory. No rows were imported.`)}let o=Math.min(r.maxSnapshotTransportBytes??Number.MAX_SAFE_INTEGER,Tn),i=ro({rowCount:t,snapshots:n});if(i>o)throw new Error(`Import undo history for ${t} rows into ${e} is about ${i} bytes encoded, over the ${o}-byte limit this engine can return in one edit; import fewer rows at a time. No rows were imported.`)}async function Ud(e,t,n={}){if(!h)throw new Error("No database initialized");te("Row import"),z(e,"Table name");let r=kd(n??{}),o=Pd(t,r.maxEditValueBytes),i=V("sp_import_rows");x(`SAVEPOINT ${i}`);try{if(n?.expectedSchemaVersion!==void 0&&Wa()!==n.expectedSchemaVersion)throw new Error("The destination database schema changed after the preview was prepared. Start the import again.");let a=await le(e),s=Be(),l=new Array(t.length),u=new Map,c=null;try{for(let f=0;fm[I]),g=y.map(ne),S=`${JSON.stringify(E)}|${g.join(",")}`,w=u.get(S);if(w||(De("INSERT",e,E),w=h.prepare(Dd(e,E,g,a)),u.set(S,w)),w.bind(P(y)),a.kind==="primaryKey"){if(!w.step())throw new Error(`Import into ${e} did not return a primary-key identity`);let I=w.get(null,{useBigInt:!0});if(!I||w.step())throw new Error(`Import into ${e} did not return exactly one primary-key identity`);w.reset();let T=Tt(a,I,s,`Cannot import into ${e}`);l[f]=$n(e,a,Q(T,a));continue}w.step(),w.reset(),c??=h.prepare("SELECT changes(), CAST(last_insert_rowid() AS TEXT)"),c.step();let R=c.get(null,{useBigInt:!0});if(c.reset(),!R||Number(R[0])!==1)throw new Error(`Import into ${e} did not create exactly one row for row ${f+1}`);l[f]=H(R[1])}}finally{for(let f of u.values())f.free();c?.free()}let d=Bd(e,a,l,s);return Md(e,t.length,d,r),x(`RELEASE ${i}`),{rowCount:t.length,snapshots:d}}catch(a){throw W(i,"importRows"),a}}function Ha(e){if(e===null||typeof e!="object"||!Array.isArray(e.columns)||!Array.isArray(e.storageClassPatterns)||!Array.isArray(e.rows)||e.rows.length===0||e.columns.some(r=>typeof r!="string"))throw new J;let t=e.columns.length,n=e.storageClassPatterns.map(r=>{if(!Array.isArray(r)||r.length!==t)throw new J;return e.columns.map((o,i)=>({column:o,storageClass:r[i]}))});return e.rows.map(r=>{if(r===null||typeof r!="object"||!Array.isArray(r.values)||r.values.length!==t||!Number.isInteger(r.pattern)||r.pattern<0||r.pattern>=n.length)throw new J;return{rowId:r.rowId,row:Object.fromEntries(e.columns.map((o,i)=>[o,r.values[i]])),storageClasses:n[r.pattern]}})}function Yr(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||n<0)throw new Error(`Demo delete snapshot ${t} exceeds the web transport safety bound`);return n}function qd(e){let t=C(e);return`CASE typeof(${t}) WHEN 'text' THEN 6 * octet_length(${t}) WHEN 'blob' THEN 4 * ((octet_length(${t}) + 2) / 3) + 40 WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 4 END`}function Vd(e){let t=C(e);return`COALESCE(MAX(CASE WHEN typeof(${t}) = 'blob' THEN octet_length(${t}) ELSE 0 END), 0)`}function oo(e,t,n,r){let o=1024;for(let s of t)o+=64+6*String(s).length;let i=128+n.reduce((s,l)=>s+48+6*l.length,0),a=0;for(let s of r)for(let l=0;l0?", ":""}`+u.map(Vd).join(", ")+` FROM ${L(e)} WHERE ${s.sql}`,P(s.params),{useBigInt:!0})[0]?.values?.[0];if(!c)throw new Error("Demo delete snapshot preflight returned no metadata");let d=Yr(c[0],"row count");l===0&&(a+=d,o+=d*i),o+=Yr(c[1],"encoded size");for(let f of c.slice(2))if(Yr(f,"BLOB size")>Xe)throw new Error(`Demo delete snapshot exceeds the ${Xe}-byte web transport binary limit; the row was not deleted`);if(!Number.isSafeInteger(o))throw new Error("Demo delete snapshot exceeds the web transport safety bound")}if(a!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);if(o>Tn)throw new Error(`Demo delete snapshot exceeds the ${Tn}-byte web transport response limit; no rows were deleted`)}async function Fd(e,t){if(t.forEach(ve),!h)throw new Error("No database initialized");if(te("Row deletion"),t.length===0)return[];let n=await le(e),r=Be();if(t.some(ie)){if(!t.every(ie))throw new Error("Cannot mix rowid and primary-key row identities");if(n.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let a=ze(t,n),s=V("sp_delete_pk_rows");x(`SAVEPOINT ${s}`);try{De("DELETE",e);let l=Nn(e);oo(e,t,l,a);let u=[];for(let c of a){let f=h.exec(`SELECT ${l.map(se).join(", ")||"1"} FROM ${L(e)} WHERE ${c.sql}`,P(c.params),{useBigInt:!0})[0]?.values??[],m=n.columns.map(E=>{let y=l.indexOf(E.identifier);if(y<0)throw new Error(`Primary-key column missing from ${e}: ${E.identifier}`);return y});u.push(...f.map(E=>{let y=l.map((g,S)=>K(E[S*2],E[S*2+1],`${e}.${g}`,{textEncoding:r}));return{rowId:Ke(n.columns,m.map(g=>y[g].value)),row:Object.fromEntries(l.map((g,S)=>[g,y[S].rawTextBytes??y[S].value])),storageClasses:l.map((g,S)=>({column:g,storageClass:y[S].storageClass}))}}))}if(u.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let c of a)h.run(`DELETE FROM ${L(e)} WHERE ${c.sql}`,P(c.params));return x(`RELEASE ${s}`),u}catch(l){throw W(s,"deletePrimaryKeyRows"),l}}if(n.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let o=ze(t,n),i=V("sp_delete_rowid_rows");x(`SAVEPOINT ${i}`);try{De("DELETE",e);let a=Nn(e);oo(e,t,a,o);let s=[];for(let l of o){let u=h.exec(`SELECT CAST(rowid AS TEXT)${a.length>0?", ":""}${a.map(se).join(", ")} FROM ${L(e)} WHERE ${l.sql}`,P(l.params),{useBigInt:!0})[0];s.push(...(u?.values??[]).map(c=>{let d=H(c[0]),f=a.map((m,E)=>K(c[E*2+1],c[E*2+2],`${e}.${m}`,{textEncoding:r}));return{rowId:d,row:Object.fromEntries(a.map((m,E)=>[m,f[E].rawTextBytes??f[E].value])),storageClasses:a.map((m,E)=>({column:m,storageClass:f[E].storageClass}))}}))}if(s.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let l of o)h.run(`DELETE FROM ${L(e)} WHERE ${l.sql}`,P(l.params));return x(`RELEASE ${i}`),s}catch(a){throw W(i,"deleteRowidRows"),a}}async function Qa(e,t){if(!h)throw new Error("No database initialized");if(!Array.isArray(t))throw new Error("Column names must be an array");z(e,"Table name"),t.forEach(d=>z(d,"Column name"));let r=(h.exec("SELECT name, sql FROM main.sqlite_schema WHERE type = 'index' AND tbl_name = ? AND sql IS NOT NULL ORDER BY name",[e])[0]?.values??[]).map(d=>({identifier:d[0],sql:d[1]}));if(r.length===0||t.length===0)return[];let i=(h.exec(`PRAGMA main.table_xinfo(${C(e)})`)[0]?.values??[]).map(d=>d[1]),a=Ri(i,t);if(a.length===0)return[];let s=crypto.randomUUID().replace(/-/g,""),l=`__sqlite_explorer_index_probe_${s}`,u=`__sqlite_explorer_index_candidate_${s}`,c=V("sp_index_dependencies");x(`SAVEPOINT ${c}`);try{x(Ci(l,i));let d=V("sp_index_baseline");x(`SAVEPOINT ${d}`);try{for(let m of a)x(`ALTER TABLE temp.${C(l)} DROP COLUMN ${C(m)}`);x(`ROLLBACK TO ${d}`),x(`RELEASE ${d}`)}catch(m){throw W(d,"findDependentIndexBaseline"),new Error("Cannot establish the index dependency probe baseline",{cause:m})}let f=[];for(let m of r){let E=V("sp_index_candidate");x(`SAVEPOINT ${E}`);try{x(xi(l,u,m.sql));let y=!1;for(let g of a)try{x(`ALTER TABLE temp.${C(l)} DROP COLUMN ${C(g)}`)}catch{y=!0;break}x(`ROLLBACK TO ${E}`),x(`RELEASE ${E}`),y&&f.push(m)}catch(y){throw W(E,"findDependentIndex"),new Error(`Cannot inspect dependency for index ${C(m.identifier)}`,{cause:y})}}return x(`ROLLBACK TO ${c}`),x(`RELEASE ${c}`),f}catch(d){throw W(c,"findDependentIndexes"),d}}function Wd(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Dependent-index confirmation must be an array");return e.map(t=>{if(!t||typeof t!="object"||Array.isArray(t)||typeof t.identifier!="string"||typeof t.sql!="string")throw new Error("Dependent-index confirmation contains an invalid definition");return z(t.identifier,"Index name"),{identifier:t.identifier,sql:t.sql}})}}function jd(e,t,n){if(t.length===0&&(n?.length??0)===0)return;if(!n)throw new Error("Column deletion requires confirmation for dependent indexes: "+t.map(i=>i.identifier).join(", "));let r=new Map(n.map(i=>[i.identifier,i.sql]));if(!(r.size===n.length&&n.length===t.length&&t.every(i=>r.get(i.identifier)===i.sql)))throw new Error(`Cannot delete columns from ${e}: dependent indexes changed while the confirmation was open`)}async function Hd(e,t,n){if(!h)throw new Error("No database initialized");if(te("Column deletion"),t.length===0)return;let r=V("sp_delete_columns");x(`SAVEPOINT ${r}`);try{let o=Wd(n),i=await Qa(e,t);jd(e,i,o),await Rs(e,t,i.map(a=>a.identifier),a=>x(a)),x(`RELEASE ${r}`)}catch(o){throw W(r,"deleteColumns"),Qd(o,t)}}function Qd(e,t){let n;try{n=Kd(t)}catch{return e}if(n.length===0)return e;let r=e instanceof Error?e.message:String(e),o=n.map(i=>`${i.type} ${i.identifier}`).join(", ");return new Error(`${r} \u2014 these schema objects mention ${t.join(", ")} and may be blocking the drop: ${o}. Drop or edit them first.`,{cause:e})}function Kd(e){return(h.exec(Ts)[0]?.values??[]).filter(n=>typeof n[1]=="string"&&typeof n[2]=="string"&&e.some(r=>Cs(n[2],r))).map(n=>({type:n[0],identifier:n[1]}))}async function zd(e,t,n){if(!h)throw new Error("No database initialized");te("Table creation");let r=Ii(e,t,n),o=V("sp_create_table");x(`SAVEPOINT ${o}`);try{let i=await G();x(r),we(i,await G()),x(`RELEASE ${o}`)}catch(i){throw W(o,"createTable"),i}}async function Ka(e,t=!1){if(!h)throw new Error("No database initialized");let r=h.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0]?.[0];if(typeof r!="string")return null;let o=Wt.map(c=>h.exec(c.sql,c.params(e))[0]?.values||[]),{triggers:i,ambiguousTemporaryTriggerNames:a,unqualifiedTemporaryTriggers:s}=di(e,o);if(s.length>0){let d=(h.exec("SELECT name FROM pragma.pragma_table_xinfo(?, 'main') ORDER BY cid",[e])[0]?.values??[]).map(f=>{if(typeof f[0]!="string")throw new Error(`SQLite returned invalid view column metadata for ${e}`);return f[0]});for(let f of s){if(i.some(m=>!m.temporary&&He(m.identifier,f.identifier))){a.push(f.identifier);continue}try{let m=Ht(f.sql,"main",e,d);if(m===void 0){a.push(f.identifier);continue}let E=h.exec(m);ui(E[0]?.values??[],f.identifier)&&i.push({...f,sql:lr(f.sql,f.identifier)})}catch{a.push(f.identifier)}}}let l,u;try{l=mi(r),u=ar(r)}catch(c){if(!t)throw c;l=""}return{identifier:e,sql:r,selectSql:l,columnListSql:u,triggers:i,...a.length>0?{ambiguousTemporaryTriggerNames:a}:{}}}async function za(e,t=!1){let n=await Ka(e,t);if(!n)throw new Error(`View not found: ${e}`);return n}async function On(e){return za(e,!1)}function G(){return wi({queryRows:async(e,t)=>h.exec(e,P(t))[0]?.values??[],compileStatements:async e=>e.map(t=>{try{ot(t);return}catch(n){return Te(n)}})})}function Xa(e,t){let r=h.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0];gi(e,r!==void 0,t);let o=r?.[0];return{storedSql:o,columnListSql:typeof o=="string"?ar(o):void 0}}function te(e){if(ae)throw new Error(`${e} is unavailable because the database is read-only`)}async function Xd(e,t,n="edit"){if(z(e,"View name"),!h)throw new Error("No database initialized");if(ae)throw new Error("View validation is unavailable because the database is read-only");let r=Ee(t),{storedSql:o,columnListSql:i}=Xa(e,n),a=V("sp_validate_view");x(`SAVEPOINT ${a}`);try{let s=await G();typeof o=="string"&&x(`DROP VIEW ${oe(e)}`),x(ct(e,r,i)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),we(s,await G()),x(`ROLLBACK TO ${a}`),x(`RELEASE ${a}`)}catch(s){throw W(a,"validateViewDefinition"),s}}async function Gd(e,t,n=50,r="edit",o){if(z(e,"View name"),!h)throw new Error("No database initialized");let i=Ee(t),a=Math.max(1,Math.min(100,Math.trunc(n)||50)),{storedSql:s,columnListSql:l}=Xa(e,r);if(ae){let c=C(e);return Gr(l?`WITH ${c} ${l} AS (${i} ) SELECT * FROM ${c} LIMIT ${a}`:`WITH ${c} AS (${i} -) SELECT * FROM ${c} LIMIT ${a}`,o)}let u=V("sp_preview_view");x(`SAVEPOINT ${u}`);try{let c=await G();typeof s=="string"&&x(`DROP VIEW ${oe(e)}`),x(ct(e,i,l)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),we(c,await G());let d=Gr(`SELECT * FROM ${oe(e)} LIMIT ${a}`,o);return x(`ROLLBACK TO ${u}`),x(`RELEASE ${u}`),d}catch(c){throw W(u,"previewViewDefinition"),c}}async function Gd(e,t){if(z(e,"View name"),!h)throw new Error("No database initialized");te("View creation");let n=Ee(t),r=V("sp_create_view");x(`SAVEPOINT ${r}`);try{let o=await G();x(ct(e,n)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`);let i=await On(e);return we(o,await G()),x(`RELEASE ${r}`),i}catch(o){throw W(r,"createView"),o}}async function Yd(e,t,n=!0,r,o){if(!h)throw new Error("No database initialized");te("View editing");let i=Ee(t),a=V("sp_edit_view");x(`SAVEPOINT ${a}`);try{let s=await On(e);Qt(s),Kt(r,s.sql,o,s.triggers);let l=await G();if(x(`DROP VIEW ${oe(e)}`),x(ct(e,i,s.columnListSql,s.columns)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),n){let d=(h.exec(`PRAGMA main.table_info(${C(e)})`)[0]?.values??[]).map(f=>{if(typeof f[1]!="string")throw new Error(`SQLite returned invalid column metadata for view ${e}`);return f[1]});pi(s.triggers,d);for(let f of s.triggers)x(cr(f))}let u=await On(e);return we(l,await G()),x(`RELEASE ${a}`),{before:s,after:u}}catch(s){throw W(a,"editView"),s}}async function Jd(e,t,n){if(!h)throw new Error("No database initialized");te("View deletion");let r=V("sp_drop_view");x(`SAVEPOINT ${r}`);try{let o=await za(e,!0);Qt(o),Kt(t,o.sql,n,o.triggers);let i=await G();return x(`DROP VIEW ${oe(e)}`),we(i,await G()),x(`RELEASE ${r}`),o}catch(o){throw W(r,"dropView"),o}}async function et(e,t,n){te("View history replay");let r=V("sp_restore_view");x(`SAVEPOINT ${r}`);try{let o=await Ka(e,!0);o&&Qt(o),hi(t,o);let i=await G();if(o&&x(`DROP VIEW ${oe(e)}`),n){x(n.sql),ot(`EXPLAIN SELECT * FROM ${oe(n.identifier)}`);for(let a of n.triggers)x(cr(a))}we(i,await G()),x(`RELEASE ${r}`)}catch(o){throw W(r,"restoreViewDefinition"),o}}function vn(){let e=h.exec("SELECT changes()",void 0,{useBigInt:!0})[0]?.values?.[0]?.[0],t=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(t)||t<0)throw new Error("SQLite returned an invalid changes() count");return t}async function io(e,t){if(!Array.isArray(t)||t.length===0)throw new J;t.forEach(xt);let n=await le(e),r=V("sp_history_delete_rows");x(`SAVEPOINT ${r}`);try{De("DELETE",e);for(let o of t){let i=Q(o.rowId,n),a=Lr(o,ne);if(h.run(`DELETE FROM ${L(e)} WHERE (${i.sql}) AND (${a.sql})`,P([...i.params,...a.params])),vn()!==1)throw new _e(e)}x(`RELEASE ${r}`)}catch(o){throw W(r,"deleteRowHistorySnapshots"),o}}async function so(e,t){if(!Array.isArray(t)||t.length===0)throw new J;let n=await le(e),r=t.map(i=>({snapshot:i,states:xt(i),writes:ks(i,ne)})),o=V("sp_history_restore_rows");x(`SAVEPOINT ${o}`);try{for(let i of r){De("INSERT",e,i.states.map(l=>l.column));let a=Q(i.snapshot.rowId,n);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE ${a.sql} LIMIT 1`,P(a.params))[0]?.values.length??0)!==0)throw new _e(e)}for(let i of r){let a=i.writes.map(f=>f.column),s=i.writes.map(f=>f.write.sql),l=i.writes.flatMap(f=>f.write.params);if(n.kind==="rowid"&&!a.some(f=>f.toLowerCase()==="rowid")&&(a.unshift("rowid"),s.unshift(ne(i.snapshot.rowId)),l.unshift(i.snapshot.rowId)),h.run(`INSERT INTO ${L(e)} (${a.map(C).join(", ")}) VALUES (${s.join(", ")})`,P(l)),vn()!==1)throw new _e(e);let u=Q(i.snapshot.rowId,n),c=Lr(i.snapshot,ne);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE (${u.sql}) AND (${c.sql}) LIMIT 2`,P([...u.params,...c.params]))[0]?.values.length??0)!==1)throw new _e(e)}x(`RELEASE ${o}`)}catch(i){throw W(o,"restoreRowHistorySnapshots"),i}}function Zd(e){let t=e.affectedCells??(e.targetRowId!==void 0&&e.targetColumn?[{rowId:e.targetRowId,newRowId:e.newTargetRowId,columnName:e.targetColumn,newValue:e.newValue,operation:e.operation,priorState:e.priorState,postState:e.postState}]:[]);if(t.length===0)throw new Ct;return t.map(n=>(Rt(n.priorState),Rt(n.postState),n))}async function Ga(e,t,n){if(t.undoPolicy==="barrier")throw new Error("Forward-only cell history barriers cannot be replayed");let r=Zd(t),o=r.some(c=>ie(c.rowId));if(o&&!r.every(c=>ie(c.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let i=await le(e);if(o&&i.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);if(!o&&i.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let a=Be(),s=new Map;for(let c of r){let d=s.get(c.rowId)??[];if(d.some(f=>He(f.columnName,c.columnName)))throw new Error(`Cell history for ${e} contains the same column more than once`);d.push(c),s.set(c.rowId,d)}let l=[...s.entries()];n==="undo"&&r.some(c=>c.newRowId!==void 0&&c.newRowId!==c.rowId)&&l.reverse();let u=V("sp_replay_cell_history");x(`SAVEPOINT ${u}`);try{Ot(e,r.map(c=>c.columnName),i.kind==="rowid");for(let[c,d]of l){if(new Set(d.map(p=>p.newRowId??p.rowId)).size!==1)throw new Error(`Cell history for ${e} has inconsistent post-update identities`);let m=d[0].newRowId??c,E=n==="undo"?m:c,y=n==="undo"?c:m,g=Q(E,i),S=d.map(p=>se(p.columnName)),w=h.exec(`SELECT ${S.join(", ")} FROM ${L(e)} WHERE ${g.sql} LIMIT 2`,P(g.params),{useBigInt:!0})[0];if((w?.values.length??0)!==1)throw new fe(e,d.map(p=>p.columnName));let R=d.map((p,b)=>K(w.values[0][b*2],w.values[0][b*2+1],`${e}.${p.columnName}`,{textEncoding:a})),I=d.map((p,b)=>{let N=n==="undo"?p.postState:p.priorState,k=n==="undo"?p.priorState:p.postState,U=R[b];if(p.operation!=="json_patch"){if(!Nr(U,N))throw new fe(e,[p.columnName]);return k}if(U.storageClass!==N.storageClass||p.newValue===void 0)throw new fe(e,[p.columnName]);let j=Ls(U.value,p.newValue,p.priorState.value,p.postState.value,n);if(j.kind==="conflict")throw new fe(e,[p.columnName]);return Object.is(j.value,k.value)?k:K("text",j.value,`${e}.${p.columnName} JSON replay`)}),T=I.map(p=>hn(p,ne)),_=R.map((p,b)=>En(d[b].columnName,p,ne));if(h.run(`UPDATE ${L(e)} SET ${d.map((p,b)=>`${C(p.columnName)} = ${T[b].sql}`).join(", ")} WHERE ${g.sql} AND `+_.map(p=>`(${p.sql})`).join(" AND "),P([...T.flatMap(p=>p.params),...g.params,..._.flatMap(p=>p.params)])),vn()!==1)throw new fe(e,d.map(p=>p.columnName));let $=Q(y,i),O=h.exec(`SELECT ${S.join(", ")} FROM ${L(e)} WHERE ${$.sql} LIMIT 2`,P($.params),{useBigInt:!0})[0];if((O?.values.length??0)!==1)throw new fe(e,d.map(p=>p.columnName));if(!I.every((p,b)=>Nr(p,K(O.values[0][b*2],O.values[0][b*2+1],`${e}.${d[b].columnName}`,{textEncoding:a}))))throw new fe(e,d.map(p=>p.columnName))}x(`RELEASE ${u}`)}catch(c){throw W(u,"replayCellHistory"),c}}async function ef(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,newTargetRowId:s,targetColumn:l,priorValue:u,newValue:c,operation:d,deletedRows:f,insertedRow:m}=e;if(n)switch(t){case"cell_update":await Ga(n,e,"undo");return;case"row_insert":if(e.importedRows){await io(n,Ha(e.importedRows).reverse());return}if(!m||a===void 0)throw new J;if(typeof m.rowId!=typeof a||String(m.rowId)!==String(a))throw new J;await io(n,[m]);return;case"row_delete":{if(!f||f.length===0)throw new J;await so(n,f);return}case"view_create":if(o)await et(n,o,null);else throw new Error("Cannot undo view_create: missing view definition");return;case"view_edit":if(r&&o)await et(n,o,r);else throw new Error("Cannot undo view_edit: missing view definition");return;case"view_drop":if(r)await et(n,null,r);else throw new Error("Cannot undo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be undone: this operation is recorded as a history barrier, not a replayable change`)}}async function tf(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,targetColumn:s,newValue:l,operation:u,rowData:c,affectedRowIds:d,insertedRow:f,deletedRows:m}=e;if(n)switch(t){case"cell_update":await Ga(n,e,"redo");return;case"row_insert":{if(e.importedRows){await so(n,Ha(e.importedRows));return}if(!f)throw new J;await so(n,[f]);return}case"row_delete":if(!m||m.length===0)throw new J;await io(n,m);return;case"view_create":if(o)await et(n,null,o);else throw new Error("Cannot redo view_create: missing view definition");return;case"view_edit":if(r&&o)await et(n,r,o);else throw new Error("Cannot redo view_edit: missing view definition");return;case"view_drop":if(r)await et(n,r,null);else throw new Error("Cannot redo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be redone: this operation is recorded as a history barrier, not a replayable change`)}}function nf(e,t){let n=new Map;for(let r of t){z(r.column,"Column name");let o;ie(r.rowId)?(Xi(r.rowId),o=`primary-key:${r.rowId}`):o=`rowid:${String(H(r.rowId))}`;let i=n.get(o)??[];if(i.some(a=>He(a,r.column)))throw new Error(`Batch update for ${e} contains a duplicate row identity/column target: ${String(r.rowId)} / ${r.column}`);i.push(r.column),n.set(o,i)}}async function Ya(e,t,n,r,o){if(t.forEach(c=>ve(c.rowId)),!h)throw new Error("No database initialized");if(te("Batch cell updates"),t.length===0)return[];nf(e,t);let i=o===lo,a=i?0:Je(t.map(c=>c.value),r),s=Be();if(t.some(c=>ie(c.rowId))){if(!t.every(f=>ie(f.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let c=await le(e);if(c.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let d=V("sp_update_pk_batch");x(`SAVEPOINT ${d}`);try{if(Ot(e,t.map(E=>E.column),!1),!i&&r!==void 0)for(let E of t){let y=await _n({table:e,rowId:E.rowId,column:E.column});if((y.storageClass==="text"||y.storageClass==="blob")&&y.byteLength>a)throw new Ge(e,E.column,y.storageClass,y.byteLength,a)}let f=new Map;for(let E of t){let y=f.get(E.rowId)??[];y.push(E),f.set(E.rowId,y)}let m=[];for(let[E,y]of f){let g=Q(E,c),S=[...new Set(y.map(p=>p.column))];if(S.length!==y.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let w=h.exec(`SELECT ${S.map(se).join(", ")} FROM ${L(e)} WHERE ${g.sql} LIMIT 2`,P(g.params),{useBigInt:!0})[0];if((w?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let R=y.map((p,b)=>{let N=K(w.values[0][b*2],w.values[0][b*2+1],`${e}.${p.column}`,{textEncoding:s}),k=N.value,U=yn(p.value,k,p.operation??"set"),j=U.operation==="json_patch"?no(k,U.value):U.value;return!i&&U.operation==="json_patch"&&Ye(j,a),{update:p,priorValue:k,priorState:N,prepared:U,storedValue:j}}),I=R.map(({update:p,storedValue:b})=>`${C(p.column)} = ${ne(b)}`).join(", ");if(h.run(`UPDATE ${L(e)} SET ${I} WHERE ${g.sql}`,P([...R.map(p=>p.storedValue),...g.params])),vn()!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let T=[];for(let p of R)c.columns.findIndex(N=>N.identifier===p.update.column)>=0&&T.push({column:p.update.column,value:p.storedValue});let _=Sr(E,c,T),$=$n(e,c,Q(_,c),to(e)),O=Q($,c),D=h.exec(`SELECT ${S.map(se).join(", ")} FROM ${L(e)} WHERE ${O.sql} LIMIT 2`,P(O.params),{useBigInt:!0})[0];if((D?.values.length??0)!==1)throw to(e);for(let[p,b]of R.entries())m.push({rowId:E,newRowId:$,columnName:b.update.column,priorValue:b.priorValue,newValue:b.prepared.value,priorState:b.priorState,postState:K(D.values[0][p*2],D.values[0][p*2+1],`${e}.${b.update.column}`,{textEncoding:s}),operation:b.prepared.operation})}return x(`RELEASE ${d}`),m}catch(f){throw W(d,"updatePrimaryKeyCellBatch"),f}}if((await le(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let u=V("sp_update_cell_batch");x(`SAVEPOINT ${u}`);try{if(!i&&r!==void 0)for(let T of t){let _=await _n({table:e,rowId:T.rowId,column:T.column});if((_.storageClass==="text"||_.storageClass==="blob")&&_.byteLength>a)throw new Ge(e,T.column,_.storageClass,_.byteLength,a)}let c=fo(e);if(Ot(e,t.map(T=>T.column)),c!==void 0&&t.some(T=>He(T.column,c))){let T=Sd(e,c,t,a,i);return x(`RELEASE ${u}`),T}let d=[...new Set(t.map(T=>H(T.rowId)))],f=[...new Set(t.map(T=>T.column))],m=L(e),E=new Map,y=ze(d,{kind:"rowid"});for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT), ${f.map(se).join(", ")} FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[]){let O=new Map;f.forEach((D,p)=>O.set(D,K($[p*2+1],$[p*2+2],`${e}.${D}`,{textEncoding:s}))),E.set(String(H($[0])),O)}}let g=[],S=t.map(T=>{let _=H(T.rowId),$=E.get(String(_));if(!$)throw new Error(`Cannot update ${e}.${T.column}: row ${T.rowId} no longer exists`);let O=$.get(T.column);if(!O)throw new Error(`Cannot update ${e}.${T.column}: cell state is unavailable`);let D=O.value,p=yn(T.value,D,T.operation??"set");if(!i&&p.operation==="json_patch"){let b=no(D,p.value);Ye(b,a)}return g.push({rowId:_,columnName:T.column,priorValue:D,newValue:p.value,priorState:O,operation:p.operation}),{...T,rowId:_,value:p.value,operation:p.operation}});for(let T of S){let _=C(T.column),O=T.operation==="json_patch"?`UPDATE ${m} SET ${_} = json_patch(COALESCE(${_}, '{}'), ?) WHERE rowid = ?`:`UPDATE ${m} SET ${_} = ${ne(T.value)} WHERE rowid = ?`;h.run(O,P([T.value,T.rowId]))}let w=new Set;for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT) FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[])w.add(String(H($[0])))}if(d.some(T=>!w.has(String(T))))throw yt(e);let R=new Map;for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT), ${f.map(se).join(", ")} FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[]){let O=new Map;f.forEach((D,p)=>O.set(D,K($[p*2+1],$[p*2+2],`${e}.${D}`,{textEncoding:s}))),R.set(String(H($[0])),O)}}let I=g.map(T=>{let _=R.get(String(T.rowId))?.get(T.columnName);if(!_)throw yt(e);return{...T,postState:_}});return x(`RELEASE ${u}`),I}catch(c){throw W(u,"updateCellBatch"),c}}async function rf(e,t,n,r){if(z(e,"Table name"),z(t,"Column name"),!h)throw new Error("No database initialized");te("Column creation"),Pu(n);let o=`ALTER TABLE ${L(e)} ADD COLUMN ${C(t)} ${n}`;r!=null&&r!==""&&(o+=` DEFAULT ${Du(r)}`);let i=V("sp_add_column");x(`SAVEPOINT ${i}`);try{let a=await G();x(o),we(a,await G()),x(`RELEASE ${i}`)}catch(a){throw W(i,"addColumn"),a}}async function of(){if(!h)return!1;try{return h.exec("SELECT 1"),!0}catch{return!1}}async function sf(){throw new Error("Reload must be handled by the demo host so it can reinitialize from the original database source")}var Ia,ya,$u,ao,ha,vu,ku,An,lo,h,Ea,Aa,Jr,ae,Rn,Nt,_t,In,_a,co,Na,tt,Pe,wa,Ku,ba,ed,td,Ba,Ma,nd,qa,eo,xn,Ra,xa,Ja=M(()=>{"use strict";A();Ft();ut();Si();mr();Y();hr();bs();xs();Ir();vs();Or();Ps();Vs();Et();pt();fn();Qs();zs();Zs();Wr();ia();Cn();fa();ma();ga();wn();Ia=3e4,ya=8192,$u=1e3,ao=16*1024*1024,ha=64*1024,vu="16 MiB (16,777,216 bytes)",ku=1024*1024*1024,An=2e3,lo=Symbol("history-replay-edit"),h=null,Ea=null,Aa=!1,Jr=Ia,ae=!1,Rn=null,Nt="memory",_t=0,In=At,_a=jr(void 0),co=Br,Na=Mr,tt=null,Pe=new Set;wa=0;Ku=8;ba=100;ed=4*65536,td=65536,Ba=Object.freeze(["id","parent","notused","detail"]),Ma="SQLite returned an unsupported query plan.",nd=/^pragma\b/i;qa=/--[^\r\n]*|\/\*[\s\S]*?\*\/|'(?:[^']|'')*'|"(?:[^"]|"")*"|`(?:[^`]|``)*`|\[[^\]]*\]|[A-Za-z_\u0080-\uffff][A-Za-z_0-9$\u0080-\uffff]*|[^\s]/g;eo=class{constructor(t=ao){this.chunks=[],this.pending="",this.outputBytes=0,this.capBytes=t}append(t){if(this.outputBytes+=Zr(t),!Number.isSafeInteger(this.outputBytes)||this.outputBytes>this.capBytes)throw uo(this.capBytes);let n=0;for(;n0&&t.charCodeAt(o-1)>=55296&&t.charCodeAt(o-1)<=56319&&t.charCodeAt(o)>=56320&&t.charCodeAt(o)<=57343&&r--,r===0){this.flush();continue}this.pending+=t.slice(n,n+r),n+=r,this.pending.length>=ha&&this.flush()}}flush(){this.pending.length>0&&(this.chunks.push(this.pending),this.pending="")}finish(){return this.flush(),this.chunks}};xn=40;Ra=64;xa={initializeDatabase:Qu,runQuery:Xu,runConsole:ad,executeReadQuery:Gu,getCellMetadata:_n,openCellReadSession:Vu,readCellChunk:Fu,closeCellReadSession:Wu,exportDatabase:ld,exportTable:cd,fetchTableData:bd,fetchTableCount:Td,fetchSchema:Cd,getTableInfo:po,getImportTarget:Rd,getPragmas:Ad,setPragma:_d,updateCell:Nd,replaceOversizedCell:Od,insertRow:Ld,insertRowWithHistory:$d,importRows:Md,deleteRows:Vd,findDependentIndexes:Qa,deleteColumns:jd,createTable:Kd,getViewDefinition:On,validateViewDefinition:zd,previewViewDefinition:Xd,createView:Gd,editView:Yd,dropView:Jd,undoModification:ef,redoModification:tf,updateCellBatch:Ya,addColumn:rf,ping:of,refreshFile:sf};self.onmessage=async e=>{let t=e.data;if(!t||t.channel!=="rpc"||!t.content){console.warn("[Worker] Invalid message format",{valueType:t===null?"null":Array.isArray(t)?"array":typeof t,hasRpcChannel:t?.channel==="rpc",hasContent:!!t?.content});return}let{kind:n,messageId:r,targetMethod:o,payload:i}=t.content;if(n!=="invoke")return;if(typeof r!="string"||r.length===0||r.length>256){console.warn("[Worker] Invalid RPC correlation ID");return}let s=typeof o=="string"&&Object.prototype.hasOwnProperty.call(xa,o)?xa[o]:void 0;if(typeof s!="function"){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:`Unknown method: ${typeof o=="string"?o.slice(0,256):""}`}});return}if(!Array.isArray(i)){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:"Worker RPC payload must be an array"}});return}try{ju(o);let l=await s(...i),u={channel:"rpc",content:{kind:"response",messageId:r,success:!0,data:l}};if(o==="exportDatabase"&&l instanceof Uint8Array){let c=l.byteOffset===0&&l.byteLength===l.buffer.byteLength&&l.buffer instanceof ArrayBuffer?l:l.slice();u.content.data=c,self.postMessage(u,[c.buffer])}else self.postMessage(u)}catch(l){let u=Te(l);console.error("[Worker] Method error:",o,u);let c;try{c=oa(l)}catch{}self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:u,...c?{error:c}:{}}})}}});A();rr();await Promise.resolve().then(()=>(Ja(),af));await Fe.start();await Fe.flush();var go=ri();go.kind==="eof"&&tjs.exit(Zo);console.error(`[native-worker] shutting down: ${go.kind} -- ${go.error?.message??""}`);tjs.exit(ei); +) SELECT * FROM ${c} LIMIT ${a}`,o)}let u=V("sp_preview_view");x(`SAVEPOINT ${u}`);try{let c=await G();typeof s=="string"&&x(`DROP VIEW ${oe(e)}`),x(ct(e,i,l)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),we(c,await G());let d=Gr(`SELECT * FROM ${oe(e)} LIMIT ${a}`,o);return x(`ROLLBACK TO ${u}`),x(`RELEASE ${u}`),d}catch(c){throw W(u,"previewViewDefinition"),c}}async function Yd(e,t){if(z(e,"View name"),!h)throw new Error("No database initialized");te("View creation");let n=Ee(t),r=V("sp_create_view");x(`SAVEPOINT ${r}`);try{let o=await G();x(ct(e,n)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`);let i=await On(e);return we(o,await G()),x(`RELEASE ${r}`),i}catch(o){throw W(r,"createView"),o}}async function Jd(e,t,n=!0,r,o){if(!h)throw new Error("No database initialized");te("View editing");let i=Ee(t),a=V("sp_edit_view");x(`SAVEPOINT ${a}`);try{let s=await On(e);Qt(s),Kt(r,s.sql,o,s.triggers);let l=await G();if(x(`DROP VIEW ${oe(e)}`),x(ct(e,i,s.columnListSql,s.columns)),ot(`EXPLAIN SELECT * FROM ${oe(e)}`),n){let d=(h.exec(`PRAGMA main.table_info(${C(e)})`)[0]?.values??[]).map(f=>{if(typeof f[1]!="string")throw new Error(`SQLite returned invalid column metadata for view ${e}`);return f[1]});pi(s.triggers,d);for(let f of s.triggers)x(cr(f))}let u=await On(e);return we(l,await G()),x(`RELEASE ${a}`),{before:s,after:u}}catch(s){throw W(a,"editView"),s}}async function Zd(e,t,n){if(!h)throw new Error("No database initialized");te("View deletion");let r=V("sp_drop_view");x(`SAVEPOINT ${r}`);try{let o=await za(e,!0);Qt(o),Kt(t,o.sql,n,o.triggers);let i=await G();return x(`DROP VIEW ${oe(e)}`),we(i,await G()),x(`RELEASE ${r}`),o}catch(o){throw W(r,"dropView"),o}}async function et(e,t,n){te("View history replay");let r=V("sp_restore_view");x(`SAVEPOINT ${r}`);try{let o=await Ka(e,!0);o&&Qt(o),hi(t,o);let i=await G();if(o&&x(`DROP VIEW ${oe(e)}`),n){x(n.sql),ot(`EXPLAIN SELECT * FROM ${oe(n.identifier)}`);for(let a of n.triggers)x(cr(a))}we(i,await G()),x(`RELEASE ${r}`)}catch(o){throw W(r,"restoreViewDefinition"),o}}function vn(){let e=h.exec("SELECT changes()",void 0,{useBigInt:!0})[0]?.values?.[0]?.[0],t=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(t)||t<0)throw new Error("SQLite returned an invalid changes() count");return t}async function io(e,t){if(!Array.isArray(t)||t.length===0)throw new J;t.forEach(xt);let n=await le(e),r=V("sp_history_delete_rows");x(`SAVEPOINT ${r}`);try{De("DELETE",e);for(let o of t){let i=Q(o.rowId,n),a=Lr(o,ne);if(h.run(`DELETE FROM ${L(e)} WHERE (${i.sql}) AND (${a.sql})`,P([...i.params,...a.params])),vn()!==1)throw new _e(e)}x(`RELEASE ${r}`)}catch(o){throw W(r,"deleteRowHistorySnapshots"),o}}async function so(e,t){if(!Array.isArray(t)||t.length===0)throw new J;let n=await le(e),r=t.map(i=>({snapshot:i,states:xt(i),writes:ks(i,ne)})),o=V("sp_history_restore_rows");x(`SAVEPOINT ${o}`);try{for(let i of r){De("INSERT",e,i.states.map(l=>l.column));let a=Q(i.snapshot.rowId,n);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE ${a.sql} LIMIT 1`,P(a.params))[0]?.values.length??0)!==0)throw new _e(e)}for(let i of r){let a=i.writes.map(f=>f.column),s=i.writes.map(f=>f.write.sql),l=i.writes.flatMap(f=>f.write.params);if(n.kind==="rowid"&&!a.some(f=>f.toLowerCase()==="rowid")&&(a.unshift("rowid"),s.unshift(ne(i.snapshot.rowId)),l.unshift(i.snapshot.rowId)),h.run(`INSERT INTO ${L(e)} (${a.map(C).join(", ")}) VALUES (${s.join(", ")})`,P(l)),vn()!==1)throw new _e(e);let u=Q(i.snapshot.rowId,n),c=Lr(i.snapshot,ne);if((h.exec(`SELECT 1 FROM ${L(e)} WHERE (${u.sql}) AND (${c.sql}) LIMIT 2`,P([...u.params,...c.params]))[0]?.values.length??0)!==1)throw new _e(e)}x(`RELEASE ${o}`)}catch(i){throw W(o,"restoreRowHistorySnapshots"),i}}function ef(e){let t=e.affectedCells??(e.targetRowId!==void 0&&e.targetColumn?[{rowId:e.targetRowId,newRowId:e.newTargetRowId,columnName:e.targetColumn,newValue:e.newValue,operation:e.operation,priorState:e.priorState,postState:e.postState}]:[]);if(t.length===0)throw new Ct;return t.map(n=>(Rt(n.priorState),Rt(n.postState),n))}async function Ga(e,t,n){if(t.undoPolicy==="barrier")throw new Error("Forward-only cell history barriers cannot be replayed");let r=ef(t),o=r.some(c=>ie(c.rowId));if(o&&!r.every(c=>ie(c.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let i=await le(e);if(o&&i.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);if(!o&&i.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let a=Be(),s=new Map;for(let c of r){let d=s.get(c.rowId)??[];if(d.some(f=>He(f.columnName,c.columnName)))throw new Error(`Cell history for ${e} contains the same column more than once`);d.push(c),s.set(c.rowId,d)}let l=[...s.entries()];n==="undo"&&r.some(c=>c.newRowId!==void 0&&c.newRowId!==c.rowId)&&l.reverse();let u=V("sp_replay_cell_history");x(`SAVEPOINT ${u}`);try{Ot(e,r.map(c=>c.columnName),i.kind==="rowid");for(let[c,d]of l){if(new Set(d.map(p=>p.newRowId??p.rowId)).size!==1)throw new Error(`Cell history for ${e} has inconsistent post-update identities`);let m=d[0].newRowId??c,E=n==="undo"?m:c,y=n==="undo"?c:m,g=Q(E,i),S=d.map(p=>se(p.columnName)),w=h.exec(`SELECT ${S.join(", ")} FROM ${L(e)} WHERE ${g.sql} LIMIT 2`,P(g.params),{useBigInt:!0})[0];if((w?.values.length??0)!==1)throw new fe(e,d.map(p=>p.columnName));let R=d.map((p,b)=>K(w.values[0][b*2],w.values[0][b*2+1],`${e}.${p.columnName}`,{textEncoding:a})),I=d.map((p,b)=>{let N=n==="undo"?p.postState:p.priorState,k=n==="undo"?p.priorState:p.postState,U=R[b];if(p.operation!=="json_patch"){if(!Nr(U,N))throw new fe(e,[p.columnName]);return k}if(U.storageClass!==N.storageClass||p.newValue===void 0)throw new fe(e,[p.columnName]);let j=Ls(U.value,p.newValue,p.priorState.value,p.postState.value,n);if(j.kind==="conflict")throw new fe(e,[p.columnName]);return Object.is(j.value,k.value)?k:K("text",j.value,`${e}.${p.columnName} JSON replay`)}),T=I.map(p=>hn(p,ne)),_=R.map((p,b)=>En(d[b].columnName,p,ne));if(h.run(`UPDATE ${L(e)} SET ${d.map((p,b)=>`${C(p.columnName)} = ${T[b].sql}`).join(", ")} WHERE ${g.sql} AND `+_.map(p=>`(${p.sql})`).join(" AND "),P([...T.flatMap(p=>p.params),...g.params,..._.flatMap(p=>p.params)])),vn()!==1)throw new fe(e,d.map(p=>p.columnName));let $=Q(y,i),O=h.exec(`SELECT ${S.join(", ")} FROM ${L(e)} WHERE ${$.sql} LIMIT 2`,P($.params),{useBigInt:!0})[0];if((O?.values.length??0)!==1)throw new fe(e,d.map(p=>p.columnName));if(!I.every((p,b)=>Nr(p,K(O.values[0][b*2],O.values[0][b*2+1],`${e}.${d[b].columnName}`,{textEncoding:a}))))throw new fe(e,d.map(p=>p.columnName))}x(`RELEASE ${u}`)}catch(c){throw W(u,"replayCellHistory"),c}}async function tf(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,newTargetRowId:s,targetColumn:l,priorValue:u,newValue:c,operation:d,deletedRows:f,insertedRow:m}=e;if(n)switch(t){case"cell_update":await Ga(n,e,"undo");return;case"row_insert":if(e.importedRows){await io(n,Ha(e.importedRows).reverse());return}if(!m||a===void 0)throw new J;if(typeof m.rowId!=typeof a||String(m.rowId)!==String(a))throw new J;await io(n,[m]);return;case"row_delete":{if(!f||f.length===0)throw new J;await so(n,f);return}case"view_create":if(o)await et(n,o,null);else throw new Error("Cannot undo view_create: missing view definition");return;case"view_edit":if(r&&o)await et(n,o,r);else throw new Error("Cannot undo view_edit: missing view definition");return;case"view_drop":if(r)await et(n,null,r);else throw new Error("Cannot undo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be undone: this operation is recorded as a history barrier, not a replayable change`)}}async function nf(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,targetColumn:s,newValue:l,operation:u,rowData:c,affectedRowIds:d,insertedRow:f,deletedRows:m}=e;if(n)switch(t){case"cell_update":await Ga(n,e,"redo");return;case"row_insert":{if(e.importedRows){await so(n,Ha(e.importedRows));return}if(!f)throw new J;await so(n,[f]);return}case"row_delete":if(!m||m.length===0)throw new J;await io(n,m);return;case"view_create":if(o)await et(n,null,o);else throw new Error("Cannot redo view_create: missing view definition");return;case"view_edit":if(r&&o)await et(n,r,o);else throw new Error("Cannot redo view_edit: missing view definition");return;case"view_drop":if(r)await et(n,r,null);else throw new Error("Cannot redo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be redone: this operation is recorded as a history barrier, not a replayable change`)}}function rf(e,t){let n=new Map;for(let r of t){z(r.column,"Column name");let o;ie(r.rowId)?(Xi(r.rowId),o=`primary-key:${r.rowId}`):o=`rowid:${String(H(r.rowId))}`;let i=n.get(o)??[];if(i.some(a=>He(a,r.column)))throw new Error(`Batch update for ${e} contains a duplicate row identity/column target: ${String(r.rowId)} / ${r.column}`);i.push(r.column),n.set(o,i)}}async function Ya(e,t,n,r,o){if(t.forEach(c=>ve(c.rowId)),!h)throw new Error("No database initialized");if(te("Batch cell updates"),t.length===0)return[];rf(e,t);let i=o===lo,a=i?0:Je(t.map(c=>c.value),r),s=Be();if(t.some(c=>ie(c.rowId))){if(!t.every(f=>ie(f.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let c=await le(e);if(c.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let d=V("sp_update_pk_batch");x(`SAVEPOINT ${d}`);try{if(Ot(e,t.map(E=>E.column),!1),!i&&r!==void 0)for(let E of t){let y=await _n({table:e,rowId:E.rowId,column:E.column});if((y.storageClass==="text"||y.storageClass==="blob")&&y.byteLength>a)throw new Ge(e,E.column,y.storageClass,y.byteLength,a)}let f=new Map;for(let E of t){let y=f.get(E.rowId)??[];y.push(E),f.set(E.rowId,y)}let m=[];for(let[E,y]of f){let g=Q(E,c),S=[...new Set(y.map(p=>p.column))];if(S.length!==y.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let w=h.exec(`SELECT ${S.map(se).join(", ")} FROM ${L(e)} WHERE ${g.sql} LIMIT 2`,P(g.params),{useBigInt:!0})[0];if((w?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let R=y.map((p,b)=>{let N=K(w.values[0][b*2],w.values[0][b*2+1],`${e}.${p.column}`,{textEncoding:s}),k=N.value,U=yn(p.value,k,p.operation??"set"),j=U.operation==="json_patch"?no(k,U.value):U.value;return!i&&U.operation==="json_patch"&&Ye(j,a),{update:p,priorValue:k,priorState:N,prepared:U,storedValue:j}}),I=R.map(({update:p,storedValue:b})=>`${C(p.column)} = ${ne(b)}`).join(", ");if(h.run(`UPDATE ${L(e)} SET ${I} WHERE ${g.sql}`,P([...R.map(p=>p.storedValue),...g.params])),vn()!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let T=[];for(let p of R)c.columns.findIndex(N=>N.identifier===p.update.column)>=0&&T.push({column:p.update.column,value:p.storedValue});let _=Sr(E,c,T),$=$n(e,c,Q(_,c),to(e)),O=Q($,c),D=h.exec(`SELECT ${S.map(se).join(", ")} FROM ${L(e)} WHERE ${O.sql} LIMIT 2`,P(O.params),{useBigInt:!0})[0];if((D?.values.length??0)!==1)throw to(e);for(let[p,b]of R.entries())m.push({rowId:E,newRowId:$,columnName:b.update.column,priorValue:b.priorValue,newValue:b.prepared.value,priorState:b.priorState,postState:K(D.values[0][p*2],D.values[0][p*2+1],`${e}.${b.update.column}`,{textEncoding:s}),operation:b.prepared.operation})}return x(`RELEASE ${d}`),m}catch(f){throw W(d,"updatePrimaryKeyCellBatch"),f}}if((await le(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let u=V("sp_update_cell_batch");x(`SAVEPOINT ${u}`);try{if(!i&&r!==void 0)for(let T of t){let _=await _n({table:e,rowId:T.rowId,column:T.column});if((_.storageClass==="text"||_.storageClass==="blob")&&_.byteLength>a)throw new Ge(e,T.column,_.storageClass,_.byteLength,a)}let c=fo(e);if(Ot(e,t.map(T=>T.column)),c!==void 0&&t.some(T=>He(T.column,c))){let T=bd(e,c,t,a,i);return x(`RELEASE ${u}`),T}let d=[...new Set(t.map(T=>H(T.rowId)))],f=[...new Set(t.map(T=>T.column))],m=L(e),E=new Map,y=ze(d,{kind:"rowid"});for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT), ${f.map(se).join(", ")} FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[]){let O=new Map;f.forEach((D,p)=>O.set(D,K($[p*2+1],$[p*2+2],`${e}.${D}`,{textEncoding:s}))),E.set(String(H($[0])),O)}}let g=[],S=t.map(T=>{let _=H(T.rowId),$=E.get(String(_));if(!$)throw new Error(`Cannot update ${e}.${T.column}: row ${T.rowId} no longer exists`);let O=$.get(T.column);if(!O)throw new Error(`Cannot update ${e}.${T.column}: cell state is unavailable`);let D=O.value,p=yn(T.value,D,T.operation??"set");if(!i&&p.operation==="json_patch"){let b=no(D,p.value);Ye(b,a)}return g.push({rowId:_,columnName:T.column,priorValue:D,newValue:p.value,priorState:O,operation:p.operation}),{...T,rowId:_,value:p.value,operation:p.operation}});for(let T of S){let _=C(T.column),O=T.operation==="json_patch"?`UPDATE ${m} SET ${_} = json_patch(COALESCE(${_}, '{}'), ?) WHERE rowid = ?`:`UPDATE ${m} SET ${_} = ${ne(T.value)} WHERE rowid = ?`;h.run(O,P([T.value,T.rowId]))}let w=new Set;for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT) FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[])w.add(String(H($[0])))}if(d.some(T=>!w.has(String(T))))throw yt(e);let R=new Map;for(let T of y){let _=h.exec(`SELECT CAST(rowid AS TEXT), ${f.map(se).join(", ")} FROM ${m} WHERE ${T.sql}`,P(T.params),{useBigInt:!0})[0];for(let $ of _?.values??[]){let O=new Map;f.forEach((D,p)=>O.set(D,K($[p*2+1],$[p*2+2],`${e}.${D}`,{textEncoding:s}))),R.set(String(H($[0])),O)}}let I=g.map(T=>{let _=R.get(String(T.rowId))?.get(T.columnName);if(!_)throw yt(e);return{...T,postState:_}});return x(`RELEASE ${u}`),I}catch(c){throw W(u,"updateCellBatch"),c}}async function of(e,t,n,r){if(z(e,"Table name"),z(t,"Column name"),!h)throw new Error("No database initialized");te("Column creation"),Du(n);let o=`ALTER TABLE ${L(e)} ADD COLUMN ${C(t)} ${n}`;r!=null&&r!==""&&(o+=` DEFAULT ${Bu(r)}`);let i=V("sp_add_column");x(`SAVEPOINT ${i}`);try{let a=await G();x(o),we(a,await G()),x(`RELEASE ${i}`)}catch(a){throw W(i,"addColumn"),a}}async function sf(){if(!h)return!1;try{return h.exec("SELECT 1"),!0}catch{return!1}}async function af(){throw new Error("Reload must be handled by the demo host so it can reinitialize from the original database source")}var Ia,ya,vu,ao,ha,ku,Pu,An,lo,h,Ea,Aa,Jr,ae,Rn,Nt,_t,In,_a,co,Na,tt,Pe,wa,zu,ba,td,nd,Ba,Ma,rd,qa,eo,xn,Ra,xa,Ja=M(()=>{"use strict";A();Ft();ut();Si();mr();Y();hr();bs();xs();Ir();vs();Or();Ps();Vs();Et();pt();fn();Qs();zs();Zs();Wr();ia();Cn();fa();ma();ga();wn();Ia=3e4,ya=8192,vu=1e3,ao=16*1024*1024,ha=64*1024,ku="16 MiB (16,777,216 bytes)",Pu=1024*1024*1024,An=2e3,lo=Symbol("history-replay-edit"),h=null,Ea=null,Aa=!1,Jr=Ia,ae=!1,Rn=null,Nt="memory",_t=0,In=At,_a=jr(void 0),co=Br,Na=Mr,tt=null,Pe=new Set;wa=0;zu=8;ba=100;td=4*65536,nd=65536,Ba=Object.freeze(["id","parent","notused","detail"]),Ma="SQLite returned an unsupported query plan.",rd=/^pragma\b/i;qa=/--[^\r\n]*|\/\*[\s\S]*?\*\/|'(?:[^']|'')*'|"(?:[^"]|"")*"|`(?:[^`]|``)*`|\[[^\]]*\]|[A-Za-z_\u0080-\uffff][A-Za-z_0-9$\u0080-\uffff]*|[^\s]/g;eo=class{constructor(t=ao){this.chunks=[],this.pending="",this.outputBytes=0,this.capBytes=t}append(t){if(this.outputBytes+=Zr(t),!Number.isSafeInteger(this.outputBytes)||this.outputBytes>this.capBytes)throw uo(this.capBytes);let n=0;for(;n0&&t.charCodeAt(o-1)>=55296&&t.charCodeAt(o-1)<=56319&&t.charCodeAt(o)>=56320&&t.charCodeAt(o)<=57343&&r--,r===0){this.flush();continue}this.pending+=t.slice(n,n+r),n+=r,this.pending.length>=ha&&this.flush()}}flush(){this.pending.length>0&&(this.chunks.push(this.pending),this.pending="")}finish(){return this.flush(),this.chunks}};xn=40;Ra=64;xa={initializeDatabase:Ku,runQuery:Gu,runConsole:ld,executeReadQuery:Yu,getCellMetadata:_n,openCellReadSession:Fu,readCellChunk:Wu,closeCellReadSession:ju,exportDatabase:cd,exportTable:ud,fetchTableData:Td,fetchTableCount:Cd,fetchSchema:Rd,getTableInfo:po,getImportTarget:xd,getPragmas:_d,setPragma:Nd,updateCell:Od,replaceOversizedCell:Ld,insertRow:$d,insertRowWithHistory:vd,importRows:Ud,deleteRows:Fd,findDependentIndexes:Qa,deleteColumns:Hd,createTable:zd,getViewDefinition:On,validateViewDefinition:Xd,previewViewDefinition:Gd,createView:Yd,editView:Jd,dropView:Zd,undoModification:tf,redoModification:nf,updateCellBatch:Ya,addColumn:of,ping:sf,refreshFile:af};self.onmessage=async e=>{let t=e.data;if(!t||t.channel!=="rpc"||!t.content){console.warn("[Worker] Invalid message format",{valueType:t===null?"null":Array.isArray(t)?"array":typeof t,hasRpcChannel:t?.channel==="rpc",hasContent:!!t?.content});return}let{kind:n,messageId:r,targetMethod:o,payload:i}=t.content;if(n!=="invoke")return;if(typeof r!="string"||r.length===0||r.length>256){console.warn("[Worker] Invalid RPC correlation ID");return}let s=typeof o=="string"&&Object.prototype.hasOwnProperty.call(xa,o)?xa[o]:void 0;if(typeof s!="function"){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:`Unknown method: ${typeof o=="string"?o.slice(0,256):""}`}});return}if(!Array.isArray(i)){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:"Worker RPC payload must be an array"}});return}try{Hu(o);let l=await s(...i),u={channel:"rpc",content:{kind:"response",messageId:r,success:!0,data:l}};if(o==="exportDatabase"&&l instanceof Uint8Array){let c=l.byteOffset===0&&l.byteLength===l.buffer.byteLength&&l.buffer instanceof ArrayBuffer?l:l.slice();u.content.data=c,self.postMessage(u,[c.buffer])}else self.postMessage(u)}catch(l){let u=Te(l);console.error("[Worker] Method error:",o,u);let c;try{c=oa(l)}catch{}self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:u,...c?{error:c}:{}}})}}});A();rr();await Promise.resolve().then(()=>(Ja(),lf));await Fe.start();await Fe.flush();var go=ri();go.kind==="eof"&&tjs.exit(Zo);console.error(`[native-worker] shutting down: ${go.kind} -- ${go.error?.message??""}`);tjs.exit(ei); diff --git a/viewer-dist/native/tjs b/viewer-dist/native/tjs index e20f98c87f33c16dacd1522370313abfb2ec1010..b89e20e3a204839a15b55757f5a0b82a83feb3ae 100755 GIT binary patch delta 222422 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%0A6b|{6Ktr_N1RUq0n3j#Ckj(=%lFP* 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

Xg4b&UXu-6SRpa8ru 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 diff --git a/viewer-dist/worker.js b/viewer-dist/worker.js index fd6a3d6..a155539 100644 --- a/viewer-dist/worker.js +++ b/viewer-dist/worker.js @@ -1,4 +1,4 @@ -/*! sqlite-viewer-bundle-sha256:6db5b813ec6dab7ffce8ce541c6c45a4a9a7fcf2bc765e5818d38ea17a1c9de6 */ +/*! sqlite-viewer-bundle-sha256:bffe8b455b427ace6df2bf20f5fb9b71be7e73ca63740be649a53206152853fd */ "use strict";(()=>{var As=Object.defineProperty;var Ns=(e,t,n)=>t in e?As(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var D=(e,t,n)=>Ns(e,typeof t!="symbol"?t+"":t,n);function de(e){if(e==="utf-8")return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});let t=e==="utf-16le";return{decode(n){if(n.length%2!==0)throw new TypeError(`Invalid ${e}: odd byte length`);let r=a=>t?n[a]|n[a+1]<<8:n[a]<<8|n[a+1],o=[],i="";for(let a=0;a=55296&&s<=56319){let l=a+257343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s,l),a+=2}else{if(s>=56320&&s<=57343)throw new TypeError(`Invalid ${e}: unpaired surrogate`);i+=String.fromCharCode(s)}i.length>=8192&&(o.push(i),i="")}return o.push(i),o.join("")}}}function w(e){return`"${e.replace(/"/g,'""')}"`}function N(e){return`main.${w(e)}`}function W(e,t="Identifier"){if(typeof e!="string"||e.length===0)throw new Error(`${t} is required`);if(e.includes("\0"))throw new Error(`${t} cannot contain NUL characters`)}function gn(e){if(!e||typeof e!="string")throw new Error("Invalid SQL type: Type must be a non-empty string");if(/['";\-\/\*]/.test(e))throw new Error(`Invalid SQL type: "${e}" contains potentially unsafe characters`);if(!/^[a-zA-Z0-9_\s]+(?:\([0-9\s,]+\)[a-zA-Z0-9_\s]*)?$/.test(e.trim()))throw new Error(`Invalid SQL type: "${e}" does not match allowed format`)}function Or(e){if(e==null)return"NULL";if(typeof e=="number")return String(e);if(typeof e=="bigint")return e.toString();if(typeof e=="string"){if(e.includes("\0")){let n=new TextEncoder().encode(e);return`CAST(X'${Array.from(n).map(o=>o.toString(16).padStart(2,"0")).join("")}' AS TEXT)`}return`'${e.replace(/'/g,"''")}'`}return e instanceof Uint8Array?`X'${Array.from(e).map(n=>n.toString(16).padStart(2,"0")).join("")}'`:`'${String(e).replace(/'/g,"''")}'`}function et(e,t="\\"){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`[${n}%_]`,"g");return e.replace(r,o=>t+o)}var _s=-9223372036854775808n,$s=9223372036854775807n;function M(e){let t=typeof e;if(t!=="string"&&t!=="number"&&t!=="bigint")throw new Error(`Invalid rowid: ${e}`);if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`Invalid rowid: ${e}`);return e}let n=typeof e=="string"?e.trim():e.toString();if(!/^[+-]?\d+$/.test(n))throw new Error(`Invalid rowid: ${e}`);let r=BigInt(n);if(r<_s||r>$s)throw new Error(`Invalid rowid: ${e}`);let o=Number(r);return Number.isSafeInteger(o)?o:r.toString()}var bt=[{sql:"SELECT name, sql FROM main.sqlite_schema WHERE type = 'trigger' AND tbl_name = ? COLLATE NOCASE ORDER BY rowid",params:e=>[e],temporary:!1},{sql:"SELECT temp_trigger.name, temp_trigger.sql, EXISTS (SELECT 1 FROM sqlite_temp_schema AS temp_view WHERE temp_view.type = 'view' AND temp_view.name = ? COLLATE NOCASE) FROM sqlite_temp_schema AS temp_trigger WHERE temp_trigger.type = 'trigger' AND temp_trigger.tbl_name = ? COLLATE NOCASE ORDER BY temp_trigger.rowid",params:e=>[e,e],temporary:!0}];function Lr(e){return/[A-Za-z0-9_$\u0080-\uFFFF]/.test(e)}function kr(e){let t=[],n=0;for(;nt.toLowerCase())}function De(e,t){if(!fe(e[t]))throw new Error("Expected an SQL identifier");return t+1}function Os(e,t){return t=De(e,t),e[t]?.kind==="symbol"&&e[t].value==="."&&(t=De(e,t+1)),t}function Tt(e){let t=kr(e),n=[],r,o=0,i=u=>{if(!F(t[o],u))throw new Error(`Expected ${u} in stored CREATE TRIGGER SQL`);o++};if(i("CREATE"),(F(t[o],"TEMP")||F(t[o],"TEMPORARY"))&&o++,i("TRIGGER"),F(t[o],"IF")&&(o++,i("NOT"),i("EXISTS")),o=Os(t,o),F(t[o],"BEFORE")||F(t[o],"AFTER")?o++:F(t[o],"INSTEAD")&&(o++,i("OF")),F(t[o],"INSERT"))r="insert",o++;else if(F(t[o],"DELETE"))r="delete",o++;else if(F(t[o],"UPDATE")){if(r="update",o++,F(t[o],"OF")){if(o++,!fe(t[o]))throw new Error("Expected an SQL identifier after UPDATE OF");for(n.push(t[o]),o=De(t,o);t[o]?.kind==="symbol"&&t[o].value===",";){if(o++,!fe(t[o]))throw new Error("Expected an SQL identifier in UPDATE OF column list");n.push(t[o]),o=De(t,o)}}}else throw new Error("Expected a trigger event in stored CREATE TRIGGER SQL");i("ON");let a=o,s=t[o];o=De(t,o);let l;t[o]?.kind==="symbol"&&t[o].value==="."&&(l=s.value,o=De(t,o+1));let d=o,c=t.findIndex((u,f)=>f>=o&&F(u,"BEGIN"));if(c<0)throw new Error("Expected BEGIN in stored CREATE TRIGGER SQL");return{tokens:t,event:r,targetSchema:l,targetStartIndex:a,updateOfColumns:n,referenceStartIndex:d,bodyStartIndex:c+1}}function hn(e){let t=Tt(e);return{event:t.event,targetSchema:t.targetSchema,updateOfColumns:t.updateOfColumns.map(n=>n.value)}}function Ct(e,t,n,r){let o=hn(e),i=`${w(t)}.${w(n)}`;if(o.event==="insert")return`EXPLAIN INSERT INTO ${i} DEFAULT VALUES`;if(o.event==="delete")return`EXPLAIN DELETE FROM ${i} WHERE 0`;let a=new Map(r.map(c=>[me(c),c])),s=o.updateOfColumns.map(c=>a.get(me(c))).find(c=>c!==void 0);if(o.updateOfColumns.length>0&&s===void 0)return;let l=s??r[0];if(l===void 0)throw new Error(`Trigger target ${t}.${n} has no writable column to probe`);let d=w(l);return`EXPLAIN UPDATE ${i} SET ${d} = ${d} WHERE 0`}function Ls(e){return Tt(e).targetSchema}function J(e){return`main.${w(e)}`}function Br(e,t){let n=`-- TRIGGER ${t}`;return e.some(r=>r.some(o=>o===n))}function Dr(e,t){if(t.length!==bt.length)throw new Error(`View trigger definition fetch was incomplete for ${e}`);let n=[],r=[],o=[];return bt.forEach((i,a)=>{t[a].forEach(s=>{if(typeof s[0]!="string"||typeof s[1]!="string")throw new Error(`View trigger definition is unavailable for ${e}`);if(i.temporary){let l=s[2]===1||s[2]===1n;if(s[2]!==0&&s[2]!==0n&&!l)throw new Error(`Temporary view shadow state is unavailable for ${e}`);let d;try{d=Ls(s[1])}catch(c){let u=c instanceof Error?c.message:String(c);throw new Error(`Unable to determine the target of temporary trigger ${s[0]}: ${u}`)}if(d!==void 0&&me(d)!=="main")return;if(d===void 0){o.push({identifier:s[0],sql:s[1],temporary:!0});return}}n.push(i.temporary?{identifier:s[0],sql:s[1],temporary:!0}:{identifier:s[0],sql:s[1]})})}),{triggers:n,ambiguousTemporaryTriggerNames:r,unqualifiedTemporaryTriggers:o}}function Rt(e){let t=e.ambiguousTemporaryTriggerNames??[];if(t.length===0)return;let n=t.map(r=>`"${r}"`).join(", ");throw new Error(`Cannot modify main view "${e.identifier}" because temporary trigger target ownership is ambiguous for ${n}. Each named trigger uses an unqualified ON target whose historical schema cannot be proven. Drop the TEMP trigger, or recreate it with an explicitly schema-qualified target, before editing or dropping the main view.`)}function pe(e){let t=e.trim();if(!t)throw new Error("View SELECT definition is required");let n=-1,r,o=!1,i=!1;for(let a=0;a=0&&t[n]===";"?(t.slice(0,n).trimEnd()+t.slice(n+1)).trim():t}function Mr(e){let t=0,n=-1,r=-1;for(let o of kr(e)){if(o.kind==="symbol"&&o.value==="("){t===0&&n===-1&&(n=o.start),t++;continue}if(o.kind==="symbol"&&o.value===")"){t===1&&n!==-1&&r===-1&&(r=o.end),t=Math.max(0,t-1);continue}if(t===0&&F(o,"AS"))return{selectStart:o.end,columnListSql:n!==-1&&r!==-1?e.slice(n,r):void 0}}throw new Error("Unable to locate the SELECT body in the stored view definition")}function Ur(e){let{selectStart:t}=Mr(e);return pe(e.slice(t))}function En(e){return Mr(e).columnListSql}function tt(e,t,n,r){let o=n??(r?.length?`(${r.map(i=>w(i)).join(", ")})`:void 0);return`CREATE VIEW ${w(e)}${o?` ${o}`:""} AS ${t}`}function wn(e,t){let n=Tt(e);if(n.targetSchema===void 0){let r=n.tokens[n.targetStartIndex];return`${e.slice(0,r.start)}main.${e.slice(r.start)}`}if(me(n.targetSchema)!=="main")throw new Error(`Unable to recreate temporary trigger ${t}: target is not in main`);return e}function Sn(e){if(!e.temporary)return e.sql;let t=/^(\s*CREATE\s+)(?:(?:TEMP|TEMPORARY)\s+)?(TRIGGER\b)/i;if(!t.test(e.sql))throw new Error(`Unable to recreate temporary trigger ${e.identifier}: stored SQL is not a CREATE TRIGGER statement`);return wn(e.sql,e.identifier).replace(t,"$1TEMP $2")}var vs=new Set(["AS","CROSS","END","EXCEPT","FULL","GROUP","HAVING","INDEXED","INNER","INTERSECT","JOIN","LEFT","LIMIT","NATURAL","NOT","OFFSET","ON","ORDER","OUTER","RETURNING","RIGHT","SET","UNION","USING","VALUES","WHERE","WINDOW"]),Ps=new Set(["END","EXCEPT","GROUP","HAVING","INTERSECT","LIMIT","OFFSET","ON","ORDER","RETURNING","SET","UNION","USING","VALUES","WHERE","WINDOW"]);function yn(e,t){return e.push({parent:t,aliases:new Set,hasAmbiguousSource:!1}),e.length-1}function ks(e){let{tokens:t,referenceStartIndex:n,bodyStartIndex:r}=e,o=[],i=new Array(t.length),a=new Map,s=[],l=[yn(o)],d=!1;for(let c=n;c1&&l.pop()}else u.kind==="symbol"&&u.value===";"&&l.length===1&&(d=!0)}return{scopes:o,tokenScopes:i,matchingParentheses:a}}function Bs(e,t){t&&/^(?:NEW|OLD)$/i.test(t)&&e.aliases.add(me(t))}function vr(e,t,n,r){let o=r.scopes[n],i=t,a;if(e[i]?.kind==="symbol"&&e[i].value==="("){let l=r.matchingParentheses.get(i);if(l===void 0)return o.hasAmbiguousSource=!0,i+1;i=l+1}else if(fe(e[i])){if(a=e[i].value,i++,e[i]?.kind==="symbol"&&e[i].value==="."){if(!fe(e[i+1]))return o.hasAmbiguousSource=!0,i+1;a=e[i+1].value,i+=2}if(e[i]?.kind==="symbol"&&e[i].value==="("){let l=r.matchingParentheses.get(i);if(l===void 0)return o.hasAmbiguousSource=!0,i+1;i=l+1}}else return o.hasAmbiguousSource=!0,i+1;let s;if(F(e[i],"AS")){if(!fe(e[i+1]))return o.hasAmbiguousSource=!0,i+1;s=e[i+1].value,i+=2}else if(fe(e[i])){let l=e[i];l.kind==="word"&&vs.has(l.value.toUpperCase())||(s=l.value,i++)}return Bs(o,s??a),i}function Ds(e,t){let n=new Map;for(let r=e.referenceStartIndex;r{let o=t[r];return n.identifier===o.identifier&&n.sql===o.sql&&n.temporary===!0==(o.temporary===!0)})}var Wr="The view changed outside this editor. Reload before saving; the view was not modified.";function It(e,t,n,r){if(e!==void 0&&!Us(e,t)||!Vs(n,r))throw new Error(Wr)}function Fr(e,t){if(e===null||t===null){if(e!==t)throw new Error(Wr);return}It(e.sql,t.sql,e.triggers,t.triggers)}var qs=32,xt=1024;function Cn(e){return e.replace(/[A-Z]/g,t=>t.toLowerCase())}function Tn(e){return JSON.stringify(e.map(Cn))}function bn(e,t,n,r,o){let i=[e,t,n];return Tn(r===void 0||o===void 0?i:[...i,r,o])}function Hr(e){let t=e instanceof Error?e.message:String(e);return t.length>500?`${t.slice(0,500)}...`:t}function At(e,t,n){if(!(e<=t))throw new Error(`View dependency validation refused to inspect ${e} ${n}; the fail-closed limit is ${t}`)}async function Ws(e){let t=await e.queryRows("PRAGMA database_list"),n=[],r=new Set;for(let o of t){if(typeof o[1]!="string")throw new Error("SQLite returned invalid database-list metadata during view validation");let i=Cn(o[1]);r.has(i)||(r.add(i),n.push(o[1]))}return r.has("temp")||n.unshift("temp"),At(n.length,qs,"database schemas"),n}async function Fs(e,t){let n=[];for(let r of t){let o=xt-n.length;o<0&&At(n.length,xt,"schema objects");let i=await e.queryRows(`SELECT type, name, tbl_name, sql FROM ${w(r)}.sqlite_schema WHERE type IN ('view', 'trigger') ORDER BY type, name LIMIT ${o+1}`);for(let a of i){let[s,l,d,c]=a;if(s!=="view"&&s!=="trigger"||typeof l!="string"||typeof c!="string"||s==="trigger"&&typeof d!="string")throw new Error(`SQLite returned invalid ${r} schema metadata during view validation`);n.push({schema:r,kind:s,identifier:l,targetIdentifier:s==="trigger"?d:void 0,sql:c})}At(n.length,xt,"schema objects")}return n}async function Hs(e,t,n){return(await e.queryRows(`SELECT 1 FROM ${w(t)}.sqlite_schema WHERE type IN ('table', 'view') AND name = ? COLLATE NOCASE LIMIT 1`,[n])).length>0}async function js(e,t,n){let r=hn(n.sql);if(r.targetSchema!==void 0)return[r.targetSchema];if(Cn(n.schema)!=="temp")return[n.schema];let o=[];for(let i of t)await Hs(e,i,n.targetIdentifier)&&o.push(i);return o.length>0?o:["main"]}async function Ks(e,t,n){let r=await e.queryRows(`PRAGMA ${w(t)}.table_xinfo(${w(n)})`),o=[];for(let i of r){if(typeof i[1]!="string")throw new Error(`SQLite returned invalid column metadata for ${t}.${n}`);let a=i[6];a!==2&&a!==2n&&a!==3&&a!==3n&&o.push(i[1])}return o}async function jr(e){let t=await Ws(e),n=await Fs(e,t),r=new Map,o=[],i=new Map;for(let s of n){if(s.kind==="view"){o.push({key:bn("view",s.schema,s.identifier),kind:"view",schema:s.schema,identifier:s.identifier,sql:`EXPLAIN SELECT * FROM ${w(s.schema)}.${w(s.identifier)}`});continue}let l;try{l=await js(e,t,s)}catch(d){let c=bn("trigger",s.schema,s.identifier);r.set(c,{key:c,kind:"trigger",schema:s.schema,identifier:s.identifier,valid:!1,error:Hr(d)});continue}for(let d of l){let c=s.targetIdentifier,u=bn("trigger",s.schema,s.identifier,d,c);try{let f=Tn([d,c]),m=i.get(f);m||(m=Ks(e,d,c),i.set(f,m));let y=Ct(s.sql,d,c,await m);if(y===void 0){r.set(u,{key:u,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:d,targetIdentifier:c,valid:!0});continue}o.push({key:u,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:d,targetIdentifier:c,sql:y})}catch(f){r.set(u,{key:u,kind:"trigger",schema:s.schema,identifier:s.identifier,targetSchema:d,targetIdentifier:c,valid:!1,error:Hr(f)})}}}At(o.length+r.size,xt,"view and trigger probes");let a=await e.compileStatements(o.map(s=>s.sql));if(a.length!==o.length)throw new Error("View dependency validation returned an incomplete probe result set");return o.forEach((s,l)=>{let d=a[l];r.set(s.key,{key:s.key,kind:s.kind,schema:s.schema,identifier:s.identifier,targetSchema:s.targetSchema,targetIdentifier:s.targetIdentifier,valid:d===void 0,...d===void 0?{}:{error:d}})}),r}function ge(e,t){for(let n of e.values()){if(!n.valid)continue;let r=t.get(n.key);if(!r||r.valid)continue;let o=r.targetSchema&&r.targetIdentifier?` on ${r.targetSchema}.${r.targetIdentifier}`:"";throw new Error(`Schema change would break existing ${r.kind} "${r.schema}.${r.identifier}"${o}: ${r.error??"SQLite rejected it"}`)}}var Kr=1024*1024,zr=2e5;function nt(e){return e.replace(/[A-Z]/g,t=>t.toLowerCase())}function zs(e){return/[A-Za-z_\u0080-\uFFFF]/.test(e)}function Qs(e){return/[A-Za-z0-9_$\u0080-\uFFFF]/.test(e)}function Xs(e,t,n){let r=t+1,o="";for(;rKr)throw new Error(`Cannot inspect index dependency: definition exceeds ${Kr} characters`);let t=[],n=o=>{if(t.push(o),t.length>zr)throw new Error(`Cannot inspect index dependency: definition exceeds ${zr} tokens`)},r=0;for(;r1?`, ${Array(t-1).fill("NULL").join(", ")}`:""}`:"";return{sql:C+`SELECT ${u.join(", ")}${T}${g} FROM ${f}`+I,metadataTrailer:h,primaryTransportColumnCount:t+(h?0:1)+c.length,valueColumnCount:t,metadataColumnIndex:t,transportColumnCount:t+1+c.length,rawTextColumnStart:t+1,rawTextColumnCount:c.length,rawTextTransport:o,rawTextColumnIndices:c,rawTextValidationUnavailable:d,effectiveInlineCellBytes:i}}function _o(e,t,n){if(!n.metadataTrailer){if(t!==void 0)throw new Error("Cell containment received unexpected separate metadata rows");return e}if(t!==void 0)throw new Error("Cell containment metadata must come from the value statement");let r=e.at(-1);if(!r||r.length!==n.primaryTransportColumnCount)throw new Error("Cell containment metadata trailer is missing or malformed");if(typeof r[0]!="string"||r.slice(1).some(a=>a!==null))throw new Error("Cell containment metadata trailer is not one packed text value");let o=e.slice(0,-1),i=r[0]===""?[]:r[0].split(` -`);if(i.length!==o.length)throw new Error("Cell containment metadata row count does not match the value page");return o.map((a,s)=>{if(a.length{if(!s)return;let l={};for(let[d,c]of Object.entries(s)){let u=Number(d);l[u]={};for(let[f,m]of Object.entries(c))l[u][Number(f)+1]=m}return l},o=r(t.exactIntegerTexts),i;for(let s of[n,o])if(s){i??(i={});for(let[l,d]of Object.entries(s)){let c=Number(l);i[c]??(i[c]={}),Object.assign(i[c],d)}}let a=r(t.oversizedCells);return{rows:t.rows.map((s,l)=>[e[l],...s]),...a?{oversizedCells:a}:{},...i?{exactIntegerTexts:i}:{}}}function Oo(e,t){let n,r=0,o,i=s=>{if(s>=48&&s<=57)return s-48;let l=s|32;return l>=97&&l<=102?l-87:-1},a=(s,l,d)=>{let c=typeof s=="string"?s.length/2:NaN;if(typeof s!="string"||!Number.isSafeInteger(c)||!Number.isSafeInteger(t.effectiveInlineCellBytes)||t.effectiveInlineCellBytes<0||c>t.effectiveInlineCellBytes)throw new Error(`Raw TEXT value at row ${l}, key ${d} is not bounded hexadecimal text`);if(c===0)return o??(o=new Uint8Array(0));let u;c>Co?u=new Uint8Array(c):((!n||n.byteLength-r{if(s.length{let u=s[t.rawTextColumnStart+c];if(u!==null&&t.rawTextTransport==="hex")return a(u,l,c);if(u!==null&&!(u instanceof Uint8Array))throw new Error(`Raw TEXT value at row ${l}, key ${c} is not a BLOB`);return u})})}function Dt(e,t,n){if(n.includes("\0"))return!1;try{return e.decode(t)===n}catch{return!1}}function Lo(e){if(e.sourceRows.length===0||e.sourceColumnIndices.length===0)return;if(e.rawTextValidationUnavailable)return new Set(e.sourceRows.map((o,i)=>i));if(e.rawTextRows.length!==e.sourceRows.length)throw new Error("Raw TEXT validation row count does not match the source page");let t=e.sourceColumnIndices.map(o=>{let i=e.rawTextColumnIndices.indexOf(o);if(i<0)throw new Error(`Raw TEXT validation column ${o} was not projected`);return i}),n=de(e.textEncoding),r;return e.sourceRows.forEach((o,i)=>{let a=e.rawTextRows[i];if(!a||a.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT validation row ${i} has the wrong width`);for(let s=0;sArray.from(s)),n;if(e.contained.oversizedCells){n={};for(let[s,l]of Object.entries(e.contained.oversizedCells))n[Number(s)]={...l}}let r;if(e.contained.exactIntegerTexts){r={};for(let[s,l]of Object.entries(e.contained.exactIntegerTexts))r[Number(s)]={...l}}let o=re-ct,i=Ut(t)+Vt(n)+qt(r),a=de(e.textEncoding);if(e.sourceRows.forEach((s,l)=>{let d=e.rawTextRows[l];if(!d||d.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT containment row ${l} has the wrong width`);e.rawTextColumnIndices.forEach((c,u)=>{let f=s[c];if(typeof f!="string"||n?.[l]?.[c])return;let m=d[u];if(!(m instanceof Uint8Array))throw new Error(`Raw TEXT containment bytes are missing at row ${l}, column ${c}`);if(Dt(a,m,f))return;let y=t[l][c],g=Po(n,l,c);n??(n={}),n[l]??(n[l]={}),n[l][c]={storageClass:"text",byteLength:m.byteLength};let h=Math.max(0,o-i-g+ie(y)),C=h>lt?Math.floor((h-lt)/4)*3:0,T=Math.min(m.byteLength,ga,C);if(T===0)throw new Error(`Raw TEXT containment cannot retain an authoritative byte prefix for row ${l}, column ${c} within the webview transport limit`);let I=m.slice(0,T);t[l][c]=I,i+=ie(I)-ie(y)+g,r?.[l]&&(delete r[l][c],Object.keys(r[l]).length===0&&delete r[l])})}),i>o)throw new Error(`Raw TEXT containment cannot fit this page within the ${re}-byte transport limit`);return{rows:t,...n?{oversizedCells:n}:{},...r&&Object.keys(r).length>0?{exactIntegerTexts:r}:{}}}function Ia(e,t,n){if(e==="")return;let r=/^([tb])([1-9]\d*)$/.exec(e);if(!r)throw new Error(`Invalid oversized-cell metadata at row ${t}, column ${n}`);let o=Number(r[2]);if(!Number.isSafeInteger(o))throw new Error(`Oversized-cell byte length is unsafe at row ${t}, column ${n}`);return{storageClass:r[1]==="t"?"text":"blob",byteLength:o}}function Mt(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function xa(e){if(typeof e=="string")return Mt(e);if(e instanceof Uint8Array)return e.byteLength}function Io(e){return e==="text"?"":new Uint8Array(0)}function Aa(e){return 4*Math.ceil(e/3)}function ie(e){return e instanceof Uint8Array?Aa(e.byteLength)+lt:typeof e=="string"?Mt(e)+2:8}function Se(e){return Mt(e)+3}function Ut(e){let t=2+Math.max(0,e.length-1);for(let n of e){t+=2+Math.max(0,n.length-1);for(let r of n)t+=ie(r)}return t}function Vt(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=Se(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a]of i)n+=Se(a)+vn}return n}function Po(e,t,n){if(e?.[t]?.[n])return 0;let r=Se(String(n))+vn;if(e?.[t])return 1+r;let i=Se(String(t))+2+r;return e?1+i:2+i}function qt(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=Se(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a,s]of i)n+=Se(a)+Mt(s)+2}return n}function ko(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t)n+=Se(r)+ie(o);return n}function Wt(e,t,n,r=he){var y;let o=vt(r,he),i,a=0,s=!1,l=[],d=(g,h,C)=>{var T;i??(i={}),i[g]??(i[g]={}),(T=i[g])[h]??(T[h]=C)},c=e.map((g,h)=>{if(g.length{let R=Ia(x,h,S);R&&d(h,S,R);let _=I[S],A=xa(_);if(A===void 0||A===0)return;let L=R??{storageClass:typeof _=="string"?"text":"blob",byteLength:A};if(s||A>o-a){s=!0,d(h,S,L),I[S]=Io(L.storageClass);return}a+=A,l.push({rowIndex:h,columnIndex:S,metadata:L})}),I}),u;if(n)for(let[g,h]of Object.entries(n))for(let[C,T]of Object.entries(h)){let I=Number(C);I>=t||(u??(u={}),u[y=Number(g)]??(u[y]={}),u[Number(g)][I]=T)}let f=re-ct,m=Ut(c)+Vt(i)+qt(u);for(let g=l.length-1;g>=0&&m>f;g--){let h=l[g],C=c[h.rowIndex][h.columnIndex],T=Io(h.metadata.storageClass),I=ie(T)-ie(C)+Po(i,h.rowIndex,h.columnIndex);I>=0||(d(h.rowIndex,h.columnIndex,h.metadata),c[h.rowIndex][h.columnIndex]=T,m+=I)}if(m>f)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:c,...i?{oversizedCells:i}:{},...u?{exactIntegerTexts:u}:{}}}function xo(e,t){var r;if(!e)return;let n;for(let[o,i]of Object.entries(e))for(let[a,s]of Object.entries(i)){let l=Number(a);l>=t||(n??(n={}),n[r=Number(o)]??(n[r]={}),n[Number(o)][l+1]=s)}return n}function Ao(e,t){var r;if(!e)return;let n;for(let[o,i]of Object.entries(e))for(let[a,s]of Object.entries(i)){let l=Number(a);l!==t&&(n??(n={}),n[r=Number(o)]??(n[r]={}),n[Number(o)][l]=s)}return n}function Bo(e){let t=`Row is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity.`,n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o=e.rows.map((d,c)=>{if(d.length===0)throw new Error(`Shadowed rowid result row ${c} has no identity slot`);let u=n+c;if(!Number.isSafeInteger(u))throw new Error("Shadowed rowid result ordinal exceeds the safe integer range");return r??(r={}),r[c]=t,[at(t,u),...d.slice(1)]}),i=Ao(e.oversizedCells,0),a=Ao(e.exactIntegerTexts,0),s=re-ct;if(Ut(o)+Vt(i)+qt(a)+ko(r)>s)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:o,...i?{oversizedCells:i}:{},...a?{exactIntegerTexts:a}:{},...r?{readOnlyRowReasons:r}:{}}}function Pt(e){return`"${e.length<=128?e:`${e.slice(0,125)}...`}"`}function Do(e){let t=e.slice(0,8).map(Pt);return e.length>t.length?`${t.join(", ")}, and ${e.length-t.length} more`:t.join(", ")}function Na(e,t){if(e.length===1){let r=e[0];return`Row is read-only because WITHOUT ROWID primary-key column ${Pt(r.identifier)} is ${r.byteLength} bytes and exceeds the ${t}-byte inline limit; its identity was not transported.`}let n=e.slice(0,8).map(r=>`${Pt(r.identifier)} (${r.byteLength} bytes)`);return e.length>n.length&&n.push(`and ${e.length-n.length} more`),`Row is read-only because WITHOUT ROWID primary-key columns ${n.join(", ")} exceed the ${t}-byte inline limit; their identity was not transported.`}function Mo(e){return e==="utf-8"?"UTF-8":e==="utf-16le"?"UTF-16LE":"UTF-16BE"}function ut(e){if(e.columns.length*2>Ln)throw new Error(`Cannot mint a byte-faithful WITHOUT ROWID identity with ${e.columns.length} primary-key columns within SQLite's result-column limit`);let t=e.columns.map(r=>w(r.identifier)),n=t.map((r,o)=>`CASE WHEN typeof(${r}) = 'text' THEN CAST(${r} AS BLOB) END AS `+w(`${No}${o}`));return[...t,...n].join(", ")}function dt(e,t,n,r){let o=e.columns.length;if(t.length!==o*2)throw new Error(`${r}: SQLite returned an invalid primary-key validation row`);let i=t.slice(0,o),a=de(n);for(let s=0;s{let h=e.sourceColumns.indexOf(g.identifier);if(h<0)throw new Error(`Primary-key column missing from table fetch: ${g.identifier}`);return h}),n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o,i=[],a=de(e.textEncoding),s=e.rawTextValidationUnavailable?[]:t.map(g=>{let h=e.rawTextColumnIndices.indexOf(g);if(h<0)throw new Error(`Primary-key raw TEXT column ${g} was not projected`);return h}),l=e.rows.map((g,h)=>{let C=e.identity.columns.flatMap((R,_)=>{let A=e.oversizedCells?.[h]?.[t[_]];return A?[{identifier:R.identifier,byteLength:A.byteLength}]:[]}),T=e.identityRows[h];if(!T)throw new Error(`Primary-key identity row missing at index ${h}`);let I=e.rawTextBytes[h];if(!e.rawTextValidationUnavailable&&(!I||I.length!==e.rawTextColumnIndices.length))throw new Error(`Primary-key raw TEXT row missing at index ${h}`);let x=e.rawTextValidationUnavailable?e.identity.columns.map(R=>R.identifier):e.identity.columns.flatMap((R,_)=>{let A=T[t[_]];if(typeof A!="string")return[];let L=e.oversizedCells?.[h]?.[t[_]];if(L&&L.byteLength>e.effectiveInlineCellBytes)return[];let E=I[s[_]];return E instanceof Uint8Array?Dt(a,E,A)?[]:[R.identifier]:[R.identifier]}),S;if(e.rawTextValidationUnavailable&&(o??(o=new Set),o.add(h)),x.length>0){let R=e.rawTextValidationUnavailable?$a(x):_a(x,e.textEncoding);r??(r={}),r[h]=R,o??(o=new Set),o.add(h),S=at(R,n+h)}else if(C.length>0){let R=Na(C,e.effectiveInlineCellBytes);r??(r={}),r[h]=R,S=at(R,n+h)}else S=Ve(e.identity.columns,t.map(R=>T[R])),i.push(h);return[S,...g.slice(0,e.visibleColumnCount)]}),d=xo(e.oversizedCells,e.visibleColumnCount),c=xo(e.exactIntegerTexts,e.visibleColumnCount),u=re-ct,f=Ut(l)+Vt(d)+qt(c)+ko(r),m="Row is read-only because its encoded WITHOUT ROWID primary-key identity exceeds the page transport budget.",y=g=>{if(r?.[g]!==void 0)return 0;let h=Se(String(g))+ie(m);return r?1+h:2+h};for(let g=i.length-1;g>=0&&f>u;g--){let h=i[g],C=l[h][0],T=at(m,n+h),I=ie(T)-ie(C)+y(h);I>=0||(l[h][0]=T,r??(r={}),r[h]=m,f+=I)}if(f>u)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:l,...d?{oversizedCells:d}:{},...c?{exactIntegerTexts:c}:{},...r?{readOnlyRowReasons:r}:{},...o?{unrepresentableTextKeyRows:o}:{}}}var be=1e3,Pn=4*1024*1024,Vo=64*1024,Ft=128;function qo(e){if(e.length>Vo)throw new Error("Query text exceeds 65,536 characters.");let t=pe(e),n="",r=0,o=0;for(let i=0;i{if(a.length{if(!s)return;let l={};for(let[d,c]of Object.entries(s)){let u=Number(d);l[u]={};for(let[f,m]of Object.entries(c))l[u][Number(f)+1]=m}return l},o=r(t.exactIntegerTexts),i;for(let s of[n,o])if(s){i??(i={});for(let[l,d]of Object.entries(s)){let c=Number(l);i[c]??(i[c]={}),Object.assign(i[c],d)}}let a=r(t.oversizedCells);return{rows:t.rows.map((s,l)=>[e[l],...s]),...a?{oversizedCells:a}:{},...i?{exactIntegerTexts:i}:{}}}function Oo(e,t){let n,r=0,o,i=s=>{if(s>=48&&s<=57)return s-48;let l=s|32;return l>=97&&l<=102?l-87:-1},a=(s,l,d)=>{let c=typeof s=="string"?s.length/2:NaN;if(typeof s!="string"||!Number.isSafeInteger(c)||!Number.isSafeInteger(t.effectiveInlineCellBytes)||t.effectiveInlineCellBytes<0||c>t.effectiveInlineCellBytes)throw new Error(`Raw TEXT value at row ${l}, key ${d} is not bounded hexadecimal text`);if(c===0)return o??(o=new Uint8Array(0));let u;c>Co?u=new Uint8Array(c):((!n||n.byteLength-r{if(s.length{let u=s[t.rawTextColumnStart+c];if(u!==null&&t.rawTextTransport==="hex")return a(u,l,c);if(u!==null&&!(u instanceof Uint8Array))throw new Error(`Raw TEXT value at row ${l}, key ${c} is not a BLOB`);return u})})}function Ia(e,t){return e===t&&!t.includes("\0")}function Dt(e,t,n){try{return Ia(e.decode(t),n)}catch{return!1}}function Lo(e){if(e.sourceRows.length===0||e.sourceColumnIndices.length===0)return;if(e.rawTextValidationUnavailable)return new Set(e.sourceRows.map((o,i)=>i));if(e.rawTextRows.length!==e.sourceRows.length)throw new Error("Raw TEXT validation row count does not match the source page");let t=e.sourceColumnIndices.map(o=>{let i=e.rawTextColumnIndices.indexOf(o);if(i<0)throw new Error(`Raw TEXT validation column ${o} was not projected`);return i}),n=de(e.textEncoding),r;return e.sourceRows.forEach((o,i)=>{let a=e.rawTextRows[i];if(!a||a.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT validation row ${i} has the wrong width`);for(let s=0;sArray.from(s)),n;if(e.contained.oversizedCells){n={};for(let[s,l]of Object.entries(e.contained.oversizedCells))n[Number(s)]={...l}}let r;if(e.contained.exactIntegerTexts){r={};for(let[s,l]of Object.entries(e.contained.exactIntegerTexts))r[Number(s)]={...l}}let o=re-ct,i=Ut(t)+Vt(n)+qt(r),a=de(e.textEncoding);if(e.sourceRows.forEach((s,l)=>{let d=e.rawTextRows[l];if(!d||d.length!==e.rawTextColumnIndices.length)throw new Error(`Raw TEXT containment row ${l} has the wrong width`);e.rawTextColumnIndices.forEach((c,u)=>{let f=s[c];if(typeof f!="string"||n?.[l]?.[c])return;let m=d[u];if(!(m instanceof Uint8Array))throw new Error(`Raw TEXT containment bytes are missing at row ${l}, column ${c}`);if(Dt(a,m,f))return;let y=t[l][c],g=Po(n,l,c);n??(n={}),n[l]??(n[l]={}),n[l][c]={storageClass:"text",byteLength:m.byteLength};let h=Math.max(0,o-i-g+ie(y)),C=h>lt?Math.floor((h-lt)/4)*3:0,T=Math.min(m.byteLength,ga,C);if(T===0)throw new Error(`Raw TEXT containment cannot retain an authoritative byte prefix for row ${l}, column ${c} within the webview transport limit`);let I=m.slice(0,T);t[l][c]=I,i+=ie(I)-ie(y)+g,r?.[l]&&(delete r[l][c],Object.keys(r[l]).length===0&&delete r[l])})}),i>o)throw new Error(`Raw TEXT containment cannot fit this page within the ${re}-byte transport limit`);return{rows:t,...n?{oversizedCells:n}:{},...r&&Object.keys(r).length>0?{exactIntegerTexts:r}:{}}}function xa(e,t,n){if(e==="")return;let r=/^([tb])([1-9]\d*)$/.exec(e);if(!r)throw new Error(`Invalid oversized-cell metadata at row ${t}, column ${n}`);let o=Number(r[2]);if(!Number.isSafeInteger(o))throw new Error(`Oversized-cell byte length is unsafe at row ${t}, column ${n}`);return{storageClass:r[1]==="t"?"text":"blob",byteLength:o}}function Mt(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Aa(e){if(typeof e=="string")return Mt(e);if(e instanceof Uint8Array)return e.byteLength}function Io(e){return e==="text"?"":new Uint8Array(0)}function Na(e){return 4*Math.ceil(e/3)}function ie(e){return e instanceof Uint8Array?Na(e.byteLength)+lt:typeof e=="string"?Mt(e)+2:8}function Se(e){return Mt(e)+3}function Ut(e){let t=2+Math.max(0,e.length-1);for(let n of e){t+=2+Math.max(0,n.length-1);for(let r of n)t+=ie(r)}return t}function Vt(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=Se(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a]of i)n+=Se(a)+vn}return n}function Po(e,t,n){if(e?.[t]?.[n])return 0;let r=Se(String(n))+vn;if(e?.[t])return 1+r;let i=Se(String(t))+2+r;return e?1+i:2+i}function qt(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t){n+=Se(r);let i=Object.entries(o);n+=2+Math.max(0,i.length-1);for(let[a,s]of i)n+=Se(a)+Mt(s)+2}return n}function ko(e){if(!e)return 0;let t=Object.entries(e),n=2+Math.max(0,t.length-1);for(let[r,o]of t)n+=Se(r)+ie(o);return n}function Wt(e,t,n,r=he){var y;let o=vt(r,he),i,a=0,s=!1,l=[],d=(g,h,C)=>{var T;i??(i={}),i[g]??(i[g]={}),(T=i[g])[h]??(T[h]=C)},c=e.map((g,h)=>{if(g.length{let R=xa(x,h,S);R&&d(h,S,R);let _=I[S],A=Aa(_);if(A===void 0||A===0)return;let L=R??{storageClass:typeof _=="string"?"text":"blob",byteLength:A};if(s||A>o-a){s=!0,d(h,S,L),I[S]=Io(L.storageClass);return}a+=A,l.push({rowIndex:h,columnIndex:S,metadata:L})}),I}),u;if(n)for(let[g,h]of Object.entries(n))for(let[C,T]of Object.entries(h)){let I=Number(C);I>=t||(u??(u={}),u[y=Number(g)]??(u[y]={}),u[Number(g)][I]=T)}let f=re-ct,m=Ut(c)+Vt(i)+qt(u);for(let g=l.length-1;g>=0&&m>f;g--){let h=l[g],C=c[h.rowIndex][h.columnIndex],T=Io(h.metadata.storageClass),I=ie(T)-ie(C)+Po(i,h.rowIndex,h.columnIndex);I>=0||(d(h.rowIndex,h.columnIndex,h.metadata),c[h.rowIndex][h.columnIndex]=T,m+=I)}if(m>f)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:c,...i?{oversizedCells:i}:{},...u?{exactIntegerTexts:u}:{}}}function xo(e,t){var r;if(!e)return;let n;for(let[o,i]of Object.entries(e))for(let[a,s]of Object.entries(i)){let l=Number(a);l>=t||(n??(n={}),n[r=Number(o)]??(n[r]={}),n[Number(o)][l+1]=s)}return n}function Ao(e,t){var r;if(!e)return;let n;for(let[o,i]of Object.entries(e))for(let[a,s]of Object.entries(i)){let l=Number(a);l!==t&&(n??(n={}),n[r=Number(o)]??(n[r]={}),n[Number(o)][l]=s)}return n}function Bo(e){let t=`Row is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity.`,n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o=e.rows.map((d,c)=>{if(d.length===0)throw new Error(`Shadowed rowid result row ${c} has no identity slot`);let u=n+c;if(!Number.isSafeInteger(u))throw new Error("Shadowed rowid result ordinal exceeds the safe integer range");return r??(r={}),r[c]=t,[at(t,u),...d.slice(1)]}),i=Ao(e.oversizedCells,0),a=Ao(e.exactIntegerTexts,0),s=re-ct;if(Ut(o)+Vt(i)+qt(a)+ko(r)>s)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:o,...i?{oversizedCells:i}:{},...a?{exactIntegerTexts:a}:{},...r?{readOnlyRowReasons:r}:{}}}function Pt(e){return`"${e.length<=128?e:`${e.slice(0,125)}...`}"`}function Do(e){let t=e.slice(0,8).map(Pt);return e.length>t.length?`${t.join(", ")}, and ${e.length-t.length} more`:t.join(", ")}function _a(e,t){if(e.length===1){let r=e[0];return`Row is read-only because WITHOUT ROWID primary-key column ${Pt(r.identifier)} is ${r.byteLength} bytes and exceeds the ${t}-byte inline limit; its identity was not transported.`}let n=e.slice(0,8).map(r=>`${Pt(r.identifier)} (${r.byteLength} bytes)`);return e.length>n.length&&n.push(`and ${e.length-n.length} more`),`Row is read-only because WITHOUT ROWID primary-key columns ${n.join(", ")} exceed the ${t}-byte inline limit; their identity was not transported.`}function Mo(e){return e==="utf-8"?"UTF-8":e==="utf-16le"?"UTF-16LE":"UTF-16BE"}function ut(e){if(e.columns.length*2>Ln)throw new Error(`Cannot mint a byte-faithful WITHOUT ROWID identity with ${e.columns.length} primary-key columns within SQLite's result-column limit`);let t=e.columns.map(r=>w(r.identifier)),n=t.map((r,o)=>`CASE WHEN typeof(${r}) = 'text' THEN CAST(${r} AS BLOB) END AS `+w(`${No}${o}`));return[...t,...n].join(", ")}function dt(e,t,n,r){let o=e.columns.length;if(t.length!==o*2)throw new Error(`${r}: SQLite returned an invalid primary-key validation row`);let i=t.slice(0,o),a=de(n);for(let s=0;s{let h=e.sourceColumns.indexOf(g.identifier);if(h<0)throw new Error(`Primary-key column missing from table fetch: ${g.identifier}`);return h}),n=Number.isSafeInteger(e.rowOffset)&&(e.rowOffset??0)>=0?e.rowOffset:0,r,o,i=[],a=de(e.textEncoding),s=e.rawTextValidationUnavailable?[]:t.map(g=>{let h=e.rawTextColumnIndices.indexOf(g);if(h<0)throw new Error(`Primary-key raw TEXT column ${g} was not projected`);return h}),l=e.rows.map((g,h)=>{let C=e.identity.columns.flatMap((R,_)=>{let A=e.oversizedCells?.[h]?.[t[_]];return A?[{identifier:R.identifier,byteLength:A.byteLength}]:[]}),T=e.identityRows[h];if(!T)throw new Error(`Primary-key identity row missing at index ${h}`);let I=e.rawTextBytes[h];if(!e.rawTextValidationUnavailable&&(!I||I.length!==e.rawTextColumnIndices.length))throw new Error(`Primary-key raw TEXT row missing at index ${h}`);let x=e.rawTextValidationUnavailable?e.identity.columns.map(R=>R.identifier):e.identity.columns.flatMap((R,_)=>{let A=T[t[_]];if(typeof A!="string")return[];let L=e.oversizedCells?.[h]?.[t[_]];if(L&&L.byteLength>e.effectiveInlineCellBytes)return[];let E=I[s[_]];return E instanceof Uint8Array?Dt(a,E,A)?[]:[R.identifier]:[R.identifier]}),S;if(e.rawTextValidationUnavailable&&(o??(o=new Set),o.add(h)),x.length>0){let R=e.rawTextValidationUnavailable?Oa(x):$a(x,e.textEncoding);r??(r={}),r[h]=R,o??(o=new Set),o.add(h),S=at(R,n+h)}else if(C.length>0){let R=_a(C,e.effectiveInlineCellBytes);r??(r={}),r[h]=R,S=at(R,n+h)}else S=Ve(e.identity.columns,t.map(R=>T[R])),i.push(h);return[S,...g.slice(0,e.visibleColumnCount)]}),d=xo(e.oversizedCells,e.visibleColumnCount),c=xo(e.exactIntegerTexts,e.visibleColumnCount),u=re-ct,f=Ut(l)+Vt(d)+qt(c)+ko(r),m="Row is read-only because its encoded WITHOUT ROWID primary-key identity exceeds the page transport budget.",y=g=>{if(r?.[g]!==void 0)return 0;let h=Se(String(g))+ie(m);return r?1+h:2+h};for(let g=i.length-1;g>=0&&f>u;g--){let h=i[g],C=l[h][0],T=at(m,n+h),I=ie(T)-ie(C)+y(h);I>=0||(l[h][0]=T,r??(r={}),r[h]=m,f+=I)}if(f>u)throw new Error(`Cell containment cannot fit this page within the ${re}-byte transport limit`);return{rows:l,...d?{oversizedCells:d}:{},...c?{exactIntegerTexts:c}:{},...r?{readOnlyRowReasons:r}:{},...o?{unrepresentableTextKeyRows:o}:{}}}var be=1e3,Pn=4*1024*1024,Vo=64*1024,Ft=128;function qo(e){if(e.length>Vo)throw new Error("Query text exceeds 65,536 characters.");let t=pe(e),n="",r=0,o=0;for(let i=0;ia+1?Number(t.slice(a+1,i)):r+1;if(!Number.isInteger(l)||l<1||l>100)throw new Error("Use at most 100 positional parameters.");r=Math.max(r,l),n+="NULL";continue}else{if(s==="("&&o++,s===")"&&--o<0)throw new Error("Unbalanced query parentheses.");if(s===";")throw new Error("Exactly one read query is required.");if(s===":"||s==="@"||s==="$")throw new Error("Use positional ? or ?NNN parameters. Named parameters are not supported.");i++}n+=t.slice(a,i)}if(o!==0)throw new Error("Unbalanced query parentheses.");return{sourceSql:t,sql:`SELECT * FROM ( ${t} ) LIMIT ${be+1}`,metadataSql:`SELECT * FROM ( @@ -41,17 +41,17 @@ ${n} SELECT type, name, sql FROM main.sqlite_schema WHERE type IN ('view', 'trigger') AND sql IS NOT NULL -ORDER BY type, name`;function Oa(e){return e.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Qo(e,t){let n=Oa(t);return new RegExp(`(^|[^A-Za-z0-9_$])${n}($|[^A-Za-z0-9_$])`,"i").test(e)}var wu=2*1024*1024,Su=64*1024;async function Xo(e,t,n,r){let o=`main.${w(e)}`;for(let i of n??[])await r(`DROP INDEX IF EXISTS main.${w(i)}`);for(let i of t)await r(`ALTER TABLE ${o} DROP COLUMN ${w(i)}`)}function Te(e){let t=e==null?"":String(e);return t.trim()?t:void 0}function Kt(e,t,n="set"){if(n==="json_patch")return{value:e,operation:"json_patch"};if(typeof e!="string"||typeof t!="string"||!(e.startsWith("{")||e.startsWith("["))||!(t.startsWith("{")||t.startsWith("[")))return{value:e,operation:"set"};try{let r=JSON.parse(t),o=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r)||!o||typeof o!="object"||Array.isArray(o))return{value:e,operation:"set"};let i=Zo(r,o);return i===void 0||Jo(i)?{value:e,operation:"set"}:{value:JSON.stringify(i),operation:"json_patch"}}catch{return{value:e,operation:"set"}}}function Jo(e){return e===null?!0:z(e)?Object.values(e).some(Jo):!1}function Zo(e,t,n=0){if(n>1e3)throw new Error("JSON merge patch depth limit exceeded");if(e===t)return;if(!z(e)||!z(t)||Array.isArray(e)||Array.isArray(t))return t;let r=Object.create(null),o=!1;for(let i of Object.keys(t)){let a=Object.prototype.hasOwnProperty.call(e,i)?e[i]:void 0,s=t[i];if(a===void 0)r[i]=s,o=!0;else if(a!==s){let l=Zo(a,s,n+1);l!==void 0&&(r[i]=l,o=!0)}}for(let i of Object.keys(e))Object.prototype.hasOwnProperty.call(t,i)||(r[i]=null,o=!0);return o?r:void 0}function ei(e,t,n=0){if(n>1e3)throw new Error("JSON apply merge patch depth limit exceeded");if(t===null)return null;if(typeof t!="object"||Array.isArray(t))return t;let r;typeof e!="object"||e===null||Array.isArray(e)?r=Object.create(null):r=Object.assign(Object.create(null),e);let o=t;for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i)){let a=o[i];a===null?delete r[i]:r[i]=ei(r[i],a,n+1)}return r}function Ht(e){if(typeof e=="string")try{let t=JSON.parse(e);return z(t)?t:void 0}catch{return}}function ti(e,t,n,r,o){let i=o==="undo"?r:n,a=o==="undo"?n:r,s=()=>Yo(e,i)?{kind:"write",value:a}:{kind:"conflict"};if(jt(e)||jt(t)||jt(n)||jt(r))return s();let l=Ht(e),d=Ht(t),c=Ht(n),u=Ht(r);if(!l||!d||!c||!u)return s();if(!ni(l,o==="undo"?u:c,d,c,0))return{kind:"conflict"};if(Yo(e,i))return{kind:"write",value:a};let m=o==="undo"?Bn(l,d,c,0):ei(l,d,0);return{kind:"write",value:JSON.stringify(m)}}function ni(e,t,n,r,o){if(o>1e3)throw new Error("JSON history replay depth limit exceeded");for(let i of Object.keys(n)){let a=n[i],s=Object.prototype.hasOwnProperty.call(e,i),l=Object.prototype.hasOwnProperty.call(t,i),d=Object.prototype.hasOwnProperty.call(r,i),c=s?e[i]:void 0,u=l?t[i]:void 0,f=d?r[i]:void 0;if(z(a)){if(!d||!z(f)){if(!Go(s,c,l,u,o+1))return!1;continue}if(!s||!z(c)||!l||!z(u)||!ni(c,u,a,f,o+1))return!1;continue}if(!Go(s,c,l,u,o+1))return!1}return!0}function Go(e,t,n,r,o){return e===n&&(!e||kn(t,r,o))}function kn(e,t,n){if(n>1e3)throw new Error("JSON history replay depth limit exceeded");if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((i,a)=>kn(i,t[a],n+1));if(!z(e)||!z(t))return!1;let r=Object.keys(e),o=Object.keys(t);return r.length!==o.length?!1:r.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&kn(e[i],t[i],n+1))}function Yo(e,t){return e instanceof Uint8Array||t instanceof Uint8Array?!(e instanceof Uint8Array)||!(t instanceof Uint8Array)?!1:e.length===t.length&&e.every((n,r)=>n===t[r]):Object.is(e,t)}function Bn(e,t,n,r){if(r>1e3)throw new Error("JSON undo restore depth limit exceeded");let o=Object.assign(Object.create(null),e);for(let i of Object.keys(t)){let a=t[i],s=Object.prototype.hasOwnProperty.call(n,i),l=s?n[i]:void 0;if(z(a))if(s&&z(l))if(Object.prototype.hasOwnProperty.call(o,i)&&z(o[i])){let d=o[i];o[i]=Bn(d,a,l,r+1)}else o[i]=l;else if(s)o[i]=l;else{let d=Object.prototype.hasOwnProperty.call(o,i)&&z(o[i])?o[i]:Object.create(null),c=Bn(d,a,Object.create(null),r+1);Object.keys(c).length===0?delete o[i]:o[i]=c}else s?o[i]=l:delete o[i]}return o}function jt(e){if(typeof e!="string")return!1;let n=e.replace(/"(?:\\.|[^"\\])*"/g,'""').match(/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g);return n?n.some(r=>{let o=Number(r);return!Number.isFinite(o)||JSON.stringify(o)!==r}):!1}function z(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var La=new Set(["null","integer","real","text","blob"]),va="Cell changed outside SQLite Explorer history; undo/redo was not applied.",Pa="This edit predates guarded cell history and cannot be replayed safely. Save or reload the database.",se=class extends Error{constructor(n,r){let o=r.length===1?`${n}.${r[0]}`:`${r.length} cells in ${n}`;super(`${o}: ${va}`);D(this,"code","SQLITE_EXPLORER_CELL_HISTORY_CONFLICT");this.name="CellHistoryConflictError"}},ft=class extends Error{constructor(){super(Pa);D(this,"code","SQLITE_EXPLORER_LEGACY_CELL_HISTORY");this.name="LegacyCellHistoryError"}};function ee(e){let t=w(e);return`typeof(${t}), CASE WHEN typeof(${t}) = 'text' THEN CAST(${t} AS BLOB) ELSE ${t} END`}function ka(e,t,n){if(!t)throw new Error(`SQLite text encoding is required for ${n}`);try{return{value:de(t).decode(e)}}catch{return{value:"",rawTextBytes:e}}}function V(e,t,n,r={}){if(typeof e!="string"||!La.has(e))throw new Error(`SQLite returned an invalid storage class for ${n}`);let o=e;if(o!=="text"&&r.rawTextBytes!==void 0)throw new Error(`SQLite returned raw TEXT bytes for non-TEXT ${n}`);if(o==="text"){if(t instanceof Uint8Array)return{storageClass:o,...ka(t,r.textEncoding,n)};if(typeof t!="string")throw new Error(`SQLite returned an invalid text value for ${n}`);if(r.rawTextBytes!==void 0&&!(r.rawTextBytes instanceof Uint8Array))throw new Error(`SQLite returned invalid raw TEXT bytes for ${n}`);return{storageClass:o,value:t,...r.rawTextBytes instanceof Uint8Array?{rawTextBytes:r.rawTextBytes}:{}}}if(!(o==="null"?t===null:o==="integer"?typeof t=="bigint"||typeof t=="number"&&Number.isInteger(t):o==="real"?typeof t=="number":t instanceof Uint8Array))throw new Error(`SQLite returned an invalid ${o} value for ${n}`);return{storageClass:o,value:t}}function mt(e){if(!e||typeof e!="object")throw new ft;V(e.storageClass,e.value,"cell history",{rawTextBytes:e.rawTextBytes})}function Dn(e,t){if(e.storageClass!==t.storageClass)return!1;if(e.storageClass==="text"){let o=e.rawTextBytes,i=t.rawTextBytes;if(o||i)return!o||!i?!1:o.length===i.length&&o.every((a,s)=>a===i[s])}let n=e.value,r=t.value;return e.storageClass==="integer"&&typeof n!=typeof r?typeof n=="number"&&Number.isSafeInteger(n)&&typeof r=="bigint"?BigInt(n)===r:typeof r=="number"&&Number.isSafeInteger(r)&&typeof n=="bigint"?n===BigInt(r):!1:n instanceof Uint8Array||r instanceof Uint8Array?!(n instanceof Uint8Array)||!(r instanceof Uint8Array)?!1:n.length===r.length&&n.every((o,i)=>o===r[i]):Object.is(n,r)}function zt(e,t=()=>"?"){switch(mt(e),e.storageClass){case"null":return{sql:"NULL",params:[]};case"integer":return{sql:t(e.value),params:[e.value]};case"real":return{sql:"CAST(? AS REAL)",params:[e.value]};case"text":return{sql:e.rawTextBytes?"CAST(substr(?, 1) AS TEXT)":"CAST(? AS TEXT)",params:[e.rawTextBytes??e.value]};case"blob":return{sql:"?",params:[e.value]}}}function Qt(e,t,n=()=>"?"){mt(t);let r=w(e);switch(t.storageClass){case"null":return{sql:`typeof(${r}) = 'null'`,params:[]};case"integer":{let o=n(t.value);return{sql:`typeof(${r}) = 'integer' AND ${r} IS ${o}`,params:[t.value]}}case"real":return{sql:`typeof(${r}) = 'real' AND ${r} IS CAST(? AS REAL)`,params:[t.value]};case"text":return{sql:`typeof(${r}) = 'text' AND CAST(${r} AS BLOB) = CAST(? AS BLOB)`,params:[t.rawTextBytes??t.value]};case"blob":return{sql:`typeof(${r}) = 'blob' AND ${r} IS ?`,params:[t.value]}}}var Ba="Row changed outside SQLite Explorer history; undo/redo was not applied.",Da="This row edit predates guarded row history and cannot be replayed safely. Save or reload the database.",Ce=class extends Error{constructor(n){super(`${n}: ${Ba}`);D(this,"code","SQLITE_EXPLORER_ROW_HISTORY_CONFLICT");this.name="RowHistoryConflictError"}},K=class extends Error{constructor(){super(Da);D(this,"code","SQLITE_EXPLORER_LEGACY_ROW_HISTORY");this.name="LegacyRowHistoryError"}};function pt(e){if(!Array.isArray(e.storageClasses))throw new K;let t=new Set;return e.storageClasses.map(n=>{let r=typeof n?.column=="string"?_t(n.column):void 0;if(!n||typeof n.column!="string"||r===void 0||t.has(r)||!Object.prototype.hasOwnProperty.call(e.row,n.column))throw new K;t.add(r);let o=e.row[n.column],i=n.storageClass==="text"&&o instanceof Uint8Array?o:void 0;return{column:n.column,state:V(n.storageClass,i?"":o,`row history column ${n.column}`,{rawTextBytes:i})}})}function Mn(e,t=()=>"?"){let n=pt(e).map(({column:r,state:o})=>Qt(r,o,t));return{sql:n.length>0?n.map(r=>`(${r.sql})`).join(" AND "):"1",params:n.flatMap(r=>r.params)}}function ri(e,t=()=>"?"){return pt(e).map(({column:n,state:r})=>({column:n,write:zt(r,t)}))}var Un="~sqlite-explorer-non-finite:",Lu=`${Un}Infinity`,Ma=`${Un}-Infinity`,vu=`${Un}NaN`,Ua=Ma.length+2;function gt(e){let t=new Set,n=[e],r=0;for(;n.length>0;){let o=n.pop();if(o!=null){if(typeof o=="boolean")r+=4;else if(typeof o=="number"||typeof o=="bigint")r+=8;else if(typeof o=="string")r+=o.length*2;else if(o instanceof Uint8Array)r+=o.byteLength;else if(typeof o=="object"){if(t.has(o))continue;if(t.add(o),r+=8,Array.isArray(o))for(let i of o)n.push(i);else for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r+=i.length*2,n.push(o[i]))}}}return r}var Va=32,qa=48;function oi(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||Number(n)<0)throw new Error(`SQLite returned an unsafe ${t} during delete undo preflight`);return Number(n)}function ii(e,t){return[...e]}function si(e,t,n){return{sql:`SELECT COUNT(*), COALESCE(SUM(${t.map(o=>{let i=w(o);return`CASE typeof(${i}) WHEN 'text' THEN 2 * octet_length(${i}) WHEN 'blob' THEN octet_length(${i}) WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 0 END`}).join(" + ")||"0"}), 0) FROM ${N(e)} WHERE ${n.sql}`,params:n.params}}function ai(e){if(!e||e.length<2)throw new Error("SQLite omitted delete undo preflight metadata");return{rowCount:oi(e[0],"row count"),valueBytes:oi(e[1],"value byte count")}}function li(e){if(!Number.isSafeInteger(e.maxSnapshotBytes)||e.maxSnapshotBytes<0)throw new Error("Delete undo snapshot budget must be a non-negative safe integer");if(e.rowCount!==e.rowIds.length)throw new Error(`Cannot delete from ${e.table}: one or more row identities no longer exist`);let n=[...new Set(e.insertableColumns)].reduce((a,s)=>a+s.length*2,0),r=e.rowIds.reduce((a,s)=>a+gt(s),0),o=e.rowCount*e.insertableColumns.reduce((a,s)=>a+s.length*2+qa,0),i=e.valueBytes+r+e.rowCount*(Va+n)+o;if(!Number.isSafeInteger(i)||i>e.maxSnapshotBytes){let a=e.operation??"Delete";throw new Error(`${a} undo snapshot exceeds the ${e.maxSnapshotBytes}-byte memory budget; ${a.toLowerCase()} fewer rows or increase sqliteExplorer.maxUndoMemory.`)}}var Xt="ksa:",Gt=1,qn=128*1024,Wa=["first","after","atOrAfter","before","last"];function Wn(e){return e.orderBy?.toLowerCase()==="rowid"&&e.columns?.[0]?.toLowerCase()==="rowid"&&!e.columns.slice(1).some(t=>t.toLowerCase()==="rowid")}function Fn(e,t){let n=(t.filters??[]).flatMap(l=>{let d=Te(l.value);return d===void 0?[]:[[l.column,d]]}),r=Te(t.globalFilter)??null,o=r===null?null:t.globalFilterColumns??t.columns??null,i=typeof t.orderBy=="string"&&t.orderBy!==""?t.orderBy:null,a=i!==null&&t.orderDir==="DESC"?"DESC":"ASC",s=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)?t.limit:null;return JSON.stringify([Gt,e,i,a,s,n,r,o])}function Hn(e,t){if(!t||e.orderByColumns?.length)return;let n=t.kind==="rowid"?["rowid"]:t.columns.map(i=>i.identifier);if(n.length===0)return;let r=typeof e.orderBy=="string"&&e.orderBy!==""?e.orderBy:void 0;if(r===void 0)return{keyColumns:n,nullableSortKey:!1,direction:"ASC"};let o=e.orderDir==="DESC"?"DESC":"ASC";return Wn(e)?{keyColumns:n,nullableSortKey:!1,direction:o}:n.includes(r)?{keyColumns:[r,...n.filter(i=>i!==r)],nullableSortKey:!1,direction:o}:{keyColumns:[r,...n],nullableSortKey:!0,direction:o}}function ci(e,t){if(!(!e||t))return{orderByColumns:e.keyColumns,orderDir:e.direction}}function Fa(e){return e===null?["null"]:Ot(e)}function Ha(e){return Array.isArray(e)&&e.length===1&&e[0]==="null"?{value:null,storageClass:"null"}:{value:wo(e),storageClass:e[0]}}function ja(e,t){if(t.length===0)throw new Error("Keyset anchor requires at least one key value");let n={v:Gt,t:e,k:t.map(Fa)};return Xt+encodeURIComponent(JSON.stringify(n))}function Ka(e){if(e.length>qn)throw new Error(`Keyset anchor exceeds the ${qn}-byte limit`)}function za(e){if(typeof e!="string"||!e.startsWith(Xt))throw new Error("Invalid keyset anchor");Ka(e);let t;try{t=JSON.parse(decodeURIComponent(e.slice(Xt.length)))}catch{throw new Error("Invalid keyset anchor encoding")}if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==3||t.v!==Gt||typeof t.t!="string"||!Array.isArray(t.k))throw new Error("Invalid keyset anchor payload");let n=t.k;if(n.length===0)throw new Error("Keyset anchor has no key values");let r,o;try{let a=n.map(Ha);r=a.map(s=>s.value),o=a.map(s=>s.storageClass)}catch(a){throw new Error(`Invalid keyset anchor value: ${a instanceof Error?a.message:String(a)}`)}if(Xt+encodeURIComponent(JSON.stringify({v:Gt,t:t.t,k:n}))!==e)throw new Error("Keyset anchor is not canonical");return{tag:t.t,values:r,valueClasses:o}}function ui(e,t,n){let r=t.keyset;if(!r||typeof r!="object"||Array.isArray(r)||!Wa.includes(r.mode))return;let o=Hn(t,n);if(!o)return;let i=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)&&t.limit>0?t.limit:void 0;if(i===void 0)return;if(r.mode==="first")return{...o,mode:"first",limit:i};if(r.mode==="last"){let l=r.lastPageRowCount??i;return typeof l!="number"||!Number.isSafeInteger(l)||l<1||l>i?void 0:{...o,mode:"last",limit:l}}if(r.anchor===void 0)return;let a=za(r.anchor);if(a.tag!==Fn(e,t)||a.values.length!==o.keyColumns.length)return;let s=o.nullableSortKey?1:0;if(a.values.some((l,d)=>l===null&&d>=s))throw new Error("Keyset anchor has NULL in an identity slot");return{...o,mode:r.mode,values:a.values,valueClasses:a.valueClasses,limit:i}}function Vn(e,t,n){return e.length===1?`${e[0]} ${t} ${n[0]}`:`(${e.join(", ")}) ${t} (${n.join(", ")})`}function Qa(e){let t=e.values,r=e.mode==="before"?e.direction==="ASC"?"DESC":"ASC":e.direction,o=(r==="ASC"?">":"<")+(e.mode==="atOrAfter"?"=":""),i=e.keyColumns.map(w),a=e.keyColumns.map((f,m)=>e.valueClasses?.[m]==="integer"?"CAST(? AS INTEGER)":"?");if(!e.nullableSortKey)return{sql:Vn(i,o,a),params:t};let s=i[0],l=i.slice(1),d=t[0],c=t.slice(1);if(d===null){let f=Vn(l,o,a.slice(1));return r==="ASC"?{sql:`((${s} IS NULL AND ${f}) OR ${s} IS NOT NULL)`,params:c}:{sql:`(${s} IS NULL AND ${f})`,params:c}}let u=Vn(i,o,a);return r==="ASC"?{sql:u,params:t}:{sql:`(${u} OR ${s} IS NULL)`,params:t}}function di(e){let{plan:t}=e,n=t.mode==="before"||t.mode==="last",r=n?t.direction==="ASC"?"DESC":"ASC":t.direction,o=[...e.whereClauses],i=[...e.filterParams];if(t.mode!=="first"&&t.mode!=="last"){let d=Qa(t);o.push(d.sql),i.push(...d.params)}let a=t.keyColumns.map(w),s=d=>a.map(c=>`${c} ${d}`).join(", "),l=`SELECT ${e.selectListSql} FROM ${e.escapedTable}`;return o.length>0&&(l+=` WHERE ${o.join(" AND ")}`),l+=` ORDER BY ${s(r)} LIMIT ${t.limit}`,n&&(l=`SELECT * FROM (${l}) ORDER BY ${s(t.direction)}`),{sql:l,params:i}}function fi(e){if(e.rows.length===0)return;let t=e.key.keyColumns.map(i=>e.projectionColumns.indexOf(i));if(t.some(i=>i<0))return;let n=i=>{if(e.excludedRowIndices?.has(i))return;let a=e.rows[i],s=[];for(let d=0;dpi)throw new Error(`Cell read chunk size must be an integer from 1 through ${pi}`)}function Ne(e){let t=String(e).toLowerCase().replace(/[_\s-]/g,"");if(t==="utf8")return"utf-8";if(t==="utf16le")return"utf-16le";if(t==="utf16be")return"utf-16be";throw new Error(`Unsupported SQLite text encoding: ${String(e)}`)}function hi(e,t,n){if(e.length!==1)throw new Error(e.length===0?`Cell ${n.table}.${n.column} no longer exists`:`Cell ${n.table}.${n.column} matched more than one row`);let r=e[0][0];if(typeof r!="string"||!Ya.has(r))throw new Error(`SQLite returned an invalid storage class for ${n.table}.${n.column}`);let o=e[0][1],i=typeof o=="bigint"?Number(o):o;if(!Number.isSafeInteger(i)||Number(i)<0)throw new Error(`SQLite returned an unsafe byte length for ${n.table}.${n.column}`);return{storageClass:r,byteLength:Number(i),...r==="text"?{textEncoding:t}:{}}}function zn(e,t){return Number.isFinite(e)&&Number(e)>=1?Math.floor(Number(e)):t}var We=he,Yt=re;var Qn="SQLITE_EXPLORER_CELL_EDIT_VALUE_TOO_LARGE",Xn="SQLITE_EXPLORER_OVERSIZED_CELL_REPLACEMENT_REQUIRED",Ei="Oversized cell metadata changed before the confirmed replacement was applied";var wi=We,Gn=class extends Error{constructor(n,r,o,i=`New ${n.toUpperCase()} cell value is ${r} bytes and exceeds the ${o}-byte edit limit.`){super(i);D(this,"storageClass",n);D(this,"actualBytes",r);D(this,"limitBytes",o);D(this,"name","CellEditPolicyError");D(this,"code",Qn)}},Fe=class extends Error{constructor(n,r,o,i,a,s=`Existing ${o.toUpperCase()} cell ${n}.${r} is ${i} bytes. Use the explicitly confirmed oversized-cell replacement path.`){super(s);D(this,"table",n);D(this,"column",r);D(this,"storageClass",o);D(this,"actualBytes",i);D(this,"limitBytes",a);D(this,"name","OversizedCellReplacementRequiredError");D(this,"code",Xn)}};function Ja(e){let t=0;for(let n=0;n=55296&&r<=56319){let o=e.charCodeAt(n+1);o>=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function He(e,t){if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);let n=typeof e=="string"?"text":e instanceof Uint8Array?"blob":void 0;if(!n)return;let r=typeof e=="string"?Ja(e):e instanceof Uint8Array?e.byteLength:0;if(r>t)throw new Gn(n,r,t)}function Si(e){let t=e??wi;if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);return t}function je(e,t){let n=Si(t);for(let r of e)He(r,n);return n}function bi(e,t){let n=Si(t);if(!e||e.storageClass!=="text"&&e.storageClass!=="blob"||!Number.isSafeInteger(e.byteLength)||e.byteLength<=n)throw new Error("Guarded oversized-cell replacement requires exact TEXT/BLOB metadata above the edit limit");return n}function Za(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="CellEditPolicyError"||t.code!==Qn||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"CellEditPolicyError",code:Qn,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function el(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="OversizedCellReplacementRequiredError"||t.code!==Xn||typeof t.table!="string"||typeof t.column!="string"||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"OversizedCellReplacementRequiredError",code:Xn,table:t.table,column:t.column,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function Ti(e){return Za(e)??el(e)}var Ai=100,tl=18,Ci=19,Ri=2;var nl=1024*1024*1024,_e=2145386496,rl="WAL database too large for in-memory mode; checkpoint it first";function Ni(e){return e.length>Ci&&e[tl]===Ri&&e[Ci]===Ri}function Ii(e,t,n){if(e===void 0)return t;if(!Number.isSafeInteger(e)||e<1)throw new Error(`${n} must be a positive safe integer`);return e}function xi(e){return`${(e/(1024*1024*1024)).toFixed(1)} GiB`}function Yn(e,t={}){let n=Ii(t.pagedThresholdBytes,nl,"Paged-open threshold"),r=Ii(t.bufferCeilingBytes,_e,"Buffer-open ceiling");if(n>r)throw new Error("Paged-open threshold must not exceed the buffer-open ceiling");if(!Number.isSafeInteger(e.sizeBytes)||e.sizeBytes<0)throw new Error("Database size must be a non-negative safe integer");return e.walMarked?e.sizeBytes>=r?{mode:"reject",message:rl}:{mode:"buffer",readOnly:e.sizeBytes>n}:e.sizeBytes>n&&e.pagedAvailable?{mode:"paged"}:e.sizeBytes>=r?{mode:"reject",message:`Database is too large to load into memory in this browser (${xi(e.sizeBytes)}; limit ${xi(r)}) and page-on-demand mode is unavailable`}:{mode:"buffer",readOnly:!1}}var ol=64*1024*1024,Ke=1e4,$i=`SELECT 1 FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? AND "type" IN ('table', 'shadow') AND "wr" = 1 LIMIT 1`;function Jn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:ol}function Zn(e){return e.storage==="paged"&&!e.filtered&&e.authorityConfirmedRowIdTable&&e.pagedFileSizeBytes>e.exactCountMaxFileBytes}function Oi(e){let t=N(e);return`SELECT (SELECT CAST(min(rowid) AS TEXT) FROM ${t}), (SELECT CAST(max(rowid) AS TEXT) FROM ${t})`}function Li(e){return`SELECT COUNT(*) FROM (SELECT 1 FROM ${N(e)} LIMIT ?)`}function vi(e,t){if(!(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>Ke+1))return e<=Ke?{count:e,isExact:!0}:{count:er(t,e),isExact:!1}}function er(e,t=Ke+1){return(!Number.isSafeInteger(t)||t<0)&&(t=Ke+1),!Number.isSafeInteger(e)||eBigInt(Number.MAX_SAFE_INTEGER)))return Number(i)}function ki(e,t,n){if(e===void 0)return t;if(!Number.isSafeInteger(e)||e<1)throw new Error(`${n} must be a positive safe integer`);return e}function Bi(e,t={}){let n=ki(t.chunkSizeBytes,65536,"Chunk size"),r=ki(t.maxCacheBytes,8388608,"Cache budget"),o=Math.max(1,Math.floor(r/n)),i=new Map;function a(s){let l=i.get(s);if(l!==void 0)return i.delete(s),i.set(s,l),l;let d=e(s*n,n),c=d.length>n?d.subarray(0,n):d;if(i.set(s,c),i.size>o){let u=i.keys().next().value;i.delete(u)}return c}return(s,l)=>{if(!Number.isSafeInteger(s)||s<0)throw new Error("Read offset must be a non-negative safe integer");if(!Number.isSafeInteger(l)||l<0)throw new Error("Read length must be a non-negative safe integer");if(l===0)return new Uint8Array(0);let d=Math.floor(s/n),c=Math.floor((s+l-1)/n);if(d===c){let m=a(d),y=s-d*n;return y>=m.length?new Uint8Array(0):m.subarray(y,Math.min(y+l,m.length))}let u=new Uint8Array(l),f=0;for(let m=d;m<=c;m++){let y=a(m),g=m*n,h=Math.max(s,g)-g,C=Math.min(s+l,g+n)-g,T=Math.min(C,y.length);if(h>=T||(u.set(y.subarray(h,T),g+h-s),f=g+T-s,y.length{if(Gi(t))return fl(t);if(typeof t!="bigint")return t;let n=Number(t);return Number.isSafeInteger(n)?n:t.toString()})}function Gi(e){return typeof e=="string"&&e.includes("\0")}function G(e){return typeof e=="bigint"&&!Number.isSafeInteger(Number(e))?"CAST(? AS INTEGER)":Gi(e)?"CAST(? AS TEXT)":"?"}function fl(e){let t=Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]);if(t==="utf-8")return new TextEncoder().encode(e);let n=t==="utf-16le",r=new Uint8Array(e.length*2);for(let o=0;o>>8,r[o*2+1]=n?i>>>8:i&255}return r}function Je(e){Ge(e).free()}function Ye(e,t){if(t!==void 0&&!(typeof SharedArrayBuffer=="function"&&t instanceof Int32Array&&t.length>0&&t.buffer instanceof SharedArrayBuffer))throw new Error("Invalid query cancellation flag");let n=()=>t!==void 0&&Atomics.load(t,0)!==0,r=()=>{let a=new Error("Query execution cancelled");throw a.name="AbortError",a};n()&&r();let o=Date.now()+sr,i;p.progress_handler(al,()=>n()?(i="cancelled",!0):Date.now(){let n=Ge(e),r=n.getColumnNames();n.free();let o=ot(e,r.length),i=Ge(o.sql),a=[];try{for(;i.step();)a.push(i.get(null,{useBigInt:!0}));let{rows:s,exactIntegerTexts:l}=Ue(a,o.valueColumnCount);return{headers:r,rows:s,exactIntegerTexts:l}}finally{i.free()}},t)}function Yi(e,t){if(t!=null)return t;let n=e??[];return n[0]==="rowid"?n.slice(1):n}function B(e,t){try{b(`ROLLBACK TO ${e}`),b(`RELEASE ${e}`)}catch(n){console.warn(`Failed to rollback savepoint (${t}):`,oe(n))}}function ml(e){for($e.add(e);$e.size>64;)$e.delete($e.values().next().value)}function Ji(e){b(`ROLLBACK TO ${e}`),b(`RELEASE ${e}`)}function rn(e){let t=Xe;if(!t||e!==void 0&&t.sessionId!==e)return!1;Xe=null,ml(t.sessionId),t.expiryTimer!==void 0&&clearTimeout(t.expiryTimer);try{b(`RELEASE ${t.savepointName}`)}catch(n){try{Ji(t.savepointName)}catch(r){let o=[n,r];try{p?.close()}catch(i){o.push(i)}finally{p=null}throw new AggregateError(o,"Cell read snapshot cleanup failed; the owning web database was closed")}}return!0}function Zi(e){e.expiryTimer!==void 0&&clearTimeout(e.expiryTimer),e.expiresAt=Math.min(e.absoluteExpiresAt,e.lastAccessAt+hr),e.expiryTimer=setTimeout(()=>{try{rn(e.sessionId)}catch(t){console.error("[Worker] Failed to expire cell read session:",oe(t))}},Math.max(1,e.expiresAt-Date.now()))}async function es(e){gi(e);let t=await te(e.table),n=U(e.rowId,t);return{table:e.table,column:e.column,predicateSql:n.sql,predicateParams:n.params}}function pl(e){let t=w(e.column);return{sql:`SELECT typeof(${t}), CASE WHEN ${t} IS NULL THEN 0 ELSE length(CAST(${t} AS BLOB)) END FROM ${N(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function gl(e){return{sql:`SELECT substr(CAST(${w(e.column)} AS BLOB), ? + 1, ?) FROM ${N(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function ve(){return Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0])}function ts(e,t){let n=pl(t),r=p.exec(n.sql,v(n.params),{useBigInt:!0});return hi(r[0]?.values??[],ve(),e)}async function en(e){if(!p)throw new Error("No database initialized");let t=await es(e);return ts(e,t)}async function yl(e){if(!p)throw new Error("No database initialized");if(Xe)throw new Error("At most one web cell read session may be open");let t=await es(e),n=k("sp_cell_read");b(`SAVEPOINT ${n}`);try{let r=ts(e,t),o=Date.now(),i={sessionId:crypto.randomUUID(),target:e,sqlTarget:t,metadata:r,savepointName:n,lastAccessAt:o,absoluteExpiresAt:o+Xi,expiresAt:o+hr,expiryTimer:void 0};return Xe=i,Zi(i),{sessionId:i.sessionId,metadata:r,expiresAt:i.expiresAt}}catch(r){try{Ji(n)}catch(o){let i=[r,o];try{p?.close()}catch(a){i.push(a)}finally{p=null}throw new AggregateError(i,"Cell read session open failed; the owning web database was closed")}throw r}}async function hl(e,t,n){yi(t,n);let r=Xe;if(!r||r.sessionId!==e)throw new Error($e.has(e)?`Cell read session ${e} is closed or expired`:`Unknown cell read session: ${String(e)}`);if(Date.now()>=r.expiresAt)throw rn(e),new Error(`Cell read session ${e} is closed or expired`);let o=gl(r.sqlTarget),a=p.exec(o.sql,v([t,n,...o.params]))[0]?.values??[];if(a.length!==1)throw new Error(a.length===0?`Cell ${r.target.table}.${r.target.column} no longer exists in its snapshot`:`Cell ${r.target.table}.${r.target.column} matched more than one row`);let s=a[0][0],l=s===null?new Uint8Array(0):s;if(!(l instanceof Uint8Array))throw new Error(`SQLite returned a non-BLOB chunk for ${r.target.table}.${r.target.column}`);return r.lastAccessAt=Date.now(),Zi(r),{byteOffset:t,bytes:l.slice(),done:t+l.byteLength>=r.metadata.byteLength}}async function El(e){if(typeof e!="string"||e.length===0)throw new Error("Cell read session id is required");if(!rn(e)&&!$e.has(e))throw new Error(`Unknown cell read session: ${e}`)}function wl(e){if(Xe&&!["readCellChunk","closeCellReadSession","initializeDatabase"].includes(e))throw new Error("A cell read snapshot is active; close it before another database operation")}function Sl(e){return!!e&&typeof e=="object"&&typeof e.slice=="function"&&typeof e.size=="number"}function bl(e,t){let n=e.size,r=Bi((o,i)=>new Uint8Array(t.readAsArrayBuffer(e.slice(o,o+i))));return{size:()=>n,read:r}}function Tl(e){let t={};return e.pagedOpenThresholdBytes!==void 0&&(t.pagedThresholdBytes=e.pagedOpenThresholdBytes),e.bufferOpenCeilingBytes!==void 0&&(t.bufferCeilingBytes=e.bufferOpenCeilingBytes),t}function Cl(e){if(e===void 0)return _e;if(!Number.isSafeInteger(e)||e<1)throw new Error("pagedExportMaxBytes must be a positive safe integer");if(e>_e)throw new Error(`pagedExportMaxBytes must not exceed ${_e} bytes`);return e}function oe(e){let t="Unknown error";try{t=e&&typeof e=="object"&&typeof e.message=="string"&&e.message?e.message:String(e)}catch{}return t||(t="Unknown error"),t.length<=Di?t:t.slice(0,Di)+`... [truncated from ${t.length} characters]`}async function Rl(e,t){if(rn(),p&&(p.close(),p=null),sr=Number.isFinite(t.queryTimeout)&&t.queryTimeout>0?t.queryTimeout:Ki,H=t.readOnlyMode===!0,yt=null,ze="memory",Oe=0,ht=Cl(t.pagedExportMaxBytes),Qi=Jn(t.pagedExactCountMaxFileBytes),hr=zn(t.cellReadSessionIdleTimeoutMs,jn),Xi=zn(t.cellReadSessionAbsoluteTimeoutMs,Kn),$e.clear(),!ae){importScripts(il);let n={};t.wasmBinary?n.wasmBinary=t.wasmBinary:n.locateFile=()=>sl,ae=await self.initSqlJs(n),zi=Bl(ae)}if(Sl(t.file)?ze=Al(t.file,Tl(t)):t.content&&t.content.length>0?p=new ae.Database(t.content):p=new ae.Database,p.run("PRAGMA foreign_keys = ON"),!H){let n=xl();n&&(H=!0,yt=n)}return H&&(typeof p.enforceReadOnly=="function"?p.enforceReadOnly():p.run("PRAGMA query_only = ON")),{operations:{},isReadOnly:H,storage:ze,...yt?{readOnlyReason:yt}:{}}}var Il=8;function Vi(e){return e?.errno===Il||/read[\s-]?only/i.test(oe(e))?"This database cannot be written by this process, so it is open read-only (SQLite: attempt to write a readonly database).":null}function xl(){let e=Number(p.exec("PRAGMA user_version")[0]?.values?.[0]?.[0])|0;try{p.run("BEGIN")}catch(n){return Vi(n)}let t=null;try{p.run(`PRAGMA user_version = ${e}`)}catch(n){t=Vi(n)}finally{p.run("ROLLBACK")}return t}function Al(e,t){let n=new FileReaderSync,r=new Uint8Array(n.readAsArrayBuffer(e.slice(0,Ai))),o=!H&&typeof ae.Database.openPagedWritable=="function",i=typeof ae.Database.openPaged=="function",a={sizeBytes:e.size,walMarked:Ni(r),pagedAvailable:o||i},s=Yn(a,t),l=null;if(s.mode==="paged"){let d=Math.min(ht,t.bufferCeilingBytes??_e),c=e.size>d,u=!H&&c?`This database exceeds the ${d}-byte browser save limit and is open read-only so edits cannot be stranded. Use the desktop extension to edit and save it.`:null,f=bl(e,n),m=[];if(o&&!c)try{return p=ae.Database.openPagedWritable(f),Oe=e.size,"paged"}catch(y){let g=oe(y);m.push(`writable paged open failed: ${g}`),p=null}if(i)try{return p=ae.Database.openPaged(f),H=!0,yt=u,Oe=e.size,"paged"}catch(y){let g=oe(y);m.push(`read-only paged open failed: ${g}`),p=null}l=m.length>0?new Error(m.join("; ")):null,s=Yn({...a,pagedAvailable:!1},t)}if(s.mode==="reject")throw new Error(l?`${s.message} (paged open failed: ${l.message})`:s.message);return p=new ae.Database(new Uint8Array(n.readAsArrayBuffer(e))),s.readOnly&&(H=!0),"memory"}async function Nl(e,t=[],n){if(!p)throw new Error("No database initialized");if(H)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");try{return Ye(()=>p.exec(e,t),n).map(o=>({headers:o.columns,rows:o.values}))}catch(r){throw r}}async function _l(e,t="[]",n){if(!p)throw new Error("No database initialized");if(typeof e!="string"||typeof t!="string")throw new TypeError("SQL and parameter JSON must be strings");let r=qo(e),o=Ho(t);if(o.length!==r.parameterCount)throw new Error(`Expected ${r.parameterCount} positional parameters.`);let i=`query_columns_${crypto.randomUUID().replace(/-/g,"")}`,a=Number(p.exec("PRAGMA query_only")[0]?.values[0]?.[0])===1,s=!1,l;try{a&&b("PRAGMA query_only = OFF"),l=Ye(()=>{b(`CREATE TEMP VIEW "${i}" AS ${r.metadataSql}`),s=!0;let d=(p.exec("SELECT substr(name, 1, 4097) FROM pragma.pragma_table_info(?, 'temp') ORDER BY cid LIMIT ?",[i,Ft+1])[0]?.values??[]).map(c=>String(c[0]));if(!d.length||d.length>Ft)throw new Error("Queries support 1 to 128 result columns.");if(d.some(c=>c.length>4096))throw new Error("Result column labels must be at most 4096 characters.");return d},n)}finally{try{s&&(a&&b("PRAGMA query_only = OFF"),b(`DROP VIEW temp."${i}"`))}finally{if(a)try{b("PRAGMA query_only = ON")}catch(d){let c=p;throw p=null,c.close(),d}}}return Ye(()=>{let d=jo(r.sql,l.length),c=Ge(d.sql);try{c.bind(o);let u=[];for(;u.length<=be&&c.step();)u.push(c.get(null,{useBigInt:!0}));return Ko(l,u,d.valueColumnCount)}finally{c.free()}},n)}function $l(e){if(e==null)return 5e3;let t=Number(e);return Number.isFinite(t)?Math.min(5e4,Math.max(1,Math.trunc(t))):5e3}function Ol(e){if(e==null)return 1/0;let t=Number(e);return Number.isFinite(t)?Math.max(1,Math.trunc(t)):1/0}var qi=100;function Ll(e){if(e==null)return[];if(!Array.isArray(e))throw new Error("Console parameters must be a JSON array.");if(e.length>qi)throw new Error(`Use at most ${qi} positional parameters.`);for(let t of e)if(t!==null){if(typeof t=="string"){if(t.includes("\0"))throw new Error("Console parameters must not contain NUL bytes; SQLite would bind the text truncated at the first one.");continue}if(!(typeof t=="number"&&Number.isFinite(t)))throw new Error("Console parameters must be null, string, or finite number values.")}return e}function ns(e,t){try{e.bind(t)}catch(n){throw new Error(`cannot bind ${t.length} positional parameter${t.length===1?"":"s"}: `+oe(n))}}var vl=4*65536,Pl=65536,rs=Object.freeze(["id","parent","notused","detail"]),os="SQLite returned an unsupported query plan.",kl=/^pragma\b/i;function Bl(e){let t=e?._sqlite_explorer_register_query_plan;if(typeof t!="function")return!1;if(t()!==0)throw new Error("Unable to initialize the bounded query-plan reader.");return!0}function is(e){let t=0;for(;;){let n=t;for(;tbe}}function Ml(e,t){let n=Wo(e,t),r=p.prepare(n.sql);try{if(r.bind(n.params),!r.step())throw new Error(os);return as(Fo(r.get()[0]).rows)}finally{r.free()}}function Ul(e,t){if(kl.test(is(e)))throw new Error("PRAGMA statements have no query plan (and some pragmas take effect while being compiled, so they are not even prepared here). Use Run.");let n=Ge(`EXPLAIN QUERY PLAN ${e}`);try{t.length>0&&ns(n,t);let r=[];for(;r.length<=be&&n.step();){let o=n.get();if(o.length!==rs.length||typeof o[3]!="string")throw new Error(os);if(new TextEncoder().encode(o[3]).byteLength>Pl)throw new Error("Query plan detail exceeds the 65,536-byte limit.");r.push(o)}return as(r)}finally{n.free()}}function Vl(e,t){if(typeof e!="string"||e.trim()==="")throw new Error("Enter one SQL statement to explain.");if(new TextEncoder().encode(e).byteLength>vl)throw new Error("Query plan SQL exceeds 262,144 UTF-8 bytes.");let n=pe(e);for(let r of n.matchAll(ss))if(r[0]===";")throw new Error("Exactly one SQL statement is required");return zi&&Dl(n)?Ml(n,t):Ul(n,t)}async function ql(e,t={},n){if(!p)throw new Error("No database initialized");if(H)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");if(typeof e=="string"&&e.includes("\0"))throw new Error("SQL contains a NUL byte; SQLite stops compiling at the first NUL, so the rest of the script would be silently skipped");let r=Ll(t.params),o=$l(t.maxRows),i=Ol(t.maxStatements),a=Date.now(),s=p.exec("SELECT total_changes()")[0].values[0][0],l=p.exec("PRAGMA schema_version")[0].values[0][0],d=()=>{let y=p.exec("SELECT total_changes()")[0].values[0][0],g=p.exec("PRAGMA schema_version")[0].values[0][0];return{mutated:y-s>0||g!==l,changes:y-s,durationMs:Date.now()-a}},c=()=>{try{return d()}catch{return{mutated:!0,changes:0,durationMs:Date.now()-a}}};if(t.explain===!0)try{return{results:[Ye(()=>Vl(e,r),n)],explain:!0,statementsSkipped:!1,...d()}}catch(y){return{results:[],error:oe(y),explain:!0,multiStatement:!1,statementsSkipped:!1,...c()}}let u=0,f=!1,m;try{m=Ye(()=>{let y=[],g=p.iterateStatements(e),h=!1;for(;;){if(u>=i){h=!0;break}u++;let C=g.next();if(C.done)break;let T=C.value;try{r.length>0&&ns(T,r);let I=T.getColumnNames(),x=!1,S=!1;if(I.length===0&&(S=T.step(),x=!0,S&&(I=T.getColumnNames())),I.length===0){if(!x||S)for(;T.step(););}else{let R=[],_=!1;for(x||(S=T.step());S;)R.length1,statementsSkipped:f,...h}}return{results:m,statementsSkipped:f,...d()}}async function Wl(e){if(!p)throw new Error("No database initialized");let t=ze==="paged"&&!H;if(ze==="paged"&&H)throw new Error("paged databases are read-only snapshots; export() is only available on openPagedWritable instances");let n=()=>new Error(`Cannot download this page-on-demand database: the merged image would exceed the ${ht}-byte browser memory limit. Saving materializes the complete database in memory; use the desktop extension or reduce the database size.`);if(t&&Oe>ht)throw n();let r;try{r=p.export()}catch(o){let i=oe(o);throw t&&/transaction is open|while a transaction/i.test(i)?new Error("Cannot save while a database transaction is open; retry after the edit completes.",{cause:o}):o}if(t&&r.byteLength>ht)throw n();return r}async function Fl(e,t,n,r,o={}){if(!p)throw new Error("No database initialized");let i=e?.table;if(!i)throw new Error("No table specified");let{format:a="csv",header:s=!0,includeTableName:l=!0,rowIds:d=null,maxExportBytes:c}=o;if(!["csv","json","sql","excel"].includes(a))throw new Error(`Unsupported export format: ${a}`);let u=Number.isSafeInteger(c)&&c>0?Math.min(c,cl):gr,f=[{sql:"",params:[]}];if(d&&d.length>0){let A=await te(i);if(d.some(Z)&&!d.every(Z))throw new Error("Cannot mix rowid and primary-key row identities");let L=new Set,E=[];for(let O of d){let q=A.kind==="rowid"?M(O):O,Y=String(q);L.has(Y)||(L.add(Y),E.push(q))}f=qe(E,A)}let m=t&&t.length>0?t:Hl(i);if(m.length>Zt)throw new Error(`Cannot export more than ${Zt} columns`);let y=a!=="csv"&&a!=="excel",g=m.map((A,L)=>{let E=w(A),O=`typeof(${E})`,q=`octet_length(${E})`;return`CASE ${O} WHEN 'null' THEN 'n:0:' WHEN 'integer' THEN 'i:0:' || CAST(${E} AS TEXT) WHEN 'real' THEN 'r:0:' || printf('%!.17g', ${E}) WHEN 'text' THEN 't:' || CAST(${q} AS TEXT) || ':' || hex(CAST(${E} AS BLOB)) WHEN 'blob' THEN 'b:' || CAST(${q} AS TEXT) || ':' || `+(y?`hex(${E}) `:"'' ")+`END AS ${w(`__export_cell_${L}`)}`}).join(", "),h=k("sp_export_rows");b(`SAVEPOINT ${h}`);let C=[];try{let A=1024;for(let L of f){let E=L.sql?` WHERE ${L.sql}`:"";if(A+=Ql(i,m,E,L.params,a,u),!Number.isSafeInteger(A)||A>u)throw Er(u)}for(let L of f){let E=L.sql?` WHERE ${L.sql}`:"",O=p.exec(`SELECT ${g} FROM ${N(i)}${E}`,L.params);O.length>0&&C.push(...O[0].values)}b(`RELEASE ${h}`)}catch(A){throw B(h,"exportTable"),A}let T=m,I=Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),x=C.map((A,L)=>{if(A.length!==m.length)throw new Error(`SQLite returned ${A.length} packed export cells for row ${L}; expected ${m.length}`);return m.map((E,O)=>Kl(i,E,A[O],y,I))}),S=new lr(u),R="text/plain",_=`${i}.${a}`;switch(a){case"csv":Wi(T,x,s,S),R="text/csv";break;case"json":Xl(T,x,S),R="application/json";break;case"sql":Gl(i,T,x,l,S),R="text/sql";break;case"excel":Wi(T,x,s,S),R="text/csv",_=`${i}.csv`;break}return{contentChunks:S.finish(),filename:_,mimeType:R}}function Er(e){if(e===gr)return new Error(`Web demo exports are limited to ${ll} because the worker RPC cannot stream downloads; use the desktop extension for larger exports.`);let t=e/(1024*1024);return new Error(`Export exceeds the ${t} MiB (${e} bytes) limit; the worker assembles the whole file in memory, so larger exports need the native engine.`)}function Hl(e){let t=p.prepare(`SELECT * FROM ${N(e)} LIMIT 0`);try{return t.getColumnNames()}finally{t.free()}}function jl(e,t,n){if(e.length!==t*2||/[^0-9a-f]/i.test(e))throw new Error(`SQLite returned invalid packed bytes for ${n}`);let r=new Uint8Array(t);for(let o=0;o1;){let n=[];for(let r=0;r{let f=w(u),m=`length(${f})`,y=o==="csv"||o==="excel"?"64":o==="json"?`((${m} + 2) / 3) * 4 + 64`:`${m} * 2 + 64`;return`CASE typeof(${f}) WHEN 'text' THEN length(CAST(${f} AS BLOB)) * 6 + 64 WHEN 'blob' THEN ${y} ELSE 64 END`})),l=p.exec(`SELECT COUNT(*), COALESCE(SUM(${a}), 0) FROM ${N(e)}${n}`,r)[0]?.values?.[0]??[0,0],d=Number(l[0]),c=Number(l[1])+d*128;if(!Number.isSafeInteger(c)||c<0)throw Er(i);return c}function ar(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}var lr=class{constructor(t=gr){this.chunks=[],this.pending="",this.outputBytes=0,this.capBytes=t}append(t){if(this.outputBytes+=ar(t),!Number.isSafeInteger(this.outputBytes)||this.outputBytes>this.capBytes)throw Er(this.capBytes);let n=0;for(;n0&&t.charCodeAt(o-1)>=55296&&t.charCodeAt(o-1)<=56319&&t.charCodeAt(o)>=56320&&t.charCodeAt(o)<=57343&&r--,r===0){this.flush();continue}this.pending+=t.slice(n,n+r),n+=r,this.pending.length>=Mi&&this.flush()}}flush(){this.pending.length>0&&(this.chunks.push(this.pending),this.pending="")}finish(){return this.flush(),this.chunks}};function Wi(e,t,n,r){let o=!1,i=a=>{o&&r.append(` -`),r.append(a.join(",")),o=!0};n&&i(e.map(a=>xn({storageClass:"text",value:a})));for(let a of t)i(a.map(xn))}function Xl(e,t,n){n.append("[");for(let r=0;r1e3)throw new Error("JSON merge patch depth limit exceeded");if(e===t)return;if(!z(e)||!z(t)||Array.isArray(e)||Array.isArray(t))return t;let r=Object.create(null),o=!1;for(let i of Object.keys(t)){let a=Object.prototype.hasOwnProperty.call(e,i)?e[i]:void 0,s=t[i];if(a===void 0)r[i]=s,o=!0;else if(a!==s){let l=Zo(a,s,n+1);l!==void 0&&(r[i]=l,o=!0)}}for(let i of Object.keys(e))Object.prototype.hasOwnProperty.call(t,i)||(r[i]=null,o=!0);return o?r:void 0}function ei(e,t,n=0){if(n>1e3)throw new Error("JSON apply merge patch depth limit exceeded");if(t===null)return null;if(typeof t!="object"||Array.isArray(t))return t;let r;typeof e!="object"||e===null||Array.isArray(e)?r=Object.create(null):r=Object.assign(Object.create(null),e);let o=t;for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i)){let a=o[i];a===null?delete r[i]:r[i]=ei(r[i],a,n+1)}return r}function Ht(e){if(typeof e=="string")try{let t=JSON.parse(e);return z(t)?t:void 0}catch{return}}function ti(e,t,n,r,o){let i=o==="undo"?r:n,a=o==="undo"?n:r,s=()=>Yo(e,i)?{kind:"write",value:a}:{kind:"conflict"};if(jt(e)||jt(t)||jt(n)||jt(r))return s();let l=Ht(e),d=Ht(t),c=Ht(n),u=Ht(r);if(!l||!d||!c||!u)return s();if(!ni(l,o==="undo"?u:c,d,c,0))return{kind:"conflict"};if(Yo(e,i))return{kind:"write",value:a};let m=o==="undo"?Bn(l,d,c,0):ei(l,d,0);return{kind:"write",value:JSON.stringify(m)}}function ni(e,t,n,r,o){if(o>1e3)throw new Error("JSON history replay depth limit exceeded");for(let i of Object.keys(n)){let a=n[i],s=Object.prototype.hasOwnProperty.call(e,i),l=Object.prototype.hasOwnProperty.call(t,i),d=Object.prototype.hasOwnProperty.call(r,i),c=s?e[i]:void 0,u=l?t[i]:void 0,f=d?r[i]:void 0;if(z(a)){if(!d||!z(f)){if(!Go(s,c,l,u,o+1))return!1;continue}if(!s||!z(c)||!l||!z(u)||!ni(c,u,a,f,o+1))return!1;continue}if(!Go(s,c,l,u,o+1))return!1}return!0}function Go(e,t,n,r,o){return e===n&&(!e||kn(t,r,o))}function kn(e,t,n){if(n>1e3)throw new Error("JSON history replay depth limit exceeded");if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length?!1:e.every((i,a)=>kn(i,t[a],n+1));if(!z(e)||!z(t))return!1;let r=Object.keys(e),o=Object.keys(t);return r.length!==o.length?!1:r.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&kn(e[i],t[i],n+1))}function Yo(e,t){return e instanceof Uint8Array||t instanceof Uint8Array?!(e instanceof Uint8Array)||!(t instanceof Uint8Array)?!1:e.length===t.length&&e.every((n,r)=>n===t[r]):Object.is(e,t)}function Bn(e,t,n,r){if(r>1e3)throw new Error("JSON undo restore depth limit exceeded");let o=Object.assign(Object.create(null),e);for(let i of Object.keys(t)){let a=t[i],s=Object.prototype.hasOwnProperty.call(n,i),l=s?n[i]:void 0;if(z(a))if(s&&z(l))if(Object.prototype.hasOwnProperty.call(o,i)&&z(o[i])){let d=o[i];o[i]=Bn(d,a,l,r+1)}else o[i]=l;else if(s)o[i]=l;else{let d=Object.prototype.hasOwnProperty.call(o,i)&&z(o[i])?o[i]:Object.create(null),c=Bn(d,a,Object.create(null),r+1);Object.keys(c).length===0?delete o[i]:o[i]=c}else s?o[i]=l:delete o[i]}return o}function jt(e){if(typeof e!="string")return!1;let n=e.replace(/"(?:\\.|[^"\\])*"/g,'""').match(/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g);return n?n.some(r=>{let o=Number(r);return!Number.isFinite(o)||JSON.stringify(o)!==r}):!1}function z(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var va=new Set(["null","integer","real","text","blob"]),Pa="Cell changed outside SQLite Explorer history; undo/redo was not applied.",ka="This edit predates guarded cell history and cannot be replayed safely. Save or reload the database.",se=class extends Error{constructor(n,r){let o=r.length===1?`${n}.${r[0]}`:`${r.length} cells in ${n}`;super(`${o}: ${Pa}`);D(this,"code","SQLITE_EXPLORER_CELL_HISTORY_CONFLICT");this.name="CellHistoryConflictError"}},ft=class extends Error{constructor(){super(ka);D(this,"code","SQLITE_EXPLORER_LEGACY_CELL_HISTORY");this.name="LegacyCellHistoryError"}};function ee(e){let t=w(e);return`typeof(${t}), CASE WHEN typeof(${t}) = 'text' THEN CAST(${t} AS BLOB) ELSE ${t} END`}function Ba(e,t,n){if(!t)throw new Error(`SQLite text encoding is required for ${n}`);try{return{value:de(t).decode(e)}}catch{return{value:"",rawTextBytes:e}}}function V(e,t,n,r={}){if(typeof e!="string"||!va.has(e))throw new Error(`SQLite returned an invalid storage class for ${n}`);let o=e;if(o!=="text"&&r.rawTextBytes!==void 0)throw new Error(`SQLite returned raw TEXT bytes for non-TEXT ${n}`);if(o==="text"){if(t instanceof Uint8Array)return{storageClass:o,...Ba(t,r.textEncoding,n)};if(typeof t!="string")throw new Error(`SQLite returned an invalid text value for ${n}`);if(r.rawTextBytes!==void 0&&!(r.rawTextBytes instanceof Uint8Array))throw new Error(`SQLite returned invalid raw TEXT bytes for ${n}`);return{storageClass:o,value:t,...r.rawTextBytes instanceof Uint8Array?{rawTextBytes:r.rawTextBytes}:{}}}if(!(o==="null"?t===null:o==="integer"?typeof t=="bigint"||typeof t=="number"&&Number.isInteger(t):o==="real"?typeof t=="number":t instanceof Uint8Array))throw new Error(`SQLite returned an invalid ${o} value for ${n}`);return{storageClass:o,value:t}}function mt(e){if(!e||typeof e!="object")throw new ft;V(e.storageClass,e.value,"cell history",{rawTextBytes:e.rawTextBytes})}function Dn(e,t){if(e.storageClass!==t.storageClass)return!1;if(e.storageClass==="text"){let o=e.rawTextBytes,i=t.rawTextBytes;if(o||i)return!o||!i?!1:o.length===i.length&&o.every((a,s)=>a===i[s])}let n=e.value,r=t.value;return e.storageClass==="integer"&&typeof n!=typeof r?typeof n=="number"&&Number.isSafeInteger(n)&&typeof r=="bigint"?BigInt(n)===r:typeof r=="number"&&Number.isSafeInteger(r)&&typeof n=="bigint"?n===BigInt(r):!1:n instanceof Uint8Array||r instanceof Uint8Array?!(n instanceof Uint8Array)||!(r instanceof Uint8Array)?!1:n.length===r.length&&n.every((o,i)=>o===r[i]):Object.is(n,r)}function zt(e,t=()=>"?"){switch(mt(e),e.storageClass){case"null":return{sql:"NULL",params:[]};case"integer":return{sql:t(e.value),params:[e.value]};case"real":return{sql:"CAST(? AS REAL)",params:[e.value]};case"text":return{sql:e.rawTextBytes?"CAST(substr(?, 1) AS TEXT)":"CAST(? AS TEXT)",params:[e.rawTextBytes??e.value]};case"blob":return{sql:"?",params:[e.value]}}}function Qt(e,t,n=()=>"?"){mt(t);let r=w(e);switch(t.storageClass){case"null":return{sql:`typeof(${r}) = 'null'`,params:[]};case"integer":{let o=n(t.value);return{sql:`typeof(${r}) = 'integer' AND ${r} IS ${o}`,params:[t.value]}}case"real":return{sql:`typeof(${r}) = 'real' AND ${r} IS CAST(? AS REAL)`,params:[t.value]};case"text":return{sql:`typeof(${r}) = 'text' AND CAST(${r} AS BLOB) = CAST(? AS BLOB)`,params:[t.rawTextBytes??t.value]};case"blob":return{sql:`typeof(${r}) = 'blob' AND ${r} IS ?`,params:[t.value]}}}var Da="Row changed outside SQLite Explorer history; undo/redo was not applied.",Ma="This row edit predates guarded row history and cannot be replayed safely. Save or reload the database.",Ce=class extends Error{constructor(n){super(`${n}: ${Da}`);D(this,"code","SQLITE_EXPLORER_ROW_HISTORY_CONFLICT");this.name="RowHistoryConflictError"}},K=class extends Error{constructor(){super(Ma);D(this,"code","SQLITE_EXPLORER_LEGACY_ROW_HISTORY");this.name="LegacyRowHistoryError"}};function pt(e){if(!Array.isArray(e.storageClasses))throw new K;let t=new Set;return e.storageClasses.map(n=>{let r=typeof n?.column=="string"?_t(n.column):void 0;if(!n||typeof n.column!="string"||r===void 0||t.has(r)||!Object.prototype.hasOwnProperty.call(e.row,n.column))throw new K;t.add(r);let o=e.row[n.column],i=n.storageClass==="text"&&o instanceof Uint8Array?o:void 0;return{column:n.column,state:V(n.storageClass,i?"":o,`row history column ${n.column}`,{rawTextBytes:i})}})}function Mn(e,t=()=>"?"){let n=pt(e).map(({column:r,state:o})=>Qt(r,o,t));return{sql:n.length>0?n.map(r=>`(${r.sql})`).join(" AND "):"1",params:n.flatMap(r=>r.params)}}function ri(e,t=()=>"?"){return pt(e).map(({column:n,state:r})=>({column:n,write:zt(r,t)}))}var Un="~sqlite-explorer-non-finite:",vu=`${Un}Infinity`,Ua=`${Un}-Infinity`,Pu=`${Un}NaN`,Va=Ua.length+2;function gt(e){let t=new Set,n=[e],r=0;for(;n.length>0;){let o=n.pop();if(o!=null){if(typeof o=="boolean")r+=4;else if(typeof o=="number"||typeof o=="bigint")r+=8;else if(typeof o=="string")r+=o.length*2;else if(o instanceof Uint8Array)r+=o.byteLength;else if(typeof o=="object"){if(t.has(o))continue;if(t.add(o),r+=8,Array.isArray(o))for(let i of o)n.push(i);else for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r+=i.length*2,n.push(o[i]))}}}return r}var qa=32,Wa=48;function oi(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||Number(n)<0)throw new Error(`SQLite returned an unsafe ${t} during delete undo preflight`);return Number(n)}function ii(e,t){return[...e]}function si(e,t,n){return{sql:`SELECT COUNT(*), COALESCE(SUM(${t.map(o=>{let i=w(o);return`CASE typeof(${i}) WHEN 'text' THEN 2 * octet_length(${i}) WHEN 'blob' THEN octet_length(${i}) WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 0 END`}).join(" + ")||"0"}), 0) FROM ${N(e)} WHERE ${n.sql}`,params:n.params}}function ai(e){if(!e||e.length<2)throw new Error("SQLite omitted delete undo preflight metadata");return{rowCount:oi(e[0],"row count"),valueBytes:oi(e[1],"value byte count")}}function li(e){if(!Number.isSafeInteger(e.maxSnapshotBytes)||e.maxSnapshotBytes<0)throw new Error("Delete undo snapshot budget must be a non-negative safe integer");if(e.rowCount!==e.rowIds.length)throw new Error(`Cannot delete from ${e.table}: one or more row identities no longer exist`);let n=[...new Set(e.insertableColumns)].reduce((a,s)=>a+s.length*2,0),r=e.rowIds.reduce((a,s)=>a+gt(s),0),o=e.rowCount*e.insertableColumns.reduce((a,s)=>a+s.length*2+Wa,0),i=e.valueBytes+r+e.rowCount*(qa+n)+o;if(!Number.isSafeInteger(i)||i>e.maxSnapshotBytes){let a=e.operation??"Delete";throw new Error(`${a} undo snapshot exceeds the ${e.maxSnapshotBytes}-byte memory budget; ${a.toLowerCase()} fewer rows or increase sqliteExplorer.maxUndoMemory.`)}}var Xt="ksa:",Gt=1,qn=128*1024,Fa=["first","after","atOrAfter","before","last"];function Wn(e){return e.orderBy?.toLowerCase()==="rowid"&&e.columns?.[0]?.toLowerCase()==="rowid"&&!e.columns.slice(1).some(t=>t.toLowerCase()==="rowid")}function Fn(e,t){let n=(t.filters??[]).flatMap(l=>{let d=Te(l.value);return d===void 0?[]:[[l.column,d]]}),r=Te(t.globalFilter)??null,o=r===null?null:t.globalFilterColumns??t.columns??null,i=typeof t.orderBy=="string"&&t.orderBy!==""?t.orderBy:null,a=i!==null&&t.orderDir==="DESC"?"DESC":"ASC",s=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)?t.limit:null;return JSON.stringify([Gt,e,i,a,s,n,r,o])}function Hn(e,t){if(!t||e.orderByColumns?.length)return;let n=t.kind==="rowid"?["rowid"]:t.columns.map(i=>i.identifier);if(n.length===0)return;let r=typeof e.orderBy=="string"&&e.orderBy!==""?e.orderBy:void 0;if(r===void 0)return{keyColumns:n,nullableSortKey:!1,direction:"ASC"};let o=e.orderDir==="DESC"?"DESC":"ASC";return Wn(e)?{keyColumns:n,nullableSortKey:!1,direction:o}:n.includes(r)?{keyColumns:[r,...n.filter(i=>i!==r)],nullableSortKey:!1,direction:o}:{keyColumns:[r,...n],nullableSortKey:!0,direction:o}}function ci(e,t){if(!(!e||t))return{orderByColumns:e.keyColumns,orderDir:e.direction}}function Ha(e){return e===null?["null"]:Ot(e)}function ja(e){return Array.isArray(e)&&e.length===1&&e[0]==="null"?{value:null,storageClass:"null"}:{value:wo(e),storageClass:e[0]}}function Ka(e,t){if(t.length===0)throw new Error("Keyset anchor requires at least one key value");let n={v:Gt,t:e,k:t.map(Ha)};return Xt+encodeURIComponent(JSON.stringify(n))}function za(e){if(e.length>qn)throw new Error(`Keyset anchor exceeds the ${qn}-byte limit`)}function Qa(e){if(typeof e!="string"||!e.startsWith(Xt))throw new Error("Invalid keyset anchor");za(e);let t;try{t=JSON.parse(decodeURIComponent(e.slice(Xt.length)))}catch{throw new Error("Invalid keyset anchor encoding")}if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==3||t.v!==Gt||typeof t.t!="string"||!Array.isArray(t.k))throw new Error("Invalid keyset anchor payload");let n=t.k;if(n.length===0)throw new Error("Keyset anchor has no key values");let r,o;try{let a=n.map(ja);r=a.map(s=>s.value),o=a.map(s=>s.storageClass)}catch(a){throw new Error(`Invalid keyset anchor value: ${a instanceof Error?a.message:String(a)}`)}if(Xt+encodeURIComponent(JSON.stringify({v:Gt,t:t.t,k:n}))!==e)throw new Error("Keyset anchor is not canonical");return{tag:t.t,values:r,valueClasses:o}}function ui(e,t,n){let r=t.keyset;if(!r||typeof r!="object"||Array.isArray(r)||!Fa.includes(r.mode))return;let o=Hn(t,n);if(!o)return;let i=typeof t.limit=="number"&&Number.isSafeInteger(t.limit)&&t.limit>0?t.limit:void 0;if(i===void 0)return;if(r.mode==="first")return{...o,mode:"first",limit:i};if(r.mode==="last"){let l=r.lastPageRowCount??i;return typeof l!="number"||!Number.isSafeInteger(l)||l<1||l>i?void 0:{...o,mode:"last",limit:l}}if(r.anchor===void 0)return;let a=Qa(r.anchor);if(a.tag!==Fn(e,t)||a.values.length!==o.keyColumns.length)return;let s=o.nullableSortKey?1:0;if(a.values.some((l,d)=>l===null&&d>=s))throw new Error("Keyset anchor has NULL in an identity slot");return{...o,mode:r.mode,values:a.values,valueClasses:a.valueClasses,limit:i}}function Vn(e,t,n){return e.length===1?`${e[0]} ${t} ${n[0]}`:`(${e.join(", ")}) ${t} (${n.join(", ")})`}function Xa(e){let t=e.values,r=e.mode==="before"?e.direction==="ASC"?"DESC":"ASC":e.direction,o=(r==="ASC"?">":"<")+(e.mode==="atOrAfter"?"=":""),i=e.keyColumns.map(w),a=e.keyColumns.map((f,m)=>e.valueClasses?.[m]==="integer"?"CAST(? AS INTEGER)":"?");if(!e.nullableSortKey)return{sql:Vn(i,o,a),params:t};let s=i[0],l=i.slice(1),d=t[0],c=t.slice(1);if(d===null){let f=Vn(l,o,a.slice(1));return r==="ASC"?{sql:`((${s} IS NULL AND ${f}) OR ${s} IS NOT NULL)`,params:c}:{sql:`(${s} IS NULL AND ${f})`,params:c}}let u=Vn(i,o,a);return r==="ASC"?{sql:u,params:t}:{sql:`(${u} OR ${s} IS NULL)`,params:t}}function di(e){let{plan:t}=e,n=t.mode==="before"||t.mode==="last",r=n?t.direction==="ASC"?"DESC":"ASC":t.direction,o=[...e.whereClauses],i=[...e.filterParams];if(t.mode!=="first"&&t.mode!=="last"){let d=Xa(t);o.push(d.sql),i.push(...d.params)}let a=t.keyColumns.map(w),s=d=>a.map(c=>`${c} ${d}`).join(", "),l=`SELECT ${e.selectListSql} FROM ${e.escapedTable}`;return o.length>0&&(l+=` WHERE ${o.join(" AND ")}`),l+=` ORDER BY ${s(r)} LIMIT ${t.limit}`,n&&(l=`SELECT * FROM (${l}) ORDER BY ${s(t.direction)}`),{sql:l,params:i}}function fi(e){if(e.rows.length===0)return;let t=e.key.keyColumns.map(i=>e.projectionColumns.indexOf(i));if(t.some(i=>i<0))return;let n=i=>{if(e.excludedRowIndices?.has(i))return;let a=e.rows[i],s=[];for(let d=0;dpi)throw new Error(`Cell read chunk size must be an integer from 1 through ${pi}`)}function Ne(e){let t=String(e).toLowerCase().replace(/[_\s-]/g,"");if(t==="utf8")return"utf-8";if(t==="utf16le")return"utf-16le";if(t==="utf16be")return"utf-16be";throw new Error(`Unsupported SQLite text encoding: ${String(e)}`)}function hi(e,t,n){if(e.length!==1)throw new Error(e.length===0?`Cell ${n.table}.${n.column} no longer exists`:`Cell ${n.table}.${n.column} matched more than one row`);let r=e[0][0];if(typeof r!="string"||!Ja.has(r))throw new Error(`SQLite returned an invalid storage class for ${n.table}.${n.column}`);let o=e[0][1],i=typeof o=="bigint"?Number(o):o;if(!Number.isSafeInteger(i)||Number(i)<0)throw new Error(`SQLite returned an unsafe byte length for ${n.table}.${n.column}`);return{storageClass:r,byteLength:Number(i),...r==="text"?{textEncoding:t}:{}}}function zn(e,t){return Number.isFinite(e)&&Number(e)>=1?Math.floor(Number(e)):t}var We=he,Yt=re;var Qn="SQLITE_EXPLORER_CELL_EDIT_VALUE_TOO_LARGE",Xn="SQLITE_EXPLORER_OVERSIZED_CELL_REPLACEMENT_REQUIRED",Ei="Oversized cell metadata changed before the confirmed replacement was applied";var wi=We,Gn=class extends Error{constructor(n,r,o,i=`New ${n.toUpperCase()} cell value is ${r} bytes and exceeds the ${o}-byte edit limit.`){super(i);D(this,"storageClass",n);D(this,"actualBytes",r);D(this,"limitBytes",o);D(this,"name","CellEditPolicyError");D(this,"code",Qn)}},Fe=class extends Error{constructor(n,r,o,i,a,s=`Existing ${o.toUpperCase()} cell ${n}.${r} is ${i} bytes. Use the explicitly confirmed oversized-cell replacement path.`){super(s);D(this,"table",n);D(this,"column",r);D(this,"storageClass",o);D(this,"actualBytes",i);D(this,"limitBytes",a);D(this,"name","OversizedCellReplacementRequiredError");D(this,"code",Xn)}};function Za(e){let t=0;for(let n=0;n=55296&&r<=56319){let o=e.charCodeAt(n+1);o>=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}function He(e,t){if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);let n=typeof e=="string"?"text":e instanceof Uint8Array?"blob":void 0;if(!n)return;let r=typeof e=="string"?Za(e):e instanceof Uint8Array?e.byteLength:0;if(r>t)throw new Gn(n,r,t)}function Si(e){let t=e??wi;if(!Number.isSafeInteger(t)||t<1)throw new Error(`Cell edit limit must be a positive safe integer, got ${t}`);return t}function je(e,t){let n=Si(t);for(let r of e)He(r,n);return n}function bi(e,t){let n=Si(t);if(!e||e.storageClass!=="text"&&e.storageClass!=="blob"||!Number.isSafeInteger(e.byteLength)||e.byteLength<=n)throw new Error("Guarded oversized-cell replacement requires exact TEXT/BLOB metadata above the edit limit");return n}function el(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="CellEditPolicyError"||t.code!==Qn||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"CellEditPolicyError",code:Qn,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function tl(e){if(!e||typeof e!="object")return;let t=e;if(!(t.name!=="OversizedCellReplacementRequiredError"||t.code!==Xn||typeof t.table!="string"||typeof t.column!="string"||t.storageClass!=="text"&&t.storageClass!=="blob"||!Number.isSafeInteger(t.actualBytes)||Number(t.actualBytes)<0||!Number.isSafeInteger(t.limitBytes)||Number(t.limitBytes)<1||typeof t.message!="string"))return{name:"OversizedCellReplacementRequiredError",code:Xn,table:t.table,column:t.column,storageClass:t.storageClass,actualBytes:Number(t.actualBytes),limitBytes:Number(t.limitBytes),message:t.message}}function Ti(e){return el(e)??tl(e)}var Ai=100,nl=18,Ci=19,Ri=2;var rl=1024*1024*1024,_e=2145386496,ol="WAL database too large for in-memory mode; checkpoint it first";function Ni(e){return e.length>Ci&&e[nl]===Ri&&e[Ci]===Ri}function Ii(e,t,n){if(e===void 0)return t;if(!Number.isSafeInteger(e)||e<1)throw new Error(`${n} must be a positive safe integer`);return e}function xi(e){return`${(e/(1024*1024*1024)).toFixed(1)} GiB`}function Yn(e,t={}){let n=Ii(t.pagedThresholdBytes,rl,"Paged-open threshold"),r=Ii(t.bufferCeilingBytes,_e,"Buffer-open ceiling");if(n>r)throw new Error("Paged-open threshold must not exceed the buffer-open ceiling");if(!Number.isSafeInteger(e.sizeBytes)||e.sizeBytes<0)throw new Error("Database size must be a non-negative safe integer");return e.walMarked?e.sizeBytes>=r?{mode:"reject",message:ol}:{mode:"buffer",readOnly:e.sizeBytes>n}:e.sizeBytes>n&&e.pagedAvailable?{mode:"paged"}:e.sizeBytes>=r?{mode:"reject",message:`Database is too large to load into memory in this browser (${xi(e.sizeBytes)}; limit ${xi(r)}) and page-on-demand mode is unavailable`}:{mode:"buffer",readOnly:!1}}var il=64*1024*1024,Ke=1e4,$i=`SELECT 1 FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? AND "type" IN ('table', 'shadow') AND "wr" = 1 LIMIT 1`;function Jn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:il}function Zn(e){return e.storage==="paged"&&!e.filtered&&e.authorityConfirmedRowIdTable&&e.pagedFileSizeBytes>e.exactCountMaxFileBytes}function Oi(e){let t=N(e);return`SELECT (SELECT CAST(min(rowid) AS TEXT) FROM ${t}), (SELECT CAST(max(rowid) AS TEXT) FROM ${t})`}function Li(e){return`SELECT COUNT(*) FROM (SELECT 1 FROM ${N(e)} LIMIT ?)`}function vi(e,t){if(!(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>Ke+1))return e<=Ke?{count:e,isExact:!0}:{count:er(t,e),isExact:!1}}function er(e,t=Ke+1){return(!Number.isSafeInteger(t)||t<0)&&(t=Ke+1),!Number.isSafeInteger(e)||eBigInt(Number.MAX_SAFE_INTEGER)))return Number(i)}function ki(e,t,n){if(e===void 0)return t;if(!Number.isSafeInteger(e)||e<1)throw new Error(`${n} must be a positive safe integer`);return e}function Bi(e,t={}){let n=ki(t.chunkSizeBytes,65536,"Chunk size"),r=ki(t.maxCacheBytes,8388608,"Cache budget"),o=Math.max(1,Math.floor(r/n)),i=new Map;function a(s){let l=i.get(s);if(l!==void 0)return i.delete(s),i.set(s,l),l;let d=e(s*n,n),c=d.length>n?d.subarray(0,n):d;if(i.set(s,c),i.size>o){let u=i.keys().next().value;i.delete(u)}return c}return(s,l)=>{if(!Number.isSafeInteger(s)||s<0)throw new Error("Read offset must be a non-negative safe integer");if(!Number.isSafeInteger(l)||l<0)throw new Error("Read length must be a non-negative safe integer");if(l===0)return new Uint8Array(0);let d=Math.floor(s/n),c=Math.floor((s+l-1)/n);if(d===c){let m=a(d),y=s-d*n;return y>=m.length?new Uint8Array(0):m.subarray(y,Math.min(y+l,m.length))}let u=new Uint8Array(l),f=0;for(let m=d;m<=c;m++){let y=a(m),g=m*n,h=Math.max(s,g)-g,C=Math.min(s+l,g+n)-g,T=Math.min(C,y.length);if(h>=T||(u.set(y.subarray(h,T),g+h-s),f=g+T-s,y.length{if(Gi(t))return ml(t);if(typeof t!="bigint")return t;let n=Number(t);return Number.isSafeInteger(n)?n:t.toString()})}function Gi(e){return typeof e=="string"&&e.includes("\0")}function G(e){return typeof e=="bigint"&&!Number.isSafeInteger(Number(e))?"CAST(? AS INTEGER)":Gi(e)?"CAST(? AS TEXT)":"?"}function ml(e){let t=Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]);if(t==="utf-8")return new TextEncoder().encode(e);let n=t==="utf-16le",r=new Uint8Array(e.length*2);for(let o=0;o>>8,r[o*2+1]=n?i>>>8:i&255}return r}function Je(e){Ge(e).free()}function Ye(e,t){if(t!==void 0&&!(typeof SharedArrayBuffer=="function"&&t instanceof Int32Array&&t.length>0&&t.buffer instanceof SharedArrayBuffer))throw new Error("Invalid query cancellation flag");let n=()=>t!==void 0&&Atomics.load(t,0)!==0,r=()=>{let a=new Error("Query execution cancelled");throw a.name="AbortError",a};n()&&r();let o=Date.now()+sr,i;p.progress_handler(ll,()=>n()?(i="cancelled",!0):Date.now(){let n=Ge(e),r=n.getColumnNames();n.free();let o=ot(e,r.length),i=Ge(o.sql),a=[];try{for(;i.step();)a.push(i.get(null,{useBigInt:!0}));let{rows:s,exactIntegerTexts:l}=Ue(a,o.valueColumnCount);return{headers:r,rows:s,exactIntegerTexts:l}}finally{i.free()}},t)}function Yi(e,t){if(t!=null)return t;let n=e??[];return n[0]==="rowid"?n.slice(1):n}function B(e,t){try{b(`ROLLBACK TO ${e}`),b(`RELEASE ${e}`)}catch(n){console.warn(`Failed to rollback savepoint (${t}):`,oe(n))}}function pl(e){for($e.add(e);$e.size>64;)$e.delete($e.values().next().value)}function Ji(e){b(`ROLLBACK TO ${e}`),b(`RELEASE ${e}`)}function rn(e){let t=Xe;if(!t||e!==void 0&&t.sessionId!==e)return!1;Xe=null,pl(t.sessionId),t.expiryTimer!==void 0&&clearTimeout(t.expiryTimer);try{b(`RELEASE ${t.savepointName}`)}catch(n){try{Ji(t.savepointName)}catch(r){let o=[n,r];try{p?.close()}catch(i){o.push(i)}finally{p=null}throw new AggregateError(o,"Cell read snapshot cleanup failed; the owning web database was closed")}}return!0}function Zi(e){e.expiryTimer!==void 0&&clearTimeout(e.expiryTimer),e.expiresAt=Math.min(e.absoluteExpiresAt,e.lastAccessAt+hr),e.expiryTimer=setTimeout(()=>{try{rn(e.sessionId)}catch(t){console.error("[Worker] Failed to expire cell read session:",oe(t))}},Math.max(1,e.expiresAt-Date.now()))}async function es(e){gi(e);let t=await te(e.table),n=U(e.rowId,t);return{table:e.table,column:e.column,predicateSql:n.sql,predicateParams:n.params}}function gl(e){let t=w(e.column);return{sql:`SELECT typeof(${t}), CASE WHEN ${t} IS NULL THEN 0 ELSE length(CAST(${t} AS BLOB)) END FROM ${N(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function yl(e){return{sql:`SELECT substr(CAST(${w(e.column)} AS BLOB), ? + 1, ?) FROM ${N(e.table)} WHERE ${e.predicateSql} LIMIT 2`,params:e.predicateParams}}function ve(){return Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0])}function ts(e,t){let n=gl(t),r=p.exec(n.sql,v(n.params),{useBigInt:!0});return hi(r[0]?.values??[],ve(),e)}async function en(e){if(!p)throw new Error("No database initialized");let t=await es(e);return ts(e,t)}async function hl(e){if(!p)throw new Error("No database initialized");if(Xe)throw new Error("At most one web cell read session may be open");let t=await es(e),n=k("sp_cell_read");b(`SAVEPOINT ${n}`);try{let r=ts(e,t),o=Date.now(),i={sessionId:crypto.randomUUID(),target:e,sqlTarget:t,metadata:r,savepointName:n,lastAccessAt:o,absoluteExpiresAt:o+Xi,expiresAt:o+hr,expiryTimer:void 0};return Xe=i,Zi(i),{sessionId:i.sessionId,metadata:r,expiresAt:i.expiresAt}}catch(r){try{Ji(n)}catch(o){let i=[r,o];try{p?.close()}catch(a){i.push(a)}finally{p=null}throw new AggregateError(i,"Cell read session open failed; the owning web database was closed")}throw r}}async function El(e,t,n){yi(t,n);let r=Xe;if(!r||r.sessionId!==e)throw new Error($e.has(e)?`Cell read session ${e} is closed or expired`:`Unknown cell read session: ${String(e)}`);if(Date.now()>=r.expiresAt)throw rn(e),new Error(`Cell read session ${e} is closed or expired`);let o=yl(r.sqlTarget),a=p.exec(o.sql,v([t,n,...o.params]))[0]?.values??[];if(a.length!==1)throw new Error(a.length===0?`Cell ${r.target.table}.${r.target.column} no longer exists in its snapshot`:`Cell ${r.target.table}.${r.target.column} matched more than one row`);let s=a[0][0],l=s===null?new Uint8Array(0):s;if(!(l instanceof Uint8Array))throw new Error(`SQLite returned a non-BLOB chunk for ${r.target.table}.${r.target.column}`);return r.lastAccessAt=Date.now(),Zi(r),{byteOffset:t,bytes:l.slice(),done:t+l.byteLength>=r.metadata.byteLength}}async function wl(e){if(typeof e!="string"||e.length===0)throw new Error("Cell read session id is required");if(!rn(e)&&!$e.has(e))throw new Error(`Unknown cell read session: ${e}`)}function Sl(e){if(Xe&&!["readCellChunk","closeCellReadSession","initializeDatabase"].includes(e))throw new Error("A cell read snapshot is active; close it before another database operation")}function bl(e){return!!e&&typeof e=="object"&&typeof e.slice=="function"&&typeof e.size=="number"}function Tl(e,t){let n=e.size,r=Bi((o,i)=>new Uint8Array(t.readAsArrayBuffer(e.slice(o,o+i))));return{size:()=>n,read:r}}function Cl(e){let t={};return e.pagedOpenThresholdBytes!==void 0&&(t.pagedThresholdBytes=e.pagedOpenThresholdBytes),e.bufferOpenCeilingBytes!==void 0&&(t.bufferCeilingBytes=e.bufferOpenCeilingBytes),t}function Rl(e){if(e===void 0)return _e;if(!Number.isSafeInteger(e)||e<1)throw new Error("pagedExportMaxBytes must be a positive safe integer");if(e>_e)throw new Error(`pagedExportMaxBytes must not exceed ${_e} bytes`);return e}function oe(e){let t="Unknown error";try{t=e&&typeof e=="object"&&typeof e.message=="string"&&e.message?e.message:String(e)}catch{}return t||(t="Unknown error"),t.length<=Di?t:t.slice(0,Di)+`... [truncated from ${t.length} characters]`}async function Il(e,t){if(rn(),p&&(p.close(),p=null),sr=Number.isFinite(t.queryTimeout)&&t.queryTimeout>0?t.queryTimeout:Ki,H=t.readOnlyMode===!0,yt=null,ze="memory",Oe=0,ht=Rl(t.pagedExportMaxBytes),Qi=Jn(t.pagedExactCountMaxFileBytes),hr=zn(t.cellReadSessionIdleTimeoutMs,jn),Xi=zn(t.cellReadSessionAbsoluteTimeoutMs,Kn),$e.clear(),!ae){importScripts(sl);let n={};t.wasmBinary?n.wasmBinary=t.wasmBinary:n.locateFile=()=>al,ae=await self.initSqlJs(n),zi=Dl(ae)}if(bl(t.file)?ze=Nl(t.file,Cl(t)):t.content&&t.content.length>0?p=new ae.Database(t.content):p=new ae.Database,p.run("PRAGMA foreign_keys = ON"),!H){let n=Al();n&&(H=!0,yt=n)}return H&&(typeof p.enforceReadOnly=="function"?p.enforceReadOnly():p.run("PRAGMA query_only = ON")),{operations:{},isReadOnly:H,storage:ze,...yt?{readOnlyReason:yt}:{}}}var xl=8;function Vi(e){return e?.errno===xl||/read[\s-]?only/i.test(oe(e))?"This database cannot be written by this process, so it is open read-only (SQLite: attempt to write a readonly database).":null}function Al(){let e=Number(p.exec("PRAGMA user_version")[0]?.values?.[0]?.[0])|0;try{p.run("BEGIN")}catch(n){return Vi(n)}let t=null;try{p.run(`PRAGMA user_version = ${e}`)}catch(n){t=Vi(n)}finally{p.run("ROLLBACK")}return t}function Nl(e,t){let n=new FileReaderSync,r=new Uint8Array(n.readAsArrayBuffer(e.slice(0,Ai))),o=!H&&typeof ae.Database.openPagedWritable=="function",i=typeof ae.Database.openPaged=="function",a={sizeBytes:e.size,walMarked:Ni(r),pagedAvailable:o||i},s=Yn(a,t),l=null;if(s.mode==="paged"){let d=Math.min(ht,t.bufferCeilingBytes??_e),c=e.size>d,u=!H&&c?`This database exceeds the ${d}-byte browser save limit and is open read-only so edits cannot be stranded. Use the desktop extension to edit and save it.`:null,f=Tl(e,n),m=[];if(o&&!c)try{return p=ae.Database.openPagedWritable(f),Oe=e.size,"paged"}catch(y){let g=oe(y);m.push(`writable paged open failed: ${g}`),p=null}if(i)try{return p=ae.Database.openPaged(f),H=!0,yt=u,Oe=e.size,"paged"}catch(y){let g=oe(y);m.push(`read-only paged open failed: ${g}`),p=null}l=m.length>0?new Error(m.join("; ")):null,s=Yn({...a,pagedAvailable:!1},t)}if(s.mode==="reject")throw new Error(l?`${s.message} (paged open failed: ${l.message})`:s.message);return p=new ae.Database(new Uint8Array(n.readAsArrayBuffer(e))),s.readOnly&&(H=!0),"memory"}async function _l(e,t=[],n){if(!p)throw new Error("No database initialized");if(H)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");try{return Ye(()=>p.exec(e,t),n).map(o=>({headers:o.columns,rows:o.values}))}catch(r){throw r}}async function $l(e,t="[]",n){if(!p)throw new Error("No database initialized");if(typeof e!="string"||typeof t!="string")throw new TypeError("SQL and parameter JSON must be strings");let r=qo(e),o=Ho(t);if(o.length!==r.parameterCount)throw new Error(`Expected ${r.parameterCount} positional parameters.`);let i=`query_columns_${crypto.randomUUID().replace(/-/g,"")}`,a=Number(p.exec("PRAGMA query_only")[0]?.values[0]?.[0])===1,s=!1,l;try{a&&b("PRAGMA query_only = OFF"),l=Ye(()=>{b(`CREATE TEMP VIEW "${i}" AS ${r.metadataSql}`),s=!0;let d=(p.exec("SELECT substr(name, 1, 4097) FROM pragma.pragma_table_info(?, 'temp') ORDER BY cid LIMIT ?",[i,Ft+1])[0]?.values??[]).map(c=>String(c[0]));if(!d.length||d.length>Ft)throw new Error("Queries support 1 to 128 result columns.");if(d.some(c=>c.length>4096))throw new Error("Result column labels must be at most 4096 characters.");return d},n)}finally{try{s&&(a&&b("PRAGMA query_only = OFF"),b(`DROP VIEW temp."${i}"`))}finally{if(a)try{b("PRAGMA query_only = ON")}catch(d){let c=p;throw p=null,c.close(),d}}}return Ye(()=>{let d=jo(r.sql,l.length),c=Ge(d.sql);try{c.bind(o);let u=[];for(;u.length<=be&&c.step();)u.push(c.get(null,{useBigInt:!0}));return Ko(l,u,d.valueColumnCount)}finally{c.free()}},n)}function Ol(e){if(e==null)return 5e3;let t=Number(e);return Number.isFinite(t)?Math.min(5e4,Math.max(1,Math.trunc(t))):5e3}function Ll(e){if(e==null)return 1/0;let t=Number(e);return Number.isFinite(t)?Math.max(1,Math.trunc(t)):1/0}var qi=100;function vl(e){if(e==null)return[];if(!Array.isArray(e))throw new Error("Console parameters must be a JSON array.");if(e.length>qi)throw new Error(`Use at most ${qi} positional parameters.`);for(let t of e)if(t!==null){if(typeof t=="string"){if(t.includes("\0"))throw new Error("Console parameters must not contain NUL bytes; SQLite would bind the text truncated at the first one.");continue}if(!(typeof t=="number"&&Number.isFinite(t)))throw new Error("Console parameters must be null, string, or finite number values.")}return e}function ns(e,t){try{e.bind(t)}catch(n){throw new Error(`cannot bind ${t.length} positional parameter${t.length===1?"":"s"}: `+oe(n))}}var Pl=4*65536,kl=65536,rs=Object.freeze(["id","parent","notused","detail"]),os="SQLite returned an unsupported query plan.",Bl=/^pragma\b/i;function Dl(e){let t=e?._sqlite_explorer_register_query_plan;if(typeof t!="function")return!1;if(t()!==0)throw new Error("Unable to initialize the bounded query-plan reader.");return!0}function is(e){let t=0;for(;;){let n=t;for(;tbe}}function Ul(e,t){let n=Wo(e,t),r=p.prepare(n.sql);try{if(r.bind(n.params),!r.step())throw new Error(os);return as(Fo(r.get()[0]).rows)}finally{r.free()}}function Vl(e,t){if(Bl.test(is(e)))throw new Error("PRAGMA statements have no query plan (and some pragmas take effect while being compiled, so they are not even prepared here). Use Run.");let n=Ge(`EXPLAIN QUERY PLAN ${e}`);try{t.length>0&&ns(n,t);let r=[];for(;r.length<=be&&n.step();){let o=n.get();if(o.length!==rs.length||typeof o[3]!="string")throw new Error(os);if(new TextEncoder().encode(o[3]).byteLength>kl)throw new Error("Query plan detail exceeds the 65,536-byte limit.");r.push(o)}return as(r)}finally{n.free()}}function ql(e,t){if(typeof e!="string"||e.trim()==="")throw new Error("Enter one SQL statement to explain.");if(new TextEncoder().encode(e).byteLength>Pl)throw new Error("Query plan SQL exceeds 262,144 UTF-8 bytes.");let n=pe(e);for(let r of n.matchAll(ss))if(r[0]===";")throw new Error("Exactly one SQL statement is required");return zi&&Ml(n)?Ul(n,t):Vl(n,t)}async function Wl(e,t={},n){if(!p)throw new Error("No database initialized");if(H)throw new Error("Ad hoc SQL execution is unavailable because the database is read-only");if(typeof e=="string"&&e.includes("\0"))throw new Error("SQL contains a NUL byte; SQLite stops compiling at the first NUL, so the rest of the script would be silently skipped");let r=vl(t.params),o=Ol(t.maxRows),i=Ll(t.maxStatements),a=Date.now(),s=p.exec("SELECT total_changes()")[0].values[0][0],l=p.exec("PRAGMA schema_version")[0].values[0][0],d=()=>{let y=p.exec("SELECT total_changes()")[0].values[0][0],g=p.exec("PRAGMA schema_version")[0].values[0][0];return{mutated:y-s>0||g!==l,changes:y-s,durationMs:Date.now()-a}},c=()=>{try{return d()}catch{return{mutated:!0,changes:0,durationMs:Date.now()-a}}};if(t.explain===!0)try{return{results:[Ye(()=>ql(e,r),n)],explain:!0,statementsSkipped:!1,...d()}}catch(y){return{results:[],error:oe(y),explain:!0,multiStatement:!1,statementsSkipped:!1,...c()}}let u=0,f=!1,m;try{m=Ye(()=>{let y=[],g=p.iterateStatements(e),h=!1;for(;;){if(u>=i){h=!0;break}u++;let C=g.next();if(C.done)break;let T=C.value;try{r.length>0&&ns(T,r);let I=T.getColumnNames(),x=!1,S=!1;if(I.length===0&&(S=T.step(),x=!0,S&&(I=T.getColumnNames())),I.length===0){if(!x||S)for(;T.step(););}else{let R=[],_=!1;for(x||(S=T.step());S;)R.length1,statementsSkipped:f,...h}}return{results:m,statementsSkipped:f,...d()}}async function Fl(e){if(!p)throw new Error("No database initialized");let t=ze==="paged"&&!H;if(ze==="paged"&&H)throw new Error("paged databases are read-only snapshots; export() is only available on openPagedWritable instances");let n=()=>new Error(`Cannot download this page-on-demand database: the merged image would exceed the ${ht}-byte browser memory limit. Saving materializes the complete database in memory; use the desktop extension or reduce the database size.`);if(t&&Oe>ht)throw n();let r;try{r=p.export()}catch(o){let i=oe(o);throw t&&/transaction is open|while a transaction/i.test(i)?new Error("Cannot save while a database transaction is open; retry after the edit completes.",{cause:o}):o}if(t&&r.byteLength>ht)throw n();return r}async function Hl(e,t,n,r,o={}){if(!p)throw new Error("No database initialized");let i=e?.table;if(!i)throw new Error("No table specified");let{format:a="csv",header:s=!0,includeTableName:l=!0,rowIds:d=null,maxExportBytes:c}=o;if(!["csv","json","sql","excel"].includes(a))throw new Error(`Unsupported export format: ${a}`);let u=Number.isSafeInteger(c)&&c>0?Math.min(c,ul):gr,f=[{sql:"",params:[]}];if(d&&d.length>0){let A=await te(i);if(d.some(Z)&&!d.every(Z))throw new Error("Cannot mix rowid and primary-key row identities");let L=new Set,E=[];for(let O of d){let q=A.kind==="rowid"?M(O):O,Y=String(q);L.has(Y)||(L.add(Y),E.push(q))}f=qe(E,A)}let m=t&&t.length>0?t:jl(i);if(m.length>Zt)throw new Error(`Cannot export more than ${Zt} columns`);let y=a!=="csv"&&a!=="excel",g=m.map((A,L)=>{let E=w(A),O=`typeof(${E})`,q=`octet_length(${E})`;return`CASE ${O} WHEN 'null' THEN 'n:0:' WHEN 'integer' THEN 'i:0:' || CAST(${E} AS TEXT) WHEN 'real' THEN 'r:0:' || printf('%!.17g', ${E}) WHEN 'text' THEN 't:' || CAST(${q} AS TEXT) || ':' || hex(CAST(${E} AS BLOB)) WHEN 'blob' THEN 'b:' || CAST(${q} AS TEXT) || ':' || `+(y?`hex(${E}) `:"'' ")+`END AS ${w(`__export_cell_${L}`)}`}).join(", "),h=k("sp_export_rows");b(`SAVEPOINT ${h}`);let C=[];try{let A=1024;for(let L of f){let E=L.sql?` WHERE ${L.sql}`:"";if(A+=Xl(i,m,E,L.params,a,u),!Number.isSafeInteger(A)||A>u)throw Er(u)}for(let L of f){let E=L.sql?` WHERE ${L.sql}`:"",O=p.exec(`SELECT ${g} FROM ${N(i)}${E}`,L.params);O.length>0&&C.push(...O[0].values)}b(`RELEASE ${h}`)}catch(A){throw B(h,"exportTable"),A}let T=m,I=Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),x=C.map((A,L)=>{if(A.length!==m.length)throw new Error(`SQLite returned ${A.length} packed export cells for row ${L}; expected ${m.length}`);return m.map((E,O)=>zl(i,E,A[O],y,I))}),S=new lr(u),R="text/plain",_=`${i}.${a}`;switch(a){case"csv":Wi(T,x,s,S),R="text/csv";break;case"json":Gl(T,x,S),R="application/json";break;case"sql":Yl(i,T,x,l,S),R="text/sql";break;case"excel":Wi(T,x,s,S),R="text/csv",_=`${i}.csv`;break}return{contentChunks:S.finish(),filename:_,mimeType:R}}function Er(e){if(e===gr)return new Error(`Web demo exports are limited to ${cl} because the worker RPC cannot stream downloads; use the desktop extension for larger exports.`);let t=e/(1024*1024);return new Error(`Export exceeds the ${t} MiB (${e} bytes) limit; the worker assembles the whole file in memory, so larger exports need the native engine.`)}function jl(e){let t=p.prepare(`SELECT * FROM ${N(e)} LIMIT 0`);try{return t.getColumnNames()}finally{t.free()}}function Kl(e,t,n){if(e.length!==t*2||/[^0-9a-f]/i.test(e))throw new Error(`SQLite returned invalid packed bytes for ${n}`);let r=new Uint8Array(t);for(let o=0;o1;){let n=[];for(let r=0;r{let f=w(u),m=`length(${f})`,y=o==="csv"||o==="excel"?"64":o==="json"?`((${m} + 2) / 3) * 4 + 64`:`${m} * 2 + 64`;return`CASE typeof(${f}) WHEN 'text' THEN length(CAST(${f} AS BLOB)) * 6 + 64 WHEN 'blob' THEN ${y} ELSE 64 END`})),l=p.exec(`SELECT COUNT(*), COALESCE(SUM(${a}), 0) FROM ${N(e)}${n}`,r)[0]?.values?.[0]??[0,0],d=Number(l[0]),c=Number(l[1])+d*128;if(!Number.isSafeInteger(c)||c<0)throw Er(i);return c}function ar(e){let t=0;for(let n=0;n=55296&&r<=56319&&n+1=56320&&o<=57343?(t+=4,n++):t+=3}else t+=3}return t}var lr=class{constructor(t=gr){this.chunks=[],this.pending="",this.outputBytes=0,this.capBytes=t}append(t){if(this.outputBytes+=ar(t),!Number.isSafeInteger(this.outputBytes)||this.outputBytes>this.capBytes)throw Er(this.capBytes);let n=0;for(;n0&&t.charCodeAt(o-1)>=55296&&t.charCodeAt(o-1)<=56319&&t.charCodeAt(o)>=56320&&t.charCodeAt(o)<=57343&&r--,r===0){this.flush();continue}this.pending+=t.slice(n,n+r),n+=r,this.pending.length>=Mi&&this.flush()}}flush(){this.pending.length>0&&(this.chunks.push(this.pending),this.pending="")}finish(){return this.flush(),this.chunks}};function Wi(e,t,n,r){let o=!1,i=a=>{o&&r.append(` +`),r.append(a.join(",")),o=!0};n&&i(e.map(a=>xn({storageClass:"text",value:a})));for(let a of t)i(a.map(xn))}function Gl(e,t,n){n.append("[");for(let r=0;r{l>0&&n.append(`, `),n.append(` ${JSON.stringify(s)}: ${to(i[s])}`)}),n.append(` }`)}n.append(t.length===0?"]":` -]`)}function Gl(e,t,n,r,o){let i=r?w(e):'"table_name"',a=t.map(w).join(", ");n.forEach((s,l)=>{let d=s.map(no).join(", ");l>0&&o.append(` -`),o.append(`INSERT INTO ${i} (${a}) VALUES (${d});`)})}async function ls(e){let t=p.exec(`SELECT "type", "wr" FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? LIMIT 1`,[e]);if((t[0]?.values.length??0)===0)return;let n=$n(t[0].values[0][0],t[0].values[0][1]);if(!n)return;if(n==="rowid")return{kind:"rowid"};let r=On(await br(e));if(r.length===0)throw new Error(`WITHOUT ROWID table ${e} has no declared primary key`);return{kind:"primaryKey",columns:r}}async function te(e){let t=await ls(e);if(!t)throw new Error(`Table not found: ${e}`);if(t.kind==="rowid"&&(p.exec(rt,[e,e])[0]?.values.length??0)!==1)throw new Error(`Table ${e} is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity`);return t}function cr(e){return new Error(`An UPDATE trigger changed or removed the primary-key identity in ${e}; the edit was rolled back because SQLite Explorer cannot safely identify the resulting row.`)}function on(e,t,n,r){let i=p.exec(`SELECT ${ut(t)} FROM ${N(e)} WHERE ${n.sql} LIMIT 2`,v(n.params),{useBigInt:!0})[0]?.values??[];if(i.length===0)throw r??new Error(`Updated row in ${e} no longer exists`);if(i.length!==1)throw new Error(`Primary-key identity for ${e} matched more than one row`);return dt(t,i[0],Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot resolve updated identity in ${e}`)}function wr(e){let t=p.exec(io,[e]);return ao(t[0]?.values??[],e)}function Yl(e,t,n=!0){let r=[...new Set(t)];if(r.length===0)throw new Error("UPDATE trigger probe requires at least one column");let o=r.map(a=>{let s=w(a);return`${s} = ${s}`}),i=n?"rowid = ?":"0";return`EXPLAIN UPDATE ${N(e)} SET ${o.join(", ")} WHERE ${i}`}function Jl(e,t){return`EXPLAIN ${t.length===0?`INSERT INTO ${N(e)} DEFAULT VALUES`:`INSERT INTO ${N(e)} (${t.map(w).join(", ")}) VALUES (${t.map(()=>"NULL").join(", ")})`}`}function Zl(e){return`EXPLAIN DELETE FROM ${N(e)} WHERE 0`}function Et(e,t,n=!0){let r=p.exec(po,v([e]),{useBigInt:!0}),o=go(r[0]?.values??[],e),i=p.exec(Yl(e,t,n),v(n?[0]:[]),{useBigInt:!0});yo(e,o,i[0]?.values??[],n?"rowid":"primary-key")}function Le(e,t,n=[]){let r=e==="INSERT"?Jl(t,n):Zl(t),o=p.exec(r,[],{useBigInt:!0});ho(e,t,o[0]?.values??[])}function Sr(e,t,n,r,o){let i=t!==void 0&&r!==void 0&&Me(t,r),a=i?w(t):"rowid",s=i?o:n,d=p.exec(`SELECT CAST(rowid AS TEXT) FROM ${N(e)} WHERE ${a} = ? LIMIT 2`,v([s??null]),{useBigInt:!0})[0]?.values??[];if(d.length===0)throw st(e);if(d.length!==1)throw new Error(`Rowid identity for ${e} matched more than one row`);return M(d[0][0])}function ur(e,t){let n=typeof t=="string"?t:JSON.stringify(t),r=p.exec("SELECT json_patch(COALESCE(?, '{}'), ?)",v([e,n]))[0]?.values?.[0]?.[0];if(typeof r!="string")throw new Error("SQLite returned an invalid json_patch result");return r}function ec(e,t,n,r,o){let i=ve(),a=new Map;for(let l of n){let d=M(l.rowId),c=a.get(d)??[];c.push({...l,rowId:d}),a.set(d,c)}let s=[];for(let[l,d]of a){let c=[...new Set(d.map(g=>g.column))];if(c.length!==d.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let u=p.exec(`SELECT ${c.map(ee).join(", ")} FROM ${N(e)} WHERE rowid = ? LIMIT 2`,v([l]),{useBigInt:!0})[0];if((u?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let f=d.map((g,h)=>{let C=V(u.values[0][h*2],u.values[0][h*2+1],`${e}.${g.column}`,{textEncoding:i}),T=C.value,I=Kt(g.value,T,g.operation??"set"),x=I.operation==="json_patch"?ur(T,I.value):I.value;return!o&&I.operation==="json_patch"&&He(x,r),{update:g,priorValue:T,priorState:C,prepared:I,storedValue:x}}),m=l;for(let g of f){let h=w(g.update.column),C=g.prepared.operation==="json_patch",T=C?typeof g.prepared.value=="string"?g.prepared.value:JSON.stringify(g.prepared.value):g.storedValue,I=C?`json_patch(COALESCE(${h}, '{}'), ?)`:G(g.storedValue);if(p.run(`UPDATE ${N(e)} SET ${h} = ${I} WHERE rowid = ?`,v([T,m])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);m=Sr(e,t,m,g.update.column,g.storedValue)}let y=p.exec(`SELECT ${c.map(ee).join(", ")} FROM ${N(e)} WHERE rowid = ? LIMIT 2`,v([m]),{useBigInt:!0})[0];if((y?.values.length??0)!==1)throw st(e);for(let[g,h]of f.entries())s.push({rowId:l,newRowId:m,columnName:h.update.column,priorValue:h.priorValue,newValue:h.prepared.value,priorState:h.priorState,postState:V(y.values[0][g*2],y.values[0][g*2+1],`${e}.${h.update.column}`,{textEncoding:i}),operation:h.prepared.operation})}return s}async function tc(e,t={}){if(!p)throw new Error("No database initialized");t=mi(t,1e3);let{columns:n=null,offset:r,limit:o,orderBy:i=null,orderDir:a="ASC",filters:s=[],globalFilter:l="",globalFilterColumns:d=null}=t,c=n,u=i,f=null,m,y,g=!1;if(n?.[0]?.toLowerCase()==="rowid")if(y=await ls(e),y?.kind==="primaryKey"){let $=y,P=n.slice(1),ne=$.columns.map(we=>we.identifier).filter(we=>!P.includes(we));c=[...P,...ne],m={identity:$,visibleColumns:P},Wn({...t,columns:n})&&(u=null,f=$.columns.map(we=>we.identifier))}else y?.kind==="rowid"&&(g=(p.exec(rt,[e,e])[0]?.values.length??0)>0);let h=y?.kind==="primaryKey"||g?y:void 0,C=Hn(t,h),T=C?Fn(e,t):void 0,I=C?ui(e,t,h):void 0,x=g&&c?.[0]?.toLowerCase()==="rowid"&&c.length>Zt,S=x?c.slice(1):c,R;S&&S.length>0?R=S.map(($,P)=>g&&P===0&&$.toLowerCase()==="rowid"?`${w($)} AS ${w("rowid")}`:w($)).join(", "):R="*";let _=[],A=[];if(s&&s.length>0)for(let $ of s){let P=Te($.value);$.column&&P!==void 0&&(_.push(`${w($.column)} LIKE ? ESCAPE '\\'`),A.push(`%${et(P)}%`))}let L=Te(l);if(L!==void 0){let $=Yi(n,d);if($.length>0){let P=$.map(ne=>`${w(ne)} LIKE ? ESCAPE '\\'`);_.push(`(${P.join(" OR ")})`);for(let ne=0;ne<$.length;ne++)A.push(`%${et(L)}%`)}}let E=A,O=$=>{if(I)return di({selectListSql:$,escapedTable:N(e),whereClauses:_,filterParams:E,plan:I});let P=`SELECT ${$} FROM ${N(e)}`;_.length>0&&(P+=` WHERE ${_.join(" AND ")}`);let ne=ci(C,I),we=ne?ne.orderByColumns:f??(u?[u]:[]);if(we.length>0){let Is=ne?ne.orderDir:a==="DESC"?"DESC":"ASC";P+=` ORDER BY ${we.map(xs=>`${w(xs)} ${Is}`).join(", ")}`}return P+=` LIMIT ${parseInt(o,10)} OFFSET ${parseInt(r,10)}`,{sql:P,params:E}},{sql:q,params:Y}=O(R);A=Y;let X=x?O(w("rowid")):void 0,le=p.prepare(q,A),Pe=le.getColumnNames(),Re=x?["rowid",...Pe]:Pe;le.free();let Es=Number.isSafeInteger(t.maxInlineCellBytes)&&t.maxInlineCellBytes>0?t.maxInlineCellBytes:kt,ws=Number.isSafeInteger(t.maxPageResponseBytes)&&t.maxPageResponseBytes>0?t.maxPageResponseBytes:he,Tr={limit:parseInt(o,10),maxInlineCellBytes:Math.min(kt,Es),maxPageResponseBytes:Math.min(he,ws)},Ss=m?m.identity.columns.map($=>{let P=Re.indexOf($.identifier);if(P<0)throw new Error(`Primary-key column missing from table fetch: ${$.identifier}`);return P}):[],Cr=C?C.keyColumns.map($=>Re.indexOf($)).filter($=>$>=0):[],Rr=[...new Set([...Ss,...Cr])],bs=x?Rr.filter($=>$>0).map($=>$-1):Rr,Ir=Pe.length*2+1<=Zt?Pe.map(($,P)=>P):bs,ce=Bt(q,Pe.length,Tr,Ir),an=ot(ce.sql,ce.primaryTransportColumnCount),Ts=p.exec(an.sql,A,{useBigInt:!0}),wt=_o(Ts[0]?.values??[],void 0,ce),ke=(X?p.exec(X.sql,X.params,{useBigInt:!0}):void 0)?.[0]?.values;if(ke&&ke.length!==wt.length)throw new Error("Synthetic rowid companion row count does not match the value page");let Ee=ke?ke.map(($,P)=>{if($.length!==1)throw new Error(`Synthetic rowid companion row ${P} is not one value`);return[$[0],...wt[P]]}):wt,xr=[],ln=Re[0]?.toLowerCase()==="rowid",cn=ln&&lo(Ee,0),Ar=an.valueColumnCount===void 0&&ln;if(!g&&(Ar||cn)&&Ee.length>0&&(g=(p.exec(rt,[e,e])[0]?.values.length??0)>0),g&&Ar)for(let $ of co(e,Re,Ee.map(P=>P[0]))){let P=p.exec($.sql,$.params,{useBigInt:!0});xr.push({query:$,rows:P[0]?.values??[]})}let Nr=uo(Ee,xr),un=Ue(wt,an.valueColumnCount,x?void 0:Nr,!x&&g&&cn?0:void 0),_r=Wt(un.rows,Pe.length,un.exactIntegerTexts,Tr.maxPageResponseBytes),$r=ke?$o(Ue(ke,void 0,void 0,cn?0:void 0).rows.map($=>$[0]),_r,Nr):_r,dn=Oo(un.rows,ce),Be=Ir.length>0?Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]):void 0,fn=x?ce.rawTextColumnIndices.map($=>$+1):ce.rawTextColumnIndices,Cs=Be?vo({sourceRows:Ee,rawTextRows:dn,rawTextColumnIndices:fn,textEncoding:Be,contained:$r}):$r,{rows:mn,oversizedCells:Ze,exactIntegerTexts:pn}=Cs,ue=y?.kind==="rowid"&&ln&&!g?Bo({rows:mn,oversizedCells:Ze,exactIntegerTexts:pn,rowOffset:parseInt(r,10)}):void 0,Ie=m&&Be?Uo({identity:m.identity,sourceColumns:Re,visibleColumnCount:m.visibleColumns.length,identityRows:Ee,rawTextBytes:dn,rawTextColumnIndices:fn,rawTextValidationUnavailable:ce.rawTextValidationUnavailable,textEncoding:Be,rows:mn,oversizedCells:Ze,exactIntegerTexts:pn,effectiveInlineCellBytes:ce.effectiveInlineCellBytes,rowOffset:parseInt(r,10)}):void 0,Rs=C&&Be?Lo({sourceRows:Ee,sourceColumnIndices:Cr,rawTextRows:dn,rawTextColumnIndices:fn,textEncoding:Be,rawTextValidationUnavailable:ce.rawTextValidationUnavailable}):void 0,St=C&&T!==void 0?fi({tag:T,key:C,projectionColumns:Re,rows:Ee,oversizedCells:Ze,excludedRowIndices:Rs}):void 0;return m&&Ie?{headers:["rowid",...m.visibleColumns],rows:Ie.rows,exactIntegerTexts:Ie.exactIntegerTexts,...Ie.oversizedCells?{oversizedCells:Ie.oversizedCells}:{},...Ie.readOnlyRowReasons?{readOnlyRowReasons:Ie.readOnlyRowReasons}:{},...St?{keysetAnchors:St}:{}}:{headers:Re,rows:ue?.rows??mn,exactIntegerTexts:ue?ue.exactIntegerTexts:pn,...(ue?ue.oversizedCells:Ze)?{oversizedCells:ue?ue.oversizedCells:Ze}:{},...ue?.readOnlyRowReasons?{readOnlyRowReasons:ue.readOnlyRowReasons}:{},...St?{keysetAnchors:St}:{}}}async function nc(e,t={}){if(!p)throw new Error("No database initialized");let{columns:n=[],filters:r=[],globalFilter:o="",globalFilterColumns:i=null}=t,a=`SELECT COUNT(*) FROM ${N(e)}`,s=[],l=[];if(r&&r.length>0)for(let f of r){let m=Te(f.value);f.column&&m!==void 0&&(s.push(`${w(f.column)} LIKE ? ESCAPE '\\'`),l.push(`%${et(m)}%`))}let d=Te(o);if(d!==void 0){let f=Yi(n,i);if(f.length>0){let m=f.map(y=>`${w(y)} LIKE ? ESCAPE '\\'`);s.push(`(${m.join(" OR ")})`);for(let y=0;y0&&(a+=` WHERE ${s.join(" AND ")}`);let c={storage:ze,filtered:s.length>0,authorityConfirmedRowIdTable:!0,pagedFileSizeBytes:Oe,exactCountMaxFileBytes:Qi};if(Zn(c)){let f=!1;try{if(f=(p.exec(rt,[e,e])[0]?.values.length??0)>0,Zn({...c,authorityConfirmedRowIdTable:f})){let y=p.exec(Oi(e)),g=Pi(y[0]?.values?.[0]);if(g!==void 0)return{count:g,isExact:!1}}}catch{}if(!f){let m=!1;try{m=(p.exec($i,[e])[0]?.values.length??0)>0}catch{}if(m){try{let y=p.exec(Li(e),[Ke+1]),g=vi(y[0]?.values?.[0]?.[0],Oe);if(g)return g}catch{}return{count:er(Oe),isExact:!1}}}}let u=p.exec(a,l);return u.length===0||u[0].values.length===0?{count:0,isExact:!0}:{count:u[0].values[0][0],isExact:!0}}async function rc(){if(!p)throw new Error("No database initialized");let e=p.exec(` +]`)}function Yl(e,t,n,r,o){let i=r?w(e):'"table_name"',a=t.map(w).join(", ");n.forEach((s,l)=>{let d=s.map(no).join(", ");l>0&&o.append(` +`),o.append(`INSERT INTO ${i} (${a}) VALUES (${d});`)})}async function ls(e){let t=p.exec(`SELECT "type", "wr" FROM pragma.pragma_table_list WHERE "schema" = 'main' AND "name" = ? LIMIT 1`,[e]);if((t[0]?.values.length??0)===0)return;let n=$n(t[0].values[0][0],t[0].values[0][1]);if(!n)return;if(n==="rowid")return{kind:"rowid"};let r=On(await br(e));if(r.length===0)throw new Error(`WITHOUT ROWID table ${e} has no declared primary key`);return{kind:"primaryKey",columns:r}}async function te(e){let t=await ls(e);if(!t)throw new Error(`Table not found: ${e}`);if(t.kind==="rowid"&&(p.exec(rt,[e,e])[0]?.values.length??0)!==1)throw new Error(`Table ${e} is read-only because a declared "rowid" column shadows SQLite's intrinsic row identity`);return t}function cr(e){return new Error(`An UPDATE trigger changed or removed the primary-key identity in ${e}; the edit was rolled back because SQLite Explorer cannot safely identify the resulting row.`)}function on(e,t,n,r){let i=p.exec(`SELECT ${ut(t)} FROM ${N(e)} WHERE ${n.sql} LIMIT 2`,v(n.params),{useBigInt:!0})[0]?.values??[];if(i.length===0)throw r??new Error(`Updated row in ${e} no longer exists`);if(i.length!==1)throw new Error(`Primary-key identity for ${e} matched more than one row`);return dt(t,i[0],Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot resolve updated identity in ${e}`)}function wr(e){let t=p.exec(io,[e]);return ao(t[0]?.values??[],e)}function Jl(e,t,n=!0){let r=[...new Set(t)];if(r.length===0)throw new Error("UPDATE trigger probe requires at least one column");let o=r.map(a=>{let s=w(a);return`${s} = ${s}`}),i=n?"rowid = ?":"0";return`EXPLAIN UPDATE ${N(e)} SET ${o.join(", ")} WHERE ${i}`}function Zl(e,t){return`EXPLAIN ${t.length===0?`INSERT INTO ${N(e)} DEFAULT VALUES`:`INSERT INTO ${N(e)} (${t.map(w).join(", ")}) VALUES (${t.map(()=>"NULL").join(", ")})`}`}function ec(e){return`EXPLAIN DELETE FROM ${N(e)} WHERE 0`}function Et(e,t,n=!0){let r=p.exec(po,v([e]),{useBigInt:!0}),o=go(r[0]?.values??[],e),i=p.exec(Jl(e,t,n),v(n?[0]:[]),{useBigInt:!0});yo(e,o,i[0]?.values??[],n?"rowid":"primary-key")}function Le(e,t,n=[]){let r=e==="INSERT"?Zl(t,n):ec(t),o=p.exec(r,[],{useBigInt:!0});ho(e,t,o[0]?.values??[])}function Sr(e,t,n,r,o){let i=t!==void 0&&r!==void 0&&Me(t,r),a=i?w(t):"rowid",s=i?o:n,d=p.exec(`SELECT CAST(rowid AS TEXT) FROM ${N(e)} WHERE ${a} = ? LIMIT 2`,v([s??null]),{useBigInt:!0})[0]?.values??[];if(d.length===0)throw st(e);if(d.length!==1)throw new Error(`Rowid identity for ${e} matched more than one row`);return M(d[0][0])}function ur(e,t){let n=typeof t=="string"?t:JSON.stringify(t),r=p.exec("SELECT json_patch(COALESCE(?, '{}'), ?)",v([e,n]))[0]?.values?.[0]?.[0];if(typeof r!="string")throw new Error("SQLite returned an invalid json_patch result");return r}function tc(e,t,n,r,o){let i=ve(),a=new Map;for(let l of n){let d=M(l.rowId),c=a.get(d)??[];c.push({...l,rowId:d}),a.set(d,c)}let s=[];for(let[l,d]of a){let c=[...new Set(d.map(g=>g.column))];if(c.length!==d.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let u=p.exec(`SELECT ${c.map(ee).join(", ")} FROM ${N(e)} WHERE rowid = ? LIMIT 2`,v([l]),{useBigInt:!0})[0];if((u?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let f=d.map((g,h)=>{let C=V(u.values[0][h*2],u.values[0][h*2+1],`${e}.${g.column}`,{textEncoding:i}),T=C.value,I=Kt(g.value,T,g.operation??"set"),x=I.operation==="json_patch"?ur(T,I.value):I.value;return!o&&I.operation==="json_patch"&&He(x,r),{update:g,priorValue:T,priorState:C,prepared:I,storedValue:x}}),m=l;for(let g of f){let h=w(g.update.column),C=g.prepared.operation==="json_patch",T=C?typeof g.prepared.value=="string"?g.prepared.value:JSON.stringify(g.prepared.value):g.storedValue,I=C?`json_patch(COALESCE(${h}, '{}'), ?)`:G(g.storedValue);if(p.run(`UPDATE ${N(e)} SET ${h} = ${I} WHERE rowid = ?`,v([T,m])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);m=Sr(e,t,m,g.update.column,g.storedValue)}let y=p.exec(`SELECT ${c.map(ee).join(", ")} FROM ${N(e)} WHERE rowid = ? LIMIT 2`,v([m]),{useBigInt:!0})[0];if((y?.values.length??0)!==1)throw st(e);for(let[g,h]of f.entries())s.push({rowId:l,newRowId:m,columnName:h.update.column,priorValue:h.priorValue,newValue:h.prepared.value,priorState:h.priorState,postState:V(y.values[0][g*2],y.values[0][g*2+1],`${e}.${h.update.column}`,{textEncoding:i}),operation:h.prepared.operation})}return s}async function nc(e,t={}){if(!p)throw new Error("No database initialized");t=mi(t,1e3);let{columns:n=null,offset:r,limit:o,orderBy:i=null,orderDir:a="ASC",filters:s=[],globalFilter:l="",globalFilterColumns:d=null}=t,c=n,u=i,f=null,m,y,g=!1;if(n?.[0]?.toLowerCase()==="rowid")if(y=await ls(e),y?.kind==="primaryKey"){let $=y,P=n.slice(1),ne=$.columns.map(we=>we.identifier).filter(we=>!P.includes(we));c=[...P,...ne],m={identity:$,visibleColumns:P},Wn({...t,columns:n})&&(u=null,f=$.columns.map(we=>we.identifier))}else y?.kind==="rowid"&&(g=(p.exec(rt,[e,e])[0]?.values.length??0)>0);let h=y?.kind==="primaryKey"||g?y:void 0,C=Hn(t,h),T=C?Fn(e,t):void 0,I=C?ui(e,t,h):void 0,x=g&&c?.[0]?.toLowerCase()==="rowid"&&c.length>Zt,S=x?c.slice(1):c,R;S&&S.length>0?R=S.map(($,P)=>g&&P===0&&$.toLowerCase()==="rowid"?`${w($)} AS ${w("rowid")}`:w($)).join(", "):R="*";let _=[],A=[];if(s&&s.length>0)for(let $ of s){let P=Te($.value);$.column&&P!==void 0&&(_.push(`${w($.column)} LIKE ? ESCAPE '\\'`),A.push(`%${et(P)}%`))}let L=Te(l);if(L!==void 0){let $=Yi(n,d);if($.length>0){let P=$.map(ne=>`${w(ne)} LIKE ? ESCAPE '\\'`);_.push(`(${P.join(" OR ")})`);for(let ne=0;ne<$.length;ne++)A.push(`%${et(L)}%`)}}let E=A,O=$=>{if(I)return di({selectListSql:$,escapedTable:N(e),whereClauses:_,filterParams:E,plan:I});let P=`SELECT ${$} FROM ${N(e)}`;_.length>0&&(P+=` WHERE ${_.join(" AND ")}`);let ne=ci(C,I),we=ne?ne.orderByColumns:f??(u?[u]:[]);if(we.length>0){let Is=ne?ne.orderDir:a==="DESC"?"DESC":"ASC";P+=` ORDER BY ${we.map(xs=>`${w(xs)} ${Is}`).join(", ")}`}return P+=` LIMIT ${parseInt(o,10)} OFFSET ${parseInt(r,10)}`,{sql:P,params:E}},{sql:q,params:Y}=O(R);A=Y;let X=x?O(w("rowid")):void 0,le=p.prepare(q,A),Pe=le.getColumnNames(),Re=x?["rowid",...Pe]:Pe;le.free();let Es=Number.isSafeInteger(t.maxInlineCellBytes)&&t.maxInlineCellBytes>0?t.maxInlineCellBytes:kt,ws=Number.isSafeInteger(t.maxPageResponseBytes)&&t.maxPageResponseBytes>0?t.maxPageResponseBytes:he,Tr={limit:parseInt(o,10),maxInlineCellBytes:Math.min(kt,Es),maxPageResponseBytes:Math.min(he,ws)},Ss=m?m.identity.columns.map($=>{let P=Re.indexOf($.identifier);if(P<0)throw new Error(`Primary-key column missing from table fetch: ${$.identifier}`);return P}):[],Cr=C?C.keyColumns.map($=>Re.indexOf($)).filter($=>$>=0):[],Rr=[...new Set([...Ss,...Cr])],bs=x?Rr.filter($=>$>0).map($=>$-1):Rr,Ir=Pe.length*2+1<=Zt?Pe.map(($,P)=>P):bs,ce=Bt(q,Pe.length,Tr,Ir),an=ot(ce.sql,ce.primaryTransportColumnCount),Ts=p.exec(an.sql,A,{useBigInt:!0}),wt=_o(Ts[0]?.values??[],void 0,ce),ke=(X?p.exec(X.sql,X.params,{useBigInt:!0}):void 0)?.[0]?.values;if(ke&&ke.length!==wt.length)throw new Error("Synthetic rowid companion row count does not match the value page");let Ee=ke?ke.map(($,P)=>{if($.length!==1)throw new Error(`Synthetic rowid companion row ${P} is not one value`);return[$[0],...wt[P]]}):wt,xr=[],ln=Re[0]?.toLowerCase()==="rowid",cn=ln&&lo(Ee,0),Ar=an.valueColumnCount===void 0&&ln;if(!g&&(Ar||cn)&&Ee.length>0&&(g=(p.exec(rt,[e,e])[0]?.values.length??0)>0),g&&Ar)for(let $ of co(e,Re,Ee.map(P=>P[0]))){let P=p.exec($.sql,$.params,{useBigInt:!0});xr.push({query:$,rows:P[0]?.values??[]})}let Nr=uo(Ee,xr),un=Ue(wt,an.valueColumnCount,x?void 0:Nr,!x&&g&&cn?0:void 0),_r=Wt(un.rows,Pe.length,un.exactIntegerTexts,Tr.maxPageResponseBytes),$r=ke?$o(Ue(ke,void 0,void 0,cn?0:void 0).rows.map($=>$[0]),_r,Nr):_r,dn=Oo(un.rows,ce),Be=Ir.length>0?Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]):void 0,fn=x?ce.rawTextColumnIndices.map($=>$+1):ce.rawTextColumnIndices,Cs=Be?vo({sourceRows:Ee,rawTextRows:dn,rawTextColumnIndices:fn,textEncoding:Be,contained:$r}):$r,{rows:mn,oversizedCells:Ze,exactIntegerTexts:pn}=Cs,ue=y?.kind==="rowid"&&ln&&!g?Bo({rows:mn,oversizedCells:Ze,exactIntegerTexts:pn,rowOffset:parseInt(r,10)}):void 0,Ie=m&&Be?Uo({identity:m.identity,sourceColumns:Re,visibleColumnCount:m.visibleColumns.length,identityRows:Ee,rawTextBytes:dn,rawTextColumnIndices:fn,rawTextValidationUnavailable:ce.rawTextValidationUnavailable,textEncoding:Be,rows:mn,oversizedCells:Ze,exactIntegerTexts:pn,effectiveInlineCellBytes:ce.effectiveInlineCellBytes,rowOffset:parseInt(r,10)}):void 0,Rs=C&&Be?Lo({sourceRows:Ee,sourceColumnIndices:Cr,rawTextRows:dn,rawTextColumnIndices:fn,textEncoding:Be,rawTextValidationUnavailable:ce.rawTextValidationUnavailable}):void 0,St=C&&T!==void 0?fi({tag:T,key:C,projectionColumns:Re,rows:Ee,oversizedCells:Ze,excludedRowIndices:Rs}):void 0;return m&&Ie?{headers:["rowid",...m.visibleColumns],rows:Ie.rows,exactIntegerTexts:Ie.exactIntegerTexts,...Ie.oversizedCells?{oversizedCells:Ie.oversizedCells}:{},...Ie.readOnlyRowReasons?{readOnlyRowReasons:Ie.readOnlyRowReasons}:{},...St?{keysetAnchors:St}:{}}:{headers:Re,rows:ue?.rows??mn,exactIntegerTexts:ue?ue.exactIntegerTexts:pn,...(ue?ue.oversizedCells:Ze)?{oversizedCells:ue?ue.oversizedCells:Ze}:{},...ue?.readOnlyRowReasons?{readOnlyRowReasons:ue.readOnlyRowReasons}:{},...St?{keysetAnchors:St}:{}}}async function rc(e,t={}){if(!p)throw new Error("No database initialized");let{columns:n=[],filters:r=[],globalFilter:o="",globalFilterColumns:i=null}=t,a=`SELECT COUNT(*) FROM ${N(e)}`,s=[],l=[];if(r&&r.length>0)for(let f of r){let m=Te(f.value);f.column&&m!==void 0&&(s.push(`${w(f.column)} LIKE ? ESCAPE '\\'`),l.push(`%${et(m)}%`))}let d=Te(o);if(d!==void 0){let f=Yi(n,i);if(f.length>0){let m=f.map(y=>`${w(y)} LIKE ? ESCAPE '\\'`);s.push(`(${m.join(" OR ")})`);for(let y=0;y0&&(a+=` WHERE ${s.join(" AND ")}`);let c={storage:ze,filtered:s.length>0,authorityConfirmedRowIdTable:!0,pagedFileSizeBytes:Oe,exactCountMaxFileBytes:Qi};if(Zn(c)){let f=!1;try{if(f=(p.exec(rt,[e,e])[0]?.values.length??0)>0,Zn({...c,authorityConfirmedRowIdTable:f})){let y=p.exec(Oi(e)),g=Pi(y[0]?.values?.[0]);if(g!==void 0)return{count:g,isExact:!1}}}catch{}if(!f){let m=!1;try{m=(p.exec($i,[e])[0]?.values.length??0)>0}catch{}if(m){try{let y=p.exec(Li(e),[Ke+1]),g=vi(y[0]?.values?.[0]?.[0],Oe);if(g)return g}catch{}return{count:er(Oe),isExact:!1}}}}let u=p.exec(a,l);return u.length===0||u[0].values.length===0?{count:0,isExact:!0}:{count:u[0].values[0][0],isExact:!0}}async function oc(){if(!p)throw new Error("No database initialized");let e=p.exec(` SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name @@ -63,6 +63,6 @@ ${t}`);if(!n.getSQL().trimEnd().endsWith(t))throw n.free(),new Error("Exactly on SELECT name, tbl_name FROM sqlite_master WHERE type = 'index' AND name NOT LIKE 'sqlite_%' ORDER BY name - `)[0]?.values||[]).map(l=>({identifier:l[0],parentTable:l[1]}));return{tables:r,views:i,indexes:s}}async function br(e){if(!p)throw new Error("No database initialized");let t=p.exec(so,[e]);return t.length===0?[]:t[0].values.filter(n=>Number(n[6]??0)!==1).map(n=>({ordinal:n[0],identifier:n[1],declaredType:n[2],isRequired:n[3],defaultExpression:n[4],primaryKeyPosition:n[5],isGenerated:Number(n[6]??0)===2||Number(n[6]??0)===3,isRowidAlias:Number(n[7]??0)===1}))}function cs(){let e=n=>{let r=p.prepare(n),o=[];try{for(;r.step();)o.push(r.get());return o}finally{r.free()}},t=e("PRAGMA main.schema_version")[0]?.[0];if(!Number.isSafeInteger(t))throw new Error("Unable to read the destination database schema version.");return JSON.stringify([t,e("SELECT type, name, tbl_name, sql FROM temp.sqlite_schema ORDER BY type, name")])}async function oc(e){if(!p)throw new Error("No database initialized");W(e,"Table name");let t=k("sp_import_preview");b(`SAVEPOINT ${t}`);try{let n=await br(e);if(!n.length)throw new Error(`Table not found: ${e}`);let r=cs();return b(`RELEASE SAVEPOINT ${t}`),{columns:n,schemaVersion:r}}catch(n){throw B(t,"getImportTarget"),n}}function tn(e){return(p.exec("SELECT name FROM pragma.pragma_table_xinfo(?) WHERE hidden = 0 ORDER BY cid",[e])[0]?.values??[]).map(n=>{if(typeof n[0]!="string")throw new Error(`SQLite returned invalid column metadata for ${e}`);return n[0]})}function ic(e,t,n,r){let o=ve(),i=U(n,t),a=r.map(ee),l=p.exec(`SELECT ${a.join(", ")||"1"} FROM ${N(e)} WHERE ${i.sql} LIMIT 2`,v(i.params),{useBigInt:!0})[0]?.values??[];if(l.length!==1)throw new Ce(e);let d=r.map((c,u)=>V(l[0][u*2],l[0][u*2+1],`${e}.${c}`,{textEncoding:o}));return{rowId:n,row:Object.fromEntries(r.map((c,u)=>[c,d[u].rawTextBytes??d[u].value])),storageClasses:r.map((c,u)=>({column:c,storageClass:d[u].storageClass}))}}function sc(e,t,n,r,o){if(o===void 0)return;let i=U(n,t),a=ii(r,t.kind==="rowid"),s=si(e,a,i),l=p.exec(s.sql,v(s.params),{useBigInt:!0})[0]?.values?.[0],d=ai(l);li({table:e,insertableColumns:r,includeSyntheticRowId:t.kind==="rowid",rowIds:[n],rowCount:d.rowCount,valueBytes:d.valueBytes,maxSnapshotBytes:o,operation:"Insert"})}function Fi(e,t,n,r){let o=tn(e),i=U(n,t);return fr(e,[n],o,[i]),sc(e,t,n,o,r),ic(e,t,n,o)}async function ac(){if(!p)throw new Error("No database initialized");let e={},t=["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","encoding","auto_vacuum"];for(let n of t)try{let r=p.exec(`PRAGMA ${n}`);r.length>0&&r[0].values.length>0&&(e[n]=r[0].values[0][0])}catch{}return e}async function lc(e,t){if(!p)throw new Error("No database initialized");if(Q("Pragma updates"),!["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","auto_vacuum"].includes(e))throw new Error(`Invalid or disallowed PRAGMA: ${e}`);let r;if(typeof t=="string"){if(!/^[a-zA-Z0-9_-]+$/.test(t))throw new Error("Invalid PRAGMA string value: contains disallowed characters");r=`PRAGMA ${e} = '${t}'`}else if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("Invalid PRAGMA numeric value: must be finite");r=`PRAGMA ${e} = ${t}`}else if(typeof t=="boolean")r=`PRAGMA ${e} = ${t?"ON":"OFF"}`;else throw new Error(`Invalid PRAGMA value type: ${typeof t}`);b(r)}async function cc(e,t,n,r,o,i,a){let s=a===yr,l=!s&&i!==void 0,d=s?0:je([r],i);if(Ae(t),!p)throw new Error("No database initialized");if(Q("Cell updates"),Z(t))return(await hs(e,[{rowId:t,column:n,value:r,operation:"set"}],void 0,i,a))[0]?.newRowId??t;let c=M(t);if((await te(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let f=k("sp_update_rowid_cell");b(`SAVEPOINT ${f}`);try{let m=wr(e);Et(e,[n]);let y=w(n);if(p.run(`UPDATE ${N(e)} SET ${y} = ${G(r)} WHERE rowid = ?`+(l?` AND NOT (typeof(${y}) IN ('text', 'blob') AND length(CAST(${y} AS BLOB)) > ?)`:""),v(l?[r,c,d]:[r,c])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1){if(l){let C=await en({table:e,rowId:c,column:n});if((C.storageClass==="text"||C.storageClass==="blob")&&C.byteLength>d)throw new Fe(e,n,C.storageClass,C.byteLength,d)}throw new Error(`Cannot update ${e}.${n}: row ${t} no longer exists`)}let h=Sr(e,m,c,n,r);return b(`RELEASE ${f}`),h}catch(m){throw B(f,"updateCell"),m}}async function uc(e,t,n,r,o,i){let a=je([r],i);if(bi(o,a),Ae(t),!p)throw new Error("No database initialized");Q("Oversized cell replacement");let s=await te(e),l=U(t,s),d=w(n),c=()=>{if(p.run(`UPDATE ${N(e)} SET ${d} = ${G(r)} WHERE ${l.sql} AND typeof(${d}) = ? AND length(CAST(${d} AS BLOB)) = ?`,v([r,...l.params,o.storageClass,o.byteLength])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(Ei);if(s.kind==="rowid")return Sr(e,wr(e),M(t),n,r);let m=s.columns.findIndex(g=>g.identifier===n),y=_n(t,s,m>=0?[{column:n,value:r}]:[]);return on(e,s,U(y,s),cr(e))},u=k("sp_replace_oversized_cell");b(`SAVEPOINT ${u}`);try{Et(e,[n],s.kind==="rowid");let f=c();return b(`RELEASE ${u}`),f}catch(f){throw B(u,"replaceOversizedCell"),f}}async function us(e,t,n,r,o,i){if(!p)throw new Error("No database initialized");Q("Row insertion"),r!==yr&&je(Object.values(t),n);let a=Object.keys(t),s=Object.values(t),l=await te(e),d;if(a.length===0)d=`INSERT INTO ${N(e)} DEFAULT VALUES`;else{let u=a.map(w).join(", "),f=s.map(G).join(", ");d=`INSERT INTO ${N(e)} (${u}) VALUES (${f})`}if(l.kind==="primaryKey"){let u=k("sp_insert_pk_row");b(`SAVEPOINT ${u}`);try{Le("INSERT",e,a);let f=p.prepare(`${d} RETURNING `+ut(l),v(s)),m;try{if(!f.step())throw new Error(`Insert into ${e} did not return a primary-key identity`);if(m=f.get(null,{useBigInt:!0}),!m||f.step())throw new Error(`Insert into ${e} did not return exactly one primary-key identity`)}finally{f.free()}let y=dt(l,m,Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot insert into ${e}`),g=on(e,l,U(y,l)),h=o?Fi(e,l,g,i):g;return b(`RELEASE ${u}`),h}catch(f){throw B(u,"insertPrimaryKeyRow"),f}}let c=k("sp_insert_rowid_row");b(`SAVEPOINT ${c}`);try{Le("INSERT",e,a),p.run(d,v(s));let u=p.exec("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")[0]?.values?.[0];if(!u||Number(u[0])!==1)throw new Error(`Insert into ${e} did not create exactly one row`);let f=M(u[1]),m=U(f,l);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE ${m.sql} LIMIT 2`,v(m.params))[0]?.values.length??0)!==1)throw new Error(`Insert into ${e} did not leave one addressable row; the insert was rolled back`);let g=o?Fi(e,l,f,i):f;return b(`RELEASE ${c}`),g}catch(u){throw B(c,"insertRowIdRow"),u}}async function dc(e,t,n,r){return us(e,t,n,r,!1)}async function fc(e,t,n,r){return us(e,t,n,void 0,!0,r)}var Jt=40;function mc(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Import options must be an object");if(e.expectedSchemaVersion!==void 0&&typeof e.expectedSchemaVersion!="string")throw new Error("Import expectedSchemaVersion must be a string");let t=n=>{let r=e[n];if(r!==void 0){if(!Number.isSafeInteger(r)||r<0)throw new Error(`Import ${n} must be a non-negative safe integer`);return r}};return{maxEditValueBytes:e.maxEditValueBytes,maxUndoSnapshotBytes:t("maxUndoSnapshotBytes"),maxSnapshotTransportBytes:t("maxSnapshotTransportBytes")}}function pc(e,t){if(!Array.isArray(e))throw new Error("Import rows must be an array");if(e.length===0)throw new Error("Import requires at least one row");if(e.length>tr)throw new Error(`Import supports at most ${tr.toLocaleString("en-US")} rows`);let n=je([],t),r=new Array(e.length),o=0;for(let i=0;inr)throw new Error(`Import supports at most ${nr} columns`);if(o+=s.length,o>rr)throw new Error(`Import supports at most ${rr.toLocaleString("en-US")} cells; split the file into smaller imports`);for(let l of s)W(l,"Column name"),He(a[l],n);r[i]=s}return r}function gc(e,t,n,r){let o=N(e),i=t.length===0?`INSERT INTO ${o} DEFAULT VALUES`:`INSERT INTO ${o} (${t.map(w).join(", ")}) VALUES (${n.join(", ")})`;return r.kind!=="primaryKey"?i:`${i} RETURNING ${ut(r)}`}function yc(e,t,n,r){let o=tn(e),i=qe(n,t),a=t.kind==="rowid"?"CAST(rowid AS TEXT)":ut(t),s=t.kind==="rowid"?1:t.columns.length*2,l=o.map(ee),d=new Map(n.map((y,g)=>[String(y),g])),c=[],u=new Map,f=new Array(n.length),m=0;for(let y of i){let g=p.exec(`SELECT ${a}${l.length>0?", ":""}${l.join(", ")} FROM ${N(e)} WHERE ${y.sql}`,v(y.params),{useBigInt:!0})[0];for(let h of g?.values??[]){let C=t.kind==="rowid"?M(h[0]):dt(t,h.slice(0,s),r,`Cannot import into ${e}`),T=d.get(String(C));if(T===void 0||f[T]!==void 0)throw new Error(`Import into ${e} could not re-read an inserted row by its identity`);let I=o.map((_,A)=>V(h[s+A*2],h[s+A*2+1],`${e}.${_}`,{textEncoding:r})),x=I.map(_=>_.storageClass),S=x.join(","),R=u.get(S);R===void 0&&(R=c.length,c.push(x),u.set(S,R)),f[T]={rowId:C,values:I.map(_=>_.rawTextBytes??_.value),pattern:R},m+=1}}if(m!==n.length)throw new Error(`Import into ${e} inserted ${n.length} rows but could re-read only ${m}`);return{columns:o,storageClassPatterns:c,rows:f}}function dr(e){if(e==null)return 4;switch(typeof e){case"string":{let t=ar(e)+2;for(let n=0;nr.maxUndoSnapshotBytes)throw new Error(`Import undo history for ${t} rows into ${e} needs ${a} bytes, over the ${r.maxUndoSnapshotBytes}-byte undo memory budget; import fewer rows at a time or increase maxUndoMemory. No rows were imported.`)}let o=Math.min(r.maxSnapshotTransportBytes??Number.MAX_SAFE_INTEGER,Yt),i=dr({rowCount:t,snapshots:n});if(i>o)throw new Error(`Import undo history for ${t} rows into ${e} is about ${i} bytes encoded, over the ${o}-byte limit this engine can return in one edit; import fewer rows at a time. No rows were imported.`)}async function Ec(e,t,n={}){if(!p)throw new Error("No database initialized");Q("Row import"),W(e,"Table name");let r=mc(n??{}),o=pc(t,r.maxEditValueBytes),i=k("sp_import_rows");b(`SAVEPOINT ${i}`);try{if(n?.expectedSchemaVersion!==void 0&&cs()!==n.expectedSchemaVersion)throw new Error("The destination database schema changed after the preview was prepared. Start the import again.");let a=await te(e),s=ve(),l=new Array(t.length),d=new Map,c=null;try{for(let f=0;fm[x]),h=g.map(G),C=`${JSON.stringify(y)}|${h.join(",")}`,T=d.get(C);if(T||(Le("INSERT",e,y),T=p.prepare(gc(e,y,h,a)),d.set(C,T)),T.bind(v(g)),a.kind==="primaryKey"){if(!T.step())throw new Error(`Import into ${e} did not return a primary-key identity`);let x=T.get(null,{useBigInt:!0});if(!x||T.step())throw new Error(`Import into ${e} did not return exactly one primary-key identity`);T.reset();let S=dt(a,x,s,`Cannot import into ${e}`);l[f]=on(e,a,U(S,a));continue}T.step(),T.reset(),c??(c=p.prepare("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")),c.step();let I=c.get(null,{useBigInt:!0});if(c.reset(),!I||Number(I[0])!==1)throw new Error(`Import into ${e} did not create exactly one row for row ${f+1}`);l[f]=M(I[1])}}finally{for(let f of d.values())f.free();c?.free()}let u=yc(e,a,l,s);return hc(e,t.length,u,r),b(`RELEASE ${i}`),{rowCount:t.length,snapshots:u}}catch(a){throw B(i,"importRows"),a}}function ds(e){if(e===null||typeof e!="object"||!Array.isArray(e.columns)||!Array.isArray(e.storageClassPatterns)||!Array.isArray(e.rows)||e.rows.length===0||e.columns.some(r=>typeof r!="string"))throw new K;let t=e.columns.length,n=e.storageClassPatterns.map(r=>{if(!Array.isArray(r)||r.length!==t)throw new K;return e.columns.map((o,i)=>({column:o,storageClass:r[i]}))});return e.rows.map(r=>{if(r===null||typeof r!="object"||!Array.isArray(r.values)||r.values.length!==t||!Number.isInteger(r.pattern)||r.pattern<0||r.pattern>=n.length)throw new K;return{rowId:r.rowId,row:Object.fromEntries(e.columns.map((o,i)=>[o,r.values[i]])),storageClasses:n[r.pattern]}})}var Hi=64;function ir(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||n<0)throw new Error(`Demo delete snapshot ${t} exceeds the web transport safety bound`);return n}function wc(e){let t=w(e);return`CASE typeof(${t}) WHEN 'text' THEN 6 * octet_length(${t}) WHEN 'blob' THEN 4 * ((octet_length(${t}) + 2) / 3) + 40 WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 4 END`}function Sc(e){let t=w(e);return`COALESCE(MAX(CASE WHEN typeof(${t}) = 'blob' THEN octet_length(${t}) ELSE 0 END), 0)`}function fr(e,t,n,r){let o=1024;for(let s of t)o+=64+6*String(s).length;let i=128+n.reduce((s,l)=>s+48+6*l.length,0),a=0;for(let s of r)for(let l=0;l0?", ":""}`+d.map(Sc).join(", ")+` FROM ${N(e)} WHERE ${s.sql}`,v(s.params),{useBigInt:!0})[0]?.values?.[0];if(!c)throw new Error("Demo delete snapshot preflight returned no metadata");let u=ir(c[0],"row count");l===0&&(a+=u,o+=u*i),o+=ir(c[1],"encoded size");for(let f of c.slice(2))if(ir(f,"BLOB size")>We)throw new Error(`Demo delete snapshot exceeds the ${We}-byte web transport binary limit; the row was not deleted`);if(!Number.isSafeInteger(o))throw new Error("Demo delete snapshot exceeds the web transport safety bound")}if(a!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);if(o>Yt)throw new Error(`Demo delete snapshot exceeds the ${Yt}-byte web transport response limit; no rows were deleted`)}async function bc(e,t){if(t.forEach(Ae),!p)throw new Error("No database initialized");if(Q("Row deletion"),t.length===0)return[];let n=await te(e),r=ve();if(t.some(Z)){if(!t.every(Z))throw new Error("Cannot mix rowid and primary-key row identities");if(n.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let a=qe(t,n),s=k("sp_delete_pk_rows");b(`SAVEPOINT ${s}`);try{Le("DELETE",e);let l=tn(e);fr(e,t,l,a);let d=[];for(let c of a){let f=p.exec(`SELECT ${l.map(ee).join(", ")||"1"} FROM ${N(e)} WHERE ${c.sql}`,v(c.params),{useBigInt:!0})[0]?.values??[],m=n.columns.map(y=>{let g=l.indexOf(y.identifier);if(g<0)throw new Error(`Primary-key column missing from ${e}: ${y.identifier}`);return g});d.push(...f.map(y=>{let g=l.map((h,C)=>V(y[C*2],y[C*2+1],`${e}.${h}`,{textEncoding:r}));return{rowId:Ve(n.columns,m.map(h=>g[h].value)),row:Object.fromEntries(l.map((h,C)=>[h,g[C].rawTextBytes??g[C].value])),storageClasses:l.map((h,C)=>({column:h,storageClass:g[C].storageClass}))}}))}if(d.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let c of a)p.run(`DELETE FROM ${N(e)} WHERE ${c.sql}`,v(c.params));return b(`RELEASE ${s}`),d}catch(l){throw B(s,"deletePrimaryKeyRows"),l}}if(n.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let o=qe(t,n),i=k("sp_delete_rowid_rows");b(`SAVEPOINT ${i}`);try{Le("DELETE",e);let a=tn(e);fr(e,t,a,o);let s=[];for(let l of o){let d=p.exec(`SELECT CAST(rowid AS TEXT)${a.length>0?", ":""}${a.map(ee).join(", ")} FROM ${N(e)} WHERE ${l.sql}`,v(l.params),{useBigInt:!0})[0];s.push(...(d?.values??[]).map(c=>{let u=M(c[0]),f=a.map((m,y)=>V(c[y*2+1],c[y*2+2],`${e}.${m}`,{textEncoding:r}));return{rowId:u,row:Object.fromEntries(a.map((m,y)=>[m,f[y].rawTextBytes??f[y].value])),storageClasses:a.map((m,y)=>({column:m,storageClass:f[y].storageClass}))}}))}if(s.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let l of o)p.run(`DELETE FROM ${N(e)} WHERE ${l.sql}`,v(l.params));return b(`RELEASE ${i}`),s}catch(a){throw B(i,"deleteRowidRows"),a}}async function fs(e,t){if(!p)throw new Error("No database initialized");if(!Array.isArray(t))throw new Error("Column names must be an array");W(e,"Table name"),t.forEach(u=>W(u,"Column name"));let r=(p.exec("SELECT name, sql FROM main.sqlite_schema WHERE type = 'index' AND tbl_name = ? AND sql IS NOT NULL ORDER BY name",[e])[0]?.values??[]).map(u=>({identifier:u[0],sql:u[1]}));if(r.length===0||t.length===0)return[];let i=(p.exec(`PRAGMA main.table_xinfo(${w(e)})`)[0]?.values??[]).map(u=>u[1]),a=Xr(i,t);if(a.length===0)return[];let s=crypto.randomUUID().replace(/-/g,""),l=`__sqlite_explorer_index_probe_${s}`,d=`__sqlite_explorer_index_candidate_${s}`,c=k("sp_index_dependencies");b(`SAVEPOINT ${c}`);try{b(Qr(l,i));let u=k("sp_index_baseline");b(`SAVEPOINT ${u}`);try{for(let m of a)b(`ALTER TABLE temp.${w(l)} DROP COLUMN ${w(m)}`);b(`ROLLBACK TO ${u}`),b(`RELEASE ${u}`)}catch(m){throw B(u,"findDependentIndexBaseline"),new Error("Cannot establish the index dependency probe baseline",{cause:m})}let f=[];for(let m of r){let y=k("sp_index_candidate");b(`SAVEPOINT ${y}`);try{b(Gr(l,d,m.sql));let g=!1;for(let h of a)try{b(`ALTER TABLE temp.${w(l)} DROP COLUMN ${w(h)}`)}catch{g=!0;break}b(`ROLLBACK TO ${y}`),b(`RELEASE ${y}`),g&&f.push(m)}catch(g){throw B(y,"findDependentIndex"),new Error(`Cannot inspect dependency for index ${w(m.identifier)}`,{cause:g})}}return b(`ROLLBACK TO ${c}`),b(`RELEASE ${c}`),f}catch(u){throw B(c,"findDependentIndexes"),u}}function Tc(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Dependent-index confirmation must be an array");return e.map(t=>{if(!t||typeof t!="object"||Array.isArray(t)||typeof t.identifier!="string"||typeof t.sql!="string")throw new Error("Dependent-index confirmation contains an invalid definition");return W(t.identifier,"Index name"),{identifier:t.identifier,sql:t.sql}})}}function Cc(e,t,n){if(t.length===0&&(n?.length??0)===0)return;if(!n)throw new Error("Column deletion requires confirmation for dependent indexes: "+t.map(i=>i.identifier).join(", "));let r=new Map(n.map(i=>[i.identifier,i.sql]));if(!(r.size===n.length&&n.length===t.length&&t.every(i=>r.get(i.identifier)===i.sql)))throw new Error(`Cannot delete columns from ${e}: dependent indexes changed while the confirmation was open`)}async function Rc(e,t,n){if(!p)throw new Error("No database initialized");if(Q("Column deletion"),t.length===0)return;let r=k("sp_delete_columns");b(`SAVEPOINT ${r}`);try{let o=Tc(n),i=await fs(e,t);Cc(e,i,o),await Xo(e,t,i.map(a=>a.identifier),a=>b(a)),b(`RELEASE ${r}`)}catch(o){throw B(r,"deleteColumns"),Ic(o,t)}}function Ic(e,t){let n;try{n=xc(t)}catch{return e}if(n.length===0)return e;let r=e instanceof Error?e.message:String(e),o=n.map(i=>`${i.type} ${i.identifier}`).join(", ");return new Error(`${r} \u2014 these schema objects mention ${t.join(", ")} and may be blocking the drop: ${o}. Drop or edit them first.`,{cause:e})}function xc(e){return(p.exec(zo)[0]?.values??[]).filter(n=>typeof n[1]=="string"&&typeof n[2]=="string"&&e.some(r=>Qo(n[2],r))).map(n=>({type:n[0],identifier:n[1]}))}async function Ac(e,t,n){if(!p)throw new Error("No database initialized");Q("Table creation");let r=Yr(e,t,n),o=k("sp_create_table");b(`SAVEPOINT ${o}`);try{let i=await j();b(r),ge(i,await j()),b(`RELEASE ${o}`)}catch(i){throw B(o,"createTable"),i}}async function ms(e,t=!1){if(!p)throw new Error("No database initialized");let r=p.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0]?.[0];if(typeof r!="string")return null;let o=bt.map(c=>p.exec(c.sql,c.params(e))[0]?.values||[]),{triggers:i,ambiguousTemporaryTriggerNames:a,unqualifiedTemporaryTriggers:s}=Dr(e,o);if(s.length>0){let u=(p.exec("SELECT name FROM pragma.pragma_table_xinfo(?, 'main') ORDER BY cid",[e])[0]?.values??[]).map(f=>{if(typeof f[0]!="string")throw new Error(`SQLite returned invalid view column metadata for ${e}`);return f[0]});for(let f of s){if(i.some(m=>!m.temporary&&Me(m.identifier,f.identifier))){a.push(f.identifier);continue}try{let m=Ct(f.sql,"main",e,u);if(m===void 0){a.push(f.identifier);continue}let y=p.exec(m);Br(y[0]?.values??[],f.identifier)&&i.push({...f,sql:wn(f.sql,f.identifier)})}catch{a.push(f.identifier)}}}let l,d;try{l=Ur(r),d=En(r)}catch(c){if(!t)throw c;l=""}return{identifier:e,sql:r,selectSql:l,columnListSql:d,triggers:i,...a.length>0?{ambiguousTemporaryTriggerNames:a}:{}}}async function ps(e,t=!1){let n=await ms(e,t);if(!n)throw new Error(`View not found: ${e}`);return n}async function nn(e){return ps(e,!1)}function j(){return jr({queryRows:async(e,t)=>p.exec(e,v(t))[0]?.values??[],compileStatements:async e=>e.map(t=>{try{Je(t);return}catch(n){return oe(n)}})})}function gs(e,t){let r=p.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0];qr(e,r!==void 0,t);let o=r?.[0];return{storedSql:o,columnListSql:typeof o=="string"?En(o):void 0}}function Q(e){if(H)throw new Error(`${e} is unavailable because the database is read-only`)}async function Nc(e,t,n="edit"){if(W(e,"View name"),!p)throw new Error("No database initialized");if(H)throw new Error("View validation is unavailable because the database is read-only");let r=pe(t),{storedSql:o,columnListSql:i}=gs(e,n),a=k("sp_validate_view");b(`SAVEPOINT ${a}`);try{let s=await j();typeof o=="string"&&b(`DROP VIEW ${J(e)}`),b(tt(e,r,i)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),ge(s,await j()),b(`ROLLBACK TO ${a}`),b(`RELEASE ${a}`)}catch(s){throw B(a,"validateViewDefinition"),s}}async function _c(e,t,n=50,r="edit",o){if(W(e,"View name"),!p)throw new Error("No database initialized");let i=pe(t),a=Math.max(1,Math.min(100,Math.trunc(n)||50)),{storedSql:s,columnListSql:l}=gs(e,r);if(H){let c=w(e);return or(l?`WITH ${c} ${l} AS (${i} + `)[0]?.values||[]).map(l=>({identifier:l[0],parentTable:l[1]}));return{tables:r,views:i,indexes:s}}async function br(e){if(!p)throw new Error("No database initialized");let t=p.exec(so,[e]);return t.length===0?[]:t[0].values.filter(n=>Number(n[6]??0)!==1).map(n=>({ordinal:n[0],identifier:n[1],declaredType:n[2],isRequired:n[3],defaultExpression:n[4],primaryKeyPosition:n[5],isGenerated:Number(n[6]??0)===2||Number(n[6]??0)===3,isRowidAlias:Number(n[7]??0)===1}))}function cs(){let e=n=>{let r=p.prepare(n),o=[];try{for(;r.step();)o.push(r.get());return o}finally{r.free()}},t=e("PRAGMA main.schema_version")[0]?.[0];if(!Number.isSafeInteger(t))throw new Error("Unable to read the destination database schema version.");return JSON.stringify([t,e("SELECT type, name, tbl_name, sql FROM temp.sqlite_schema ORDER BY type, name")])}async function ic(e){if(!p)throw new Error("No database initialized");W(e,"Table name");let t=k("sp_import_preview");b(`SAVEPOINT ${t}`);try{let n=await br(e);if(!n.length)throw new Error(`Table not found: ${e}`);let r=cs();return b(`RELEASE SAVEPOINT ${t}`),{columns:n,schemaVersion:r}}catch(n){throw B(t,"getImportTarget"),n}}function tn(e){return(p.exec("SELECT name FROM pragma.pragma_table_xinfo(?) WHERE hidden = 0 ORDER BY cid",[e])[0]?.values??[]).map(n=>{if(typeof n[0]!="string")throw new Error(`SQLite returned invalid column metadata for ${e}`);return n[0]})}function sc(e,t,n,r){let o=ve(),i=U(n,t),a=r.map(ee),l=p.exec(`SELECT ${a.join(", ")||"1"} FROM ${N(e)} WHERE ${i.sql} LIMIT 2`,v(i.params),{useBigInt:!0})[0]?.values??[];if(l.length!==1)throw new Ce(e);let d=r.map((c,u)=>V(l[0][u*2],l[0][u*2+1],`${e}.${c}`,{textEncoding:o}));return{rowId:n,row:Object.fromEntries(r.map((c,u)=>[c,d[u].rawTextBytes??d[u].value])),storageClasses:r.map((c,u)=>({column:c,storageClass:d[u].storageClass}))}}function ac(e,t,n,r,o){if(o===void 0)return;let i=U(n,t),a=ii(r,t.kind==="rowid"),s=si(e,a,i),l=p.exec(s.sql,v(s.params),{useBigInt:!0})[0]?.values?.[0],d=ai(l);li({table:e,insertableColumns:r,includeSyntheticRowId:t.kind==="rowid",rowIds:[n],rowCount:d.rowCount,valueBytes:d.valueBytes,maxSnapshotBytes:o,operation:"Insert"})}function Fi(e,t,n,r){let o=tn(e),i=U(n,t);return fr(e,[n],o,[i]),ac(e,t,n,o,r),sc(e,t,n,o)}async function lc(){if(!p)throw new Error("No database initialized");let e={},t=["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","encoding","auto_vacuum"];for(let n of t)try{let r=p.exec(`PRAGMA ${n}`);r.length>0&&r[0].values.length>0&&(e[n]=r[0].values[0][0])}catch{}return e}async function cc(e,t){if(!p)throw new Error("No database initialized");if(Q("Pragma updates"),!["foreign_keys","journal_mode","synchronous","cache_size","locking_mode","temp_store","auto_vacuum"].includes(e))throw new Error(`Invalid or disallowed PRAGMA: ${e}`);let r;if(typeof t=="string"){if(!/^[a-zA-Z0-9_-]+$/.test(t))throw new Error("Invalid PRAGMA string value: contains disallowed characters");r=`PRAGMA ${e} = '${t}'`}else if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("Invalid PRAGMA numeric value: must be finite");r=`PRAGMA ${e} = ${t}`}else if(typeof t=="boolean")r=`PRAGMA ${e} = ${t?"ON":"OFF"}`;else throw new Error(`Invalid PRAGMA value type: ${typeof t}`);b(r)}async function uc(e,t,n,r,o,i,a){let s=a===yr,l=!s&&i!==void 0,d=s?0:je([r],i);if(Ae(t),!p)throw new Error("No database initialized");if(Q("Cell updates"),Z(t))return(await hs(e,[{rowId:t,column:n,value:r,operation:"set"}],void 0,i,a))[0]?.newRowId??t;let c=M(t);if((await te(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let f=k("sp_update_rowid_cell");b(`SAVEPOINT ${f}`);try{let m=wr(e);Et(e,[n]);let y=w(n);if(p.run(`UPDATE ${N(e)} SET ${y} = ${G(r)} WHERE rowid = ?`+(l?` AND NOT (typeof(${y}) IN ('text', 'blob') AND length(CAST(${y} AS BLOB)) > ?)`:""),v(l?[r,c,d]:[r,c])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1){if(l){let C=await en({table:e,rowId:c,column:n});if((C.storageClass==="text"||C.storageClass==="blob")&&C.byteLength>d)throw new Fe(e,n,C.storageClass,C.byteLength,d)}throw new Error(`Cannot update ${e}.${n}: row ${t} no longer exists`)}let h=Sr(e,m,c,n,r);return b(`RELEASE ${f}`),h}catch(m){throw B(f,"updateCell"),m}}async function dc(e,t,n,r,o,i){let a=je([r],i);if(bi(o,a),Ae(t),!p)throw new Error("No database initialized");Q("Oversized cell replacement");let s=await te(e),l=U(t,s),d=w(n),c=()=>{if(p.run(`UPDATE ${N(e)} SET ${d} = ${G(r)} WHERE ${l.sql} AND typeof(${d}) = ? AND length(CAST(${d} AS BLOB)) = ?`,v([r,...l.params,o.storageClass,o.byteLength])),p.exec("SELECT changes()")[0]?.values?.[0]?.[0]!==1)throw new Error(Ei);if(s.kind==="rowid")return Sr(e,wr(e),M(t),n,r);let m=s.columns.findIndex(g=>g.identifier===n),y=_n(t,s,m>=0?[{column:n,value:r}]:[]);return on(e,s,U(y,s),cr(e))},u=k("sp_replace_oversized_cell");b(`SAVEPOINT ${u}`);try{Et(e,[n],s.kind==="rowid");let f=c();return b(`RELEASE ${u}`),f}catch(f){throw B(u,"replaceOversizedCell"),f}}async function us(e,t,n,r,o,i){if(!p)throw new Error("No database initialized");Q("Row insertion"),r!==yr&&je(Object.values(t),n);let a=Object.keys(t),s=Object.values(t),l=await te(e),d;if(a.length===0)d=`INSERT INTO ${N(e)} DEFAULT VALUES`;else{let u=a.map(w).join(", "),f=s.map(G).join(", ");d=`INSERT INTO ${N(e)} (${u}) VALUES (${f})`}if(l.kind==="primaryKey"){let u=k("sp_insert_pk_row");b(`SAVEPOINT ${u}`);try{Le("INSERT",e,a);let f=p.prepare(`${d} RETURNING `+ut(l),v(s)),m;try{if(!f.step())throw new Error(`Insert into ${e} did not return a primary-key identity`);if(m=f.get(null,{useBigInt:!0}),!m||f.step())throw new Error(`Insert into ${e} did not return exactly one primary-key identity`)}finally{f.free()}let y=dt(l,m,Ne(p.exec("PRAGMA encoding")[0]?.values?.[0]?.[0]),`Cannot insert into ${e}`),g=on(e,l,U(y,l)),h=o?Fi(e,l,g,i):g;return b(`RELEASE ${u}`),h}catch(f){throw B(u,"insertPrimaryKeyRow"),f}}let c=k("sp_insert_rowid_row");b(`SAVEPOINT ${c}`);try{Le("INSERT",e,a),p.run(d,v(s));let u=p.exec("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")[0]?.values?.[0];if(!u||Number(u[0])!==1)throw new Error(`Insert into ${e} did not create exactly one row`);let f=M(u[1]),m=U(f,l);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE ${m.sql} LIMIT 2`,v(m.params))[0]?.values.length??0)!==1)throw new Error(`Insert into ${e} did not leave one addressable row; the insert was rolled back`);let g=o?Fi(e,l,f,i):f;return b(`RELEASE ${c}`),g}catch(u){throw B(c,"insertRowIdRow"),u}}async function fc(e,t,n,r){return us(e,t,n,r,!1)}async function mc(e,t,n,r){return us(e,t,n,void 0,!0,r)}var Jt=40;function pc(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("Import options must be an object");if(e.expectedSchemaVersion!==void 0&&typeof e.expectedSchemaVersion!="string")throw new Error("Import expectedSchemaVersion must be a string");let t=n=>{let r=e[n];if(r!==void 0){if(!Number.isSafeInteger(r)||r<0)throw new Error(`Import ${n} must be a non-negative safe integer`);return r}};return{maxEditValueBytes:e.maxEditValueBytes,maxUndoSnapshotBytes:t("maxUndoSnapshotBytes"),maxSnapshotTransportBytes:t("maxSnapshotTransportBytes")}}function gc(e,t){if(!Array.isArray(e))throw new Error("Import rows must be an array");if(e.length===0)throw new Error("Import requires at least one row");if(e.length>tr)throw new Error(`Import supports at most ${tr.toLocaleString("en-US")} rows`);let n=je([],t),r=new Array(e.length),o=0;for(let i=0;inr)throw new Error(`Import supports at most ${nr} columns`);if(o+=s.length,o>rr)throw new Error(`Import supports at most ${rr.toLocaleString("en-US")} cells; split the file into smaller imports`);for(let l of s)W(l,"Column name"),He(a[l],n);r[i]=s}return r}function yc(e,t,n,r){let o=N(e),i=t.length===0?`INSERT INTO ${o} DEFAULT VALUES`:`INSERT INTO ${o} (${t.map(w).join(", ")}) VALUES (${n.join(", ")})`;return r.kind!=="primaryKey"?i:`${i} RETURNING ${ut(r)}`}function hc(e,t,n,r){let o=tn(e),i=qe(n,t),a=t.kind==="rowid"?"CAST(rowid AS TEXT)":ut(t),s=t.kind==="rowid"?1:t.columns.length*2,l=o.map(ee),d=new Map(n.map((y,g)=>[String(y),g])),c=[],u=new Map,f=new Array(n.length),m=0;for(let y of i){let g=p.exec(`SELECT ${a}${l.length>0?", ":""}${l.join(", ")} FROM ${N(e)} WHERE ${y.sql}`,v(y.params),{useBigInt:!0})[0];for(let h of g?.values??[]){let C=t.kind==="rowid"?M(h[0]):dt(t,h.slice(0,s),r,`Cannot import into ${e}`),T=d.get(String(C));if(T===void 0||f[T]!==void 0)throw new Error(`Import into ${e} could not re-read an inserted row by its identity`);let I=o.map((_,A)=>V(h[s+A*2],h[s+A*2+1],`${e}.${_}`,{textEncoding:r})),x=I.map(_=>_.storageClass),S=x.join(","),R=u.get(S);R===void 0&&(R=c.length,c.push(x),u.set(S,R)),f[T]={rowId:C,values:I.map(_=>_.rawTextBytes??_.value),pattern:R},m+=1}}if(m!==n.length)throw new Error(`Import into ${e} inserted ${n.length} rows but could re-read only ${m}`);return{columns:o,storageClassPatterns:c,rows:f}}function dr(e){if(e==null)return 4;switch(typeof e){case"string":{let t=ar(e)+2;for(let n=0;nr.maxUndoSnapshotBytes)throw new Error(`Import undo history for ${t} rows into ${e} needs ${a} bytes, over the ${r.maxUndoSnapshotBytes}-byte undo memory budget; import fewer rows at a time or increase maxUndoMemory. No rows were imported.`)}let o=Math.min(r.maxSnapshotTransportBytes??Number.MAX_SAFE_INTEGER,Yt),i=dr({rowCount:t,snapshots:n});if(i>o)throw new Error(`Import undo history for ${t} rows into ${e} is about ${i} bytes encoded, over the ${o}-byte limit this engine can return in one edit; import fewer rows at a time. No rows were imported.`)}async function wc(e,t,n={}){if(!p)throw new Error("No database initialized");Q("Row import"),W(e,"Table name");let r=pc(n??{}),o=gc(t,r.maxEditValueBytes),i=k("sp_import_rows");b(`SAVEPOINT ${i}`);try{if(n?.expectedSchemaVersion!==void 0&&cs()!==n.expectedSchemaVersion)throw new Error("The destination database schema changed after the preview was prepared. Start the import again.");let a=await te(e),s=ve(),l=new Array(t.length),d=new Map,c=null;try{for(let f=0;fm[x]),h=g.map(G),C=`${JSON.stringify(y)}|${h.join(",")}`,T=d.get(C);if(T||(Le("INSERT",e,y),T=p.prepare(yc(e,y,h,a)),d.set(C,T)),T.bind(v(g)),a.kind==="primaryKey"){if(!T.step())throw new Error(`Import into ${e} did not return a primary-key identity`);let x=T.get(null,{useBigInt:!0});if(!x||T.step())throw new Error(`Import into ${e} did not return exactly one primary-key identity`);T.reset();let S=dt(a,x,s,`Cannot import into ${e}`);l[f]=on(e,a,U(S,a));continue}T.step(),T.reset(),c??(c=p.prepare("SELECT changes(), CAST(last_insert_rowid() AS TEXT)")),c.step();let I=c.get(null,{useBigInt:!0});if(c.reset(),!I||Number(I[0])!==1)throw new Error(`Import into ${e} did not create exactly one row for row ${f+1}`);l[f]=M(I[1])}}finally{for(let f of d.values())f.free();c?.free()}let u=hc(e,a,l,s);return Ec(e,t.length,u,r),b(`RELEASE ${i}`),{rowCount:t.length,snapshots:u}}catch(a){throw B(i,"importRows"),a}}function ds(e){if(e===null||typeof e!="object"||!Array.isArray(e.columns)||!Array.isArray(e.storageClassPatterns)||!Array.isArray(e.rows)||e.rows.length===0||e.columns.some(r=>typeof r!="string"))throw new K;let t=e.columns.length,n=e.storageClassPatterns.map(r=>{if(!Array.isArray(r)||r.length!==t)throw new K;return e.columns.map((o,i)=>({column:o,storageClass:r[i]}))});return e.rows.map(r=>{if(r===null||typeof r!="object"||!Array.isArray(r.values)||r.values.length!==t||!Number.isInteger(r.pattern)||r.pattern<0||r.pattern>=n.length)throw new K;return{rowId:r.rowId,row:Object.fromEntries(e.columns.map((o,i)=>[o,r.values[i]])),storageClasses:n[r.pattern]}})}var Hi=64;function ir(e,t){let n=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(n)||n<0)throw new Error(`Demo delete snapshot ${t} exceeds the web transport safety bound`);return n}function Sc(e){let t=w(e);return`CASE typeof(${t}) WHEN 'text' THEN 6 * octet_length(${t}) WHEN 'blob' THEN 4 * ((octet_length(${t}) + 2) / 3) + 40 WHEN 'integer' THEN 8 WHEN 'real' THEN 8 ELSE 4 END`}function bc(e){let t=w(e);return`COALESCE(MAX(CASE WHEN typeof(${t}) = 'blob' THEN octet_length(${t}) ELSE 0 END), 0)`}function fr(e,t,n,r){let o=1024;for(let s of t)o+=64+6*String(s).length;let i=128+n.reduce((s,l)=>s+48+6*l.length,0),a=0;for(let s of r)for(let l=0;l0?", ":""}`+d.map(bc).join(", ")+` FROM ${N(e)} WHERE ${s.sql}`,v(s.params),{useBigInt:!0})[0]?.values?.[0];if(!c)throw new Error("Demo delete snapshot preflight returned no metadata");let u=ir(c[0],"row count");l===0&&(a+=u,o+=u*i),o+=ir(c[1],"encoded size");for(let f of c.slice(2))if(ir(f,"BLOB size")>We)throw new Error(`Demo delete snapshot exceeds the ${We}-byte web transport binary limit; the row was not deleted`);if(!Number.isSafeInteger(o))throw new Error("Demo delete snapshot exceeds the web transport safety bound")}if(a!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);if(o>Yt)throw new Error(`Demo delete snapshot exceeds the ${Yt}-byte web transport response limit; no rows were deleted`)}async function Tc(e,t){if(t.forEach(Ae),!p)throw new Error("No database initialized");if(Q("Row deletion"),t.length===0)return[];let n=await te(e),r=ve();if(t.some(Z)){if(!t.every(Z))throw new Error("Cannot mix rowid and primary-key row identities");if(n.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let a=qe(t,n),s=k("sp_delete_pk_rows");b(`SAVEPOINT ${s}`);try{Le("DELETE",e);let l=tn(e);fr(e,t,l,a);let d=[];for(let c of a){let f=p.exec(`SELECT ${l.map(ee).join(", ")||"1"} FROM ${N(e)} WHERE ${c.sql}`,v(c.params),{useBigInt:!0})[0]?.values??[],m=n.columns.map(y=>{let g=l.indexOf(y.identifier);if(g<0)throw new Error(`Primary-key column missing from ${e}: ${y.identifier}`);return g});d.push(...f.map(y=>{let g=l.map((h,C)=>V(y[C*2],y[C*2+1],`${e}.${h}`,{textEncoding:r}));return{rowId:Ve(n.columns,m.map(h=>g[h].value)),row:Object.fromEntries(l.map((h,C)=>[h,g[C].rawTextBytes??g[C].value])),storageClasses:l.map((h,C)=>({column:h,storageClass:g[C].storageClass}))}}))}if(d.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let c of a)p.run(`DELETE FROM ${N(e)} WHERE ${c.sql}`,v(c.params));return b(`RELEASE ${s}`),d}catch(l){throw B(s,"deletePrimaryKeyRows"),l}}if(n.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let o=qe(t,n),i=k("sp_delete_rowid_rows");b(`SAVEPOINT ${i}`);try{Le("DELETE",e);let a=tn(e);fr(e,t,a,o);let s=[];for(let l of o){let d=p.exec(`SELECT CAST(rowid AS TEXT)${a.length>0?", ":""}${a.map(ee).join(", ")} FROM ${N(e)} WHERE ${l.sql}`,v(l.params),{useBigInt:!0})[0];s.push(...(d?.values??[]).map(c=>{let u=M(c[0]),f=a.map((m,y)=>V(c[y*2+1],c[y*2+2],`${e}.${m}`,{textEncoding:r}));return{rowId:u,row:Object.fromEntries(a.map((m,y)=>[m,f[y].rawTextBytes??f[y].value])),storageClasses:a.map((m,y)=>({column:m,storageClass:f[y].storageClass}))}}))}if(s.length!==t.length)throw new Error(`Cannot delete from ${e}: one or more row identities no longer exist`);for(let l of o)p.run(`DELETE FROM ${N(e)} WHERE ${l.sql}`,v(l.params));return b(`RELEASE ${i}`),s}catch(a){throw B(i,"deleteRowidRows"),a}}async function fs(e,t){if(!p)throw new Error("No database initialized");if(!Array.isArray(t))throw new Error("Column names must be an array");W(e,"Table name"),t.forEach(u=>W(u,"Column name"));let r=(p.exec("SELECT name, sql FROM main.sqlite_schema WHERE type = 'index' AND tbl_name = ? AND sql IS NOT NULL ORDER BY name",[e])[0]?.values??[]).map(u=>({identifier:u[0],sql:u[1]}));if(r.length===0||t.length===0)return[];let i=(p.exec(`PRAGMA main.table_xinfo(${w(e)})`)[0]?.values??[]).map(u=>u[1]),a=Xr(i,t);if(a.length===0)return[];let s=crypto.randomUUID().replace(/-/g,""),l=`__sqlite_explorer_index_probe_${s}`,d=`__sqlite_explorer_index_candidate_${s}`,c=k("sp_index_dependencies");b(`SAVEPOINT ${c}`);try{b(Qr(l,i));let u=k("sp_index_baseline");b(`SAVEPOINT ${u}`);try{for(let m of a)b(`ALTER TABLE temp.${w(l)} DROP COLUMN ${w(m)}`);b(`ROLLBACK TO ${u}`),b(`RELEASE ${u}`)}catch(m){throw B(u,"findDependentIndexBaseline"),new Error("Cannot establish the index dependency probe baseline",{cause:m})}let f=[];for(let m of r){let y=k("sp_index_candidate");b(`SAVEPOINT ${y}`);try{b(Gr(l,d,m.sql));let g=!1;for(let h of a)try{b(`ALTER TABLE temp.${w(l)} DROP COLUMN ${w(h)}`)}catch{g=!0;break}b(`ROLLBACK TO ${y}`),b(`RELEASE ${y}`),g&&f.push(m)}catch(g){throw B(y,"findDependentIndex"),new Error(`Cannot inspect dependency for index ${w(m.identifier)}`,{cause:g})}}return b(`ROLLBACK TO ${c}`),b(`RELEASE ${c}`),f}catch(u){throw B(c,"findDependentIndexes"),u}}function Cc(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Dependent-index confirmation must be an array");return e.map(t=>{if(!t||typeof t!="object"||Array.isArray(t)||typeof t.identifier!="string"||typeof t.sql!="string")throw new Error("Dependent-index confirmation contains an invalid definition");return W(t.identifier,"Index name"),{identifier:t.identifier,sql:t.sql}})}}function Rc(e,t,n){if(t.length===0&&(n?.length??0)===0)return;if(!n)throw new Error("Column deletion requires confirmation for dependent indexes: "+t.map(i=>i.identifier).join(", "));let r=new Map(n.map(i=>[i.identifier,i.sql]));if(!(r.size===n.length&&n.length===t.length&&t.every(i=>r.get(i.identifier)===i.sql)))throw new Error(`Cannot delete columns from ${e}: dependent indexes changed while the confirmation was open`)}async function Ic(e,t,n){if(!p)throw new Error("No database initialized");if(Q("Column deletion"),t.length===0)return;let r=k("sp_delete_columns");b(`SAVEPOINT ${r}`);try{let o=Cc(n),i=await fs(e,t);Rc(e,i,o),await Xo(e,t,i.map(a=>a.identifier),a=>b(a)),b(`RELEASE ${r}`)}catch(o){throw B(r,"deleteColumns"),xc(o,t)}}function xc(e,t){let n;try{n=Ac(t)}catch{return e}if(n.length===0)return e;let r=e instanceof Error?e.message:String(e),o=n.map(i=>`${i.type} ${i.identifier}`).join(", ");return new Error(`${r} \u2014 these schema objects mention ${t.join(", ")} and may be blocking the drop: ${o}. Drop or edit them first.`,{cause:e})}function Ac(e){return(p.exec(zo)[0]?.values??[]).filter(n=>typeof n[1]=="string"&&typeof n[2]=="string"&&e.some(r=>Qo(n[2],r))).map(n=>({type:n[0],identifier:n[1]}))}async function Nc(e,t,n){if(!p)throw new Error("No database initialized");Q("Table creation");let r=Yr(e,t,n),o=k("sp_create_table");b(`SAVEPOINT ${o}`);try{let i=await j();b(r),ge(i,await j()),b(`RELEASE ${o}`)}catch(i){throw B(o,"createTable"),i}}async function ms(e,t=!1){if(!p)throw new Error("No database initialized");let r=p.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0]?.[0];if(typeof r!="string")return null;let o=bt.map(c=>p.exec(c.sql,c.params(e))[0]?.values||[]),{triggers:i,ambiguousTemporaryTriggerNames:a,unqualifiedTemporaryTriggers:s}=Dr(e,o);if(s.length>0){let u=(p.exec("SELECT name FROM pragma.pragma_table_xinfo(?, 'main') ORDER BY cid",[e])[0]?.values??[]).map(f=>{if(typeof f[0]!="string")throw new Error(`SQLite returned invalid view column metadata for ${e}`);return f[0]});for(let f of s){if(i.some(m=>!m.temporary&&Me(m.identifier,f.identifier))){a.push(f.identifier);continue}try{let m=Ct(f.sql,"main",e,u);if(m===void 0){a.push(f.identifier);continue}let y=p.exec(m);Br(y[0]?.values??[],f.identifier)&&i.push({...f,sql:wn(f.sql,f.identifier)})}catch{a.push(f.identifier)}}}let l,d;try{l=Ur(r),d=En(r)}catch(c){if(!t)throw c;l=""}return{identifier:e,sql:r,selectSql:l,columnListSql:d,triggers:i,...a.length>0?{ambiguousTemporaryTriggerNames:a}:{}}}async function ps(e,t=!1){let n=await ms(e,t);if(!n)throw new Error(`View not found: ${e}`);return n}async function nn(e){return ps(e,!1)}function j(){return jr({queryRows:async(e,t)=>p.exec(e,v(t))[0]?.values??[],compileStatements:async e=>e.map(t=>{try{Je(t);return}catch(n){return oe(n)}})})}function gs(e,t){let r=p.exec("SELECT sql FROM sqlite_schema WHERE type = 'view' AND name = ?",[e])[0]?.values?.[0];qr(e,r!==void 0,t);let o=r?.[0];return{storedSql:o,columnListSql:typeof o=="string"?En(o):void 0}}function Q(e){if(H)throw new Error(`${e} is unavailable because the database is read-only`)}async function _c(e,t,n="edit"){if(W(e,"View name"),!p)throw new Error("No database initialized");if(H)throw new Error("View validation is unavailable because the database is read-only");let r=pe(t),{storedSql:o,columnListSql:i}=gs(e,n),a=k("sp_validate_view");b(`SAVEPOINT ${a}`);try{let s=await j();typeof o=="string"&&b(`DROP VIEW ${J(e)}`),b(tt(e,r,i)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),ge(s,await j()),b(`ROLLBACK TO ${a}`),b(`RELEASE ${a}`)}catch(s){throw B(a,"validateViewDefinition"),s}}async function $c(e,t,n=50,r="edit",o){if(W(e,"View name"),!p)throw new Error("No database initialized");let i=pe(t),a=Math.max(1,Math.min(100,Math.trunc(n)||50)),{storedSql:s,columnListSql:l}=gs(e,r);if(H){let c=w(e);return or(l?`WITH ${c} ${l} AS (${i} ) SELECT * FROM ${c} LIMIT ${a}`:`WITH ${c} AS (${i} -) SELECT * FROM ${c} LIMIT ${a}`,o)}let d=k("sp_preview_view");b(`SAVEPOINT ${d}`);try{let c=await j();typeof s=="string"&&b(`DROP VIEW ${J(e)}`),b(tt(e,i,l)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),ge(c,await j());let u=or(`SELECT * FROM ${J(e)} LIMIT ${a}`,o);return b(`ROLLBACK TO ${d}`),b(`RELEASE ${d}`),u}catch(c){throw B(d,"previewViewDefinition"),c}}async function $c(e,t){if(W(e,"View name"),!p)throw new Error("No database initialized");Q("View creation");let n=pe(t),r=k("sp_create_view");b(`SAVEPOINT ${r}`);try{let o=await j();b(tt(e,n)),Je(`EXPLAIN SELECT * FROM ${J(e)}`);let i=await nn(e);return ge(o,await j()),b(`RELEASE ${r}`),i}catch(o){throw B(r,"createView"),o}}async function Oc(e,t,n=!0,r,o){if(!p)throw new Error("No database initialized");Q("View editing");let i=pe(t),a=k("sp_edit_view");b(`SAVEPOINT ${a}`);try{let s=await nn(e);Rt(s),It(r,s.sql,o,s.triggers);let l=await j();if(b(`DROP VIEW ${J(e)}`),b(tt(e,i,s.columnListSql,s.columns)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),n){let u=(p.exec(`PRAGMA main.table_info(${w(e)})`)[0]?.values??[]).map(f=>{if(typeof f[1]!="string")throw new Error(`SQLite returned invalid column metadata for view ${e}`);return f[1]});Vr(s.triggers,u);for(let f of s.triggers)b(Sn(f))}let d=await nn(e);return ge(l,await j()),b(`RELEASE ${a}`),{before:s,after:d}}catch(s){throw B(a,"editView"),s}}async function Lc(e,t,n){if(!p)throw new Error("No database initialized");Q("View deletion");let r=k("sp_drop_view");b(`SAVEPOINT ${r}`);try{let o=await ps(e,!0);Rt(o),It(t,o.sql,n,o.triggers);let i=await j();return b(`DROP VIEW ${J(e)}`),ge(i,await j()),b(`RELEASE ${r}`),o}catch(o){throw B(r,"dropView"),o}}async function Qe(e,t,n){Q("View history replay");let r=k("sp_restore_view");b(`SAVEPOINT ${r}`);try{let o=await ms(e,!0);o&&Rt(o),Fr(t,o);let i=await j();if(o&&b(`DROP VIEW ${J(e)}`),n){b(n.sql),Je(`EXPLAIN SELECT * FROM ${J(n.identifier)}`);for(let a of n.triggers)b(Sn(a))}ge(i,await j()),b(`RELEASE ${r}`)}catch(o){throw B(r,"restoreViewDefinition"),o}}function sn(){let e=p.exec("SELECT changes()",void 0,{useBigInt:!0})[0]?.values?.[0]?.[0],t=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(t)||t<0)throw new Error("SQLite returned an invalid changes() count");return t}async function mr(e,t){if(!Array.isArray(t)||t.length===0)throw new K;t.forEach(pt);let n=await te(e),r=k("sp_history_delete_rows");b(`SAVEPOINT ${r}`);try{Le("DELETE",e);for(let o of t){let i=U(o.rowId,n),a=Mn(o,G);if(p.run(`DELETE FROM ${N(e)} WHERE (${i.sql}) AND (${a.sql})`,v([...i.params,...a.params])),sn()!==1)throw new Ce(e)}b(`RELEASE ${r}`)}catch(o){throw B(r,"deleteRowHistorySnapshots"),o}}async function pr(e,t){if(!Array.isArray(t)||t.length===0)throw new K;let n=await te(e),r=t.map(i=>({snapshot:i,states:pt(i),writes:ri(i,G)})),o=k("sp_history_restore_rows");b(`SAVEPOINT ${o}`);try{for(let i of r){Le("INSERT",e,i.states.map(l=>l.column));let a=U(i.snapshot.rowId,n);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE ${a.sql} LIMIT 1`,v(a.params))[0]?.values.length??0)!==0)throw new Ce(e)}for(let i of r){let a=i.writes.map(f=>f.column),s=i.writes.map(f=>f.write.sql),l=i.writes.flatMap(f=>f.write.params);if(n.kind==="rowid"&&!a.some(f=>f.toLowerCase()==="rowid")&&(a.unshift("rowid"),s.unshift(G(i.snapshot.rowId)),l.unshift(i.snapshot.rowId)),p.run(`INSERT INTO ${N(e)} (${a.map(w).join(", ")}) VALUES (${s.join(", ")})`,v(l)),sn()!==1)throw new Ce(e);let d=U(i.snapshot.rowId,n),c=Mn(i.snapshot,G);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE (${d.sql}) AND (${c.sql}) LIMIT 2`,v([...d.params,...c.params]))[0]?.values.length??0)!==1)throw new Ce(e)}b(`RELEASE ${o}`)}catch(i){throw B(o,"restoreRowHistorySnapshots"),i}}function vc(e){let t=e.affectedCells??(e.targetRowId!==void 0&&e.targetColumn?[{rowId:e.targetRowId,newRowId:e.newTargetRowId,columnName:e.targetColumn,newValue:e.newValue,operation:e.operation,priorState:e.priorState,postState:e.postState}]:[]);if(t.length===0)throw new ft;return t.map(n=>(mt(n.priorState),mt(n.postState),n))}async function ys(e,t,n){if(t.undoPolicy==="barrier")throw new Error("Forward-only cell history barriers cannot be replayed");let r=vc(t),o=r.some(c=>Z(c.rowId));if(o&&!r.every(c=>Z(c.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let i=await te(e);if(o&&i.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);if(!o&&i.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let a=ve(),s=new Map;for(let c of r){let u=s.get(c.rowId)??[];if(u.some(f=>Me(f.columnName,c.columnName)))throw new Error(`Cell history for ${e} contains the same column more than once`);u.push(c),s.set(c.rowId,u)}let l=[...s.entries()];n==="undo"&&r.some(c=>c.newRowId!==void 0&&c.newRowId!==c.rowId)&&l.reverse();let d=k("sp_replay_cell_history");b(`SAVEPOINT ${d}`);try{Et(e,r.map(c=>c.columnName),i.kind==="rowid");for(let[c,u]of l){if(new Set(u.map(E=>E.newRowId??E.rowId)).size!==1)throw new Error(`Cell history for ${e} has inconsistent post-update identities`);let m=u[0].newRowId??c,y=n==="undo"?m:c,g=n==="undo"?c:m,h=U(y,i),C=u.map(E=>ee(E.columnName)),T=p.exec(`SELECT ${C.join(", ")} FROM ${N(e)} WHERE ${h.sql} LIMIT 2`,v(h.params),{useBigInt:!0})[0];if((T?.values.length??0)!==1)throw new se(e,u.map(E=>E.columnName));let I=u.map((E,O)=>V(T.values[0][O*2],T.values[0][O*2+1],`${e}.${E.columnName}`,{textEncoding:a})),x=u.map((E,O)=>{let q=n==="undo"?E.postState:E.priorState,Y=n==="undo"?E.priorState:E.postState,X=I[O];if(E.operation!=="json_patch"){if(!Dn(X,q))throw new se(e,[E.columnName]);return Y}if(X.storageClass!==q.storageClass||E.newValue===void 0)throw new se(e,[E.columnName]);let le=ti(X.value,E.newValue,E.priorState.value,E.postState.value,n);if(le.kind==="conflict")throw new se(e,[E.columnName]);return Object.is(le.value,Y.value)?Y:V("text",le.value,`${e}.${E.columnName} JSON replay`)}),S=x.map(E=>zt(E,G)),R=I.map((E,O)=>Qt(u[O].columnName,E,G));if(p.run(`UPDATE ${N(e)} SET ${u.map((E,O)=>`${w(E.columnName)} = ${S[O].sql}`).join(", ")} WHERE ${h.sql} AND `+R.map(E=>`(${E.sql})`).join(" AND "),v([...S.flatMap(E=>E.params),...h.params,...R.flatMap(E=>E.params)])),sn()!==1)throw new se(e,u.map(E=>E.columnName));let _=U(g,i),A=p.exec(`SELECT ${C.join(", ")} FROM ${N(e)} WHERE ${_.sql} LIMIT 2`,v(_.params),{useBigInt:!0})[0];if((A?.values.length??0)!==1)throw new se(e,u.map(E=>E.columnName));if(!x.every((E,O)=>Dn(E,V(A.values[0][O*2],A.values[0][O*2+1],`${e}.${u[O].columnName}`,{textEncoding:a}))))throw new se(e,u.map(E=>E.columnName))}b(`RELEASE ${d}`)}catch(c){throw B(d,"replayCellHistory"),c}}async function Pc(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,newTargetRowId:s,targetColumn:l,priorValue:d,newValue:c,operation:u,deletedRows:f,insertedRow:m}=e;if(n)switch(t){case"cell_update":await ys(n,e,"undo");return;case"row_insert":if(e.importedRows){await mr(n,ds(e.importedRows).reverse());return}if(!m||a===void 0)throw new K;if(typeof m.rowId!=typeof a||String(m.rowId)!==String(a))throw new K;await mr(n,[m]);return;case"row_delete":{if(!f||f.length===0)throw new K;await pr(n,f);return}case"view_create":if(o)await Qe(n,o,null);else throw new Error("Cannot undo view_create: missing view definition");return;case"view_edit":if(r&&o)await Qe(n,o,r);else throw new Error("Cannot undo view_edit: missing view definition");return;case"view_drop":if(r)await Qe(n,null,r);else throw new Error("Cannot undo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be undone: this operation is recorded as a history barrier, not a replayable change`)}}async function kc(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,targetColumn:s,newValue:l,operation:d,rowData:c,affectedRowIds:u,insertedRow:f,deletedRows:m}=e;if(n)switch(t){case"cell_update":await ys(n,e,"redo");return;case"row_insert":{if(e.importedRows){await pr(n,ds(e.importedRows));return}if(!f)throw new K;await pr(n,[f]);return}case"row_delete":if(!m||m.length===0)throw new K;await mr(n,m);return;case"view_create":if(o)await Qe(n,null,o);else throw new Error("Cannot redo view_create: missing view definition");return;case"view_edit":if(r&&o)await Qe(n,r,o);else throw new Error("Cannot redo view_edit: missing view definition");return;case"view_drop":if(r)await Qe(n,r,null);else throw new Error("Cannot redo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be redone: this operation is recorded as a history barrier, not a replayable change`)}}function Bc(e,t){let n=new Map;for(let r of t){W(r.column,"Column name");let o;Z(r.rowId)?(bo(r.rowId),o=`primary-key:${r.rowId}`):o=`rowid:${String(M(r.rowId))}`;let i=n.get(o)??[];if(i.some(a=>Me(a,r.column)))throw new Error(`Batch update for ${e} contains a duplicate row identity/column target: ${String(r.rowId)} / ${r.column}`);i.push(r.column),n.set(o,i)}}async function hs(e,t,n,r,o){if(t.forEach(c=>Ae(c.rowId)),!p)throw new Error("No database initialized");if(Q("Batch cell updates"),t.length===0)return[];Bc(e,t);let i=o===yr,a=i?0:je(t.map(c=>c.value),r),s=ve();if(t.some(c=>Z(c.rowId))){if(!t.every(f=>Z(f.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let c=await te(e);if(c.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let u=k("sp_update_pk_batch");b(`SAVEPOINT ${u}`);try{if(Et(e,t.map(y=>y.column),!1),!i&&r!==void 0)for(let y of t){let g=await en({table:e,rowId:y.rowId,column:y.column});if((g.storageClass==="text"||g.storageClass==="blob")&&g.byteLength>a)throw new Fe(e,y.column,g.storageClass,g.byteLength,a)}let f=new Map;for(let y of t){let g=f.get(y.rowId)??[];g.push(y),f.set(y.rowId,g)}let m=[];for(let[y,g]of f){let h=U(y,c),C=[...new Set(g.map(E=>E.column))];if(C.length!==g.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let T=p.exec(`SELECT ${C.map(ee).join(", ")} FROM ${N(e)} WHERE ${h.sql} LIMIT 2`,v(h.params),{useBigInt:!0})[0];if((T?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let I=g.map((E,O)=>{let q=V(T.values[0][O*2],T.values[0][O*2+1],`${e}.${E.column}`,{textEncoding:s}),Y=q.value,X=Kt(E.value,Y,E.operation??"set"),le=X.operation==="json_patch"?ur(Y,X.value):X.value;return!i&&X.operation==="json_patch"&&He(le,a),{update:E,priorValue:Y,priorState:q,prepared:X,storedValue:le}}),x=I.map(({update:E,storedValue:O})=>`${w(E.column)} = ${G(O)}`).join(", ");if(p.run(`UPDATE ${N(e)} SET ${x} WHERE ${h.sql}`,v([...I.map(E=>E.storedValue),...h.params])),sn()!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let S=[];for(let E of I)c.columns.findIndex(q=>q.identifier===E.update.column)>=0&&S.push({column:E.update.column,value:E.storedValue});let R=_n(y,c,S),_=on(e,c,U(R,c),cr(e)),A=U(_,c),L=p.exec(`SELECT ${C.map(ee).join(", ")} FROM ${N(e)} WHERE ${A.sql} LIMIT 2`,v(A.params),{useBigInt:!0})[0];if((L?.values.length??0)!==1)throw cr(e);for(let[E,O]of I.entries())m.push({rowId:y,newRowId:_,columnName:O.update.column,priorValue:O.priorValue,newValue:O.prepared.value,priorState:O.priorState,postState:V(L.values[0][E*2],L.values[0][E*2+1],`${e}.${O.update.column}`,{textEncoding:s}),operation:O.prepared.operation})}return b(`RELEASE ${u}`),m}catch(f){throw B(u,"updatePrimaryKeyCellBatch"),f}}if((await te(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let d=k("sp_update_cell_batch");b(`SAVEPOINT ${d}`);try{if(!i&&r!==void 0)for(let S of t){let R=await en({table:e,rowId:S.rowId,column:S.column});if((R.storageClass==="text"||R.storageClass==="blob")&&R.byteLength>a)throw new Fe(e,S.column,R.storageClass,R.byteLength,a)}let c=wr(e);if(Et(e,t.map(S=>S.column)),c!==void 0&&t.some(S=>Me(S.column,c))){let S=ec(e,c,t,a,i);return b(`RELEASE ${d}`),S}let u=[...new Set(t.map(S=>M(S.rowId)))],f=[...new Set(t.map(S=>S.column))],m=N(e),y=new Map,g=qe(u,{kind:"rowid"});for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT), ${f.map(ee).join(", ")} FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[]){let A=new Map;f.forEach((L,E)=>A.set(L,V(_[E*2+1],_[E*2+2],`${e}.${L}`,{textEncoding:s}))),y.set(String(M(_[0])),A)}}let h=[],C=t.map(S=>{let R=M(S.rowId),_=y.get(String(R));if(!_)throw new Error(`Cannot update ${e}.${S.column}: row ${S.rowId} no longer exists`);let A=_.get(S.column);if(!A)throw new Error(`Cannot update ${e}.${S.column}: cell state is unavailable`);let L=A.value,E=Kt(S.value,L,S.operation??"set");if(!i&&E.operation==="json_patch"){let O=ur(L,E.value);He(O,a)}return h.push({rowId:R,columnName:S.column,priorValue:L,newValue:E.value,priorState:A,operation:E.operation}),{...S,rowId:R,value:E.value,operation:E.operation}});for(let S of C){let R=w(S.column),A=S.operation==="json_patch"?`UPDATE ${m} SET ${R} = json_patch(COALESCE(${R}, '{}'), ?) WHERE rowid = ?`:`UPDATE ${m} SET ${R} = ${G(S.value)} WHERE rowid = ?`;p.run(A,v([S.value,S.rowId]))}let T=new Set;for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT) FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[])T.add(String(M(_[0])))}if(u.some(S=>!T.has(String(S))))throw st(e);let I=new Map;for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT), ${f.map(ee).join(", ")} FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[]){let A=new Map;f.forEach((L,E)=>A.set(L,V(_[E*2+1],_[E*2+2],`${e}.${L}`,{textEncoding:s}))),I.set(String(M(_[0])),A)}}let x=h.map(S=>{let R=I.get(String(S.rowId))?.get(S.columnName);if(!R)throw st(e);return{...S,postState:R}});return b(`RELEASE ${d}`),x}catch(c){throw B(d,"updateCellBatch"),c}}async function Dc(e,t,n,r){if(W(e,"Table name"),W(t,"Column name"),!p)throw new Error("No database initialized");Q("Column creation"),ul(n);let o=`ALTER TABLE ${N(e)} ADD COLUMN ${w(t)} ${n}`;r!=null&&r!==""&&(o+=` DEFAULT ${dl(r)}`);let i=k("sp_add_column");b(`SAVEPOINT ${i}`);try{let a=await j();b(o),ge(a,await j()),b(`RELEASE ${i}`)}catch(a){throw B(i,"addColumn"),a}}async function Mc(){if(!p)return!1;try{return p.exec("SELECT 1"),!0}catch{return!1}}async function Uc(){throw new Error("Reload must be handled by the demo host so it can reinitialize from the original database source")}var ji={initializeDatabase:Rl,runQuery:Nl,runConsole:ql,executeReadQuery:_l,getCellMetadata:en,openCellReadSession:yl,readCellChunk:hl,closeCellReadSession:El,exportDatabase:Wl,exportTable:Fl,fetchTableData:tc,fetchTableCount:nc,fetchSchema:rc,getTableInfo:br,getImportTarget:oc,getPragmas:ac,setPragma:lc,updateCell:cc,replaceOversizedCell:uc,insertRow:dc,insertRowWithHistory:fc,importRows:Ec,deleteRows:bc,findDependentIndexes:fs,deleteColumns:Rc,createTable:Ac,getViewDefinition:nn,validateViewDefinition:Nc,previewViewDefinition:_c,createView:$c,editView:Oc,dropView:Lc,undoModification:Pc,redoModification:kc,updateCellBatch:hs,addColumn:Dc,ping:Mc,refreshFile:Uc};self.onmessage=async e=>{let t=e.data;if(!t||t.channel!=="rpc"||!t.content){console.warn("[Worker] Invalid message format",{valueType:t===null?"null":Array.isArray(t)?"array":typeof t,hasRpcChannel:t?.channel==="rpc",hasContent:!!t?.content});return}let{kind:n,messageId:r,targetMethod:o,payload:i}=t.content;if(n!=="invoke")return;if(typeof r!="string"||r.length===0||r.length>256){console.warn("[Worker] Invalid RPC correlation ID");return}let s=typeof o=="string"&&Object.prototype.hasOwnProperty.call(ji,o)?ji[o]:void 0;if(typeof s!="function"){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:`Unknown method: ${typeof o=="string"?o.slice(0,256):""}`}});return}if(!Array.isArray(i)){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:"Worker RPC payload must be an array"}});return}try{wl(o);let l=await s(...i),d={channel:"rpc",content:{kind:"response",messageId:r,success:!0,data:l}};if(o==="exportDatabase"&&l instanceof Uint8Array){let c=l.byteOffset===0&&l.byteLength===l.buffer.byteLength&&l.buffer instanceof ArrayBuffer?l:l.slice();d.content.data=c,self.postMessage(d,[c.buffer])}else self.postMessage(d)}catch(l){let d=oe(l);console.error("[Worker] Method error:",o,d);let c;try{c=Ti(l)}catch{}self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:d,...c?{error:c}:{}}})}};})(); +) SELECT * FROM ${c} LIMIT ${a}`,o)}let d=k("sp_preview_view");b(`SAVEPOINT ${d}`);try{let c=await j();typeof s=="string"&&b(`DROP VIEW ${J(e)}`),b(tt(e,i,l)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),ge(c,await j());let u=or(`SELECT * FROM ${J(e)} LIMIT ${a}`,o);return b(`ROLLBACK TO ${d}`),b(`RELEASE ${d}`),u}catch(c){throw B(d,"previewViewDefinition"),c}}async function Oc(e,t){if(W(e,"View name"),!p)throw new Error("No database initialized");Q("View creation");let n=pe(t),r=k("sp_create_view");b(`SAVEPOINT ${r}`);try{let o=await j();b(tt(e,n)),Je(`EXPLAIN SELECT * FROM ${J(e)}`);let i=await nn(e);return ge(o,await j()),b(`RELEASE ${r}`),i}catch(o){throw B(r,"createView"),o}}async function Lc(e,t,n=!0,r,o){if(!p)throw new Error("No database initialized");Q("View editing");let i=pe(t),a=k("sp_edit_view");b(`SAVEPOINT ${a}`);try{let s=await nn(e);Rt(s),It(r,s.sql,o,s.triggers);let l=await j();if(b(`DROP VIEW ${J(e)}`),b(tt(e,i,s.columnListSql,s.columns)),Je(`EXPLAIN SELECT * FROM ${J(e)}`),n){let u=(p.exec(`PRAGMA main.table_info(${w(e)})`)[0]?.values??[]).map(f=>{if(typeof f[1]!="string")throw new Error(`SQLite returned invalid column metadata for view ${e}`);return f[1]});Vr(s.triggers,u);for(let f of s.triggers)b(Sn(f))}let d=await nn(e);return ge(l,await j()),b(`RELEASE ${a}`),{before:s,after:d}}catch(s){throw B(a,"editView"),s}}async function vc(e,t,n){if(!p)throw new Error("No database initialized");Q("View deletion");let r=k("sp_drop_view");b(`SAVEPOINT ${r}`);try{let o=await ps(e,!0);Rt(o),It(t,o.sql,n,o.triggers);let i=await j();return b(`DROP VIEW ${J(e)}`),ge(i,await j()),b(`RELEASE ${r}`),o}catch(o){throw B(r,"dropView"),o}}async function Qe(e,t,n){Q("View history replay");let r=k("sp_restore_view");b(`SAVEPOINT ${r}`);try{let o=await ms(e,!0);o&&Rt(o),Fr(t,o);let i=await j();if(o&&b(`DROP VIEW ${J(e)}`),n){b(n.sql),Je(`EXPLAIN SELECT * FROM ${J(n.identifier)}`);for(let a of n.triggers)b(Sn(a))}ge(i,await j()),b(`RELEASE ${r}`)}catch(o){throw B(r,"restoreViewDefinition"),o}}function sn(){let e=p.exec("SELECT changes()",void 0,{useBigInt:!0})[0]?.values?.[0]?.[0],t=typeof e=="bigint"?Number(e):e;if(!Number.isSafeInteger(t)||t<0)throw new Error("SQLite returned an invalid changes() count");return t}async function mr(e,t){if(!Array.isArray(t)||t.length===0)throw new K;t.forEach(pt);let n=await te(e),r=k("sp_history_delete_rows");b(`SAVEPOINT ${r}`);try{Le("DELETE",e);for(let o of t){let i=U(o.rowId,n),a=Mn(o,G);if(p.run(`DELETE FROM ${N(e)} WHERE (${i.sql}) AND (${a.sql})`,v([...i.params,...a.params])),sn()!==1)throw new Ce(e)}b(`RELEASE ${r}`)}catch(o){throw B(r,"deleteRowHistorySnapshots"),o}}async function pr(e,t){if(!Array.isArray(t)||t.length===0)throw new K;let n=await te(e),r=t.map(i=>({snapshot:i,states:pt(i),writes:ri(i,G)})),o=k("sp_history_restore_rows");b(`SAVEPOINT ${o}`);try{for(let i of r){Le("INSERT",e,i.states.map(l=>l.column));let a=U(i.snapshot.rowId,n);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE ${a.sql} LIMIT 1`,v(a.params))[0]?.values.length??0)!==0)throw new Ce(e)}for(let i of r){let a=i.writes.map(f=>f.column),s=i.writes.map(f=>f.write.sql),l=i.writes.flatMap(f=>f.write.params);if(n.kind==="rowid"&&!a.some(f=>f.toLowerCase()==="rowid")&&(a.unshift("rowid"),s.unshift(G(i.snapshot.rowId)),l.unshift(i.snapshot.rowId)),p.run(`INSERT INTO ${N(e)} (${a.map(w).join(", ")}) VALUES (${s.join(", ")})`,v(l)),sn()!==1)throw new Ce(e);let d=U(i.snapshot.rowId,n),c=Mn(i.snapshot,G);if((p.exec(`SELECT 1 FROM ${N(e)} WHERE (${d.sql}) AND (${c.sql}) LIMIT 2`,v([...d.params,...c.params]))[0]?.values.length??0)!==1)throw new Ce(e)}b(`RELEASE ${o}`)}catch(i){throw B(o,"restoreRowHistorySnapshots"),i}}function Pc(e){let t=e.affectedCells??(e.targetRowId!==void 0&&e.targetColumn?[{rowId:e.targetRowId,newRowId:e.newTargetRowId,columnName:e.targetColumn,newValue:e.newValue,operation:e.operation,priorState:e.priorState,postState:e.postState}]:[]);if(t.length===0)throw new ft;return t.map(n=>(mt(n.priorState),mt(n.postState),n))}async function ys(e,t,n){if(t.undoPolicy==="barrier")throw new Error("Forward-only cell history barriers cannot be replayed");let r=Pc(t),o=r.some(c=>Z(c.rowId));if(o&&!r.every(c=>Z(c.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let i=await te(e);if(o&&i.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);if(!o&&i.kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let a=ve(),s=new Map;for(let c of r){let u=s.get(c.rowId)??[];if(u.some(f=>Me(f.columnName,c.columnName)))throw new Error(`Cell history for ${e} contains the same column more than once`);u.push(c),s.set(c.rowId,u)}let l=[...s.entries()];n==="undo"&&r.some(c=>c.newRowId!==void 0&&c.newRowId!==c.rowId)&&l.reverse();let d=k("sp_replay_cell_history");b(`SAVEPOINT ${d}`);try{Et(e,r.map(c=>c.columnName),i.kind==="rowid");for(let[c,u]of l){if(new Set(u.map(E=>E.newRowId??E.rowId)).size!==1)throw new Error(`Cell history for ${e} has inconsistent post-update identities`);let m=u[0].newRowId??c,y=n==="undo"?m:c,g=n==="undo"?c:m,h=U(y,i),C=u.map(E=>ee(E.columnName)),T=p.exec(`SELECT ${C.join(", ")} FROM ${N(e)} WHERE ${h.sql} LIMIT 2`,v(h.params),{useBigInt:!0})[0];if((T?.values.length??0)!==1)throw new se(e,u.map(E=>E.columnName));let I=u.map((E,O)=>V(T.values[0][O*2],T.values[0][O*2+1],`${e}.${E.columnName}`,{textEncoding:a})),x=u.map((E,O)=>{let q=n==="undo"?E.postState:E.priorState,Y=n==="undo"?E.priorState:E.postState,X=I[O];if(E.operation!=="json_patch"){if(!Dn(X,q))throw new se(e,[E.columnName]);return Y}if(X.storageClass!==q.storageClass||E.newValue===void 0)throw new se(e,[E.columnName]);let le=ti(X.value,E.newValue,E.priorState.value,E.postState.value,n);if(le.kind==="conflict")throw new se(e,[E.columnName]);return Object.is(le.value,Y.value)?Y:V("text",le.value,`${e}.${E.columnName} JSON replay`)}),S=x.map(E=>zt(E,G)),R=I.map((E,O)=>Qt(u[O].columnName,E,G));if(p.run(`UPDATE ${N(e)} SET ${u.map((E,O)=>`${w(E.columnName)} = ${S[O].sql}`).join(", ")} WHERE ${h.sql} AND `+R.map(E=>`(${E.sql})`).join(" AND "),v([...S.flatMap(E=>E.params),...h.params,...R.flatMap(E=>E.params)])),sn()!==1)throw new se(e,u.map(E=>E.columnName));let _=U(g,i),A=p.exec(`SELECT ${C.join(", ")} FROM ${N(e)} WHERE ${_.sql} LIMIT 2`,v(_.params),{useBigInt:!0})[0];if((A?.values.length??0)!==1)throw new se(e,u.map(E=>E.columnName));if(!x.every((E,O)=>Dn(E,V(A.values[0][O*2],A.values[0][O*2+1],`${e}.${u[O].columnName}`,{textEncoding:a}))))throw new se(e,u.map(E=>E.columnName))}b(`RELEASE ${d}`)}catch(c){throw B(d,"replayCellHistory"),c}}async function kc(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,newTargetRowId:s,targetColumn:l,priorValue:d,newValue:c,operation:u,deletedRows:f,insertedRow:m}=e;if(n)switch(t){case"cell_update":await ys(n,e,"undo");return;case"row_insert":if(e.importedRows){await mr(n,ds(e.importedRows).reverse());return}if(!m||a===void 0)throw new K;if(typeof m.rowId!=typeof a||String(m.rowId)!==String(a))throw new K;await mr(n,[m]);return;case"row_delete":{if(!f||f.length===0)throw new K;await pr(n,f);return}case"view_create":if(o)await Qe(n,o,null);else throw new Error("Cannot undo view_create: missing view definition");return;case"view_edit":if(r&&o)await Qe(n,o,r);else throw new Error("Cannot undo view_edit: missing view definition");return;case"view_drop":if(r)await Qe(n,null,r);else throw new Error("Cannot undo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be undone: this operation is recorded as a history barrier, not a replayable change`)}}async function Bc(e){let{modificationType:t,targetTable:n,viewDefBefore:r,viewDefAfter:o,affectedCells:i,targetRowId:a,targetColumn:s,newValue:l,operation:d,rowData:c,affectedRowIds:u,insertedRow:f,deletedRows:m}=e;if(n)switch(t){case"cell_update":await ys(n,e,"redo");return;case"row_insert":{if(e.importedRows){await pr(n,ds(e.importedRows));return}if(!f)throw new K;await pr(n,[f]);return}case"row_delete":if(!m||m.length===0)throw new K;await mr(n,m);return;case"view_create":if(o)await Qe(n,null,o);else throw new Error("Cannot redo view_create: missing view definition");return;case"view_edit":if(r&&o)await Qe(n,r,o);else throw new Error("Cannot redo view_edit: missing view definition");return;case"view_drop":if(r)await Qe(n,r,null);else throw new Error("Cannot redo view_drop: missing view definition");return;default:throw new Error(`${String(t)} cannot be redone: this operation is recorded as a history barrier, not a replayable change`)}}function Dc(e,t){let n=new Map;for(let r of t){W(r.column,"Column name");let o;Z(r.rowId)?(bo(r.rowId),o=`primary-key:${r.rowId}`):o=`rowid:${String(M(r.rowId))}`;let i=n.get(o)??[];if(i.some(a=>Me(a,r.column)))throw new Error(`Batch update for ${e} contains a duplicate row identity/column target: ${String(r.rowId)} / ${r.column}`);i.push(r.column),n.set(o,i)}}async function hs(e,t,n,r,o){if(t.forEach(c=>Ae(c.rowId)),!p)throw new Error("No database initialized");if(Q("Batch cell updates"),t.length===0)return[];Dc(e,t);let i=o===yr,a=i?0:je(t.map(c=>c.value),r),s=ve();if(t.some(c=>Z(c.rowId))){if(!t.every(f=>Z(f.rowId)))throw new Error("Cannot mix rowid and primary-key row identities");let c=await te(e);if(c.kind!=="primaryKey")throw new Error(`Primary-key identity cannot target rowid table ${e}`);let u=k("sp_update_pk_batch");b(`SAVEPOINT ${u}`);try{if(Et(e,t.map(y=>y.column),!1),!i&&r!==void 0)for(let y of t){let g=await en({table:e,rowId:y.rowId,column:y.column});if((g.storageClass==="text"||g.storageClass==="blob")&&g.byteLength>a)throw new Fe(e,y.column,g.storageClass,g.byteLength,a)}let f=new Map;for(let y of t){let g=f.get(y.rowId)??[];g.push(y),f.set(y.rowId,g)}let m=[];for(let[y,g]of f){let h=U(y,c),C=[...new Set(g.map(E=>E.column))];if(C.length!==g.length)throw new Error(`Batch update for ${e} contains the same column more than once`);let T=p.exec(`SELECT ${C.map(ee).join(", ")} FROM ${N(e)} WHERE ${h.sql} LIMIT 2`,v(h.params),{useBigInt:!0})[0];if((T?.values.length??0)!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let I=g.map((E,O)=>{let q=V(T.values[0][O*2],T.values[0][O*2+1],`${e}.${E.column}`,{textEncoding:s}),Y=q.value,X=Kt(E.value,Y,E.operation??"set"),le=X.operation==="json_patch"?ur(Y,X.value):X.value;return!i&&X.operation==="json_patch"&&He(le,a),{update:E,priorValue:Y,priorState:q,prepared:X,storedValue:le}}),x=I.map(({update:E,storedValue:O})=>`${w(E.column)} = ${G(O)}`).join(", ");if(p.run(`UPDATE ${N(e)} SET ${x} WHERE ${h.sql}`,v([...I.map(E=>E.storedValue),...h.params])),sn()!==1)throw new Error(`Cannot update ${e}: row identity no longer exists`);let S=[];for(let E of I)c.columns.findIndex(q=>q.identifier===E.update.column)>=0&&S.push({column:E.update.column,value:E.storedValue});let R=_n(y,c,S),_=on(e,c,U(R,c),cr(e)),A=U(_,c),L=p.exec(`SELECT ${C.map(ee).join(", ")} FROM ${N(e)} WHERE ${A.sql} LIMIT 2`,v(A.params),{useBigInt:!0})[0];if((L?.values.length??0)!==1)throw cr(e);for(let[E,O]of I.entries())m.push({rowId:y,newRowId:_,columnName:O.update.column,priorValue:O.priorValue,newValue:O.prepared.value,priorState:O.priorState,postState:V(L.values[0][E*2],L.values[0][E*2+1],`${e}.${O.update.column}`,{textEncoding:s}),operation:O.prepared.operation})}return b(`RELEASE ${u}`),m}catch(f){throw B(u,"updatePrimaryKeyCellBatch"),f}}if((await te(e)).kind!=="rowid")throw new Error(`Rowid identity cannot target WITHOUT ROWID table ${e}`);let d=k("sp_update_cell_batch");b(`SAVEPOINT ${d}`);try{if(!i&&r!==void 0)for(let S of t){let R=await en({table:e,rowId:S.rowId,column:S.column});if((R.storageClass==="text"||R.storageClass==="blob")&&R.byteLength>a)throw new Fe(e,S.column,R.storageClass,R.byteLength,a)}let c=wr(e);if(Et(e,t.map(S=>S.column)),c!==void 0&&t.some(S=>Me(S.column,c))){let S=tc(e,c,t,a,i);return b(`RELEASE ${d}`),S}let u=[...new Set(t.map(S=>M(S.rowId)))],f=[...new Set(t.map(S=>S.column))],m=N(e),y=new Map,g=qe(u,{kind:"rowid"});for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT), ${f.map(ee).join(", ")} FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[]){let A=new Map;f.forEach((L,E)=>A.set(L,V(_[E*2+1],_[E*2+2],`${e}.${L}`,{textEncoding:s}))),y.set(String(M(_[0])),A)}}let h=[],C=t.map(S=>{let R=M(S.rowId),_=y.get(String(R));if(!_)throw new Error(`Cannot update ${e}.${S.column}: row ${S.rowId} no longer exists`);let A=_.get(S.column);if(!A)throw new Error(`Cannot update ${e}.${S.column}: cell state is unavailable`);let L=A.value,E=Kt(S.value,L,S.operation??"set");if(!i&&E.operation==="json_patch"){let O=ur(L,E.value);He(O,a)}return h.push({rowId:R,columnName:S.column,priorValue:L,newValue:E.value,priorState:A,operation:E.operation}),{...S,rowId:R,value:E.value,operation:E.operation}});for(let S of C){let R=w(S.column),A=S.operation==="json_patch"?`UPDATE ${m} SET ${R} = json_patch(COALESCE(${R}, '{}'), ?) WHERE rowid = ?`:`UPDATE ${m} SET ${R} = ${G(S.value)} WHERE rowid = ?`;p.run(A,v([S.value,S.rowId]))}let T=new Set;for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT) FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[])T.add(String(M(_[0])))}if(u.some(S=>!T.has(String(S))))throw st(e);let I=new Map;for(let S of g){let R=p.exec(`SELECT CAST(rowid AS TEXT), ${f.map(ee).join(", ")} FROM ${m} WHERE ${S.sql}`,v(S.params),{useBigInt:!0})[0];for(let _ of R?.values??[]){let A=new Map;f.forEach((L,E)=>A.set(L,V(_[E*2+1],_[E*2+2],`${e}.${L}`,{textEncoding:s}))),I.set(String(M(_[0])),A)}}let x=h.map(S=>{let R=I.get(String(S.rowId))?.get(S.columnName);if(!R)throw st(e);return{...S,postState:R}});return b(`RELEASE ${d}`),x}catch(c){throw B(d,"updateCellBatch"),c}}async function Mc(e,t,n,r){if(W(e,"Table name"),W(t,"Column name"),!p)throw new Error("No database initialized");Q("Column creation"),dl(n);let o=`ALTER TABLE ${N(e)} ADD COLUMN ${w(t)} ${n}`;r!=null&&r!==""&&(o+=` DEFAULT ${fl(r)}`);let i=k("sp_add_column");b(`SAVEPOINT ${i}`);try{let a=await j();b(o),ge(a,await j()),b(`RELEASE ${i}`)}catch(a){throw B(i,"addColumn"),a}}async function Uc(){if(!p)return!1;try{return p.exec("SELECT 1"),!0}catch{return!1}}async function Vc(){throw new Error("Reload must be handled by the demo host so it can reinitialize from the original database source")}var ji={initializeDatabase:Il,runQuery:_l,runConsole:Wl,executeReadQuery:$l,getCellMetadata:en,openCellReadSession:hl,readCellChunk:El,closeCellReadSession:wl,exportDatabase:Fl,exportTable:Hl,fetchTableData:nc,fetchTableCount:rc,fetchSchema:oc,getTableInfo:br,getImportTarget:ic,getPragmas:lc,setPragma:cc,updateCell:uc,replaceOversizedCell:dc,insertRow:fc,insertRowWithHistory:mc,importRows:wc,deleteRows:Tc,findDependentIndexes:fs,deleteColumns:Ic,createTable:Nc,getViewDefinition:nn,validateViewDefinition:_c,previewViewDefinition:$c,createView:Oc,editView:Lc,dropView:vc,undoModification:kc,redoModification:Bc,updateCellBatch:hs,addColumn:Mc,ping:Uc,refreshFile:Vc};self.onmessage=async e=>{let t=e.data;if(!t||t.channel!=="rpc"||!t.content){console.warn("[Worker] Invalid message format",{valueType:t===null?"null":Array.isArray(t)?"array":typeof t,hasRpcChannel:t?.channel==="rpc",hasContent:!!t?.content});return}let{kind:n,messageId:r,targetMethod:o,payload:i}=t.content;if(n!=="invoke")return;if(typeof r!="string"||r.length===0||r.length>256){console.warn("[Worker] Invalid RPC correlation ID");return}let s=typeof o=="string"&&Object.prototype.hasOwnProperty.call(ji,o)?ji[o]:void 0;if(typeof s!="function"){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:`Unknown method: ${typeof o=="string"?o.slice(0,256):""}`}});return}if(!Array.isArray(i)){self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:"Worker RPC payload must be an array"}});return}try{Sl(o);let l=await s(...i),d={channel:"rpc",content:{kind:"response",messageId:r,success:!0,data:l}};if(o==="exportDatabase"&&l instanceof Uint8Array){let c=l.byteOffset===0&&l.byteLength===l.buffer.byteLength&&l.buffer instanceof ArrayBuffer?l:l.slice();d.content.data=c,self.postMessage(d,[c.buffer])}else self.postMessage(d)}catch(l){let d=oe(l);console.error("[Worker] Method error:",o,d);let c;try{c=Ti(l)}catch{}self.postMessage({channel:"rpc",content:{kind:"response",messageId:r,success:!1,errorMessage:d,...c?{error:c}:{}}})}};})();