@loro-dev/flock-sqlite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @loro-dev/flock-sqlite
2
+
3
+ SQLite-backed implementation of the Flock CRDT surface. This package mirrors the TypeScript bindings while persisting state through [`unisqlite`](../unisqlite) and stays wire-compatible with the MoonBit-backed bindings.
4
+
5
+ ```ts
6
+ import { Flock } from "@loro-dev/flock-sqlite";
7
+
8
+ const flock = await Flock.open({ path: "flock.db" });
9
+ await flock.put(["doc", 1], { title: "hello" });
10
+ const bundle = await flock.exportJson();
11
+
12
+ const replica = await Flock.fromJson({ path: "replica.db", bundle });
13
+ console.log(await replica.get(["doc", 1])); // { title: "hello" }
14
+ await flock.close();
15
+ await replica.close();
16
+ ```
17
+
18
+ See `prd/003-flock-sqlite.md` for the intended semantics (memcomparable keys, export/import, digest, and cross-platform SQLite adapters).
19
+
20
+ ### Runtime peers
21
+
22
+ This adapter relies on `unisqlite` platform drivers. Install the matching peers for your environment:
23
+
24
+ - Node: `better-sqlite3`
25
+ - Browser: `broadcast-channel` and `@sqlite.org/sqlite-wasm` (when loading WASM from npm/CDN)
26
+ - Cloudflare Workers: no extra peers required
package/dist/index.cjs ADDED
@@ -0,0 +1,27 @@
1
+ let e=require(`@loro-dev/unisqlite`);const t=16,n=17,r=18,i=32,a=33,o=34,s=35,c=36,l=37,u=new TextEncoder;function ee(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function te(e){let t=BigInt(e),n=[];do{let e=Number(t&127n);t>>=7n,t!==0n&&(e|=128),n.push(e)}while(t!==0n);return new Uint8Array(n)}function ne(e){let t=BigInt(e),n=[],r=!0;for(;r;){let e=Number(t&127n);t>>=7n;let i=(e&64)!=0;t===0n&&!i||t===-1n&&i?r=!1:e|=128,n.push(e)}return new Uint8Array(n)}async function re(e){let t=typeof crypto<`u`?crypto:void 0;if(t?.subtle){let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=await t.subtle.digest(`SHA-256`,n);return new Uint8Array(r)}try{let{createHash:t}=await import(`crypto`),n=t(`sha256`);return n.update(e),new Uint8Array(n.digest())}catch{throw Error(`No crypto implementation available for digest`)}}var ie=class{chunks=[];writeTag(e){this.chunks.push(e&255)}writeBool(e){this.chunks.push(e?1:0)}writeBytes(e){this.writeLen(e.length);for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeRawBytes(e){for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeLen(e){this.writeRawBytes(te(e))}writeI64(e){this.writeRawBytes(ne(e))}writeF64(e){let t=new DataView(new ArrayBuffer(8));t.setFloat64(0,e,!1);let n=new Uint8Array(t.buffer);this.writeRawBytes(n)}writeString(e){this.writeBytes(u.encode(e))}writeJson(e){if(e===null){this.writeTag(32);return}if(typeof e==`boolean`){this.writeTag(33),this.writeBool(e);return}if(typeof e==`number`){this.writeTag(34),this.writeF64(e);return}if(typeof e==`string`){this.writeTag(35),this.writeString(e);return}if(Array.isArray(e)){this.writeTag(36),this.writeLen(e.length);for(let t of e)this.writeJson(t);return}if(e&&typeof e==`object`){let t=Object.entries(e).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeTag(37),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n);return}throw TypeError(`Unsupported JSON value in digest`)}writeRawValue(e){if(this.writeTag(16),e.data===void 0?this.writeBool(!1):(this.writeBool(!0),this.writeJson(e.data)),this.writeTag(18),!e.metadata||typeof e.metadata!=`object`)this.writeBool(!1);else{let t=Object.entries(e.metadata).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeBool(!0),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n)}this.writeTag(17),this.writeF64(e.clock.physicalTime),this.writeI64(Math.trunc(e.clock.logicalCounter)),this.writeBytes(u.encode(e.clock.peerId))}async finish(){return re(new Uint8Array(this.chunks))}};function ae(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function oe(e){if(e!=null)return JSON.parse(e)}async function se(e){let t=oe(e.data);if(t===void 0)return null;let n=ae(e.metadata),r=new ie;return r.writeBytes(e.key),r.writeRawValue({data:t,metadata:n,clock:{physicalTime:Number(e.physical),logicalCounter:Number(e.logical),peerId:String(e.peer)}}),r.finish()}async function ce(e){let t=new Uint8Array(32);for(let n of e){let e=await se(n);if(e)for(let n=0;n<t.length;n+=1)t[n]^=e[n]}return ee(t)}const le={hi:2146959360,lo:1};var ue=class extends Error{};function d(){throw new ue}const de=(e,t)=>e<t?-1:e>t?1:0,fe=(e,t)=>e===t,f=e=>BigInt(e.hi)*4294967296n+BigInt(e.lo>>>0),pe=e=>-e,me=(e,t)=>e+t,he=(e,t)=>e*t,ge=(e,t)=>e/t,_e=(e,t)=>e%t,ve=(e,t)=>e>>BigInt(t),ye=e=>Number(BigInt.asUintN(32,e))|0,be=e=>Number(BigInt.asIntN(32,e));function p(e,t){if(t<0||t>=e.length)throw Error(`Index out of bounds`)}const xe=(e,t)=>e.toString(t);function m(e,t){let n=new Uint8Array(e);return t!==0&&n.fill(t),n}const h=(e,t)=>{e.push(t)},Se={$tag:0};function Ce(e){this._0=e}Ce.prototype.$tag=1;function we(e){this._0=e}we.prototype.$tag=2;function Te(e){this._0=e}Te.prototype.$tag=3;function Ee(e){this._0=e}Ee.prototype.$tag=4;const De=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setUint32(0,t.hi),n.setUint32(4,t.lo),n.getFloat64(0)},Oe=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setFloat64(0,t),{hi:n.getInt32(0),lo:n.getInt32(4)}},ke=e=>e.hi*4294967296+(e.lo>>>0),Ae=e=>{if(isNaN(e))return{hi:0,lo:0};if(e>=0x8000000000000000)return{hi:2147483647,lo:4294967295};if(e<=-0x8000000000000000)return{hi:-2147483648,lo:0};let t=!1;e<0&&(t=!0,e=-e);let n=1/4294967296*e|0,r=e>>>0;return t&&(r===0?n=~n+1:(n=~n,r=~r+1)),{hi:n,lo:r}},je=new Uint8Array,g={hi:0,lo:255},_={hi:0,lo:0},Me={hi:-1,lo:-1},Ne={hi:-2147483648,lo:0};function Pe(e){this._0=e}Pe.prototype.$tag=0;function Fe(e){this._0=e}Fe.prototype.$tag=1;function v(e){this._0=e}v.prototype.$tag=2;const y={$tag:1},Ie={$tag:0},Le={hi:0,lo:1},Re={hi:0,lo:256};function b(e){this._0=e}b.prototype.$tag=0;function x(e){this._0=e}x.prototype.$tag=1;function ze(e){this._0=e}ze.prototype.$tag=0;function Be(e){this._0=e}Be.prototype.$tag=1;function S(e){this._0=e}S.prototype.$tag=0;function C(e){this._0=e}C.prototype.$tag=1;function w(e){this._0=e}w.prototype.$tag=2;function T(e){this._0=e}T.prototype.$tag=3;const Ve={$tag:4},He={$tag:5};function Ue(e){this._0=e}Ue.prototype.$tag=0;function We(e){this._0=e}We.prototype.$tag=1;function Ge(e){this._0=e}Ge.prototype.$tag=0;function Ke(e){this._0=e}Ke.prototype.$tag=1;function qe(e){this._0=e}qe.prototype.$tag=2;const Je={$tag:3},Ye={$tag:4},Xe=`;`,Ze=1,Qe=3,$e=4,et=Wt(le);function tt(e){return d()}function nt(e){return d()}function rt(e){return d()}function E(e){d()}function it(e){return d()}function at(e){return Ut(e)}function ot(e,t){if(e.end-e.start|0){let n=e.buf[e.start],r=e.buf,i=1+e.start|0,a={buf:r,start:i,end:e.end},o=M(n),s=o.end-o.start|0,c=a.end-a.start|0,l=0;for(;;){let e=l;if(e<c){let n=r[i+e|0],a=s,o=M(n);s=a+((o.end-o.start|0)+(t.end-t.start|0)|0)|0,l=e+1|0;continue}else break}s<<=1;let u=St(s);if(P(u,o.str,o.start,o.end-o.start|0),Dt(t.str,0,t.start,t.end)){let e=a.end-a.start|0,t=0;for(;;){let n=t;if(n<e){let e=r[i+n|0],a=M(e);P(u,a.str,a.start,a.end-a.start|0),t=n+1|0;continue}else break}}else{let e=a.end-a.start|0,n=0;for(;;){let a=n;if(a<e){let e=r[i+a|0],o=M(e);P(u,t.str,t.start,t.end-t.start|0),P(u,o.str,o.start,o.end-o.start|0),n=a+1|0;continue}else break}}return u.val}else return``}function st(e,t){t(t=>(Nt(e,t),1))}function ct(e,t){return ot({buf:e,start:0,end:e.length},t)}function lt(e,t){return de(e,t)}function ut(e,t){return fe(e,t)}function dt(e){return pe(e)}function ft(e,t){return me(e,t)}function pt(e,t){return he(e,t)}function mt(e,t){return ge(e,t)}function ht(e,t){return _e(e,t)}function gt(e,t){return t<0&&E(`negative shift count`),ve(e,t)}function _t(e){let t=ye(gt(e,32)),n=ye(e);return $t(en(at(t),32),at(n))}function D(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.bytes,r=e.start+t|0;return p(n,r),n[r]}else return rt(`index out of bounds: the len is from 0 to ${N(e.end-e.start|0)} but the index is ${N(t)}`)}function O(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e,start:a,end:i}:nt(`Invalid index for View`)}function k(e,t,n){let r=e.end-e.start|0,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e.bytes,start:e.start+a|0,end:(e.start+a|0)+(i-a|0)|0}:nt(`Invalid index for View`)}function vt(e){return t=>{let n=e.end-e.start|0,r=0;for(;;){let i=r;if(i<n){if(t(D(e,i))!==1)return 0;r=i+1|0;continue}else return 1}}}function yt(e){let t={val:0},n=e.end-e.start|0;return()=>{if(t.val<n){let n=t.val,r=e.bytes,i=e.start+n|0;p(r,i);let a=r[i];return t.val=t.val+1|0,a}else return-1}}function A(e){return cn(e.end-e.start|0,t=>dn(e,t))}function bt(e){let t=It(e);return A({buf:t,start:0,end:t.length})}function j(e){return Ut(e)}function M(e){return{str:e,start:0,end:e.length}}function xt(e,t,n,r,i){if(e===n&&t<r){let a=0;for(;;){let o=a;if(o<i){let i=t+o|0,s=r+o|0;p(n,s),p(e,i),e[i]=n[s],a=o+1|0;continue}else return}}else{let a=i-1|0;for(;;){let i=a;if(i>=0){let o=t+i|0,s=r+i|0;p(n,s),p(e,o),e[o]=n[s],a=i-1|0;continue}else return}}}function St(e){return{val:``}}function Ct(e,t){let n=e;n.val=`${n.val}${String.fromCodePoint(t)}`}function wt(e,t){let n=e;n.val=`${n.val}${t}`}function Tt(e,t){return lt(e,t)>0}function N(e){let t=St(0);return Rt(e,{self:t,method_0:wt,method_1:P,method_2:Ct}),t.val}function Et(e,t){return xe(e,t)}function Dt(e,t,n,r){let i;i=r===void 0?e.length:r;let a=n,o=0;for(;;){let n=a,r=o;if(n<i&&r<t){let t=e.charCodeAt(n);if(55296<=t&&t<=56319&&(n+1|0)<i){let t=n+1|0,i=e.charCodeAt(t);if(56320<=i&&i<=57343){a=n+2|0,o=r+1|0;continue}else E(`invalid surrogate pair`)}a=n+1|0,o=r+1|0;continue}else return r===t&&n===i}}function Ot(e,t,n){let r=e.length,i;return i=n===void 0?r:n,t>=0&&t<=i&&i<=r?e.substring(t,i):d()}function P(e,t,n,r){let i=e;i.val=`${i.val}${Ot(t,n,n+r|0)}`}function kt(e){return[]}function At(e){return[]}function F(e){return[]}function jt(e,t){h(e,t)}function Mt(e,t){h(e,t)}function I(e,t){h(e,t)}function L(e,t){h(e,t)}function Nt(e,t){h(e,t)}function Pt(e){return String.fromCodePoint(e)}function Ft(e,t){let n={val:Se};e(e=>(t(e),1));let r=n.val;switch(r.$tag){case 0:return;case 1:r._0;return;case 2:return r._0;case 3:d();return;default:d();return}}function It(e){let t=[];return Ft(e,e=>{I(t,e)}),t}function Lt(e){return e()}function Rt(e,t){t.method_0(t.self,Et(e,10))}function zt(e){return t=>{let n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];if(t(n)!==1)return 0;r=i+1|0;continue}else return 1}}}function Bt(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{buf:e,start:a,end:i}:it(`View index out of bounds`)}function Vt(e){return{hi:0,lo:e}}function Ht(e){return Vt(e)}function Ut(e){return Ht(e)}function Wt(e){return De(e)}function Gt(e){return{hi:e>>31&-1,lo:e|0}}function Kt(e){return Gt(e)}function qt(e){return e.lo}function R(e){return qt(e)&255}function Jt(e,t){return{hi:e.hi&t.hi,lo:e.lo&t.lo}}function Yt(e,t){return{hi:e.hi|t.hi,lo:e.lo|t.lo}}function Xt(e,t){return{hi:e.hi^t.hi,lo:e.lo^t.lo}}function Zt(e,t){let n=t&63;if(n===0)return e;if(n<32){let t=e.hi,r=e.lo,i=t,a=r;return{hi:i<<n|a>>>(32-n|0)|0,lo:a<<n}}else return{hi:e.lo<<(n-32|0),lo:0}}function Qt(e,t){let n=t&63;return n===0?e:n<32?{hi:e.hi>>>n|0,lo:e.lo>>>n|e.hi<<(32-n|0)}:{hi:0,lo:e.hi>>>(n-32|0)|0}}function $t(e,t){return Yt(e,t)}function en(e,t){return Zt(e,t)}function tn(e){return ke(e)}function nn(e){return tn(e)}function rn(e){return De(e)}function an(e){return Oe(e)}function on(e,t){let n=e,r=t;return n.hi===r.hi&&n.lo===r.lo}function z(e,t){return Jt(e,t)}function B(e,t){return Yt(e,t)}function V(e,t){return Xt(e,t)}function H(e,t){return Zt(e,t)}function U(e,t){return Qt(e,t)}function sn(e){return Ae(e)}function cn(e,t){if(e<=0)return je;let n=m(e,t(0)),r=1;for(;;){let i=r;if(i<e){p(n,i),n[i]=t(i),r=i+1|0;continue}else break}return n}function ln(e){console.log(e)}function un(e,t,n,r,i){let a=(t+i|0)-1|0,o=(r+i|0)-1|0,s=e.length,c=n.length;if(i>=0&&t>=0&&a<s&&r>=0&&o<c){xt(e,t,n,r,i);return}else{d();return}}function dn(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.buf,r=e.start+t|0;return p(n,r),n[r]}else return rt(`index out of bounds: the len is from 0 to ${N(e.end-e.start|0)} but the index is ${N(t)}`)}function fn(e){let t=e.length,n=Array(t),r=0;for(;;){let i=r;if(i<t){n[i]=e[(t-i|0)-1|0],r=i+1|0;continue}else break}return n}function pn(e,t){let n=e.data.length<=0?1:e.data.length,r,i=n;for(;;){let e=i;if(e>=t){r=e;break}i=Math.imul(e,2)|0}if(r!==e.data.length){let t=m(r,0);xt(t,0,e.data,0,e.len),e.data=t;return}else return}function W(e,t){pn(e,e.len+1|0);let n=e.data,r=e.len;p(n,r),n[r]=t,e.len=e.len+1|0}function G(e){return A(Bt(e.data,0,e.len))}function K(e){return{data:m(e<1?1:e,0),len:0}}function mn(e,t){let n=t.length;pn(e,e.len+n|0),un(e.data,e.len,t,0,n),e.len=e.len+n|0}function hn(e){switch(e){case 0:return`40`;case 1:return`41`;case 2:return`42`;case 3:return`43`;case 4:return`44`;case 5:return`45`;case 6:return`46`;case 7:return`47`;default:return`49`}}function gn(e){switch(e){case 0:return`30`;case 1:return`31`;case 2:return`32`;case 3:return`33`;case 4:return`34`;case 5:return`35`;case 6:return`36`;case 7:return`37`;default:return`39`}}function _n(e){let t=[],n=e.color;n===void 0||L(t,gn(n));let r=e.bg_color;r===void 0||L(t,hn(r));let i=e.formats,a=i.length,o=0;for(;;){let e=o;if(e<a){switch(i[e]){case 0:L(t,`1`);break;case 1:L(t,`4`);break;case 2:L(t,`5`);break;case 3:L(t,`7`);break;case 4:L(t,`8`);break;case 5:L(t,`9`);break;default:L(t,`3`)}o=e+1|0;continue}else break}return t.length>0?`[${ct(t,{str:`;`,start:0,end:1})}m${e.str}[0m`:e.str}function vn(e){return{str:e,bg_color:void 0,color:void 0,formats:[]}}function yn(e){return{str:e.str,bg_color:e.bg_color,color:1,formats:e.formats}}function bn(e){return{str:e.str,bg_color:e.bg_color,color:3,formats:e.formats}}function xn(e){return{str:e.str,bg_color:e.bg_color,color:4,formats:e.formats}}function Sn(e){let t=e.str,n=e.bg_color,r=e.color,i=[];return Nt(i,0),st(i,zt(e.formats)),{str:t,bg_color:n,color:r,formats:i}}function Cn(e,t){let n=`${_n(yn(Sn(vn(`Panic: `))))}${_n(bn(vn(e)))} at ${_n(xn(vn(t)))}`;ln(n),E(n)}function wn(e){let t=F(0),n=0;for(;n<e.length;){let r=n;p(e,r);let i=e.charCodeAt(r);if(i>=55296&&i<=56319&&(n+1|0)<e.length){let r=n+1|0;p(e,r);let a=e.charCodeAt(r);if(a>=56320&&a<=57343){let e=(65536+(i-55296<<10)|0)+(a-56320|0)|0;I(t,(240|e>>18)&255),I(t,(128|e>>12&63)&255),I(t,(128|e>>6&63)&255),I(t,(128|e&63)&255),n=n+1|0}else I(t,(224|i>>12)&255),I(t,(128|i>>6&63)&255),I(t,(128|i&63)&255)}else i<128?I(t,i&255):i<2048?(I(t,(192|i>>6)&255),I(t,(128|i&63)&255)):(I(t,(224|i>>12)&255),I(t,(128|i>>6&63)&255),I(t,(128|i&63)&255));n=n+1|0}return A({buf:t,start:0,end:t.length})}function Tn(e){return{bytes:wn(e)}}function En(e){let t=0;for(;t<(e.end-e.start|0);){let n=D(e,t);if(!(n&128))t=t+1|0;else if((n&224)==192){if((t+1|0)>=(e.end-e.start|0)||(D(e,t+1|0)&192)!=128)return!1;t=t+2|0}else if((n&240)==224){if((t+2|0)>=(e.end-e.start|0))return!1;let n=D(e,t+1|0),r=D(e,t+2|0),i;if(i=(n&192)==128?(r&192)!=128:!0,i)return!1;t=t+3|0}else if((n&248)==240){if((t+3|0)>=(e.end-e.start|0))return!1;let n=D(e,t+1|0),r=D(e,t+2|0),i=D(e,t+3|0),a;if((n&192)!=128)a=!0;else{let e;e=(r&192)==128?(i&192)!=128:!0,a=e}if(a)return!1;t=t+4|0}else return!1}return!0}function Dn(e){if(En(k(e,0,void 0)))return{bytes:bt(vt(e))}}function On(e){let t=0,n=``;for(;t<e.length;){let r=t;p(e,r);let i=e[r],a;if(!(i&128))a=i;else if((i&224)==192){if((t+1|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n];if((r&192)!=128)return;t=t+1|0,a=(i&31)<<6|r&63}else if((i&240)==224){if((t+2|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c;if(c=(r&192)==128?(s&192)!=128:!0,c)return;t=t+2|0,a=(i&15)<<12|(r&63)<<6|s&63}else if((i&248)==240){if((t+3|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c=t+3|0;p(e,c);let l=e[c],u;if((r&192)!=128)u=!0;else{let e;e=(s&192)==128?(l&192)!=128:!0,u=e}if(u)return;t=t+3|0,a=(i&7)<<18|(r&63)<<12|(s&63)<<6|l&63}else return;n=`${n}${Pt(a)}`,t=t+1|0}return n}function kn(e){let t=On(e.bytes);return t===void 0?d():t}function An(e){return an(e)}function jn(e){return rn(e)}function Mn(e){let t=F(0);return I(t,R(z(U(e,56),g))),I(t,R(z(U(e,48),g))),I(t,R(z(U(e,40),g))),I(t,R(z(U(e,32),g))),I(t,R(z(U(e,24),g))),I(t,R(z(U(e,16),g))),I(t,R(z(U(e,8),g))),I(t,R(z(e,g))),A({buf:t,start:0,end:t.length})}function Nn(e){e.length!==8&&Cn(`Invalid byte array length`,`/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54`);let t=_,n=t;p(e,0),t=B(n,H(j(e[0]),56));let r=t;p(e,1),t=B(r,H(j(e[1]),48));let i=t;p(e,2),t=B(i,H(j(e[2]),40));let a=t;p(e,3),t=B(a,H(j(e[3]),32));let o=t;p(e,4),t=B(o,H(j(e[4]),24));let s=t;p(e,5),t=B(s,H(j(e[5]),16));let c=t;p(e,6),t=B(c,H(j(e[6]),8));let l=t;return p(e,7),t=B(l,j(e[7])),t}function Pn(){return{parts:At(0)}}function q(e,t){jt(e.parts,t)}function Fn(e){return e===e?e:e<0?-et:et}function In(e,t){W(t,1);let n=yt(e);for(;;){let e=Lt(n);if(e===-1)break;{let n=e;W(t,n),n===0&&W(t,255);continue}}W(t,0)}function Ln(e,t){W(t,2);let n=e.bytes,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];W(t,r),r===0&&W(t,255),i=e+1|0;continue}else break}W(t,0)}function Rn(e,t){W(t,33);let n=Fn(e),r=Mn(n<0?V(An(n),Me):V(An(n),Ne)),i=r.length,a=0;for(;;){let e=a;if(e<i){let n=r[e];W(t,n),a=e+1|0;continue}else return}}function zn(e){let t=[],n=e;for(;Tt(n,0n);)I(t,be(ht(n,256n))&255),n=mt(n,256n);let r=fn(t);return A({buf:r,start:0,end:r.length})}function Bn(e,t){if(ut(e,0n)){W(t,20);return}let n=Tt(e,0n),r=zn(n?e:dt(e)),i=r.length;if(n===!1){i<=8?W(t,(20-(i&255)|0)&255):(W(t,11),i>255&&E(`n is too large`),W(t,(i&255^255)&255));let e=K(0),n=0;for(;;){let t=n;if(t<r.length){p(r,t);let i=r[t];W(e,(i^255)&255),n=t+1|0;continue}else break}mn(t,G(e));return}else{i<=8?W(t,(20+(i&255)|0)&255):(W(t,29),i>255&&E(`n is too large`),W(t,i&255)),mn(t,r);return}}function Vn(e,t){switch(e.$tag){case 0:{let n=e._0;In(O(n,0,n.length),t);return}case 1:{let n=e._0;Ln(n,t);return}case 2:{let n=e._0;Bn(n,t);return}case 3:{let n=e._0;Rn(n,t);return}case 4:W(t,38);return;default:W(t,39);return}}function Hn(e){let t=K(0),n=e.parts,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];Vn(r,t),i=e+1|0;continue}else break}return G(t)}function Un(e,t){let n=K(0),r=t;for(;r<(e.end-e.start|0);){let t=D(e,r);if(r=r+1|0,t===0){let t;if(t=r<(e.end-e.start|0)?D(e,r)===255:!1,t){W(n,0),r=r+1|0;continue}else{let e=G(n);return new Fe({_0:O(e,0,e.length),_1:r})}}W(n,t)}return new Pe(y)}function J(e){let t=f(_),n=f(Le),r=(e.end-e.start|0)-1|0;for(;;){let i=r;if(i>=0){let a=f(Kt(D(e,i)));t=ft(t,pt(n,a)),n=pt(n,f(Re)),r=i-1|0;continue}else break}return t}function Wn(e,t){let n;if(n=20<=t?t<=28:!1,n){let n=(t-20|0)&255;if((e.end-e.start|0)<n)return new b(y);let r=k(e,0,n);return new x({_0:k(e,n,void 0),_1:J(r)})}else{let n;if(n=12<=t?t<20:!1,n){let n=(20-t|0)&255;if((e.end-e.start|0)<n)return new b(y);let r=k(e,0,n),i=k(e,n,void 0),a=K(0),o=0;for(;;){let e=o;if(e<(r.end-r.start|0)){W(a,(D(r,e)^255)&255),o=e+1|0;continue}else break}let s=G(a);return new x({_0:i,_1:dt(J(O(s,0,s.length)))})}else if(t===11){if((e.end-e.start|0)<1)return new b(y);let t=(D(e,0)^255)&255;if((e.end-e.start|0)<(t+1|0))return new b(y);let n=k(e,1,t+1|0),r=k(e,t+1|0,void 0),i=K(0),a=0;for(;;){let e=a;if(e<(n.end-n.start|0)){W(i,(D(n,e)^255)&255),a=e+1|0;continue}else break}let o=G(i);return new x({_0:r,_1:dt(J(O(o,0,o.length)))})}else if(t===29){if((e.end-e.start|0)<1)return new b(y);let t=D(e,0);if((e.end-e.start|0)<(t+1|0))return new b(y);let n=k(e,1,t+1|0);return new x({_0:k(e,t+1|0,void 0),_1:J(n)})}else return new b(new v(t))}}function Gn(e,t){if((t+8|0)>(e.end-e.start|0))return new ze(y);let n=F(0),r=0;for(;;){let i=r;if(i<8){I(n,D(e,t+i|0)),r=i+1|0;continue}else break}let i=Nn(A({buf:n,start:0,end:n.length}));return new Be({_0:on(z(i,Ne),_)?jn(V(i,Me)):jn(V(i,Ne)),_1:t+8|0})}function Kn(e){let t=Pn(),n=0;for(;n<(e.end-e.start|0);){let r=D(e,n);if(n=n+1|0,r===2){let r=Un(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1,s=Dn(a);if(s===void 0)return new Ue(Ie);q(t,new C(s)),n=o}else if(r===1){let r=Un(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;q(t,new S(bt(vt(a)))),n=o}else if(r>=11&&r<=29){let i=Wn(k(e,n,void 0),r),a;if(i.$tag===1)a=i._0;else return i;let o=a._0,s=a._1;q(t,new w(s)),n=(e.end-e.start|0)-(o.end-o.start|0)|0}else if(r===33){let r=Gn(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;q(t,new T(a)),n=o}else if(r===38)q(t,Ve);else if(r===39)q(t,He);else return new Ue(new v(r))}return new We(t)}function qn(e){switch(e.$tag){case 0:{let t=e._0;return new qe(t)}case 1:{let t=e._0;return new Ke(kn(t))}case 2:{let t=e._0;return new Ge(nn(_t(t)))}case 3:{let t=e._0;return new Ge(t)}case 4:return Ye;default:return Je}}function Jn(e){switch(e.$tag){case 2:{let t=e._0;return new S(t)}case 1:{let t=e._0;return new C(Tn(t))}case 0:{let t=e._0;return nn(sn(t))===t?new w(f(sn(t))):new T(t)}case 3:return He;default:return Ve}}function Yn(e){let t=Pn(),n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];jt(t.parts,Jn(n)),r=i+1|0;continue}else break}return Hn(t)}function Xn(e){let t;_L:{_L$2:{let n=Kn(O(e,0,e.length));if(n.$tag===1)t=n._0;else{n._0;break _L$2}break _L}t=tt(`Failed to decode key`)}let n=kt(0),r=t.parts,i=r.length,a=0;for(;;){let e=a;if(e<i){let t=r[e];Mt(n,qn(t)),a=e+1|0;continue}else break}return n}function Zn(e){if(typeof e==`number`){if(!Number.isFinite(e))throw TypeError(`Key parts must be finite numbers`);return{$tag:0,_0:e}}if(typeof e==`string`)return{$tag:1,_0:e};if(e===!0)return{$tag:3};if(e===!1)return{$tag:4};throw TypeError(`Key parts must be strings, numbers, or booleans`)}function Qn(e){if(e instanceof Uint8Array)return e;if(e&&typeof e==`object`){let t=e.buf;if(t instanceof Uint8Array){let n=e.start??0,r=e.end??t.length;return t.subarray(n,r)}}throw TypeError(`Invalid bytes payload in memcomparable decode`)}function $n(e){switch(e?.$tag){case 0:return e._0;case 1:return e._0;case 3:return!0;case 4:return!1;case 2:return Qn(e._0);default:throw TypeError(`Unsupported memcomparable key part`)}}function Y(e){return Yn(e.map(Zn))}function er(e){return Xn(e).map(e=>$n(e))}function tr(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1)if(e[r]!==t[r])return e[r]<t[r]?-1:1;return e.length===t.length?0:e.length<t.length?-1:1}function nr(e){if(e.length===0)return;let t=Array.from(e);for(let e=t.length-1;e>=0;--e){let n=t[e];if(n<255)return t[e]=n+1,new Uint8Array(t.slice(0,e+1))}}function rr(e){return JSON.stringify(e)}const ir=new TextEncoder,ar=globalThis.structuredClone;function or(e){return ir.encode(e).length}function sr(e){return typeof e==`string`&&or(e)<128}function cr(){let e=new Uint8Array(32),t=typeof crypto<`u`?crypto:void 0;if(t?.getRandomValues)t.getRandomValues(e);else if(t?.randomBytes){let n=t.randomBytes(32);e.set(n)}else for(let t=0;t<32;t+=1)e[t]=Math.floor(Math.random()*256);return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function lr(e){if(e===void 0)return cr();if(!sr(e))throw TypeError(`peerId must be a UTF-8 string under 128 bytes`);return e}function X(e){return e===void 0?e:ar?ar(e):JSON.parse(JSON.stringify(e))}function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return X(e)}function ur(e,t){if(!(!t||typeof t!=`object`)){if(`data`in t){let n=t.data;e.data=n===void 0?void 0:X(n)}`metadata`in t&&(e.metadata=Z(t.metadata))}}function Q(e){let t={};return ur(t,e),t}function dr(e,t){let n=Q(e);return ur(n,t),n}function $(e,t){let n={c:vr(e)};t.data!==void 0&&(n.d=X(t.data));let r=Z(t.metadata);return r!==void 0&&(n.m=r),n}function fr(e){return!e||typeof e!=`object`?{accept:!0}:`accept`in e?e.accept?{accept:!0}:{accept:!1,reason:e.reason??`rejected`}:{accept:!0}}function pr(e){return typeof e==`object`&&!!e&&(Object.prototype.hasOwnProperty.call(e,`hooks`)||Object.prototype.hasOwnProperty.call(e,`from`)||Object.prototype.hasOwnProperty.call(e,`pruneTombstonesBefore`)||Object.prototype.hasOwnProperty.call(e,`peerId`))}function mr(e){return typeof e==`object`&&!!e&&Object.prototype.hasOwnProperty.call(e,`bundle`)}function hr(e){if(e)try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}}function gr(e){if(e!=null)return JSON.parse(e)}function _r(e){let t=e.split(`,`);if(t.length<3)return{physicalTime:0,logicalCounter:0,peerId:``};let n=Number(t[0]),r=Number(t[1]),i=t.slice(2).join(`,`);return{physicalTime:Number.isFinite(n)?n:0,logicalCounter:Number.isFinite(r)?Math.trunc(r):0,peerId:sr(i)?i:``}}function vr(e){return`${e.physicalTime},${e.logicalCounter},${e.peerId}`}function yr(e,t){return e.physicalTime===t.physicalTime?e.logicalCounter===t.logicalCounter?e.peerId===t.peerId?0:e.peerId>t.peerId?1:-1:e.logicalCounter>t.logicalCounter?1:-1:e.physicalTime>t.physicalTime?1:-1}function br(e){if(!e)return;let{physicalTime:t,logicalCounter:n}=e;if(!(!Number.isFinite(t)||!Number.isFinite(n)))return{physicalTime:t,logicalCounter:Math.trunc(n)}}function xr(e,t){if(t.length===0)return!0;if(e.length<t.length)return!1;for(let n=0;n<t.length;n+=1)if(e[n]!==t[n])return!1;return!0}async function Sr(e){return e.map(e=>({key:e.key,data:e.data,metadata:e.metadata,physical:e.physical,logical:e.logical,peer:e.peer}))}function Cr(e){if(!e)return``;if(typeof e!=`string`)throw TypeError(`tablePrefix must be a string`);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw TypeError(`tablePrefix must start with a letter/underscore and use only letters, digits, or underscores`);return e}function wr(e){return{kv:`${e}kv`,overridden:`${e}overridden`,meta:`${e}meta`,idxKvPeerClock:`${e}idx_kv_peer_clock_key`,idxOverriddenKey:`${e}idx_overridden_key`,idxOverriddenSupersededAt:`${e}idx_overridden_superseded_at`}}var Tr=class t{db;peerIdValue;vv;maxHlc;listeners;tables;constructor(e,t,n,r,i){this.db=e,this.peerIdValue=t,this.vv=n,this.maxHlc=r,this.listeners=new Set,this.tables=i}static async open(n){let r=n.connection??await(0,e.openStore)({path:n.path}),i=wr(Cr(n.tablePrefix));await t.ensureSchema(r,i);let a=await t.resolvePeerId(r,i,n.peerId),{vv:o,maxHlc:s}=await t.loadVersionState(r,i);return new t(r,a,o,s,i)}static async fromJson(e){let n=await t.open(e);return await n.importJson(e.bundle),n}async close(){await this.db.close()}static async ensureSchema(e,t){await e.exec(`
2
+ CREATE TABLE IF NOT EXISTS ${t.kv} (
3
+ key BLOB PRIMARY KEY,
4
+ data TEXT NULL,
5
+ metadata TEXT NULL,
6
+ physical REAL NOT NULL,
7
+ logical INTEGER NOT NULL,
8
+ peer TEXT NOT NULL
9
+ )`),await e.exec(`
10
+ CREATE TABLE IF NOT EXISTS ${t.overridden} (
11
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
12
+ key BLOB,
13
+ data TEXT NULL,
14
+ metadata TEXT NULL,
15
+ physical REAL NOT NULL,
16
+ logical INTEGER NOT NULL,
17
+ peer TEXT NOT NULL,
18
+ superseded_at INTEGER DEFAULT (unixepoch())
19
+ )`),await e.exec(`CREATE TABLE IF NOT EXISTS ${t.meta} (peer_id TEXT)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxKvPeerClock} ON ${t.kv}(peer, physical, logical, key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenKey} ON ${t.overridden}(key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenSupersededAt} ON ${t.overridden}(superseded_at)`)}static async resolvePeerId(e,t,n){let r=lr(n),i=await e.query(`SELECT peer_id FROM ${t.meta} LIMIT 1`);if(i.length>0&&typeof i[0]?.peer_id==`string`){let a=i[0].peer_id;return n&&a!==r?(await e.run(`UPDATE ${t.meta} SET peer_id = ?`,[r]),r):lr(a)}return await e.exec(`DELETE FROM ${t.meta}`),await e.run(`INSERT INTO ${t.meta}(peer_id) VALUES (?)`,[r]),r}static async loadVersionState(e,t){let n=new Map,r=await e.query(`SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${t.kv} GROUP BY peer`);for(let e of r){if(!e||typeof e.peer!=`string`)continue;let t=br({physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0)});t&&n.set(e.peer,t)}let i=(await e.query(`SELECT physical, logical FROM ${t.kv} ORDER BY physical DESC, logical DESC LIMIT 1`))[0];return{vv:n,maxHlc:i&&Number.isFinite(i.physical)&&Number.isFinite(i.logical)?{physicalTime:Number(i.physical),logicalCounter:Number(i.logical)}:{physicalTime:0,logicalCounter:0}}}bumpVersion(e){let t=this.vv.get(e.peerId);(!t||yr(e,{...t,peerId:e.peerId})>0)&&this.vv.set(e.peerId,{physicalTime:e.physicalTime,logicalCounter:e.logicalCounter}),(this.maxHlc.physicalTime<e.physicalTime||this.maxHlc.physicalTime===e.physicalTime&&this.maxHlc.logicalCounter<e.logicalCounter)&&(this.maxHlc={physicalTime:e.physicalTime,logicalCounter:e.logicalCounter})}allocateClock(e){let t=e??Date.now(),n=this.maxHlc.physicalTime,r=this.maxHlc.logicalCounter;return t>n?(n=t,r=0):r+=1,{physicalTime:n,logicalCounter:r,peerId:this.peerIdValue}}async applyOperation(e){let t=Y(e.key),n=e.clock??this.allocateClock(e.now),r=dr(e.payload,{}),i=r.data===void 0?null:JSON.stringify(r.data),a=r.metadata===void 0?null:JSON.stringify(r.metadata),o=!1;if(await this.db.asyncTransaction(async r=>{let s=await r.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]);if(s.length>0){let o=s[0],c=yr(n,{physicalTime:Number(o.physical??0),logicalCounter:Number(o.logical??0),peerId:String(o.peer??``)}),l=o.data??null,u=o.metadata??null;if(e.skipSameValue&&i===l&&a===u)return;if(c<0){await r.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,i,a,n.physicalTime,n.logicalCounter,n.peerId]);return}if(c>0)await r.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,o.data??null,o.metadata??null,o.physical??0,o.logical??0,o.peer??``]);else return}await r.run(`INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)
20
+ VALUES (?, ?, ?, ?, ?, ?)
21
+ ON CONFLICT(key) DO UPDATE SET
22
+ data=excluded.data,
23
+ metadata=excluded.metadata,
24
+ physical=excluded.physical,
25
+ logical=excluded.logical,
26
+ peer=excluded.peer`,[t,i,a,n.physicalTime,n.logicalCounter,n.peerId]),o=!0}),this.bumpVersion(n),o){let t={key:e.key.slice(),payload:r,source:e.source};e.eventSink?e.eventSink.push(t):this.emitEvents(e.source,[t])}return o}emitEvents(e,t){if(this.listeners.size===0||t.length===0)return;let n={source:e,events:t.map(e=>({key:X(e.key),value:e.payload.data===void 0?void 0:X(e.payload.data),metadata:Z(e.payload.metadata),payload:Q(e.payload)}))};this.listeners.forEach(e=>{e(n)})}async put(e,t,n){await this.applyOperation({key:e,payload:{data:X(t)},now:n,skipSameValue:!0,source:`local`})}async putWithMeta(e,t,n={}){let r={data:X(t)};n.metadata&&(r.metadata=Z(n.metadata));let i=n.hooks?.transform;if(i){let t=Q(r),a=dr(r,await i({key:e.slice(),now:n.now},t)??t);if(a.data===void 0)throw TypeError(`putWithMeta requires a data value`);await this.applyOperation({key:e,payload:a,now:n.now,skipSameValue:!0,source:`local`});return}await this.applyOperation({key:e,payload:r,now:n.now,skipSameValue:!0,source:`local`})}async delete(e,t){await this.applyOperation({key:e,payload:{},now:t,skipSameValue:!0,source:`local`})}async set(e,t,n){await this.put(e,t,n)}async setPeerId(e){let t=lr(e);await this.db.exec(`DELETE FROM ${this.tables.meta}`),await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`,[t]),this.peerIdValue=t}async get(e){let t=Y(e),n=(await this.db.query(`SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]))[0];if(n)return gr(n.data)}async getMvr(e){let t=await this.scan({prefix:e}),n=[];for(let r of t)r.raw.d===!0&&r.key.length===e.length+1&&n.push(r.key[r.key.length-1]);return n}async putMvr(e,t,n){if(t===null||typeof t==`object`)throw TypeError(`putMvr only accepts scalar values`);let r=await this.scan({prefix:e});for(let e of r)e.raw.d===!0&&await this.delete(e.key,n);let i=e.slice();i.push(t),await this.put(i,!0,n)}buildScanBounds(e){let t,n,r,i=e=>{if(!t){t=e;return}let n=tr(e.value,t.value);n>0?t=e:n===0&&(t={value:t.value,inclusive:t.inclusive&&e.inclusive})},a=e=>{if(!n){n=e;return}let t=tr(e.value,n.value);t<0?n=e:t===0&&(n={value:n.value,inclusive:n.inclusive&&e.inclusive})};try{if(e.prefix){let t=Y(e.prefix);r=t,i({value:t,inclusive:!0});let n=nr(t);n&&a({value:n,inclusive:!1})}e.start&&e.start.kind!==`unbounded`&&i({value:Y(e.start.key),inclusive:e.start.kind===`inclusive`}),e.end&&e.end.kind!==`unbounded`&&a({value:Y(e.end.key),inclusive:e.end.kind===`inclusive`})}catch{return{where:[],params:[],empty:!0}}let o=[],s=[];return t&&(o.push(`key ${t.inclusive?`>=`:`>`} ?`),s.push(t.value)),n&&(o.push(`key ${n.inclusive?`<=`:`<`} ?`),s.push(n.value)),{where:o,params:s,postFilter:r?(e=>t=>xr(t,e))(r):void 0}}async scan(e={}){let t=this.buildScanBounds(e);if(t.empty)return[];let n=t.where.length>0?`WHERE ${t.where.join(` AND `)}`:``,r=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${n} ORDER BY key ASC`,t.params),i=[];for(let e of r){let n=e.key;if(t.postFilter&&!t.postFilter(n))continue;let r=er(n),a={physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0),peerId:String(e.peer??``)},o={},s=gr(e.data);s!==void 0&&(o.data=s);let c=hr(e.metadata);c!==void 0&&(o.metadata=c);let l=$(a,o);i.push({key:r,raw:l,value:o.data})}return i}version(){let e={};for(let[t,n]of this.vv.entries())e[t]={...n};return e}peerId(){return this.peerIdValue}getMaxPhysicalTime(){return this.maxHlc.physicalTime}async exportInternal(e,t,n){let r=new Map;if(e)for(let[t,n]of Object.entries(e)){let e=br(n);e&&r.set(t,e)}let i={},a=n?[n]:Array.from(this.vv.keys()),o=[];for(let e of a){let t=this.vv.get(e),n=r.get(e);t&&n&&(t.physicalTime<n.physicalTime||t.physicalTime===n.physicalTime&&t.logicalCounter<=n.logicalCounter)||o.push({peer:e,fromEntry:n})}if(n&&o.every(e=>e.peer!==n)&&o.push({peer:n,fromEntry:r.get(n)}),o.length===0)return{version:0,entries:i};for(let e of o){let n=[e.peer],r=`WHERE peer = ?`;e.fromEntry&&(r+=` AND physical >= ?`,n.push(e.fromEntry.physicalTime));let a=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${r} ORDER BY physical, logical, key`,n);for(let n of a){let r={physicalTime:Number(n.physical??0),logicalCounter:Number(n.logical??0),peerId:String(n.peer??``)},a=e.fromEntry;if(a&&(r.physicalTime<a.physicalTime||r.physicalTime===a.physicalTime&&r.logicalCounter<=a.logicalCounter)||t!==void 0&&Number.isFinite(t)&&n.data===null&&r.physicalTime<t)continue;let o={},s=gr(n.data);s!==void 0&&(o.data=s);let c=hr(n.metadata);c!==void 0&&(o.metadata=c);let l=er(n.key);i[rr(l)]=$(r,o)}}return{version:0,entries:i}}async exportWithHooks(e){let t=await this.exportInternal(e.from,e.pruneTombstonesBefore,e.peerId),n=e.hooks?.transform;if(!n)return t;let r={version:t.version,entries:{}};for(let[e,i]of Object.entries(t.entries)){let t=_r(i.c),a={key:JSON.parse(e),clock:t,raw:{...i}},o={};i.d!==void 0&&(o.data=X(i.d));let s=Z(i.m);s!==void 0&&(o.metadata=s);let c=Q(o),l=dr(o,await n(a,c)??c);r.entries[e]=$(t,l)}return r}exportJson(e,t){return pr(e)?this.exportWithHooks(e):this.exportInternal(e,t)}async importInternal(e){if(e.version!==0)throw TypeError(`Unsupported bundle version`);let t=0,n=[],r=[];for(let[i,a]of Object.entries(e.entries)){let e;try{let t=JSON.parse(i);e=Array.isArray(t)?t:[]}catch{n.push({key:[],reason:`invalid key`});continue}let o=_r(a.c),s={};a.d!==void 0&&(s.data=X(a.d));let c=Z(a.m);c!==void 0&&(s.metadata=c),t+=1,await this.applyOperation({key:e,payload:s,clock:o,skipSameValue:!1,source:`import`,eventSink:r})}return r.length>0&&this.emitEvents(`import`,r),{accepted:t,skipped:n}}async importJson(e){if(mr(e)){let t=e.hooks?.preprocess,n=t?{version:e.bundle.version,entries:{...e.bundle.entries}}:e.bundle,r=[];if(t)for(let[e,i]of Object.entries(n.entries)){let a=JSON.parse(e),o=_r(i.c),s={};i.d!==void 0&&(s.data=X(i.d));let c=Z(i.m);c!==void 0&&(s.metadata=c);let l=fr(await t({key:a,clock:o,raw:i},Q(s)));l.accept?n.entries[e]=$(o,s):(r.push({key:a,reason:l.reason??`rejected`}),delete n.entries[e])}let i=await this.importInternal(n);return{accepted:i.accepted,skipped:r.concat(i.skipped)}}return this.importInternal(e)}async importJsonStr(e){let t=JSON.parse(e);return this.importJson(t)}async digest(){return ce(await Sr(await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`)))}async kvToJson(){return this.exportInternal()}async merge(e){let t=await e.exportJson();await this.importJson(t)}static async checkConsistency(e,t){let[n,r]=await Promise.all([e.digest(),t.digest()]);return n===r}checkInvariants(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};exports.Flock=Tr,exports.FlockSQLite=Tr;
27
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["textEncoder","out: number[]","parseMetadata","parseData","encode_key","decode_key","structuredCloneFn: (<T>(value: T) => T) | undefined","buf: Uint8Array","result: ExportPayload","record: ExportRecord","batch: EventBatch","basePayload: ExportPayload","values: Value[]","lower: { value: Uint8Array; inclusive: boolean } | undefined","upper: { value: Uint8Array; inclusive: boolean } | undefined","prefixFilter: Uint8Array | undefined","where: string[]","params: unknown[]","result: ScanRow[]","clock: EntryClock","payload: ExportPayload","vv: VersionVector","entries: Record<string, ExportRecord>","peersToExport: Array<{ peer: string; fromEntry?: VersionVectorEntry }>","result: ExportBundle","skipped: Array<{ key: KeyPart[]; reason: string }>","appliedEvents: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }>","keyParts: KeyPart[]"],"sources":["../src/digest.ts","../src/memcomparable.ts","../src/key-encoding.ts","../src/index.ts"],"sourcesContent":["import type { EntryClock, MetadataMap, Value } from \"./types\";\n\nconst TAG_RAW_VALUE = 0x10;\nconst TAG_RAW_CLOCK = 0x11;\nconst TAG_RAW_METADATA = 0x12;\nconst TAG_JSON_NULL = 0x20;\nconst TAG_JSON_BOOL = 0x21;\nconst TAG_JSON_NUMBER = 0x22;\nconst TAG_JSON_STRING = 0x23;\nconst TAG_JSON_ARRAY = 0x24;\nconst TAG_JSON_OBJECT = 0x25;\n\ntype RawValue = {\n data?: Value;\n metadata?: MetadataMap;\n clock: EntryClock;\n};\n\nexport type DigestRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\nconst textEncoder = new TextEncoder();\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction encodeU64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining !== 0n) {\n byte |= 0x80;\n }\n out.push(byte);\n } while (remaining !== 0n);\n return new Uint8Array(out);\n}\n\nfunction encodeI64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n let more = true;\n while (more) {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n const signBitSet = (byte & 0x40) !== 0;\n if (\n (remaining === 0n && !signBitSet) ||\n (remaining === -1n && signBitSet)\n ) {\n more = false;\n } else {\n byte |= 0x80;\n }\n out.push(byte);\n }\n return new Uint8Array(out);\n}\n\nexport async function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n const cryptoMaybe = typeof crypto !== \"undefined\" ? crypto : undefined;\n if (cryptoMaybe?.subtle) {\n const digestInput = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(digestInput).set(bytes);\n const digest = await cryptoMaybe.subtle.digest(\"SHA-256\", digestInput);\n return new Uint8Array(digest);\n }\n try {\n const { createHash } = await import(\"crypto\");\n const hash = createHash(\"sha256\");\n hash.update(bytes);\n return new Uint8Array(hash.digest());\n } catch {\n throw new Error(\"No crypto implementation available for digest\");\n }\n}\n\nclass DigestWriter {\n private chunks: number[] = [];\n\n writeTag(tag: number): void {\n this.chunks.push(tag & 0xff);\n }\n\n writeBool(value: boolean): void {\n this.chunks.push(value ? 1 : 0);\n }\n\n writeBytes(bytes: Uint8Array): void {\n this.writeLen(bytes.length);\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeRawBytes(bytes: Uint8Array): void {\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeLen(length: number): void {\n this.writeRawBytes(encodeU64(length));\n }\n\n writeI64(value: number): void {\n this.writeRawBytes(encodeI64(value));\n }\n\n writeF64(value: number): void {\n const view = new DataView(new ArrayBuffer(8));\n view.setFloat64(0, value, false);\n const bytes = new Uint8Array(view.buffer);\n this.writeRawBytes(bytes);\n }\n\n writeString(value: string): void {\n this.writeBytes(textEncoder.encode(value));\n }\n\n writeJson(value: Value): void {\n if (value === null) {\n this.writeTag(TAG_JSON_NULL);\n return;\n }\n if (typeof value === \"boolean\") {\n this.writeTag(TAG_JSON_BOOL);\n this.writeBool(value);\n return;\n }\n if (typeof value === \"number\") {\n this.writeTag(TAG_JSON_NUMBER);\n this.writeF64(value);\n return;\n }\n if (typeof value === \"string\") {\n this.writeTag(TAG_JSON_STRING);\n this.writeString(value);\n return;\n }\n if (Array.isArray(value)) {\n this.writeTag(TAG_JSON_ARRAY);\n this.writeLen(value.length);\n for (const entry of value) {\n this.writeJson(entry);\n }\n return;\n }\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, Value>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeTag(TAG_JSON_OBJECT);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry);\n }\n return;\n }\n throw new TypeError(\"Unsupported JSON value in digest\");\n }\n\n writeRawValue(value: RawValue): void {\n this.writeTag(TAG_RAW_VALUE);\n if (value.data === undefined) {\n this.writeBool(false);\n } else {\n this.writeBool(true);\n this.writeJson(value.data);\n }\n this.writeTag(TAG_RAW_METADATA);\n if (!value.metadata || typeof value.metadata !== \"object\") {\n this.writeBool(false);\n } else {\n const entries = Object.entries(value.metadata).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeBool(true);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry as Value);\n }\n }\n this.writeTag(TAG_RAW_CLOCK);\n this.writeF64(value.clock.physicalTime);\n this.writeI64(Math.trunc(value.clock.logicalCounter));\n this.writeBytes(textEncoder.encode(value.clock.peerId));\n }\n\n async finish(): Promise<Uint8Array> {\n const data = new Uint8Array(this.chunks);\n return sha256(data);\n }\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) return undefined;\n try {\n const value = JSON.parse(json);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as MetadataMap;\n } catch {\n return undefined;\n }\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nasync function digestEntry(row: DigestRow): Promise<Uint8Array | null> {\n const data = parseData(row.data);\n if (data === undefined) {\n return null;\n }\n const metadata = parseMetadata(row.metadata);\n const writer = new DigestWriter();\n writer.writeBytes(row.key);\n writer.writeRawValue({\n data,\n metadata,\n clock: {\n physicalTime: Number(row.physical),\n logicalCounter: Number(row.logical),\n peerId: String(row.peer),\n },\n });\n return writer.finish();\n}\n\nexport async function computeDigest(rows: DigestRow[]): Promise<string> {\n const acc = new Uint8Array(32);\n for (const row of rows) {\n const digest = await digestEntry(row);\n if (!digest) {\n continue;\n }\n for (let i = 0; i < acc.length; i += 1) {\n acc[i] ^= digest[i];\n }\n }\n return toHex(acc);\n}\n","// @ts-nocheck\n// NOTE: generated from moon/memcomparable; intentionally skips type checking.\nconst $9221120237041090561L = { hi: 2146959360, lo: 1 };\nclass $PanicError extends Error {}\nfunction $panic() {\n throw new $PanicError();\n}\nconst moonbitlang$core$bigint$$BigInt$compare = (x, y) => x < y ? -1 : x > y ? 1 : 0;\nconst moonbitlang$core$bigint$$BigInt$equal = (x, y) => x === y;\nconst moonbitlang$core$bigint$$BigInt$from_int64 = (x) => BigInt(x.hi) * 0x100000000n + BigInt(x.lo >>> 0);\nconst moonbitlang$core$bigint$$BigInt$op_neg_ffi = (x) => -x;\nconst moonbitlang$core$bigint$$BigInt$op_add_ffi = (x, y) => x + y;\nconst moonbitlang$core$bigint$$BigInt$op_mul_ffi = (x, y) => x * y;\nconst moonbitlang$core$bigint$$BigInt$op_div_ffi = (x, y) => x / y;\nconst moonbitlang$core$bigint$$BigInt$op_mod_ffi = (x, y) => x % y;\nconst moonbitlang$core$bigint$$BigInt$js_shr = (x, y) => x >> BigInt(y);\nconst moonbitlang$core$bigint$$BigInt$to_uint = (x) => Number(BigInt.asUintN(32, x)) | 0;\nconst moonbitlang$core$bigint$$BigInt$to_int = (x) => Number(BigInt.asIntN(32, x));\nfunction $bound_check(arr, index) {\n if (index < 0 || index >= arr.length) throw new Error(\"Index out of bounds\");\n}\nconst moonbitlang$core$builtin$$int_to_string_js = (x, radix) => {\n return x.toString(radix);\n};\nfunction $makebytes(a, b) {\n const arr = new Uint8Array(a);\n if (b !== 0) {\n arr.fill(b);\n }\n return arr;\n}\nconst moonbitlang$core$builtin$$JSArray$push = (arr, val) => { arr.push(val); };\nconst $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ = { $tag: 0 };\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$.prototype.$tag = 1;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$.prototype.$tag = 2;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$.prototype.$tag = 3;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$.prototype.$tag = 4;\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_as_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setUint32(0, a.hi);\n view.setUint32(4, a.lo);\n return view.getFloat64(0);\n};\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setFloat64(0, a);\n const hi = view.getInt32(0);\n const lo = view.getInt32(4);\n return { hi, lo };\n};\nconst moonbitlang$core$builtin$$MyInt64$convert_to_double = (a) => a.hi * 4294967296.0 + (a.lo >>> 0);\nconst moonbitlang$core$builtin$$MyInt64$from_double = (a) => {\n if (isNaN(a)) {\n return { hi: 0, lo: 0 };\n }\n if (a >= 9223372036854775807) {\n return { hi: 0x7fffffff, lo: 0xffffffff };\n }\n if (a <= -9223372036854775808) {\n return { hi: -2147483648, lo: 0 };\n }\n let neg = false;\n if (a < 0) {\n neg = true;\n a = -a;\n }\n let hi = (a * (1 / 0x100000000)) | 0;\n let lo = a >>> 0;\n if (neg) {\n if (lo === 0) {\n hi = ~hi + 1;\n } else {\n hi = ~hi;\n lo = ~lo + 1;\n }\n }\n return { hi, lo };\n};\nconst $bytes_literal$0 = new Uint8Array();\nconst $255L = { hi: 0, lo: 255 };\nconst $0L = { hi: 0, lo: 0 };\nconst $_1L = { hi: -1, lo: -1 };\nconst $_9223372036854775808L = { hi: -2147483648, lo: 0 };\nfunction Result$Err$1$(param0) {\n this._0 = param0;\n}\nResult$Err$1$.prototype.$tag = 0;\nfunction Result$Ok$1$(param0) {\n this._0 = param0;\n}\nResult$Ok$1$.prototype.$tag = 1;\nfunction Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(param0) {\n this._0 = param0;\n}\nError$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag.prototype.$tag = 2;\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF = { $tag: 1 };\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8 = { $tag: 0 };\nconst $1L = { hi: 0, lo: 1 };\nconst $256L = { hi: 0, lo: 256 };\nfunction Result$Err$2$(param0) {\n this._0 = param0;\n}\nResult$Err$2$.prototype.$tag = 0;\nfunction Result$Ok$2$(param0) {\n this._0 = param0;\n}\nResult$Ok$2$.prototype.$tag = 1;\nfunction Result$Err$3$(param0) {\n this._0 = param0;\n}\nResult$Err$3$.prototype.$tag = 0;\nfunction Result$Ok$3$(param0) {\n this._0 = param0;\n}\nResult$Ok$3$.prototype.$tag = 1;\nfunction KeyPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyPart$Bytes.prototype.$tag = 0;\nfunction KeyPart$String(param0) {\n this._0 = param0;\n}\nKeyPart$String.prototype.$tag = 1;\nfunction KeyPart$Int(param0) {\n this._0 = param0;\n}\nKeyPart$Int.prototype.$tag = 2;\nfunction KeyPart$Float(param0) {\n this._0 = param0;\n}\nKeyPart$Float.prototype.$tag = 3;\nconst KeyPart$False = { $tag: 4 };\nconst KeyPart$True = { $tag: 5 };\nfunction Result$Err$4$(param0) {\n this._0 = param0;\n}\nResult$Err$4$.prototype.$tag = 0;\nfunction Result$Ok$4$(param0) {\n this._0 = param0;\n}\nResult$Ok$4$.prototype.$tag = 1;\nfunction KeyJsPart$Number(param0) {\n this._0 = param0;\n}\nKeyJsPart$Number.prototype.$tag = 0;\nfunction KeyJsPart$String(param0) {\n this._0 = param0;\n}\nKeyJsPart$String.prototype.$tag = 1;\nfunction KeyJsPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyJsPart$Bytes.prototype.$tag = 2;\nconst KeyJsPart$True = { $tag: 3 };\nconst KeyJsPart$False = { $tag: 4 };\nconst zxch3n$expect$$to_string$46$42$bind$124$178 = \";\";\nconst zxch3n$expect$$red$46$constr$47$350 = 1;\nconst zxch3n$expect$$yellow$46$constr$47$352 = 3;\nconst zxch3n$expect$$blue$46$constr$47$354 = 4;\nconst moonbitlang$core$double$$not_a_number = moonbitlang$core$int64$$Int64$reinterpret_as_double($9221120237041090561L);\nfunction moonbitlang$core$abort$$abort$0$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$1$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$2$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$3$(msg) {\n $panic();\n}\nfunction moonbitlang$core$abort$$abort$4$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$uint$$UInt$to_int64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$array$$ArrayView$join$5$(self, separator) {\n if ((self.end - self.start | 0) === 0) {\n return \"\";\n } else {\n const _hd = self.buf[self.start];\n const _bind = self.buf;\n const _bind$2 = 1 + self.start | 0;\n const _bind$3 = self.end;\n const _x = { buf: _bind, start: _bind$2, end: _bind$3 };\n const hd = moonbitlang$core$string$$ToStringView$to_string_view$5$(_hd);\n let size_hint = hd.end - hd.start | 0;\n const _len = _x.end - _x.start | 0;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const s = _bind[_bind$2 + _i | 0];\n const _tmp$2 = size_hint;\n const _p = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n size_hint = _tmp$2 + ((_p.end - _p.start | 0) + (separator.end - separator.start | 0) | 0) | 0;\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n size_hint = size_hint << 1;\n const buf = moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, hd.str, hd.start, hd.end - hd.start | 0);\n if (moonbitlang$core$string$$String$char_length_eq$46$inner(separator.str, 0, separator.start, separator.end)) {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n } else {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, separator.str, separator.start, separator.end - separator.start | 0);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n }\n return buf.val;\n }\n}\nfunction moonbitlang$core$array$$Array$push_iter$7$(self, iter) {\n iter((x) => {\n moonbitlang$core$array$$Array$push$7$(self, x);\n return 1;\n });\n}\nfunction moonbitlang$core$array$$Array$join$5$(self, separator) {\n return moonbitlang$core$array$$ArrayView$join$5$({ buf: self, start: 0, end: self.length }, separator);\n}\nfunction moonbitlang$core$builtin$$Compare$compare$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$compare(self, other);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$equal(self, other);\n}\nfunction moonbitlang$core$builtin$$Neg$neg$8$(self) {\n return moonbitlang$core$bigint$$BigInt$op_neg_ffi(self);\n}\nfunction moonbitlang$core$builtin$$Add$add$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_add_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mul$mul$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mul_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Div$div$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_div_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mod$mod$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mod_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$8$(self, n) {\n if (n < 0) {\n moonbitlang$core$abort$$abort$3$(\"negative shift count\");\n }\n return moonbitlang$core$bigint$$BigInt$js_shr(self, n);\n}\nfunction moonbitlang$core$bigint$$BigInt$to_int64(self) {\n const hi = moonbitlang$core$bigint$$BigInt$to_uint(moonbitlang$core$builtin$$Shr$shr$8$(self, 32));\n const lo = moonbitlang$core$bigint$$BigInt$to_uint(self);\n return moonbitlang$core$builtin$$BitOr$lor$9$(moonbitlang$core$builtin$$Shl$shl$9$(moonbitlang$core$uint$$UInt$to_int64(hi), 32), moonbitlang$core$uint$$UInt$to_int64(lo));\n}\nfunction moonbitlang$core$bytes$$BytesView$at(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.bytes;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$bytes$$Bytes$sub$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$sub$46$inner(self, start, end) {\n const len = self.end - self.start | 0;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self.bytes, start: self.start + start$2 | 0, end: (self.start + start$2 | 0) + (end$2 - start$2 | 0) | 0 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$iter(self) {\n const _p = (yield_) => {\n const _end383 = self.end - self.start | 0;\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < _end383) {\n const _bind = yield_(moonbitlang$core$bytes$$BytesView$at(self, i));\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$BytesView$iterator(self) {\n const i = { val: 0 };\n const len = self.end - self.start | 0;\n const _p = () => {\n if (i.val < len) {\n const _p$2 = i.val;\n const _tmp = self.bytes;\n const _tmp$2 = self.start + _p$2 | 0;\n $bound_check(_tmp, _tmp$2);\n const result = _tmp[_tmp$2];\n i.val = i.val + 1 | 0;\n return result;\n } else {\n return -1;\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$Bytes$from_array(arr) {\n return moonbitlang$core$bytes$$Bytes$makei$11$(arr.end - arr.start | 0, (i) => moonbitlang$core$array$$ArrayView$at$2$(arr, i));\n}\nfunction moonbitlang$core$bytes$$Bytes$from_iter(iter) {\n const _bind = moonbitlang$core$builtin$$Iter$collect$2$(iter);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction moonbitlang$core$byte$$Byte$to_uint64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$string$$ToStringView$to_string_view$5$(self) {\n return { str: self, start: 0, end: self.length };\n}\nfunction moonbitlang$core$array$$FixedArray$unsafe_blit$2$(dst, dst_offset, src, src_offset, len) {\n if (dst === src && dst_offset < src_offset) {\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n } else {\n let _tmp = len - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i - 1 | 0;\n continue;\n } else {\n return;\n }\n }\n }\n}\nfunction moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint) {\n return { val: \"\" };\n}\nfunction moonbitlang$core$builtin$$Logger$write_char$6$(self, ch) {\n const _bind = self;\n _bind.val = `${_bind.val}${String.fromCodePoint(ch)}`;\n}\nfunction moonbitlang$core$builtin$$Logger$write_string$6$(self, str) {\n const _bind = self;\n _bind.val = `${_bind.val}${str}`;\n}\nfunction moonbitlang$core$builtin$$Compare$op_gt$12$(x, y) {\n return moonbitlang$core$builtin$$Compare$compare$8$(x, y) > 0;\n}\nfunction moonbitlang$core$builtin$$Show$to_string$10$(self) {\n const logger = moonbitlang$core$builtin$$StringBuilder$new$46$inner(0);\n moonbitlang$core$builtin$$Show$output$13$(self, { self: logger, method_0: moonbitlang$core$builtin$$Logger$write_string$6$, method_1: moonbitlang$core$builtin$$Logger$write_substring$6$, method_2: moonbitlang$core$builtin$$Logger$write_char$6$ });\n return logger.val;\n}\nfunction moonbitlang$core$int$$Int$to_string$46$inner(self, radix) {\n return moonbitlang$core$builtin$$int_to_string_js(self, radix);\n}\nfunction moonbitlang$core$string$$String$char_length_eq$46$inner(self, len, start_offset, end_offset) {\n let end_offset$2;\n if (end_offset === undefined) {\n end_offset$2 = self.length;\n } else {\n const _Some = end_offset;\n end_offset$2 = _Some;\n }\n let _tmp = start_offset;\n let _tmp$2 = 0;\n while (true) {\n const index = _tmp;\n const count = _tmp$2;\n if (index < end_offset$2 && count < len) {\n const c1 = self.charCodeAt(index);\n if (55296 <= c1 && c1 <= 56319 && (index + 1 | 0) < end_offset$2) {\n const _tmp$3 = index + 1 | 0;\n const c2 = self.charCodeAt(_tmp$3);\n if (56320 <= c2 && c2 <= 57343) {\n _tmp = index + 2 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n moonbitlang$core$abort$$abort$3$(\"invalid surrogate pair\");\n }\n }\n _tmp = index + 1 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n return count === len && index === end_offset$2;\n }\n }\n}\nfunction moonbitlang$core$string$$String$substring$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n end$2 = _Some;\n }\n return start >= 0 && (start <= end$2 && end$2 <= len) ? self.substring(start, end$2) : $panic();\n}\nfunction moonbitlang$core$builtin$$Logger$write_substring$6$(self, str, start, len) {\n const _bind = self;\n _bind.val = `${_bind.val}${moonbitlang$core$string$$String$substring$46$inner(str, start, start + len | 0)}`;\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$14$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$15$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$2$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$push$15$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$14$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$2$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$5$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$7$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$builtin$$Show$to_string$16$(self) {\n return String.fromCodePoint(self);\n}\nfunction moonbitlang$core$builtin$$Iter$each$17$(self, f) {\n const _foreach_result = { val: $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ };\n self((a) => {\n f(a);\n return 1;\n });\n const _tmp = _foreach_result.val;\n switch (_tmp.$tag) {\n case 0: {\n return;\n }\n case 1: {\n const _break = _tmp;\n _break._0;\n return;\n }\n case 2: {\n const _return = _tmp;\n return _return._0;\n }\n case 3: {\n $panic();\n return;\n }\n default: {\n $panic();\n return;\n }\n }\n}\nfunction moonbitlang$core$builtin$$Iter$collect$2$(self) {\n const result = [];\n moonbitlang$core$builtin$$Iter$each$17$(self, (e) => {\n moonbitlang$core$array$$Array$push$2$(result, e);\n });\n return result;\n}\nfunction moonbitlang$core$builtin$$Iterator$next$2$(self) {\n const _func = self;\n return _func();\n}\nfunction moonbitlang$core$builtin$$Show$output$13$(self, logger) {\n logger.method_0(logger.self, moonbitlang$core$int$$Int$to_string$46$inner(self, 10));\n}\nfunction moonbitlang$core$array$$Array$iter$7$(self) {\n const _p = (yield_) => {\n const _len = self.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const v = self[_i];\n const _bind = yield_(v);\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { buf: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$4$(\"View index out of bounds\");\n}\nfunction moonbitlang$core$builtin$$MyInt64$extend_i32_u(value) {\n return { hi: 0, lo: value };\n}\nfunction moonbitlang$core$uint64$$UInt64$extend_uint(value) {\n return moonbitlang$core$builtin$$MyInt64$extend_i32_u(value);\n}\nfunction moonbitlang$core$uint$$UInt$to_uint64(self) {\n return moonbitlang$core$uint64$$UInt64$extend_uint(self);\n}\nfunction moonbitlang$core$int64$$Int64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$builtin$$MyInt64$from_int(value) {\n return { hi: value >> 31 & -1, lo: value | 0 };\n}\nfunction moonbitlang$core$int$$Int$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_int(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$to_int(self) {\n const _p = self;\n return _p.lo;\n}\nfunction moonbitlang$core$uint64$$UInt64$to_byte(self) {\n return moonbitlang$core$uint64$$UInt64$to_int(self) & 255;\n}\nfunction moonbitlang$core$builtin$$MyInt64$land(self, other) {\n return { hi: self.hi & other.hi, lo: self.lo & other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lor(self, other) {\n return { hi: self.hi | other.hi, lo: self.lo | other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lxor(self, other) {\n return { hi: self.hi ^ other.hi, lo: self.lo ^ other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsl(self, shift) {\n const shift$2 = shift & 63;\n if (shift$2 === 0) {\n return self;\n } else {\n if (shift$2 < 32) {\n const _hi = self.hi;\n const _lo = self.lo;\n const hi = _hi;\n const lo = _lo;\n const hi$2 = hi << shift$2 | (lo >>> (32 - shift$2 | 0) | 0);\n const lo$2 = lo << shift$2;\n return { hi: hi$2, lo: lo$2 };\n } else {\n return { hi: self.lo << (shift$2 - 32 | 0), lo: 0 };\n }\n }\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsr(self, shift) {\n const shift$2 = shift & 63;\n return shift$2 === 0 ? self : shift$2 < 32 ? { hi: self.hi >>> shift$2 | 0, lo: self.lo >>> shift$2 | self.hi << (32 - shift$2 | 0) } : { hi: 0, lo: self.hi >>> (shift$2 - 32 | 0) | 0 };\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, other);\n}\nfunction moonbitlang$core$double$$Double$convert_int64(value) {\n return moonbitlang$core$builtin$$MyInt64$convert_to_double(value);\n}\nfunction moonbitlang$core$int64$$Int64$to_double(self) {\n return moonbitlang$core$double$$Double$convert_int64(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$double$$Double$reinterpret_as_uint64(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_double(self);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$18$(self, other) {\n const _p = self;\n const _p$2 = other;\n return _p.hi === _p$2.hi && _p.lo === _p$2.lo;\n}\nfunction moonbitlang$core$builtin$$BitAnd$land$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$land(self, other);\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$BitXOr$lxor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lxor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, shift);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsr(self, shift);\n}\nfunction moonbitlang$core$double$$Double$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_double(self);\n}\nfunction moonbitlang$core$bytes$$Bytes$makei$11$(length, value) {\n if (length <= 0) {\n return $bytes_literal$0;\n }\n const arr = $makebytes(length, value(0));\n let _tmp = 1;\n while (true) {\n const i = _tmp;\n if (i < length) {\n $bound_check(arr, i);\n arr[i] = value(i);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$builtin$$println$5$(input) {\n console.log(input);\n}\nfunction moonbitlang$core$array$$FixedArray$blit_from_bytes(self, bytes_offset, src, src_offset, length) {\n const e1 = (bytes_offset + length | 0) - 1 | 0;\n const e2 = (src_offset + length | 0) - 1 | 0;\n const len1 = self.length;\n const len2 = src.length;\n if (length >= 0 && (bytes_offset >= 0 && (e1 < len1 && (src_offset >= 0 && e2 < len2)))) {\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(self, bytes_offset, src, src_offset, length);\n return;\n } else {\n $panic();\n return;\n }\n}\nfunction moonbitlang$core$array$$ArrayView$at$2$(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.buf;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$array$$Array$rev$2$(self) {\n const len = self.length;\n const arr = new Array(len);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n arr[i] = self[(len - i | 0) - 1 | 0];\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, required) {\n const start = self.data.length <= 0 ? 1 : self.data.length;\n let enough_space;\n let _tmp = start;\n while (true) {\n const space = _tmp;\n if (space >= required) {\n enough_space = space;\n break;\n }\n _tmp = Math.imul(space, 2) | 0;\n continue;\n }\n if (enough_space !== self.data.length) {\n const new_data = $makebytes(enough_space, 0);\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(new_data, 0, self.data, 0, self.len);\n self.data = new_data;\n return;\n } else {\n return;\n }\n}\nfunction moonbitlang$core$buffer$$Buffer$write_byte(self, value) {\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + 1 | 0);\n const _tmp = self.data;\n const _tmp$2 = self.len;\n $bound_check(_tmp, _tmp$2);\n _tmp[_tmp$2] = value;\n self.len = self.len + 1 | 0;\n}\nfunction moonbitlang$core$buffer$$Buffer$contents(self) {\n return moonbitlang$core$bytes$$Bytes$from_array(moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self.data, 0, self.len));\n}\nfunction moonbitlang$core$buffer$$new$46$inner(size_hint) {\n const initial = size_hint < 1 ? 1 : size_hint;\n const data = $makebytes(initial, 0);\n return { data: data, len: 0 };\n}\nfunction moonbitlang$core$buffer$$Buffer$write_bytes(self, value) {\n const val_len = value.length;\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + val_len | 0);\n moonbitlang$core$array$$FixedArray$blit_from_bytes(self.data, self.len, value, 0, val_len);\n self.len = self.len + val_len | 0;\n}\nfunction zxch3n$expect$$Color$to_bg_color_code(self) {\n switch (self) {\n case 0: {\n return \"40\";\n }\n case 1: {\n return \"41\";\n }\n case 2: {\n return \"42\";\n }\n case 3: {\n return \"43\";\n }\n case 4: {\n return \"44\";\n }\n case 5: {\n return \"45\";\n }\n case 6: {\n return \"46\";\n }\n case 7: {\n return \"47\";\n }\n default: {\n return \"49\";\n }\n }\n}\nfunction zxch3n$expect$$Color$to_color_code(self) {\n switch (self) {\n case 0: {\n return \"30\";\n }\n case 1: {\n return \"31\";\n }\n case 2: {\n return \"32\";\n }\n case 3: {\n return \"33\";\n }\n case 4: {\n return \"34\";\n }\n case 5: {\n return \"35\";\n }\n case 6: {\n return \"36\";\n }\n case 7: {\n return \"37\";\n }\n default: {\n return \"39\";\n }\n }\n}\nfunction zxch3n$expect$$Formated$to_string(self) {\n const styles = [];\n const _bind = self.color;\n if (_bind === undefined) {\n } else {\n const _Some = _bind;\n const _color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_color_code(_color));\n }\n const _bind$2 = self.bg_color;\n if (_bind$2 === undefined) {\n } else {\n const _Some = _bind$2;\n const _bg_color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_bg_color_code(_bg_color));\n }\n const _arr = self.formats;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const format = _arr[_i];\n switch (format) {\n case 0: {\n moonbitlang$core$array$$Array$push$5$(styles, \"1\");\n break;\n }\n case 1: {\n moonbitlang$core$array$$Array$push$5$(styles, \"4\");\n break;\n }\n case 2: {\n moonbitlang$core$array$$Array$push$5$(styles, \"5\");\n break;\n }\n case 3: {\n moonbitlang$core$array$$Array$push$5$(styles, \"7\");\n break;\n }\n case 4: {\n moonbitlang$core$array$$Array$push$5$(styles, \"8\");\n break;\n }\n case 5: {\n moonbitlang$core$array$$Array$push$5$(styles, \"9\");\n break;\n }\n default: {\n moonbitlang$core$array$$Array$push$5$(styles, \"3\");\n }\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n if (styles.length > 0) {\n const style_string = moonbitlang$core$array$$Array$join$5$(styles, { str: zxch3n$expect$$to_string$46$42$bind$124$178, start: 0, end: zxch3n$expect$$to_string$46$42$bind$124$178.length });\n return `[${style_string}m${self.str}[0m`;\n } else {\n return self.str;\n }\n}\nfunction zxch3n$expect$$Formated$format(str) {\n return { str: str, bg_color: undefined, color: undefined, formats: [] };\n}\nfunction zxch3n$expect$$Formated$red(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$red$46$constr$47$350, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$yellow(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$yellow$46$constr$47$352, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$blue(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$blue$46$constr$47$354, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$bold(self) {\n const _tmp = self.str;\n const _tmp$2 = self.bg_color;\n const _tmp$3 = self.color;\n const _self = [];\n moonbitlang$core$array$$Array$push$7$(_self, 0);\n moonbitlang$core$array$$Array$push_iter$7$(_self, moonbitlang$core$array$$Array$iter$7$(self.formats));\n return { str: _tmp, bg_color: _tmp$2, color: _tmp$3, formats: _self };\n}\nfunction zxch3n$expect$$panic$46$inner$3$(reason, loc) {\n const msg = `${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$red(zxch3n$expect$$Formated$bold(zxch3n$expect$$Formated$format(\"Panic: \"))))}${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$yellow(zxch3n$expect$$Formated$format(reason)))} at ${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$blue(zxch3n$expect$$Formated$format(loc)))}`;\n moonbitlang$core$builtin$$println$5$(msg);\n moonbitlang$core$abort$$abort$3$(msg);\n}\nfunction zxch3n$flock$types$$string_to_utf8(str) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let i = 0;\n while (true) {\n if (i < str.length) {\n const _tmp = i;\n $bound_check(str, _tmp);\n const code = str.charCodeAt(_tmp);\n if (code >= 55296 && (code <= 56319 && (i + 1 | 0) < str.length)) {\n const _tmp$2 = i + 1 | 0;\n $bound_check(str, _tmp$2);\n const low = str.charCodeAt(_tmp$2);\n if (low >= 56320 && low <= 57343) {\n const code_point = (65536 + (code - 55296 << 10) | 0) + (low - 56320 | 0) | 0;\n moonbitlang$core$array$$Array$push$2$(bytes, (240 | code_point >> 18) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 12 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point & 63) & 255);\n i = i + 1 | 0;\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n } else {\n if (code < 128) {\n moonbitlang$core$array$$Array$push$2$(bytes, code & 255);\n } else {\n if (code < 2048) {\n moonbitlang$core$array$$Array$push$2$(bytes, (192 | code >> 6) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n }\n }\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$types$$Utf8Str$from_string(str) {\n return { bytes: zxch3n$flock$types$$string_to_utf8(str) };\n}\nfunction zxch3n$flock$types$$is_valid_utf8(utf8Arr) {\n let i = 0;\n while (true) {\n if (i < (utf8Arr.end - utf8Arr.start | 0)) {\n const byte = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i);\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n i = i + 1 | 0;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return false;\n }\n i = i + 2 | 0;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n let _tmp;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp = true;\n } else {\n const _p$11 = 192;\n _tmp = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp) {\n return false;\n }\n i = i + 3 | 0;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n const byte4 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 3 | 0);\n let _tmp;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp = true;\n } else {\n let _tmp$2;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$2 = true;\n } else {\n const _p$15 = 192;\n _tmp$2 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp = _tmp$2;\n }\n if (_tmp) {\n return false;\n }\n i = i + 4 | 0;\n } else {\n return false;\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return true;\n}\nfunction zxch3n$flock$types$$Utf8Str$from_bytes_view(bytes) {\n if (!zxch3n$flock$types$$is_valid_utf8(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, undefined))) {\n return undefined;\n }\n return { bytes: moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(bytes)) };\n}\nfunction zxch3n$flock$types$$new_string_from_utf8(utf8Arr) {\n let i = 0;\n let result = \"\";\n while (true) {\n if (i < utf8Arr.length) {\n const _tmp = i;\n $bound_check(utf8Arr, _tmp);\n const byte = utf8Arr[_tmp];\n let code_point;\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n code_point = byte;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return undefined;\n }\n i = i + 1 | 0;\n const _p$8 = 31;\n const _tmp$3 = (byte & _p$8 & 255) << 6;\n const _p$9 = 63;\n code_point = _tmp$3 | byte2 & _p$9 & 255;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n let _tmp$4;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp$4 = true;\n } else {\n const _p$11 = 192;\n _tmp$4 = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp$4) {\n return undefined;\n }\n i = i + 2 | 0;\n const _p$11 = 15;\n const _tmp$5 = (byte & _p$11 & 255) << 12;\n const _p$12 = 63;\n const _tmp$6 = _tmp$5 | (byte2 & _p$12 & 255) << 6;\n const _p$13 = 63;\n code_point = _tmp$6 | byte3 & _p$13 & 255;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n const _tmp$4 = i + 3 | 0;\n $bound_check(utf8Arr, _tmp$4);\n const byte4 = utf8Arr[_tmp$4];\n let _tmp$5;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp$5 = true;\n } else {\n let _tmp$6;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$6 = true;\n } else {\n const _p$15 = 192;\n _tmp$6 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp$5 = _tmp$6;\n }\n if (_tmp$5) {\n return undefined;\n }\n i = i + 3 | 0;\n const _p$14 = 7;\n const _tmp$6 = (byte & _p$14 & 255) << 18;\n const _p$15 = 63;\n const _tmp$7 = _tmp$6 | (byte2 & _p$15 & 255) << 12;\n const _p$16 = 63;\n const _tmp$8 = _tmp$7 | (byte3 & _p$16 & 255) << 6;\n const _p$17 = 63;\n code_point = _tmp$8 | byte4 & _p$17 & 255;\n } else {\n return undefined;\n }\n }\n }\n }\n result = `${result}${moonbitlang$core$builtin$$Show$to_string$16$(code_point)}`;\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return result;\n}\nfunction zxch3n$flock$types$$Utf8Str$to_string(self) {\n const _p = zxch3n$flock$types$$new_string_from_utf8(self.bytes);\n if (_p === undefined) {\n return $panic();\n } else {\n const _p$2 = _p;\n return _p$2;\n }\n}\nfunction zxch3n$flock$memcomparable$$double_to_bits(d) {\n return moonbitlang$core$double$$Double$reinterpret_as_uint64(d);\n}\nfunction zxch3n$flock$memcomparable$$double_from_bits(bits) {\n return moonbitlang$core$uint64$$UInt64$reinterpret_as_double(bits);\n}\nfunction zxch3n$flock$memcomparable$$uint64_to_be_bytes(n) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 56), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 48), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 40), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 32), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 24), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 16), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 8), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(n, $255L)));\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$memcomparable$$uint64_from_be_bytes(bytes) {\n if (bytes.length !== 8) {\n zxch3n$expect$$panic$46$inner$3$(\"Invalid byte array length\", \"/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54\");\n }\n let result = $0L;\n const _tmp = result;\n $bound_check(bytes, 0);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[0]), 56));\n const _tmp$2 = result;\n $bound_check(bytes, 1);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$2, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[1]), 48));\n const _tmp$3 = result;\n $bound_check(bytes, 2);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$3, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[2]), 40));\n const _tmp$4 = result;\n $bound_check(bytes, 3);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$4, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[3]), 32));\n const _tmp$5 = result;\n $bound_check(bytes, 4);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$5, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[4]), 24));\n const _tmp$6 = result;\n $bound_check(bytes, 5);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$6, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[5]), 16));\n const _tmp$7 = result;\n $bound_check(bytes, 6);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$7, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[6]), 8));\n const _tmp$8 = result;\n $bound_check(bytes, 7);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$8, moonbitlang$core$byte$$Byte$to_uint64(bytes[7]));\n return result;\n}\nfunction zxch3n$flock$memcomparable$$Key$new() {\n return { parts: moonbitlang$core$array$$Array$new$46$inner$15$(0) };\n}\nfunction zxch3n$flock$memcomparable$$Key$push(self, part) {\n moonbitlang$core$array$$Array$push$15$(self.parts, part);\n}\nfunction zxch3n$flock$memcomparable$$canonicalize_f64(n) {\n return n !== n ? (n < 0 ? -moonbitlang$core$double$$not_a_number : moonbitlang$core$double$$not_a_number) : n;\n}\nfunction zxch3n$flock$memcomparable$$encode_bytes(bytes, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 1);\n const _it = moonbitlang$core$bytes$$BytesView$iterator(bytes);\n while (true) {\n const _bind = moonbitlang$core$builtin$$Iterator$next$2$(_it);\n if (_bind === -1) {\n break;\n } else {\n const _Some = _bind;\n const _b = _Some;\n moonbitlang$core$buffer$$Buffer$write_byte(output, _b);\n const _p = 0;\n if (_b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n continue;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_string(s, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 2);\n const bytes = s.bytes;\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n const _p = 0;\n if (b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_float(f, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 33);\n const f$2 = zxch3n$flock$memcomparable$$canonicalize_f64(f);\n const bits = f$2 < 0 ? moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_1L) : moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_9223372036854775808L);\n const bytes = zxch3n$flock$memcomparable$$uint64_to_be_bytes(bits);\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) {\n const bytes = [];\n let x = n;\n while (true) {\n if (moonbitlang$core$builtin$$Compare$op_gt$12$(x, 0n)) {\n const byte = moonbitlang$core$bigint$$BigInt$to_int(moonbitlang$core$builtin$$Mod$mod$8$(x, 256n));\n moonbitlang$core$array$$Array$push$2$(bytes, byte & 255);\n x = moonbitlang$core$builtin$$Div$div$8$(x, 256n);\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$array$$Array$rev$2$(bytes);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction zxch3n$flock$memcomparable$$bigint_to_be_bytes(n, output) {\n if (moonbitlang$core$builtin$$Eq$equal$8$(n, 0n)) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 20);\n return undefined;\n }\n const sign = moonbitlang$core$builtin$$Compare$op_gt$12$(n, 0n);\n const bytes = sign ? zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) : zxch3n$flock$memcomparable$$biguint_to_be_bytes(moonbitlang$core$builtin$$Neg$neg$8$(n));\n const n$2 = bytes.length;\n if (sign === false) {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p - _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 11);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n const _p = n$2 & 255;\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p ^ _p$2) & 255);\n }\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < bytes.length) {\n $bound_check(bytes, i);\n const _p = bytes[i];\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p ^ _p$2) & 255);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, moonbitlang$core$buffer$$Buffer$contents(inverted));\n return;\n } else {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p + _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 29);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, n$2 & 255);\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, bytes);\n return;\n }\n}\nfunction zxch3n$flock$memcomparable$$KeyPart$encode_with_output(self, output) {\n switch (self.$tag) {\n case 0: {\n const _Bytes = self;\n const _bytes = _Bytes._0;\n const _bind = _bytes;\n zxch3n$flock$memcomparable$$encode_bytes(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), output);\n return;\n }\n case 1: {\n const _String = self;\n const _s = _String._0;\n zxch3n$flock$memcomparable$$encode_string(_s, output);\n return;\n }\n case 2: {\n const _Int = self;\n const _n = _Int._0;\n zxch3n$flock$memcomparable$$bigint_to_be_bytes(_n, output);\n return;\n }\n case 3: {\n const _Float = self;\n const _f = _Float._0;\n zxch3n$flock$memcomparable$$encode_float(_f, output);\n return;\n }\n case 4: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 38);\n return;\n }\n default: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 39);\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$Key$encode(self) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n const _arr = self.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n zxch3n$flock$memcomparable$$KeyPart$encode_with_output(part, output);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$buffer$$Buffer$contents(output);\n}\nfunction zxch3n$flock$memcomparable$$parse_slice(bytes, start) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n let i = start;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const b = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n const _p = 0;\n if (b === _p) {\n let _tmp;\n if (i < (bytes.end - bytes.start | 0)) {\n const _p$2 = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n const _p$3 = 255;\n _tmp = _p$2 === _p$3;\n } else {\n _tmp = false;\n }\n if (_tmp) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n i = i + 1 | 0;\n continue;\n } else {\n const _bind = moonbitlang$core$buffer$$Buffer$contents(output);\n return new Result$Ok$1$({ _0: moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), _1: i });\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n continue;\n } else {\n break;\n }\n }\n return new Result$Err$1$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n}\nfunction zxch3n$flock$memcomparable$$bytes_to_bigint(bytes) {\n let n = moonbitlang$core$bigint$$BigInt$from_int64($0L);\n let base = moonbitlang$core$bigint$$BigInt$from_int64($1L);\n let _tmp = (bytes.end - bytes.start | 0) - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const byte_val = moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$int$$Int$to_int64(moonbitlang$core$bytes$$BytesView$at(bytes, i)));\n n = moonbitlang$core$builtin$$Add$add$8$(n, moonbitlang$core$builtin$$Mul$mul$8$(base, byte_val));\n base = moonbitlang$core$builtin$$Mul$mul$8$(base, moonbitlang$core$bigint$$BigInt$from_int64($256L));\n _tmp = i - 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return n;\n}\nfunction zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(bytes, tag) {\n let _tmp;\n if (20 <= tag) {\n const _p = 20;\n const _p$2 = 8 & 255;\n _tmp = tag <= ((_p + _p$2 | 0) & 255);\n } else {\n _tmp = false;\n }\n if (_tmp) {\n const _p = 20;\n const n = (tag - _p | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n let _tmp$2;\n const _p = 20;\n const _p$2 = 8 & 255;\n if (((_p - _p$2 | 0) & 255) <= tag) {\n _tmp$2 = tag < 20;\n } else {\n _tmp$2 = false;\n }\n if (_tmp$2) {\n const _p$3 = 20;\n const n = (_p$3 - tag | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$4 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$5 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$4 ^ _p$5) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$3 = 11;\n if (tag === _p$3) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const _p$4 = 255;\n const n = (raw_length ^ _p$4) & 255;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$5 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$6 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$5 ^ _p$6) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$4 = 29;\n if (tag === _p$4) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const n = raw_length;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n return new Result$Err$2$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$decode_float(bytes, start) {\n if ((start + 8 | 0) > (bytes.end - bytes.start | 0)) {\n return new Result$Err$3$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const data = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < 8) {\n moonbitlang$core$array$$Array$push$2$(data, moonbitlang$core$bytes$$BytesView$at(bytes, start + i | 0));\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const bits = zxch3n$flock$memcomparable$$uint64_from_be_bytes(moonbitlang$core$bytes$$Bytes$from_array({ buf: data, start: 0, end: data.length }));\n const f = moonbitlang$core$builtin$$Eq$equal$18$(moonbitlang$core$builtin$$BitAnd$land$18$(bits, $_9223372036854775808L), $0L) ? zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_1L)) : zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_9223372036854775808L));\n return new Result$Ok$3$({ _0: f, _1: start + 8 | 0 });\n}\nfunction zxch3n$flock$memcomparable$$Key$decode(bytes) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n let i = 0;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const tag = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n if (tag === 2) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n const _bind$3 = zxch3n$flock$types$$Utf8Str$from_bytes_view(_data);\n if (_bind$3 === undefined) {\n return new Result$Err$4$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8);\n } else {\n const _Some = _bind$3;\n const _s = _Some;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$String(_s));\n }\n i = _next_i;\n } else {\n if (tag === 1) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Bytes(moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(_data))));\n i = _next_i;\n } else {\n if (tag >= 11 && tag <= 29) {\n const _bind = zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, i, undefined), tag);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _view = _bind$2._0;\n const _data = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Int(_data));\n i = (bytes.end - bytes.start | 0) - (_view.end - _view.start | 0) | 0;\n } else {\n if (tag === 33) {\n const _bind = zxch3n$flock$memcomparable$$decode_float(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Float(_data));\n i = _next_i;\n } else {\n if (tag === 38) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$False);\n } else {\n if (tag === 39) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$True);\n } else {\n return new Result$Err$4$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return new Result$Ok$4$(key);\n}\nfunction zxch3n$flock$memcomparable$$key_part_to_js_part(part) {\n switch (part.$tag) {\n case 0: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyJsPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyJsPart$String(zxch3n$flock$types$$Utf8Str$to_string(_s));\n }\n case 2: {\n const _Int = part;\n const _n = _Int._0;\n return new KeyJsPart$Number(moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$bigint$$BigInt$to_int64(_n)));\n }\n case 3: {\n const _Float = part;\n const _f = _Float._0;\n return new KeyJsPart$Number(_f);\n }\n case 4: {\n return KeyJsPart$False;\n }\n default: {\n return KeyJsPart$True;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$js_part_to_key_part(part) {\n switch (part.$tag) {\n case 2: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyPart$String(zxch3n$flock$types$$Utf8Str$from_string(_s));\n }\n case 0: {\n const _Number = part;\n const _n = _Number._0;\n return moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$double$$Double$to_int64(_n)) === _n ? new KeyPart$Int(moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$double$$Double$to_int64(_n))) : new KeyPart$Float(_n);\n }\n case 3: {\n return KeyPart$True;\n }\n default: {\n return KeyPart$False;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$encode_key(parts) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n const _len = parts.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = parts[_i];\n moonbitlang$core$array$$Array$push$15$(key.parts, zxch3n$flock$memcomparable$$js_part_to_key_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return zxch3n$flock$memcomparable$$Key$encode(key);\n}\nfunction zxch3n$flock$memcomparable$$decode_key(bytes) {\n let key;\n let _try_err;\n _L: {\n _L$2: {\n const _bind = zxch3n$flock$memcomparable$$Key$decode(moonbitlang$core$bytes$$Bytes$sub$46$inner(bytes, 0, bytes.length));\n if (_bind.$tag === 1) {\n const _ok = _bind;\n key = _ok._0;\n } else {\n const _err = _bind;\n const _tmp = _err._0;\n _try_err = _tmp;\n break _L$2;\n }\n break _L;\n }\n key = moonbitlang$core$abort$$abort$0$(\"Failed to decode key\");\n }\n const parts = moonbitlang$core$array$$Array$new$46$inner$14$(0);\n const _arr = key.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n moonbitlang$core$array$$Array$push$14$(parts, zxch3n$flock$memcomparable$$key_part_to_js_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return parts;\n}\nexport { zxch3n$flock$memcomparable$$encode_key as encode_key, zxch3n$flock$memcomparable$$decode_key as decode_key }\n","import { decode_key, encode_key } from \"./memcomparable\";\nimport type { KeyPart } from \"./types\";\n\ntype EncodedKey = Uint8Array;\n\ntype KeyJsPart =\n | { $tag: 0; _0: number }\n | { $tag: 1; _0: string }\n | { $tag: 2; _0: unknown }\n | { $tag: 3 }\n | { $tag: 4 };\n\nfunction assertValidKeyPart(part: KeyPart): KeyJsPart {\n if (typeof part === \"number\") {\n if (!Number.isFinite(part)) {\n throw new TypeError(\"Key parts must be finite numbers\");\n }\n return { $tag: 0, _0: part };\n }\n if (typeof part === \"string\") {\n return { $tag: 1, _0: part };\n }\n if (part === true) {\n return { $tag: 3 };\n }\n if (part === false) {\n return { $tag: 4 };\n }\n throw new TypeError(\"Key parts must be strings, numbers, or booleans\");\n}\n\nfunction parseBytesLike(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value && typeof value === \"object\") {\n const buf = (value as { buf?: unknown }).buf;\n if (buf instanceof Uint8Array) {\n const start = (value as { start?: number }).start ?? 0;\n const end = (value as { end?: number }).end ?? buf.length;\n return buf.subarray(start, end);\n }\n }\n throw new TypeError(\"Invalid bytes payload in memcomparable decode\");\n}\n\nfunction fromJsPart(part: unknown): KeyPart {\n const tag = (part as { $tag?: number } | null)?.$tag;\n switch (tag) {\n case 0:\n return (part as { _0: number })._0;\n case 1:\n return (part as { _0: string })._0;\n case 3:\n return true;\n case 4:\n return false;\n case 2:\n // Bytes are not part of the public key surface; surface them as a binary blob for diagnostics.\n return parseBytesLike((part as { _0: unknown })._0) as unknown as KeyPart;\n default:\n throw new TypeError(\"Unsupported memcomparable key part\");\n }\n}\n\nexport function encodeKeyParts(parts: KeyPart[]): EncodedKey {\n const normalized = parts.map(assertValidKeyPart);\n return encode_key(normalized) as EncodedKey;\n}\n\nexport function decodeKeyParts(bytes: EncodedKey): KeyPart[] {\n const decoded = decode_key(bytes as unknown as Uint8Array) as Array<unknown>;\n return decoded.map((part) => fromJsPart(part));\n}\n\nexport function compareBytes(a: Uint8Array, b: Uint8Array): number {\n const min = Math.min(a.length, b.length);\n for (let i = 0; i < min; i += 1) {\n if (a[i] !== b[i]) {\n return a[i] < b[i] ? -1 : 1;\n }\n }\n if (a.length === b.length) {\n return 0;\n }\n return a.length < b.length ? -1 : 1;\n}\n\nexport function prefixUpperBound(bytes: Uint8Array): Uint8Array | undefined {\n if (bytes.length === 0) {\n return undefined;\n }\n const data = Array.from(bytes);\n for (let i = data.length - 1; i >= 0; i -= 1) {\n const current = data[i];\n if (current < 0xff) {\n data[i] = current + 1;\n return new Uint8Array(data.slice(0, i + 1));\n }\n }\n return undefined;\n}\n\nexport function keyToString(parts: KeyPart[]): string {\n return JSON.stringify(parts);\n}\n","import { openStore, type UniStoreConnection } from \"@loro-dev/unisqlite\";\nimport { computeDigest, type DigestRow } from \"./digest\";\nimport {\n compareBytes,\n decodeKeyParts,\n encodeKeyParts,\n keyToString,\n prefixUpperBound,\n} from \"./key-encoding\";\nimport type {\n EntryClock,\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportDecision,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n EventListener,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVector,\n VersionVectorEntry,\n} from \"./types\";\n\ntype ClockRow = {\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype KvRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype ExportQueryRow = KvRow;\n\ntype PutOperation = {\n key: KeyPart[];\n payload: ExportPayload;\n now?: number;\n skipSameValue: boolean;\n source: string;\n clock?: EntryClock;\n eventSink?: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }>;\n};\n\nconst textEncoder = new TextEncoder();\nconst structuredCloneFn: (<T>(value: T) => T) | undefined =\n (globalThis as typeof globalThis & { structuredClone?: <T>(value: T) => T }).structuredClone;\n\nfunction utf8ByteLength(value: string): number {\n return textEncoder.encode(value).length;\n}\n\nfunction isValidPeerId(peerId: unknown): peerId is string {\n return typeof peerId === \"string\" && utf8ByteLength(peerId) < 128;\n}\n\nfunction createRandomPeerId(): string {\n const id = new Uint8Array(32);\n const cryptoAny = typeof crypto !== \"undefined\" ? (crypto as any) : undefined;\n if (cryptoAny?.getRandomValues) {\n cryptoAny.getRandomValues(id);\n } else if (cryptoAny?.randomBytes) {\n const buf: Uint8Array = cryptoAny.randomBytes(32);\n id.set(buf);\n } else {\n for (let i = 0; i < 32; i += 1) {\n id[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(id, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction normalizePeerId(peerId?: string): string {\n if (peerId === undefined) {\n return createRandomPeerId();\n }\n if (!isValidPeerId(peerId)) {\n throw new TypeError(\"peerId must be a UTF-8 string under 128 bytes\");\n }\n return peerId;\n}\n\nfunction cloneJson<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n if (structuredCloneFn) {\n return structuredCloneFn(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction cloneMetadata(metadata: unknown): MetadataMap | undefined {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n return undefined;\n }\n return cloneJson(metadata as MetadataMap);\n}\n\nfunction assignPayload(target: ExportPayload, source?: ExportPayload | void): void {\n if (!source || typeof source !== \"object\") {\n return;\n }\n if (\"data\" in source) {\n const value = source.data;\n target.data = value === undefined ? undefined : cloneJson(value);\n }\n if (\"metadata\" in source) {\n target.metadata = cloneMetadata(source.metadata);\n }\n}\n\nfunction clonePayload(payload: ExportPayload | undefined): ExportPayload {\n const result: ExportPayload = {};\n assignPayload(result, payload);\n return result;\n}\n\nfunction mergePayload(base: ExportPayload, update?: ExportPayload | void): ExportPayload {\n const result = clonePayload(base);\n assignPayload(result, update);\n return result;\n}\n\nfunction buildRecord(clock: EntryClock, payload: ExportPayload): ExportRecord {\n const record: ExportRecord = {\n c: formatClock(clock),\n };\n if (payload.data !== undefined) {\n record.d = cloneJson(payload.data);\n }\n const metadata = cloneMetadata(payload.metadata);\n if (metadata !== undefined) {\n record.m = metadata;\n }\n return record;\n}\n\nfunction normalizeImportDecision(decision: ImportDecision): { accept: boolean; reason?: string } {\n if (!decision || typeof decision !== \"object\") {\n return { accept: true };\n }\n if (\"accept\" in decision) {\n if (!decision.accept) {\n return { accept: false, reason: decision.reason ?? \"rejected\" };\n }\n return { accept: true };\n }\n return { accept: true };\n}\n\nfunction isExportOptions(arg: VersionVector | ExportOptions | undefined): arg is ExportOptions {\n return (\n typeof arg === \"object\" &&\n arg !== null &&\n (Object.prototype.hasOwnProperty.call(arg, \"hooks\") ||\n Object.prototype.hasOwnProperty.call(arg, \"from\") ||\n Object.prototype.hasOwnProperty.call(arg, \"pruneTombstonesBefore\") ||\n Object.prototype.hasOwnProperty.call(arg, \"peerId\"))\n );\n}\n\nfunction isImportOptions(arg: ExportBundle | ImportOptions): arg is ImportOptions {\n return typeof arg === \"object\" && arg !== null && Object.prototype.hasOwnProperty.call(arg, \"bundle\");\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(json);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed as MetadataMap;\n }\n } catch {\n // ignored\n }\n return undefined;\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nfunction parseClockString(raw: string): EntryClock {\n const parts = raw.split(\",\");\n if (parts.length < 3) {\n return { physicalTime: 0, logicalCounter: 0, peerId: \"\" };\n }\n const physical = Number(parts[0]);\n const logical = Number(parts[1]);\n const peerId = parts.slice(2).join(\",\");\n return {\n physicalTime: Number.isFinite(physical) ? physical : 0,\n logicalCounter: Number.isFinite(logical) ? Math.trunc(logical) : 0,\n peerId: isValidPeerId(peerId) ? peerId : \"\",\n };\n}\n\nfunction formatClock(clock: EntryClock): string {\n return `${clock.physicalTime},${clock.logicalCounter},${clock.peerId}`;\n}\n\nfunction compareClock(a: EntryClock, b: EntryClock): number {\n if (a.physicalTime !== b.physicalTime) {\n return a.physicalTime > b.physicalTime ? 1 : -1;\n }\n if (a.logicalCounter !== b.logicalCounter) {\n return a.logicalCounter > b.logicalCounter ? 1 : -1;\n }\n if (a.peerId === b.peerId) {\n return 0;\n }\n return a.peerId > b.peerId ? 1 : -1;\n}\n\nfunction normalizeVersionEntry(entry?: VersionVectorEntry): VersionVectorEntry | undefined {\n if (!entry) return undefined;\n const { physicalTime, logicalCounter } = entry;\n if (!Number.isFinite(physicalTime) || !Number.isFinite(logicalCounter)) {\n return undefined;\n }\n return {\n physicalTime: physicalTime,\n logicalCounter: Math.trunc(logicalCounter),\n };\n}\n\nfunction keyMatchesPrefix(key: Uint8Array, prefix: Uint8Array): boolean {\n if (prefix.length === 0) {\n return true;\n }\n if (key.length < prefix.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i += 1) {\n if (key[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n}\n\nasync function toDigestRows(rows: KvRow[]): Promise<DigestRow[]> {\n return rows.map((row) => ({\n key: row.key,\n data: row.data,\n metadata: row.metadata,\n physical: row.physical,\n logical: row.logical,\n peer: row.peer,\n }));\n}\n\nexport type FlockSQLiteOptions = {\n path: string;\n peerId?: string;\n connection?: UniStoreConnection;\n tablePrefix?: string;\n};\n\ntype TableNames = {\n kv: string;\n overridden: string;\n meta: string;\n idxKvPeerClock: string;\n idxOverriddenKey: string;\n idxOverriddenSupersededAt: string;\n};\n\nfunction normalizeTablePrefix(prefix?: string): string {\n if (!prefix) return \"\";\n if (typeof prefix !== \"string\") {\n throw new TypeError(\"tablePrefix must be a string\");\n }\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(prefix)) {\n throw new TypeError(\"tablePrefix must start with a letter/underscore and use only letters, digits, or underscores\");\n }\n return prefix;\n}\n\nfunction buildTableNames(prefix: string): TableNames {\n return {\n kv: `${prefix}kv`,\n overridden: `${prefix}overridden`,\n meta: `${prefix}meta`,\n idxKvPeerClock: `${prefix}idx_kv_peer_clock_key`,\n idxOverriddenKey: `${prefix}idx_overridden_key`,\n idxOverriddenSupersededAt: `${prefix}idx_overridden_superseded_at`,\n };\n}\n\nexport class FlockSQLite {\n private db: UniStoreConnection;\n private peerIdValue: string;\n private vv: Map<string, VersionVectorEntry>;\n private maxHlc: { physicalTime: number; logicalCounter: number };\n private listeners: Set<EventListener>;\n private tables: TableNames;\n\n private constructor(db: UniStoreConnection, peerId: string, vv: Map<string, VersionVectorEntry>, maxHlc: { physicalTime: number; logicalCounter: number }, tables: TableNames) {\n this.db = db;\n this.peerIdValue = peerId;\n this.vv = vv;\n this.maxHlc = maxHlc;\n this.listeners = new Set();\n this.tables = tables;\n }\n\n static async open(options: FlockSQLiteOptions): Promise<FlockSQLite> {\n const db = options.connection ?? (await openStore({ path: options.path }));\n const prefix = normalizeTablePrefix(options.tablePrefix);\n const tables = buildTableNames(prefix);\n await FlockSQLite.ensureSchema(db, tables);\n const peerId = await FlockSQLite.resolvePeerId(db, tables, options.peerId);\n const { vv, maxHlc } = await FlockSQLite.loadVersionState(db, tables);\n return new FlockSQLite(db, peerId, vv, maxHlc, tables);\n }\n\n static async fromJson(options: FlockSQLiteOptions & { bundle: ExportBundle }): Promise<FlockSQLite> {\n const flock = await FlockSQLite.open(options);\n await flock.importJson(options.bundle);\n return flock;\n }\n\n async close(): Promise<void> {\n await this.db.close();\n }\n\n private static async ensureSchema(db: UniStoreConnection, tables: TableNames): Promise<void> {\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.kv} (\n key BLOB PRIMARY KEY,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL\n )`);\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.overridden} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n key BLOB,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL,\n superseded_at INTEGER DEFAULT (unixepoch())\n )`);\n await db.exec(`CREATE TABLE IF NOT EXISTS ${tables.meta} (peer_id TEXT)`);\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxKvPeerClock} ON ${tables.kv}(peer, physical, logical, key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenKey} ON ${tables.overridden}(key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenSupersededAt} ON ${tables.overridden}(superseded_at)`,\n );\n }\n\n private static async resolvePeerId(db: UniStoreConnection, tables: TableNames, provided?: string): Promise<string> {\n const normalized = normalizePeerId(provided);\n const rows = await db.query<{ peer_id: string }>(`SELECT peer_id FROM ${tables.meta} LIMIT 1`);\n if (rows.length > 0 && typeof rows[0]?.peer_id === \"string\") {\n const existing = rows[0].peer_id;\n if (provided && existing !== normalized) {\n await db.run(`UPDATE ${tables.meta} SET peer_id = ?`, [normalized]);\n return normalized;\n }\n return normalizePeerId(existing);\n }\n await db.exec(`DELETE FROM ${tables.meta}`);\n await db.run(`INSERT INTO ${tables.meta}(peer_id) VALUES (?)`, [normalized]);\n return normalized;\n }\n\n private static async loadVersionState(db: UniStoreConnection, tables: TableNames): Promise<{ vv: Map<string, VersionVectorEntry>; maxHlc: { physicalTime: number; logicalCounter: number } }> {\n const vv = new Map<string, VersionVectorEntry>();\n const rows = await db.query<ClockRow>(\n `SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${tables.kv} GROUP BY peer`,\n );\n for (const row of rows) {\n if (!row || typeof row.peer !== \"string\") continue;\n const entry = normalizeVersionEntry({\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n });\n if (entry) {\n vv.set(row.peer, entry);\n }\n }\n const maxRow = await db.query<ClockRow>(\n `SELECT physical, logical FROM ${tables.kv} ORDER BY physical DESC, logical DESC LIMIT 1`,\n );\n const first = maxRow[0];\n const maxHlc =\n first && Number.isFinite(first.physical) && Number.isFinite(first.logical)\n ? { physicalTime: Number(first.physical), logicalCounter: Number(first.logical) }\n : { physicalTime: 0, logicalCounter: 0 };\n return { vv, maxHlc };\n }\n\n private bumpVersion(clock: EntryClock): void {\n const current = this.vv.get(clock.peerId);\n if (!current || compareClock(clock, { ...current, peerId: clock.peerId }) > 0) {\n this.vv.set(clock.peerId, {\n physicalTime: clock.physicalTime,\n logicalCounter: clock.logicalCounter,\n });\n }\n if (\n this.maxHlc.physicalTime < clock.physicalTime ||\n (this.maxHlc.physicalTime === clock.physicalTime &&\n this.maxHlc.logicalCounter < clock.logicalCounter)\n ) {\n this.maxHlc = { physicalTime: clock.physicalTime, logicalCounter: clock.logicalCounter };\n }\n }\n\n private allocateClock(now?: number): EntryClock {\n const timestamp = now ?? Date.now();\n let physical = this.maxHlc.physicalTime;\n let logical = this.maxHlc.logicalCounter;\n if (timestamp > physical) {\n physical = timestamp;\n logical = 0;\n } else {\n logical = logical + 1;\n }\n return { physicalTime: physical, logicalCounter: logical, peerId: this.peerIdValue };\n }\n\n private async applyOperation(operation: PutOperation): Promise<boolean> {\n const keyBytes = encodeKeyParts(operation.key);\n const clock = operation.clock ?? this.allocateClock(operation.now);\n const payload = mergePayload(operation.payload, {});\n const dataJson = payload.data === undefined ? null : JSON.stringify(payload.data);\n const metadataJson = payload.metadata === undefined ? null : JSON.stringify(payload.metadata);\n let applied = false;\n\n await this.db.asyncTransaction(async (tx) => {\n const existingRows = await tx.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n if (existingRows.length > 0) {\n const existing = existingRows[0];\n const existingClock: EntryClock = {\n physicalTime: Number(existing.physical ?? 0),\n logicalCounter: Number(existing.logical ?? 0),\n peerId: String(existing.peer ?? \"\"),\n };\n const cmp = compareClock(clock, existingClock);\n const existingData = existing.data ?? null;\n const existingMeta = existing.metadata ?? null;\n const samePayload =\n operation.skipSameValue &&\n dataJson === existingData &&\n metadataJson === existingMeta;\n if (samePayload) {\n return;\n }\n if (cmp < 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [keyBytes, dataJson, metadataJson, clock.physicalTime, clock.logicalCounter, clock.peerId],\n );\n return;\n }\n if (cmp > 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [\n keyBytes,\n existing.data ?? null,\n existing.metadata ?? null,\n existing.physical ?? 0,\n existing.logical ?? 0,\n existing.peer ?? \"\",\n ],\n );\n } else {\n return;\n }\n }\n await tx.run(\n `INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(key) DO UPDATE SET\n data=excluded.data,\n metadata=excluded.metadata,\n physical=excluded.physical,\n logical=excluded.logical,\n peer=excluded.peer`,\n [keyBytes, dataJson, metadataJson, clock.physicalTime, clock.logicalCounter, clock.peerId],\n );\n applied = true;\n });\n\n this.bumpVersion(clock);\n if (applied) {\n const eventPayload = {\n key: operation.key.slice(),\n payload,\n source: operation.source,\n };\n if (operation.eventSink) {\n operation.eventSink.push(eventPayload);\n } else {\n this.emitEvents(operation.source, [eventPayload]);\n }\n }\n return applied;\n }\n\n private emitEvents(\n source: string,\n events: Array<{ key: KeyPart[]; payload: ExportPayload }>,\n ): void {\n if (this.listeners.size === 0 || events.length === 0) {\n return;\n }\n const batch: EventBatch = {\n source,\n events: events.map((event): Event => ({\n key: cloneJson(event.key),\n value: event.payload.data !== undefined ? cloneJson(event.payload.data) : undefined,\n metadata: cloneMetadata(event.payload.metadata),\n payload: clonePayload(event.payload),\n })),\n };\n this.listeners.forEach((listener) => {\n listener(batch);\n });\n }\n\n async put(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: { data: cloneJson(value) },\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async putWithMeta(key: KeyPart[], value: Value, options: PutWithMetaOptions = {}): Promise<void> {\n const basePayload: ExportPayload = { data: cloneJson(value) };\n if (options.metadata) {\n basePayload.metadata = cloneMetadata(options.metadata);\n }\n const hooks = options.hooks?.transform;\n if (hooks) {\n const working = clonePayload(basePayload);\n const transformed = await hooks({ key: key.slice(), now: options.now }, working);\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n if (finalPayload.data === undefined) {\n throw new TypeError(\"putWithMeta requires a data value\");\n }\n await this.applyOperation({\n key,\n payload: finalPayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n return;\n }\n await this.applyOperation({\n key,\n payload: basePayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async delete(key: KeyPart[], now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: {},\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async set(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.put(key, value, now);\n }\n\n async setPeerId(peerId: string): Promise<void> {\n const normalized = normalizePeerId(peerId);\n await this.db.exec(`DELETE FROM ${this.tables.meta}`);\n await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`, [normalized]);\n this.peerIdValue = normalized;\n }\n\n async get(key: KeyPart[]): Promise<Value | undefined> {\n const keyBytes = encodeKeyParts(key);\n const rows = await this.db.query<KvRow>(\n `SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n const row = rows[0];\n if (!row) return undefined;\n return parseData(row.data);\n }\n\n async getMvr(key: KeyPart[]): Promise<Value[]> {\n const rows = await this.scan({ prefix: key });\n const values: Value[] = [];\n for (const row of rows) {\n if (row.raw.d !== true) continue;\n if (row.key.length !== key.length + 1) continue;\n values.push(row.key[row.key.length - 1]);\n }\n return values;\n }\n\n async putMvr(key: KeyPart[], value: Value, now?: number): Promise<void> {\n if (value === null || typeof value === \"object\") {\n throw new TypeError(\"putMvr only accepts scalar values\");\n }\n const existing = await this.scan({ prefix: key });\n for (const row of existing) {\n if (row.raw.d === true) {\n await this.delete(row.key, now);\n }\n }\n const composite = key.slice();\n composite.push(value);\n await this.put(composite, true, now);\n }\n\n private buildScanBounds(\n options: ScanOptions,\n ): { where: string[]; params: unknown[]; empty?: boolean; postFilter?: (bytes: Uint8Array) => boolean } {\n let lower: { value: Uint8Array; inclusive: boolean } | undefined;\n let upper: { value: Uint8Array; inclusive: boolean } | undefined;\n let prefixFilter: Uint8Array | undefined;\n\n const applyLower = (candidate: { value: Uint8Array; inclusive: boolean }) => {\n if (!lower) {\n lower = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, lower.value);\n if (cmp > 0) {\n lower = candidate;\n } else if (cmp === 0) {\n lower = { value: lower.value, inclusive: lower.inclusive && candidate.inclusive };\n }\n };\n\n const applyUpper = (candidate: { value: Uint8Array; inclusive: boolean }) => {\n if (!upper) {\n upper = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, upper.value);\n if (cmp < 0) {\n upper = candidate;\n } else if (cmp === 0) {\n upper = { value: upper.value, inclusive: upper.inclusive && candidate.inclusive };\n }\n };\n\n try {\n if (options.prefix) {\n const prefixBytes = encodeKeyParts(options.prefix);\n prefixFilter = prefixBytes;\n applyLower({ value: prefixBytes, inclusive: true });\n const upperPrefix = prefixUpperBound(prefixBytes);\n if (upperPrefix) {\n applyUpper({ value: upperPrefix, inclusive: false });\n }\n }\n if (options.start && options.start.kind !== \"unbounded\") {\n applyLower({\n value: encodeKeyParts(options.start.key),\n inclusive: options.start.kind === \"inclusive\",\n });\n }\n if (options.end && options.end.kind !== \"unbounded\") {\n applyUpper({\n value: encodeKeyParts(options.end.key),\n inclusive: options.end.kind === \"inclusive\",\n });\n }\n } catch {\n return { where: [], params: [], empty: true };\n }\n\n const where: string[] = [];\n const params: unknown[] = [];\n if (lower) {\n where.push(`key ${lower.inclusive ? \">=\" : \">\"} ?`);\n params.push(lower.value);\n }\n if (upper) {\n where.push(`key ${upper.inclusive ? \"<=\" : \"<\"} ?`);\n params.push(upper.value);\n }\n const postFilter = prefixFilter\n ? ((pf: Uint8Array) => (bytes: Uint8Array) => keyMatchesPrefix(bytes, pf))(prefixFilter)\n : undefined;\n return { where, params, postFilter };\n }\n\n async scan(options: ScanOptions = {}): Promise<ScanRow[]> {\n const bounds = this.buildScanBounds(options);\n if (bounds.empty) {\n return [];\n }\n const clauses = bounds.where.length > 0 ? `WHERE ${bounds.where.join(\" AND \")}` : \"\";\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clauses} ORDER BY key ASC`,\n bounds.params as [],\n );\n const result: ScanRow[] = [];\n for (const row of rows) {\n const keyBytes = row.key;\n if (bounds.postFilter && !bounds.postFilter(keyBytes)) {\n continue;\n }\n const key = decodeKeyParts(keyBytes);\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const raw = buildRecord(clock, payload);\n result.push({ key, raw, value: payload.data });\n }\n return result;\n }\n\n version(): VersionVector {\n const vv: VersionVector = {};\n for (const [peer, clock] of this.vv.entries()) {\n vv[peer] = { ...clock };\n }\n return vv;\n }\n\n peerId(): string {\n return this.peerIdValue;\n }\n\n getMaxPhysicalTime(): number {\n return this.maxHlc.physicalTime;\n }\n\n private async exportInternal(from?: VersionVector, pruneTombstonesBefore?: number, peerId?: string): Promise<ExportBundle> {\n const normalizedFrom = new Map<string, VersionVectorEntry>();\n if (from) {\n for (const [peer, entry] of Object.entries(from)) {\n const normalized = normalizeVersionEntry(entry);\n if (normalized) {\n normalizedFrom.set(peer, normalized);\n }\n }\n }\n\n const entries: Record<string, ExportRecord> = {};\n\n const peers = peerId ? [peerId] : Array.from(this.vv.keys());\n const peersToExport: Array<{ peer: string; fromEntry?: VersionVectorEntry }> = [];\n for (const peer of peers) {\n const localEntry = this.vv.get(peer);\n const fromEntry = normalizedFrom.get(peer);\n if (\n localEntry &&\n fromEntry &&\n (localEntry.physicalTime < fromEntry.physicalTime ||\n (localEntry.physicalTime === fromEntry.physicalTime &&\n localEntry.logicalCounter <= fromEntry.logicalCounter))\n ) {\n // Remote is already up to date for this peer.\n continue;\n }\n peersToExport.push({ peer, fromEntry });\n }\n\n if (peerId && peersToExport.every((p) => p.peer !== peerId)) {\n peersToExport.push({ peer: peerId, fromEntry: normalizedFrom.get(peerId) });\n }\n\n if (peersToExport.length === 0) {\n return { version: 0, entries };\n }\n\n for (const target of peersToExport) {\n const params: unknown[] = [target.peer];\n let clause = \"WHERE peer = ?\";\n if (target.fromEntry) {\n clause += \" AND physical >= ?\";\n params.push(target.fromEntry.physicalTime);\n }\n const rows = await this.db.query<ExportQueryRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clause} ORDER BY physical, logical, key`,\n params as [],\n );\n for (const row of rows) {\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const fromEntry = target.fromEntry;\n if (\n fromEntry &&\n (clock.physicalTime < fromEntry.physicalTime ||\n (clock.physicalTime === fromEntry.physicalTime &&\n clock.logicalCounter <= fromEntry.logicalCounter))\n ) {\n continue;\n }\n if (\n pruneTombstonesBefore !== undefined &&\n Number.isFinite(pruneTombstonesBefore) &&\n row.data === null &&\n clock.physicalTime < pruneTombstonesBefore\n ) {\n continue;\n }\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const keyParts = decodeKeyParts(row.key);\n entries[keyToString(keyParts)] = buildRecord(clock, payload);\n }\n }\n return { version: 0, entries };\n }\n\n private async exportWithHooks(options: ExportOptions): Promise<ExportBundle> {\n const base = await this.exportInternal(options.from, options.pruneTombstonesBefore, options.peerId);\n const transform = options.hooks?.transform;\n if (!transform) {\n return base;\n }\n const result: ExportBundle = { version: base.version, entries: {} };\n for (const [key, record] of Object.entries(base.entries)) {\n const clock = parseClockString(record.c);\n const context = {\n key: JSON.parse(key) as KeyPart[],\n clock,\n raw: { ...record },\n };\n const basePayload: ExportPayload = {};\n if (record.d !== undefined) basePayload.data = cloneJson(record.d);\n const meta = cloneMetadata(record.m);\n if (meta !== undefined) basePayload.metadata = meta;\n const working = clonePayload(basePayload);\n const transformed = await transform(context, working);\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n result.entries[key] = buildRecord(clock, finalPayload);\n }\n return result;\n }\n\n exportJson(): Promise<ExportBundle>;\n exportJson(from: VersionVector): Promise<ExportBundle>;\n exportJson(from: VersionVector, pruneTombstonesBefore: number): Promise<ExportBundle>;\n exportJson(options: ExportOptions): Promise<ExportBundle>;\n exportJson(arg?: VersionVector | ExportOptions, pruneTombstonesBefore?: number): Promise<ExportBundle> {\n if (isExportOptions(arg)) {\n return this.exportWithHooks(arg);\n }\n return this.exportInternal(arg, pruneTombstonesBefore);\n }\n\n private async importInternal(bundle: ExportBundle): Promise<ImportReport> {\n if (bundle.version !== 0) {\n throw new TypeError(\"Unsupported bundle version\");\n }\n let accepted = 0;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n const appliedEvents: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }> = [];\n for (const [keyString, record] of Object.entries(bundle.entries)) {\n let keyParts: KeyPart[];\n try {\n const parsed = JSON.parse(keyString);\n keyParts = Array.isArray(parsed) ? (parsed as KeyPart[]) : [];\n } catch {\n skipped.push({ key: [], reason: \"invalid key\" });\n continue;\n }\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) payload.data = cloneJson(record.d);\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n accepted += 1;\n await this.applyOperation({\n key: keyParts,\n payload,\n clock,\n skipSameValue: false,\n source: \"import\",\n eventSink: appliedEvents,\n });\n }\n if (appliedEvents.length > 0) {\n this.emitEvents(\"import\", appliedEvents);\n }\n return { accepted, skipped };\n }\n\n async importJson(bundle: ExportBundle): Promise<ImportReport>;\n async importJson(options: ImportOptions): Promise<ImportReport>;\n async importJson(arg: ExportBundle | ImportOptions): Promise<ImportReport> {\n if (isImportOptions(arg)) {\n const preprocess = arg.hooks?.preprocess;\n const working = preprocess ? { version: arg.bundle.version, entries: { ...arg.bundle.entries } } : arg.bundle;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n if (preprocess) {\n for (const [key, record] of Object.entries(working.entries)) {\n const contextKey = JSON.parse(key) as KeyPart[];\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) payload.data = cloneJson(record.d);\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n const decision = await preprocess(\n { key: contextKey, clock, raw: record },\n clonePayload(payload),\n );\n const normalized = normalizeImportDecision(decision);\n if (!normalized.accept) {\n skipped.push({ key: contextKey, reason: normalized.reason ?? \"rejected\" });\n delete working.entries[key];\n } else {\n working.entries[key] = buildRecord(clock, payload);\n }\n }\n }\n const baseReport = await this.importInternal(working);\n return { accepted: baseReport.accepted, skipped: skipped.concat(baseReport.skipped) };\n }\n return this.importInternal(arg);\n }\n\n async importJsonStr(json: string): Promise<ImportReport> {\n const parsed = JSON.parse(json) as ExportBundle;\n return this.importJson(parsed);\n }\n\n async digest(): Promise<string> {\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`,\n );\n const digestRows = await toDigestRows(rows);\n return computeDigest(digestRows);\n }\n\n async kvToJson(): Promise<ExportBundle> {\n return this.exportInternal();\n }\n\n async merge(other: FlockSQLite): Promise<void> {\n const bundle = await other.exportJson();\n await this.importJson(bundle);\n }\n\n static async checkConsistency(a: FlockSQLite, b: FlockSQLite): Promise<boolean> {\n const [digestA, digestB] = await Promise.all([a.digest(), b.digest()]);\n return digestA === digestB;\n }\n\n checkInvariants(): void {\n // Placeholder: SQLite-backed implementation does not yet expose internal invariants.\n }\n\n subscribe(listener: (batch: EventBatch) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n}\n\nexport type {\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVector,\n VersionVectorEntry,\n};\n\nexport { FlockSQLite as Flock };\nexport type { EventListener };\n"],"mappings":"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"}