bun-query-builder 0.3.18 → 0.3.20
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/dist/bin/cli.js +2 -2
- package/dist/browser.d.ts +6 -1
- package/dist/chunk-1qcgf4ek.js +67 -0
- package/dist/{chunk-q4drbrbw.js → chunk-5c6kavwk.js} +28 -28
- package/dist/{chunk-723pr7bj.js → chunk-gvtaaa4e.js} +1 -1
- package/dist/{chunk-ymnm4hd2.js → chunk-j0bnac92.js} +1 -1
- package/dist/chunk-ms9m66w7.js +3 -0
- package/dist/chunk-p0xhj67a.js +2 -0
- package/dist/config.d.ts +0 -71
- package/dist/migrations.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/runtime.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-596rdc8d.js +0 -2
- package/dist/chunk-bqywz1ww.js +0 -67
- package/dist/chunk-tvxbkxqm.js +0 -3
package/dist/chunk-tvxbkxqm.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{p,_,n,e,t,s,Le,T,r,m,Gt,x,l,te,We,Ue}from"./chunk-bqywz1ww.js";import{Buffer as Rt}from"buffer";import{serialize as Kt}from"v8";function Jt(b){return m(e.relations?.singularizeStrategy)(b)}function v(b,R,w,U={}){let se=U.singularize??Jt,ue=b.relations?.[R]?.belongsToMany?.[w];if(ue==null)return null;let Oe=typeof ue==="object",$e=Oe?ue:null,pe=Oe?$e.model:ue,Ye=b.modelToTable[pe]||pe,ze,st;if($e?.table)ze=$e.table;else if($e?.through){if(st=$e.through,ze=b.modelToTable[$e.through],!ze)throw Error(`[query-builder] belongsToMany relation '${w}' on '${R}' references unknown through model '${$e.through}'. Make sure '${$e.through}' is registered via defineModels({...}).`)}else{let _e=se(R),g=se(Ye);ze=[_e,g].sort().join("_")}let at=$e?.foreignKey??`${se(R)}_id`,ht=$e?.relatedKey??`${se(Ye)}_id`,ae={};if($e?.pivot?.columns)Object.assign(ae,$e.pivot.columns);if(st&&U.models){let _e=U.models[st],g=_e?.definition??_e?.getDefinition?.()??_e,f=g?.attributes??{};for(let[y,d]of Object.entries(f)){if(y===at||y===ht||y===(g?.primaryKey??"id"))continue;ae[y]={default:d?.default,nullable:d?.nullable,validation:d?.validation}}}let ve=Boolean($e?.pivot?.timestamps),Ce=Object.keys(ae);return{pivotTable:ze,fkParent:at,fkRelated:ht,pivotColumns:Ce,pivotColumnDefs:ae,pivotModelName:st,timestamps:ve,relatedModelName:pe,relatedTable:Ye,hasConfig:Oe}}function*Kn(b,R={}){let w=b.relations;if(!w)return;for(let[U,se]of Object.entries(w)){let O=se?.belongsToMany;if(!O)continue;for(let ue of Object.keys(O)){let Oe=v(b,U,ue,R);if(Oe)yield{parentTable:U,relationKey:ue,resolved:Oe}}}}function Ke(b){return typeof b==="object"&&b!==null&&"raw"in b&&typeof b.raw==="string"}function Bt(b,R,w){if(Array.isArray(R)){let se=s(R.length,w.length+1),O=l(b,R,!1,se);return w.push(...R),O}let U=`${b} = ${t(w.length+1)}`;return w.push(R),U}function Ze(b){return typeof b==="object"&&b!==null&&"sql"in b&&typeof b.sql==="string"&&(!("parameters"in b)||Array.isArray(b.parameters))}function _t(b,R){let[w,...U]=R;if(U.length>0||w!==void 0&&!Array.isArray(w))throw TypeError("[query-builder] db.raw(sql, bindings): pass the bindings as one array, db.raw('a = ? AND b = ?', [a, b]).");let se={sql:b,parameters:[...w??[]]};return Object.defineProperty(se,"then",{enumerable:!1,value:(O,ue)=>{let Oe=TypeError("[query-builder] db.raw(sql, bindings) builds a fragment for set() or where(), not a query. Run SQL with db.unsafe(sql, params).");if(typeof ue==="function")return ue(Oe);throw Oe}}),se}function dt(b){return b instanceof Promise&&typeof b.execute==="function"&&typeof b.cancel==="function"}function yt(b){throw TypeError(`[query-builder] ${b}: a Bun \`sql\`...\`\` query cannot be used as a fragment, because its SQL text is not readable. Bind values with db.raw('name = ?', [value]) or { sql, parameters }, or use the exported \`raw\` tagged template.`)}function et(b,R){let w=b.parameters??(Array.isArray(b.values)?b.values:[]);if(e.dialect!=="postgres"||w.length===0)return{text:b.sql,parameters:w};let U=0,{text:se}=We(b.sql,()=>U<w.length?t(R+U++):void 0);if(U!==w.length)throw TypeError(`[query-builder] SQL expression declares ${w.length} parameters but contains only ${U} placeholders`);return{text:se,parameters:w}}function xt(b,R){if(R.length===2){let[w,U]=R;if(Array.isArray(U)&&typeof w==="number"&&U[w]===b)return!1;if(U instanceof Set&&w===b&&U.has(b))return!1;if(U instanceof Map&&U.get(w)===b)return!1}return R.some((w)=>w!==void 0&&!(Array.isArray(w)&&w.length===0))}function nn(b,...R){if(typeof b==="string"){if(!(R.length===1&&Number.isInteger(R[0])&&R[0]>=0&&!b.includes("?"))&&xt(b,R))throw TypeError("[query-builder] raw(string) takes no values, so the argument(s) after the string would be dropped. Use raw as a tagged template instead, which interpolates each value as an escaped literal.");return{raw:b}}let w=b[0];for(let U=0;U<R.length;U++)w+=je(R[U])+b[U+1];return{raw:w}}function ke(b){return n(e.dialect)?`\`${b.replace(/`/g,"``")}\``:`"${b.replace(/"/g,'""')}"`}function wt(b,R=1){let w=Object.keys(b[0]??{}),U=[],se=R,O=b.map((ue)=>`(${w.map(($e)=>(U.push(ue[$e]),t(se++))).join(", ")})`);return{colsSql:w.map(ke).join(", "),valuesSql:O.join(", "),params:U,nextIndex:se}}function Tt(b){return Boolean(b&&(b.onSlowQuery||b.slowQueryThresholdMs!=null&&b.slowQueryThresholdMs>=0))}function c(b,R=e.dialect){if(!n(R))return b;let w=/^([A-Z_][\w$]*)(?:\.([A-Z_][\w$]*))?(?:\s+as\s+([A-Z_][\w$]*))?$/i.exec(b.trim());if(!w)return b;let[,U,se,O]=w,ue=se?`\`${U}\`.\`${se}\``:`\`${U}\``;return O?`${ue} AS \`${O}\``:ue}var jt=/^(?:[A-Z_][\w$]*)(?:\.(?:[A-Z_][\w$]*))?(?:\s+as\s+[A-Z_][\w$]*)?$/i,Ut=/^(?:\*|(?:[A-Z_][\w$]*)(?:\.(?:[A-Z_][\w$]*|\*))?(?:\s+as\s+[A-Z_][\w$]*)?)$/i;function Se(b,R,w={}){let U=String(b).trim();if(!(w.allowStar?Ut:jt).test(U))throw TypeError(`[query-builder] ${R}: '${U}' is not a plain column reference, so it will not be interpolated into SQL. Expected ${w.allowStar?"`*`, ":""}\`column\`, \`table.column\`, optionally with \`AS alias\`. For an expression use the matching *Raw method or the \`raw\` tagged template, which escape what they interpolate.`);return c(U)}function At(b,R=e.dialect){if(!n(R)||b===null||b===void 0)return b;if(typeof b==="string"){let w=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}(?::\d{2})?)(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/.exec(b);if(!w)return b;let[,U,se]=w;return`${U} ${se.length===5?`${se}:00`:se}`}if(!(b instanceof Date)||Number.isNaN(b.getTime()))return b;return b.toISOString().replace("T"," ").replace(/\.\d+Z$/,"")}function Dt(b){if(typeof b==="string")return Se(b,"select(column)",{allowStar:!0});if(Ke(b))return b.raw;if(Array.isArray(b))return b.map(Dt).join(", ");if(b&&typeof b==="object"){let R=b;if(typeof R.raw==="function")return String(R.raw());if(typeof R.sql==="string")return R.sql;let w=String(b);if(w!=="[object Object]")return Se(w,"select(column)",{allowStar:!0})}throw TypeError(`[query-builder] select(): unsupported column ${String(b)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function Ht(b){let R=/\(|\)|\bORDER\s+BY\b/gi,w=0,U;while(U=R.exec(b))if(U[0]==="(")w++;else if(U[0]===")")w=Math.max(0,w-1);else if(w===0)return!0;return!1}var he={SELECT_STAR:/^SELECT\s+\*/i,SELECT:/^SELECT\s+/i,SELECT_FROM:/^SELECT\s+(.+?)\s+FROM/i,WHERE:/\bWHERE\b/i,ORDER_BY:/\bORDER\s+BY\b/i,GROUP_BY:/\bGROUP\s+BY\b/i,LIMIT:/\sLIMIT\s+\d+/i,OFFSET:/\sOFFSET\s+\d+/i,IDENTIFIER:/^[A-Z_][\w.]*$/i,DELETED_AT:/\bdeleted_at\b/i},kt=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function j(b,R){if(!he.IDENTIFIER.test(b)){let w=R?` in ${R}`:"";throw Error(`[query-builder] Invalid identifier${w}: '${b}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function Ee(b,R){if(typeof b!=="string")throw TypeError(`[query-builder] ${R}: operator must be a string, got ${typeof b}`);let w=b.toLowerCase();if(!kt.has(w))throw TypeError(`[query-builder] ${R}: refusing to use '${b}' as a SQL operator \u2014 not in the allowed set (${[...kt].join(", ")})`);return b}function Ge(b,R,w,U){let se=R.toLowerCase();if(se!=="is"&&se!=="is not")return null;if(w!==null&&w!==void 0)throw TypeError(`[query-builder] ${U}: operator '${R}' only accepts NULL/undefined as value, got ${typeof w} (${String(w)})`);return`${b} IS ${se==="is not"?"NOT ":""}NULL`}function qe(b,R){if(typeof b!=="string"||b.length===0)throw TypeError(`[query-builder] ${R}: identifier must be a non-empty string, got ${typeof b}`);if(b.length>129)throw TypeError(`[query-builder] ${R}: identifier '${b}' too long`);let w=b.split(".");if(w.length>2)throw TypeError(`[query-builder] ${R}: identifier '${b}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let U of w)if(!/^[A-Z_][A-Z0-9_]*$/i.test(U))throw TypeError(`[query-builder] ${R}: identifier segment '${U}' contains characters outside [A-Za-z0-9_]`)}function tt(b,R,w=[]){let U=typeof b==="object"&&b!==null?b.parameters??b.values:void 0;if(xt(b,w)||Array.isArray(U)&&U.length>0){let se=R.startsWith("whereRaw(")?", or use where(). Model.query().whereRaw(sql, ...bindings) is the builder that binds `?` values.":R.startsWith("orWhereRaw(")?", or use orWhere(). Model.query().orWhereRaw(sql, ...bindings) is the builder that binds `?` values.":".";throw TypeError(`[query-builder] ${R}: this method takes a single fragment and no bindings, so the argument(s) after it would be dropped. Interpolate values with the exported \`raw\` tagged template, which inlines them as escaped literals${se}`)}if(typeof b==="string")return Yt(R),b;if(b===null||b===void 0)throw TypeError(`[query-builder] ${R}: fragment must be a SqlFragment, got ${b}`);if(Ke(b))return b.raw;if(typeof b==="object"){let se=b;if(typeof se.raw==="string")return se.raw;if(typeof se.raw==="function"){let ue=se.raw();if(typeof ue==="string")return ue}if(typeof se.sql==="string")return se.sql;let O=String(b);if(O!=="[object Object]"&&O!=="[object Promise]")return O}throw TypeError(`[query-builder] ${R}: cannot render this value as a SQL fragment. `+"A Bun `sql`...`` query object cannot be converted to SQL text \u2014 pass a "+"string, or use the exported `raw` helper: raw`count(*) as c` / raw('age > 18').")}function Vt(b,R){if(!R||R.length===0)return;if(e.dialect!=="postgres")return;if(/\$\d/.test(b))return;let w=te(b),U=`${R.length} binding${R.length===1?"":"s"}`,se=w>0?`the query binds them with ${w} \`?\` placeholder${w===1?"":"s"}, which Postgres reads as an operator rather than a parameter`:"the query contains no $n placeholder for them to bind to";throw TypeError(`[query-builder] unsafe(): ${U} supplied, but ${se}. Postgres numbers `+"its parameters, so write $1, $2 \u2026 in the order the bindings should bind: "+"unsafe('SELECT * FROM users WHERE email = $1 LIMIT 1', [email]). `?` is correct on SQLite and MySQL, which is why this call may work there.")}var Ot=new Set;function Yt(b){if(Ot.has(b))return;Ot.add(b),console.warn(`[query-builder] ${b}: bare string passed to a *Raw method. Prefer the \`raw\`...\`\` tagged template, which escapes interpolated `+"values for the configured dialect \u2014 concatenating request input into SQL "+"is an injection vector. This will become a hard error in a future release.")}function Nt(b,R=e.dialect){return n(R)?b.replace(/\\/g,"\\\\").replace(/'/g,"''"):b.replace(/'/g,"''")}function je(b){if(b===null)return"NULL";if(typeof b==="number"&&Number.isFinite(b))return String(b);if(typeof b==="boolean")return b?"1":"0";if(typeof b==="string")return`'${Nt(b)}'`;if(b instanceof Date)return`'${b.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof b}`)}function zt(b,R){let w=Array.isArray(b)?b:b?[b]:[],U=[];if(w.length)U.push(`PARTITION BY ${w.map((se)=>Se(se,"over(partitionBy)")).join(", ")}`);if(R&&R.length)U.push(`ORDER BY ${R.map(([se,O])=>`${Se(se,"over(orderBy)")} ${O==="desc"?"DESC":"ASC"}`).join(", ")}`);return U.length?`OVER (${U.join(" ")})`:"OVER ()"}class Lt{cache=new Map;maxSize=100;get(b){let R=this.cache.get(b);if(!R)return null;if(Date.now()>R.expiresAt)return this.cache.delete(b),null;return this.cache.delete(b),this.cache.set(b,R),R.data}set(b,R,w){if(this.cache.has(b))this.cache.delete(b);if(this.cache.size>=this.maxSize){let U=Date.now(),se=!1;for(let[O,ue]of this.cache)if(U>ue.expiresAt){if(this.cache.delete(O),se=!0,this.cache.size<this.maxSize)break}if(!se){let O=this.cache.keys().next().value;if(O!==void 0)this.cache.delete(O)}}this.cache.set(b,{data:R,expiresAt:Date.now()+w})}clear(){this.cache.clear()}setMaxSize(b){this.maxSize=Math.max(0,Math.floor(b));while(this.cache.size>this.maxSize){let R=this.cache.keys().next().value;if(R===void 0)break;this.cache.delete(R)}}}var $t=new Lt,It=new WeakMap,Xt=0;function Zt(b,R,w){let U=It.get(b);if(U===void 0)U=++Xt,It.set(b,U);let se=w.map((O)=>ArrayBuffer.isView(O)?["view",Rt.isBuffer(O)?"Buffer":Object.prototype.toString.call(O),Rt.from(O.buffer,O.byteOffset,O.byteLength).toString("base64")]:["value",Kt(O).toString("base64")]);return`${U}\x00${R}\x00${JSON.stringify(se)}`}function en(b){let R=String(b?.message||"").toLowerCase();return R.includes("deadlock")||R.includes("serialization failure")||R.includes("could not serialize access")||R.includes("deadlock found when trying to get lock")||R.includes("lock wait timeout exceeded")||R.includes("database is locked")||R.includes("busy")}function tn(b,R){if(!R||R.length===0)return!1;let w=b&&(b.code||b.sqlState||b.sqlstate);if(!w)return!1;return R.includes(w)}function rn(b){return new Promise((R)=>setTimeout(R,b))}var St=new Map,sn=500,an=[{key:"GROUP_BY",pattern:/GROUP\s+BY\b/iy},{key:"ORDER_BY",pattern:/ORDER\s+BY\b/iy},{key:"HAVING",pattern:/HAVING\b/iy},{key:"OFFSET",pattern:/OFFSET\b/iy},{key:"LIMIT",pattern:/LIMIT\b/iy},{key:"WHERE",pattern:/WHERE\b/iy}],on=[{key:"tail",pattern:/GROUP\s+BY\b/iy},{key:"tail",pattern:/ORDER\s+BY\b/iy},{key:"tail",pattern:/HAVING\b/iy},{key:"tail",pattern:/LIMIT\b/iy},{key:"tail",pattern:/OFFSET\b/iy},{key:"tail",pattern:/WINDOW\b/iy},{key:"tail",pattern:/UNION\b/iy},{key:"tail",pattern:/INTERSECT\b/iy},{key:"tail",pattern:/EXCEPT\b/iy},{key:"tail",pattern:/FOR\s+UPDATE\b/iy},{key:"tail",pattern:/FOR\s+SHARE\b/iy},{key:"tail",pattern:/LOCK\s+IN\s+SHARE\s+MODE\b/iy}],ln=[{key:"cut",pattern:/GROUP\s+BY\b/iy},{key:"cut",pattern:/ORDER\s+BY\b/iy},{key:"cut",pattern:/WHERE\b/iy},{key:"cut",pattern:/HAVING\b/iy},{key:"cut",pattern:/LIMIT\b/iy},{key:"cut",pattern:/OFFSET\b/iy},{key:"cut",pattern:/UNION\b/iy}];function nt(b){let R=St.get(b);if(R!==void 0)return R;let w=un(b);if(St.size>=sn)St.clear();return St.set(b,w),w}function un(b){let R=Ue(b,an);if(R.length<=1)return b;let w=b.slice(0,R[0].start).trimEnd(),U={};for(let ue=0;ue<R.length;ue++){let Oe=R[ue].start,$e=ue+1<R.length?R[ue+1].start:b.length,pe=b.slice(Oe,$e).trim();if(!U[R[ue].key])U[R[ue].key]=[];U[R[ue].key].push(pe)}let O=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((ue)=>U[ue]).map((ue)=>U[ue].join(" ")).join(" ");return O?`${w} ${O}`:w}function cn(b,R){let w=Math.max(1,R?.baseMs??50),U=Math.max(1,R?.factor??2),se=Math.max(w,R?.maxMs??2000),O=Math.min(se,w*U**Math.max(0,b-1));if(R?.jitter)O=Math.min(se,O*(0.9+Math.random()*0.2));return Math.floor(O)}function i(b){let R=_(b?.sql??T()),w=b?.meta,U=b?.schema,se;function O(g,f){let y=R.unsafe(g,f);if(typeof y.sql!=="string")se??=new WeakMap,se.set(y,{sql:g,params:f?.slice()});return y}let ue,Oe=(g,f)=>{let y=w?.temporalColumns?.[g];if(!y||y.length===0||!n(e.dialect))return f;return f.map((d)=>{let N=null;for(let L of y){if(!(L in d))continue;let S=At(d[L]);if(S!==d[L])N=N??{...d},N[L]=S}return N??d})};function $e(g){if(typeof g==="number")return g;let f=String(g),y=7;for(let d=0;d<f.length;d++)y=y*31+f.charCodeAt(d)|0;return Math.abs(y)}function pe(){if(!b?.hooks)return e.hooks;return{...e.hooks,...b.hooks}}let Ye=new Map;function ze(g){if(Array.isArray(g)){let[L,S,F]=g;j(L,"where(column)");let H=String(L);switch(S){case"in":if(Array.isArray(F)){let z=s(F.length);return O(`${H} IN (${z})`,F)}return O(`${H} IN (${t(1)})`,[F]);case"not in":if(Array.isArray(F)){let z=s(F.length);return O(`${H} NOT IN (${z})`,F)}return O(`${H} NOT IN (${t(1)})`,[F]);case"like":return O(`${H} LIKE ${t(1)}`,[F]);case"is":case"is not":{if(F!==null&&F!==void 0)throw TypeError(`[query-builder] where(..., '${S}', ?): operator '${S}' only accepts NULL/undefined as value, got ${typeof F} (${String(F)})`);return O(`${H} IS ${S==="is not"?"NOT ":""}NULL`)}case"!=":return O(`${H} <> ${t(1)}`,[F]);case"<":case">":case"<=":case">=":case"=":return O(`${H} ${S} ${t(1)}`,[F]);default:throw TypeError(`[query-builder] where(..., '${String(S)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in g)return g.raw;let f=Object.keys(g);if(f.length===0)return O("");let y=[],d=[],N=1;for(let L of f){j(L,"where(object key)");let S=g[L];if(Array.isArray(S)){let F=s(S.length,N);y.push(`${L} IN (${F})`),d.push(...S),N+=S.length}else y.push(`${L} = ${t(N++)}`),d.push(S)}return O(y.join(" AND "),d)}function st(g,f,y){if(!y)return f;let d=ze(y);return R`${f} WHERE ${d}`}function at(g){let f=se?.get(g);if(f)return f.sql;let y=e.debug?.captureText;if(e.debug)e.debug.captureText=!0;let d=String(g);if(e.debug)e.debug.captureText=y;return d}function ht(g){let f=se?.get(g);if(f)return f.params;if(!g||typeof g!=="object")return;if(Array.isArray(g.values))return g.values;if(Array.isArray(g.parameters))return g.parameters;if(Array.isArray(g.params))return g.params;return}function ae(g,f,y){let d=pe(),N=d?.slowQueryThresholdMs,L=N!=null&&N>=0,S=Boolean(d?.onSlowQuery||L),F=d&&(d.onQueryStart||d.onQueryEnd||d.onQueryError||d.startSpan||S),H=y?.timeoutMs&&y.timeoutMs>0||y?.signal;if(!F&&!H)return g.execute();let z=at(g),D=ht(g),Q=Date.now(),J;try{if(d?.onQueryStart?.({sql:z,params:D,kind:f}),d?.startSpan)J=d.startSpan({sql:z,params:D,kind:f})}catch{}let E=!1,M=(V,ne,K=Boolean(V))=>{if(E)return;E=!0;let X=Date.now()-Q;try{if(K)d?.onQueryError?.({sql:z,params:D,error:V,durationMs:X,kind:f});else if(d?.onQueryEnd?.({sql:z,params:D,durationMs:X,rowCount:ne,kind:f}),L&&X>=N)if(d?.onSlowQuery)d.onSlowQuery({sql:z,params:D,durationMs:X,kind:f});else console.warn(`[query-builder] slow query (${X}ms >= ${N}ms): ${z}`)}catch{}try{J?.end(V)}catch{}};if(typeof g.executeSync==="function"){let V,ne,K=!1;try{V=g.executeSync()}catch(oe){ne=oe,K=!0}if(y?.signal?.aborted){try{g.cancel?.()}catch{}ne=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),K=!0}if(K)return M(ne,void 0,!0),Promise.reject(ne);let X=Array.isArray(V)?V.length:typeof V==="number"?V:void 0;return M(void 0,X),Promise.resolve(V)}let G=g.execute(),W=[G],Y;if(y?.timeoutMs&&y.timeoutMs>0){let V=new Promise((ne,K)=>{Y=setTimeout(()=>{try{g.cancel?.()}catch{}let X=Error(`Query timed out after ${y.timeoutMs}ms`);X.code="EBQBTIMEOUT",K(X)},y.timeoutMs)});W.push(V)}if(y?.signal){if(y.signal.aborted){try{g.cancel?.()}catch{}let ne=Error("Query aborted");return ne.code="EBQBABORT",M(ne),Promise.reject(ne)}let V=()=>{try{g.cancel?.()}catch{}};y.signal.addEventListener("abort",V,{once:!0}),G.finally(()=>{y.signal?.removeEventListener("abort",V)})}return Promise.race(W).then((V)=>{clearTimeout(Y);let ne=Array.isArray(V)?V.length:typeof V==="number"?V:void 0;return M(void 0,ne),V}).catch((V)=>{throw clearTimeout(Y),M(V),V})}function ve(g){if(typeof g==="number")return Number.isFinite(g)?g:0;if(typeof g==="bigint")return Number(g);if(!g||typeof g!=="object")return 0;let f=g;for(let y of["changes","affectedRows","count","rowCount","numAffectedRows","numUpdatedRows","numDeletedRows","numInsertedOrUpdatedRows"])if(f[y]!==void 0&&f[y]!==null)return ve(f[y]);if(Array.isArray(g))return g.reduce((y,d)=>y+ve(d),0);return 0}function Ce(g,f){let y=f??at(g);return{sql:y,toString:()=>y,execute:()=>g.execute(),values:()=>g.values(),raw:()=>g.raw()}}function _e(g,f){let y=R,d=f&&f.length>0?`SELECT ${f.join(", ")} FROM ${String(g)}`:`SELECT * FROM ${String(g)}`,N=!1,L=[],S=[],F=!1,H=!1,z=!1,D=null,Q=()=>{if(D===null){let a=nt(W());D=S.length>0?O(a,S):O(a)}return D},J=(a="",o="",u=[])=>O(`${a}${nt(W())}${o}`,[...S,...u]),E=(a,o)=>{L.push({conn:a,sql:o}),D=null},M=(a,o)=>{E(a==="OR"?"OR":"AND",o)},G=(a)=>{let o=Ue(a,on,1);return o.length>0?o[0].start:-1},W=(a)=>{let o=x(a?[...L,a]:L);if(!o)return d;if(F)return`${d} ${H?"AND":"WHERE"} ${o}`;let u=G(d);return u>=0?`${d.slice(0,u)}WHERE ${o} ${d.slice(u)}`:`${d} WHERE ${o}`},Y=(a,o,u,h)=>{let B=typeof u?.__sqlState==="function"?u.__sqlState():void 0,k;if(B){let C=S.length;k=C>0&&e.dialect==="postgres"?B.sql.replace(/\$(\d+)/g,(I,P)=>`$${Number(P)+C}`):B.sql,S.push(...B.params)}else k=String(u.toSQL());E(a,`${o} ${h?"NOT IN":"IN"} (${k})`)},V=(a,o)=>{let u=_e(g);o(u);let h=u.__whereState?.();if(!h||!h.body)throw TypeError("[query-builder] whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");let B=S.length,k=B>0&&e.dialect==="postgres"?h.body.replace(/\$(\d+)/g,(C,I)=>`$${Number(I)+B}`):h.body;S.push(...h.params),E(a,`(${k})`)},ne=(a,o,u,h,B,k)=>{if(typeof h==="string"&&B!==void 0){j(String(h),`${u}(column)`),Ee(B,`${u}(operator)`);let C=Ge(String(h),String(B),k,u);if(C)return E(o,C),a;let I=S.length+1;return S.push(k),E(o,`${String(h)} ${String(B)} ${t(I)}`),a}if(Array.isArray(h)){let[C,I,P]=h,A=String(C);j(A,`${u}(column)`);let q=Ee(I,`${u}(operator)`);if(q==="in"||q==="not in"){let Z=Array.isArray(P)?P:[P],le=s(Z.length,S.length+1),Be=l(c(A),Z,q==="not in",le);S.push(...Z),E(o,Be)}else{let Z=Ge(A,q,P,u);if(Z)return E(o,Z),a;let le=S.length+1;S.push(P),E(o,`${A} ${q} ${t(le)}`)}return a}if(typeof h==="function")return V(o,h),a;if(dt(h))yt(`${u}(expr)`);if(Ze(h)){let C=et(h,S.length+1);return S.push(...C.parameters),E(o,C.text),a}if(h&&typeof h==="object"&&!("raw"in h)){let C=[];for(let I of Object.keys(h)){j(I,`${u}(column)`);let P=h[I];if(Array.isArray(P)){let A=s(P.length,S.length+1);C.push(l(c(I),P,!1,A)),S.push(...P)}else{let A=S.length+1;C.push(`${I} = ${t(A)}`),S.push(P)}}if(C.length>0)E(o,C.length>1?`(${C.join(" AND ")})`:C[0]);return a}if(h&&typeof h.raw<"u")return E(o,h.raw),a;return a},K=(a,o)=>{if(L.length>0)d=W(),L.length=0;F=!0;let u=o.__rawState?.();if(u){let h=S.length,B=e.dialect==="postgres"?u.sql.replace(/\$(\d+)/g,(k,C)=>`$${Number(C)+h}`):u.sql;d+=` ${a} ${B}`,S.push(...u.params),H=o.__hasPredicate?.()??he.WHERE.test(B)}else{let h=String(o.toSQL());d+=` ${a} ${h}`,H=o.__hasPredicate?.()??he.WHERE.test(h)}D=null},X=(a)=>{let o=Ue(d,ln,1),u=o.length>0?o[0].start:-1;d=u>=0?`${d.slice(0,u)}${a} ${d.slice(u)}`:`${d} ${a}`,D=null},oe=new Set,ee,re,we=!1,He=!1,Ne=!1,Xe=new Map,Qe=new Set,gt=60000,ge=(a)=>m(e.relations.singularizeStrategy)(a),Ve=(a)=>{if(!w)return null;return v(w,String(g),a,{singularize:ge,models:w.models})},ot=(a)=>{if(!a||typeof a!=="object"||Qe.size===0)return a;let o;for(let u of Object.keys(a))if(u.startsWith("pivot_")){if(!o)o={};o[u.slice(6)]=a[u],delete a[u]}if(o)a.pivot=o;return a},it=(a)=>{if(Qe.size===0||!a)return a;if(Array.isArray(a))for(let o=0;o<a.length;o++)ot(a[o]);else ot(a);return a},lt=(a)=>{if(!w)return;if(oe.has(a.pivotTable))return;let o=String(g),u=w.primaryKeys[o]??"id";j(a.pivotTable,"wherePivot auto-join (pivot table)"),j(a.fkParent,"wherePivot auto-join (parent FK)"),j(o,"wherePivot auto-join (parent table)"),j(u,"wherePivot auto-join (parent PK)"),D=y`${Q()} LEFT JOIN ${y(a.pivotTable)} ON ${y(`${a.pivotTable}.${a.fkParent}`)} = ${y(`${o}.${u}`)}`,d=`${d} LEFT JOIN ${a.pivotTable} ON ${a.pivotTable}.${a.fkParent} = ${o}.${u}`,oe.add(a.pivotTable)},ut=(a)=>{if(he.SELECT_STAR.test(d))d=d.replace(he.SELECT_STAR,`SELECT *, ${a}`);else if(he.SELECT.test(d))d=d.replace(he.SELECT_FROM,`SELECT $1, ${a} FROM`);let o=String(Q());if(he.SELECT_STAR.test(o)){let u=o.replace(he.SELECT_STAR,`SELECT *, ${a}`);D=O(u)}else if(he.SELECT.test(o)){if(he.SELECT_FROM.exec(o)){let h=o.replace(he.SELECT_FROM,`SELECT $1, ${a} FROM`);D=O(h)}}},Fe=(a,o,u,h)=>{let B=Se(o,"over(alias)");ut(`${a} ${zt(u,h)} AS ${B}`)},ft=(a,o,u,h)=>{j(a,"relationship subquery (parent table)"),j(o,"relationship subquery (target table)"),j(u,"relationship subquery (primary key)");let B=`${a.endsWith("s")?a.slice(0,-1):a}_id`;j(B,"relationship subquery (foreign key)");let k=`SELECT 1 FROM ${o} WHERE ${o}.${B} = ${a}.${u}`;if(h){let I=h({where:(P,A,q)=>(j(P,"relationship subquery condition"),`${o}.${P} ${Ee(A,"whereHas callback")} ${je(q)}`)});if(I)k+=` AND ${I}`}return k},bt=(a,o,u,h)=>{j(a,"relationship subquery (parent table)"),j(o,"relationship subquery (target table)"),j(u,"relationship subquery (primary key)");let B=`${o.endsWith("s")?o.slice(0,-1):o}_id`;j(B,"relationship subquery (foreign key)");let k=`SELECT 1 FROM ${o} WHERE ${o}.${u} = ${a}.${B}`;if(h){let I=h({where:(P,A,q)=>(j(P,"relationship subquery condition"),`${o}.${P} ${Ee(A,"whereHas callback")} ${je(q)}`)});if(I)k+=` AND ${I}`}return k},mt=(a,o,u,h,B,k)=>{j(a,"relationship subquery (parent table)"),j(o,"relationship subquery (target table)"),j(u,"relationship subquery (primary key)"),j(h,"relationship subquery (target primary key)");let C=k&&w?v(w,a,k,{singularize:ge,models:w.models}):null,I=ge(a),P=ge(o),A=C?.pivotTable??[I,P].sort().join("_"),q=C?.fkParent??`${I}_id`,Z=C?.fkRelated??`${P}_id`;j(A,"relationship subquery (pivot table)"),j(q,"relationship subquery (foreign key A)"),j(Z,"relationship subquery (foreign key B)");let le=`SELECT 1 FROM ${A} JOIN ${o} ON ${o}.${h} = ${A}.${Z} WHERE ${A}.${q} = ${a}.${u}`;if(B){let ie=B({where:(De,Ae,Ie)=>(j(De,"relationship subquery condition"),`${o}.${De} ${Ee(Ae,"whereHas callback")} ${je(Ie)}`)});if(ie)le+=` AND ${ie}`}return le},Ct=(a,o,u)=>{j(a,"withCount (parent table)"),j(o,"withCount (target table)"),j(u,"withCount (primary key)");let h=`${a.endsWith("s")?a.slice(0,-1):a}_id`;return j(h,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${o} WHERE ${o}.${h} = ${a}.${u})`},qt=(a,o,u,h)=>{j(a,"withCount (parent table)"),j(o,"withCount (target table)"),j(u,"withCount (primary key)");let B=h&&w?v(w,a,h,{singularize:ge,models:w.models}):null,k=ge(a),C=ge(o),I=B?.pivotTable??[k,C].sort().join("_"),P=B?.fkParent??`${k}_id`;return j(I,"withCount (pivot table)"),j(P,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${I} WHERE ${I}.${P} = ${a}.${u})`},pt=(a,o,u)=>{if(!w)return;j(u,`with${a[0]}${a.slice(1).toLowerCase()} (column)`);let h=String(g),B=w.relations?.[h];if(!B)return;let k=Object.entries(B).find(([ie,De])=>De&&typeof De==="object"&&(o in De));if(!k)return;let[C,I]=k,P=I[o],A=typeof P==="string"?P:P?.model||P?.target||P,q=w.modelToTable[A]||A,Z=w.primaryKeys[h]??"id";j(q,`with${a} (target table)`);let le=`${a}(${q}.${u})`,Be;if(C==="hasMany"||C==="hasOne"){let ie=`${h.endsWith("s")?h.slice(0,-1):h}_id`;j(ie,`with${a} (foreign key)`),Be=`(SELECT ${le} FROM ${q} WHERE ${q}.${ie} = ${h}.${Z})`}else if(C==="belongsToMany"){let ie=w?v(w,h,o,{singularize:ge,models:w.models}):null,De=ge(h),Ae=ge(q),Ie=ie?.pivotTable??[De,Ae].sort().join("_"),Re=ie?.fkParent??`${De}_id`,ce=ie?.fkRelated??`${Ae}_id`,ct=w.primaryKeys[q]??"id";j(Ie,`with${a} (pivot table)`),j(Re,`with${a} (foreign key)`),j(ce,`with${a} (related key)`),Be=`(SELECT ${le} FROM ${Ie} JOIN ${q} ON ${q}.${ct} = ${Ie}.${ce} WHERE ${Ie}.${Re} = ${h}.${Z})`}else return;ut(`${Be} AS ${o}_${a.toLowerCase()}_${u}`)},Et=()=>{if(Xe.size===0)return;let a=[];for(let[o,u]of Xe.entries()){let h=Ve(o);if(!h)continue;for(let k of u)j(k,"withPivot");let B=u.map((k)=>`${h.pivotTable}.${k} AS pivot_${k}`);a.push(...B)}if(a.length>0){let o=a.join(", ");ut(o)}};return new Proxy({distinct(){return d=d.replace(/^SELECT\s+/i,"SELECT DISTINCT "),D=null,this},distinctOn(...a){let o=a.map((u)=>Se(u,"distinctOn(column)")).join(", ");return d=d.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${o}) `),D=null,this},selectRaw(a,...o){let u=tt(a,"selectRaw(fragment)",o),h=d.indexOf(" FROM ");if(h!==-1)d=`${d.substring(0,h)}, ${u}${d.substring(h)}`;else d+=`, ${u}`;return D=null,this},rowNumber(a="row_number",o,u){let h=[];if(o){let I=Array.isArray(o)?o:[o];h.push(`PARTITION BY ${I.join(", ")}`)}if(u&&u.length)h.push(`ORDER BY ${u.map(([I,P])=>`${I} ${P==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`ROW_NUMBER() ${h.length?`OVER (${h.join(" ")})`:"OVER ()"} AS ${a}`,C=d.indexOf(" FROM ");if(C!==-1)d=`${d.substring(0,C)}, ${k}${d.substring(C)}`;else d+=`, ${k}`;return D=null,this},denseRank(a="dense_rank",o,u){let h=Array.isArray(o)?o:o?[o]:[],B=[];if(h.length)B.push(`PARTITION BY ${h.join(", ")}`);if(u&&u.length)B.push(`ORDER BY ${u.map(([P,A])=>`${P} ${A==="desc"?"DESC":"ASC"}`).join(", ")}`);let C=`DENSE_RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,I=d.indexOf(" FROM ");if(I!==-1)d=`${d.substring(0,I)}, ${C}${d.substring(I)}`;else d+=`, ${C}`;return D=null,this},rank(a="rank",o,u){let h=Array.isArray(o)?o:o?[o]:[],B=[];if(h.length)B.push(`PARTITION BY ${h.join(", ")}`);if(u&&u.length)B.push(`ORDER BY ${u.map(([P,A])=>`${P} ${A==="desc"?"DESC":"ASC"}`).join(", ")}`);let C=`RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,I=d.indexOf(" FROM ");if(I!==-1)d=`${d.substring(0,I)}, ${C}${d.substring(I)}`;else d+=`, ${C}`;return D=null,this},over(a,o,u={}){return Fe(a,o,u.partitionBy,u.orderBy),this},lag(a,o={}){let u=[Se(a,"over(column)"),String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return Fe(`LAG(${u.join(", ")})`,o.alias??`${a}_lag`,o.partitionBy,o.orderBy),this},lead(a,o={}){let u=[Se(a,"over(column)"),String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return Fe(`LEAD(${u.join(", ")})`,o.alias??`${a}_lead`,o.partitionBy,o.orderBy),this},sumOver(a,o={}){return Fe(`SUM(${Se(a,"over(column)")})`,o.alias??`${a}_sum`,o.partitionBy,o.orderBy),this},avgOver(a,o={}){return Fe(`AVG(${Se(a,"over(column)")})`,o.alias??`${a}_avg`,o.partitionBy,o.orderBy),this},countOver(a="*",o={}){return Fe(`COUNT(${Se(a,"over(column)",{allowStar:!0})})`,o.alias??"count_over",o.partitionBy,o.orderBy),this},minOver(a,o={}){return Fe(`MIN(${Se(a,"over(column)")})`,o.alias??`${a}_min`,o.partitionBy,o.orderBy),this},maxOver(a,o={}){return Fe(`MAX(${Se(a,"over(column)")})`,o.alias??`${a}_max`,o.partitionBy,o.orderBy),this},firstValue(a,o={}){return Fe(`FIRST_VALUE(${Se(a,"over(column)")})`,o.alias??`${a}_first`,o.partitionBy,o.orderBy),this},lastValue(a,o={}){return Fe(`LAST_VALUE(${Se(a,"over(column)")})`,o.alias??`${a}_last`,o.partitionBy,o.orderBy),this},selectAll(a){let o=a===void 0||a===null?[]:Array.isArray(a)?a:[a];if(o.length===0)return this;for(let B of o)j(String(B),"selectAll(table)");let u=o.map((B)=>`${String(B)}.*`).join(", "),h=/^SELECT\s+((?:DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)?)\*(?=\s*,|\s+FROM\b|$)/i.exec(d);if(h)d=`SELECT ${h[1]}${u}${d.substring(h[0].length)}`;else{let B=d.indexOf(" FROM ");d=B!==-1?`${d.substring(0,B)}, ${u}${d.substring(B)}`:`${d}, ${u}`}return N=!0,D=null,this},select(a){if(!a)return this;if(N)return this.addSelect(...Array.isArray(a)?a:[a]);let o=Array.isArray(a)?a:[a];if(o.length===0)return this;let u=o.map(Dt),h=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(d),B=h?h[1]:"",k=d.indexOf(" FROM ");if(k!==-1)d=`SELECT ${B}${u.join(", ")}${d.substring(k)}`;else d=`SELECT ${B}${u.join(", ")} FROM ${g}`;return D=null,this},addSelect(...a){if(!a.length)return this;let o=a.map(Dt),u=d.indexOf(" FROM ");if(u!==-1)d=`${d.substring(0,u)}, ${o.join(", ")}${d.substring(u)}`;else d+=`, ${o.join(", ")}`;return D=null,this},with(...a){if(!w||!a||a.length===0)return this;let o=[];for(let A of a){if(!A)continue;if(typeof A==="string")o.push({name:A});else if(typeof A==="object"&&!Array.isArray(A))for(let[q,Z]of Object.entries(A))if(typeof Z==="function")o.push({name:q,callback:Z});else o.push({name:q})}if(o.length===0)return this;let u=e.relations.maxEagerLoad??50;if(o.length>u)throw Error(`[query-builder] Too many relationships to eager load (${o.length}). Maximum allowed: ${u}`);let h=String(g),B=new Set,k=new Set,C=new Map,I=(A)=>{let q=w.relations?.[A];if(!q)return[];return[...Object.keys(q.hasOne||{}),...Object.keys(q.hasMany||{}),...Object.keys(q.belongsTo||{}),...Object.keys(q.belongsToMany||{}),...Object.keys(q.hasOneThrough||{}),...Object.keys(q.hasManyThrough||{}),...Object.keys(q.morphOne||{}),...Object.keys(q.morphMany||{}),...Object.keys(q.morphToMany||{}),...Object.keys(q.morphedByMany||{})]},P=(A,q,Z=0,le)=>{let Be=e.relations.maxDepth??10;if(Z>=Be)throw Error(`[query-builder] Maximum relationship depth (${Be}) exceeded at '${q}'. Consider using separate queries or increasing maxDepth.`);let ie=w.relations?.[A];if(!ie)return A;let De=(de)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let ye=e.softDeletes.column||"deleted_at";return` AND ${de}.${ye} IS NULL`}return""},Ae=(de)=>{if(!le)return"";let ye=[],be=(Te,xe,Je)=>{j(String(Te),"with() constraint column");let rt=Ee(xe,"with() constraint operator");ye.push(`${de}.${String(Te)} ${rt} ${je(Je)}`)},fe=(Te)=>()=>{throw Error(`[query-builder] with('${q}', ...): ${Te} is not supported inside a constraint callback on the JOIN-based builder \u2014 apply it to the outer query, or use the model layer's eager loading. (Silently ignoring it would return wrong data.)`)},me={where:(Te,xe,Je)=>{if(Array.isArray(Te))be(Te[0],Te[1],Te[2]);else if(Te&&typeof Te==="object")for(let rt of Object.keys(Te))be(rt,"=",Te[rt]);else if(xe!==void 0&&Je!==void 0)be(Te,xe,Je);else if(xe!==void 0)be(Te,"=",xe);return me},whereIn:(Te,xe)=>(j(String(Te),"with() constraint column"),ye.push(`${de}.${String(Te)} IN (${xe.map(je).join(", ")})`),me),whereNull:(Te)=>(j(String(Te),"with() constraint column"),ye.push(`${de}.${String(Te)} IS NULL`),me),whereNotNull:(Te)=>(j(String(Te),"with() constraint column"),ye.push(`${de}.${String(Te)} IS NOT NULL`),me),orderBy:fe("orderBy()"),limit:fe("limit()"),offset:fe("offset()"),take:fe("take()")};return le(me),ye.length?` AND ${ye.join(" AND ")}`:""},Ie=()=>{let de=(fe)=>{let me=fe?.[q];return me?w.modelToTable[me]:void 0},ye=(fe)=>{let me=fe?.[q],Te=typeof me==="string"?me:me?.model;return Te?w.modelToTable[Te]:void 0},be=(fe)=>{let me=fe?.[q];return me?.target?w.modelToTable[me.target]:void 0};return de(ie?.hasOne)||de(ie?.hasMany)||de(ie?.belongsTo)||ye(ie?.belongsToMany)||be(ie?.hasOneThrough)||be(ie?.hasManyThrough)||de(ie?.morphOne)||de(ie?.morphMany)||de(ie?.morphToMany)||de(ie?.morphedByMany)},Re=Ie()??(w.modelToTable[q]||w.tableToModel[q]?w.modelToTable[q]??q:q),ce=String(Re);if(!Re||!Ie()&&!w.modelToTable[q]&&!w.tableToModel[q]){let de=I(A);if(de.length>0&&!de.includes(q)){let ye=` Available relationships: ${de.join(", ")}`;throw Error(`[query-builder] Relationship '${q}' not found on table '${A}'.${ye}`)}}if(e.relations.detectCycles!==!1){let de=`${A}->${ce}`;if(B.has(de))throw Error(`[query-builder] Circular relationship detected: ${de}. This would cause an infinite loop.`);B.add(de)}if(!ce||ce===A)return A;let ct=ie?.hasOneThrough?.[q]||ie?.hasManyThrough?.[q];if(ct){let{through:de,target:ye}=ct,be=w.modelToTable[de]||de,fe=w.modelToTable[ye]||ye,me=w.primaryKeys[A]??"id",Te=w.primaryKeys[be]??"id",xe=`${ge(A)}_id`,Je=`${ge(be)}_id`;return X(`LEFT JOIN ${be} ON ${be}.${xe} = ${A}.${me} LEFT JOIN ${fe} ON ${fe}.${Je} = ${be}.${Te}`),oe.add(be),oe.add(fe),fe}if(Boolean(ie?.belongsToMany?.[q])){let de=v(w,A,q,{singularize:ge,models:w.models}),ye=de?.pivotTable??[ge(A),ge(ce)].sort().join("_"),be=w.primaryKeys[A]??"id",fe=w.primaryKeys[ce]??"id",me=de?.fkParent??`${ge(A)}_id`,Te=de?.fkRelated??`${ge(ce)}_id`;return X(`LEFT JOIN ${ye} ON ${ye}.${me} = ${A}.${be} LEFT JOIN ${ce} ON ${ce}.${fe} = ${ye}.${Te}${Ae(ce)}`),oe.add(ye),oe.add(ce),ce}if(Boolean(ie?.morphToMany?.[q])){let de=q,ye=`${ge(ce)}_${de}`,be=w.primaryKeys[A]??"id",fe=w.primaryKeys[ce]??"id",me=`${de}_type`,Te=`${de}_id`,xe=`${ge(ce)}_id`,Je=je(w.tableToModel[A]||A);return X(`LEFT JOIN ${ye} ON ${ye}.${Te} = ${A}.${be} AND ${ye}.${me} = ${Je} LEFT JOIN ${ce} ON ${ce}.${fe} = ${ye}.${xe}`),oe.add(ye),oe.add(ce),ce}if(Boolean(ie?.morphedByMany?.[q])){let de=ie.morphedByMany?.[q]||q,ye=w.modelToTable[de]||de,be=ge(A),fe=`${ge(ye)}_${be}`,me=w.primaryKeys[A]??"id",Te=w.primaryKeys[ye]??"id",xe=`${be}_type`,Je=`${be}_id`,rt=`${ge(ye)}_id`,Ft=je(w.tableToModel[ye]||ye);return X(`LEFT JOIN ${fe} ON ${fe}.${rt} = ${A}.${me} LEFT JOIN ${ye} ON ${ye}.${Te} = ${fe}.${Je} AND ${fe}.${xe} = ${Ft}`),oe.add(fe),oe.add(ye),ye}if(Boolean(ie?.belongsTo?.[q])){let de=`${ge(ce)}_id`,ye=w.primaryKeys[ce]??"id";return X(`LEFT JOIN ${ce} ON ${A}.${de} = ${ce}.${ye}${Ae(ce)}`),oe.add(ce),ce}let Pt=Boolean(ie?.morphOne?.[q]),vt=Boolean(ie?.morphMany?.[q]);if(Pt||vt){let de=`${q}_type`,ye=`${q}_id`,be=w.primaryKeys[A]??"id",fe=je(w.tableToModel[A]||A);return X(`LEFT JOIN ${ce} ON ${ce}.${ye} = ${A}.${be} AND ${ce}.${de} = ${fe}`),oe.add(ce),ce}let Qt=`${ge(A)}_id`,Mt=w.primaryKeys[A]??"id",Wt=`${De(ce)}${Ae(ce)}`;return X(`LEFT JOIN ${ce} ON ${ce}.${Qt} = ${A}.${Mt}${Wt}`),oe.add(ce),ce};for(let A of o){let q=A.name.trim();if(A.callback)C.set(q,A.callback);let Z=q.split("."),le=h,Be=0;for(let ie of Z){if(!ie||ie.trim().length===0)continue;let De=ie.trim(),Ae=C.get(De);le=P(le,De,Be,Ae)||le,Be++}k.add(q)}if(Xe.size>0){let A=[];for(let[q,Z]of Xe.entries()){let le=Ve(q);if(!le)continue;let Be=Z.map((ie)=>`${le.pivotTable}.${ie} AS pivot_${ie}`);A.push(...Be)}if(A.length>0){let q=A.join(", ");ut(q)}}return D=null,this},whereHas(a,o){if(!w)return this;let u=String(g),h=w.relations?.[u];if(!h)throw Error(`[query-builder] No relationships defined for table '${u}'`);let B=Object.entries(h).find(([Z,le])=>le&&typeof le==="object"&&(a in le));if(!B)throw Error(`[query-builder] Relationship '${a}' not found on table '${u}'`);let[k,C]=B,I=C[a],P=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[P]||P,q;if(k==="hasMany"||k==="hasOne"){let Z=w.primaryKeys[u]??"id";q=ft(u,A,Z,o)}else if(k==="belongsTo"){let Z=w.primaryKeys[A]??"id";q=bt(u,A,Z,o)}else if(k==="belongsToMany"){let Z=w.primaryKeys[u]??"id",le=w.primaryKeys[A]??"id";q=mt(u,A,Z,le,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereHas`);return M("WHERE",`EXISTS (${q})`),this},whereDoesntHave(a,o){if(!w)return this;let u=String(g),h=w.relations?.[u];if(!h)throw Error(`[query-builder] No relationships defined for table '${u}'`);let B=Object.entries(h).find(([Z,le])=>le&&typeof le==="object"&&(a in le));if(!B)throw Error(`[query-builder] Relationship '${a}' not found on table '${u}'`);let[k,C]=B,I=C[a],P=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[P]||P,q;if(k==="hasMany"||k==="hasOne"){let Z=w.primaryKeys[u]??"id";q=ft(u,A,Z,o)}else if(k==="belongsTo"){let Z=w.primaryKeys[A]??"id";q=bt(u,A,Z,o)}else if(k==="belongsToMany"){let Z=w.primaryKeys[u]??"id",le=w.primaryKeys[A]??"id";q=mt(u,A,Z,le,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereDoesntHave`);return M("WHERE",`NOT EXISTS (${q})`),this},has(a){if(!w)return this;let o=String(g),u=w.relations?.[o];if(!u)throw Error(`[query-builder] No relationships defined for table '${o}'`);let h=Object.entries(u).find(([q,Z])=>Z&&typeof Z==="object"&&(a in Z));if(!h)throw Error(`[query-builder] Relationship '${a}' not found on table '${o}'`);let[B,k]=h,C=k[a],I=typeof C==="string"?C:C?.model||C?.target||C,P=w.modelToTable[I]||I,A;if(B==="hasMany"||B==="hasOne"){let q=w.primaryKeys[o]??"id";A=ft(o,P,q)}else if(B==="belongsTo"){let q=w.primaryKeys[P]??"id";A=bt(o,P,q)}else if(B==="belongsToMany"){let q=w.primaryKeys[o]??"id",Z=w.primaryKeys[P]??"id";A=mt(o,P,q,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for has`);return M("WHERE",`EXISTS (${A})`),this},doesntHave(a){if(!w)return this;let o=String(g),u=w.relations?.[o];if(!u)throw Error(`[query-builder] No relationships defined for table '${o}'`);let h=Object.entries(u).find(([q,Z])=>Z&&typeof Z==="object"&&(a in Z));if(!h)throw Error(`[query-builder] Relationship '${a}' not found on table '${o}'`);let[B,k]=h,C=k[a],I=typeof C==="string"?C:C?.model||C?.target||C,P=w.modelToTable[I]||I,A;if(B==="hasMany"||B==="hasOne"){let q=w.primaryKeys[o]??"id";A=ft(o,P,q)}else if(B==="belongsTo"){let q=w.primaryKeys[P]??"id";A=bt(o,P,q)}else if(B==="belongsToMany"){let q=w.primaryKeys[o]??"id",Z=w.primaryKeys[P]??"id";A=mt(o,P,q,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for doesntHave`);return M("WHERE",`NOT EXISTS (${A})`),this},withCount(...a){if(!w||!a||a.length===0)return this;let o=String(g);for(let u of a){let h=w.relations?.[o];if(!h)continue;let B=Object.entries(h).find(([Be,ie])=>ie&&typeof ie==="object"&&(u in ie));if(!B)continue;let[k,C]=B,I=C[u],P=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[P]||P,q=w.primaryKeys[o]??"id",Z;if(k==="hasMany"||k==="hasOne")Z=Ct(o,A,q);else if(k==="belongsToMany")Z=qt(o,A,q,u);else continue;let le=`${u}_count`;ut(`${Z} AS ${le}`)}return this},withSum(a,o){return pt("SUM",a,o),this},withAvg(a,o){return pt("AVG",a,o),this},withMax(a,o){return pt("MAX",a,o),this},withMin(a,o){return pt("MIN",a,o),this},applyPivotColumns(){return Et(),this},withPivot(a,...o){if(!w)return this;let u=String(g),h=Ve(a);if(!h)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${u}'`);let B=o&&o.length>0?o:h.hasConfig?h.pivotColumns:[];if(B.length===0)return this;if(Xe.set(a,B),h.hasConfig)Qe.add(a);return Et(),this},wherePivot(a,o,u,h){if(!w)return this;let B=Ve(a);if(!B)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${String(g)}'`);j(B.pivotTable,"wherePivot (pivot table)"),j(o,"wherePivot (column)"),lt(B);let k=h===void 0?"=":String(u),C=h===void 0?u:h,I=S.length+1,P=`${B.pivotTable}.${o} ${k} ${t(I)}`;if(S.push(C),E("AND",P),B.hasConfig)Qe.add(a);return this},wherePivotIn(a,o,u){if(!w||!Array.isArray(u))return this;let h=Ve(a);if(!h)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${String(g)}'`);j(h.pivotTable,"wherePivotIn (pivot table)"),j(o,"wherePivotIn (column)"),lt(h);let B=s(u.length,S.length+1),k=l(`${h.pivotTable}.${o}`,u,!1,B);if(S.push(...u),E("AND",k),h.hasConfig)Qe.add(a);return this},wherePivotNotIn(a,o,u){if(!w||!Array.isArray(u)||u.length===0)return this;let h=Ve(a);if(!h)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${String(g)}'`);j(h.pivotTable,"wherePivotNotIn (pivot table)"),j(o,"wherePivotNotIn (column)"),lt(h);let B=s(u.length,S.length+1),k=`${h.pivotTable}.${o} NOT IN (${B})`;if(S.push(...u),E("AND",k),h.hasConfig)Qe.add(a);return this},wherePivotNull(a,o){if(!w)return this;let u=Ve(a);if(!u)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${String(g)}'`);if(j(u.pivotTable,"wherePivotNull (pivot table)"),j(o,"wherePivotNull (column)"),lt(u),E("AND",`${u.pivotTable}.${o} IS NULL`),u.hasConfig)Qe.add(a);return this},wherePivotNotNull(a,o){if(!w)return this;let u=Ve(a);if(!u)throw Error(`[query-builder] Relationship '${a}' is not a belongsToMany relationship on table '${String(g)}'`);if(j(u.pivotTable,"wherePivotNotNull (pivot table)"),j(o,"wherePivotNotNull (column)"),lt(u),E("AND",`${u.pivotTable}.${o} IS NOT NULL`),u.hasConfig)Qe.add(a);return this},where(a,o,u){if(typeof a==="string"&&o!==void 0){j(String(a),"where(column)"),Ee(o,"where(operator)");let h=String(o).toLowerCase();if(h==="in"||h==="not in"){let C=Array.isArray(u)?u:[u],I=s(C.length,S.length+1),P=l(c(String(a)),C,h==="not in",I);return S.push(...C),E("AND",P),this}let B=Ge(c(String(a)),h,u,"where");if(B)return E("AND",B),this;let k=S.length+1;return S.push(u),E("AND",`${c(String(a))} ${String(o)} ${t(k)}`),this}if(Array.isArray(a)){let[h,B,k]=a,C=String(h);j(C,"where(column)");let I=Ee(B,"where(operator)");if(I==="in"||I==="not in"){let P=Array.isArray(k)?k:[k],A=s(P.length,S.length+1),q=l(c(C),P,I==="not in",A);S.push(...P),E("AND",q)}else{let P=Ge(c(C),I,k,"where");if(P)return E("AND",P),this;let A=S.length+1;S.push(k),E("AND",`${c(C)} ${I} ${t(A)}`)}return this}if(dt(a))yt("where(expr)");if(Ze(a)){let h=et(a,S.length+1);return S.push(...h.parameters),E("AND",h.text),this}if(a&&typeof a==="object"&&!Ke(a)){let h=a,B=Object.keys(h),k=[];for(let C of B){j(C,"where(column)");let I=h[C];if(Array.isArray(I)){let P=s(I.length,S.length+1);k.push(l(c(C),I,!1,P)),S.push(...I)}else{let P=S.length+1;k.push(`${c(C)} = ${t(P)}`),S.push(I)}}if(k.length>0)E("AND",k.length>1?`(${k.join(" AND ")})`:k[0]);return this}if(Ke(a))return E("AND",a.raw),this;if(typeof a==="function")return V("AND",a),this;if(a===void 0||a===null)throw TypeError("where() was called with no condition.");if(typeof a==="string")throw TypeError(`where(${JSON.stringify(a)}) is missing an operator and a value. Pass where(column, operator, value), or whereRaw() for a raw fragment.`);throw TypeError(`where() does not understand a condition of type ${typeof a}.`)},whereNull(a){return j(String(a),"whereNull(column)"),E("AND",`${String(a)} IS NULL`),this},whereNotNull(a){return j(String(a),"whereNotNull(column)"),E("AND",`${String(a)} IS NOT NULL`),this},orWhereNull(a){return j(String(a),"orWhereNull(column)"),E("OR",`${String(a)} IS NULL`),this},orWhereNotNull(a){return j(String(a),"orWhereNotNull(column)"),E("OR",`${String(a)} IS NOT NULL`),this},whereBetween(a,o,u){j(String(a),"whereBetween(column)");let h=S.length+1;return S.push(o,u),E("AND",`${String(a)} BETWEEN ${t(h)} AND ${t(h+1)}`),this},orWhereBetween(a,o,u){j(String(a),"orWhereBetween(column)");let h=S.length+1;return S.push(o,u),E("OR",`${String(a)} BETWEEN ${t(h)} AND ${t(h+1)}`),this},whereExists(a){return E("AND",`EXISTS (${a.toSQL()})`),this},orWhereExists(a){return E("OR",`EXISTS (${a.toSQL()})`),this},whereGroup(a){return V("AND",a),this},orWhereGroup(a){return V("OR",a),this},__whereState(){return{body:x(L),params:[...S]}},__sqlState(){return{sql:nt(W()),params:[...S]}},whereJsonContains(a,o){j(String(a),"whereJsonContains(column)");let u=e.dialect,h=S.length+1;if(u==="postgres"){let k=typeof o==="number"||typeof o==="boolean"?`to_jsonb(${t(h)})`:t(h);if(e.sql?.jsonContainsMode==="function")E("AND",`jsonb_contains(${a}, ${k})`);else E("AND",`${a} @> ${k}`);S.push(o)}else if(n(u))E("AND",`JSON_CONTAINS(${a}, ${t(h)})`),S.push(JSON.stringify(o));else if(Array.isArray(o)){let B=o.map((k,C)=>`EXISTS (SELECT 1 FROM json_each(${a}) WHERE json_each.value = ${t(h+C)})`);E("AND",`(${B.join(" AND ")})`);for(let k of o)S.push(k)}else if(o!==null&&typeof o==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else E("AND",`EXISTS (SELECT 1 FROM json_each(${a}) WHERE json_each.value = ${t(h)})`),S.push(o);return this},whereJsonPath(a,o,u){if(Ee(o,"whereJsonPath(op)"),typeof a!=="string"||a.length===0||a.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof a==="string"?`'${a.slice(0,32)}...'`:typeof a}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(a))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${a}' \u2014 contains characters outside the allowed JSON-path set`);let h=e.dialect,B=S.length+1;if(h==="postgres")E("AND",`${a} ${o} ${t(B)}`);else if(n(h))E("AND",`JSON_EXTRACT(${a}) ${o} ${t(B)}`);else E("AND",`json_extract(${a}) ${o} ${t(B)}`);return S.push(u),this},whereLike(a,o,u=!1){let h=t(S.length+1);return M("WHERE",`${u?String(a):`LOWER(${String(a)})`} LIKE ${u?h:`LOWER(${h})`}`),S.push(o),D=null,this},whereILike(a,o){let u=t(S.length+1);if(e.dialect==="postgres")M("WHERE",`${String(a)} ILIKE ${u}`);else M("WHERE",`LOWER(${String(a)}) LIKE LOWER(${u})`);return S.push(o),D=null,this},orWhereLike(a,o,u=!1){let h=t(S.length+1);return M("OR",`${u?String(a):`LOWER(${String(a)})`} LIKE ${u?h:`LOWER(${h})`}`),S.push(o),D=null,this},orWhereILike(a,o){let u=t(S.length+1);if(e.dialect==="postgres")M("OR",`${String(a)} ILIKE ${u}`);else M("OR",`LOWER(${String(a)}) LIKE LOWER(${u})`);return S.push(o),D=null,this},whereNotLike(a,o,u=!1){let h=t(S.length+1);return M("WHERE",`${u?String(a):`LOWER(${String(a)})`} NOT LIKE ${u?h:`LOWER(${h})`}`),S.push(o),D=null,this},whereNotILike(a,o){let u=t(S.length+1);if(e.dialect==="postgres")M("WHERE",`${String(a)} NOT ILIKE ${u}`);else M("WHERE",`LOWER(${String(a)}) NOT LIKE LOWER(${u})`);return S.push(o),D=null,this},orWhereNotLike(a,o,u=!1){let h=t(S.length+1);return M("OR",`${u?String(a):`LOWER(${String(a)})`} NOT LIKE ${u?h:`LOWER(${h})`}`),S.push(o),D=null,this},orWhereNotILike(a,o){let u=t(S.length+1);if(e.dialect==="postgres")M("OR",`${String(a)} NOT ILIKE ${u}`);else M("OR",`LOWER(${String(a)}) NOT LIKE LOWER(${u})`);return S.push(o),D=null,this},whereAny(a,o,u){if(a.length===0)return E("AND",`(${Gt})`),this;let h=S.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)S.push(u);return E("AND",`(${B.join(" OR ")})`),this},whereAll(a,o,u){if(a.length===0)return this;let h=S.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)S.push(u);return E("AND",`(${B.join(" AND ")})`),this},whereNone(a,o,u){if(a.length===0)return this;let h=S.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)S.push(u);return E("AND",`NOT (${B.join(" OR ")})`),this},whereNotBetween(a,o,u){j(String(a),"whereNotBetween(column)");let h=S.length+1;return S.push(o,u),E("AND",`${a} NOT BETWEEN ${t(h)} AND ${t(h+1)}`),this},whereDate(a,o,u){j(a,"whereDate(column)");let h=u instanceof Date?u.toISOString():typeof u==="string"?u:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof u}`)})(),B=S.length+1;return S.push(h),E("AND",`${a} ${o} ${t(B)}`),this},whereRaw(a,...o){return E("AND",tt(a,"whereRaw(fragment)",o)),this},orWhereRaw(a,...o){return E("OR",tt(a,"orWhereRaw(fragment)",o)),this},whereColumn(a,o,u){return j(a,"whereColumn(left)"),j(u,"whereColumn(right)"),E("AND",`${a} ${o} ${u}`),this},orWhereColumn(a,o,u){return j(a,"orWhereColumn(left)"),j(u,"orWhereColumn(right)"),E("OR",`${a} ${o} ${u}`),this},whereIn(a,o){if(j(String(a),"whereIn(column)"),Array.isArray(o)){let u=s(o.length,S.length+1),h=l(a,o,!1,u);S.push(...o),E("AND",h)}else Y("AND",a,o,!1);return this},orWhereIn(a,o){if(j(String(a),"orWhereIn(column)"),Array.isArray(o)){let u=s(o.length,S.length+1),h=l(a,o,!1,u);S.push(...o),E("OR",h)}else Y("OR",a,o,!1);return this},whereNotIn(a,o){if(j(String(a),"whereNotIn(column)"),Array.isArray(o)){let u=s(o.length,S.length+1),h=l(a,o,!0,u);S.push(...o),E("AND",h)}else Y("AND",a,o,!0);return this},orWhereNotIn(a,o){if(j(String(a),"orWhereNotIn(column)"),Array.isArray(o)){let u=s(o.length,S.length+1),h=l(a,o,!0,u);S.push(...o),E("OR",h)}else Y("OR",a,o,!0);return this},whereNested(a){let o=a.toSQL?String(a.toSQL()):String(a);return E("AND",`(${o})`),this},orWhereNested(a){let o=a.toSQL?String(a.toSQL()):String(a);return E("OR",`(${o})`),this},andWhere(a,o,u){return ne(this,"AND","andWhere",a,o,u)},orWhere(a,o,u){return ne(this,"OR","orWhere",a,o,u)},orderBy(a,o="asc"){let u=o==="asc"?"ASC":"DESC",h=Se(a,"orderBy(column)");return d=he.ORDER_BY.test(d)?`${d}, ${h} ${u}`:`${d} ORDER BY ${h} ${u}`,D=null,this},orderByDesc(a){let o=Se(a,"orderByDesc(column)");return d=he.ORDER_BY.test(d)?`${d}, ${o} DESC`:`${d} ORDER BY ${o} DESC`,D=null,this},inRandomOrder(){let a=e.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return d=he.ORDER_BY.test(d)?`${d}, ${a}`:`${d} ORDER BY ${a}`,D=null,this},reorder(a,o="asc"){return d=d.replace(/ORDER BY[\s\S]*$/i,""),d+=` ORDER BY ${a} ${o==="asc"?"ASC":"DESC"}`,D=null,this},latest(a){let o=Se(a??e.timestamps.defaultOrderColumn,"latest(column)");return d=he.ORDER_BY.test(d)?`${d}, ${o} DESC`:`${d} ORDER BY ${o} DESC`,D=null,this},oldest(a){let o=Se(a??e.timestamps.defaultOrderColumn,"oldest(column)");return d=he.ORDER_BY.test(d)?`${d}, ${o} ASC`:`${d} ORDER BY ${o} ASC`,D=null,this},limit(a){if(!Number.isFinite(a)||a<0||!Number.isInteger(a))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${a}`);return d=he.LIMIT.test(d)?d.replace(he.LIMIT,` LIMIT ${a}`):`${d} LIMIT ${a}`,D=null,this},offset(a){if(!Number.isFinite(a)||a<0||!Number.isInteger(a))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${a}`);return d=he.OFFSET.test(d)?d.replace(he.OFFSET,` OFFSET ${a}`):`${d} OFFSET ${a}`,D=null,this},join(a,o,u,h){return j(a,"join(table)"),qe(o,"join(onLeft)"),qe(h,"join(onRight)"),Ee(u,"join(operator)"),X(`JOIN ${a} ON ${o} ${u} ${h}`),oe.add(a),this},joinSub(a,o,u,h,B){return j(o,"joinSub(alias)"),qe(u,"joinSub(onLeft)"),qe(B,"joinSub(onRight)"),Ee(h,"joinSub(operator)"),X(`JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),oe.add(o),this},innerJoin(a,o,u,h){return j(a,"innerJoin(table)"),qe(o,"innerJoin(onLeft)"),qe(h,"innerJoin(onRight)"),Ee(u,"innerJoin(operator)"),X(`INNER JOIN ${a} ON ${o} ${u} ${h}`),oe.add(a),this},leftJoin(a,o,u,h){return j(a,"leftJoin(table)"),qe(o,"leftJoin(onLeft)"),qe(h,"leftJoin(onRight)"),Ee(u,"leftJoin(operator)"),X(`LEFT JOIN ${a} ON ${o} ${u} ${h}`),oe.add(a),this},leftJoinSub(a,o,u,h,B){return j(o,"leftJoinSub(alias)"),qe(u,"leftJoinSub(onLeft)"),qe(B,"leftJoinSub(onRight)"),Ee(h,"leftJoinSub(operator)"),X(`LEFT JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),oe.add(o),this},rightJoin(a,o,u,h){return j(a,"rightJoin(table)"),qe(o,"rightJoin(onLeft)"),qe(h,"rightJoin(onRight)"),Ee(u,"rightJoin(operator)"),X(`RIGHT JOIN ${a} ON ${o} ${u} ${h}`),oe.add(a),this},crossJoin(a){return j(a,"crossJoin(table)"),X(`CROSS JOIN ${a}`),oe.add(a),this},crossJoinSub(a,o){return j(o,"crossJoinSub(alias)"),X(`CROSS JOIN (${String(a.toSQL())}) AS ${o}`),oe.add(o),this},selectAllRelations(){if(!U)return this;let a=String(g),o=Object.keys(U[a]?.columns??{}),u=[];if(o.length>0)u.push(y`${y(a)}.*`);for(let h of oe){let B=Object.keys(U[h]?.columns??{});for(let k of B){let C=e.aliasing.relationColumnAliasFormat==="camelCase"?`${h}_${k}`.replace(/_([a-z])/g,(I,P)=>P.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${h}.${k}`:`${h}_${k}`;u.push(y`${y(`${h}.${k}`)} AS ${y(C)}`)}}if(u.length>0){let h=o.length>0?`${a}.*`:"",B=[];for(let I of oe){let P=Object.keys(U[I]?.columns??{});for(let A of P){let q=e.aliasing.relationColumnAliasFormat==="camelCase"?`${I}_${A}`.replace(/_([a-z])/g,(Z,le)=>le.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${I}.${A}`:`${I}_${A}`;B.push(`${I}.${A} AS ${q}`)}}let k=[h,...B].filter(Boolean).join(", "),C=d.indexOf(" FROM ");if(C!==-1)d=`SELECT ${k}${d.substring(C)}`;else d=`SELECT ${k} FROM ${a}`;D=null}return this},groupBy(...a){if(a.length)d=he.GROUP_BY.test(d)?`${d}, ${a.map((o)=>Se(o,"groupBy(column)")).join(", ")}`:`${d} GROUP BY ${a.map((o)=>Se(o,"groupBy(column)")).join(", ")}`,D=null;return this},groupByRaw(a,...o){let u=tt(a,"groupByRaw(fragment)",o);return d=he.GROUP_BY.test(d)?`${d}, ${u}`:`${d} GROUP BY ${u}`,D=null,this},having(a){let o=z?"AND":"HAVING";if(Array.isArray(a)){let u=S.length+1;d=`${d} ${o} ${a[0]} ${a[1]} ${t(u)}`,S.push(a[2]),z=!0,D=null}else if(a&&typeof a==="object"&&!("raw"in a)){let u=Object.keys(a),h=u.length;if(h){let B=S.length,k=Array.from({length:h});for(let C=0;C<h;C++){let I=u[C];k[C]=`${I} = ${t(B+C+1)}`,S.push(a[I])}d=`${d} ${o} ${k.join(" AND ")}`,z=!0,D=null}}else if(a&&typeof a.raw<"u")d+=` ${o} ${a.raw}`,z=!0,D=null;return this},havingRaw(a,...o){let u=tt(a,"havingRaw(fragment)",o);return d+=` ${z?"AND":"HAVING"} ${u}`,z=!0,D=null,this},orderByRaw(a,...o){let u=tt(a,"orderByRaw(fragment)",o);return d=he.ORDER_BY.test(d)?`${d}, ${u}`:`${d} ORDER BY ${u}`,D=null,this},$call(a){return a(this),this},union(a){return K("UNION",a),this},unionAll(a){return K("UNION ALL",a),this},intersect(a){return K("INTERSECT",a),this},intersectAll(a){return K("INTERSECT ALL",a),this},except(a){return K("EXCEPT",a),this},exceptAll(a){return K("EXCEPT ALL",a),this},forPage(a,o){let u=Math.max(1,Math.floor(a)),h=Math.max(1,Math.floor(o));return d+=` LIMIT ${h} OFFSET ${(u-1)*h}`,D=null,this},toSQL(){let a=nt(W());return{sql:a,toString:()=>a,execute:()=>Q().execute(),values:()=>Q().values(),raw:()=>Q().raw()}},async value(a){let o=J(""," LIMIT 1"),u=await ae(o,"select",{signal:re,timeoutMs:ee}),[h]=u;return h?.[a]},async pluck(a,o){let u=await ae(Q(),"select",{signal:re,timeoutMs:ee});if(o){let h={};for(let B of u){let k=String(B?.[o]);if(Object.prototype.hasOwnProperty.call(h,k))throw Error(`[query-builder] pluck(${a}, ${o}): duplicate key '${k}' \u2014 multiple rows share this value, so the resulting map would silently drop data. Use a unique key column or pluck without a key to get an array.`);h[k]=B?.[a]}return h}return u.map((h)=>h?.[a])},async exists(){let a=J("SELECT EXISTS (",") as e"),o=await ae(a,"select",{signal:re,timeoutMs:ee}),[u]=o;return Boolean(u?.e)},async doesntExist(){return!await this.exists()},async paginate(a,o=1,u={}){if(typeof a==="object"&&a!==null){let Z=a;o=Z.page??1,u=Z.tx?{tx:Z.tx}:{},a=Z.perPage??10}if(!Number.isFinite(a)||a<=0||!Number.isInteger(a))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${a}`);if(!Number.isFinite(o)||o<1||!Number.isInteger(o))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${o}`);if(u.tx){let Z=nt(W()),le=p([...S]),Be=await u.tx.unsafe(`SELECT COUNT(*) as c FROM (${Z}) as sub`,le),ie=Number(Be?.[0]?.c??0),De=Math.max(1,Math.ceil(ie/a)),Ae=Math.max(1,Math.min(o,De)),Ie=(Ae-1)*a;return{data:await u.tx.unsafe(`${Z} LIMIT ${a} OFFSET ${Ie}`,le),meta:{perPage:a,page:Ae,total:ie,lastPage:De}}}let h=J("SELECT COUNT(*) as c FROM (",") as sub"),B=await ae(h,"select",{signal:re,timeoutMs:ee}),[k]=B,C=Number(k?.c??0),I=Math.max(1,Math.ceil(C/a)),P=Math.max(1,Math.min(o,I)),A=(P-1)*a;return{data:await ae(J("",` LIMIT ${t(S.length+1)} OFFSET ${t(S.length+2)}`,[a,A]),"select",{signal:re,timeoutMs:ee}),meta:{perPage:a,page:P,total:C,lastPage:I}}},async simplePaginate(a,o=1){let u=Math.max(1,o),h=(u-1)*a,B=await ae(J("",` LIMIT ${t(S.length+1)} OFFSET ${t(S.length+2)}`,[a+1,h]),"select",{signal:re,timeoutMs:ee}),k=B.length>a;return{data:k?B.slice(0,a):B,meta:{perPage:a,page:u,hasMore:k}}},async cursorPaginate(a,o,u="id",h="asc"){if(!Number.isInteger(a)||a<=0)throw TypeError(`[query-builder] cursorPaginate(perPage): expected positive integer, got ${a}`);let B=(Array.isArray(u)?u:[u]).map(String);for(let Re of B)j(Re,"cursorPaginate(column)");let k=h==="asc"?">":"<",C=h==="asc"?"ASC":"DESC",I=[...S],P="";if(o!==void 0&&o!==null)if(Array.isArray(u)){let Re=o.map((ce)=>(I.push(ce),t(I.length)));P=`(${B.join(", ")}) ${k} (${Re.join(", ")})`}else I.push(o),P=`${B[0]} ${k} ${t(I.length)}`;let A=nt(P?W({conn:"AND",sql:P}):W()),q=B.map((Re)=>`${Re} ${C}`).join(", ");if(Ht(A))throw TypeError("[query-builder] cursorPaginate() cannot be combined with orderBy() \u2014 it orders by "+`${q} itself, and a cursor is only meaningful in that order. Remove the orderBy(), or pass the column and direction to cursorPaginate().`);let Z=I.length>0?O(`${A} ORDER BY ${q} LIMIT ${a+1}`,I):O(`${A} ORDER BY ${q} LIMIT ${a+1}`),le=await ae(Z,"select",{signal:re,timeoutMs:ee}),Be=le.length>a,ie=le.slice(0,a),De=ie[ie.length-1],Ae=Be&&De?Array.isArray(u)?u.map((Re)=>De[Re]):De[u]:null,Ie=ie.length?Array.isArray(u)?u.map((Re)=>ie[0]?.[Re]):ie[0]?.[u]:null;return{data:ie,meta:{perPage:a,nextCursor:Ae??null,prevCursor:Ie}}},async chunk(a,o){let u=1;while(!0){let{data:h,meta:B}=await this.paginate(a,u);if(h.length===0)break;if(await o(h),u>=B.lastPage)break;u+=1}},async chunkById(a,o="id",u){let h;while(!0){let{data:B,meta:k}=await this.cursorPaginate(a,h,o,"asc");if(B.length===0)break;if(u)await u(B);if(h=k.nextCursor,!h)break}},async eachById(a,o="id",u){await this.chunkById(a,o,async(h)=>{for(let B of h)await u?.(B)})},withTimeout(a){return ee=Math.max(1,Math.floor(a)),this},abort(a){return re=a,this},withTrashed(){return we=!0,He=!1,this},onlyTrashed(){we=!0,He=!0;let a=e.softDeletes?.column||"deleted_at";return E("AND",`${g}.${a} IS NOT NULL`),this},scope(a,o){let u=String(g),B=w?.scopes?.[u]?.[a];if(B)return B(this,o);return this},when(a,o,u){if(a)return o(this);if(u)return u(this);return this},tap(a){return a(this),this},dump(){return console.log(String(Q())),this},dd(){throw console.log(String(Q())),Error("Dump and Die")},cache(a=60000){return gt=a,Ne=!0,this},async explain(){let a=J("EXPLAIN ");return await ae(a,"select",{signal:re,timeoutMs:ee})},simple(){return Q().simple()},toText(){return W()},async get(){let a=pe(),o=a&&(a.onQueryStart||a.onQueryEnd||a.onQueryError||a.startSpan||Tt(a));if(!e.softDeletes?.enabled&&!Ne&&!ee&&!re&&!o){let I=R._prepareStatement;if(I){let P=I(W());return it(S.length>0?P.all(...S):P.all())}}let u=W();if(D=S.length>0?O(u,S):O(u),!e.softDeletes?.enabled&&!Ne&&!ee&&!re&&!o){let I=Q()._stmt,P=Q()._params;if(I)return it(P&&P.length>0?I.all(...P):I.all());return it(await Q().execute())}if(!e.softDeletes?.enabled&&!Ne&&!ee&&!re)return it(await ae(Q(),"select"));let h=Q();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!we){let I=e.softDeletes.column,P=String(g);if((U?Boolean(U[P]?.columns?.[I]):!0)&&!he.DELETED_AT.test(W()))M("WHERE",`${String(I)} IS ${He?"NOT ":""}NULL`),h=Q()}let B=Ne&&!b?.inTransaction,k=B?Zt(R,W(),S):"";if(B){let I=$t.get(k);if(I)return I}let C=await ae(h,"select",{signal:re,timeoutMs:ee});if(B)$t.set(k,C,gt);return it(C)},async executeTakeFirst(){let a=await ae(Q(),"select",{signal:re,timeoutMs:ee});return ot(Array.isArray(a)?a[0]:a)},async executeTakeFirstOrThrow(){let a=await this.executeTakeFirst();if(!a)throw Error("Record not found");return a},async first(){let a=pe(),o=a&&(a.onQueryStart||a.onQueryEnd||a.onQueryError||a.startSpan||Tt(a));if(!e.softDeletes?.enabled&&!Ne&&!ee&&!re&&!o){let B=R._prepareStatement;if(B){let k=W(),C=k.includes(" LIMIT ")?k:`${k} LIMIT 1`,I=B(C),P=S.length>0?I.all(...S):I.all();return ot(P[0])}}let u=await ae(J(""," LIMIT 1"),"select",{signal:re,timeoutMs:ee}),[h]=u;return ot(h)},async firstOrFail(){let a=await this.first();if(!a)throw Error("Record not found");return a},async find(a){let o=w?.primaryKeys[String(g)]??"id",u=await ae(J("",` WHERE ${ke(o)} = ${t(S.length+1)} LIMIT 1`,[a]),"select",{signal:re,timeoutMs:ee}),[h]=u;return h},async findOrFail(a){let o=await this.find(a);if(!o)throw Error("Record not found");return o},async findMany(a){let o=w?.primaryKeys[String(g)]??"id";return await ae(J("",` WHERE ${l(ke(String(o)),a,!1,s(a.length,S.length+1))}`,a),"select",{signal:re,timeoutMs:ee})},async*lazy(){let a,o=w?.primaryKeys[String(g)]??"id";while(!0){let h=await(a==null?y`${Q()} ORDER BY ${y(String(o))} ASC LIMIT 100`:y`${Q()} WHERE ${y(String(o))} > ${a} ORDER BY ${y(String(o))} ASC LIMIT 100`).execute();if(h.length===0)break;for(let B of h)yield B;if(a=h[h.length-1]?.[o],a==null)break}},async*lazyById(){let a=w?.primaryKeys[String(g)]??"id",o;while(!0){let h=await(o==null?y`${Q()} ORDER BY ${y(String(a))} ASC LIMIT 100`:y`${Q()} WHERE ${y(String(a))} > ${o} ORDER BY ${y(String(a))} ASC LIMIT 100`).execute();if(h.length===0)break;for(let B of h)yield B;if(o=h[h.length-1]?.[a],o==null)break}},pipe(a){return a(this)},async count(){let a=W(),o=a.indexOf(" FROM "),u=/ GROUP BY /i.test(a),h;if(u)h=`SELECT COUNT(*) as c FROM (${a}) AS _bqb_count_sub`;else if(o!==-1)h=`SELECT COUNT(*) as c${a.substring(o)}`;else h=`SELECT COUNT(*) as c FROM ${g}`;let B=pe(),k=B&&(B.onQueryStart||B.onQueryEnd||B.onQueryError||B.startSpan||Tt(B));if(!e.softDeletes?.enabled&&!Ne&&!ee&&!re&&!k){let A=R._prepareStatement;if(A){let q=A(h),Z=S.length>0?q.all(...S):q.all();return Number(Z[0]?.c??0)}}let C=S.length>0?O(h,S):O(h),I=await ae(C,"select",{signal:re,timeoutMs:ee}),[P]=I;return Number(P?.c??0)},async avg(a){let o=W(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT AVG(${a}) as a${o.substring(u)}`:`SELECT AVG(${a}) as a FROM ${g}`,B=pe(),k=B&&(B.onQueryStart||B.onQueryEnd||B.onQueryError||B.startSpan||Tt(B));if(!e.softDeletes?.enabled&&!Ne&&!ee&&!re&&!k){let A=R._prepareStatement;if(A){let q=A(h),Z=S.length>0?q.all(...S):q.all();return Number(Z[0]?.a??0)}}let C=S.length>0?O(h,S):O(h),I=await ae(C,"select",{signal:re,timeoutMs:ee}),[P]=I;return Number(P?.a??0)},async sum(a){let o=W(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT SUM(${a}) as s${o.substring(u)}`:`SELECT SUM(${a}) as s FROM ${g}`,B=S.length>0?O(h,S):O(h),k=await ae(B,"select",{signal:re,timeoutMs:ee}),[C]=k;return Number(C?.s??0)},async max(a){let o=W(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT MAX(${a}) as m${o.substring(u)}`:`SELECT MAX(${a}) as m FROM ${g}`,B=S.length>0?O(h,S):O(h),k=await ae(B,"select",{signal:re,timeoutMs:ee}),[C]=k;return C?.m},async min(a){let o=W(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT MIN(${a}) as m${o.substring(u)}`:`SELECT MIN(${a}) as m FROM ${g}`,B=S.length>0?O(h,S):O(h),k=await ae(B,"select",{signal:re,timeoutMs:ee}),[C]=k;return C?.m},lockForUpdate(){return d+=" FOR UPDATE",D=null,this},sharedLock(){let a=e.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return d+=` ${a}`,D=null,this},withCTE(a,o){return j(a,"withCTE(name)"),d=`WITH ${a} AS (${String(o.toSQL())}) ${d}`,D=null,this},withRecursive(a,o){return j(a,"withRecursive(name)"),d=`WITH RECURSIVE ${a} AS (${String(o.toSQL())}) ${d}`,D=null,this},execute(){return ae(Q(),"select",{signal:re,timeoutMs:ee})},values(){return Q().values()},toParams(){return[...S]},__rawState(){return{sql:nt(W()),params:[...S]}},__hasPredicate(){return L.length>0||H},raw(){return Q().raw()},get rows(){return},get row(){return},cancel(){try{Q().cancel()}catch{}}},{get(a,o,u){let h=Reflect.get(a,o,u);if(h!==void 0)return h;if(typeof o==="string"&&(o.startsWith("where")||o.startsWith("orWhere")||o.startsWith("andWhere"))){let B=o.startsWith("orWhere"),k=o.startsWith("andWhere"),C=`${String(g)}|${o}`,I=Ye.get(C);if(I===void 0){let A=o.replace(/^(?:or|and)?where/i,"");if(!A)Ye.set(C,""),I="";else{let q=A.charAt(0).toLowerCase()+A.slice(1),Z=A.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),le=U?Object.keys(U[String(g)]?.columns??{}):[];I=[Z,q,q.toLowerCase()].find((Be)=>le.includes(Be))??Z,Ye.set(C,I)}}if(I==="")return()=>u;let P=I;return(A)=>{if(Array.isArray(A)){let q=s(A.length,S.length+1);M(B?"OR":k?"AND":"WHERE",`${P} IN (${q})`),S.push(...A)}else{let q=t(S.length+1);M(B?"OR":k?"AND":"WHERE",`${P} = ${q}`),S.push(A)}return u}}return Reflect.get(a,o,u)}})}return{configure(g){return Le(g),this},id(g){if(!he.IDENTIFIER.test(g))throw Error(`[query-builder] Invalid identifier: '${g}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return R(String(g))},ids(...g){for(let f of g)if(!he.IDENTIFIER.test(f))throw Error(`[query-builder] Invalid identifier: '${f}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return R(g)},select(g,...f){return _e(g,f)},selectFrom(g){return Se(g,"selectFrom(table)"),_e(g)},selectFromSub(g,f){function y(D){return()=>{throw Error(`[query-builder] selectFromSub(...).${D}() is not supported. Apply ${D}() to the underlying subquery BEFORE passing it to selectFromSub, or use the regular selectFrom(...) builder. This previously silently returned without `+"affecting the SQL, producing wrong results \u2014 see stacksjs/stacks#1862 #11.")}}j(String(f),"selectFromSub(alias)");let d=typeof g.__rawState==="function"?g.__rawState():null,N=g.toSQL(),L=d?.sql??(typeof N==="string"?N:N?.sql??String(N)),S=d?.params??(Array.isArray(N?.values)?N.values:[]),F=`SELECT * FROM (${L}) AS ${String(f)}`,H=(D,Q,J,E)=>{let M=[...D],G=(Y,V,ne)=>{j(Y,"selectFromSub where(column)");let K=Ee(V,"selectFromSub where(operator)");if(K==="in"||K==="not in"){let oe=Array.isArray(ne)?ne:[ne],ee=s(oe.length,M.length+1);return M.push(...oe),`${Y} ${K.toUpperCase()} (${ee})`}let X=t(M.length+1);return M.push(ne),`${Y} ${K} ${X}`},W;if(typeof Q==="string"&&J!==void 0)W=G(Q,J,E);else if(Array.isArray(Q)&&Q.length===3)W=G(Q[0],Q[1],Q[2]);else if(Q&&typeof Q==="object"){let Y=Object.entries(Q).map(([V,ne])=>G(V,"=",ne));W=Y.length>1?`(${Y.join(" AND ")})`:Y[0]}else return{clause:null,params:D};return{clause:W,params:M}};function z(D,Q,J,E=""){let M=x(Q),G=M?`${D} WHERE ${M}${E}`:`${D}${E}`,W=()=>J.length>0?O(G,J):O(G),Y=(K,X,oe,ee)=>{let re=H(J,X,oe,ee);return re.clause===null?z(D,Q,J,E):z(D,[...Q,{conn:K,sql:re.clause}],re.params,E)},V=(K,X)=>{let oe=[],ee=[...J],re=(Ne)=>(Xe,Qe,gt)=>{let ge=H(ee,Xe,Qe,gt);if(ge.clause!==null)oe.push({conn:Ne,sql:ge.clause}),ee=ge.params;return we},we={where:re("AND"),andWhere:re("AND"),orWhere:re("OR")};X(we);let He=x(oe);if(!He)throw TypeError("[query-builder] selectFromSub.whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");return z(D,[...Q,{conn:K,sql:`(${He})`}],ee,E)},ne={distinct(){return z(D.replace(/^SELECT\s+/i,"SELECT DISTINCT "),Q,J,E)},distinctOn(...K){let X=K.map(String).join(", ");return z(D.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${X}) `),Q,J,E)},selectRaw(K,...X){let oe=tt(K,"selectFromSub.selectRaw(fragment)",X),ee=D.indexOf(" FROM "),re=ee!==-1?`${D.slice(0,ee)}, ${oe}${D.slice(ee)}`:`${D}, ${oe}`;return z(re,Q,J,E)},$call(K){return K(this)??this},where(K,X,oe){return Y("AND",K,X,oe)},andWhere(K,X,oe){return Y("AND",K,X,oe)},orWhere(K,X,oe){return Y("OR",K,X,oe)},whereGroup(K){return V("AND",K)},orWhereGroup(K){return V("OR",K)},orderBy(K,X="asc"){j(String(K),"selectFromSub.orderBy(column)");let oe=X==="asc"?"ASC":"DESC",ee=he.ORDER_BY.test(E)?`${E}, ${K} ${oe}`:`${E} ORDER BY ${K} ${oe}`;return z(D,Q,J,ee)},limit(K){if(!Number.isInteger(K)||K<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${K}`);let X=he.LIMIT.test(E)?E.replace(he.LIMIT,` LIMIT ${K}`):`${E} LIMIT ${K}`;return z(D,Q,J,X)},offset(K){if(!Number.isInteger(K)||K<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${K}`);let X=he.OFFSET.test(E)?E.replace(he.OFFSET,` OFFSET ${K}`):`${E} OFFSET ${K}`;return z(D,Q,J,X)},toSQL(){return Ce(W(),G)},async execute(){return ae(W(),"select")},async executeTakeFirst(){let K=await ae(W(),"select");return Array.isArray(K)?K[0]:K},async executeTakeFirstOrThrow(){let K=await ae(W(),"select"),X=Array.isArray(K)?K[0]:K;if(!X)throw Error("Record not found");return X},async get(){return ae(W(),"select")},async first(){let K=await ae(W(),"select");return Array.isArray(K)?K[0]:K},async firstOrFail(){let K=await ae(W(),"select"),X=Array.isArray(K)?K[0]:K;if(!X)throw Error("No rows found");return X},async count(){let K=J.length>0?O(`SELECT COUNT(*) as c FROM (${G}) as sub`,J):O(`SELECT COUNT(*) as c FROM (${G}) as sub`),X=await ae(K,"select");return Number(X?.[0]?.c??0)},async exists(){let K=J.length>0?O(`SELECT EXISTS(${G}) as e`,J):O(`SELECT EXISTS(${G}) as e`),X=await ae(K,"select");return Boolean(X?.[0]?.e)},async doesntExist(){return!await ne.exists()},values(){return W().values()},raw(){return W().raw()},cancel(){try{W().cancel()}catch{}},whereRaw:y("whereRaw"),whereColumn:y("whereColumn"),orWhereColumn:y("orWhereColumn"),whereIn:y("whereIn"),orWhereIn:y("orWhereIn"),whereNotIn:y("whereNotIn"),orWhereNotIn:y("orWhereNotIn"),whereLike:y("whereLike"),whereILike:y("whereILike"),orWhereLike:y("orWhereLike"),orWhereILike:y("orWhereILike"),whereNotLike:y("whereNotLike"),whereNotILike:y("whereNotILike"),orWhereNotLike:y("orWhereNotLike"),orWhereNotILike:y("orWhereNotILike"),whereAny:y("whereAny"),whereAll:y("whereAll"),whereNone:y("whereNone"),whereNested:y("whereNested"),orWhereNested:y("orWhereNested"),whereDate:y("whereDate"),whereBetween:y("whereBetween"),whereNotBetween:y("whereNotBetween"),whereJsonContains:y("whereJsonContains"),whereJsonPath:y("whereJsonPath"),whereNull:y("whereNull"),orWhereNull:y("orWhereNull"),whereNotNull:y("whereNotNull"),orWhereNotNull:y("orWhereNotNull"),whereExists:y("whereExists"),orWhereExists:y("orWhereExists"),orWhereBetween:y("orWhereBetween"),orWhereRaw:y("orWhereRaw"),whereJsonDoesntContain:y("whereJsonDoesntContain"),whereJsonContainsKey:y("whereJsonContainsKey"),whereJsonDoesntContainKey:y("whereJsonDoesntContainKey"),whereJsonLength:y("whereJsonLength"),join:y("join"),joinSub:y("joinSub"),innerJoin:y("innerJoin"),leftJoin:y("leftJoin"),leftJoinSub:y("leftJoinSub"),rightJoin:y("rightJoin"),crossJoin:y("crossJoin"),crossJoinSub:y("crossJoinSub"),groupBy:y("groupBy"),groupByRaw:y("groupByRaw"),having:y("having"),havingRaw:y("havingRaw"),addSelect:y("addSelect"),select:y("select"),selectAll:y("selectAll"),orderByDesc:y("orderByDesc"),inRandomOrder:y("inRandomOrder"),reorder:y("reorder"),orderByRaw:y("orderByRaw"),union:y("union"),unionAll:y("unionAll"),forPage:y("forPage"),selectAllRelations:y("selectAllRelations"),with:y("with"),value:y("value"),pluck:y("pluck"),cursorPaginate:y("cursorPaginate"),paginate:y("paginate"),simplePaginate:y("simplePaginate"),chunk:y("chunk"),chunkById:y("chunkById"),eachById:y("eachById"),avg:y("avg"),sum:y("sum"),max:y("max"),min:y("min"),find:y("find"),findOrFail:y("findOrFail"),findMany:y("findMany"),latest:y("latest"),oldest:y("oldest"),lazy:y("lazy"),lazyById:y("lazyById"),pipe:(K)=>K(ne),when:y("when"),tap:()=>ne,dump:()=>ne,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>W().simple(),toText:()=>G,toParams:()=>[...J],withTimeout:()=>ne,abort:()=>ne,lockForUpdate:()=>ne,sharedLock:()=>ne,withCTE:()=>ne,withRecursive:()=>ne,cache:()=>ne,clone:()=>ne,withTrashed:()=>ne,onlyTrashed:()=>ne,scope:()=>ne,get rows(){return[]},get row(){return}};return ne}return z(F,[],S)},insertInto(g){let f,y="",d=[],N=[],L=!1,S=()=>H?[]:{changes:0,lastInsertRowid:0},F=()=>{let E=async()=>{return},M=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>F(),andWhere:()=>F(),orWhere:()=>F(),orderBy:()=>F(),limit:()=>F(),offset:()=>F(),toSQL:()=>Ce(null,""),execute:async()=>[],get:async()=>[],first:E,executeTakeFirst:E,firstOrFail:M,executeTakeFirstOrThrow:M}},H=e.dialect==="postgres",z=(E)=>{let G=E.flat(2).map(String).filter(Boolean),W=G.length>0&&!G.includes("*")?G.map((ne)=>D(ne)).join(", "):"*",Y=async()=>{let ne=await ae(O(y,d),"insert"),K=Number(ne?.lastInsertRowid??0),X=Math.max(1,Number(ne?.affectedRows??1)),oe=N.filter((we)=>we!==void 0&&we!==null),ee=K>0?O(`SELECT ${W} FROM ${D(String(g))} WHERE ${D("id")} >= ? AND ${D("id")} < ? ORDER BY ${D("id")} ASC`,[K,K+X]):oe.length>0?O(`SELECT ${W} FROM ${D(String(g))} WHERE ${D("id")} IN (${oe.map(()=>"?").join(", ")}) ORDER BY ${D("id")} ASC`,oe):null;if(!ee)return[];let re=await ee.execute();return Array.isArray(re)?re:[]},V=async()=>(await Y())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>Ce(O(y,d),y),execute:Y,get:Y,first:V,executeTakeFirst:V,async firstOrFail(){let ne=await V();if(!ne)throw Error("Insert with RETURNING returned no rows");return ne},async executeTakeFirstOrThrow(){let ne=await V();if(!ne)throw Error("Insert with RETURNING returned no rows");return ne}}},D=H?(E)=>`"${String(E).replace(/"/g,'""')}"`:n(e.dialect)?(E)=>`\`${String(E).replace(/`/g,"``")}\``:(E)=>`"${String(E).replace(/"/g,'""')}"`,Q=H?"postgres":n(e.dialect)?"mysql":"sqlite",J=H?(E)=>`$${E+1}`:(E)=>"?";return{values(E){let M=Oe(String(g),Array.isArray(E)?E:[E]),G=M.length;if(N=M.map((ee)=>ee?.id),G===0)return L=!0,f=null,y="",d.length=0,this;L=!1;let W=M[0],Y=Object.keys(W),V=Y.length,ne=G*V;d.length=ne;let K=G===1&&V>0&&typeof g==="string",X=K?ue?.get(g):void 0,oe=X?.quoteStyle===Q&&X.columns.length===V;if(oe){for(let ee=0;ee<V;ee++)if(X.columns[ee]!==Y[ee]){oe=!1;break}}if(oe){y=X.sql;for(let ee=0;ee<V;ee++)d[ee]=W[Y[ee]]}else if(G===1)if(!H){let ee=D(Y[0]),re="?";d[0]=W[Y[0]];for(let we=1;we<V;we++)ee+=`,${D(Y[we])}`,re+=",?",d[we]=W[Y[we]];y=`INSERT INTO ${D(g)}(${ee})VALUES(${re})`}else{let ee=Y.map((re)=>D(re)).join(",");y=`INSERT INTO ${D(g)}(${ee})VALUES(`;for(let re=0;re<V;re++){if(re>0)y+=",";y+=J(re),d[re]=W[Y[re]]}y+=")"}else{let ee=Y.map((we)=>D(we)).join(",");y=`INSERT INTO ${D(g)}(${ee})VALUES`;let re=0;for(let we=0;we<G;we++){let He=M[we];if(we===0)y+="(";else y+="),(";for(let Ne=0;Ne<V;Ne++){if(Ne>0)y+=",";y+=J(re),d[re++]=He[Y[Ne]]}}y+=")"}if(K&&!oe&&y.length<=8192){if(ue??=new Map,ue.size>=32&&!ue.has(g)){let ee=ue.keys().next().value;if(ee!==void 0)ue.delete(ee)}ue.set(g,{columns:Y,quoteStyle:Q,sql:y})}if(!R._prepareStatement)f=O(y,d);return this},returning(...E){if(L)return F();if(n(e.dialect))return z(E);let M=`${y} RETURNING ${E.join(", ")}`,G=O(M,d),W=async()=>{let Y=await ae(G,"insert");return Array.isArray(Y)?Y[0]:Y};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>Ce(G,M),execute:()=>ae(G,"insert"),get:()=>ae(G,"insert"),first:W,executeTakeFirst:W,async firstOrFail(){let Y=await W();if(!Y)throw Error("Insert with RETURNING returned no rows");return Y},async executeTakeFirstOrThrow(){let Y=await W();if(!Y)throw Error("Insert with RETURNING returned no rows");return Y}}},toSQL(){if(L)return Ce(null,"");if(!f)f=O(y,d);return Ce(f,y)},execute(){if(L)return Promise.resolve(S());let E=pe();if(!(E&&(E.onQueryStart||E.onQueryEnd||E.onQueryError||E.startSpan||E.beforeCreate||E.afterCreate||Tt(E)))){let G=R._prepareStatement;if(G){let W=G(y);return d.length>0?W.run(...d):W.run()}}if(!f)f=O(y,d);return ae(f,"insert")},async executeTakeFirst(){if(L)return S();if(!f)f=O(y,d);return await ae(f,"insert")},async executeTakeFirstOrThrow(){if(L)throw Error("Insert failed");if(!f)f=O(y,d);let E=await ae(f,"insert");if(!E)throw Error("Insert failed");return E},returningAll(){return this.returning("*")}}},updateTable(g){let f,y=[],d=(F)=>{let H=String(F);if(n(e.dialect))return`\`${H.replace(/`/g,"``")}\``;return`"${H.replace(/"/g,'""')}"`},N=`UPDATE ${d(String(g))}`,L=!1,S=(F)=>{N=`${N} ${L?"AND":"WHERE"} ${F}`,L=!0};return{set(F){let H=Oe(String(g),[F])[0],z=Object.keys(H),D=z.length,Q=Array.from({length:D});for(let J=0;J<D;J++){let E=z[J],M=H[E];if(dt(M))yt(`set(${E})`);if(Ke(M))Q[J]=`${d(E)} = ${M.raw}`;else if(Ze(M)){let G=et(M,y.length+1);Q[J]=`${d(E)} = ${G.text}`,y.push(...G.parameters)}else Q[J]=`${d(E)} = ${t(y.length+1)}`,y.push(M)}return N=`${N} SET ${Q.join(", ")}`,f=O(N,y),this},where(F,H,z){if(H!==void 0&&(typeof F==="string"||Ke(F)||Ze(F))){let D=Ee(H,"updateTable.where"),Q;if(typeof F==="string")Q=d(F);else if(Ke(F))Q=F.raw;else{let M=et(F,y.length+1);Q=M.text,y.push(...M.parameters)}if(D.toLowerCase()==="in"||D.toLowerCase()==="not in"){let M=Array.isArray(z)?z:[z],G=s(M.length,y.length+1);return S(`${Q} ${D.toUpperCase()} (${G})`),y.push(...M),f=O(N,y),this}let J=Ge(Q,D,z,"updateTable.where");if(J)return S(J),f=O(N,y),this;let E=y.length+1;return S(`${Q} ${D} ${t(E)}`),y.push(z),f=O(N,y),this}if(Array.isArray(F)){let[D,Q,J]=F,E=Ee(Q,"updateTable.where");if(E.toLowerCase()==="in"||E.toLowerCase()==="not in"){let W=Array.isArray(J)?J:[J],Y=s(W.length,y.length+1);return S(`${d(String(D))} ${E.toUpperCase()} (${Y})`),y.push(...W),f=O(N,y),this}let M=Ge(d(String(D)),E,J,"updateTable.where");if(M)return S(M),f=O(N,y),this;let G=y.length+1;return S(`${d(String(D))} ${E} ${t(G)}`),y.push(J),f=O(N,y),this}if(dt(F))yt("updateTable.where(expr)");if(Ke(F))return S(F.raw),f=O(N,y),this;if(Ze(F)){let D=et(F,y.length+1);return S(D.text),y.push(...D.parameters),f=O(N,y),this}if(F&&typeof F==="object"){let D=Object.keys(F);if(D.length===0)throw TypeError("[query-builder] updateTable.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if updating every row is intended.");let Q=D.map((J)=>Bt(d(J),F[J],y));return S(Q.join(" AND ")),f=O(N,y),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${F===null?"null":typeof F}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(F){return S(`${d(String(F))} IS NULL`),f=O(N,y),this},whereNotNull(F){return S(`${d(String(F))} IS NOT NULL`),f=O(N,y),this},returning(...F){let H=this,z=()=>`${N} RETURNING ${F.join(", ")}`,D=()=>y.length>0?O(z(),y):O(z()),Q=async()=>{let W=/\sWHERE\s/i.test(N),Y=W?N.slice(N.search(/\sWHERE\s/i)+1):"",V=y.slice(y.length-(Y.match(/\?|\$\d+/g)?.length??0)),ne=d("id"),K=await(V.length>0?O(`SELECT ${ne} FROM ${d(String(g))}${W?` ${Y}`:""}`,V):O(`SELECT ${ne} FROM ${d(String(g))}${W?` ${Y}`:""}`)).execute().catch(()=>[]),X=(Array.isArray(K)?K:[]).map((re)=>re?.id).filter((re)=>re!==void 0&&re!==null);if(await ae(y.length>0?O(N,y):O(N),"update"),X.length===0)return[];let oe=`SELECT ${F.join(", ")} FROM ${d(String(g))} WHERE ${ne} IN (${X.map(()=>"?").join(", ")})`,ee=await O(oe,X).execute();return Array.isArray(ee)?ee:[]},J=()=>n(e.dialect)?Q():ae(D(),"update"),E=async()=>{let W=await J();return Array.isArray(W)?W[0]:W},M=(W)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${W}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},G={where:(...W)=>(H.where(...W),G),andWhere:(...W)=>(H.where(...W),G),whereNull:(...W)=>(H.whereNull(...W),G),whereNotNull:(...W)=>(H.whereNotNull(...W),G),orWhere:M("orWhere"),orderBy:M("orderBy"),limit:M("limit"),offset:M("offset"),toSQL:()=>Ce(D(),z()),execute:J,get:J,first:E,executeTakeFirst:E,async firstOrFail(){let W=await E();if(!W)throw Error("Update with RETURNING returned no rows");return W},async executeTakeFirstOrThrow(){let W=await E();if(!W)throw Error("Update with RETURNING returned no rows");return W}};return G},toSQL(){if(!f)f=y.length>0?O(N,y):O(N);return Ce(f,N)},async execute(){let F=await ae(f,"update");return ve(F)},async executeTakeFirst(){return{numUpdatedRows:ve(await ae(f,"update"))}},async executeTakeFirstOrThrow(){let F=ve(await ae(f,"update"));if(F===0)throw Error("No rows updated");return{numUpdatedRows:F}},returningAll(){return this.returning("*")}}},deleteFrom(g){let f=(D)=>{let Q=String(D);if(n(e.dialect))return`\`${Q.replace(/`/g,"``")}\``;return`"${Q.replace(/"/g,'""')}"`},d=`DELETE FROM ${f(String(g))}`,N=null,L=[],S=null,F=!1,H=(D)=>{d+=` ${F?"AND":"WHERE"} ${D}`,F=!0},z=()=>{if(N===null)N=L.length>0?O(d,L):O(d);return N};return{where(D,Q,J){if(S=D,typeof D==="string"&&Q!==void 0){let E=Ee(Q,"deleteFrom.where");if(E.toLowerCase()==="in"||E.toLowerCase()==="not in"){let W=Array.isArray(J)?J:[J],Y=s(W.length,L.length+1);return H(`${f(D)} ${E.toUpperCase()} (${Y})`),L.push(...W),N=null,this}let M=Ge(f(D),E,J,"deleteFrom.where");if(M)return H(M),N=null,this;let G=L.length+1;return H(`${f(D)} ${E} ${t(G)}`),L.push(J),N=null,this}if(Array.isArray(D)){let[E,M,G]=D,W=Ee(M,"deleteFrom.where");if(W.toLowerCase()==="in"||W.toLowerCase()==="not in"){let ne=Array.isArray(G)?G:[G],K=s(ne.length,L.length+1);return H(`${f(String(E))} ${W.toUpperCase()} (${K})`),L.push(...ne),N=null,this}let Y=Ge(f(String(E)),W,G,"deleteFrom.where");if(Y)return H(Y),N=null,this;let V=L.length+1;return H(`${f(String(E))} ${W} ${t(V)}`),L.push(G),N=null,this}if(dt(D))yt("deleteFrom.where(expr)");if(Ke(D))return H(D.raw),N=null,this;if(Ze(D)){let E=et(D,L.length+1);return H(E.text),L.push(...E.parameters),N=null,this}if(D&&typeof D==="object"){let E=Object.keys(D);if(E.length===0)throw TypeError("[query-builder] deleteFrom.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if deleting every row is intended.");let M=E.map((G)=>Bt(f(G),D[G],L));return H(M.join(" AND ")),N=null,this}throw TypeError(`[query-builder] deleteFrom.where(): expected a condition, got ${D===null?"null":typeof D}. Refusing to run a DELETE with no WHERE \u2014 drop the where() call if deleting every row is intended.`)},whereNull(D){return H(`${f(String(D))} IS NULL`),N=null,this},whereNotNull(D){return H(`${f(String(D))} IS NOT NULL`),N=null,this},returning(...D){let Q=this,J=()=>`${d} RETURNING ${D.join(", ")}`,E=()=>L.length>0?O(J(),L):O(J()),M=async()=>{await pe()?.beforeDelete?.({table:String(g),where:S});let V=n(e.dialect)?await(async()=>{let ne=d.slice(d.search(/\sFROM\s/i)+1),K=`SELECT ${D.join(", ")} ${ne}`,X=await(L.length>0?O(K,L):O(K)).execute();return await ae(L.length>0?O(d,L):O(d),"delete"),Array.isArray(X)?X:[]})():await ae(E(),"delete");try{await pe()?.afterDelete?.({table:String(g),where:S,result:V})}catch{}return V},G=async()=>{let V=await M();return Array.isArray(V)?V[0]:V},W=(V)=>()=>{throw TypeError(`[query-builder] deleteFrom.returning(...).${V}() is not supported \u2014 a DELETE cannot be ordered or limited through this builder. Narrow it with where() instead.`)},Y={where:(...V)=>(Q.where(...V),Y),andWhere:(...V)=>(Q.where(...V),Y),whereNull:(...V)=>(Q.whereNull(...V),Y),whereNotNull:(...V)=>(Q.whereNotNull(...V),Y),orWhere:W("orWhere"),orderBy:W("orderBy"),limit:W("limit"),offset:W("offset"),toSQL:()=>Ce(E(),J()),execute:()=>M(),get:()=>M(),first:G,executeTakeFirst:G,async firstOrFail(){let V=await G();if(!V)throw Error("Delete with RETURNING returned no rows");return V},async executeTakeFirstOrThrow(){let V=await G();if(!V)throw Error("Delete with RETURNING returned no rows");return V}};return Y},toSQL(){return Ce(z(),d)},async execute(){try{await pe()?.beforeDelete?.({table:String(g),where:S})}catch(Q){throw Q}let D=ve(await ae(z(),"delete"));try{await pe()?.afterDelete?.({table:String(g),where:S,result:D})}catch{}return D},async executeTakeFirst(){return{numDeletedRows:ve(await ae(z(),"delete"))}},async executeTakeFirstOrThrow(){let D=ve(await ae(z(),"delete"));if(D===0)throw Error("No rows deleted");return{numDeletedRows:D}},returningAll(){return this.returning("*")}}},table(g){let f=this;return{insert(y){return f.insertInto(g).values(y)},update(y){return f.updateTable(g).set(y)},delete(){return f.deleteFrom(g)},select(...y){if(y.length===0)return f.selectFrom(g);return f.select(g,...y)}}},sql:R,raw(g,...f){if(typeof g==="string")return _t(g,f);return R(g,...f)},simple(g,...f){return R(g,...f).simple()},async advisoryLock(g){if(e.dialect==="postgres"){let f=$e(g),y=O("SELECT pg_advisory_lock($1)",[f]);await ae(y,"raw");return}if(n(e.dialect)){let f=`bqb:${String(g)}`,y=O("SELECT GET_LOCK(?, -1) AS ok",[f]);await ae(y,"raw");return}throw Error("[query-builder] advisoryLock() is not supported on SQLite \u2014 use a Postgres or MySQL deployment for distributed locking.")},async tryAdvisoryLock(g){if(e.dialect==="postgres"){let f=$e(g),y=O("SELECT pg_try_advisory_lock($1) as ok",[f]),d=await ae(y,"raw");return Boolean(d?.[0]?.ok)}if(n(e.dialect)){let f=`bqb:${String(g)}`,y=O("SELECT GET_LOCK(?, 0) AS ok",[f]),d=await ae(y,"raw");return Number(d?.[0]?.ok)===1}return!1},async advisoryUnlock(g){if(e.dialect==="postgres"){let f=$e(g),y=O("SELECT pg_advisory_unlock($1) as ok",[f]),d=await ae(y,"raw");return Boolean(d?.[0]?.ok)}if(n(e.dialect)){let f=`bqb:${String(g)}`,y=O("SELECT RELEASE_LOCK(?) AS ok",[f]),d=await ae(y,"raw");return Number(d?.[0]?.ok)===1}return!1},unsafe(g,f){return Vt(g,f),R.unsafe(g,f)},deferInsert:R.deferInsert?.bind(R),flushDeferredInserts:R.flushDeferredInserts?.bind(R),file(g,f){return R.file(g,f)},async reserve(){let g=await r.reserve(),f=i({sql:g,meta:w,schema:U,hooks:b?.hooks});return f.release=()=>g.release(),f},async close(g){await r.close(g)},async listen(g,f){},async unlisten(g){},async notify(g,f){},async copyTo(g,f){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(g,f,y){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let g=O("SELECT 1");return await ae(g,"select"),!0}catch{return!1}},async waitForReady(g){let f=Math.max(1,g?.attempts??10),y=Math.max(10,g?.delayMs??100);for(let d=0;d<f;d++){if(await this.ping())return;await new Promise((N)=>setTimeout(N,y))}throw Error("Database not ready after waiting")},async transaction(g,f){let d={...b?.txDefaults,...f};if(d.sqliteMode!==void 0){if(e.dialect!=="sqlite")throw TypeError("[query-builder] sqliteMode requires the SQLite dialect");if(!["deferred","immediate","exclusive"].includes(d.sqliteMode))throw TypeError("[query-builder] sqliteMode must be deferred, immediate or exclusive")}let N=b?.sql??r,L=b?.inTransaction===!0,S=L&&typeof N?.savepoint==="function"?"savepoint":"begin",F=async(Q)=>{d.logger?.({type:"start",attempt:Q});let J=Date.now(),E=!L&&d.sqliteMode?[d.sqliteMode.toUpperCase()]:[];return await N[S](...E,async(M)=>{let G=i({sql:M,meta:w,schema:U,hooks:b?.hooks,inTransaction:!0});if(d?.isolation&&!L){let V=d.isolation,ne=V==="read committed"?"READ COMMITTED":V==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await M.unsafe(`SET TRANSACTION ISOLATION LEVEL ${ne}`);else if(n(e.dialect))await M.unsafe(`SET TRANSACTION ISOLATION LEVEL ${ne}`);else if(V!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${V}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(d?.readOnly)if(e.dialect==="postgres")await M.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await M.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let W=await g(G),Y=Date.now()-J;return d.logger?.({type:"commit",attempt:Q,durationMs:Y}),W})},H=Math.max(0,d?.retries??0),z=0,D;for(;;)try{D=await F(z+1);break}catch(Q){let J=en(Q)||tn(Q,d.sqlStates);if(z<H&&J){z++,d?.onRetry?.(z,Q);let E=cn(z,d.backoff);if(E>0)await rn(E);continue}try{d.onRollback?.(Q)}catch{}try{d.afterRollback?.()}catch{}throw Q}return await d.afterCommit?.(),D},async savepoint(g){if(b?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let f=R;if(!f||typeof f.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await f.savepoint(async(y)=>{let d=i({sql:y,meta:w,schema:U,hooks:b?.hooks,inTransaction:!0});return await g(d)})},async beginDistributed(g,f){return await(b?.sql??r).beginDistributed(g,async(N)=>{let L=i({sql:N,meta:w,schema:U,hooks:b?.hooks});return await f(L)})},async commitDistributed(g){await r.commitDistributed(g)},async rollbackDistributed(g){await r.rollbackDistributed(g)},setTransactionDefaults(g){b={...b,txDefaults:{...b?.txDefaults,...g}}},transactional(g,f){return(...y)=>this.transaction((d)=>g(d,...y),f)},async insertOrIgnore(g,f){let y=Array.isArray(f)?f:[f];if(!y.length)return;let{colsSql:d,valuesSql:N,params:L}=wt(y),S=ke(String(g)),F=n(e.dialect)?`INSERT IGNORE INTO ${S} (${d}) VALUES ${N}`:`INSERT INTO ${S} (${d}) VALUES ${N} ON CONFLICT DO NOTHING`;return O(F,L).execute()},async insertGetId(g,f,y="id"){let{colsSql:d,valuesSql:N,params:L}=wt([f]),S=ke(String(g));if(n(e.dialect)){await O(`INSERT INTO ${S} (${d}) VALUES ${N}`,L).execute();let[H]=await O("SELECT LAST_INSERT_ID() as id").execute();return H?.id}if(e.dialect==="sqlite"){let H=await O(`INSERT INTO ${S} (${d}) VALUES ${N}`,L).execute();if(H?.lastInsertRowid!=null)return H.lastInsertRowid;let[z]=await O("SELECT last_insert_rowid() as id").execute();return z?.id}let[F]=await O(`INSERT INTO ${S} (${d}) VALUES ${N} RETURNING ${ke(String(y))} as id`,L).execute();return F?.id},async updateOrInsert(g,f,y){let d=ke(String(g)),N=Object.keys(f),L=1,S=N.map((J)=>`${ke(J)} = ${t(L++)}`).join(" AND "),F=N.map((J)=>f[J]);if((await O(`SELECT 1 FROM ${d} WHERE ${S} LIMIT 1`,F).execute()).length){let J=Object.keys(y),E=1,M=J.map((Y)=>`${ke(Y)} = ${t(E++)}`).join(", "),G=N.map((Y)=>`${ke(Y)} = ${t(E++)}`).join(" AND "),W=[...J.map((Y)=>y[Y]),...N.map((Y)=>f[Y])];return await O(`UPDATE ${d} SET ${M} WHERE ${G}`,W).execute(),!0}let{colsSql:z,valuesSql:D,params:Q}=wt([{...f,...y}]);return await O(`INSERT INTO ${d} (${z}) VALUES ${D}`,Q).execute(),!0},async upsert(g,f,y,d){let N=y.map((M)=>String(M)),L=(d??[]).map((M)=>String(M)),S=f;if(!S.length)return;let{colsSql:F,valuesSql:H,params:z}=wt(S),D=ke(String(g)),Q=`INSERT INTO ${D} (${F}) VALUES ${H}`;if(n(e.dialect)){if(L.length===0)return O(`INSERT IGNORE INTO ${D} (${F}) VALUES ${H}`,z).execute();let M=L.map((G)=>`${ke(G)} = VALUES(${ke(G)})`).join(", ");return O(`${Q} ON DUPLICATE KEY UPDATE ${M}`,z).execute()}let J=N.map(ke).join(", ");if(L.length===0)return O(`${Q} ON CONFLICT (${J}) DO NOTHING`,z).execute();let E=L.map((M)=>`${ke(M)} = EXCLUDED.${ke(M)}`).join(", ");return O(`${Q} ON CONFLICT (${J}) DO UPDATE SET ${E}`,z).execute()},async save(g,f){let y=w?.primaryKeys[String(g)]??"id",d=f[y];if(d!=null)if(await this.selectFrom(g).find(d)){await this.updateTable(g).set(f).where({[y]:d}).execute();let L=await this.selectFrom(g).find(d);if(!L)throw Error("save() failed to retrieve updated row");return L}else return await this.create(g,f);return await this.create(g,f)},async remove(g,f){return await this.deleteFrom(g).where({id:f}).execute()},async find(g,f){return await this.selectFrom(g).find(f)},async findOrFail(g,f){return await this.selectFrom(g).findOrFail(f)},async findMany(g,f){return await this.selectFrom(g).findMany(f)},async latest(g,f){return await this.selectFrom(g).latest(f).first()},async oldest(g,f){return await this.selectFrom(g).oldest(f).first()},skip(g,f){return this.selectFrom(g).offset(f)},async rawQuery(g){let f=Date.now();try{pe()?.onQueryStart?.({sql:g,kind:"raw"});let y=await R.unsafe(g);return pe()?.onQueryEnd?.({sql:g,durationMs:Date.now()-f,kind:"raw"}),y}catch(y){throw pe()?.onQueryError?.({sql:g,error:y,durationMs:Date.now()-f,kind:"raw"}),y}},async create(g,f){let y=w?.primaryKeys[String(g)]??"id";try{await pe()?.beforeCreate?.({table:String(g),data:f})}catch(d){throw d}if(e.dialect==="postgres"){let d=R`INSERT INTO ${R(String(g))} ${R(f)} RETURNING ${R(String(y))} as id`,[N]=await d.execute();if(!N?.id)throw console.error(`create() failed to get insert ID for table ${String(g)}`),console.error("Inserted values:",f),Error(`create() failed to get insert ID for table ${String(g)}`);let L=await this.selectFrom(g).find(N.id);if(!L)throw console.error(`create() failed to retrieve inserted row for table ${String(g)} with id ${N.id}`),console.error("Inserted values:",f),Error(`create() failed to retrieve inserted row for table ${String(g)} with id ${N.id}`);try{await pe()?.afterCreate?.({table:String(g),data:f,result:L})}catch{}return L}else{let d=await this.insertGetId(g,f,y);if(d==null)throw Error(`create() failed to get insert ID for table ${String(g)}`);let N=await this.selectFrom(g).find(d);if(!N)throw console.error(`create() failed to retrieve inserted row for table ${String(g)} with id ${d}`),console.error("Inserted values:",f),Error(`create() failed to retrieve inserted row for table ${String(g)} with id ${d}`);try{await pe()?.afterCreate?.({table:String(g),data:f,result:N})}catch{}return N}},async createMany(g,f){if(!f?.length)return;let y=f[0],d=Object.keys(y),N=d.length,L=f.length,S=Array.from({length:L*N}),F=n(e.dialect)?(D)=>`\`${String(D).replace(/`/g,"``")}\``:(D)=>`"${String(D).replace(/"/g,'""')}"`,H=`INSERT INTO ${F(String(g))}(${d.map(F).join(",")})VALUES`,z=0;for(let D=0;D<L;D++){if(D>0)H+=",";H+="(";let Q=f[D];for(let J=0;J<N;J++){if(J>0)H+=",";H+=t(z+1),S[z++]=Q[d[J]]}H+=")"}return O(H,S).execute()},async insertMany(g,f){if(!f?.length)return;let y=f[0],d=Object.keys(y),N=d.length,L=f.length,S=L*N,F=Array(S),H=e.dialect==="postgres",z;if(!H){let J=Array(N);for(let E=0;E<N;E++)J[E]="?";z=`(${J.join(",")})`}else z="";let D=Array(L+2);D[0]=`INSERT INTO ${g}(${d.join(",")})VALUES`;let Q=0;if(!H){for(let J=0;J<L;J++){let E=f[J];D[J+1]=z;for(let M=0;M<N;M++)F[Q++]=E[d[M]]}return O(D[0]+D.slice(1,L+1).join(","),F).execute()}for(let J=0;J<L;J++){let E=f[J],M=Array(N);for(let G=0;G<N;G++)M[G]=`$${Q+1}`,F[Q++]=E[d[G]];D[J+1]=`(${M.join(",")})`}return O(D[0]+D.slice(1,L+1).join(","),F).execute()},async updateMany(g,f,y){let d=Object.keys(y),N=d.length;if(N===0)return 0;let L=[],S=Array.from({length:N});for(let H=0;H<N;H++)S[H]=`${d[H]}=${t(H+1)}`,L.push(y[d[H]]);let F=`UPDATE ${g} SET ${S.join(",")}`;if(Array.isArray(f)){let H=Ee(String(f[1]),"updateMany");F+=` WHERE ${f[0]} ${H} ${t(L.length+1)}`,L.push(f[2])}else if(Ke(f))F+=` WHERE ${f.raw}`;else if(Ze(f)){let H=et(f,L.length+1);F+=` WHERE ${H.text}`,L.push(...H.parameters)}else if(f&&typeof f==="object"&&Object.keys(f).length>0){let H=Object.keys(f).map((z)=>Bt(z,f[z],L));F+=` WHERE ${H.join(" AND ")}`}else if(f&&typeof f==="object")throw TypeError("[query-builder] updateMany(): an empty object is not a filter. Pass a condition, or use updateTable(table).set(data).execute() if updating every row is intended.");else throw TypeError(`[query-builder] updateMany(): expected a condition, got ${f===null?"null":typeof f}. Refusing to run an UPDATE with no WHERE \u2014 use updateTable(table).set(data).execute() if updating every row is intended.`);return O(F,L).execute()},async deleteMany(g,f){if(!Array.isArray(f)||f.length===0)return 0;let y=w?.primaryKeys[String(g)]??"id",d=f.length;if(e.dialect==="postgres"){let L=Array(d);for(let S=0;S<d;S++)L[S]=`$${S+1}`;return O(`DELETE FROM ${g} WHERE ${y} IN (${L.join(",")})`,f).execute()}let N=Array(d);for(let L=0;L<d;L++)N[L]="?";return O(`DELETE FROM ${g} WHERE ${y} IN (${N.join(",")})`,f).execute()},async firstOrCreate(g,f,y){let d=await this.selectFrom(g).where(f).first();if(d)return d;return await this.create(g,{...f,...y})},async updateOrCreate(g,f,y){let d=await this.selectFrom(g).where(f).first();if(d){await this.updateTable(g).set(y).where(f).execute();let N=w?.primaryKeys[String(g)]??"id",L=d[N],S=L!=null?await this.selectFrom(g).find(L):await this.selectFrom(g).where(f).first();if(!S)throw Error("updateOrCreate() failed to retrieve updated row");return S}return await this.create(g,{...f,...y})},async count(g,f){let y=f?R(String(f)):R`*`,d=R`SELECT COUNT(${y}) as c FROM ${R(String(g))}`,[N]=await d.execute();return Number(N?.c??0)},async sum(g,f){let y=R`SELECT SUM(${R(String(f))}) as s FROM ${R(String(g))}`,[d]=await y.execute();return Number(d?.s??0)},async avg(g,f){let y=R`SELECT AVG(${R(String(f))}) as a FROM ${R(String(g))}`,[d]=await y.execute();return Number(d?.a??0)},async min(g,f){let y=R`SELECT MIN(${R(String(f))}) as m FROM ${R(String(g))}`,[d]=await y.execute();return d?.m},async max(g,f){let y=R`SELECT MAX(${R(String(f))}) as m FROM ${R(String(g))}`,[d]=await y.execute();return d?.m},getRelationships(g){if(!w?.relations)return{};let f=w.relations[g];if(!f)return{};let y={};for(let[d,N]of Object.entries(f))if(N&&typeof N==="object"&&Object.keys(N).length>0)y[d]=N;return y},hasRelationship(g,f){if(!w?.relations)return!1;let y=w.relations[g];if(!y)return!1;return Object.values(y).some((d)=>d&&typeof d==="object"&&(f in d))},getRelationshipType(g,f){if(!w?.relations)return null;let y=w.relations[g];if(!y)return null;for(let[d,N]of Object.entries(y))if(N&&typeof N==="object"&&f in N)return d;return null},getRelationshipTarget(g,f){if(!w?.relations)return null;let y=w.relations[g];if(!y)return null;for(let[d,N]of Object.entries(y))if(N&&typeof N==="object"&&f in N){let L=N[f];if(typeof L==="string")return w.modelToTable[L]||L;else if(L&&typeof L==="object"){if("model"in L)return w.modelToTable[L.model]||L.model;if("target"in L)return w.modelToTable[L.target]||L.target}}return null}}}function Me(){$t.clear()}function Pe(b){$t.setMaxSize(b)}
|
|
3
|
-
export{v,Kn,nn,c,At,Nt,i,Me,Pe};
|