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 e20f98c..b89e20e 100755 Binary files a/viewer-dist/native/tjs and b/viewer-dist/native/tjs differ 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}:{}}})}};})();