@doync/client 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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/adapter.cjs +1 -0
  4. package/dist/adapter.d.cts +86 -0
  5. package/dist/adapter.d.cts.map +1 -0
  6. package/dist/adapter.d.ts +86 -0
  7. package/dist/adapter.d.ts.map +1 -0
  8. package/dist/adapter.js +2 -0
  9. package/dist/adapter.js.map +1 -0
  10. package/dist/client-C6jAdhbe.cjs +15 -0
  11. package/dist/client-CNyLMCw0.d.ts +812 -0
  12. package/dist/client-CNyLMCw0.d.ts.map +1 -0
  13. package/dist/client-ClV8ce6X.js +16 -0
  14. package/dist/client-ClV8ce6X.js.map +1 -0
  15. package/dist/client-DHXO0dbf.d.cts +812 -0
  16. package/dist/client-DHXO0dbf.d.cts.map +1 -0
  17. package/dist/index.cjs +0 -0
  18. package/dist/index.d.cts +2 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +0 -0
  21. package/dist/internal.cjs +1 -0
  22. package/dist/internal.d.cts +69 -0
  23. package/dist/internal.d.cts.map +1 -0
  24. package/dist/internal.d.ts +69 -0
  25. package/dist/internal.d.ts.map +1 -0
  26. package/dist/internal.js +2 -0
  27. package/dist/internal.js.map +1 -0
  28. package/package.json +79 -0
  29. package/src/adapter.ts +25 -0
  30. package/src/client-mutation-registry.ts +31 -0
  31. package/src/client.ts +100 -0
  32. package/src/engine.ts +3322 -0
  33. package/src/identity.ts +41 -0
  34. package/src/index.ts +36 -0
  35. package/src/internal.ts +37 -0
  36. package/src/migrate.ts +156 -0
  37. package/src/mutations.ts +96 -0
  38. package/src/port.ts +74 -0
  39. package/src/raw-read.ts +135 -0
  40. package/src/replica/db/0000_replica_engine_v0.sql +20 -0
  41. package/src/replica/db/0001_release_stamps.sql +6 -0
  42. package/src/replica/db/meta/0000_snapshot.json +129 -0
  43. package/src/replica/db/meta/0001_snapshot.json +167 -0
  44. package/src/replica/db/meta/_journal.json +20 -0
  45. package/src/replica/db/schema.ts +67 -0
  46. package/src/replica/index.ts +185 -0
  47. package/src/replica/meta.ts +26 -0
  48. package/src/replica/stamps.ts +102 -0
  49. package/src/replica/track.ts +190 -0
  50. package/src/socket-reconnect.ts +242 -0
  51. package/src/socket.ts +44 -0
  52. package/src/sql-raw.d.ts +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-CNyLMCw0.d.ts","names":["Input","Output","StandardTypedV1","Props","version","vendor","types","Types","input","output","InferInput","Schema","NonNullable","InferOutput","StandardSchemaV1","validate","value","Options","options","Result","Promise","SuccessResult","FailureResult","issues","libraryOptions","Record","ReadonlyArray","Issue","message","path","PropertyKey","PathSegment","key","StandardJSONSchemaV1","jsonSchema","Converter","Target","target"],"sources":["../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../src/port.ts","../src/mutations.ts","../src/socket.ts","../src/replica/meta.ts","../src/replica/stamps.ts","../src/replica/index.ts","../src/engine.ts","../src/client.ts"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import{assertWireRepresentable as e,canonicalizeArgsBinary as t,declaredSchemaVersion as n,decodeArgs as r,decodeImageValue as i,decodePkValue as a,encodeArgs as o,flattenMutations as s,isBoundQuery as c,isInternalTable as l,isSqlIdentifier as u,tablePrimaryKey as d}from"@doync/core/internal";import{SQLiteParserError as f,parse as ee,parseAll as te,unparse as ne}from"@doync/sqlite-parser";function p(e){let t={};for(let[n,r]of Object.entries(s(e)))t[n]={args:r.args,handler:(e,t,n)=>r.body(e,t,n)};return t}function m(e){return typeof e==`function`?{handler:e}:e}function re(n,r){e(r,`mutation args`,{allowBinary:!0});let i=t(r),a=n[`~standard`].validate(i);if(a instanceof Promise)throw Error(`doync: async standard-schema validation is not supported for mutation args — use a synchronous validator`);if(a.issues!==void 0){let e=a.issues.map(e=>{let t=(e.path??[]).map(e=>String(typeof e==`object`?e.key:e)).join(`.`);return t===``?e.message:`${t}: ${e.message}`}).join(`; `);throw Error(`doync: mutation args failed validation — ${e}`)}return a.value}var ie=class{host;statement;identity;#e=[];#t=0;#n=new Set;#r;constructor(e,t,n,r){this.host=e,this.statement=t,this.identity=n,this.#r=r}get readSet(){return this.identity===void 0?void 0:this.host.readSet()}status(){return this.#r}updateStatus(e){return this.#r.status===e.status&&this.#r.error===e.error?!1:(this.#r=e,!0)}recompute(){let e=this.host.run(this.statement);return ae(e,this.#e)?!1:(this.#e=e,this.#t+=1,!0)}rawRows(){return this.#e}get generation(){return this.#t}onChange(e){return this.#n.add(e),()=>this.#n.delete(e)}notify(){for(let e of this.#n)e()}};function ae(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n],a=Object.keys(r);if(a.length!==Object.keys(i).length)return!1;for(let e of a)if(!oe(r[e]??null,i[e]??null))return!1}return!0}function oe(e,t){if(e===t)return!0;if(e instanceof ArrayBuffer&&t instanceof ArrayBuffer){if(e.byteLength!==t.byteLength)return!1;let n=new Uint8Array(e),r=new Uint8Array(t);for(let e=0;e<n.length;e++)if(n[e]!==r[e])return!1;return!0}return!1}const se=new Set([`STMT_CREATE_TABLE`,`STMT_CREATE_INDEX`,`STMT_CREATE_VIEW`,`STMT_CREATE_VTABLE`,`STMT_DROP`,`STMT_ALTER`]),ce=new Set([`STMT_INSERT`,`STMT_UPDATE`,`STMT_DELETE`,`STMT_SELECT`,`COMPOUND_SELECT`]);function le(e){try{return ee(e)}catch(e){if(e instanceof f)return null;throw e}}function ue(e){try{return te(e)}catch(e){if(e instanceof f)return null;throw e}}function de(e){return e.kind===`STMT_CREATE_TRIGGER`||e.kind===`STMT_DROP`&&e.target===`TRIGGER`?`trigger`:e.kind===`STMT_PRAGMA`?`pragma`:se.has(e.kind)?`ddl`:ce.has(e.kind)?`dml`:`other`}function h(e){let t=ue(e);if(t===null)throw Error(`could not parse the SQL — a statement has a syntax error; fix it and retry`);return t.map(e=>ne(e))}function g(e){let t=le(e);return t===null?`other`:de(t)}function _(e,t,n){let r=[];for(let i=t;i<n;i+=1){let a=e.migrations[i];if(a===void 0)throw Error(`doync: bundled migration track has a hole at version ${i} (requested range ${t}..${n}, but the track holds ${e.migrations.length}) — the schema is corrupt or truncated`);for(let e of h(a.sql))g(e)===`ddl`&&r.push(e)}return r}function v(e,t){let n=e.exec(`SELECT v FROM __doync_meta WHERE k = ?`,t)[0];return n===void 0||n.v===null?null:String(n.v)}function y(e,t,n){e.exec(`INSERT INTO __doync_meta (k, v) VALUES (?, ?)
2
+ ON CONFLICT (k) DO UPDATE SET v = excluded.v`,t,n)}var fe="CREATE TABLE `__doync_membership` (\n `instance` text NOT NULL,\n `level` integer NOT NULL,\n `tbl` text NOT NULL,\n `pk` text NOT NULL,\n PRIMARY KEY(`instance`, `level`, `pk`)\n) WITHOUT ROWID;\n--> statement-breakpoint\nCREATE INDEX `__doync_membership_by_row` ON `__doync_membership` (`tbl`,`pk`);--> statement-breakpoint\nCREATE TABLE `__doync_meta` (\n `k` text PRIMARY KEY NOT NULL,\n `v` blob\n) WITHOUT ROWID;\n--> statement-breakpoint\nCREATE TABLE `__doync_pending` (\n `mutation_id` integer PRIMARY KEY NOT NULL,\n `name` text NOT NULL,\n `args` text NOT NULL,\n `idem_key` text\n);\n",pe="CREATE TABLE `__doync_release_stamp` (\n `instance` text PRIMARY KEY NOT NULL,\n `cookie` integer NOT NULL,\n `released_at` integer NOT NULL,\n `ttl_ms` integer NOT NULL\n) WITHOUT ROWID;\n",me=[{idx:0,version:`6`,when:1784031358638,tag:`0000_replica_engine_v0`,breakpoints:!0},{idx:1,version:`6`,when:1784450022155,tag:`0001_release_stamps`,breakpoints:!0}];const he={"0000_replica_engine_v0":fe,"0001_release_stamps":pe},b=me.slice().sort((e,t)=>e.idx-t.idx).map(e=>{let t=he[e.tag];if(t===void 0)throw Error(`doync: replica engine track missing sql for journal tag ${JSON.stringify(e.tag)}`);return t.split(/-->\s*statement-breakpoint/).map(e=>e.trim()).filter(e=>e.length>0)});function x(e){e.exec(`CREATE TABLE IF NOT EXISTS __doync_engine (
3
+ k TEXT PRIMARY KEY,
4
+ v
5
+ ) WITHOUT ROWID`)}function S(e,t){let n=t;for(;n<b.length;){let t=b[n];if(t===void 0)break;let r=n+1;for(let n of t)e.exec(n);e.exec(`INSERT INTO __doync_engine (k, v) VALUES ('track_version', ?)
6
+ ON CONFLICT (k) DO UPDATE SET v = excluded.v`,r),n=r}}function ge(e){x(e);let t=e.exec(`SELECT v FROM __doync_engine WHERE k = 'track_version'`),n=t.length===0?0:Number(t[0]?.v);if((!Number.isFinite(n)||n<0)&&(n=0),n>b.length)return console.warn(`doync: replica engine track_version ${n} is above bundled track length ${b.length} — wiping engine tables and rebuilding (code rollback against a newer database). Consumer state will resync through wipe-and-resync.`),C(e),{rolledBack:!0};try{S(e,n)}catch(t){return console.warn(`doync: replica engine track failed at version ${n} — wiping engine tables and rebuilding (code rollback against a newer database). Consumer state will resync through wipe-and-resync.`,t),C(e),{rolledBack:!0}}return{rolledBack:!1}}function C(e){let t=null,n=null,r=null,i=[];try{t=v(e,`client_id`),n=v(e,`next_mutation_id`),r=v(e,`logout_behavior`),i=e.exec(`SELECT mutation_id, name, args, idem_key FROM __doync_pending`)}catch{}e.exec(`DROP TABLE IF EXISTS __doync_release_stamp`),e.exec(`DROP TABLE IF EXISTS __doync_membership`),e.exec(`DROP TABLE IF EXISTS __doync_meta`),e.exec(`DROP TABLE IF EXISTS __doync_pending`),e.exec(`DROP TABLE IF EXISTS __doync_engine`),x(e),S(e,0),t!==null&&y(e,`client_id`,t),n!==null&&y(e,`next_mutation_id`,n),r!==null&&y(e,`logout_behavior`,r);for(let t of i)e.exec(`INSERT INTO __doync_pending (mutation_id, name, args, idem_key)
7
+ VALUES (?, ?, ?, ?)`,t.mutation_id,t.name,t.args,t.idem_key)}function _e(e){return e===void 0?18e5:e}function ve(e,t){e.exec(`INSERT INTO __doync_release_stamp (instance, cookie, released_at, ttl_ms)
8
+ VALUES (?, ?, ?, ?)
9
+ ON CONFLICT (instance) DO UPDATE SET
10
+ cookie = excluded.cookie,
11
+ released_at = excluded.released_at,
12
+ ttl_ms = excluded.ttl_ms`,t.instance,t.cookie,t.releasedAt,t.ttlMs)}function w(e,t){e.exec(`DELETE FROM __doync_release_stamp WHERE instance = ?`,t)}function T(e){e.exec(`DELETE FROM __doync_release_stamp`)}function E(e){return{instance:String(e.instance),cookie:Number(e.cookie),releasedAt:Number(e.released_at),ttlMs:Number(e.ttl_ms)}}function D(e,t){let n=e.exec(`SELECT instance, cookie, released_at, ttl_ms
13
+ FROM __doync_release_stamp WHERE instance = ?`,t)[0];return n===void 0?null:E(n)}function O(e){return e.exec(`SELECT instance, cookie, released_at, ttl_ms FROM __doync_release_stamp`).map(E)}function k(e){if(!u(e))throw Error(`doync: refusing to quote non-identifier ${JSON.stringify(e)}`);return`"${e}"`}function A(e,t){let n=JSON.parse(e),r=d(t);if(!Array.isArray(n)||n.length!==r.length)throw Error(`doync: malformed pk ${e} for table ${t.name} (expected ${r.length} key part(s))`);return n.map(e=>a(e))}function j(e){return d(e).map(e=>`${k(e)} = ?`).join(` AND `)}function ye(e,t){let n=Object.keys(t);for(let t of n)if(!u(t))throw Error(`doync: patch image for table ${e.name} has an invalid column name ${JSON.stringify(t)}`);return{columns:n,values:n.map(e=>i(t[e]))}}function M(e,t){let n=e.tables.find(e=>e.name===t);if(n===void 0)throw Error(`doync: no synced table named ${JSON.stringify(t)} in the client schema`);return n}function N(e){return ge(e)}function P(e,t){v(e,`schema_version`)===null&&F(e,t,0,n(t))}function F(e,t,n,r){for(let i of _(t,n,r))e.execBatch(i);y(e,`schema_version`,String(r))}function I(e,t){for(let n of t.tables)e.exec(`DROP TABLE IF EXISTS ${k(n.name)}`)}function be(e){for(let t of e.tables)if(l(t.name))throw Error(`doync: synced table ${t.name} uses the reserved __doync_ prefix`)}const L=`logout_behavior`,R=`connected_clock`,z=`doync_optimistic`,B=`doync_body`;var V=class{lifecycle;decode;one;#e=!1;#t=null;#n=new Set;#r=X;#i=Z;#a=!1;#o=null;constructor(e,t,n){this.lifecycle=e,this.decode=t,this.one=n}#s(e){if(this.#o?.read!==e||this.#o.generation!==e.generation){let t=e.rawRows();this.#r=this.decode?this.decode(t):t,this.#o={read:e,generation:e.generation}}return this.#r}#c(){if(this.#a)return;this.#a=!0;let e=this.lifecycle.peek();if(e!==null)this.#s(e),this.#i=e.status();else{let e=this.lifecycle.compute();this.#r=e.rows,this.#i=e.status}}current(){let e=this.lifecycle.peek();return e!==null&&e.generation>0?(this.#a=!0,this.#s(e)):(this.#c(),this.#r)}status(){let e=this.lifecycle.peek();return e===null?(this.#c(),this.#i):(this.#a=!0,this.#i=e.status(),this.#i)}onChange(e){return this.#n.add(e),()=>this.#n.delete(e)}retain(){if(this.#e)return;this.#e=!0,this.#a=!0;let e=this.lifecycle.retain();if(this.#t=e.onChange(()=>{this.#s(e),this.#i=e.status();for(let e of this.#n)e()}),e.generation>0&&(this.#o?.read!==e||this.#o.generation!==e.generation)||e.status()!==this.#i){e.generation>0&&this.#s(e),this.#i=e.status();for(let e of this.#n)e()}}release(){this.#e&&(this.#e=!1,this.#t?.(),this.#t=null,this.lifecycle.release())}},H=class{#e;#t;#n;#r;#i;#a;#o=null;#s;#c;#l=1;#u=null;#d=!1;#f=0;#p=null;#m;#h=!1;#g=null;#_=!1;#v=new Set;#y=0;#b=0;#x=null;#S;#C=new Set;#w=!1;#T=[];#E=new Map;#D=new Map;#O=new Set;#k=new Set;#A=new Map;#j=new Map;#M=new Map;#N=new Map;#P=new Map;#F=1;#I=new Map;#L=new Map;#R=new Set;#z=null;#B=[];#V=!1;#H=[];#U=new Set;constructor(e){this.#e=e.db,this.#t=e.schema,this.#n=e.mutations,this.#r=e.socket,this.#i=e.ctx??{},this.#a=e.token,this.#o=e.userId??null,this.#S=e.onSchemaEvent,this.#c=e.generateId??Ae,this.#m=e.now??Date.now,this.#W(e),this.#r.setHandlers({message:e=>this.#Ee(e),open:()=>this.#xe(),close:()=>{this.#p=null,this.#tt(!1)},status:e=>this.#nt(e)})}get connectedClock(){return this.#f}releaseStamp(e){return D(this.#e,e)}releaseStamps(){return O(this.#e)}get clientId(){return this.#s}get userId(){return this.#o}get cookie(){return this.#u}get errors(){return this.#B}get recoveredKeys(){return this.#O}get schemaVersion(){return this.#y}get schemaStatus(){return this.#x}#W(e){let t=this.#e;t.exec(`PRAGMA foreign_keys = OFF`),be(this.#t);let{rolledBack:i}=N(t);i?(I(t,this.#t),t.exec(`DELETE FROM __doync_membership`),y(t,`schema_version`,`0`),F(t,this.#t,0,n(this.#t)),this.#u=null,t.exec(`DELETE FROM __doync_meta WHERE k = ?`,`cookie`)):P(t,this.#t),this.#y=n(this.#t);let a=Me(t);a!==null&&(console.error(`doync: durable meta "${a}" is corrupt — healing by FORGETTING the local store (fresh identity, full re-hydration). A corrupt mutation counter makes the pending queue untrustworthy, so unsynced writes are discarded rather than risk double-apply.`),this.#Ge(t)),this.#b=this.#G(t,`schema_version`)??0;let o=v(t,`client_id`);this.#s=o??e.clientId??this.#c(),o===null&&y(t,`client_id`,this.#s),this.#l=this.#G(t,`next_mutation_id`)??1,this.#u=this.#G(t,`cookie`);let s=Number(v(t,R));Number.isInteger(s)&&s>=0?this.#f=s:(v(t,`connected_clock`)!==null&&console.warn(`doync: durable connected-clock reading is corrupt — resetting to 0 (clock runs slow; GC defers, server full-hydrates)`),this.#f=0),this.#p=null,a!==null&&this.#Ze(`forget`,`corrupt durable meta "${a}" — forgot the local store and reset to a fresh identity`),this.#T=t.exec(`SELECT mutation_id, name, args, idem_key FROM __doync_pending ORDER BY mutation_id ASC`).map(e=>{let t=JSON.parse(String(e.args));return{mutationId:Number(e.mutation_id),name:String(e.name),wireArgs:t,args:r(t,`mutation args`),key:e.idem_key===null?void 0:String(e.idem_key)}});for(let e of this.#T){let t=this.#ct(e.mutationId,!0);e.key!==void 0&&(this.#D.set(e.key,t.pair),this.#O.add(e.key))}this.#ge({includeStampless:!1}),t.drainWrittenTables();let c=this.#Q();U(c)&&(this.#V=!0,c.then(()=>this.#J(),()=>this.#J()))}#G(e,t){let n=v(e,t);if(n===null)return null;let r=Number(n);if(!Number.isInteger(r))throw Error(`doync: durable meta "${t}" is corrupt (${JSON.stringify(n)} → ${r}) — a non-integer must never ride the wire (ADR-0019 next-id trap); the boot-time corrupt-meta heal should have caught this`);return r}#K(e){if(this.#V){this.#H.push(e);return}this.#V=!0,this.#q(e)}#q(e){let t;try{t=e()}catch(e){throw this.#V=!1,this.#Y(),e}U(t)?t.then(()=>this.#J(),e=>{this.#B.push(`doync: exclusive-chain step rejected — ${Oe(e)}`),this.#J()}):this.#J()}#J(){this.#V=!1,this.#Y()}#Y(){let e=this.#H.shift();if(e!==void 0){this.#V=!0,this.#q(e);return}this.#X()}#X(){if(this.#U.size===0)return;let e=[...this.#U];this.#U.clear();for(let t of e)t.recompute()&&t.notify()}#Z(e){this.#V?this.#U.add(e):e.recompute()}#Q(){return this.#e.drainWrittenTables(),this.#e.exec(`SAVEPOINT ${z}`),this.#_=!0,this.#A.clear(),W(this.#$(0),()=>{this.#R=J(this.#e.drainWrittenTables())})}#$(e){for(let t=e;t<this.#T.length;t++){let e=this.#ne(this.#T[t]);if(U(e))return e.then(()=>this.#$(t+1))}}#ee(){this.#_&&=(this.#e.exec(`ROLLBACK TO ${z}`),this.#e.exec(`RELEASE ${z}`),!1)}#te(e){let t=this.#R;this.#ee(),this.#e.drainWrittenTables(),this.#e.exec(`BEGIN`);try{e(),this.#e.exec(`COMMIT`)}catch(e){return this.#e.exec(`ROLLBACK`),W(this.#Q(),()=>{throw e})}let n=J(this.#e.drainWrittenTables());return W(this.#Q(),()=>new Set([...t,...n,...this.#R]))}#ne(e){this.#e.exec(`SAVEPOINT ${B}`);let t;try{let n=this.#n[e.name];if(n===void 0)throw Error(`unknown mutation "${e.name}"`);t=m(n).handler(e.args,this.#i,this.#ae())}catch(t){this.#ie(e.mutationId,t);return}if(U(t))return t.then(()=>this.#re(e.mutationId),t=>this.#ie(e.mutationId,t));this.#re(e.mutationId)}#re(e){this.#e.exec(`RELEASE ${B}`),this.#A.delete(e)}#ie(e,t){this.#e.exec(`ROLLBACK TO ${B}`),this.#e.exec(`RELEASE ${B}`),this.#A.set(e,t)}#ae(){return{exec:(e,...t)=>this.#e.exec(e,...t)}}#oe(e){this.#r.send({type:`push`,clientId:this.#s,mutationId:e.mutationId,name:e.name,args:e.wireArgs})}mutate(n,r,i){let a=i?.key;if(a!==void 0){let e=this.#D.get(a);if(e!==void 0)return e}let s=n.name;if(s===void 0||s===``)return Y(Error(`doync: mutate requires a registered mutation — wrap it in defineMutations(...) so it carries a dotted name`));let c=this.#n[s];if(c===void 0)return Y(Error(`doync: unknown mutation "${s}"`));let l=m(c),u,d;try{e(r,`mutation args`,{allowBinary:!0});let n=t(r);u=l.args===void 0?n:re(l.args,n),d=o(u,`mutation args`)}catch(e){return Y(e)}let f=this.#lt(!1);return a!==void 0&&this.#D.set(a,f.pair),this.#K(()=>this.#se({name:s,args:u,wireArgs:d,key:a,promise:f})),f.pair}#se(e){let t=this.#e,n=this.#l;this.#E.set(n,e.promise);let r={mutationId:n,name:e.name,args:e.args,wireArgs:e.wireArgs,key:e.key};return W(this.#te(()=>{t.exec(`INSERT INTO __doync_pending (mutation_id, name, args, idem_key) VALUES (?, ?, ?, ?)`,n,r.name,JSON.stringify(r.wireArgs??null),r.key??null),this.#l=n+1,y(t,`next_mutation_id`,String(this.#l)),this.#T.push(r)}),e=>this.#ce(r,e))}#ce(e,t){let n=e.mutationId;if(!this.#A.has(n)){this.#ut(n,null),this.#at(t),this.#d&&this.#oe(e);return}let r=this.#A.get(n),i=this.#E.get(n)?.pair;return e.key!==void 0&&this.#D.delete(e.key),W(this.#le(n,!0),e=>{this.#ut(n,r),this.#dt(n,r),i?.client.catch(()=>{}),i?.server.catch(()=>{}),this.#at(new Set([...t,...e]))})}#le(e,t=!1){let n=this.#e;return this.#te(()=>{n.exec(`DELETE FROM __doync_pending WHERE mutation_id = ?`,e),this.#T=this.#T.filter(t=>t.mutationId!==e),t&&(this.#l=e,y(n,`next_mutation_id`,String(e)))})}updateAuth(e,t,n){this.#a=e??void 0,n!==void 0&&(this.#o=n),t!==void 0&&(this.#i=t),this.#d&&!this.#w&&typeof e==`string`&&e!==``&&this.#r.send({type:`updateAuth`,jwt:e})}subscribe(e,t){if(K(e))return new G;let{query:n,args:r,options:i}=q(`subscribe`,e,t);if(i?.skip)return new G;let a=n.name,o=n.resolve({args:r,ctx:this.#i}),s={sql:o.sql,params:o.params},c=o.identity,l={name:a,args:r,ttl:i?.ttl,statement:s},u=o.decode;return new V({peek:()=>this.#M.get(c)?.read??null,retain:()=>this.#de(c,l),release:()=>this.#pe(c),compute:()=>{if(this.#V)return{rows:X,status:Z};let e=this.#e.exec(s.sql,...s.params),t=this.#M.get(c);return{rows:u?u(e):e,status:$(t?.phase??`pending`,t?.error)}}},u,o.one??!1)}preload(e,t){if(K(e))return Ee;let{query:n,args:r,options:i}=q(`preload`,e,t),a=n.name,o=n.resolve({args:r,ctx:this.#i}),s=o.identity;this.#fe(s,{name:a,args:r,ttl:i?.ttl,statement:{sql:o.sql,params:o.params}});let c=!1;return{cleanup:()=>{c||(c=!0,this.#pe(s))}}}#ue(e,t){let n=this.#M.get(e);if(n===void 0){let r=this.#Te(e);n={name:t.name,args:t.args,ttl:t.ttl,count:0,read:null,phase:`pending`,error:void 0},this.#M.set(e,n),this.#We(()=>w(this.#e,e)),this.#d&&this.#r.send({type:`subscribe`,queries:[this.#we(e,{heldAt:r})]})}else n.phase===`error`&&this.#d?(this.#st(e,`pending`),this.#r.send({type:`subscribe`,queries:[this.#we(e)]})):t.ttl!==void 0&&(n.ttl===void 0||t.ttl>n.ttl)&&(n.ttl=t.ttl,this.#d&&this.#r.send({type:`subscribe`,queries:[this.#we(e)]}));return n.count+=1,n}#de(e,t){let n=this.#ue(e,t);if(n.read===null){let r=this.#L.get(e);if(r!==void 0)clearTimeout(r.timer),this.#L.delete(e),n.read=r.read,this.#Z(r.read);else{let r=new ie({run:e=>this.#e.exec(e.sql,...e.params),readSet:()=>{let t=this.#j.get(e);return t===void 0?void 0:new Set(t.readSet)}},t.statement,e,$(n.phase,n.error));n.read=r,this.#Z(r)}}return n.read}#fe(e,t){this.#ue(e,t)}#pe(e){let t=this.#M.get(e);t===void 0||--t.count>0||(this.#M.delete(e),this.#d&&this.#r.send({type:`unsubscribe`,queries:[{name:t.name,args:t.args===void 0?void 0:o(t.args,`query args`)}]}),this.#me(e,t.ttl),t.read!==null&&this.#ve(e,t.read))}#me(e,t){let n=this.#u;if(n===null)return;let r={instance:e,cookie:n,releasedAt:this.#f,ttlMs:_e(t)};this.#K(()=>W(this.#te(()=>{ve(this.#e,r),this.#ge({includeStampless:!0}),this.#he()}),e=>this.#at(e)))}#he(){y(this.#e,R,String(this.#f))}#ge(e){let t=this.#_e(e.includeStampless);if(t.length!==0){for(let e of t)this.#Le(e);this.#he()}}#_e(e){let t=this.#M,n=O(this.#e),r=new Set(n.map(e=>e.instance)),i=[];if(e){let e=this.#e.exec(`SELECT DISTINCT instance FROM __doync_membership`);for(let n of e){let e=String(n.instance);t.has(e)||r.has(e)||i.push(e)}}let a=this.#f;for(let e of n)t.has(e.instance)||(e.ttlMs<=0||a-e.releasedAt>e.ttlMs)&&i.push(e.instance);return i}#ve(e,t){let n=this.#L.get(e);n!==void 0&&clearTimeout(n.timer),this.#L.set(e,{read:t,timer:setTimeout(()=>{let n=this.#L.get(e);n===void 0||n.read!==t||(this.#L.delete(e),this.#U.delete(t))},ke)})}once(e){if(K(e))return new Te;let{query:t,args:n}=q(`once`,e),r=t.name,i=t.resolve({args:n,ctx:this.#i}),a;if(this.#V)a=[];else{let e=this.#e.exec(i.sql,...i.params);a=i.decode?i.decode(e):e}let s=`once-${this.#F++}`,c=n===void 0?void 0:o(n,`query args`),l=new Se(a,i.decode,{start:()=>{this.#N.set(s,{view:l,name:r,args:c}),this.#d&&this.#r.send({type:`once`,id:s,name:r,args:c})},drop:()=>{this.#N.delete(s),this.#P.delete(s)}});return l}local(e,...t){let n=`local:${e}\u0000${JSON.stringify(t)}`,r={sql:e,params:t};return new V({peek:()=>this.#I.get(n)?.read??null,retain:()=>this.#ye(n,r),release:()=>this.#be(n),compute:()=>this.#V?{rows:X,status:Z}:{rows:this.#e.exec(r.sql,...r.params),status:Q}},void 0,void 0)}#ye(e,t){let n=this.#I.get(e);if(n===void 0&&(n={count:0,read:null},this.#I.set(e,n)),n.count+=1,n.read===null){let r=this.#L.get(e);if(r!==void 0)clearTimeout(r.timer),this.#L.delete(e),n.read=r.read,this.#Z(r.read);else{let e=new ie({run:e=>this.#e.exec(e.sql,...e.params),readSet:()=>void 0},t,void 0,Q);n.read=e,this.#Z(e)}}return n.read}#be(e){let t=this.#I.get(e);t===void 0||--t.count>0||(this.#I.delete(e),t.read!==null&&this.#ve(e,t.read))}#xe(){this.#w||(this.#p=null,this.#tt(!0),this.#Ce())}#Se(){let e=this.#m();if(this.#p!==null){let t=e-this.#p;t>0&&(this.#f+=t)}this.#p=e}#Ce(){for(let e of this.#M.keys())this.#st(e,`pending`);this.#r.send({type:`connect`,clientId:this.#s,...this.#a===void 0?{}:{jwt:this.#a},cookie:this.#u,desiredQueries:[...this.#M.keys()].map(e=>this.#we(e)),schemaVersion:this.#y});for(let e of this.#T)this.#oe(e);for(let[e,t]of this.#N)this.#r.send({type:`once`,id:e,name:t.name,args:t.args})}#we(e,t){let n=this.#M.get(e),r=t===void 0?this.#Te(e):t.heldAt;return{name:n?.name??e,args:n?.args===void 0?void 0:o(n.args,`query args`),...n?.ttl===void 0?{}:{ttl:n.ttl},...r===void 0?{}:{heldAt:r}}}#Te(e){if(!(this.#e.exec(`SELECT 1 FROM __doync_membership WHERE instance = ? LIMIT 1`,e).length>0))return;if(this.#M.has(e))return this.#u??void 0;let t=D(this.#e,e);if(t!==null)return t.cookie}#Ee(e){if(this.#w){e.type===`error`&&this.#B.push(e.message);return}if(e.type===`pong`){this.#Se();return}if(e.type===`unauthorized`){this.#B.push(e.message),this.#rt(!0);return}switch(this.#h&&e.type!==`error`&&this.#rt(!1),e.type){case`schemaSkew`:this.#Be(e);break;case`schema`:this.#Ve(e);break;case`subscribeAck`:this.#Qe();for(let t of e.instances){this.#j.set(t.instance,t);let e=this.#M.get(t.instance);e!==void 0&&e.phase!==`complete`&&this.#st(t.instance,`acked`)}break;case`pokeStart`:this.#Qe(),this.#z=[];break;case`pokePart`:this.#z===null?this.#B.push(`doync: pokePart arrived with no open poke`):this.#z.push(...e.patches);break;case`pokeEnd`:this.#z===null?this.#B.push(`doync: pokeEnd arrived with no open poke`):this.#Ae(e.cookie,e.lastMutationId,e.confirms);break;case`pokeReject`:this.#ze(e.mutationId,e.error);break;case`onceStart`:this.#P.set(e.id,[]);break;case`oncePart`:{let t=this.#P.get(e.id);t===void 0?this.#B.push(`doync: oncePart arrived with no open once`):t.push(...e.rows);break}case`onceEnd`:this.#ke(e);break;case`resyncRequired`:this.#B.push(e.message),this.#K(()=>this.#Ye(`heldAt ahead of vouched baseline (instance ${e.instance}: heldAt=${e.heldAt} baseline=${e.baseline}) — ${e.message}`));break;case`error`:if(this.#B.push(e.message),Ne(e.message)){this.#K(()=>this.#Ye(`cookie above the Origin head (server reset) — ${e.message}`));break}e.instances===void 0?this.#Oe(e.message):this.#De(e.instances,e.message);break;default:this.#B.push(`doync: unknown ServerMessage type ${String(e.type)}`)}}#De(e,t){let n=Error(t);for(let t of e){let e=this.#M.get(t);e!==void 0&&(e.phase===`pending`||e.phase===`acked`)&&this.#st(t,`error`,n)}}#Oe(e){let t=Error(e);for(let[e,n]of this.#M)(n.phase===`pending`||n.phase===`acked`)&&this.#st(e,`error`,t)}#ke(e){let t=this.#P.get(e.id)??[];this.#P.delete(e.id);let n=this.#N.get(e.id);if(n!==void 0){if(this.#N.delete(e.id),e.error!==void 0){n.view.settleError(Error(e.error));return}n.view.deliver(t.map(De))}}#Ae(e,t,n){let r=this.#z??[];this.#z=null,this.#K(()=>this.#je(r,e,t,n))}#je(e,t,n,r){let i=this.#e,a=[];return W(this.#te(()=>{for(let t of e)t.op===`put`&&this.#Ne(t);for(let t of e)t.op===`del`&&this.#Pe(t);for(let t of e)t.op===`pks`&&this.#Fe(t);if(n!==null){for(let e of this.#T)e.mutationId<=n&&!this.#k.has(e.mutationId)&&a.push(e.mutationId);for(let e of a)i.exec(`DELETE FROM __doync_pending WHERE mutation_id = ?`,e)}this.#u=t,y(i,`cookie`,String(t)),this.#he(),this.#T=this.#T.filter(e=>!a.includes(e.mutationId))}),e=>{for(let e of a)this.#dt(e,null);for(let e of a)this.#k.delete(e);this.#at(e),this.#Me(r)})}#Me(e){if(e!==void 0)for(let t of e){let e=this.#M.get(t);e!==void 0&&e.phase===`acked`&&this.#st(t,`complete`)}}#Ne(e){let t=this.#e,n=this.#Re(e.instance,e.level);t.exec(`INSERT INTO __doync_membership (instance, level, tbl, pk) VALUES (?, ?, ?, ?)
14
+ ON CONFLICT (instance, level, pk) DO UPDATE SET tbl = excluded.tbl`,e.instance,e.level,n.name,e.pk);let r=A(e.pk,n);t.exec(`DELETE FROM ${k(n.name)} WHERE ${j(n)}`,...r);let{columns:i,values:a}=ye(n,e.image);t.exec(`INSERT INTO ${k(n.name)} (${i.map(k).join(`, `)})
15
+ VALUES (${i.map(()=>`?`).join(`, `)})`,...a)}#Pe(e){this.#Ie(e.instance,e.level,e.pk)}#Fe(e){let t=new Set(e.pks),n=this.#e.exec(`SELECT pk FROM __doync_membership WHERE instance = ? AND level = ?`,e.instance,e.level);for(let r of n){let n=String(r.pk);t.has(n)||this.#Ie(e.instance,e.level,n)}}#Ie(e,t,n){let r=this.#e,i=this.#Re(e,t);r.exec(`DELETE FROM __doync_membership WHERE instance = ? AND level = ? AND pk = ?`,e,t,n);let a=r.exec(`SELECT DISTINCT instance FROM __doync_membership WHERE tbl = ? AND pk = ?`,i.name,n);if(!a.some(e=>this.#M.has(String(e.instance)))){r.exec(`DELETE FROM ${k(i.name)} WHERE ${j(i)}`,...A(n,i));for(let e of a)this.#Le(String(e.instance))}}#Le(e){let t=this.#e,n=t.exec(`SELECT DISTINCT tbl, pk FROM __doync_membership WHERE instance = ?`,e);t.exec(`DELETE FROM __doync_membership WHERE instance = ?`,e),w(t,e);for(let e of n){let n=String(e.tbl),r=String(e.pk);if(t.exec(`SELECT 1 FROM __doync_membership WHERE tbl = ? AND pk = ? LIMIT 1`,n,r).length===0){let e=M(this.#t,n);t.exec(`DELETE FROM ${k(e.name)} WHERE ${j(e)}`,...A(r,e))}}}#Re(e,t){let n=this.#j.get(e);if(n===void 0)throw Error(`doync: patch for unknown instance ${e} — a subscribeAck must precede its hydration poke`);let r=n.levels.find(e=>e.level===t);if(r===void 0)throw Error(`doync: instance ${e} has no Level ${t} in its subscribeAck`);return M(this.#t,r.table)}#ze(e,t){this.#k.add(e),this.#K(()=>W(this.#le(e),n=>{this.#dt(e,Error(t)),this.#at(n)}))}#Be(e){let t=e.serverVersion===void 0?``:` (server v${e.serverVersion})`;e.reason===`client-stale`?(this.#Ze(`reload`,`schema client-stale: bundle v${this.#y} is behind the Mirror${t} — reload for the new bundle`),this.#et()):(this.#Ze(`server-behind`,`schema client-ahead: bundle v${this.#y} is ahead of the Mirror${t} — backing off until it deploys`),this.#tt(!1),this.#r.reconnect())}#Ve(e){let t=e.version;if(t>this.#y){this.#Ze(`reload`,`schema directive v${t} is above the bundled track v${this.#y} — reload for the new bundle`),this.#et();return}t<=this.#b||this.#K(()=>this.#He(t))}#He(e){let t=t=>`local migration to schema v${e} failed: ${Oe(t)}`,n;try{n=this.#te(()=>{F(this.#e,this.#t,this.#b,e)})}catch(e){return this.#Ye(t(e))}return xe(n,t=>{this.#b=e,this.#at(new Set([...t,...this.#Xe()]))},e=>this.#Ye(t(e)))}resync(){this.#K(()=>this.#Ye(`resync() requested by the consumer`))}forget(){this.#K(()=>this.#Ke(`forget() requested by the consumer`))}setLogoutBehavior(e){this.#Ue(L,e)}#Ue(e,t){this.#We(()=>y(this.#e,e,t))}#We(e){this.#K(()=>W(this.#te(e),()=>{}))}#Ge(e){I(e,this.#t),e.exec(`DELETE FROM __doync_membership`),T(e),e.exec(`DELETE FROM __doync_pending`),e.exec(`DELETE FROM __doync_meta`),F(e,this.#t,0,this.#y)}#Ke(e){let t=this.#e,n=this.#te(()=>{this.#Je(Error(`doync: ${e} — pending writes were forgotten`)),this.#Ge(t),this.#s=this.#c(),y(t,`client_id`,this.#s),this.#u=null,this.#l=1,this.#f=0,this.#p=null,this.#T=[]});return this.#qe(n,`forget`,`forgot the local store — ${e}`)}#qe(e,t,n){return W(e,e=>{this.#b=this.#y,this.#j.clear(),this.#Ze(t,n),this.#d&&this.#Ce(),this.#at(new Set([...e,...this.#Xe()]))})}#Je(e){for(let t of this.#E.keys())this.#ut(t,e),this.#dt(t,e);this.#D.clear(),this.#O.clear(),this.#k.clear(),this.#A.clear()}#Ye(e){let t=this.#e,n=this.#te(()=>{I(t,this.#t),t.exec(`DELETE FROM __doync_membership`),T(t),y(t,`schema_version`,`0`),F(t,this.#t,0,this.#y),this.#u=null,t.exec(`DELETE FROM __doync_meta WHERE k = ?`,`cookie`)});return this.#qe(n,`resync`,`wiped and resyncing — ${e}`)}#Xe(){return this.#t.tables.map(e=>e.name)}onSchemaChange(e){return this.#C.add(e),()=>this.#C.delete(e)}#Ze(e,t){let n={kind:e,message:t};this.#x=n,this.#S?.(n),this.#$e()}#Qe(){let e=this.#x?.kind;(e===`server-behind`||e===`resync`||e===`forget`)&&(this.#x=null,this.#$e())}#$e(){for(let e of this.#C)e()}#et(){this.#w=!0,this.#tt(!1)}get connectionStatus(){return this.#h?`needs-auth`:this.#d?`connected`:this.#g??`disconnected`}onConnectionChange(e){return this.#v.add(e),()=>this.#v.delete(e)}#tt(e){this.#it(()=>{this.#d=e,e&&(this.#g=null)})}#nt(e){this.#it(()=>{this.#g=e})}#rt(e){this.#it(()=>{this.#h=e})}#it(e){let t=this.connectionStatus;if(e(),this.connectionStatus!==t)for(let e of this.#v)e()}#at(e){let t=J(e),n=new Set(this.#U);this.#U.clear();for(let e of this.#ot()){let r=e.readSet;(n.has(e)||r===void 0||[...r].some(e=>t.has(e)))&&e.recompute()&&e.notify()}}*#ot(){for(let e of this.#M.values())e.read!==null&&(yield e.read);for(let e of this.#I.values())e.read!==null&&(yield e.read)}#st(e,t,n){let r=this.#M.get(e);if(r===void 0)return;r.phase=t,r.error=n;let i=$(t,n);r.read!==null&&r.read.updateStatus(i)&&r.read.notify()}#ct(e,t){let n=this.#E.get(e);if(n!==void 0)return n;let r=this.#lt(t);return this.#E.set(e,r),r}#lt(e){let t,n,r,i,a=new Promise((e,r)=>{t=e,n=r}),o=new Promise((e,t)=>{r=e,i=t});return e&&(a.catch(()=>{}),o.catch(()=>{})),{pair:{client:a,server:o},resolveClient:t,rejectClient:n,resolveServer:r,rejectServer:i,clientSettled:!1,serverSettled:!1}}#ut(e,t){let n=this.#E.get(e);if(n===void 0){this.#B.push(`doync: settleClient for unknown mutation ${e} — no pending promise (a mutate() awaiting it would hang)`);return}n.clientSettled||(n.clientSettled=!0,t===null?n.resolveClient():n.rejectClient(t))}#dt(e,t){let n=this.#E.get(e);if(n===void 0){this.#B.push(`doync: settleServer for unknown mutation ${e} — no pending promise (a mutate() awaiting it would hang)`);return}n.serverSettled||(n.serverSettled=!0,t===null?n.resolveServer():n.rejectServer(t),n.clientSettled&&this.#E.delete(e))}};function U(e){return e instanceof Promise}function W(e,t){return e instanceof Promise?e.then(t):t(e)}function xe(e,t,n){return e instanceof Promise?e.then(t,n):t(e)}var G=class{current(){return X}status(){return Z}onChange(){return()=>{}}retain(){}release(){}},Se=class{#e;#t=new Set;#n=!1;#r=!1;#i=Promise.withResolvers();#a=null;#o;#s;#c;constructor(e,t,n){this.#e=e,this.#o=t,this.#s=n.start,this.#c=n.drop}current(){return this.#l(),this.#e}onChange(e){return this.#l(),this.#t.add(e),()=>this.#t.delete(e)}get server(){return this.#l(),this.#i.promise}deliver(e){if(this.#r)return;let t=this.#o?this.#o(e):e;this.#e=t,this.#i.resolve(t);for(let e of this.#t)e()}settleError(e){this.#r||this.#i.reject(e)}dispose(){this.#r||this.#a===null&&(this.#a=setTimeout(()=>{this.#a=null,!this.#r&&(this.#r=!0,this.#t.clear(),this.#c())},ke))}#l(){this.#r||(this.#a!==null&&(clearTimeout(this.#a),this.#a=null),!this.#n&&(this.#n=!0,this.#i=Promise.withResolvers(),this.#i.promise.catch(()=>{}),this.#s()))}};function K(e){return e===!1||e==null}function q(e,t,n){if(c(t))return{query:t.query,args:t.args,options:n};throw Ce(e,t)}function Ce(e,t){return Error(typeof t==`function`?`doync: client.${e} expected a BoundQuery — received a function; did you forget to call it?`:`doync: client.${e} expected a BoundQuery, got ${we(t)}`)}function we(e){if(e===null)return`null`;if(Array.isArray(e))return`an array`;let t=typeof e;if(t===`object`){let t=e.kind;return typeof t==`string`?`an object with kind "${t}"`:`an object`}return t}var Te=class{current(){return X}onChange(){return()=>{}}get server(){return new Promise(()=>{})}dispose(){}};const Ee={cleanup(){}};function De(e){let t={};for(let[n,r]of Object.entries(e))t[n]=i(r);return t}function J(e){return new Set([...e].filter(e=>!l(e)))}function Y(e){let t=Promise.reject(e),n=Promise.reject(e);return t.catch(()=>{}),n.catch(()=>{}),{client:t,server:n}}function Oe(e){return e instanceof Error?e.message:String(e)}const ke=0,X=Object.freeze([]),Z=Object.freeze({status:`unknown`}),Q=Object.freeze({status:`complete`});function $(e,t){return e===`complete`?Q:e===`error`?t===void 0?{status:`error`}:{status:`error`,error:t}:Z}const Ae=()=>{let e=globalThis.crypto?.randomUUID?.();return e===void 0?`client-${Math.random().toString(16).slice(2)}-${Date.now().toString(16)}`:e},je=[`schema_version`,`next_mutation_id`,`cookie`];function Me(e){for(let t of je){let n=v(e,t);if(n!==null&&!Number.isInteger(Number(n)))return t}return null}function Ne(e){return e.includes(`above the Origin head`)}function Pe(e){return Fe(e)}function Fe(e){return e.logoutBehavior!==void 0&&(N(e.db),y(e.db,L,e.logoutBehavior)),new H({db:e.db,schema:e.schema,mutations:p(e.mutations),socket:e.socket,ctx:e.ctx??{},token:e.token,userId:e.userId??null,clientId:e.clientId,onSchemaEvent:e.onSchemaEvent})}export{h as _,L as a,p as b,Y as c,I as d,P as f,g,_ as h,R as i,F as l,y as m,Fe as n,K as o,v as p,H as r,q as s,Pe as t,N as u,m as v,re as y};
16
+ //# sourceMappingURL=client-ClV8ce6X.js.map