bun-query-builder 0.3.13 → 0.3.14

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import"../chunk-jypmc6m3.js";import"../chunk-wvae8521.js";import"../chunk-bhm321nb.js";import"../chunk-ztdtt4hj.js";import"../chunk-2v1zv4hb.js";import{ne,re,ie,se,F,ae,oe,le,ce,j,ue,q,W,de,fe,U,me,he,A,ge,S,N,M,we,Se,V,De,H,Ee,Q,G,P,J,$e,xe,ve,ke,z,Ce,Re}from"../chunk-ev6akmaa.js";import{EventEmitter as Le}from"events";import v from"process";import ye from"process";import X from"process";import T from"process";import I from"process";import qe from"tty";import kt,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import D from"fs/promises";import Me from"os";import K from"path";import x from"process";function Y(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],n=(d)=>{let a=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),a=!0;else if(r.endsWith("..."))r=r.slice(0,-3),a=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:a}},o;while(o=t.exec(e))s.push(n(o));let m;while(m=i.exec(e))s.push(n(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Oe(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function L(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function B(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,n=t.length,o=e,m;for(;s<n;++s)m=o[t[s]],o=o[t[s]]=s===n-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function k(e){return e.split(".").map((t,i)=>i===0?B(t):t).join(".")}class E extends Error{exitCode=2;isUsageError=!0;usage;constructor(e,t){super(e);if(this.name=this.constructor.name,t!==void 0)this.usage=t;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(e).stack}format(e=!1){if(e&&this.stack)return`${this.message}
3
+ import"../chunk-jypmc6m3.js";import"../chunk-wvae8521.js";import"../chunk-35s45ket.js";import"../chunk-ztdtt4hj.js";import"../chunk-2v1zv4hb.js";import{ne,re,ie,se,F,ae,oe,le,ce,j,ue,q,W,de,fe,U,me,he,A,ge,S,N,M,we,Se,V,De,H,Ee,Q,G,P,J,$e,xe,ve,ke,z,Ce,Re}from"../chunk-6w95jzzq.js";import{EventEmitter as Le}from"events";import v from"process";import ye from"process";import X from"process";import T from"process";import I from"process";import qe from"tty";import kt,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import D from"fs/promises";import Me from"os";import K from"path";import x from"process";function Y(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],n=(d)=>{let a=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),a=!0;else if(r.endsWith("..."))r=r.slice(0,-3),a=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:a}},o;while(o=t.exec(e))s.push(n(o));let m;while(m=i.exec(e))s.push(n(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Oe(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function L(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function B(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,n=t.length,o=e,m;for(;s<n;++s)m=o[t[s]],o=o[t[s]]=s===n-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function k(e){return e.split(".").map((t,i)=>i===0?B(t):t).join(".")}class E extends Error{exitCode=2;isUsageError=!0;usage;constructor(e,t){super(e);if(this.name=this.constructor.name,t!==void 0)this.usage=t;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(e).stack}format(e=!1){if(e&&this.stack)return`${this.message}
4
4
 
5
5
  Stack trace:
6
6
  ${this.stack}`;return this.message}}function Ue(e){if(e instanceof E)return!0;return!!e&&typeof e==="object"&&e.name==="ClappError"&&typeof e.message==="string"}function Ge(){let{env:e}=ye,{TERM:t,TERM_PROGRAM:i}=e;if(ye.platform!=="win32")return t!=="linux";return Boolean(e.WT_SESSION)||Boolean(e.TERMINUS_SUBLIME)||e.ConEmuTask==="{cmd::Cmder}"||i==="Terminus-Sublime"||i==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var R="\x1B",b=`${R}[`;var Ie={to(e,t){if(!t)return`${b}${e+1}G`;return`${b}${t+1};${e+1}H`},move(e,t){let i="";if(e<0)i+=`${b}${-e}D`;else if(e>0)i+=`${b}${e}C`;if(t<0)i+=`${b}${-t}A`;else if(t>0)i+=`${b}${t}B`;return i},up:(e=1)=>`${b}${e}A`,down:(e=1)=>`${b}${e}B`,forward:(e=1)=>`${b}${e}C`,backward:(e=1)=>`${b}${e}D`,nextLine:(e=1)=>`${b}E`.repeat(e),prevLine:(e=1)=>`${b}F`.repeat(e),left:`${b}G`,hide:`${b}?25l`,show:`${b}?25h`,save:`${R}7`,restore:`${R}8`};var Vt={screen:`${b}2J`,up:(e=1)=>`${b}1J`.repeat(e),down:(e=1)=>`${b}J`.repeat(e),line:`${b}2K`,lineEnd:`${b}K`,lineStart:`${b}1K`,lines(e){let t="";for(let i=0;i<e;i++)t+=this.line+(i<e-1?Ie.up():"");if(e)t+=Ie.left;return t}},Lt={screen:`${R}c`};function He(e,t){let i=[];for(let s=0;s<=t.length;s++)i[s]=[s];for(let s=0;s<=e.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let n=1;n<=e.length;n++)if(t.charAt(s-1)===e.charAt(n-1))i[s][n]=i[s-1][n-1];else i[s][n]=Math.min(i[s-1][n-1]+1,i[s][n-1]+1,i[s-1][n]+1);return i[t.length][e.length]}function Be(e,t,i=2,s=3){return t.map((n)=>({cmd:n,distance:He(e,n)})).filter(({distance:n})=>n<=i).sort((n,o)=>n.distance-o.distance).slice(0,s).map(({cmd:n})=>n)}function Ke(e,t={}){let i={_:[]},s=t.alias||{},n=new Set(t.boolean||[]),o={};for(let a of Object.keys(s))for(let r of s[a])o[r]=a;for(let a of n)if(s[a])for(let r of s[a])n.add(r);function m(a,r){if(a===void 0)return r;if(typeof r==="boolean")return r;return Array.isArray(a)?[...a,r]:[a,r]}function d(a,r){let c=o[a]||a,h=m(i[c],r);if(i[c]=h,s[c])for(let l of s[c])i[l]=h;if(o[a]&&s[o[a]])for(let l of s[o[a]])i[l]=h;i[a]=h}for(let a=0;a<e.length;a++){let r=e[a];if(r==="--"){i._.push(...e.slice(a+1));break}if(r.startsWith("--")){let c=r.indexOf("=");if(c!==-1){let h=B(r.slice(2,c)),l=r.slice(c+1);d(h,l)}else{let h=r.slice(2);if(h.startsWith("no-")){let f=B(h.slice(3));d(f,!1);continue}let l=B(h),y=o[l]||l;if(n.has(y)||n.has(l))d(l,!0);else{let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}}}else if(r.startsWith("-")&&r.length>1){let c=r.slice(1);for(let h=0;h<c.length;h++){let l=c[h],y=o[l]||l;if(h===c.length-1&&!n.has(y)&&!n.has(l)){let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}else d(l,!0)}}else i._.push(r)}return i}class Te{rawName;description;name;names;isBoolean;required;config;negated;variadic;constructor(e,t,i){if(this.rawName=e,this.description=t,this.config=Object.assign({},i),e=e.replace(/\.\*/g,""),this.negated=!1,this.variadic=/[<[](?:\.\.\.[^\]>]+|[^\]>]+\.\.\.)[\]>]/.test(e),this.names=Y(e).split(",").map((s)=>{let n=s.trim().replace(/^-{1,2}/,"");if(n.startsWith("no-"))this.negated=!0,n=n.replace(/^no-/,"");return k(n)}).sort((s,n)=>s.length>n.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if(e.includes("<"))this.required=!0;else if(e.includes("["))this.required=!1;else this.isBoolean=!0}}var Dt=X.argv,Ye=`${X.platform}-${X.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,_e=T.argv,Qe=`${T.platform}-${T.arch} node-${T.version}`;class Z{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor(e,t,i,s){this.rawName=e,this.description=t,this.config=i,this.cli=s,this.options=[],this.aliasNames=[],this.name=Y(e);let n=Y(e),o=n.indexOf(":");if(o>0)this.namespace=n.substring(0,o),this.name=n.substring(o+1);if(this.args=Ne(e),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!i)this.config={}}usage(e){return this.usageText=e,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(e,t="-v, --version"){return this.versionNumber=e,this.option(t,"Display version number"),this}example(e){return this.examples.push(e),this}option(e,t,i){let s=new Te(e,t,i);return this.options.push(s),this}alias(e){return this.aliasNames.push(e),this}action(e){return this.commandAction=e,this}before(e){return this.beforeHooks.push(e),this}after(e){return this.afterHooks.push(e),this}use(e){return this.middleware.push(e),this}isMatched(e){if(this.aliasNames.includes(e))return!0;if(this.namespace)return`${this.namespace}:${this.name}`===e;return this.name===e}get isDefaultCommand(){return this.name===""||this.aliasNames.includes("!")}get isGlobalCommand(){return this instanceof ee}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption(e){let t=k(e.split(".")[0]);return!!this.options.find((i)=>i.names.some((s)=>k(s)===t))}outputHelp(){let{name:e,commands:t}=this.cli,{versionNumber:i,options:s,helpCallback:n}=this.cli.globalCommand,o=[{body:`${e}${i?`/${i}`:""}`}];if(o.push({title:"Usage",body:` $ ${e} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&t.length>0){let r=Oe(t.map((f)=>f.rawName)),c=new Map,h=[];for(let f of t)if(f.namespace){if(!c.has(f.namespace))c.set(f.namespace,[]);c.get(f.namespace).push(f)}else h.push(f);let l="";if(h.sort((f,_)=>f.rawName<_.rawName?-1:f.rawName>_.rawName?1:0),h.length>0)l+=h.map((f)=>` ${L(f.rawName,r.length)} ${f.description}`).join(`
@@ -29,7 +29,7 @@ Received ${i}, cleaning up...`),e)try{await e()}catch(s){console.error("Error du
29
29
  `)),this.enableDidYouMean){let t=[];for(let s of this.commands){if(s.displayName)t.push(s.displayName);if(s.aliasNames)t.push(...s.aliasNames)}let i=Be(e,t);if(i.length>0)console.log(O.yellow("Did you mean one of these?")),i.forEach((s)=>console.log(` ${O.dim("\u2022")} ${this.name} ${s}`)),console.log("")}console.log(O.dim("Run"),`${this.name} --help`,O.dim("to see all available commands")),v.exit(1)}async parse(e=_e,t={}){let{run:i=!0,exitOnError:s=!1}=t;if(s)try{return await this.parse(e,{run:i})}catch(a){throw this.handleUsageError(a),a}if(this.rawArgs=e,!this.name)this.name=e[1]?ze(e[1]):"cli";let n=!0,o=e.slice(2),m=o[0];if(m&&!m.startsWith("-")){for(let a of this.commands)if(a.isMatched(m)){let r=this.mri(o,a);n=!1;let c={...r,args:r.args.slice(1)};this.setParsedInfo(c,a,m),this.emit(`command:${m}`,a);break}if(n){let a=o[1];if(a&&!a.startsWith("-")){let r=`${m}:${a}`;for(let c of this.commands)if(c.isMatched(r)){let h=this.mri(o,c);n=!1;let l={...h,args:h.args.slice(2)};this.setParsedInfo(l,c,r),this.emit(`command:${r}`,c);break}}}}if(n){for(let a of this.commands)if(a.name===""){n=!1;let r=this.mri(o,a);this.setParsedInfo(r,a),this.emit("command:!",a);break}}if(n){let a=this.mri(e.slice(2));this.setParsedInfo(a)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction||this.options.interaction===!1)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji||this.options.emoji===!1)this.useEmoji=!1;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache||this.options.cache===!1)this.isNoCache=!0;if(this.options.help&&this.showHelpOnExit)this.outputHelp(),i=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),i=!1,this.unsetMatchedCommand();let d={args:this.args,options:this.options};if(i)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return d}mri(e,t){let i=[...this.globalCommand.options,...t?t.options:[]],s=Pe(i),n=[],o=e.indexOf("--");if(o>-1)n=e.slice(o+1),e=e.slice(0,o);let m=Ke(e,s),d={_:m._};for(let l of Object.keys(m))if(l!=="_")d[k(l)]=m[l];let a=d._,r={"--":n},c=t&&t.config.ignoreOptionDefaultValue?t.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,h=Object.create(null);for(let l of i){if(!c&&l.config.default!==void 0)for(let y of l.names)r[y]=l.config.default;if(Array.isArray(l.config.type)){if(h[l.name]===void 0)h[l.name]={shouldTransform:!0,transformFunction:l.config.type[0]}}}for(let l of Object.keys(d))if(l!=="_"){let y=l.split(".");We(r,y,d[l]),Fe(r,h)}for(let l of i){if(!l.variadic)continue;for(let y of l.names){let f=r[y];if(f===void 0||Array.isArray(f))continue;if(l.config.default!==void 0&&f===l.config.default)continue;r[y]=[f]}}return{args:a,options:r}}async run(e=_e){return this.parse(e,{run:!0,exitOnError:!0})}handleUsageError(e){if(!Ue(e)||e.isUsageError===!1)return;let t=e.message||"command-line error",i=this.name?`${this.name}: `:"",s=/--help/.test(t)?"":e.usage?`
30
30
  Usage: ${e.usage}`:`
31
31
  Run \`${this.name??"cli"} --help\` for usage.`;v.stderr.write(`${i}${t}${s}
32
- `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,a)=>{if(d.variadic)s.push(e.slice(a));else s.push(e[a])}),s.push(t);let n={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(n);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,a=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...n,next:a})}else await m()};await a()}else await m();for(let d of i.afterHooks)await d(n);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class je{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(e){if(!this.enabled){this.misses++;return}let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>t.ttl){this.cache.delete(e),this.misses++;return}return this.hits++,t.value}set(e,t,i=5000){if(!this.enabled)return;this.cache.set(e,{value:t,timestamp:Date.now(),ttl:i})}has(e){if(!this.enabled)return!1;let t=this.cache.get(e);if(!t)return!1;if(Date.now()-t.timestamp>t.ttl)return this.cache.delete(e),!1;return!0}delete(e){this.cache.delete(e)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let e=Date.now();for(let[t,i]of this.cache.entries())if(e-i.timestamp>i.ttl)this.cache.delete(t)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var Wt=new je;function et(){if("FORCE_COLOR"in I.env)return I.env.FORCE_COLOR!=="0";if("NO_COLOR"in I.env||I.env.TERM==="dumb")return!1;if(I.platform==="win32")return!0;return qe.isatty(1)&&qe.isatty(2)}var Ae=et();function g(e,t){if(!Ae)return(i)=>i;return(i)=>e+i+t}var tt=g("\x1B[0m","\x1B[0m"),it=g("\x1B[31m","\x1B[39m"),st=g("\x1B[32m","\x1B[39m"),rt=g("\x1B[33m","\x1B[39m"),nt=g("\x1B[34m","\x1B[39m"),at=g("\x1B[35m","\x1B[39m"),ot=g("\x1B[36m","\x1B[39m"),lt=g("\x1B[37m","\x1B[39m"),ct=g("\x1B[90m","\x1B[39m"),ut=g("\x1B[1m","\x1B[22m"),dt=g("\x1B[3m","\x1B[23m"),mt=g("\x1B[4m","\x1B[24m"),ht=g("\x1B[2m","\x1B[22m"),ft=g("\x1B[7m","\x1B[27m"),pt=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=Ae,Ot={reset:tt,red:it,green:st,yellow:rt,blue:nt,magenta:at,cyan:ot,white:lt,gray:ct,bold:ut,italic:dt,underline:mt,dim:ht,inverse:ft,hidden:pt,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,Et=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(Et),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=kt.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var p=(e,t)=>_t?e:t,Jt=p("\u25C6","*"),Xt=p("\u25A0","x"),Zt=p("\u25B2","x"),ei=p("\u25C7","o"),ti=p("\u250C","T"),qt=p("\u2502","|"),ii=p("\u2514","\u2014"),si=p("\u25CF",">"),ri=p("\u25CB"," "),ni=p("\u25FB","[\u2022]"),ai=p("\u25FC","[+]"),oi=p("\u25FB","[ ]"),li=p("\u25AA","\u2022"),ci=p("\u2500","-"),ui=p("\u256E","+"),di=p("\u251C","+"),mi=p("\u256F","+"),hi=p("\u25CF","\u2022"),fi=p("\u25C6","*"),pi=p("\u25B2","!"),gi=p("\u25A0","x");var bi={light:p("\u2500","-"),heavy:p("\u2501","="),block:p("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=K.join(e,".config","clapp");this.configPath=K.join(t,"telemetry.json")}async isEnabled(){if(x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true")return!1;if(x.env.NO_TELEMETRY==="1"||x.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let e=await this.loadConfig();if(e.enabled=!0,!e.userId)e.userId=this.generateUserId();await this.saveConfig(e)}async disable(){let e=await this.loadConfig();e.enabled=!1,await this.saveConfig(e)}async track(e,t){if(!await this.isEnabled())return;let s={event:e,...t,timestamp:Date.now(),platform:Me.platform(),nodeVersion:x.version};if(this.events.push(s),this.events.length>=10)await this.send()}async trackCommand(e,t){await this.track("command",{command:e,duration:t})}async trackError(e,t){await this.track("error",{error:e,command:t})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let t=await this.loadConfig();return t.lastSent=Date.now(),await this.saveConfig(t),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let t=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(t),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(e){return new Promise((t)=>setTimeout(t,e))}async status(){let e=await this.loadConfig();return{enabled:e.enabled,doNotTrack:x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:e.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Bt(this.configPath)){let e=await D.readFile(this.configPath,"utf-8");return this.config=JSON.parse(e),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(e){this.config=e;try{let t=K.dirname(this.configPath);await D.mkdir(t,{recursive:!0}),await D.writeFile(this.configPath,JSON.stringify(e,null,2),"utf-8")}catch{}}generateUserId(){let e=Math.random().toString(36).substring(2,15),t=Date.now().toString(36);return`${e}-${t}`}}var Si=new Ve;var pe="0.3.13";var u=new te("query-builder");u.command("introspect <dir>","Load models and print inferred schema").option("--verbose","Enable verbose logging").example("query-builder introspect ./app/Models --verbose").action(async(e,t)=>{await he(e,t)});u.command("introspect:db","Reverse-introspect the live database into defineModel() source (#1047)").option("--table <table>","Limit to a single table (repeatable)").example("query-builder introspect:db > app/Models/generated.ts").action(async(e)=>{let t=e?.table,i=t?Array.isArray(t)?t:[t]:void 0,s=await A({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
32
+ `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,a)=>{if(d.variadic)s.push(e.slice(a));else s.push(e[a])}),s.push(t);let n={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(n);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,a=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...n,next:a})}else await m()};await a()}else await m();for(let d of i.afterHooks)await d(n);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class je{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(e){if(!this.enabled){this.misses++;return}let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>t.ttl){this.cache.delete(e),this.misses++;return}return this.hits++,t.value}set(e,t,i=5000){if(!this.enabled)return;this.cache.set(e,{value:t,timestamp:Date.now(),ttl:i})}has(e){if(!this.enabled)return!1;let t=this.cache.get(e);if(!t)return!1;if(Date.now()-t.timestamp>t.ttl)return this.cache.delete(e),!1;return!0}delete(e){this.cache.delete(e)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let e=Date.now();for(let[t,i]of this.cache.entries())if(e-i.timestamp>i.ttl)this.cache.delete(t)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var Wt=new je;function et(){if("FORCE_COLOR"in I.env)return I.env.FORCE_COLOR!=="0";if("NO_COLOR"in I.env||I.env.TERM==="dumb")return!1;if(I.platform==="win32")return!0;return qe.isatty(1)&&qe.isatty(2)}var Ae=et();function g(e,t){if(!Ae)return(i)=>i;return(i)=>e+i+t}var tt=g("\x1B[0m","\x1B[0m"),it=g("\x1B[31m","\x1B[39m"),st=g("\x1B[32m","\x1B[39m"),rt=g("\x1B[33m","\x1B[39m"),nt=g("\x1B[34m","\x1B[39m"),at=g("\x1B[35m","\x1B[39m"),ot=g("\x1B[36m","\x1B[39m"),lt=g("\x1B[37m","\x1B[39m"),ct=g("\x1B[90m","\x1B[39m"),ut=g("\x1B[1m","\x1B[22m"),dt=g("\x1B[3m","\x1B[23m"),mt=g("\x1B[4m","\x1B[24m"),ht=g("\x1B[2m","\x1B[22m"),ft=g("\x1B[7m","\x1B[27m"),pt=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=Ae,Ot={reset:tt,red:it,green:st,yellow:rt,blue:nt,magenta:at,cyan:ot,white:lt,gray:ct,bold:ut,italic:dt,underline:mt,dim:ht,inverse:ft,hidden:pt,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,Et=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(Et),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=kt.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var p=(e,t)=>_t?e:t,Jt=p("\u25C6","*"),Xt=p("\u25A0","x"),Zt=p("\u25B2","x"),ei=p("\u25C7","o"),ti=p("\u250C","T"),qt=p("\u2502","|"),ii=p("\u2514","\u2014"),si=p("\u25CF",">"),ri=p("\u25CB"," "),ni=p("\u25FB","[\u2022]"),ai=p("\u25FC","[+]"),oi=p("\u25FB","[ ]"),li=p("\u25AA","\u2022"),ci=p("\u2500","-"),ui=p("\u256E","+"),di=p("\u251C","+"),mi=p("\u256F","+"),hi=p("\u25CF","\u2022"),fi=p("\u25C6","*"),pi=p("\u25B2","!"),gi=p("\u25A0","x");var bi={light:p("\u2500","-"),heavy:p("\u2501","="),block:p("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=K.join(e,".config","clapp");this.configPath=K.join(t,"telemetry.json")}async isEnabled(){if(x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true")return!1;if(x.env.NO_TELEMETRY==="1"||x.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let e=await this.loadConfig();if(e.enabled=!0,!e.userId)e.userId=this.generateUserId();await this.saveConfig(e)}async disable(){let e=await this.loadConfig();e.enabled=!1,await this.saveConfig(e)}async track(e,t){if(!await this.isEnabled())return;let s={event:e,...t,timestamp:Date.now(),platform:Me.platform(),nodeVersion:x.version};if(this.events.push(s),this.events.length>=10)await this.send()}async trackCommand(e,t){await this.track("command",{command:e,duration:t})}async trackError(e,t){await this.track("error",{error:e,command:t})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let t=await this.loadConfig();return t.lastSent=Date.now(),await this.saveConfig(t),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let t=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(t),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(e){return new Promise((t)=>setTimeout(t,e))}async status(){let e=await this.loadConfig();return{enabled:e.enabled,doNotTrack:x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:e.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Bt(this.configPath)){let e=await D.readFile(this.configPath,"utf-8");return this.config=JSON.parse(e),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(e){this.config=e;try{let t=K.dirname(this.configPath);await D.mkdir(t,{recursive:!0}),await D.writeFile(this.configPath,JSON.stringify(e,null,2),"utf-8")}catch{}}generateUserId(){let e=Math.random().toString(36).substring(2,15),t=Date.now().toString(36);return`${e}-${t}`}}var Si=new Ve;var pe="0.3.14";var u=new te("query-builder");u.command("introspect <dir>","Load models and print inferred schema").option("--verbose","Enable verbose logging").example("query-builder introspect ./app/Models --verbose").action(async(e,t)=>{await he(e,t)});u.command("introspect:db","Reverse-introspect the live database into defineModel() source (#1047)").option("--table <table>","Limit to a single table (repeatable)").example("query-builder introspect:db > app/Models/generated.ts").action(async(e)=>{let t=e?.table,i=t?Array.isArray(t)?t:[t]:void 0,s=await A({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
33
33
 
34
34
  ${s.map((n)=>n.source).join(`
35
35
  `)}`)});u.command("sql <dir> <table>","Build a sample query for a table").option("--limit <n>","Limit rows",{default:10}).example("query-builder sql ./app/Models users --limit 5").action(async(e,t,i)=>{await ve(e,t,i)});u.command("ping","Test database connectivity (uses environment variables)").example("query-builder ping").action(async()=>{await Ee()});u.command("wait-ready","Wait for database to become ready").option("--attempts <n>","Number of attempts",{default:10}).option("--delay <ms>","Delay between attempts",{default:100}).example("query-builder wait-ready --attempts 30 --delay 250").action(async(e)=>{try{await Re(e)}catch{let t=await import("process");t.default.exitCode=1}});u.command("unsafe <sql>","Execute an unsafe SQL string (one statement with params)").option("--params <json>","JSON array of parameters").example('query-builder unsafe "SELECT * FROM users WHERE id = $1" --params "[1]"').action(async(e,t)=>{await ke(e,t)});u.command("file <path>","Execute a SQL file (supports $1, $2 params)").option("--params <json>","JSON array of parameters").example("query-builder file ./migrations/seed.sql").example('query-builder file ./reports/top.sql --params "[30]"').action(async(e,t)=>{await fe(e,t)});u.command("migrate <dir>","Generate SQL migrations from models").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--apply","Execute the generated SQL against the database").option("--full","Force full migration SQL instead of incremental diff").option("--from-db","Diff the models against the live database instead of the model snapshot").option("--strict","Fail when the migrated schema does not match the models").example("query-builder migrate ./app/Models --dialect postgres").example("query-builder migrate ./app/Models --from-db --strict").action(async(e,t)=>{try{await S(e,{dialect:t.dialect,state:t.state,apply:t.apply,full:t.full,fromDb:t.fromDb}),await N(void 0,{strict:t.strict,auditDrift:t.strict?"always":!0})}catch(i){console.error("-- Migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("explain <sql>","Explain a query").example('query-builder explain "SELECT * FROM users WHERE active = true"').action(async(e)=>{await de(e)});u.command("query:explain-all <path>","Run EXPLAIN on all SQL files in a directory").option("--verbose","Enable verbose output").option("--json","Output as JSON").example("query-builder query:explain-all ./queries").example("query-builder query:explain-all ./queries/users.sql").action(async(e,t)=>{try{await Q(e,{verbose:t.verbose,json:t.json})}catch(i){console.error("-- Explain all failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("relation:diagram","Generate relationship diagram from models").option("--dir <path>","Models directory (defaults to app/Models)").option("--format <fmt>","Output format (mermaid|dot)",{default:"mermaid"}).option("--output <path>","Output file path").option("--verbose","Enable verbose output").example("query-builder relation:diagram").example("query-builder relation:diagram --format dot --output schema.dot").example("query-builder relation:diagram --output schema.mmd").action(async(e)=>{try{await G({dir:e.dir,format:e.format,output:e.output,verbose:e.verbose})}catch(t){console.error("-- Diagram generation failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("migrate:fresh <dir>","Reset database and run all migrations").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--full","Force full migration SQL instead of incremental diff").example("query-builder migrate:fresh ./app/Models --dialect postgres").action(async(e,t)=>{try{console.log("-- Resetting database..."),await M(e,{dialect:t.dialect,state:t.state}),console.log("-- Generating fresh migrations..."),await S(e,{dialect:t.dialect,state:t.state,full:t.full}),console.log("-- Executing migrations..."),await N()}catch(i){console.error("-- Migrate fresh failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("reset <dir>","Drop all tables and reset database").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").example("query-builder reset ./app/Models --dialect postgres").action(async(e,t)=>{try{await M(e,{dialect:t.dialect,state:t.state})}catch(i){console.error("-- Reset failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("seed","Run database seeders").option("--dir <path>","Path to seeders directory (defaults to database/seeders)").option("--class <name>","Run a specific seeder class").option("--verbose","Enable verbose logging").example("query-builder seed").example("query-builder seed --class UserSeeder").example("query-builder seed --dir ./database/seeders").action(async(e)=>{try{if(e.class)await J(e.class,{verbose:e.verbose});else await P({seedersDir:e.dir,verbose:e.verbose})}catch(t){console.error("-- Seeding failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:seed","Run database seeders (alias for seed)").option("--dir <path>","Path to seeders directory (defaults to database/seeders)").option("--class <name>","Run a specific seeder class").option("--verbose","Enable verbose logging").example("query-builder db:seed").example("query-builder db:seed --class UserSeeder").action(async(e)=>{try{if(e.class)await J(e.class,{verbose:e.verbose});else await P({seedersDir:e.dir,verbose:e.verbose})}catch(t){console.error("-- Seeding failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("make:seeder <name>","Create a new seeder file").example("query-builder make:seeder User").example("query-builder make:seeder UserSeeder").action(async(e)=>{try{await $e(e)}catch(t){console.error("-- Failed to create seeder:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:fresh","Drop all tables, re-run migrations and seed the database").option("--models <path>","Path to models directory (defaults to app/Models)").option("--seeders <path>","Path to seeders directory (defaults to database/seeders)").option("--verbose","Enable verbose logging").example("query-builder db:fresh").example("query-builder db:fresh --models ./app/Models --seeders ./database/seeders").action(async(e)=>{try{await xe({modelsDir:e.models,seedersDir:e.seeders,verbose:e.verbose})}catch(t){console.error("-- Database fresh failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("make:model <name>","Create a new model file").option("--table <name>","Table name (defaults to plural of model name)").option("--dir <path>","Models directory (defaults to app/Models)").option("--timestamps","Include timestamp fields (default: true)").example("query-builder make:model User").example("query-builder make:model Post --table=blog_posts").action(async(e,t)=>{try{await ge(e,{table:t.table,dir:t.dir,timestamps:t.timestamps})}catch(i){console.error("-- Failed to create model:",i);let s=await import("process");s.default.exitCode=1}});u.command("model:show <name>","Show detailed model information").option("--dir <path>","Models directory (defaults to app/Models)").option("--json","Output as JSON").option("--verbose","Enable verbose output").example("query-builder model:show User").example("query-builder model:show Post --json").action(async(e,t)=>{try{await H(e,{dir:t.dir,json:t.json,verbose:t.verbose})}catch(i){console.error("-- Failed to show model:",i);let s=await import("process");s.default.exitCode=1}});u.command("migrate:status","Show migration status").example("query-builder migrate:status").action(async()=>{try{await V()}catch(e){console.error("-- Failed to get migration status:",e);let t=await import("process");t.default.exitCode=1}});u.command("migrate:list","List all migrations (alias for migrate:status)").example("query-builder migrate:list").action(async()=>{try{await De()}catch(e){console.error("-- Failed to list migrations:",e);let t=await import("process");t.default.exitCode=1}});u.command("migrate:rollback","Rollback migrations").option("--steps <n>","Number of migrations to rollback",{default:1}).option("--no-reverse-schema","Only remove the migration records; leave the schema alone").option("--delete-files","Also delete the rolled-back migration files from disk").example("query-builder migrate:rollback").example("query-builder migrate:rollback --steps 2").example("query-builder migrate:rollback --no-reverse-schema").action(async(e)=>{try{await Se({steps:Number(e.steps),reverseSchema:e.reverseSchema,deleteFiles:Boolean(e.deleteFiles)})}catch(t){console.error("-- Rollback failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("migrate:generate [dir]","Generate migration from model changes").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file").option("--apply","Execute the generated SQL").option("--full","Force full migration SQL").example("query-builder migrate:generate").example("query-builder migrate:generate ./app/Models --dialect postgres").action(async(e,t)=>{try{await we(e,{dialect:t?.dialect,state:t?.state,apply:t?.apply,full:t?.full})}catch(i){console.error("-- Generate migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("db:info","Show database information and statistics").example("query-builder db:info").action(async()=>{try{await j()}catch(e){console.error("-- Failed to get database info:",e);let t=await import("process");t.default.exitCode=1}});u.command("db:stats","Show database statistics (alias for db:info)").example("query-builder db:stats").action(async()=>{try{await ue()}catch(e){console.error("-- Failed to get database stats:",e);let t=await import("process");t.default.exitCode=1}});u.command("db:wipe","Drop all tables from the database").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--force","Skip confirmation prompt").option("--verbose","Enable verbose output").example("query-builder db:wipe").example("query-builder db:wipe --force").action(async(e)=>{try{await W({dialect:e.dialect,force:e.force,verbose:e.verbose})}catch(t){console.error("-- Wipe failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:optimize","Optimize database tables (VACUUM, ANALYZE, OPTIMIZE)").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--aggressive","Use aggressive optimization (VACUUM FULL for postgres)").option("--tables <tables>","Comma-separated list of tables to optimize").option("--verbose","Enable verbose output").example("query-builder db:optimize").example("query-builder db:optimize --aggressive").example("query-builder db:optimize --tables users,posts").action(async(e)=>{try{await q({dialect:e.dialect,aggressive:e.aggressive,tables:e.tables?e.tables.split(","):void 0,verbose:e.verbose})}catch(t){console.error("-- Optimize failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("console","Start interactive query console").example("query-builder console").action(async()=>{try{await F()}catch(e){console.error("-- Console failed:",e);let t=await import("process");t.default.exitCode=1}});u.command("tinker","Start interactive query console (alias for console)").example("query-builder tinker").action(async()=>{try{await ae()}catch(e){console.error("-- Tinker failed:",e);let t=await import("process");t.default.exitCode=1}});u.command("inspect <table>","Inspect a table structure").option("--verbose","Enable verbose output",{default:!0}).example("query-builder inspect users").action(async(e,t)=>{try{await U(e,{verbose:t.verbose})}catch(i){console.error("-- Failed to inspect table:",i);let s=await import("process");s.default.exitCode=1}});u.command("table:info <table>","Show table information (alias for inspect)").option("--verbose","Enable verbose output",{default:!0}).example("query-builder table:info users").action(async(e,t)=>{try{await me(e,{verbose:t.verbose})}catch(i){console.error("-- Failed to get table info:",i);let s=await import("process");s.default.exitCode=1}});u.command("cache:clear","Clear the query cache").example("query-builder cache:clear").action(async()=>{try{await re()}catch(e){console.error("-- Failed to clear cache:",e);let t=await import("process");t.default.exitCode=1}});u.command("cache:stats","Show cache statistics").example("query-builder cache:stats").action(async()=>{try{await ie()}catch(e){console.error("-- Failed to get cache stats:",e);let t=await import("process");t.default.exitCode=1}});u.command("cache:config","Configure cache settings").option("--size <n>","Set maximum cache size").example("query-builder cache:config --size 500").action(async(e)=>{try{await se({size:e.size})}catch(t){console.error("-- Failed to configure cache:",t);let i=await import("process");i.default.exitCode=1}});u.command("benchmark","Run performance benchmarks").option("--operations <ops>","Comma-separated list of operations (select,insert,update,delete,count)").option("--iterations <n>","Number of iterations per operation",{default:1000}).example("query-builder benchmark").example("query-builder benchmark --operations select,insert --iterations 5000").action(async(e)=>{try{await ne({operations:e.operations,iterations:e.iterations?Number(e.iterations):void 0})}catch(t){console.error("-- Benchmark failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("validate:schema [dir]","Validate models against database schema").example("query-builder validate:schema").example("query-builder validate:schema ./app/Models").action(async(e)=>{try{await z(e)}catch(t){console.error("-- Validation failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("check [dir]","Validate schema (alias for validate:schema)").example("query-builder check").action(async(e)=>{try{await Ce(e)}catch(t){console.error("-- Check failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("export <table>","Export data from a table").option("--format <fmt>","Export format (json|csv|sql)",{default:"json"}).option("--output <path>","Output file path").option("--limit <n>","Limit number of rows").example("query-builder export users").example("query-builder export users --format csv --output users.csv").example("query-builder export users --format sql --limit 100").action(async(e,t)=>{try{await oe(e,{format:t.format,output:t.output,limit:t.limit?Number(t.limit):void 0})}catch(i){console.error("-- Export failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("import <table> <file>","Import data into a table").option("--format <fmt>","Import format (json|csv)").option("--truncate","Truncate table before import").example("query-builder import users users.json").example("query-builder import users users.csv --truncate").action(async(e,t,i)=>{try{await le(e,t,{format:i.format,truncate:i.truncate})}catch(s){console.error("-- Import failed:",s);let n=await import("process");n.default.exitCode=1}});u.command("dump","Dump database to SQL file").option("--tables <tables>","Comma-separated list of tables to dump").option("--output <path>","Output file path").example("query-builder dump").example("query-builder dump --tables users,posts").example("query-builder dump --output backup.sql").action(async(e)=>{try{await ce({tables:e.tables,output:e.output})}catch(t){console.error("-- Dump failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("version","Show the version of the CLI").action(()=>{console.log(pe)});u.version(pe);u.help();u.parse();
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{p,_,n,e,t,s,Le,T,r,m,Gt,x,l,te,We,Ue}from"./chunk-jypmc6m3.js";import{Buffer as Dt}from"buffer";import{serialize as Jt}from"v8";function Ft(b){return m(e.relations?.singularizeStrategy)(b)}function v(b,R,w,H={}){let oe=H.singularize??Ft,ue=b.relations?.[R]?.belongsToMany?.[w];if(ue==null)return null;let ke=typeof ue==="object",Se=ke?ue:null,pe=ke?Se.model:ue,Ge=b.modelToTable[pe]||pe,Ye,rt;if(Se?.table)Ye=Se.table;else if(Se?.through){if(rt=Se.through,Ye=b.modelToTable[Se.through],!Ye)throw Error(`[query-builder] belongsToMany relation '${w}' on '${R}' references unknown through model '${Se.through}'. Make sure '${Se.through}' is registered via defineModels({...}).`)}else{let Ke=oe(R),g=oe(Ge);Ye=[Ke,g].sort().join("_")}let st=Se?.foreignKey??`${oe(R)}_id`,Tt=Se?.relatedKey??`${oe(Ge)}_id`,se={};if(Se?.pivot?.columns)Object.assign(se,Se.pivot.columns);if(rt&&H.models){let Ke=H.models[rt],g=Ke?.definition??Ke?.getDefinition?.()??Ke,f=g?.attributes??{};for(let[y,d]of Object.entries(f)){if(y===st||y===Tt||y===(g?.primaryKey??"id"))continue;se[y]={default:d?.default,nullable:d?.nullable,validation:d?.validation}}}let qe=Boolean(Se?.pivot?.timestamps),xe=Object.keys(se);return{pivotTable:Ye,fkParent:st,fkRelated:Tt,pivotColumns:xe,pivotColumnDefs:se,pivotModelName:rt,timestamps:qe,relatedModelName:pe,relatedTable:Ge,hasConfig:ke}}function*Kn(b,R={}){let w=b.relations;if(!w)return;for(let[H,oe]of Object.entries(w)){let O=oe?.belongsToMany;if(!O)continue;for(let ue of Object.keys(O)){let ke=v(b,H,ue,R);if(ke)yield{parentTable:H,relationKey:ue,resolved:ke}}}}function Je(b){return typeof b==="object"&&b!==null&&"raw"in b&&typeof b.raw==="string"}function $t(b,R,w){if(Array.isArray(R)){let oe=s(R.length,w.length+1),O=l(b,R,!1,oe);return w.push(...R),O}let H=`${b} = ${t(w.length+1)}`;return w.push(R),H}function Xe(b){return typeof b==="object"&&b!==null&&"sql"in b&&typeof b.sql==="string"&&(!("parameters"in b)||Array.isArray(b.parameters))}function Kt(b,R){let[w,...H]=R;if(H.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 oe={sql:b,parameters:[...w??[]]};return Object.defineProperty(oe,"then",{enumerable:!1,value:(O,ue)=>{let ke=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(ke);throw ke}}),oe}function ct(b){return b instanceof Promise&&typeof b.execute==="function"&&typeof b.cancel==="function"}function dt(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 Ze(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 H=0,{text:oe}=We(b.sql,()=>H<w.length?t(R+H++):void 0);if(H!==w.length)throw TypeError(`[query-builder] SQL expression declares ${w.length} parameters but contains only ${H} placeholders`);return{text:oe,parameters:w}}function It(b,R){if(R.length===2){let[w,H]=R;if(Array.isArray(H)&&typeof w==="number"&&H[w]===b)return!1;if(H instanceof Set&&w===b&&H.has(b))return!1;if(H instanceof Map&&H.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("?"))&&It(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 H=0;H<R.length;H++)w+=_e(R[H])+b[H+1];return{raw:w}}function Re(b){return n(e.dialect)?`\`${b.replace(/`/g,"``")}\``:`"${b.replace(/"/g,'""')}"`}function pt(b,R=1){let w=Object.keys(b[0]??{}),H=[],oe=R,O=b.map((ue)=>`(${w.map((Se)=>(H.push(ue[Se]),t(oe++))).join(", ")})`);return{colsSql:w.map(Re).join(", "),valuesSql:O.join(", "),params:H,nextIndex:oe}}function yt(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[,H,oe,O]=w,ue=oe?`\`${H}\`.\`${oe}\``:`\`${H}\``;return O?`${ue} AS \`${O}\``:ue}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[,H,oe]=w;return`${H} ${oe.length===5?`${oe}:00`:oe}`}if(!(b instanceof Date)||Number.isNaN(b.getTime()))return b;return b.toISOString().replace("T"," ").replace(/\.\d+Z$/,"")}function Et(b){if(typeof b==="string")return c(b);if(Je(b))return b.raw;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 w}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 _t(b){let R=/\(|\)|\bORDER\s+BY\b/gi,w=0,H;while(H=R.exec(b))if(H[0]==="(")w++;else if(H[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},Rt=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 De(b,R){if(typeof b!=="string")throw TypeError(`[query-builder] ${R}: operator must be a string, got ${typeof b}`);let w=b.toLowerCase();if(!Rt.has(w))throw TypeError(`[query-builder] ${R}: refusing to use '${b}' as a SQL operator \u2014 not in the allowed set (${[...Rt].join(", ")})`);return b}function Ve(b,R,w,H){let oe=R.toLowerCase();if(oe!=="is"&&oe!=="is not")return null;if(w!==null&&w!==void 0)throw TypeError(`[query-builder] ${H}: operator '${R}' only accepts NULL/undefined as value, got ${typeof w} (${String(w)})`);return`${b} IS ${oe==="is not"?"NOT ":""}NULL`}function Ce(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 H of w)if(!/^[A-Z_][A-Z0-9_]*$/i.test(H))throw TypeError(`[query-builder] ${R}: identifier segment '${H}' contains characters outside [A-Za-z0-9_]`)}function et(b,R,w=[]){let H=typeof b==="object"&&b!==null?b.parameters??b.values:void 0;if(It(b,w)||Array.isArray(H)&&H.length>0){let oe=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${oe}`)}if(typeof b==="string")return Ut(R),b;if(b===null||b===void 0)throw TypeError(`[query-builder] ${R}: fragment must be a SqlFragment, got ${b}`);if(Je(b))return b.raw;if(typeof b==="object"){let oe=b;if(typeof oe.raw==="string")return oe.raw;if(typeof oe.raw==="function"){let ue=oe.raw();if(typeof ue==="string")return ue}if(typeof oe.sql==="string")return oe.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 jt(b,R){if(!R||R.length===0)return;if(e.dialect!=="postgres")return;if(/\$\d/.test(b))return;let w=te(b),H=`${R.length} binding${R.length===1?"":"s"}`,oe=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(): ${H} supplied, but ${oe}. 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 kt=new Set;function Ut(b){if(kt.has(b))return;kt.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 _e(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 Ht(b,R){let w=Array.isArray(b)?b:b?[b]:[],H=[];if(w.length)H.push(`PARTITION BY ${w.join(", ")}`);if(R&&R.length)H.push(`ORDER BY ${R.map(([oe,O])=>`${oe} ${O==="desc"?"DESC":"ASC"}`).join(", ")}`);return H.length?`OVER (${H.join(" ")})`:"OVER ()"}class xt{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 H=Date.now(),oe=!1;for(let[O,ue]of this.cache)if(H>ue.expiresAt){if(this.cache.delete(O),oe=!0,this.cache.size<this.maxSize)break}if(!oe){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 St=new xt,Ot=new WeakMap,Vt=0;function Yt(b,R,w){let H=Ot.get(b);if(H===void 0)H=++Vt,Ot.set(b,H);let oe=w.map((O)=>ArrayBuffer.isView(O)?["view",Dt.isBuffer(O)?"Buffer":Object.prototype.toString.call(O),Dt.from(O.buffer,O.byteOffset,O.byteLength).toString("base64")]:["value",Jt(O).toString("base64")]);return`${H}\x00${R}\x00${JSON.stringify(oe)}`}function zt(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 Xt(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 Zt(b){return new Promise((R)=>setTimeout(R,b))}var wt=new Map,en=500,tn=[{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}],rn=[{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}],sn=[{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 tt(b){let R=wt.get(b);if(R!==void 0)return R;let w=an(b);if(wt.size>=en)wt.clear();return wt.set(b,w),w}function an(b){let R=Ue(b,tn);if(R.length<=1)return b;let w=b.slice(0,R[0].start).trimEnd(),H={};for(let ue=0;ue<R.length;ue++){let ke=R[ue].start,Se=ue+1<R.length?R[ue+1].start:b.length,pe=b.slice(ke,Se).trim();if(!H[R[ue].key])H[R[ue].key]=[];H[R[ue].key].push(pe)}let O=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((ue)=>H[ue]).map((ue)=>H[ue].join(" ")).join(" ");return O?`${w} ${O}`:w}function on(b,R){let w=Math.max(1,R?.baseMs??50),H=Math.max(1,R?.factor??2),oe=Math.max(w,R?.maxMs??2000),O=Math.min(oe,w*H**Math.max(0,b-1));if(R?.jitter)O=Math.min(oe,O*(0.9+Math.random()*0.2));return Math.floor(O)}function i(b){let R=_(b?.sql??T()),w=b?.meta,H=b?.schema,oe;function O(g,f){let y=R.unsafe(g,f);if(typeof y.sql!=="string")oe??=new WeakMap,oe.set(y,{sql:g,params:f?.slice()});return y}let ue,ke=(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 P of y){if(!(P in d))continue;let S=At(d[P]);if(S!==d[P])N=N??{...d},N[P]=S}return N??d})};function Se(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 Ge=new Map;function Ye(g){if(Array.isArray(g)){let[P,S,W]=g;j(P,"where(column)");let U=String(P);switch(S){case"in":if(Array.isArray(W)){let z=s(W.length);return O(`${U} IN (${z})`,W)}return O(`${U} IN (${t(1)})`,[W]);case"not in":if(Array.isArray(W)){let z=s(W.length);return O(`${U} NOT IN (${z})`,W)}return O(`${U} NOT IN (${t(1)})`,[W]);case"like":return O(`${U} LIKE ${t(1)}`,[W]);case"is":case"is not":{if(W!==null&&W!==void 0)throw TypeError(`[query-builder] where(..., '${S}', ?): operator '${S}' only accepts NULL/undefined as value, got ${typeof W} (${String(W)})`);return O(`${U} IS ${S==="is not"?"NOT ":""}NULL`)}case"!=":return O(`${U} <> ${t(1)}`,[W]);case"<":case">":case"<=":case">=":case"=":return O(`${U} ${S} ${t(1)}`,[W]);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 P of f){j(P,"where(object key)");let S=g[P];if(Array.isArray(S)){let W=s(S.length,N);y.push(`${P} IN (${W})`),d.push(...S),N+=S.length}else y.push(`${P} = ${t(N++)}`),d.push(S)}return O(y.join(" AND "),d)}function rt(g,f,y){if(!y)return f;let d=Ye(y);return R`${f} WHERE ${d}`}function st(g){let f=oe?.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 Tt(g){let f=oe?.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 se(g,f,y){let d=pe(),N=d?.slowQueryThresholdMs,P=N!=null&&N>=0,S=Boolean(d?.onSlowQuery||P),W=d&&(d.onQueryStart||d.onQueryEnd||d.onQueryError||d.startSpan||S),U=y?.timeoutMs&&y.timeoutMs>0||y?.signal;if(!W&&!U)return g.execute();let z=st(g),D=Tt(g),Q=Date.now(),F;try{if(d?.onQueryStart?.({sql:z,params:D,kind:f}),d?.startSpan)F=d.startSpan({sql:z,params:D,kind:f})}catch{}let E=!1,J=(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}),P&&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{F?.end(V)}catch{}};if(typeof g.executeSync==="function"){let V,ne,K=!1;try{V=g.executeSync()}catch(ae){ne=ae,K=!0}if(y?.signal?.aborted){try{g.cancel?.()}catch{}ne=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),K=!0}if(K)return J(ne,void 0,!0),Promise.reject(ne);let X=Array.isArray(V)?V.length:typeof V==="number"?V:void 0;return J(void 0,X),Promise.resolve(V)}let Y=g.execute(),M=[Y],G;if(y?.timeoutMs&&y.timeoutMs>0){let V=new Promise((ne,K)=>{G=setTimeout(()=>{try{g.cancel?.()}catch{}let X=Error(`Query timed out after ${y.timeoutMs}ms`);X.code="EBQBTIMEOUT",K(X)},y.timeoutMs)});M.push(V)}if(y?.signal){if(y.signal.aborted){try{g.cancel?.()}catch{}let ne=Error("Query aborted");return ne.code="EBQBABORT",J(ne),Promise.reject(ne)}let V=()=>{try{g.cancel?.()}catch{}};y.signal.addEventListener("abort",V,{once:!0}),Y.finally(()=>{y.signal?.removeEventListener("abort",V)})}return Promise.race(M).then((V)=>{clearTimeout(G);let ne=Array.isArray(V)?V.length:typeof V==="number"?V:void 0;return J(void 0,ne),V}).catch((V)=>{throw clearTimeout(G),J(V),V})}function qe(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 qe(f[y]);if(Array.isArray(g))return g.reduce((y,d)=>y+qe(d),0);return 0}function xe(g,f){let y=f??st(g);return{sql:y,toString:()=>y,execute:()=>g.execute(),values:()=>g.values(),raw:()=>g.raw()}}function Ke(g,f){let y=R,d=f&&f.length>0?`SELECT ${f.join(", ")} FROM ${String(g)}`:`SELECT * FROM ${String(g)}`,N=!1,P=[],S=[],W=!1,U=!1,z=!1,D=null,Q=()=>{if(D===null){let a=tt(M());D=S.length>0?O(a,S):O(a)}return D},F=(a="",o="",u=[])=>O(`${a}${tt(M())}${o}`,[...S,...u]),E=(a,o)=>{P.push({conn:a,sql:o}),D=null},J=(a,o)=>{E(a==="OR"?"OR":"AND",o)},Y=(a)=>{let o=Ue(a,rn,1);return o.length>0?o[0].start:-1},M=(a)=>{let o=x(a?[...P,a]:P);if(!o)return d;if(W)return`${d} ${U?"AND":"WHERE"} ${o}`;let u=Y(d);return u>=0?`${d.slice(0,u)}WHERE ${o} ${d.slice(u)}`:`${d} WHERE ${o}`},G=(a,o,u,h)=>{let B=typeof u?.__sqlState==="function"?u.__sqlState():void 0,k;if(B){let L=S.length;k=L>0&&e.dialect==="postgres"?B.sql.replace(/\$(\d+)/g,(I,q)=>`$${Number(q)+L}`):B.sql,S.push(...B.params)}else k=String(u.toSQL());E(a,`${o} ${h?"NOT IN":"IN"} (${k})`)},V=(a,o)=>{let u=Ke(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,(L,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)`),De(B,`${u}(operator)`);let L=Ve(String(h),String(B),k,u);if(L)return E(o,L),a;let I=S.length+1;return S.push(k),E(o,`${String(h)} ${String(B)} ${t(I)}`),a}if(Array.isArray(h)){let[L,I,q]=h,A=String(L);j(A,`${u}(column)`);let C=De(I,`${u}(operator)`);if(C==="in"||C==="not in"){let Z=Array.isArray(q)?q:[q],le=s(Z.length,S.length+1),$e=l(c(A),Z,C==="not in",le);S.push(...Z),E(o,$e)}else{let Z=Ve(A,C,q,u);if(Z)return E(o,Z),a;let le=S.length+1;S.push(q),E(o,`${A} ${C} ${t(le)}`)}return a}if(typeof h==="function")return V(o,h),a;if(ct(h))dt(`${u}(expr)`);if(Xe(h)){let L=Ze(h,S.length+1);return S.push(...L.parameters),E(o,L.text),a}if(h&&typeof h==="object"&&!("raw"in h)){let L=[];for(let I of Object.keys(h)){j(I,`${u}(column)`);let q=h[I];if(Array.isArray(q)){let A=s(q.length,S.length+1);L.push(l(c(I),q,!1,A)),S.push(...q)}else{let A=S.length+1;L.push(`${I} = ${t(A)}`),S.push(q)}}if(L.length>0)E(o,L.length>1?`(${L.join(" AND ")})`:L[0]);return a}if(h&&typeof h.raw<"u")return E(o,h.raw),a;return a},K=(a,o)=>{if(P.length>0)d=M(),P.length=0;W=!0;let u=o.__rawState?.();if(u){let h=S.length,B=e.dialect==="postgres"?u.sql.replace(/\$(\d+)/g,(k,L)=>`$${Number(L)+h}`):u.sql;d+=` ${a} ${B}`,S.push(...u.params),U=o.__hasPredicate?.()??he.WHERE.test(B)}else{let h=String(o.toSQL());d+=` ${a} ${h}`,U=o.__hasPredicate?.()??he.WHERE.test(h)}D=null},X=(a)=>{let o=Ue(d,sn,1),u=o.length>0?o[0].start:-1;d=u>=0?`${d.slice(0,u)}${a} ${d.slice(u)}`:`${d} ${a}`,D=null},ae=new Set,ee,re,we=!1,je=!1,Oe=!1,ze=new Map,Qe=new Set,ht=60000,ge=(a)=>m(e.relations.singularizeStrategy)(a),He=(a)=>{if(!w)return null;return v(w,String(g),a,{singularize:ge,models:w.models})},at=(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},ot=(a)=>{if(Qe.size===0||!a)return a;if(Array.isArray(a))for(let o=0;o<a.length;o++)at(a[o]);else at(a);return a},it=(a)=>{if(!w)return;if(ae.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}`,ae.add(a.pivotTable)},lt=(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)}}},ve=(a,o,u,h)=>{lt(`${a} ${Ht(u,h)} AS ${o}`)},gt=(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:(q,A,C)=>(j(q,"relationship subquery condition"),`${o}.${q} ${De(A,"whereHas callback")} ${_e(C)}`)});if(I)k+=` AND ${I}`}return k},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=`${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:(q,A,C)=>(j(q,"relationship subquery condition"),`${o}.${q} ${De(A,"whereHas callback")} ${_e(C)}`)});if(I)k+=` AND ${I}`}return k},bt=(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 L=k&&w?v(w,a,k,{singularize:ge,models:w.models}):null,I=ge(a),q=ge(o),A=L?.pivotTable??[I,q].sort().join("_"),C=L?.fkParent??`${I}_id`,Z=L?.fkRelated??`${q}_id`;j(A,"relationship subquery (pivot table)"),j(C,"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}.${C} = ${a}.${u}`;if(B){let ie=B({where:(Be,Ne,Ae)=>(j(Be,"relationship subquery condition"),`${o}.${Be} ${De(Ne,"whereHas callback")} ${_e(Ae)}`)});if(ie)le+=` AND ${ie}`}return le},Lt=(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})`},Ct=(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),L=ge(o),I=B?.pivotTable??[k,L].sort().join("_"),q=B?.fkParent??`${k}_id`;return j(I,"withCount (pivot table)"),j(q,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${I} WHERE ${I}.${q} = ${a}.${u})`},mt=(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,Be])=>Be&&typeof Be==="object"&&(o in Be));if(!k)return;let[L,I]=k,q=I[o],A=typeof q==="string"?q:q?.model||q?.target||q,C=w.modelToTable[A]||A,Z=w.primaryKeys[h]??"id";j(C,`with${a} (target table)`);let le=`${a}(${C}.${u})`,$e;if(L==="hasMany"||L==="hasOne"){let ie=`${h.endsWith("s")?h.slice(0,-1):h}_id`;j(ie,`with${a} (foreign key)`),$e=`(SELECT ${le} FROM ${C} WHERE ${C}.${ie} = ${h}.${Z})`}else if(L==="belongsToMany"){let ie=w?v(w,h,o,{singularize:ge,models:w.models}):null,Be=ge(h),Ne=ge(C),Ae=ie?.pivotTable??[Be,Ne].sort().join("_"),Ee=ie?.fkParent??`${Be}_id`,ce=ie?.fkRelated??`${Ne}_id`,ut=w.primaryKeys[C]??"id";j(Ae,`with${a} (pivot table)`),j(Ee,`with${a} (foreign key)`),j(ce,`with${a} (related key)`),$e=`(SELECT ${le} FROM ${Ae} JOIN ${C} ON ${C}.${ut} = ${Ae}.${ce} WHERE ${Ae}.${Ee} = ${h}.${Z})`}else return;lt(`${$e} AS ${o}_${a.toLowerCase()}_${u}`)},Bt=()=>{if(ze.size===0)return;let a=[];for(let[o,u]of ze.entries()){let h=He(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(", ");lt(o)}};return new Proxy({distinct(){return d=d.replace(/^SELECT\s+/i,"SELECT DISTINCT "),D=null,this},distinctOn(...a){let o=a.map(String).join(", ");return d=d.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${o}) `),D=null,this},selectRaw(a,...o){let u=et(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,q])=>`${I} ${q==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`ROW_NUMBER() ${h.length?`OVER (${h.join(" ")})`:"OVER ()"} AS ${a}`,L=d.indexOf(" FROM ");if(L!==-1)d=`${d.substring(0,L)}, ${k}${d.substring(L)}`;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(([q,A])=>`${q} ${A==="desc"?"DESC":"ASC"}`).join(", ")}`);let L=`DENSE_RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,I=d.indexOf(" FROM ");if(I!==-1)d=`${d.substring(0,I)}, ${L}${d.substring(I)}`;else d+=`, ${L}`;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(([q,A])=>`${q} ${A==="desc"?"DESC":"ASC"}`).join(", ")}`);let L=`RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,I=d.indexOf(" FROM ");if(I!==-1)d=`${d.substring(0,I)}, ${L}${d.substring(I)}`;else d+=`, ${L}`;return D=null,this},over(a,o,u={}){return ve(a,o,u.partitionBy,u.orderBy),this},lag(a,o={}){let u=[a,String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return ve(`LAG(${u.join(", ")})`,o.alias??`${a}_lag`,o.partitionBy,o.orderBy),this},lead(a,o={}){let u=[a,String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return ve(`LEAD(${u.join(", ")})`,o.alias??`${a}_lead`,o.partitionBy,o.orderBy),this},sumOver(a,o={}){return ve(`SUM(${a})`,o.alias??`${a}_sum`,o.partitionBy,o.orderBy),this},avgOver(a,o={}){return ve(`AVG(${a})`,o.alias??`${a}_avg`,o.partitionBy,o.orderBy),this},countOver(a="*",o={}){return ve(`COUNT(${a})`,o.alias??"count_over",o.partitionBy,o.orderBy),this},minOver(a,o={}){return ve(`MIN(${a})`,o.alias??`${a}_min`,o.partitionBy,o.orderBy),this},maxOver(a,o={}){return ve(`MAX(${a})`,o.alias??`${a}_max`,o.partitionBy,o.orderBy),this},firstValue(a,o={}){return ve(`FIRST_VALUE(${a})`,o.alias??`${a}_first`,o.partitionBy,o.orderBy),this},lastValue(a,o={}){return ve(`LAST_VALUE(${a})`,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(Et),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(Et),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[C,Z]of Object.entries(A))if(typeof Z==="function")o.push({name:C,callback:Z});else o.push({name:C})}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,L=new Map,I=(A)=>{let C=w.relations?.[A];if(!C)return[];return[...Object.keys(C.hasOne||{}),...Object.keys(C.hasMany||{}),...Object.keys(C.belongsTo||{}),...Object.keys(C.belongsToMany||{}),...Object.keys(C.hasOneThrough||{}),...Object.keys(C.hasManyThrough||{}),...Object.keys(C.morphOne||{}),...Object.keys(C.morphMany||{}),...Object.keys(C.morphToMany||{}),...Object.keys(C.morphedByMany||{})]},q=(A,C,Z=0,le)=>{let $e=e.relations.maxDepth??10;if(Z>=$e)throw Error(`[query-builder] Maximum relationship depth (${$e}) exceeded at '${C}'. Consider using separate queries or increasing maxDepth.`);let ie=w.relations?.[A];if(!ie)return A;let Be=(de)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let ye=e.softDeletes.column||"deleted_at";return` AND ${de}.${ye} IS NULL`}return""},Ne=(de)=>{if(!le)return"";let ye=[],be=(Te,Ie,Fe)=>{j(String(Te),"with() constraint column");let nt=De(Ie,"with() constraint operator");ye.push(`${de}.${String(Te)} ${nt} ${_e(Fe)}`)},fe=(Te)=>()=>{throw Error(`[query-builder] with('${C}', ...): ${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,Ie,Fe)=>{if(Array.isArray(Te))be(Te[0],Te[1],Te[2]);else if(Te&&typeof Te==="object")for(let nt of Object.keys(Te))be(nt,"=",Te[nt]);else if(Ie!==void 0&&Fe!==void 0)be(Te,Ie,Fe);else if(Ie!==void 0)be(Te,"=",Ie);return me},whereIn:(Te,Ie)=>(j(String(Te),"with() constraint column"),ye.push(`${de}.${String(Te)} IN (${Ie.map(_e).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 ")}`:""},Ae=()=>{let de=(fe)=>{let me=fe?.[C];return me?w.modelToTable[me]:void 0},ye=(fe)=>{let me=fe?.[C],Te=typeof me==="string"?me:me?.model;return Te?w.modelToTable[Te]:void 0},be=(fe)=>{let me=fe?.[C];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)},Ee=Ae()??(w.modelToTable[C]||w.tableToModel[C]?w.modelToTable[C]??C:C),ce=String(Ee);if(!Ee||!Ae()&&!w.modelToTable[C]&&!w.tableToModel[C]){let de=I(A);if(de.length>0&&!de.includes(C)){let ye=` Available relationships: ${de.join(", ")}`;throw Error(`[query-builder] Relationship '${C}' 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 ut=ie?.hasOneThrough?.[C]||ie?.hasManyThrough?.[C];if(ut){let{through:de,target:ye}=ut,be=w.modelToTable[de]||de,fe=w.modelToTable[ye]||ye,me=w.primaryKeys[A]??"id",Te=w.primaryKeys[be]??"id",Ie=`${ge(A)}_id`,Fe=`${ge(be)}_id`;return X(`LEFT JOIN ${be} ON ${be}.${Ie} = ${A}.${me} LEFT JOIN ${fe} ON ${fe}.${Fe} = ${be}.${Te}`),ae.add(be),ae.add(fe),fe}if(Boolean(ie?.belongsToMany?.[C])){let de=v(w,A,C,{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}${Ne(ce)}`),ae.add(ye),ae.add(ce),ce}if(Boolean(ie?.morphToMany?.[C])){let de=C,ye=`${ge(ce)}_${de}`,be=w.primaryKeys[A]??"id",fe=w.primaryKeys[ce]??"id",me=`${de}_type`,Te=`${de}_id`,Ie=`${ge(ce)}_id`,Fe=_e(w.tableToModel[A]||A);return X(`LEFT JOIN ${ye} ON ${ye}.${Te} = ${A}.${be} AND ${ye}.${me} = ${Fe} LEFT JOIN ${ce} ON ${ce}.${fe} = ${ye}.${Ie}`),ae.add(ye),ae.add(ce),ce}if(Boolean(ie?.morphedByMany?.[C])){let de=ie.morphedByMany?.[C]||C,ye=w.modelToTable[de]||de,be=ge(A),fe=`${ge(ye)}_${be}`,me=w.primaryKeys[A]??"id",Te=w.primaryKeys[ye]??"id",Ie=`${be}_type`,Fe=`${be}_id`,nt=`${ge(ye)}_id`,Wt=_e(w.tableToModel[ye]||ye);return X(`LEFT JOIN ${fe} ON ${fe}.${nt} = ${A}.${me} LEFT JOIN ${ye} ON ${ye}.${Te} = ${fe}.${Fe} AND ${fe}.${Ie} = ${Wt}`),ae.add(fe),ae.add(ye),ye}if(Boolean(ie?.belongsTo?.[C])){let de=`${ge(ce)}_id`,ye=w.primaryKeys[ce]??"id";return X(`LEFT JOIN ${ce} ON ${A}.${de} = ${ce}.${ye}${Ne(ce)}`),ae.add(ce),ce}let Pt=Boolean(ie?.morphOne?.[C]),qt=Boolean(ie?.morphMany?.[C]);if(Pt||qt){let de=`${C}_type`,ye=`${C}_id`,be=w.primaryKeys[A]??"id",fe=_e(w.tableToModel[A]||A);return X(`LEFT JOIN ${ce} ON ${ce}.${ye} = ${A}.${be} AND ${ce}.${de} = ${fe}`),ae.add(ce),ce}let Qt=`${ge(A)}_id`,vt=w.primaryKeys[A]??"id",Mt=`${Be(ce)}${Ne(ce)}`;return X(`LEFT JOIN ${ce} ON ${ce}.${Qt} = ${A}.${vt}${Mt}`),ae.add(ce),ce};for(let A of o){let C=A.name.trim();if(A.callback)L.set(C,A.callback);let Z=C.split("."),le=h,$e=0;for(let ie of Z){if(!ie||ie.trim().length===0)continue;let Be=ie.trim(),Ne=L.get(Be);le=q(le,Be,$e,Ne)||le,$e++}k.add(C)}if(ze.size>0){let A=[];for(let[C,Z]of ze.entries()){let le=He(C);if(!le)continue;let $e=Z.map((ie)=>`${le.pivotTable}.${ie} AS pivot_${ie}`);A.push(...$e)}if(A.length>0){let C=A.join(", ");lt(C)}}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,L]=B,I=L[a],q=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[q]||q,C;if(k==="hasMany"||k==="hasOne"){let Z=w.primaryKeys[u]??"id";C=gt(u,A,Z,o)}else if(k==="belongsTo"){let Z=w.primaryKeys[A]??"id";C=ft(u,A,Z,o)}else if(k==="belongsToMany"){let Z=w.primaryKeys[u]??"id",le=w.primaryKeys[A]??"id";C=bt(u,A,Z,le,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereHas`);return J("WHERE",`EXISTS (${C})`),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,L]=B,I=L[a],q=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[q]||q,C;if(k==="hasMany"||k==="hasOne"){let Z=w.primaryKeys[u]??"id";C=gt(u,A,Z,o)}else if(k==="belongsTo"){let Z=w.primaryKeys[A]??"id";C=ft(u,A,Z,o)}else if(k==="belongsToMany"){let Z=w.primaryKeys[u]??"id",le=w.primaryKeys[A]??"id";C=bt(u,A,Z,le,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereDoesntHave`);return J("WHERE",`NOT EXISTS (${C})`),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(([C,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,L=k[a],I=typeof L==="string"?L:L?.model||L?.target||L,q=w.modelToTable[I]||I,A;if(B==="hasMany"||B==="hasOne"){let C=w.primaryKeys[o]??"id";A=gt(o,q,C)}else if(B==="belongsTo"){let C=w.primaryKeys[q]??"id";A=ft(o,q,C)}else if(B==="belongsToMany"){let C=w.primaryKeys[o]??"id",Z=w.primaryKeys[q]??"id";A=bt(o,q,C,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for has`);return J("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(([C,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,L=k[a],I=typeof L==="string"?L:L?.model||L?.target||L,q=w.modelToTable[I]||I,A;if(B==="hasMany"||B==="hasOne"){let C=w.primaryKeys[o]??"id";A=gt(o,q,C)}else if(B==="belongsTo"){let C=w.primaryKeys[q]??"id";A=ft(o,q,C)}else if(B==="belongsToMany"){let C=w.primaryKeys[o]??"id",Z=w.primaryKeys[q]??"id";A=bt(o,q,C,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for doesntHave`);return J("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(([$e,ie])=>ie&&typeof ie==="object"&&(u in ie));if(!B)continue;let[k,L]=B,I=L[u],q=typeof I==="string"?I:I?.model||I?.target||I,A=w.modelToTable[q]||q,C=w.primaryKeys[o]??"id",Z;if(k==="hasMany"||k==="hasOne")Z=Lt(o,A,C);else if(k==="belongsToMany")Z=Ct(o,A,C,u);else continue;let le=`${u}_count`;lt(`${Z} AS ${le}`)}return this},withSum(a,o){return mt("SUM",a,o),this},withAvg(a,o){return mt("AVG",a,o),this},withMax(a,o){return mt("MAX",a,o),this},withMin(a,o){return mt("MIN",a,o),this},applyPivotColumns(){return Bt(),this},withPivot(a,...o){if(!w)return this;let u=String(g),h=He(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(ze.set(a,B),h.hasConfig)Qe.add(a);return Bt(),this},wherePivot(a,o,u,h){if(!w)return this;let B=He(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)"),it(B);let k=h===void 0?"=":String(u),L=h===void 0?u:h,I=S.length+1,q=`${B.pivotTable}.${o} ${k} ${t(I)}`;if(S.push(L),E("AND",q),B.hasConfig)Qe.add(a);return this},wherePivotIn(a,o,u){if(!w||!Array.isArray(u))return this;let h=He(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)"),it(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=He(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)"),it(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=He(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)"),it(u),E("AND",`${u.pivotTable}.${o} IS NULL`),u.hasConfig)Qe.add(a);return this},wherePivotNotNull(a,o){if(!w)return this;let u=He(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)"),it(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)"),De(o,"where(operator)");let h=String(o).toLowerCase();if(h==="in"||h==="not in"){let L=Array.isArray(u)?u:[u],I=s(L.length,S.length+1),q=l(c(String(a)),L,h==="not in",I);return S.push(...L),E("AND",q),this}let B=Ve(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,L=String(h);j(L,"where(column)");let I=De(B,"where(operator)");if(I==="in"||I==="not in"){let q=Array.isArray(k)?k:[k],A=s(q.length,S.length+1),C=l(c(L),q,I==="not in",A);S.push(...q),E("AND",C)}else{let q=Ve(c(L),I,k,"where");if(q)return E("AND",q),this;let A=S.length+1;S.push(k),E("AND",`${c(L)} ${I} ${t(A)}`)}return this}if(ct(a))dt("where(expr)");if(Xe(a)){let h=Ze(a,S.length+1);return S.push(...h.parameters),E("AND",h.text),this}if(a&&typeof a==="object"&&!Je(a)){let h=a,B=Object.keys(h),k=[];for(let L of B){j(L,"where(column)");let I=h[L];if(Array.isArray(I)){let q=s(I.length,S.length+1);k.push(l(c(L),I,!1,q)),S.push(...I)}else{let q=S.length+1;k.push(`${c(L)} = ${t(q)}`),S.push(I)}}if(k.length>0)E("AND",k.length>1?`(${k.join(" AND ")})`:k[0]);return this}if(Je(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(P),params:[...S]}},__sqlState(){return{sql:tt(M()),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,L)=>`EXISTS (SELECT 1 FROM json_each(${a}) WHERE json_each.value = ${t(h+L)})`);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(De(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 J("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")J("WHERE",`${String(a)} ILIKE ${u}`);else J("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 J("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")J("OR",`${String(a)} ILIKE ${u}`);else J("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 J("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")J("WHERE",`${String(a)} NOT ILIKE ${u}`);else J("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 J("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")J("OR",`${String(a)} NOT ILIKE ${u}`);else J("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,L)=>`${k} ${o} ${t(h+L)}`);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,L)=>`${k} ${o} ${t(h+L)}`);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,L)=>`${k} ${o} ${t(h+L)}`);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",et(a,"whereRaw(fragment)",o)),this},orWhereRaw(a,...o){return E("OR",et(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 G("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 G("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 G("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 G("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=c(String(a));return d=he.ORDER_BY.test(d)?`${d}, ${h} ${u}`:`${d} ORDER BY ${h} ${u}`,D=null,this},orderByDesc(a){return d=he.ORDER_BY.test(d)?`${d}, ${a} DESC`:`${d} ORDER BY ${a} 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=a??e.timestamps.defaultOrderColumn;return d=he.ORDER_BY.test(d)?`${d}, ${o} DESC`:`${d} ORDER BY ${o} DESC`,D=null,this},oldest(a){let o=a??e.timestamps.defaultOrderColumn;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)"),Ce(o,"join(onLeft)"),Ce(h,"join(onRight)"),De(u,"join(operator)"),X(`JOIN ${a} ON ${o} ${u} ${h}`),ae.add(a),this},joinSub(a,o,u,h,B){return j(o,"joinSub(alias)"),Ce(u,"joinSub(onLeft)"),Ce(B,"joinSub(onRight)"),De(h,"joinSub(operator)"),X(`JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),ae.add(o),this},innerJoin(a,o,u,h){return j(a,"innerJoin(table)"),Ce(o,"innerJoin(onLeft)"),Ce(h,"innerJoin(onRight)"),De(u,"innerJoin(operator)"),X(`INNER JOIN ${a} ON ${o} ${u} ${h}`),ae.add(a),this},leftJoin(a,o,u,h){return j(a,"leftJoin(table)"),Ce(o,"leftJoin(onLeft)"),Ce(h,"leftJoin(onRight)"),De(u,"leftJoin(operator)"),X(`LEFT JOIN ${a} ON ${o} ${u} ${h}`),ae.add(a),this},leftJoinSub(a,o,u,h,B){return j(o,"leftJoinSub(alias)"),Ce(u,"leftJoinSub(onLeft)"),Ce(B,"leftJoinSub(onRight)"),De(h,"leftJoinSub(operator)"),X(`LEFT JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),ae.add(o),this},rightJoin(a,o,u,h){return j(a,"rightJoin(table)"),Ce(o,"rightJoin(onLeft)"),Ce(h,"rightJoin(onRight)"),De(u,"rightJoin(operator)"),X(`RIGHT JOIN ${a} ON ${o} ${u} ${h}`),ae.add(a),this},crossJoin(a){return j(a,"crossJoin(table)"),X(`CROSS JOIN ${a}`),ae.add(a),this},crossJoinSub(a,o){return j(o,"crossJoinSub(alias)"),X(`CROSS JOIN (${String(a.toSQL())}) AS ${o}`),ae.add(o),this},selectAllRelations(){if(!H)return this;let a=String(g),o=Object.keys(H[a]?.columns??{}),u=[];if(o.length>0)u.push(y`${y(a)}.*`);for(let h of ae){let B=Object.keys(H[h]?.columns??{});for(let k of B){let L=e.aliasing.relationColumnAliasFormat==="camelCase"?`${h}_${k}`.replace(/_([a-z])/g,(I,q)=>q.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${h}.${k}`:`${h}_${k}`;u.push(y`${y(`${h}.${k}`)} AS ${y(L)}`)}}if(u.length>0){let h=o.length>0?`${a}.*`:"",B=[];for(let I of ae){let q=Object.keys(H[I]?.columns??{});for(let A of q){let C=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 ${C}`)}}let k=[h,...B].filter(Boolean).join(", "),L=d.indexOf(" FROM ");if(L!==-1)d=`SELECT ${k}${d.substring(L)}`;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)=>c(String(o))).join(", ")}`:`${d} GROUP BY ${a.map((o)=>c(String(o))).join(", ")}`,D=null;return this},groupByRaw(a,...o){let u=et(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 L=0;L<h;L++){let I=u[L];k[L]=`${I} = ${t(B+L+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=et(a,"havingRaw(fragment)",o);return d+=` ${z?"AND":"HAVING"} ${u}`,z=!0,D=null,this},orderByRaw(a,...o){let u=et(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=tt(M());return{sql:a,toString:()=>a,execute:()=>Q().execute(),values:()=>Q().values(),raw:()=>Q().raw()}},async value(a){let o=F(""," LIMIT 1"),u=await se(o,"select",{signal:re,timeoutMs:ee}),[h]=u;return h?.[a]},async pluck(a,o){let u=await se(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=F("SELECT EXISTS (",") as e"),o=await se(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=tt(M()),le=p([...S]),$e=await u.tx.unsafe(`SELECT COUNT(*) as c FROM (${Z}) as sub`,le),ie=Number($e?.[0]?.c??0),Be=Math.max(1,Math.ceil(ie/a)),Ne=Math.max(1,Math.min(o,Be)),Ae=(Ne-1)*a;return{data:await u.tx.unsafe(`${Z} LIMIT ${a} OFFSET ${Ae}`,le),meta:{perPage:a,page:Ne,total:ie,lastPage:Be}}}let h=F("SELECT COUNT(*) as c FROM (",") as sub"),B=await se(h,"select",{signal:re,timeoutMs:ee}),[k]=B,L=Number(k?.c??0),I=Math.max(1,Math.ceil(L/a)),q=Math.max(1,Math.min(o,I)),A=(q-1)*a;return{data:await se(F("",` LIMIT ${t(S.length+1)} OFFSET ${t(S.length+2)}`,[a,A]),"select",{signal:re,timeoutMs:ee}),meta:{perPage:a,page:q,total:L,lastPage:I}}},async simplePaginate(a,o=1){let u=Math.max(1,o),h=(u-1)*a,B=await se(F("",` 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 Ee of B)j(Ee,"cursorPaginate(column)");let k=h==="asc"?">":"<",L=h==="asc"?"ASC":"DESC",I=[...S],q="";if(o!==void 0&&o!==null)if(Array.isArray(u)){let Ee=o.map((ce)=>(I.push(ce),t(I.length)));q=`(${B.join(", ")}) ${k} (${Ee.join(", ")})`}else I.push(o),q=`${B[0]} ${k} ${t(I.length)}`;let A=tt(q?M({conn:"AND",sql:q}):M()),C=B.map((Ee)=>`${Ee} ${L}`).join(", ");if(_t(A))throw TypeError("[query-builder] cursorPaginate() cannot be combined with orderBy() \u2014 it orders by "+`${C} 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 ${C} LIMIT ${a+1}`,I):O(`${A} ORDER BY ${C} LIMIT ${a+1}`),le=await se(Z,"select",{signal:re,timeoutMs:ee}),$e=le.length>a,ie=le.slice(0,a),Be=ie[ie.length-1],Ne=$e&&Be?Array.isArray(u)?u.map((Ee)=>Be[Ee]):Be[u]:null,Ae=ie.length?Array.isArray(u)?u.map((Ee)=>ie[0]?.[Ee]):ie[0]?.[u]:null;return{data:ie,meta:{perPage:a,nextCursor:Ne??null,prevCursor:Ae}}},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,je=!1,this},onlyTrashed(){we=!0,je=!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 ht=a,Oe=!0,this},async explain(){let a=F("EXPLAIN ");return await se(a,"select",{signal:re,timeoutMs:ee})},simple(){return Q().simple()},toText(){return M()},async get(){let a=pe(),o=a&&(a.onQueryStart||a.onQueryEnd||a.onQueryError||a.startSpan||yt(a));if(!e.softDeletes?.enabled&&!Oe&&!ee&&!re&&!o){let I=R._prepareStatement;if(I){let q=I(M());return ot(S.length>0?q.all(...S):q.all())}}let u=M();if(D=S.length>0?O(u,S):O(u),!e.softDeletes?.enabled&&!Oe&&!ee&&!re&&!o){let I=Q()._stmt,q=Q()._params;if(I)return ot(q&&q.length>0?I.all(...q):I.all());return ot(await Q().execute())}if(!e.softDeletes?.enabled&&!Oe&&!ee&&!re)return ot(await se(Q(),"select"));let h=Q();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!we){let I=e.softDeletes.column,q=String(g);if((H?Boolean(H[q]?.columns?.[I]):!0)&&!he.DELETED_AT.test(M()))J("WHERE",`${String(I)} IS ${je?"NOT ":""}NULL`),h=Q()}let B=Oe&&!b?.inTransaction,k=B?Yt(R,M(),S):"";if(B){let I=St.get(k);if(I)return I}let L=await se(h,"select",{signal:re,timeoutMs:ee});if(B)St.set(k,L,ht);return ot(L)},async executeTakeFirst(){let a=await se(Q(),"select",{signal:re,timeoutMs:ee});return at(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||yt(a));if(!e.softDeletes?.enabled&&!Oe&&!ee&&!re&&!o){let B=R._prepareStatement;if(B){let k=M(),L=k.includes(" LIMIT ")?k:`${k} LIMIT 1`,I=B(L),q=S.length>0?I.all(...S):I.all();return at(q[0])}}let u=await se(F(""," LIMIT 1"),"select",{signal:re,timeoutMs:ee}),[h]=u;return at(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 se(F("",` WHERE ${Re(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 se(F("",` WHERE ${l(Re(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=M(),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||yt(B));if(!e.softDeletes?.enabled&&!Oe&&!ee&&!re&&!k){let A=R._prepareStatement;if(A){let C=A(h),Z=S.length>0?C.all(...S):C.all();return Number(Z[0]?.c??0)}}let L=S.length>0?O(h,S):O(h),I=await se(L,"select",{signal:re,timeoutMs:ee}),[q]=I;return Number(q?.c??0)},async avg(a){let o=M(),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||yt(B));if(!e.softDeletes?.enabled&&!Oe&&!ee&&!re&&!k){let A=R._prepareStatement;if(A){let C=A(h),Z=S.length>0?C.all(...S):C.all();return Number(Z[0]?.a??0)}}let L=S.length>0?O(h,S):O(h),I=await se(L,"select",{signal:re,timeoutMs:ee}),[q]=I;return Number(q?.a??0)},async sum(a){let o=M(),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 se(B,"select",{signal:re,timeoutMs:ee}),[L]=k;return Number(L?.s??0)},async max(a){let o=M(),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 se(B,"select",{signal:re,timeoutMs:ee}),[L]=k;return L?.m},async min(a){let o=M(),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 se(B,"select",{signal:re,timeoutMs:ee}),[L]=k;return L?.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 se(Q(),"select",{signal:re,timeoutMs:ee})},values(){return Q().values()},toParams(){return[...S]},__rawState(){return{sql:tt(M()),params:[...S]}},__hasPredicate(){return P.length>0||U},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"),L=`${String(g)}|${o}`,I=Ge.get(L);if(I===void 0){let A=o.replace(/^(?:or|and)?where/i,"");if(!A)Ge.set(L,""),I="";else{let C=A.charAt(0).toLowerCase()+A.slice(1),Z=A.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),le=H?Object.keys(H[String(g)]?.columns??{}):[];I=[Z,C,C.toLowerCase()].find(($e)=>le.includes($e))??Z,Ge.set(L,I)}}if(I==="")return()=>u;let q=I;return(A)=>{if(Array.isArray(A)){let C=s(A.length,S.length+1);J(B?"OR":k?"AND":"WHERE",`${q} IN (${C})`),S.push(...A)}else{let C=t(S.length+1);J(B?"OR":k?"AND":"WHERE",`${q} = ${C}`),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 Ke(g,f)},selectFrom(g){return Ke(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(),P=d?.sql??(typeof N==="string"?N:N?.sql??String(N)),S=d?.params??(Array.isArray(N?.values)?N.values:[]),W=`SELECT * FROM (${P}) AS ${String(f)}`,U=(D,Q,F,E)=>{let J=[...D],Y=(G,V,ne)=>{j(G,"selectFromSub where(column)");let K=De(V,"selectFromSub where(operator)");if(K==="in"||K==="not in"){let ae=Array.isArray(ne)?ne:[ne],ee=s(ae.length,J.length+1);return J.push(...ae),`${G} ${K.toUpperCase()} (${ee})`}let X=t(J.length+1);return J.push(ne),`${G} ${K} ${X}`},M;if(typeof Q==="string"&&F!==void 0)M=Y(Q,F,E);else if(Array.isArray(Q)&&Q.length===3)M=Y(Q[0],Q[1],Q[2]);else if(Q&&typeof Q==="object"){let G=Object.entries(Q).map(([V,ne])=>Y(V,"=",ne));M=G.length>1?`(${G.join(" AND ")})`:G[0]}else return{clause:null,params:D};return{clause:M,params:J}};function z(D,Q,F,E=""){let J=x(Q),Y=J?`${D} WHERE ${J}${E}`:`${D}${E}`,M=()=>F.length>0?O(Y,F):O(Y),G=(K,X,ae,ee)=>{let re=U(F,X,ae,ee);return re.clause===null?z(D,Q,F,E):z(D,[...Q,{conn:K,sql:re.clause}],re.params,E)},V=(K,X)=>{let ae=[],ee=[...F],re=(Oe)=>(ze,Qe,ht)=>{let ge=U(ee,ze,Qe,ht);if(ge.clause!==null)ae.push({conn:Oe,sql:ge.clause}),ee=ge.params;return we},we={where:re("AND"),andWhere:re("AND"),orWhere:re("OR")};X(we);let je=x(ae);if(!je)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:`(${je})`}],ee,E)},ne={distinct(){return z(D.replace(/^SELECT\s+/i,"SELECT DISTINCT "),Q,F,E)},distinctOn(...K){let X=K.map(String).join(", ");return z(D.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${X}) `),Q,F,E)},selectRaw(K,...X){let ae=et(K,"selectFromSub.selectRaw(fragment)",X),ee=D.indexOf(" FROM "),re=ee!==-1?`${D.slice(0,ee)}, ${ae}${D.slice(ee)}`:`${D}, ${ae}`;return z(re,Q,F,E)},$call(K){return K(this)??this},where(K,X,ae){return G("AND",K,X,ae)},andWhere(K,X,ae){return G("AND",K,X,ae)},orWhere(K,X,ae){return G("OR",K,X,ae)},whereGroup(K){return V("AND",K)},orWhereGroup(K){return V("OR",K)},orderBy(K,X="asc"){j(String(K),"selectFromSub.orderBy(column)");let ae=X==="asc"?"ASC":"DESC",ee=he.ORDER_BY.test(E)?`${E}, ${K} ${ae}`:`${E} ORDER BY ${K} ${ae}`;return z(D,Q,F,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,F,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,F,X)},toSQL(){return xe(M(),Y)},async execute(){return se(M(),"select")},async executeTakeFirst(){let K=await se(M(),"select");return Array.isArray(K)?K[0]:K},async executeTakeFirstOrThrow(){let K=await se(M(),"select"),X=Array.isArray(K)?K[0]:K;if(!X)throw Error("Record not found");return X},async get(){return se(M(),"select")},async first(){let K=await se(M(),"select");return Array.isArray(K)?K[0]:K},async firstOrFail(){let K=await se(M(),"select"),X=Array.isArray(K)?K[0]:K;if(!X)throw Error("No rows found");return X},async count(){let K=F.length>0?O(`SELECT COUNT(*) as c FROM (${Y}) as sub`,F):O(`SELECT COUNT(*) as c FROM (${Y}) as sub`),X=await se(K,"select");return Number(X?.[0]?.c??0)},async exists(){let K=F.length>0?O(`SELECT EXISTS(${Y}) as e`,F):O(`SELECT EXISTS(${Y}) as e`),X=await se(K,"select");return Boolean(X?.[0]?.e)},async doesntExist(){return!await ne.exists()},values(){return M().values()},raw(){return M().raw()},cancel(){try{M().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:()=>M().simple(),toText:()=>Y,toParams:()=>[...F],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(W,[],S)},insertInto(g){let f,y="",d=[],N=[],P=!1,S=()=>U?[]:{changes:0,lastInsertRowid:0},W=()=>{let E=async()=>{return},J=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>W(),andWhere:()=>W(),orWhere:()=>W(),orderBy:()=>W(),limit:()=>W(),offset:()=>W(),toSQL:()=>xe(null,""),execute:async()=>[],get:async()=>[],first:E,executeTakeFirst:E,firstOrFail:J,executeTakeFirstOrThrow:J}},U=e.dialect==="postgres",z=(E)=>{let Y=E.flat(2).map(String).filter(Boolean),M=Y.length>0&&!Y.includes("*")?Y.map((ne)=>D(ne)).join(", "):"*",G=async()=>{let ne=await se(O(y,d),"insert"),K=Number(ne?.lastInsertRowid??0),X=Math.max(1,Number(ne?.affectedRows??1)),ae=N.filter((we)=>we!==void 0&&we!==null),ee=K>0?O(`SELECT ${M} FROM ${D(String(g))} WHERE ${D("id")} >= ? AND ${D("id")} < ? ORDER BY ${D("id")} ASC`,[K,K+X]):ae.length>0?O(`SELECT ${M} FROM ${D(String(g))} WHERE ${D("id")} IN (${ae.map(()=>"?").join(", ")}) ORDER BY ${D("id")} ASC`,ae):null;if(!ee)return[];let re=await ee.execute();return Array.isArray(re)?re:[]},V=async()=>(await G())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>xe(O(y,d),y),execute:G,get:G,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=U?(E)=>`"${String(E).replace(/"/g,'""')}"`:n(e.dialect)?(E)=>`\`${String(E).replace(/`/g,"``")}\``:(E)=>`"${String(E).replace(/"/g,'""')}"`,Q=U?"postgres":n(e.dialect)?"mysql":"sqlite",F=U?(E)=>`$${E+1}`:(E)=>"?";return{values(E){let J=ke(String(g),Array.isArray(E)?E:[E]),Y=J.length;if(N=J.map((ee)=>ee?.id),Y===0)return P=!0,f=null,y="",d.length=0,this;P=!1;let M=J[0],G=Object.keys(M),V=G.length,ne=Y*V;d.length=ne;let K=Y===1&&V>0&&typeof g==="string",X=K?ue?.get(g):void 0,ae=X?.quoteStyle===Q&&X.columns.length===V;if(ae){for(let ee=0;ee<V;ee++)if(X.columns[ee]!==G[ee]){ae=!1;break}}if(ae){y=X.sql;for(let ee=0;ee<V;ee++)d[ee]=M[G[ee]]}else if(Y===1)if(!U){let ee=D(G[0]),re="?";d[0]=M[G[0]];for(let we=1;we<V;we++)ee+=`,${D(G[we])}`,re+=",?",d[we]=M[G[we]];y=`INSERT INTO ${D(g)}(${ee})VALUES(${re})`}else{let ee=G.map((re)=>D(re)).join(",");y=`INSERT INTO ${D(g)}(${ee})VALUES(`;for(let re=0;re<V;re++){if(re>0)y+=",";y+=F(re),d[re]=M[G[re]]}y+=")"}else{let ee=G.map((we)=>D(we)).join(",");y=`INSERT INTO ${D(g)}(${ee})VALUES`;let re=0;for(let we=0;we<Y;we++){let je=J[we];if(we===0)y+="(";else y+="),(";for(let Oe=0;Oe<V;Oe++){if(Oe>0)y+=",";y+=F(re),d[re++]=je[G[Oe]]}}y+=")"}if(K&&!ae&&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:G,quoteStyle:Q,sql:y})}if(!R._prepareStatement)f=O(y,d);return this},returning(...E){if(P)return W();if(n(e.dialect))return z(E);let J=`${y} RETURNING ${E.join(", ")}`,Y=O(J,d),M=async()=>{let G=await se(Y,"insert");return Array.isArray(G)?G[0]:G};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>xe(Y,J),execute:()=>se(Y,"insert"),get:()=>se(Y,"insert"),first:M,executeTakeFirst:M,async firstOrFail(){let G=await M();if(!G)throw Error("Insert with RETURNING returned no rows");return G},async executeTakeFirstOrThrow(){let G=await M();if(!G)throw Error("Insert with RETURNING returned no rows");return G}}},toSQL(){if(P)return xe(null,"");if(!f)f=O(y,d);return xe(f,y)},execute(){if(P)return Promise.resolve(S());let E=pe();if(!(E&&(E.onQueryStart||E.onQueryEnd||E.onQueryError||E.startSpan||E.beforeCreate||E.afterCreate||yt(E)))){let Y=R._prepareStatement;if(Y){let M=Y(y);return d.length>0?M.run(...d):M.run()}}if(!f)f=O(y,d);return se(f,"insert")},async executeTakeFirst(){if(P)return S();if(!f)f=O(y,d);return await se(f,"insert")},async executeTakeFirstOrThrow(){if(P)throw Error("Insert failed");if(!f)f=O(y,d);let E=await se(f,"insert");if(!E)throw Error("Insert failed");return E},returningAll(){return this.returning("*")}}},updateTable(g){let f,y=[],d=(W)=>{let U=String(W);if(n(e.dialect))return`\`${U.replace(/`/g,"``")}\``;return`"${U.replace(/"/g,'""')}"`},N=`UPDATE ${d(String(g))}`,P=!1,S=(W)=>{N=`${N} ${P?"AND":"WHERE"} ${W}`,P=!0};return{set(W){let U=ke(String(g),[W])[0],z=Object.keys(U),D=z.length,Q=Array.from({length:D});for(let F=0;F<D;F++){let E=z[F],J=U[E];if(ct(J))dt(`set(${E})`);if(Je(J))Q[F]=`${d(E)} = ${J.raw}`;else if(Xe(J)){let Y=Ze(J,y.length+1);Q[F]=`${d(E)} = ${Y.text}`,y.push(...Y.parameters)}else Q[F]=`${d(E)} = ${t(y.length+1)}`,y.push(J)}return N=`${N} SET ${Q.join(", ")}`,f=O(N,y),this},where(W,U,z){if(U!==void 0&&(typeof W==="string"||Je(W)||Xe(W))){let D=De(U,"updateTable.where"),Q;if(typeof W==="string")Q=d(W);else if(Je(W))Q=W.raw;else{let J=Ze(W,y.length+1);Q=J.text,y.push(...J.parameters)}if(D.toLowerCase()==="in"||D.toLowerCase()==="not in"){let J=Array.isArray(z)?z:[z],Y=s(J.length,y.length+1);return S(`${Q} ${D.toUpperCase()} (${Y})`),y.push(...J),f=O(N,y),this}let F=Ve(Q,D,z,"updateTable.where");if(F)return S(F),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(W)){let[D,Q,F]=W,E=De(Q,"updateTable.where");if(E.toLowerCase()==="in"||E.toLowerCase()==="not in"){let M=Array.isArray(F)?F:[F],G=s(M.length,y.length+1);return S(`${d(String(D))} ${E.toUpperCase()} (${G})`),y.push(...M),f=O(N,y),this}let J=Ve(d(String(D)),E,F,"updateTable.where");if(J)return S(J),f=O(N,y),this;let Y=y.length+1;return S(`${d(String(D))} ${E} ${t(Y)}`),y.push(F),f=O(N,y),this}if(ct(W))dt("updateTable.where(expr)");if(Je(W))return S(W.raw),f=O(N,y),this;if(Xe(W)){let D=Ze(W,y.length+1);return S(D.text),y.push(...D.parameters),f=O(N,y),this}if(W&&typeof W==="object"){let D=Object.keys(W);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((F)=>$t(d(F),W[F],y));return S(Q.join(" AND ")),f=O(N,y),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${W===null?"null":typeof W}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(W){return S(`${d(String(W))} IS NULL`),f=O(N,y),this},whereNotNull(W){return S(`${d(String(W))} IS NOT NULL`),f=O(N,y),this},returning(...W){let U=this,z=()=>`${N} RETURNING ${W.join(", ")}`,D=()=>y.length>0?O(z(),y):O(z()),Q=async()=>{let M=/\sWHERE\s/i.test(N),G=M?N.slice(N.search(/\sWHERE\s/i)+1):"",V=y.slice(y.length-(G.match(/\?|\$\d+/g)?.length??0)),ne=d("id"),K=await(V.length>0?O(`SELECT ${ne} FROM ${d(String(g))}${M?` ${G}`:""}`,V):O(`SELECT ${ne} FROM ${d(String(g))}${M?` ${G}`:""}`)).execute().catch(()=>[]),X=(Array.isArray(K)?K:[]).map((re)=>re?.id).filter((re)=>re!==void 0&&re!==null);if(await se(y.length>0?O(N,y):O(N),"update"),X.length===0)return[];let ae=`SELECT ${W.join(", ")} FROM ${d(String(g))} WHERE ${ne} IN (${X.map(()=>"?").join(", ")})`,ee=await O(ae,X).execute();return Array.isArray(ee)?ee:[]},F=()=>n(e.dialect)?Q():se(D(),"update"),E=async()=>{let M=await F();return Array.isArray(M)?M[0]:M},J=(M)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${M}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},Y={where:(...M)=>(U.where(...M),Y),andWhere:(...M)=>(U.where(...M),Y),whereNull:(...M)=>(U.whereNull(...M),Y),whereNotNull:(...M)=>(U.whereNotNull(...M),Y),orWhere:J("orWhere"),orderBy:J("orderBy"),limit:J("limit"),offset:J("offset"),toSQL:()=>xe(D(),z()),execute:F,get:F,first:E,executeTakeFirst:E,async firstOrFail(){let M=await E();if(!M)throw Error("Update with RETURNING returned no rows");return M},async executeTakeFirstOrThrow(){let M=await E();if(!M)throw Error("Update with RETURNING returned no rows");return M}};return Y},toSQL(){if(!f)f=y.length>0?O(N,y):O(N);return xe(f,N)},async execute(){let W=await se(f,"update");return qe(W)},async executeTakeFirst(){return{numUpdatedRows:qe(await se(f,"update"))}},async executeTakeFirstOrThrow(){let W=qe(await se(f,"update"));if(W===0)throw Error("No rows updated");return{numUpdatedRows:W}},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,P=[],S=null,W=!1,U=(D)=>{d+=` ${W?"AND":"WHERE"} ${D}`,W=!0},z=()=>{if(N===null)N=P.length>0?O(d,P):O(d);return N};return{where(D,Q,F){if(S=D,typeof D==="string"&&Q!==void 0){let E=De(Q,"deleteFrom.where");if(E.toLowerCase()==="in"||E.toLowerCase()==="not in"){let M=Array.isArray(F)?F:[F],G=s(M.length,P.length+1);return U(`${f(D)} ${E.toUpperCase()} (${G})`),P.push(...M),N=null,this}let J=Ve(f(D),E,F,"deleteFrom.where");if(J)return U(J),N=null,this;let Y=P.length+1;return U(`${f(D)} ${E} ${t(Y)}`),P.push(F),N=null,this}if(Array.isArray(D)){let[E,J,Y]=D,M=De(J,"deleteFrom.where");if(M.toLowerCase()==="in"||M.toLowerCase()==="not in"){let ne=Array.isArray(Y)?Y:[Y],K=s(ne.length,P.length+1);return U(`${f(String(E))} ${M.toUpperCase()} (${K})`),P.push(...ne),N=null,this}let G=Ve(f(String(E)),M,Y,"deleteFrom.where");if(G)return U(G),N=null,this;let V=P.length+1;return U(`${f(String(E))} ${M} ${t(V)}`),P.push(Y),N=null,this}if(ct(D))dt("deleteFrom.where(expr)");if(Je(D))return U(D.raw),N=null,this;if(Xe(D)){let E=Ze(D,P.length+1);return U(E.text),P.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 J=E.map((Y)=>$t(f(Y),D[Y],P));return U(J.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 U(`${f(String(D))} IS NULL`),N=null,this},whereNotNull(D){return U(`${f(String(D))} IS NOT NULL`),N=null,this},returning(...D){let Q=this,F=()=>`${d} RETURNING ${D.join(", ")}`,E=()=>P.length>0?O(F(),P):O(F()),J=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(P.length>0?O(K,P):O(K)).execute();return await se(P.length>0?O(d,P):O(d),"delete"),Array.isArray(X)?X:[]})():await se(E(),"delete");try{await pe()?.afterDelete?.({table:String(g),where:S,result:V})}catch{}return V},Y=async()=>{let V=await J();return Array.isArray(V)?V[0]:V},M=(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.`)},G={where:(...V)=>(Q.where(...V),G),andWhere:(...V)=>(Q.where(...V),G),whereNull:(...V)=>(Q.whereNull(...V),G),whereNotNull:(...V)=>(Q.whereNotNull(...V),G),orWhere:M("orWhere"),orderBy:M("orderBy"),limit:M("limit"),offset:M("offset"),toSQL:()=>xe(E(),F()),execute:()=>J(),get:()=>J(),first:Y,executeTakeFirst:Y,async firstOrFail(){let V=await Y();if(!V)throw Error("Delete with RETURNING returned no rows");return V},async executeTakeFirstOrThrow(){let V=await Y();if(!V)throw Error("Delete with RETURNING returned no rows");return V}};return G},toSQL(){return xe(z(),d)},async execute(){try{await pe()?.beforeDelete?.({table:String(g),where:S})}catch(Q){throw Q}let D=qe(await se(z(),"delete"));try{await pe()?.afterDelete?.({table:String(g),where:S,result:D})}catch{}return D},async executeTakeFirst(){return{numDeletedRows:qe(await se(z(),"delete"))}},async executeTakeFirstOrThrow(){let D=qe(await se(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 Kt(g,f);return R(g,...f)},simple(g,...f){return R(g,...f).simple()},async advisoryLock(g){if(e.dialect==="postgres"){let f=Se(g),y=O("SELECT pg_advisory_lock($1)",[f]);await se(y,"raw");return}if(n(e.dialect)){let f=`bqb:${String(g)}`,y=O("SELECT GET_LOCK(?, -1) AS ok",[f]);await se(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=Se(g),y=O("SELECT pg_try_advisory_lock($1) as ok",[f]),d=await se(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 se(y,"raw");return Number(d?.[0]?.ok)===1}return!1},async advisoryUnlock(g){if(e.dialect==="postgres"){let f=Se(g),y=O("SELECT pg_advisory_unlock($1) as ok",[f]),d=await se(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 se(y,"raw");return Number(d?.[0]?.ok)===1}return!1},unsafe(g,f){return jt(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:H,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 se(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},N=b?.sql??r,P=b?.inTransaction===!0,S=P&&typeof N?.savepoint==="function"?"savepoint":"begin",W=async(Q)=>{d.logger?.({type:"start",attempt:Q});let F=Date.now();return await N[S](async(E)=>{let J=i({sql:E,meta:w,schema:H,hooks:b?.hooks,inTransaction:!0});if(d?.isolation&&!P){let G=d.isolation,V=G==="read committed"?"READ COMMITTED":G==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await E.unsafe(`SET TRANSACTION ISOLATION LEVEL ${V}`);else if(n(e.dialect))await E.unsafe(`SET TRANSACTION ISOLATION LEVEL ${V}`);else if(G!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${G}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(d?.readOnly)if(e.dialect==="postgres")await E.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await E.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let Y=await g(J),M=Date.now()-F;return d.logger?.({type:"commit",attempt:Q,durationMs:M}),Y})},U=Math.max(0,d?.retries??0),z=0,D;for(;;)try{D=await W(z+1);break}catch(Q){let F=zt(Q)||Xt(Q,d.sqlStates);if(z<U&&F){z++,d?.onRetry?.(z,Q);let E=on(z,d.backoff);if(E>0)await Zt(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:H,hooks:b?.hooks,inTransaction:!0});return await g(d)})},async beginDistributed(g,f){return await(b?.sql??r).beginDistributed(g,async(N)=>{let P=i({sql:N,meta:w,schema:H,hooks:b?.hooks});return await f(P)})},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:P}=pt(y),S=Re(String(g)),W=n(e.dialect)?`INSERT IGNORE INTO ${S} (${d}) VALUES ${N}`:`INSERT INTO ${S} (${d}) VALUES ${N} ON CONFLICT DO NOTHING`;return O(W,P).execute()},async insertGetId(g,f,y="id"){let{colsSql:d,valuesSql:N,params:P}=pt([f]),S=Re(String(g));if(n(e.dialect)){await O(`INSERT INTO ${S} (${d}) VALUES ${N}`,P).execute();let[U]=await O("SELECT LAST_INSERT_ID() as id").execute();return U?.id}if(e.dialect==="sqlite"){let U=await O(`INSERT INTO ${S} (${d}) VALUES ${N}`,P).execute();if(U?.lastInsertRowid!=null)return U.lastInsertRowid;let[z]=await O("SELECT last_insert_rowid() as id").execute();return z?.id}let[W]=await O(`INSERT INTO ${S} (${d}) VALUES ${N} RETURNING ${Re(String(y))} as id`,P).execute();return W?.id},async updateOrInsert(g,f,y){let d=Re(String(g)),N=Object.keys(f),P=1,S=N.map((F)=>`${Re(F)} = ${t(P++)}`).join(" AND "),W=N.map((F)=>f[F]);if((await O(`SELECT 1 FROM ${d} WHERE ${S} LIMIT 1`,W).execute()).length){let F=Object.keys(y),E=1,J=F.map((G)=>`${Re(G)} = ${t(E++)}`).join(", "),Y=N.map((G)=>`${Re(G)} = ${t(E++)}`).join(" AND "),M=[...F.map((G)=>y[G]),...N.map((G)=>f[G])];return await O(`UPDATE ${d} SET ${J} WHERE ${Y}`,M).execute(),!0}let{colsSql:z,valuesSql:D,params:Q}=pt([{...f,...y}]);return await O(`INSERT INTO ${d} (${z}) VALUES ${D}`,Q).execute(),!0},async upsert(g,f,y,d){let N=y.map((J)=>String(J)),P=(d??[]).map((J)=>String(J)),S=f;if(!S.length)return;let{colsSql:W,valuesSql:U,params:z}=pt(S),D=Re(String(g)),Q=`INSERT INTO ${D} (${W}) VALUES ${U}`;if(n(e.dialect)){if(P.length===0)return O(`INSERT IGNORE INTO ${D} (${W}) VALUES ${U}`,z).execute();let J=P.map((Y)=>`${Re(Y)} = VALUES(${Re(Y)})`).join(", ");return O(`${Q} ON DUPLICATE KEY UPDATE ${J}`,z).execute()}let F=N.map(Re).join(", ");if(P.length===0)return O(`${Q} ON CONFLICT (${F}) DO NOTHING`,z).execute();let E=P.map((J)=>`${Re(J)} = EXCLUDED.${Re(J)}`).join(", ");return O(`${Q} ON CONFLICT (${F}) 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 P=await this.selectFrom(g).find(d);if(!P)throw Error("save() failed to retrieve updated row");return P}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 P=await this.selectFrom(g).find(N.id);if(!P)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:P})}catch{}return P}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,P=f.length,S=Array.from({length:P*N}),W=n(e.dialect)?(D)=>`\`${String(D).replace(/`/g,"``")}\``:(D)=>`"${String(D).replace(/"/g,'""')}"`,U=`INSERT INTO ${W(String(g))}(${d.map(W).join(",")})VALUES`,z=0;for(let D=0;D<P;D++){if(D>0)U+=",";U+="(";let Q=f[D];for(let F=0;F<N;F++){if(F>0)U+=",";U+=t(z+1),S[z++]=Q[d[F]]}U+=")"}return O(U,S).execute()},async insertMany(g,f){if(!f?.length)return;let y=f[0],d=Object.keys(y),N=d.length,P=f.length,S=P*N,W=Array(S),U=e.dialect==="postgres",z;if(!U){let F=Array(N);for(let E=0;E<N;E++)F[E]="?";z=`(${F.join(",")})`}else z="";let D=Array(P+2);D[0]=`INSERT INTO ${g}(${d.join(",")})VALUES`;let Q=0;if(!U){for(let F=0;F<P;F++){let E=f[F];D[F+1]=z;for(let J=0;J<N;J++)W[Q++]=E[d[J]]}return O(D[0]+D.slice(1,P+1).join(","),W).execute()}for(let F=0;F<P;F++){let E=f[F],J=Array(N);for(let Y=0;Y<N;Y++)J[Y]=`$${Q+1}`,W[Q++]=E[d[Y]];D[F+1]=`(${J.join(",")})`}return O(D[0]+D.slice(1,P+1).join(","),W).execute()},async updateMany(g,f,y){let d=Object.keys(y),N=d.length;if(N===0)return 0;let P=[],S=Array.from({length:N});for(let U=0;U<N;U++)S[U]=`${d[U]}=${t(U+1)}`,P.push(y[d[U]]);let W=`UPDATE ${g} SET ${S.join(",")}`;if(Array.isArray(f)){let U=De(String(f[1]),"updateMany");W+=` WHERE ${f[0]} ${U} ${t(P.length+1)}`,P.push(f[2])}else if(Je(f))W+=` WHERE ${f.raw}`;else if(Xe(f)){let U=Ze(f,P.length+1);W+=` WHERE ${U.text}`,P.push(...U.parameters)}else if(f&&typeof f==="object"&&Object.keys(f).length>0){let U=Object.keys(f).map((z)=>$t(z,f[z],P));W+=` WHERE ${U.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(W,P).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 P=Array(d);for(let S=0;S<d;S++)P[S]=`$${S+1}`;return O(`DELETE FROM ${g} WHERE ${y} IN (${P.join(",")})`,f).execute()}let N=Array(d);for(let P=0;P<d;P++)N[P]="?";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",P=d[N],S=P!=null?await this.selectFrom(g).find(P):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 P=N[f];if(typeof P==="string")return w.modelToTable[P]||P;else if(P&&typeof P==="object"){if("model"in P)return w.modelToTable[P.model]||P.model;if("target"in P)return w.modelToTable[P.target]||P.target}}return null}}}function Me(){St.clear()}function Pe(b){St.setMaxSize(b)}
3
+ export{v,Kn,nn,c,At,Nt,i,Me,Pe};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{n,e,I,t,L,je,ot,r,w,m}from"./chunk-jypmc6m3.js";import{i,Me,Pe}from"./chunk-bhm321nb.js";import{O,Ie,E,B}from"./chunk-ztdtt4hj.js";import{u}from"./chunk-2v1zv4hb.js";var Fr=import.meta.require;async function ne(s={}){let a=s.iterations||1000,l=s.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${a}`),console.log(`-- Operations: ${l.join(", ")}`),console.log();let c=i();console.log("-- Setting up test table...");try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await r.unsafe(`
2
+ import{n,e,I,t,L,je,ot,r,w,m}from"./chunk-jypmc6m3.js";import{i,Me,Pe}from"./chunk-35s45ket.js";import{O,Ie,E,B}from"./chunk-ztdtt4hj.js";import{u}from"./chunk-2v1zv4hb.js";var Fr=import.meta.require;async function ne(s={}){let a=s.iterations||1000,l=s.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${a}`),console.log(`-- Operations: ${l.join(", ")}`),console.log();let c=i();console.log("-- Setting up test table...");try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await r.unsafe(`
3
3
  CREATE TABLE bench_users (
4
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
5
5
  name TEXT NOT NULL,
@@ -349,7 +349,7 @@ export default class ${f} extends Seeder {
349
349
  return 100
350
350
  }
351
351
  }
352
- `;Hi(p,x),console.log(`-- \u2713 Created seeder: ${p}`)}async function xe(s={}){let a=mn(Ht.cwd()),l=s.modelsDir||Lt(a,"app/Models"),c=s.seedersDir||Lt(a,"database/seeders"),f=s.verbose??!0;try{let{resetDatabase:y,generateMigration:p,executeMigration:x}=await import("./chunk-12t4k0mz.js");if(f)console.log("-- Refreshing database...");if(await y(l),f)console.log("-- Running migrations...");if(await p(l,{full:!0}),await x(),f)console.log("-- Running seeders...");if(await P({seedersDir:c,verbose:f}),f)console.log("-- \u2713 Database refreshed successfully")}catch(y){throw console.error("-- \u2717 Database refresh failed:",y),y}}function ve(s,a,l={}){let c=d({modelsDir:s}),f=Ae(c);if(e.debug)e.debug.captureText=!0;let y=i({schema:f}),p=y.selectFrom(a).limit(Number(l.limit||10)).toText?.()??"";return console.log(p||"[query]"),{sql:p,qb:y,schema:f}}async function ke(s,a={}){let l=i(),c=a.params?JSON.parse(a.params):void 0,f=await l.unsafe(s,c);return console.log(JSON.stringify(f)),f}import{existsSync as Xi}from"fs";import{dirname as Rr,join as Sr}from"path";import Mr from"process";function Ji(s){let a=s;while(a!==Rr(a)){if(Xi(Sr(a,"package.json")))return a;a=Rr(a)}return Mr.cwd()}async function z(s){if(!s)s=Sr(Ji(Mr.cwd()),"app/Models");let a=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${a}`),console.log();let l=[];try{let c=await d({modelsDir:s}),f=Y(c,{dialect:a}),y=i(),p=[];if(a==="sqlite")p=(await y.unsafe(`
352
+ `;Hi(p,x),console.log(`-- \u2713 Created seeder: ${p}`)}async function xe(s={}){let a=mn(Ht.cwd()),l=s.modelsDir||Lt(a,"app/Models"),c=s.seedersDir||Lt(a,"database/seeders"),f=s.verbose??!0;try{let{resetDatabase:y,generateMigration:p,executeMigration:x}=await import("./chunk-ewmd9fn5.js");if(f)console.log("-- Refreshing database...");if(await y(l),f)console.log("-- Running migrations...");if(await p(l,{full:!0}),await x(),f)console.log("-- Running seeders...");if(await P({seedersDir:c,verbose:f}),f)console.log("-- \u2713 Database refreshed successfully")}catch(y){throw console.error("-- \u2717 Database refresh failed:",y),y}}function ve(s,a,l={}){let c=d({modelsDir:s}),f=Ae(c);if(e.debug)e.debug.captureText=!0;let y=i({schema:f}),p=y.selectFrom(a).limit(Number(l.limit||10)).toText?.()??"";return console.log(p||"[query]"),{sql:p,qb:y,schema:f}}async function ke(s,a={}){let l=i(),c=a.params?JSON.parse(a.params):void 0,f=await l.unsafe(s,c);return console.log(JSON.stringify(f)),f}import{existsSync as Xi}from"fs";import{dirname as Rr,join as Sr}from"path";import Mr from"process";function Ji(s){let a=s;while(a!==Rr(a)){if(Xi(Sr(a,"package.json")))return a;a=Rr(a)}return Mr.cwd()}async function z(s){if(!s)s=Sr(Ji(Mr.cwd()),"app/Models");let a=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${a}`),console.log();let l=[];try{let c=await d({modelsDir:s}),f=Y(c,{dialect:a}),y=i(),p=[];if(a==="sqlite")p=(await y.unsafe(`
353
353
  SELECT name FROM sqlite_master
354
354
  WHERE type = 'table'
355
355
  AND name NOT LIKE 'sqlite_%'
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{pt,S,N,Je,M}from"./chunk-ev6akmaa.js";import"./chunk-bhm321nb.js";import"./chunk-2v1zv4hb.js";import"./chunk-ztdtt4hj.js";import"./chunk-jypmc6m3.js";import"./chunk-wvae8521.js";export{N as executeMigration,Je as executeMigrationWithReport,S as generateMigration,M as resetDatabase,pt as saveMigrationSnapshot};
2
+ import{pt,S,N,Je,M}from"./chunk-6w95jzzq.js";import"./chunk-35s45ket.js";import"./chunk-2v1zv4hb.js";import"./chunk-ztdtt4hj.js";import"./chunk-jypmc6m3.js";import"./chunk-wvae8521.js";export{N as executeMigration,Je as executeMigrationWithReport,S as generateMigration,M as resetDatabase,pt as saveMigrationSnapshot};
package/dist/client.d.ts CHANGED
@@ -257,7 +257,11 @@ export declare interface BaseSelectQueryBuilder<DB extends AnyDatabaseSchema, TT
257
257
  <K extends keyof DB[TTable]['columns'] & string>(columns: K[]): SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>, TJoined>
258
258
  (columns: string | SqlFragment | (string | SqlFragment)[]): SelectQueryBuilder<DB, TTable, TSelected, TJoined>
259
259
  }
260
- selectAll?: () => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TJoined>
260
+ selectAll?: {
261
+ (): SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TJoined>
262
+ <T extends TJoined & keyof DB & string>(table: T | T[]): SelectQueryBuilder<DB, TTable, DB[T]['columns'], TJoined>
263
+ (table: string | string[]): SelectQueryBuilder<DB, TTable, TSelected, TJoined>
264
+ }
261
265
  orderByRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
262
266
  $call: (callback: (query: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
263
267
  union: (other: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
package/dist/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{ne,re,ie,se,F,ae,oe,le,ce,j,ue,q,W,de,fe,U,me,he,dt,He,ft,A,ge,o,pe,ye,be,Te,h,mt,ht,gt,Qe,Ge,pt,S,N,Je,M,we,Se,V,De,H,Ee,Q,G,P,J,$e,xe,ve,ke,z,Ce,Re,D,g,$n,xn,vn,yt,bt,Tt,wt,St,kn,Dt,Jt,Cn,Rn,An,Nn,Et,Mn,Pn,On,Ae,d,$t,xt,vt,kt,Ct,zt,Y,X,Ne,Yt,Bn,_n,Rt,ze,Xt,b,Ye,Zt,Xe,en,In,tn,Ln}from"../chunk-ev6akmaa.js";import{v,Kn,nn,c,At,Nt,i,Me,Pe}from"../chunk-bhm321nb.js";import{Mt,u,Z,k,Pt,Ze,C,Oe,et,tt,Be,Ot,f,ee,_e,nt,Bt,rt,rn,sn}from"../chunk-2v1zv4hb.js";import{_t,It,Lt,Kt,Fn,jn,qn,Ft,jt,Wn,Un,an,on,ln,cn,un,qt,dn,fn}from"../chunk-ztdtt4hj.js";import{n,it,e,I,st,t,s,L,Le,mn,at,hn,a,Ke,Wt,Ut,gn,Fe,Vt,Vn,Ht,Qt,R,K,pn,qe,w,yn,bn,m,lt}from"../chunk-jypmc6m3.js";import{Tn,wn,Sn,y,ct,ut,Dn,Ve,En}from"../chunk-wvae8521.js";export{Ft as BelongsToManyRelationBuilder,ct as BrowserQueryBuilder,y as BrowserQueryError,Ht as DEFAULT_SQLITE_PRAGMAS,Z as DynamoDBClient,Mt as DynamoDBDriverImpl,g as DynamoDBItemBuilder,_e as DynamoDBMigrationDriver,ee as DynamoDBMigrationTracker,D as DynamoDBQueryBuilder,Et as DynamoDBToolingAdapter,rt as EntityQueryBuilder,vt as GENERATED_MARKER,a as LibSQLError,f as MIGRATIONS_TABLE,Ze as Model,o as MySQLDriver,pe as PostgresDriver,Te as SQLiteDriver,tn as Seeder,ye as SingleStoreDriver,yt as SingleTableManager,kn as SingleTablePatterns,Tt as SingleTableQueryBuilder,bt as SingleTableRepository,b as UTC_CLOCK_DEFAULT,be as VitessDriver,R as applySqliteBootstrapPragmas,Qe as auditSchemaDrift,En as browserAuth,ut as browserQuery,Ae as buildDatabaseSchema,Be as buildDynamoDBMigrationPlan,Y as buildMigrationPlan,$t as buildSchemaMeta,re as cacheClear,se as cacheConfig,ie as cacheStats,ze as canonicalStorageType,Ye as canonicalizeDefault,Ce as checkSchema,It as clearLocalModels,un as clearModelRegistry,Me as clearQueryCache,e as config,Tn as configureBrowser,Pt as configureModels,Fn as configureOrm,tt as convertSchemaToDefinition,Dn as createBrowserDb,Ve as createBrowserModel,k as createClient,sn as createDynamo,vn as createDynamoDBClient,u as createDynamoDBDriver,xn as createDynamoDBItemBuilder,$n as createDynamoDBQueryBuilder,Mn as createDynamoDBToolingAdapter,_t as createFakerCompatLayer,Vt as createLibSQLSQL,nt as createMigrationDriver,jt as createModel,i as createQueryBuilder,St as createRepository,wt as createSingleTableManager,Wn as createTableFromModel,j as dbInfo,q as dbOptimize,ue as dbStats,W as dbWipe,Ut as decodeLibSQLValue,it as defaultConfig,mn as defineConfig,dn as defineModel,In as defineModels,Ln as defineSeeder,ce as dumpDatabase,rn as dynamo,Wt as encodeLibSQLValue,Nt as escapeStringLiteral,N as executeMigration,Je as executeMigrationWithReport,de as explain,Q as explainAllQueries,oe as exportData,Lt as extractChanges,Kt as extractInsertId,et as extractModelSchema,Oe as extractTableDefinition,mt as familyOfDeclared,ht as familyOfSqlType,fe as file,Ge as formatSchemaDrift,xe as freshDatabase,Pn as generateAccessPatterns,G as generateDiagram,Xe as generateDiffOperations,en as generateDiffSql,_n as generateDiffSqlString,S as generateMigration,ft as generateModelSource,Yt as generateSql,Ne as generateSqlFiles,Bn as generateSqlString,on as getAllModels,wn as getBrowserConfig,L as getConfig,qn as getDatabase,h as getDialectDriver,an as getModel,ln as getModelRegistry,t as getPlaceholder,s as getPlaceholders,cn as hasModel,Rt as hashMigrationPlan,C as hashTableDefinition,le as importData,bn as inflectSingular,U as inspectTable,he as introspect,A as introspectDatabase,Sn as isBrowser,Ot as isDefinitionEqual,kt as isGeneratedMigrationSql,Vn as isLibSQLConnection,at as isLibSQLUrl,zt as isLosslessTypeChange,n as isMysqlLike,Xt as isNarrowingChange,Kn as iterateAllPivots,xt as lastCreatedMigrationFiles,d as loadModels,ge as makeModel,$e as makeSeeder,An as marshallObject,we as migrateGenerate,De as migrateList,Bt as migrateModels,Se as migrateRollback,V as migrateStatus,Ct as migrationBody,He as modelNameForTable,H as modelShow,st as normalizeDialectName,Zt as normalizeIndexPredicate,q as optimizeDatabase,Jt as parseStacksModels,Ee as ping,Q as queryExplainAll,c as quoteColumnForDialect,nn as raw,fn as registerBrowserModels,qt as registerModel,G as relationDiagram,jn as releaseOrm,pn as resetConnection,M as resetDatabase,I as resolveDialect,Dt as resolveKeyPattern,hn as resolveLibSQLEndpoint,K as resolveLibSQLTarget,v as resolvePivot,Qt as resolveSqlitePragmas,ne as runBenchmark,J as runSeeder,P as runSeeders,gt as satisfies,pt as saveMigrationSnapshot,Un as seedModel,Le as setConfig,Pe as setQueryCacheMaxSize,H as showModel,m as singularizerFor,ve as sql,dt as sqlTypeToAttr,On as stacksModelToEntity,F as startConsole,yn as stripTrailingS,me as tableInfo,w as tableNameFor,At as temporalLiteral,ae as tinker,lt as toDialectPlaceholders,Cn as toDynamoDBItem,Fe as toHranaStatement,Ke as toLibSQLError,gn as toLibSQLRows,Rn as toModelInstance,qe as toTableName,Nn as unmarshallItem,ke as unsafe,z as validateSchema,Re as waitReady,W as wipeDatabase,X as writeMigrationFiles};
2
+ import{ne,re,ie,se,F,ae,oe,le,ce,j,ue,q,W,de,fe,U,me,he,dt,He,ft,A,ge,o,pe,ye,be,Te,h,mt,ht,gt,Qe,Ge,pt,S,N,Je,M,we,Se,V,De,H,Ee,Q,G,P,J,$e,xe,ve,ke,z,Ce,Re,D,g,$n,xn,vn,yt,bt,Tt,wt,St,kn,Dt,Jt,Cn,Rn,An,Nn,Et,Mn,Pn,On,Ae,d,$t,xt,vt,kt,Ct,zt,Y,X,Ne,Yt,Bn,_n,Rt,ze,Xt,b,Ye,Zt,Xe,en,In,tn,Ln}from"../chunk-6w95jzzq.js";import{v,Kn,nn,c,At,Nt,i,Me,Pe}from"../chunk-35s45ket.js";import{Mt,u,Z,k,Pt,Ze,C,Oe,et,tt,Be,Ot,f,ee,_e,nt,Bt,rt,rn,sn}from"../chunk-2v1zv4hb.js";import{_t,It,Lt,Kt,Fn,jn,qn,Ft,jt,Wn,Un,an,on,ln,cn,un,qt,dn,fn}from"../chunk-ztdtt4hj.js";import{n,it,e,I,st,t,s,L,Le,mn,at,hn,a,Ke,Wt,Ut,gn,Fe,Vt,Vn,Ht,Qt,R,K,pn,qe,w,yn,bn,m,lt}from"../chunk-jypmc6m3.js";import{Tn,wn,Sn,y,ct,ut,Dn,Ve,En}from"../chunk-wvae8521.js";export{Ft as BelongsToManyRelationBuilder,ct as BrowserQueryBuilder,y as BrowserQueryError,Ht as DEFAULT_SQLITE_PRAGMAS,Z as DynamoDBClient,Mt as DynamoDBDriverImpl,g as DynamoDBItemBuilder,_e as DynamoDBMigrationDriver,ee as DynamoDBMigrationTracker,D as DynamoDBQueryBuilder,Et as DynamoDBToolingAdapter,rt as EntityQueryBuilder,vt as GENERATED_MARKER,a as LibSQLError,f as MIGRATIONS_TABLE,Ze as Model,o as MySQLDriver,pe as PostgresDriver,Te as SQLiteDriver,tn as Seeder,ye as SingleStoreDriver,yt as SingleTableManager,kn as SingleTablePatterns,Tt as SingleTableQueryBuilder,bt as SingleTableRepository,b as UTC_CLOCK_DEFAULT,be as VitessDriver,R as applySqliteBootstrapPragmas,Qe as auditSchemaDrift,En as browserAuth,ut as browserQuery,Ae as buildDatabaseSchema,Be as buildDynamoDBMigrationPlan,Y as buildMigrationPlan,$t as buildSchemaMeta,re as cacheClear,se as cacheConfig,ie as cacheStats,ze as canonicalStorageType,Ye as canonicalizeDefault,Ce as checkSchema,It as clearLocalModels,un as clearModelRegistry,Me as clearQueryCache,e as config,Tn as configureBrowser,Pt as configureModels,Fn as configureOrm,tt as convertSchemaToDefinition,Dn as createBrowserDb,Ve as createBrowserModel,k as createClient,sn as createDynamo,vn as createDynamoDBClient,u as createDynamoDBDriver,xn as createDynamoDBItemBuilder,$n as createDynamoDBQueryBuilder,Mn as createDynamoDBToolingAdapter,_t as createFakerCompatLayer,Vt as createLibSQLSQL,nt as createMigrationDriver,jt as createModel,i as createQueryBuilder,St as createRepository,wt as createSingleTableManager,Wn as createTableFromModel,j as dbInfo,q as dbOptimize,ue as dbStats,W as dbWipe,Ut as decodeLibSQLValue,it as defaultConfig,mn as defineConfig,dn as defineModel,In as defineModels,Ln as defineSeeder,ce as dumpDatabase,rn as dynamo,Wt as encodeLibSQLValue,Nt as escapeStringLiteral,N as executeMigration,Je as executeMigrationWithReport,de as explain,Q as explainAllQueries,oe as exportData,Lt as extractChanges,Kt as extractInsertId,et as extractModelSchema,Oe as extractTableDefinition,mt as familyOfDeclared,ht as familyOfSqlType,fe as file,Ge as formatSchemaDrift,xe as freshDatabase,Pn as generateAccessPatterns,G as generateDiagram,Xe as generateDiffOperations,en as generateDiffSql,_n as generateDiffSqlString,S as generateMigration,ft as generateModelSource,Yt as generateSql,Ne as generateSqlFiles,Bn as generateSqlString,on as getAllModels,wn as getBrowserConfig,L as getConfig,qn as getDatabase,h as getDialectDriver,an as getModel,ln as getModelRegistry,t as getPlaceholder,s as getPlaceholders,cn as hasModel,Rt as hashMigrationPlan,C as hashTableDefinition,le as importData,bn as inflectSingular,U as inspectTable,he as introspect,A as introspectDatabase,Sn as isBrowser,Ot as isDefinitionEqual,kt as isGeneratedMigrationSql,Vn as isLibSQLConnection,at as isLibSQLUrl,zt as isLosslessTypeChange,n as isMysqlLike,Xt as isNarrowingChange,Kn as iterateAllPivots,xt as lastCreatedMigrationFiles,d as loadModels,ge as makeModel,$e as makeSeeder,An as marshallObject,we as migrateGenerate,De as migrateList,Bt as migrateModels,Se as migrateRollback,V as migrateStatus,Ct as migrationBody,He as modelNameForTable,H as modelShow,st as normalizeDialectName,Zt as normalizeIndexPredicate,q as optimizeDatabase,Jt as parseStacksModels,Ee as ping,Q as queryExplainAll,c as quoteColumnForDialect,nn as raw,fn as registerBrowserModels,qt as registerModel,G as relationDiagram,jn as releaseOrm,pn as resetConnection,M as resetDatabase,I as resolveDialect,Dt as resolveKeyPattern,hn as resolveLibSQLEndpoint,K as resolveLibSQLTarget,v as resolvePivot,Qt as resolveSqlitePragmas,ne as runBenchmark,J as runSeeder,P as runSeeders,gt as satisfies,pt as saveMigrationSnapshot,Un as seedModel,Le as setConfig,Pe as setQueryCacheMaxSize,H as showModel,m as singularizerFor,ve as sql,dt as sqlTypeToAttr,On as stacksModelToEntity,F as startConsole,yn as stripTrailingS,me as tableInfo,w as tableNameFor,At as temporalLiteral,ae as tinker,lt as toDialectPlaceholders,Cn as toDynamoDBItem,Fe as toHranaStatement,Ke as toLibSQLError,gn as toLibSQLRows,Rn as toModelInstance,qe as toTableName,Nn as unmarshallItem,ke as unsafe,z as validateSchema,Re as waitReady,W as wipeDatabase,X as writeMigrationFiles};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{n,it,e,I,st,t,s,L,Le,mn,Ht,Qt,R,K,pn}from"../chunk-jypmc6m3.js";import{nn,c,At,Nt,i,Me,Pe}from"../chunk-bhm321nb.js";export{Ht as DEFAULT_SQLITE_PRAGMAS,R as applySqliteBootstrapPragmas,Me as clearQueryCache,e as config,i as createQueryBuilder,it as defaultConfig,mn as defineConfig,Nt as escapeStringLiteral,L as getConfig,t as getPlaceholder,s as getPlaceholders,n as isMysqlLike,st as normalizeDialectName,c as quoteColumnForDialect,nn as raw,pn as resetConnection,I as resolveDialect,K as resolveLibSQLTarget,Qt as resolveSqlitePragmas,Le as setConfig,Pe as setQueryCacheMaxSize,At as temporalLiteral};
2
+ import{n,it,e,I,st,t,s,L,Le,mn,Ht,Qt,R,K,pn}from"../chunk-jypmc6m3.js";import{nn,c,At,Nt,i,Me,Pe}from"../chunk-35s45ket.js";export{Ht as DEFAULT_SQLITE_PRAGMAS,R as applySqliteBootstrapPragmas,Me as clearQueryCache,e as config,i as createQueryBuilder,it as defaultConfig,mn as defineConfig,Nt as escapeStringLiteral,L as getConfig,t as getPlaceholder,s as getPlaceholders,n as isMysqlLike,st as normalizeDialectName,c as quoteColumnForDialect,nn as raw,pn as resetConnection,I as resolveDialect,K as resolveLibSQLTarget,Qt as resolveSqlitePragmas,Le as setConfig,Pe as setQueryCacheMaxSize,At as temporalLiteral};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.3.13",
4
+ "version": "0.3.14",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",
@@ -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-jypmc6m3.js";import{Buffer as Bt}from"buffer";import{serialize as Ft}from"v8";function Wt(w){return m(e.relations?.singularizeStrategy)(w)}function v(w,D,S,H={}){let ae=H.singularize??Wt,le=w.relations?.[D]?.belongsToMany?.[S];if(le==null)return null;let ke=typeof le==="object",Se=ke?le:null,pe=ke?Se.model:le,Ge=w.modelToTable[pe]||pe,Ye,nt;if(Se?.table)Ye=Se.table;else if(Se?.through){if(nt=Se.through,Ye=w.modelToTable[Se.through],!Ye)throw Error(`[query-builder] belongsToMany relation '${S}' on '${D}' references unknown through model '${Se.through}'. Make sure '${Se.through}' is registered via defineModels({...}).`)}else{let je=ae(D),g=ae(Ge);Ye=[je,g].sort().join("_")}let rt=Se?.foreignKey??`${ae(D)}_id`,yt=Se?.relatedKey??`${ae(Ge)}_id`,se={};if(Se?.pivot?.columns)Object.assign(se,Se.pivot.columns);if(nt&&H.models){let je=H.models[nt],g=je?.definition??je?.getDefinition?.()??je,f=g?.attributes??{};for(let[d,y]of Object.entries(f)){if(d===rt||d===yt||d===(g?.primaryKey??"id"))continue;se[d]={default:y?.default,nullable:y?.nullable,validation:y?.validation}}}let ve=Boolean(Se?.pivot?.timestamps),xe=Object.keys(se);return{pivotTable:Ye,fkParent:rt,fkRelated:yt,pivotColumns:xe,pivotColumnDefs:se,pivotModelName:nt,timestamps:ve,relatedModelName:pe,relatedTable:Ge,hasConfig:ke}}function*Kn(w,D={}){let S=w.relations;if(!S)return;for(let[H,ae]of Object.entries(S)){let O=ae?.belongsToMany;if(!O)continue;for(let le of Object.keys(O)){let ke=v(w,H,le,D);if(ke)yield{parentTable:H,relationKey:le,resolved:ke}}}}function _e(w){return typeof w==="object"&&w!==null&&"raw"in w&&typeof w.raw==="string"}function St(w,D,S){if(Array.isArray(D)){let ae=s(D.length,S.length+1),O=l(w,D,!1,ae);return S.push(...D),O}let H=`${w} = ${t(S.length+1)}`;return S.push(D),H}function ze(w){return typeof w==="object"&&w!==null&&"sql"in w&&typeof w.sql==="string"&&(!("parameters"in w)||Array.isArray(w.parameters))}function Jt(w,D){let[S,...H]=D;if(H.length>0||S!==void 0&&!Array.isArray(S))throw TypeError("[query-builder] db.raw(sql, bindings): pass the bindings as one array, db.raw('a = ? AND b = ?', [a, b]).");let ae={sql:w,parameters:[...S??[]]};return Object.defineProperty(ae,"then",{enumerable:!1,value:(O,le)=>{let ke=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 le==="function")return le(ke);throw ke}}),ae}function ut(w){return w instanceof Promise&&typeof w.execute==="function"&&typeof w.cancel==="function"}function ct(w){throw TypeError(`[query-builder] ${w}: 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 Xe(w,D){let S=w.parameters??(Array.isArray(w.values)?w.values:[]);if(e.dialect!=="postgres"||S.length===0)return{text:w.sql,parameters:S};let H=0,{text:ae}=We(w.sql,()=>H<S.length?t(D+H++):void 0);if(H!==S.length)throw TypeError(`[query-builder] SQL expression declares ${S.length} parameters but contains only ${H} placeholders`);return{text:ae,parameters:S}}function Ot(w,D){if(D.length===2){let[S,H]=D;if(Array.isArray(H)&&typeof S==="number"&&H[S]===w)return!1;if(H instanceof Set&&S===w&&H.has(w))return!1;if(H instanceof Map&&H.get(S)===w)return!1}return D.some((S)=>S!==void 0&&!(Array.isArray(S)&&S.length===0))}function nn(w,...D){if(typeof w==="string"){if(!(D.length===1&&Number.isInteger(D[0])&&D[0]>=0&&!w.includes("?"))&&Ot(w,D))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:w}}let S=w[0];for(let H=0;H<D.length;H++)S+=He(D[H])+w[H+1];return{raw:S}}function Re(w){return n(e.dialect)?`\`${w.replace(/`/g,"``")}\``:`"${w.replace(/"/g,'""')}"`}function mt(w,D=1){let S=Object.keys(w[0]??{}),H=[],ae=D,O=w.map((le)=>`(${S.map((Se)=>(H.push(le[Se]),t(ae++))).join(", ")})`);return{colsSql:S.map(Re).join(", "),valuesSql:O.join(", "),params:H,nextIndex:ae}}function dt(w){return Boolean(w&&(w.onSlowQuery||w.slowQueryThresholdMs!=null&&w.slowQueryThresholdMs>=0))}function c(w,D=e.dialect){if(!n(D))return w;let S=/^([A-Z_][\w$]*)(?:\.([A-Z_][\w$]*))?(?:\s+as\s+([A-Z_][\w$]*))?$/i.exec(w.trim());if(!S)return w;let[,H,ae,O]=S,le=ae?`\`${H}\`.\`${ae}\``:`\`${H}\``;return O?`${le} AS \`${O}\``:le}function At(w,D=e.dialect){if(!n(D)||w===null||w===void 0)return w;if(typeof w==="string"){let S=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}(?::\d{2})?)(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/.exec(w);if(!S)return w;let[,H,ae]=S;return`${H} ${ae.length===5?`${ae}:00`:ae}`}if(!(w instanceof Date)||Number.isNaN(w.getTime()))return w;return w.toISOString().replace("T"," ").replace(/\.\d+Z$/,"")}function Dt(w){if(typeof w==="string")return c(w);if(_e(w))return w.raw;if(w&&typeof w==="object"){let D=w;if(typeof D.raw==="function")return String(D.raw());if(typeof D.sql==="string")return D.sql;let S=String(w);if(S!=="[object Object]")return S}throw TypeError(`[query-builder] select(): unsupported column ${String(w)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function Kt(w){let D=/\(|\)|\bORDER\s+BY\b/gi,S=0,H;while(H=D.exec(w))if(H[0]==="(")S++;else if(H[0]===")")S=Math.max(0,S-1);else if(S===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},Et=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function J(w,D){if(!he.IDENTIFIER.test(w)){let S=D?` in ${D}`:"";throw Error(`[query-builder] Invalid identifier${S}: '${w}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function De(w,D){if(typeof w!=="string")throw TypeError(`[query-builder] ${D}: operator must be a string, got ${typeof w}`);let S=w.toLowerCase();if(!Et.has(S))throw TypeError(`[query-builder] ${D}: refusing to use '${w}' as a SQL operator \u2014 not in the allowed set (${[...Et].join(", ")})`);return w}function Ve(w,D,S,H){let ae=D.toLowerCase();if(ae!=="is"&&ae!=="is not")return null;if(S!==null&&S!==void 0)throw TypeError(`[query-builder] ${H}: operator '${D}' only accepts NULL/undefined as value, got ${typeof S} (${String(S)})`);return`${w} IS ${ae==="is not"?"NOT ":""}NULL`}function Qe(w,D){if(typeof w!=="string"||w.length===0)throw TypeError(`[query-builder] ${D}: identifier must be a non-empty string, got ${typeof w}`);if(w.length>129)throw TypeError(`[query-builder] ${D}: identifier '${w}' too long`);let S=w.split(".");if(S.length>2)throw TypeError(`[query-builder] ${D}: identifier '${w}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let H of S)if(!/^[A-Z_][A-Z0-9_]*$/i.test(H))throw TypeError(`[query-builder] ${D}: identifier segment '${H}' contains characters outside [A-Za-z0-9_]`)}function Ze(w,D,S=[]){let H=typeof w==="object"&&w!==null?w.parameters??w.values:void 0;if(Ot(w,S)||Array.isArray(H)&&H.length>0){let ae=D.startsWith("whereRaw(")?", or use where(). Model.query().whereRaw(sql, ...bindings) is the builder that binds `?` values.":D.startsWith("orWhereRaw(")?", or use orWhere(). Model.query().orWhereRaw(sql, ...bindings) is the builder that binds `?` values.":".";throw TypeError(`[query-builder] ${D}: 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${ae}`)}if(typeof w==="string")return jt(D),w;if(w===null||w===void 0)throw TypeError(`[query-builder] ${D}: fragment must be a SqlFragment, got ${w}`);if(_e(w))return w.raw;if(typeof w==="object"){let ae=w;if(typeof ae.raw==="string")return ae.raw;if(typeof ae.raw==="function"){let le=ae.raw();if(typeof le==="string")return le}if(typeof ae.sql==="string")return ae.sql;let O=String(w);if(O!=="[object Object]"&&O!=="[object Promise]")return O}throw TypeError(`[query-builder] ${D}: 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 _t(w,D){if(!D||D.length===0)return;if(e.dialect!=="postgres")return;if(/\$\d/.test(w))return;let S=te(w),H=`${D.length} binding${D.length===1?"":"s"}`,ae=S>0?`the query binds them with ${S} \`?\` placeholder${S===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(): ${H} supplied, but ${ae}. 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 Rt=new Set;function jt(w){if(Rt.has(w))return;Rt.add(w),console.warn(`[query-builder] ${w}: 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(w,D=e.dialect){return n(D)?w.replace(/\\/g,"\\\\").replace(/'/g,"''"):w.replace(/'/g,"''")}function He(w){if(w===null)return"NULL";if(typeof w==="number"&&Number.isFinite(w))return String(w);if(typeof w==="boolean")return w?"1":"0";if(typeof w==="string")return`'${Nt(w)}'`;if(w instanceof Date)return`'${w.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof w}`)}function Ut(w,D){let S=Array.isArray(w)?w:w?[w]:[],H=[];if(S.length)H.push(`PARTITION BY ${S.join(", ")}`);if(D&&D.length)H.push(`ORDER BY ${D.map(([ae,O])=>`${ae} ${O==="desc"?"DESC":"ASC"}`).join(", ")}`);return H.length?`OVER (${H.join(" ")})`:"OVER ()"}class It{cache=new Map;maxSize=100;get(w){let D=this.cache.get(w);if(!D)return null;if(Date.now()>D.expiresAt)return this.cache.delete(w),null;return this.cache.delete(w),this.cache.set(w,D),D.data}set(w,D,S){if(this.cache.has(w))this.cache.delete(w);if(this.cache.size>=this.maxSize){let H=Date.now(),ae=!1;for(let[O,le]of this.cache)if(H>le.expiresAt){if(this.cache.delete(O),ae=!0,this.cache.size<this.maxSize)break}if(!ae){let O=this.cache.keys().next().value;if(O!==void 0)this.cache.delete(O)}}this.cache.set(w,{data:D,expiresAt:Date.now()+S})}clear(){this.cache.clear()}setMaxSize(w){this.maxSize=Math.max(0,Math.floor(w));while(this.cache.size>this.maxSize){let D=this.cache.keys().next().value;if(D===void 0)break;this.cache.delete(D)}}}var wt=new It,kt=new WeakMap,Ht=0;function Vt(w,D,S){let H=kt.get(w);if(H===void 0)H=++Ht,kt.set(w,H);let ae=S.map((O)=>ArrayBuffer.isView(O)?["view",Bt.isBuffer(O)?"Buffer":Object.prototype.toString.call(O),Bt.from(O.buffer,O.byteOffset,O.byteLength).toString("base64")]:["value",Ft(O).toString("base64")]);return`${H}\x00${D}\x00${JSON.stringify(ae)}`}function Yt(w){let D=String(w?.message||"").toLowerCase();return D.includes("deadlock")||D.includes("serialization failure")||D.includes("could not serialize access")||D.includes("deadlock found when trying to get lock")||D.includes("lock wait timeout exceeded")||D.includes("database is locked")||D.includes("busy")}function zt(w,D){if(!D||D.length===0)return!1;let S=w&&(w.code||w.sqlState||w.sqlstate);if(!S)return!1;return D.includes(S)}function Xt(w){return new Promise((D)=>setTimeout(D,w))}var pt=new Map,Zt=500,en=[{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}],tn=[{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}],rn=[{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 et(w){let D=pt.get(w);if(D!==void 0)return D;let S=sn(w);if(pt.size>=Zt)pt.clear();return pt.set(w,S),S}function sn(w){let D=Ue(w,en);if(D.length<=1)return w;let S=w.slice(0,D[0].start).trimEnd(),H={};for(let le=0;le<D.length;le++){let ke=D[le].start,Se=le+1<D.length?D[le+1].start:w.length,pe=w.slice(ke,Se).trim();if(!H[D[le].key])H[D[le].key]=[];H[D[le].key].push(pe)}let O=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((le)=>H[le]).map((le)=>H[le].join(" ")).join(" ");return O?`${S} ${O}`:S}function an(w,D){let S=Math.max(1,D?.baseMs??50),H=Math.max(1,D?.factor??2),ae=Math.max(S,D?.maxMs??2000),O=Math.min(ae,S*H**Math.max(0,w-1));if(D?.jitter)O=Math.min(ae,O*(0.9+Math.random()*0.2));return Math.floor(O)}function i(w){let D=_(w?.sql??T()),S=w?.meta,H=w?.schema,ae;function O(g,f){let d=D.unsafe(g,f);if(typeof d.sql!=="string")ae??=new WeakMap,ae.set(d,{sql:g,params:f?.slice()});return d}let le,ke=(g,f)=>{let d=S?.temporalColumns?.[g];if(!d||d.length===0||!n(e.dialect))return f;return f.map((y)=>{let N=null;for(let b of d){if(!(b in y))continue;let X=At(y[b]);if(X!==y[b])N=N??{...y},N[b]=X}return N??y})};function Se(g){if(typeof g==="number")return g;let f=String(g),d=7;for(let y=0;y<f.length;y++)d=d*31+f.charCodeAt(y)|0;return Math.abs(d)}function pe(){if(!w?.hooks)return e.hooks;return{...e.hooks,...w.hooks}}let Ge=new Map;function Ye(g){if(Array.isArray(g)){let[b,X,M]=g;J(b,"where(column)");let j=String(b);switch(X){case"in":if(Array.isArray(M)){let q=s(M.length);return O(`${j} IN (${q})`,M)}return O(`${j} IN (${t(1)})`,[M]);case"not in":if(Array.isArray(M)){let q=s(M.length);return O(`${j} NOT IN (${q})`,M)}return O(`${j} NOT IN (${t(1)})`,[M]);case"like":return O(`${j} LIKE ${t(1)}`,[M]);case"is":case"is not":{if(M!==null&&M!==void 0)throw TypeError(`[query-builder] where(..., '${X}', ?): operator '${X}' only accepts NULL/undefined as value, got ${typeof M} (${String(M)})`);return O(`${j} IS ${X==="is not"?"NOT ":""}NULL`)}case"!=":return O(`${j} <> ${t(1)}`,[M]);case"<":case">":case"<=":case">=":case"=":return O(`${j} ${X} ${t(1)}`,[M]);default:throw TypeError(`[query-builder] where(..., '${String(X)}', ?): 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 d=[],y=[],N=1;for(let b of f){J(b,"where(object key)");let X=g[b];if(Array.isArray(X)){let M=s(X.length,N);d.push(`${b} IN (${M})`),y.push(...X),N+=X.length}else d.push(`${b} = ${t(N++)}`),y.push(X)}return O(d.join(" AND "),y)}function nt(g,f,d){if(!d)return f;let y=Ye(d);return D`${f} WHERE ${y}`}function rt(g){let f=ae?.get(g);if(f)return f.sql;let d=e.debug?.captureText;if(e.debug)e.debug.captureText=!0;let y=String(g);if(e.debug)e.debug.captureText=d;return y}function yt(g){let f=ae?.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 se(g,f,d){let y=pe(),N=y?.slowQueryThresholdMs,b=N!=null&&N>=0,X=Boolean(y?.onSlowQuery||b),M=y&&(y.onQueryStart||y.onQueryEnd||y.onQueryError||y.startSpan||X),j=d?.timeoutMs&&d.timeoutMs>0||d?.signal;if(!M&&!j)return g.execute();let q=rt(g),E=yt(g),K=Date.now(),R;try{if(y?.onQueryStart?.({sql:q,params:E,kind:f}),y?.startSpan)R=y.startSpan({sql:q,params:E,kind:f})}catch{}let A=!1,V=(Y,ne,W=Boolean(Y))=>{if(A)return;A=!0;let G=Date.now()-K;try{if(W)y?.onQueryError?.({sql:q,params:E,error:Y,durationMs:G,kind:f});else if(y?.onQueryEnd?.({sql:q,params:E,durationMs:G,rowCount:ne,kind:f}),b&&G>=N)if(y?.onSlowQuery)y.onSlowQuery({sql:q,params:E,durationMs:G,kind:f});else console.warn(`[query-builder] slow query (${G}ms >= ${N}ms): ${q}`)}catch{}try{R?.end(Y)}catch{}};if(typeof g.executeSync==="function"){let Y,ne,W=!1;try{Y=g.executeSync()}catch(re){ne=re,W=!0}if(d?.signal?.aborted){try{g.cancel?.()}catch{}ne=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),W=!0}if(W)return V(ne,void 0,!0),Promise.reject(ne);let G=Array.isArray(Y)?Y.length:typeof Y==="number"?Y:void 0;return V(void 0,G),Promise.resolve(Y)}let F=g.execute(),U=[F],z;if(d?.timeoutMs&&d.timeoutMs>0){let Y=new Promise((ne,W)=>{z=setTimeout(()=>{try{g.cancel?.()}catch{}let G=Error(`Query timed out after ${d.timeoutMs}ms`);G.code="EBQBTIMEOUT",W(G)},d.timeoutMs)});U.push(Y)}if(d?.signal){if(d.signal.aborted){try{g.cancel?.()}catch{}let ne=Error("Query aborted");return ne.code="EBQBABORT",V(ne),Promise.reject(ne)}let Y=()=>{try{g.cancel?.()}catch{}};d.signal.addEventListener("abort",Y,{once:!0}),F.finally(()=>{d.signal?.removeEventListener("abort",Y)})}return Promise.race(U).then((Y)=>{clearTimeout(z);let ne=Array.isArray(Y)?Y.length:typeof Y==="number"?Y:void 0;return V(void 0,ne),Y}).catch((Y)=>{throw clearTimeout(z),V(Y),Y})}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 d of["changes","affectedRows","count","rowCount","numAffectedRows","numUpdatedRows","numDeletedRows","numInsertedOrUpdatedRows"])if(f[d]!==void 0&&f[d]!==null)return ve(f[d]);if(Array.isArray(g))return g.reduce((d,y)=>d+ve(y),0);return 0}function xe(g,f){let d=f??rt(g);return{sql:d,toString:()=>d,execute:()=>g.execute(),values:()=>g.values(),raw:()=>g.raw()}}function je(g,f){let d=D,y=f&&f.length>0?`SELECT ${f.join(", ")} FROM ${String(g)}`:`SELECT * FROM ${String(g)}`,N=[],b=[],X=!1,M=!1,j=!1,q=null,E=()=>{if(q===null){let a=et(F());q=b.length>0?O(a,b):O(a)}return q},K=(a="",o="",u=[])=>O(`${a}${et(F())}${o}`,[...b,...u]),R=(a,o)=>{N.push({conn:a,sql:o}),q=null},A=(a,o)=>{R(a==="OR"?"OR":"AND",o)},V=(a)=>{let o=Ue(a,tn,1);return o.length>0?o[0].start:-1},F=(a)=>{let o=x(a?[...N,a]:N);if(!o)return y;if(X)return`${y} ${M?"AND":"WHERE"} ${o}`;let u=V(y);return u>=0?`${y.slice(0,u)}WHERE ${o} ${y.slice(u)}`:`${y} WHERE ${o}`},U=(a,o,u,h)=>{let B=typeof u?.__sqlState==="function"?u.__sqlState():void 0,k;if(B){let C=b.length;k=C>0&&e.dialect==="postgres"?B.sql.replace(/\$(\d+)/g,(L,Q)=>`$${Number(Q)+C}`):B.sql,b.push(...B.params)}else k=String(u.toSQL());R(a,`${o} ${h?"NOT IN":"IN"} (${k})`)},z=(a,o)=>{let u=je(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=b.length,k=B>0&&e.dialect==="postgres"?h.body.replace(/\$(\d+)/g,(C,L)=>`$${Number(L)+B}`):h.body;b.push(...h.params),R(a,`(${k})`)},Y=(a,o,u,h,B,k)=>{if(typeof h==="string"&&B!==void 0){J(String(h),`${u}(column)`),De(B,`${u}(operator)`);let C=Ve(String(h),String(B),k,u);if(C)return R(o,C),a;let L=b.length+1;return b.push(k),R(o,`${String(h)} ${String(B)} ${t(L)}`),a}if(Array.isArray(h)){let[C,L,Q]=h,I=String(C);J(I,`${u}(column)`);let P=De(L,`${u}(operator)`);if(P==="in"||P==="not in"){let Z=Array.isArray(Q)?Q:[Q],ie=s(Z.length,b.length+1),$e=l(c(I),Z,P==="not in",ie);b.push(...Z),R(o,$e)}else{let Z=Ve(I,P,Q,u);if(Z)return R(o,Z),a;let ie=b.length+1;b.push(Q),R(o,`${I} ${P} ${t(ie)}`)}return a}if(typeof h==="function")return z(o,h),a;if(ut(h))ct(`${u}(expr)`);if(ze(h)){let C=Xe(h,b.length+1);return b.push(...C.parameters),R(o,C.text),a}if(h&&typeof h==="object"&&!("raw"in h)){let C=[];for(let L of Object.keys(h)){J(L,`${u}(column)`);let Q=h[L];if(Array.isArray(Q)){let I=s(Q.length,b.length+1);C.push(l(c(L),Q,!1,I)),b.push(...Q)}else{let I=b.length+1;C.push(`${L} = ${t(I)}`),b.push(Q)}}if(C.length>0)R(o,C.length>1?`(${C.join(" AND ")})`:C[0]);return a}if(h&&typeof h.raw<"u")return R(o,h.raw),a;return a},ne=(a,o)=>{if(N.length>0)y=F(),N.length=0;X=!0;let u=o.__rawState?.();if(u){let h=b.length,B=e.dialect==="postgres"?u.sql.replace(/\$(\d+)/g,(k,C)=>`$${Number(C)+h}`):u.sql;y+=` ${a} ${B}`,b.push(...u.params),M=o.__hasPredicate?.()??he.WHERE.test(B)}else{let h=String(o.toSQL());y+=` ${a} ${h}`,M=o.__hasPredicate?.()??he.WHERE.test(h)}q=null},W=(a)=>{let o=Ue(y,rn,1),u=o.length>0?o[0].start:-1;y=u>=0?`${y.slice(0,u)}${a} ${y.slice(u)}`:`${y} ${a}`,q=null},G=new Set,re,ee,ye=!1,we=!1,Ie=!1,Ce=new Map,Fe=new Set,Tt=60000,fe=(a)=>m(e.relations.singularizeStrategy)(a),qe=(a)=>{if(!S)return null;return v(S,String(g),a,{singularize:fe,models:S.models})},st=(a)=>{if(!a||typeof a!=="object"||Fe.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},at=(a)=>{if(Fe.size===0||!a)return a;if(Array.isArray(a))for(let o=0;o<a.length;o++)st(a[o]);else st(a);return a},ot=(a)=>{if(!S)return;if(G.has(a.pivotTable))return;let o=String(g),u=S.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)"),q=d`${E()} LEFT JOIN ${d(a.pivotTable)} ON ${d(`${a.pivotTable}.${a.fkParent}`)} = ${d(`${o}.${u}`)}`,y=`${y} LEFT JOIN ${a.pivotTable} ON ${a.pivotTable}.${a.fkParent} = ${o}.${u}`,G.add(a.pivotTable)},it=(a)=>{if(he.SELECT_STAR.test(y))y=y.replace(he.SELECT_STAR,`SELECT *, ${a}`);else if(he.SELECT.test(y))y=y.replace(he.SELECT_FROM,`SELECT $1, ${a} FROM`);let o=String(E());if(he.SELECT_STAR.test(o)){let u=o.replace(he.SELECT_STAR,`SELECT *, ${a}`);q=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`);q=O(h)}}},Je=(a,o,u,h)=>{it(`${a} ${Ut(u,h)} AS ${o}`)},ht=(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 L=h({where:(Q,I,P)=>(J(Q,"relationship subquery condition"),`${o}.${Q} ${De(I,"whereHas callback")} ${He(P)}`)});if(L)k+=` AND ${L}`}return k},gt=(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 L=h({where:(Q,I,P)=>(J(Q,"relationship subquery condition"),`${o}.${Q} ${De(I,"whereHas callback")} ${He(P)}`)});if(L)k+=` AND ${L}`}return k},ft=(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&&S?v(S,a,k,{singularize:fe,models:S.models}):null,L=fe(a),Q=fe(o),I=C?.pivotTable??[L,Q].sort().join("_"),P=C?.fkParent??`${L}_id`,Z=C?.fkRelated??`${Q}_id`;J(I,"relationship subquery (pivot table)"),J(P,"relationship subquery (foreign key A)"),J(Z,"relationship subquery (foreign key B)");let ie=`SELECT 1 FROM ${I} JOIN ${o} ON ${o}.${h} = ${I}.${Z} WHERE ${I}.${P} = ${a}.${u}`;if(B){let oe=B({where:(Be,Oe,Ne)=>(J(Be,"relationship subquery condition"),`${o}.${Be} ${De(Oe,"whereHas callback")} ${He(Ne)}`)});if(oe)ie+=` AND ${oe}`}return ie},xt=(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})`},Lt=(a,o,u,h)=>{J(a,"withCount (parent table)"),J(o,"withCount (target table)"),J(u,"withCount (primary key)");let B=h&&S?v(S,a,h,{singularize:fe,models:S.models}):null,k=fe(a),C=fe(o),L=B?.pivotTable??[k,C].sort().join("_"),Q=B?.fkParent??`${k}_id`;return J(L,"withCount (pivot table)"),J(Q,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${L} WHERE ${L}.${Q} = ${a}.${u})`},bt=(a,o,u)=>{if(!S)return;J(u,`with${a[0]}${a.slice(1).toLowerCase()} (column)`);let h=String(g),B=S.relations?.[h];if(!B)return;let k=Object.entries(B).find(([oe,Be])=>Be&&typeof Be==="object"&&(o in Be));if(!k)return;let[C,L]=k,Q=L[o],I=typeof Q==="string"?Q:Q?.model||Q?.target||Q,P=S.modelToTable[I]||I,Z=S.primaryKeys[h]??"id";J(P,`with${a} (target table)`);let ie=`${a}(${P}.${u})`,$e;if(C==="hasMany"||C==="hasOne"){let oe=`${h.endsWith("s")?h.slice(0,-1):h}_id`;J(oe,`with${a} (foreign key)`),$e=`(SELECT ${ie} FROM ${P} WHERE ${P}.${oe} = ${h}.${Z})`}else if(C==="belongsToMany"){let oe=S?v(S,h,o,{singularize:fe,models:S.models}):null,Be=fe(h),Oe=fe(P),Ne=oe?.pivotTable??[Be,Oe].sort().join("_"),Ee=oe?.fkParent??`${Be}_id`,ue=oe?.fkRelated??`${Oe}_id`,lt=S.primaryKeys[P]??"id";J(Ne,`with${a} (pivot table)`),J(Ee,`with${a} (foreign key)`),J(ue,`with${a} (related key)`),$e=`(SELECT ${ie} FROM ${Ne} JOIN ${P} ON ${P}.${lt} = ${Ne}.${ue} WHERE ${Ne}.${Ee} = ${h}.${Z})`}else return;it(`${$e} AS ${o}_${a.toLowerCase()}_${u}`)},$t=()=>{if(Ce.size===0)return;let a=[];for(let[o,u]of Ce.entries()){let h=qe(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(", ");it(o)}};return new Proxy({distinct(){return y=y.replace(/^SELECT\s+/i,"SELECT DISTINCT "),q=null,this},distinctOn(...a){let o=a.map(String).join(", ");return y=y.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${o}) `),q=null,this},selectRaw(a,...o){let u=Ze(a,"selectRaw(fragment)",o),h=y.indexOf(" FROM ");if(h!==-1)y=`${y.substring(0,h)}, ${u}${y.substring(h)}`;else y+=`, ${u}`;return q=null,this},rowNumber(a="row_number",o,u){let h=[];if(o){let L=Array.isArray(o)?o:[o];h.push(`PARTITION BY ${L.join(", ")}`)}if(u&&u.length)h.push(`ORDER BY ${u.map(([L,Q])=>`${L} ${Q==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`ROW_NUMBER() ${h.length?`OVER (${h.join(" ")})`:"OVER ()"} AS ${a}`,C=y.indexOf(" FROM ");if(C!==-1)y=`${y.substring(0,C)}, ${k}${y.substring(C)}`;else y+=`, ${k}`;return q=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(([Q,I])=>`${Q} ${I==="desc"?"DESC":"ASC"}`).join(", ")}`);let C=`DENSE_RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,L=y.indexOf(" FROM ");if(L!==-1)y=`${y.substring(0,L)}, ${C}${y.substring(L)}`;else y+=`, ${C}`;return q=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(([Q,I])=>`${Q} ${I==="desc"?"DESC":"ASC"}`).join(", ")}`);let C=`RANK() ${B.length?`OVER (${B.join(" ")})`:"OVER ()"} AS ${a}`,L=y.indexOf(" FROM ");if(L!==-1)y=`${y.substring(0,L)}, ${C}${y.substring(L)}`;else y+=`, ${C}`;return q=null,this},over(a,o,u={}){return Je(a,o,u.partitionBy,u.orderBy),this},lag(a,o={}){let u=[a,String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return Je(`LAG(${u.join(", ")})`,o.alias??`${a}_lag`,o.partitionBy,o.orderBy),this},lead(a,o={}){let u=[a,String(o.offset??1)];if(o.defaultValue!==void 0)u.push(String(o.defaultValue));return Je(`LEAD(${u.join(", ")})`,o.alias??`${a}_lead`,o.partitionBy,o.orderBy),this},sumOver(a,o={}){return Je(`SUM(${a})`,o.alias??`${a}_sum`,o.partitionBy,o.orderBy),this},avgOver(a,o={}){return Je(`AVG(${a})`,o.alias??`${a}_avg`,o.partitionBy,o.orderBy),this},countOver(a="*",o={}){return Je(`COUNT(${a})`,o.alias??"count_over",o.partitionBy,o.orderBy),this},minOver(a,o={}){return Je(`MIN(${a})`,o.alias??`${a}_min`,o.partitionBy,o.orderBy),this},maxOver(a,o={}){return Je(`MAX(${a})`,o.alias??`${a}_max`,o.partitionBy,o.orderBy),this},firstValue(a,o={}){return Je(`FIRST_VALUE(${a})`,o.alias??`${a}_first`,o.partitionBy,o.orderBy),this},lastValue(a,o={}){return Je(`LAST_VALUE(${a})`,o.alias??`${a}_last`,o.partitionBy,o.orderBy),this},selectAll(){return this},select(a){if(!a)return this;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(y),B=h?h[1]:"",k=y.indexOf(" FROM ");if(k!==-1)y=`SELECT ${B}${u.join(", ")}${y.substring(k)}`;else y=`SELECT ${B}${u.join(", ")} FROM ${g}`;return q=null,this},addSelect(...a){if(!a.length)return this;let o=a.map(Dt),u=y.indexOf(" FROM ");if(u!==-1)y=`${y.substring(0,u)}, ${o.join(", ")}${y.substring(u)}`;else y+=`, ${o.join(", ")}`;return q=null,this},with(...a){if(!S||!a||a.length===0)return this;let o=[];for(let I of a){if(!I)continue;if(typeof I==="string")o.push({name:I});else if(typeof I==="object"&&!Array.isArray(I))for(let[P,Z]of Object.entries(I))if(typeof Z==="function")o.push({name:P,callback:Z});else o.push({name:P})}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,L=(I)=>{let P=S.relations?.[I];if(!P)return[];return[...Object.keys(P.hasOne||{}),...Object.keys(P.hasMany||{}),...Object.keys(P.belongsTo||{}),...Object.keys(P.belongsToMany||{}),...Object.keys(P.hasOneThrough||{}),...Object.keys(P.hasManyThrough||{}),...Object.keys(P.morphOne||{}),...Object.keys(P.morphMany||{}),...Object.keys(P.morphToMany||{}),...Object.keys(P.morphedByMany||{})]},Q=(I,P,Z=0,ie)=>{let $e=e.relations.maxDepth??10;if(Z>=$e)throw Error(`[query-builder] Maximum relationship depth (${$e}) exceeded at '${P}'. Consider using separate queries or increasing maxDepth.`);let oe=S.relations?.[I];if(!oe)return I;let Be=(ce)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let de=e.softDeletes.column||"deleted_at";return` AND ${ce}.${de} IS NULL`}return""},Oe=(ce)=>{if(!ie)return"";let de=[],be=(Te,Ae,Ke)=>{J(String(Te),"with() constraint column");let tt=De(Ae,"with() constraint operator");de.push(`${ce}.${String(Te)} ${tt} ${He(Ke)}`)},ge=(Te)=>()=>{throw Error(`[query-builder] with('${P}', ...): ${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,Ae,Ke)=>{if(Array.isArray(Te))be(Te[0],Te[1],Te[2]);else if(Te&&typeof Te==="object")for(let tt of Object.keys(Te))be(tt,"=",Te[tt]);else if(Ae!==void 0&&Ke!==void 0)be(Te,Ae,Ke);else if(Ae!==void 0)be(Te,"=",Ae);return me},whereIn:(Te,Ae)=>(J(String(Te),"with() constraint column"),de.push(`${ce}.${String(Te)} IN (${Ae.map(He).join(", ")})`),me),whereNull:(Te)=>(J(String(Te),"with() constraint column"),de.push(`${ce}.${String(Te)} IS NULL`),me),whereNotNull:(Te)=>(J(String(Te),"with() constraint column"),de.push(`${ce}.${String(Te)} IS NOT NULL`),me),orderBy:ge("orderBy()"),limit:ge("limit()"),offset:ge("offset()"),take:ge("take()")};return ie(me),de.length?` AND ${de.join(" AND ")}`:""},Ne=()=>{let ce=(ge)=>{let me=ge?.[P];return me?S.modelToTable[me]:void 0},de=(ge)=>{let me=ge?.[P],Te=typeof me==="string"?me:me?.model;return Te?S.modelToTable[Te]:void 0},be=(ge)=>{let me=ge?.[P];return me?.target?S.modelToTable[me.target]:void 0};return ce(oe?.hasOne)||ce(oe?.hasMany)||ce(oe?.belongsTo)||de(oe?.belongsToMany)||be(oe?.hasOneThrough)||be(oe?.hasManyThrough)||ce(oe?.morphOne)||ce(oe?.morphMany)||ce(oe?.morphToMany)||ce(oe?.morphedByMany)},Ee=Ne()??(S.modelToTable[P]||S.tableToModel[P]?S.modelToTable[P]??P:P),ue=String(Ee);if(!Ee||!Ne()&&!S.modelToTable[P]&&!S.tableToModel[P]){let ce=L(I);if(ce.length>0&&!ce.includes(P)){let de=` Available relationships: ${ce.join(", ")}`;throw Error(`[query-builder] Relationship '${P}' not found on table '${I}'.${de}`)}}if(e.relations.detectCycles!==!1){let ce=`${I}->${ue}`;if(B.has(ce))throw Error(`[query-builder] Circular relationship detected: ${ce}. This would cause an infinite loop.`);B.add(ce)}if(!ue||ue===I)return I;let lt=oe?.hasOneThrough?.[P]||oe?.hasManyThrough?.[P];if(lt){let{through:ce,target:de}=lt,be=S.modelToTable[ce]||ce,ge=S.modelToTable[de]||de,me=S.primaryKeys[I]??"id",Te=S.primaryKeys[be]??"id",Ae=`${fe(I)}_id`,Ke=`${fe(be)}_id`;return W(`LEFT JOIN ${be} ON ${be}.${Ae} = ${I}.${me} LEFT JOIN ${ge} ON ${ge}.${Ke} = ${be}.${Te}`),G.add(be),G.add(ge),ge}if(Boolean(oe?.belongsToMany?.[P])){let ce=v(S,I,P,{singularize:fe,models:S.models}),de=ce?.pivotTable??[fe(I),fe(ue)].sort().join("_"),be=S.primaryKeys[I]??"id",ge=S.primaryKeys[ue]??"id",me=ce?.fkParent??`${fe(I)}_id`,Te=ce?.fkRelated??`${fe(ue)}_id`;return W(`LEFT JOIN ${de} ON ${de}.${me} = ${I}.${be} LEFT JOIN ${ue} ON ${ue}.${ge} = ${de}.${Te}${Oe(ue)}`),G.add(de),G.add(ue),ue}if(Boolean(oe?.morphToMany?.[P])){let ce=P,de=`${fe(ue)}_${ce}`,be=S.primaryKeys[I]??"id",ge=S.primaryKeys[ue]??"id",me=`${ce}_type`,Te=`${ce}_id`,Ae=`${fe(ue)}_id`,Ke=He(S.tableToModel[I]||I);return W(`LEFT JOIN ${de} ON ${de}.${Te} = ${I}.${be} AND ${de}.${me} = ${Ke} LEFT JOIN ${ue} ON ${ue}.${ge} = ${de}.${Ae}`),G.add(de),G.add(ue),ue}if(Boolean(oe?.morphedByMany?.[P])){let ce=oe.morphedByMany?.[P]||P,de=S.modelToTable[ce]||ce,be=fe(I),ge=`${fe(de)}_${be}`,me=S.primaryKeys[I]??"id",Te=S.primaryKeys[de]??"id",Ae=`${be}_type`,Ke=`${be}_id`,tt=`${fe(de)}_id`,Mt=He(S.tableToModel[de]||de);return W(`LEFT JOIN ${ge} ON ${ge}.${tt} = ${I}.${me} LEFT JOIN ${de} ON ${de}.${Te} = ${ge}.${Ke} AND ${ge}.${Ae} = ${Mt}`),G.add(ge),G.add(de),de}if(Boolean(oe?.belongsTo?.[P])){let ce=`${fe(ue)}_id`,de=S.primaryKeys[ue]??"id";return W(`LEFT JOIN ${ue} ON ${I}.${ce} = ${ue}.${de}${Oe(ue)}`),G.add(ue),ue}let Ct=Boolean(oe?.morphOne?.[P]),Pt=Boolean(oe?.morphMany?.[P]);if(Ct||Pt){let ce=`${P}_type`,de=`${P}_id`,be=S.primaryKeys[I]??"id",ge=He(S.tableToModel[I]||I);return W(`LEFT JOIN ${ue} ON ${ue}.${de} = ${I}.${be} AND ${ue}.${ce} = ${ge}`),G.add(ue),ue}let qt=`${fe(I)}_id`,Qt=S.primaryKeys[I]??"id",vt=`${Be(ue)}${Oe(ue)}`;return W(`LEFT JOIN ${ue} ON ${ue}.${qt} = ${I}.${Qt}${vt}`),G.add(ue),ue};for(let I of o){let P=I.name.trim();if(I.callback)C.set(P,I.callback);let Z=P.split("."),ie=h,$e=0;for(let oe of Z){if(!oe||oe.trim().length===0)continue;let Be=oe.trim(),Oe=C.get(Be);ie=Q(ie,Be,$e,Oe)||ie,$e++}k.add(P)}if(Ce.size>0){let I=[];for(let[P,Z]of Ce.entries()){let ie=qe(P);if(!ie)continue;let $e=Z.map((oe)=>`${ie.pivotTable}.${oe} AS pivot_${oe}`);I.push(...$e)}if(I.length>0){let P=I.join(", ");it(P)}}return q=null,this},whereHas(a,o){if(!S)return this;let u=String(g),h=S.relations?.[u];if(!h)throw Error(`[query-builder] No relationships defined for table '${u}'`);let B=Object.entries(h).find(([Z,ie])=>ie&&typeof ie==="object"&&(a in ie));if(!B)throw Error(`[query-builder] Relationship '${a}' not found on table '${u}'`);let[k,C]=B,L=C[a],Q=typeof L==="string"?L:L?.model||L?.target||L,I=S.modelToTable[Q]||Q,P;if(k==="hasMany"||k==="hasOne"){let Z=S.primaryKeys[u]??"id";P=ht(u,I,Z,o)}else if(k==="belongsTo"){let Z=S.primaryKeys[I]??"id";P=gt(u,I,Z,o)}else if(k==="belongsToMany"){let Z=S.primaryKeys[u]??"id",ie=S.primaryKeys[I]??"id";P=ft(u,I,Z,ie,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereHas`);return A("WHERE",`EXISTS (${P})`),this},whereDoesntHave(a,o){if(!S)return this;let u=String(g),h=S.relations?.[u];if(!h)throw Error(`[query-builder] No relationships defined for table '${u}'`);let B=Object.entries(h).find(([Z,ie])=>ie&&typeof ie==="object"&&(a in ie));if(!B)throw Error(`[query-builder] Relationship '${a}' not found on table '${u}'`);let[k,C]=B,L=C[a],Q=typeof L==="string"?L:L?.model||L?.target||L,I=S.modelToTable[Q]||Q,P;if(k==="hasMany"||k==="hasOne"){let Z=S.primaryKeys[u]??"id";P=ht(u,I,Z,o)}else if(k==="belongsTo"){let Z=S.primaryKeys[I]??"id";P=gt(u,I,Z,o)}else if(k==="belongsToMany"){let Z=S.primaryKeys[u]??"id",ie=S.primaryKeys[I]??"id";P=ft(u,I,Z,ie,o,a)}else throw Error(`[query-builder] Unsupported relationship type '${k}' for whereDoesntHave`);return A("WHERE",`NOT EXISTS (${P})`),this},has(a){if(!S)return this;let o=String(g),u=S.relations?.[o];if(!u)throw Error(`[query-builder] No relationships defined for table '${o}'`);let h=Object.entries(u).find(([P,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],L=typeof C==="string"?C:C?.model||C?.target||C,Q=S.modelToTable[L]||L,I;if(B==="hasMany"||B==="hasOne"){let P=S.primaryKeys[o]??"id";I=ht(o,Q,P)}else if(B==="belongsTo"){let P=S.primaryKeys[Q]??"id";I=gt(o,Q,P)}else if(B==="belongsToMany"){let P=S.primaryKeys[o]??"id",Z=S.primaryKeys[Q]??"id";I=ft(o,Q,P,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for has`);return A("WHERE",`EXISTS (${I})`),this},doesntHave(a){if(!S)return this;let o=String(g),u=S.relations?.[o];if(!u)throw Error(`[query-builder] No relationships defined for table '${o}'`);let h=Object.entries(u).find(([P,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],L=typeof C==="string"?C:C?.model||C?.target||C,Q=S.modelToTable[L]||L,I;if(B==="hasMany"||B==="hasOne"){let P=S.primaryKeys[o]??"id";I=ht(o,Q,P)}else if(B==="belongsTo"){let P=S.primaryKeys[Q]??"id";I=gt(o,Q,P)}else if(B==="belongsToMany"){let P=S.primaryKeys[o]??"id",Z=S.primaryKeys[Q]??"id";I=ft(o,Q,P,Z,void 0,a)}else throw Error(`[query-builder] Unsupported relationship type '${B}' for doesntHave`);return A("WHERE",`NOT EXISTS (${I})`),this},withCount(...a){if(!S||!a||a.length===0)return this;let o=String(g);for(let u of a){let h=S.relations?.[o];if(!h)continue;let B=Object.entries(h).find(([$e,oe])=>oe&&typeof oe==="object"&&(u in oe));if(!B)continue;let[k,C]=B,L=C[u],Q=typeof L==="string"?L:L?.model||L?.target||L,I=S.modelToTable[Q]||Q,P=S.primaryKeys[o]??"id",Z;if(k==="hasMany"||k==="hasOne")Z=xt(o,I,P);else if(k==="belongsToMany")Z=Lt(o,I,P,u);else continue;let ie=`${u}_count`;it(`${Z} AS ${ie}`)}return this},withSum(a,o){return bt("SUM",a,o),this},withAvg(a,o){return bt("AVG",a,o),this},withMax(a,o){return bt("MAX",a,o),this},withMin(a,o){return bt("MIN",a,o),this},applyPivotColumns(){return $t(),this},withPivot(a,...o){if(!S)return this;let u=String(g),h=qe(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(Ce.set(a,B),h.hasConfig)Fe.add(a);return $t(),this},wherePivot(a,o,u,h){if(!S)return this;let B=qe(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)"),ot(B);let k=h===void 0?"=":String(u),C=h===void 0?u:h,L=b.length+1,Q=`${B.pivotTable}.${o} ${k} ${t(L)}`;if(b.push(C),R("AND",Q),B.hasConfig)Fe.add(a);return this},wherePivotIn(a,o,u){if(!S||!Array.isArray(u))return this;let h=qe(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)"),ot(h);let B=s(u.length,b.length+1),k=l(`${h.pivotTable}.${o}`,u,!1,B);if(b.push(...u),R("AND",k),h.hasConfig)Fe.add(a);return this},wherePivotNotIn(a,o,u){if(!S||!Array.isArray(u)||u.length===0)return this;let h=qe(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)"),ot(h);let B=s(u.length,b.length+1),k=`${h.pivotTable}.${o} NOT IN (${B})`;if(b.push(...u),R("AND",k),h.hasConfig)Fe.add(a);return this},wherePivotNull(a,o){if(!S)return this;let u=qe(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)"),ot(u),R("AND",`${u.pivotTable}.${o} IS NULL`),u.hasConfig)Fe.add(a);return this},wherePivotNotNull(a,o){if(!S)return this;let u=qe(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)"),ot(u),R("AND",`${u.pivotTable}.${o} IS NOT NULL`),u.hasConfig)Fe.add(a);return this},where(a,o,u){if(typeof a==="string"&&o!==void 0){J(String(a),"where(column)"),De(o,"where(operator)");let h=String(o).toLowerCase();if(h==="in"||h==="not in"){let C=Array.isArray(u)?u:[u],L=s(C.length,b.length+1),Q=l(c(String(a)),C,h==="not in",L);return b.push(...C),R("AND",Q),this}let B=Ve(c(String(a)),h,u,"where");if(B)return R("AND",B),this;let k=b.length+1;return b.push(u),R("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 L=De(B,"where(operator)");if(L==="in"||L==="not in"){let Q=Array.isArray(k)?k:[k],I=s(Q.length,b.length+1),P=l(c(C),Q,L==="not in",I);b.push(...Q),R("AND",P)}else{let Q=Ve(c(C),L,k,"where");if(Q)return R("AND",Q),this;let I=b.length+1;b.push(k),R("AND",`${c(C)} ${L} ${t(I)}`)}return this}if(ut(a))ct("where(expr)");if(ze(a)){let h=Xe(a,b.length+1);return b.push(...h.parameters),R("AND",h.text),this}if(a&&typeof a==="object"&&!_e(a)){let h=a,B=Object.keys(h),k=[];for(let C of B){J(C,"where(column)");let L=h[C];if(Array.isArray(L)){let Q=s(L.length,b.length+1);k.push(l(c(C),L,!1,Q)),b.push(...L)}else{let Q=b.length+1;k.push(`${c(C)} = ${t(Q)}`),b.push(L)}}if(k.length>0)R("AND",k.length>1?`(${k.join(" AND ")})`:k[0]);return this}if(_e(a))return R("AND",a.raw),this;if(typeof a==="function")return z("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)"),R("AND",`${String(a)} IS NULL`),this},whereNotNull(a){return J(String(a),"whereNotNull(column)"),R("AND",`${String(a)} IS NOT NULL`),this},orWhereNull(a){return J(String(a),"orWhereNull(column)"),R("OR",`${String(a)} IS NULL`),this},orWhereNotNull(a){return J(String(a),"orWhereNotNull(column)"),R("OR",`${String(a)} IS NOT NULL`),this},whereBetween(a,o,u){J(String(a),"whereBetween(column)");let h=b.length+1;return b.push(o,u),R("AND",`${String(a)} BETWEEN ${t(h)} AND ${t(h+1)}`),this},orWhereBetween(a,o,u){J(String(a),"orWhereBetween(column)");let h=b.length+1;return b.push(o,u),R("OR",`${String(a)} BETWEEN ${t(h)} AND ${t(h+1)}`),this},whereExists(a){return R("AND",`EXISTS (${a.toSQL()})`),this},orWhereExists(a){return R("OR",`EXISTS (${a.toSQL()})`),this},whereGroup(a){return z("AND",a),this},orWhereGroup(a){return z("OR",a),this},__whereState(){return{body:x(N),params:[...b]}},__sqlState(){return{sql:et(F()),params:[...b]}},whereJsonContains(a,o){J(String(a),"whereJsonContains(column)");let u=e.dialect,h=b.length+1;if(u==="postgres"){let k=typeof o==="number"||typeof o==="boolean"?`to_jsonb(${t(h)})`:t(h);if(e.sql?.jsonContainsMode==="function")R("AND",`jsonb_contains(${a}, ${k})`);else R("AND",`${a} @> ${k}`);b.push(o)}else if(n(u))R("AND",`JSON_CONTAINS(${a}, ${t(h)})`),b.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)})`);R("AND",`(${B.join(" AND ")})`);for(let k of o)b.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 R("AND",`EXISTS (SELECT 1 FROM json_each(${a}) WHERE json_each.value = ${t(h)})`),b.push(o);return this},whereJsonPath(a,o,u){if(De(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=b.length+1;if(h==="postgres")R("AND",`${a} ${o} ${t(B)}`);else if(n(h))R("AND",`JSON_EXTRACT(${a}) ${o} ${t(B)}`);else R("AND",`json_extract(${a}) ${o} ${t(B)}`);return b.push(u),this},whereLike(a,o,u=!1){let h=t(b.length+1);return A("WHERE",`${u?String(a):`LOWER(${String(a)})`} LIKE ${u?h:`LOWER(${h})`}`),b.push(o),q=null,this},whereILike(a,o){let u=t(b.length+1);if(e.dialect==="postgres")A("WHERE",`${String(a)} ILIKE ${u}`);else A("WHERE",`LOWER(${String(a)}) LIKE LOWER(${u})`);return b.push(o),q=null,this},orWhereLike(a,o,u=!1){let h=t(b.length+1);return A("OR",`${u?String(a):`LOWER(${String(a)})`} LIKE ${u?h:`LOWER(${h})`}`),b.push(o),q=null,this},orWhereILike(a,o){let u=t(b.length+1);if(e.dialect==="postgres")A("OR",`${String(a)} ILIKE ${u}`);else A("OR",`LOWER(${String(a)}) LIKE LOWER(${u})`);return b.push(o),q=null,this},whereNotLike(a,o,u=!1){let h=t(b.length+1);return A("WHERE",`${u?String(a):`LOWER(${String(a)})`} NOT LIKE ${u?h:`LOWER(${h})`}`),b.push(o),q=null,this},whereNotILike(a,o){let u=t(b.length+1);if(e.dialect==="postgres")A("WHERE",`${String(a)} NOT ILIKE ${u}`);else A("WHERE",`LOWER(${String(a)}) NOT LIKE LOWER(${u})`);return b.push(o),q=null,this},orWhereNotLike(a,o,u=!1){let h=t(b.length+1);return A("OR",`${u?String(a):`LOWER(${String(a)})`} NOT LIKE ${u?h:`LOWER(${h})`}`),b.push(o),q=null,this},orWhereNotILike(a,o){let u=t(b.length+1);if(e.dialect==="postgres")A("OR",`${String(a)} NOT ILIKE ${u}`);else A("OR",`LOWER(${String(a)}) NOT LIKE LOWER(${u})`);return b.push(o),q=null,this},whereAny(a,o,u){if(a.length===0)return R("AND",`(${Gt})`),this;let h=b.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)b.push(u);return R("AND",`(${B.join(" OR ")})`),this},whereAll(a,o,u){if(a.length===0)return this;let h=b.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)b.push(u);return R("AND",`(${B.join(" AND ")})`),this},whereNone(a,o,u){if(a.length===0)return this;let h=b.length+1,B=a.map((k,C)=>`${k} ${o} ${t(h+C)}`);for(let k=0;k<a.length;k++)b.push(u);return R("AND",`NOT (${B.join(" OR ")})`),this},whereNotBetween(a,o,u){J(String(a),"whereNotBetween(column)");let h=b.length+1;return b.push(o,u),R("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=b.length+1;return b.push(h),R("AND",`${a} ${o} ${t(B)}`),this},whereRaw(a,...o){return R("AND",Ze(a,"whereRaw(fragment)",o)),this},orWhereRaw(a,...o){return R("OR",Ze(a,"orWhereRaw(fragment)",o)),this},whereColumn(a,o,u){return J(a,"whereColumn(left)"),J(u,"whereColumn(right)"),R("AND",`${a} ${o} ${u}`),this},orWhereColumn(a,o,u){return J(a,"orWhereColumn(left)"),J(u,"orWhereColumn(right)"),R("OR",`${a} ${o} ${u}`),this},whereIn(a,o){if(J(String(a),"whereIn(column)"),Array.isArray(o)){let u=s(o.length,b.length+1),h=l(a,o,!1,u);b.push(...o),R("AND",h)}else U("AND",a,o,!1);return this},orWhereIn(a,o){if(J(String(a),"orWhereIn(column)"),Array.isArray(o)){let u=s(o.length,b.length+1),h=l(a,o,!1,u);b.push(...o),R("OR",h)}else U("OR",a,o,!1);return this},whereNotIn(a,o){if(J(String(a),"whereNotIn(column)"),Array.isArray(o)){let u=s(o.length,b.length+1),h=l(a,o,!0,u);b.push(...o),R("AND",h)}else U("AND",a,o,!0);return this},orWhereNotIn(a,o){if(J(String(a),"orWhereNotIn(column)"),Array.isArray(o)){let u=s(o.length,b.length+1),h=l(a,o,!0,u);b.push(...o),R("OR",h)}else U("OR",a,o,!0);return this},whereNested(a){let o=a.toSQL?String(a.toSQL()):String(a);return R("AND",`(${o})`),this},orWhereNested(a){let o=a.toSQL?String(a.toSQL()):String(a);return R("OR",`(${o})`),this},andWhere(a,o,u){return Y(this,"AND","andWhere",a,o,u)},orWhere(a,o,u){return Y(this,"OR","orWhere",a,o,u)},orderBy(a,o="asc"){let u=o==="asc"?"ASC":"DESC",h=c(String(a));return y=he.ORDER_BY.test(y)?`${y}, ${h} ${u}`:`${y} ORDER BY ${h} ${u}`,q=null,this},orderByDesc(a){return y=he.ORDER_BY.test(y)?`${y}, ${a} DESC`:`${y} ORDER BY ${a} DESC`,q=null,this},inRandomOrder(){let a=e.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return y=he.ORDER_BY.test(y)?`${y}, ${a}`:`${y} ORDER BY ${a}`,q=null,this},reorder(a,o="asc"){return y=y.replace(/ORDER BY[\s\S]*$/i,""),y+=` ORDER BY ${a} ${o==="asc"?"ASC":"DESC"}`,q=null,this},latest(a){let o=a??e.timestamps.defaultOrderColumn;return y=he.ORDER_BY.test(y)?`${y}, ${o} DESC`:`${y} ORDER BY ${o} DESC`,q=null,this},oldest(a){let o=a??e.timestamps.defaultOrderColumn;return y=he.ORDER_BY.test(y)?`${y}, ${o} ASC`:`${y} ORDER BY ${o} ASC`,q=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 y=he.LIMIT.test(y)?y.replace(he.LIMIT,` LIMIT ${a}`):`${y} LIMIT ${a}`,q=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 y=he.OFFSET.test(y)?y.replace(he.OFFSET,` OFFSET ${a}`):`${y} OFFSET ${a}`,q=null,this},join(a,o,u,h){return J(a,"join(table)"),Qe(o,"join(onLeft)"),Qe(h,"join(onRight)"),De(u,"join(operator)"),W(`JOIN ${a} ON ${o} ${u} ${h}`),G.add(a),this},joinSub(a,o,u,h,B){return J(o,"joinSub(alias)"),Qe(u,"joinSub(onLeft)"),Qe(B,"joinSub(onRight)"),De(h,"joinSub(operator)"),W(`JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),G.add(o),this},innerJoin(a,o,u,h){return J(a,"innerJoin(table)"),Qe(o,"innerJoin(onLeft)"),Qe(h,"innerJoin(onRight)"),De(u,"innerJoin(operator)"),W(`INNER JOIN ${a} ON ${o} ${u} ${h}`),G.add(a),this},leftJoin(a,o,u,h){return J(a,"leftJoin(table)"),Qe(o,"leftJoin(onLeft)"),Qe(h,"leftJoin(onRight)"),De(u,"leftJoin(operator)"),W(`LEFT JOIN ${a} ON ${o} ${u} ${h}`),G.add(a),this},leftJoinSub(a,o,u,h,B){return J(o,"leftJoinSub(alias)"),Qe(u,"leftJoinSub(onLeft)"),Qe(B,"leftJoinSub(onRight)"),De(h,"leftJoinSub(operator)"),W(`LEFT JOIN (${String(a.toSQL())}) AS ${o} ON ${u} ${h} ${B}`),G.add(o),this},rightJoin(a,o,u,h){return J(a,"rightJoin(table)"),Qe(o,"rightJoin(onLeft)"),Qe(h,"rightJoin(onRight)"),De(u,"rightJoin(operator)"),W(`RIGHT JOIN ${a} ON ${o} ${u} ${h}`),G.add(a),this},crossJoin(a){return J(a,"crossJoin(table)"),W(`CROSS JOIN ${a}`),G.add(a),this},crossJoinSub(a,o){return J(o,"crossJoinSub(alias)"),W(`CROSS JOIN (${String(a.toSQL())}) AS ${o}`),G.add(o),this},selectAllRelations(){if(!H)return this;let a=String(g),o=Object.keys(H[a]?.columns??{}),u=[];if(o.length>0)u.push(d`${d(a)}.*`);for(let h of G){let B=Object.keys(H[h]?.columns??{});for(let k of B){let C=e.aliasing.relationColumnAliasFormat==="camelCase"?`${h}_${k}`.replace(/_([a-z])/g,(L,Q)=>Q.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${h}.${k}`:`${h}_${k}`;u.push(d`${d(`${h}.${k}`)} AS ${d(C)}`)}}if(u.length>0){let h=o.length>0?`${a}.*`:"",B=[];for(let L of G){let Q=Object.keys(H[L]?.columns??{});for(let I of Q){let P=e.aliasing.relationColumnAliasFormat==="camelCase"?`${L}_${I}`.replace(/_([a-z])/g,(Z,ie)=>ie.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${L}.${I}`:`${L}_${I}`;B.push(`${L}.${I} AS ${P}`)}}let k=[h,...B].filter(Boolean).join(", "),C=y.indexOf(" FROM ");if(C!==-1)y=`SELECT ${k}${y.substring(C)}`;else y=`SELECT ${k} FROM ${a}`;q=null}return this},groupBy(...a){if(a.length)y=he.GROUP_BY.test(y)?`${y}, ${a.map((o)=>c(String(o))).join(", ")}`:`${y} GROUP BY ${a.map((o)=>c(String(o))).join(", ")}`,q=null;return this},groupByRaw(a,...o){let u=Ze(a,"groupByRaw(fragment)",o);return y=he.GROUP_BY.test(y)?`${y}, ${u}`:`${y} GROUP BY ${u}`,q=null,this},having(a){let o=j?"AND":"HAVING";if(Array.isArray(a)){let u=b.length+1;y=`${y} ${o} ${a[0]} ${a[1]} ${t(u)}`,b.push(a[2]),j=!0,q=null}else if(a&&typeof a==="object"&&!("raw"in a)){let u=Object.keys(a),h=u.length;if(h){let B=b.length,k=Array.from({length:h});for(let C=0;C<h;C++){let L=u[C];k[C]=`${L} = ${t(B+C+1)}`,b.push(a[L])}y=`${y} ${o} ${k.join(" AND ")}`,j=!0,q=null}}else if(a&&typeof a.raw<"u")y+=` ${o} ${a.raw}`,j=!0,q=null;return this},havingRaw(a,...o){let u=Ze(a,"havingRaw(fragment)",o);return y+=` ${j?"AND":"HAVING"} ${u}`,j=!0,q=null,this},orderByRaw(a,...o){let u=Ze(a,"orderByRaw(fragment)",o);return y=he.ORDER_BY.test(y)?`${y}, ${u}`:`${y} ORDER BY ${u}`,q=null,this},$call(a){return a(this),this},union(a){return ne("UNION",a),this},unionAll(a){return ne("UNION ALL",a),this},intersect(a){return ne("INTERSECT",a),this},intersectAll(a){return ne("INTERSECT ALL",a),this},except(a){return ne("EXCEPT",a),this},exceptAll(a){return ne("EXCEPT ALL",a),this},forPage(a,o){let u=Math.max(1,Math.floor(a)),h=Math.max(1,Math.floor(o));return y+=` LIMIT ${h} OFFSET ${(u-1)*h}`,q=null,this},toSQL(){let a=et(F());return{sql:a,toString:()=>a,execute:()=>E().execute(),values:()=>E().values(),raw:()=>E().raw()}},async value(a){let o=K(""," LIMIT 1"),u=await se(o,"select",{signal:ee,timeoutMs:re}),[h]=u;return h?.[a]},async pluck(a,o){let u=await se(E(),"select",{signal:ee,timeoutMs:re});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=K("SELECT EXISTS (",") as e"),o=await se(a,"select",{signal:ee,timeoutMs:re}),[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=et(F()),ie=p([...b]),$e=await u.tx.unsafe(`SELECT COUNT(*) as c FROM (${Z}) as sub`,ie),oe=Number($e?.[0]?.c??0),Be=Math.max(1,Math.ceil(oe/a)),Oe=Math.max(1,Math.min(o,Be)),Ne=(Oe-1)*a;return{data:await u.tx.unsafe(`${Z} LIMIT ${a} OFFSET ${Ne}`,ie),meta:{perPage:a,page:Oe,total:oe,lastPage:Be}}}let h=K("SELECT COUNT(*) as c FROM (",") as sub"),B=await se(h,"select",{signal:ee,timeoutMs:re}),[k]=B,C=Number(k?.c??0),L=Math.max(1,Math.ceil(C/a)),Q=Math.max(1,Math.min(o,L)),I=(Q-1)*a;return{data:await se(K("",` LIMIT ${t(b.length+1)} OFFSET ${t(b.length+2)}`,[a,I]),"select",{signal:ee,timeoutMs:re}),meta:{perPage:a,page:Q,total:C,lastPage:L}}},async simplePaginate(a,o=1){let u=Math.max(1,o),h=(u-1)*a,B=await se(K("",` LIMIT ${t(b.length+1)} OFFSET ${t(b.length+2)}`,[a+1,h]),"select",{signal:ee,timeoutMs:re}),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 Ee of B)J(Ee,"cursorPaginate(column)");let k=h==="asc"?">":"<",C=h==="asc"?"ASC":"DESC",L=[...b],Q="";if(o!==void 0&&o!==null)if(Array.isArray(u)){let Ee=o.map((ue)=>(L.push(ue),t(L.length)));Q=`(${B.join(", ")}) ${k} (${Ee.join(", ")})`}else L.push(o),Q=`${B[0]} ${k} ${t(L.length)}`;let I=et(Q?F({conn:"AND",sql:Q}):F()),P=B.map((Ee)=>`${Ee} ${C}`).join(", ");if(Kt(I))throw TypeError("[query-builder] cursorPaginate() cannot be combined with orderBy() \u2014 it orders by "+`${P} itself, and a cursor is only meaningful in that order. Remove the orderBy(), or pass the column and direction to cursorPaginate().`);let Z=L.length>0?O(`${I} ORDER BY ${P} LIMIT ${a+1}`,L):O(`${I} ORDER BY ${P} LIMIT ${a+1}`),ie=await se(Z,"select",{signal:ee,timeoutMs:re}),$e=ie.length>a,oe=ie.slice(0,a),Be=oe[oe.length-1],Oe=$e&&Be?Array.isArray(u)?u.map((Ee)=>Be[Ee]):Be[u]:null,Ne=oe.length?Array.isArray(u)?u.map((Ee)=>oe[0]?.[Ee]):oe[0]?.[u]:null;return{data:oe,meta:{perPage:a,nextCursor:Oe??null,prevCursor:Ne}}},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 re=Math.max(1,Math.floor(a)),this},abort(a){return ee=a,this},withTrashed(){return ye=!0,we=!1,this},onlyTrashed(){ye=!0,we=!0;let a=e.softDeletes?.column||"deleted_at";return R("AND",`${g}.${a} IS NOT NULL`),this},scope(a,o){let u=String(g),B=S?.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(E())),this},dd(){throw console.log(String(E())),Error("Dump and Die")},cache(a=60000){return Tt=a,Ie=!0,this},async explain(){let a=K("EXPLAIN ");return await se(a,"select",{signal:ee,timeoutMs:re})},simple(){return E().simple()},toText(){return F()},async get(){let a=pe(),o=a&&(a.onQueryStart||a.onQueryEnd||a.onQueryError||a.startSpan||dt(a));if(!e.softDeletes?.enabled&&!Ie&&!re&&!ee&&!o){let L=D._prepareStatement;if(L){let Q=L(F());return at(b.length>0?Q.all(...b):Q.all())}}let u=F();if(q=b.length>0?O(u,b):O(u),!e.softDeletes?.enabled&&!Ie&&!re&&!ee&&!o){let L=E()._stmt,Q=E()._params;if(L)return at(Q&&Q.length>0?L.all(...Q):L.all());return at(await E().execute())}if(!e.softDeletes?.enabled&&!Ie&&!re&&!ee)return at(await se(E(),"select"));let h=E();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!ye){let L=e.softDeletes.column,Q=String(g);if((H?Boolean(H[Q]?.columns?.[L]):!0)&&!he.DELETED_AT.test(F()))A("WHERE",`${String(L)} IS ${we?"NOT ":""}NULL`),h=E()}let B=Ie&&!w?.inTransaction,k=B?Vt(D,F(),b):"";if(B){let L=wt.get(k);if(L)return L}let C=await se(h,"select",{signal:ee,timeoutMs:re});if(B)wt.set(k,C,Tt);return at(C)},async executeTakeFirst(){let a=await se(E(),"select",{signal:ee,timeoutMs:re});return st(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||dt(a));if(!e.softDeletes?.enabled&&!Ie&&!re&&!ee&&!o){let B=D._prepareStatement;if(B){let k=F(),C=k.includes(" LIMIT ")?k:`${k} LIMIT 1`,L=B(C),Q=b.length>0?L.all(...b):L.all();return st(Q[0])}}let u=await se(K(""," LIMIT 1"),"select",{signal:ee,timeoutMs:re}),[h]=u;return st(h)},async firstOrFail(){let a=await this.first();if(!a)throw Error("Record not found");return a},async find(a){let o=S?.primaryKeys[String(g)]??"id",u=await se(K("",` WHERE ${Re(o)} = ${t(b.length+1)} LIMIT 1`,[a]),"select",{signal:ee,timeoutMs:re}),[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=S?.primaryKeys[String(g)]??"id";return await se(K("",` WHERE ${l(Re(String(o)),a,!1,s(a.length,b.length+1))}`,a),"select",{signal:ee,timeoutMs:re})},async*lazy(){let a,o=S?.primaryKeys[String(g)]??"id";while(!0){let h=await(a==null?d`${E()} ORDER BY ${d(String(o))} ASC LIMIT 100`:d`${E()} WHERE ${d(String(o))} > ${a} ORDER BY ${d(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=S?.primaryKeys[String(g)]??"id",o;while(!0){let h=await(o==null?d`${E()} ORDER BY ${d(String(a))} ASC LIMIT 100`:d`${E()} WHERE ${d(String(a))} > ${o} ORDER BY ${d(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=F(),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||dt(B));if(!e.softDeletes?.enabled&&!Ie&&!re&&!ee&&!k){let I=D._prepareStatement;if(I){let P=I(h),Z=b.length>0?P.all(...b):P.all();return Number(Z[0]?.c??0)}}let C=b.length>0?O(h,b):O(h),L=await se(C,"select",{signal:ee,timeoutMs:re}),[Q]=L;return Number(Q?.c??0)},async avg(a){let o=F(),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||dt(B));if(!e.softDeletes?.enabled&&!Ie&&!re&&!ee&&!k){let I=D._prepareStatement;if(I){let P=I(h),Z=b.length>0?P.all(...b):P.all();return Number(Z[0]?.a??0)}}let C=b.length>0?O(h,b):O(h),L=await se(C,"select",{signal:ee,timeoutMs:re}),[Q]=L;return Number(Q?.a??0)},async sum(a){let o=F(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT SUM(${a}) as s${o.substring(u)}`:`SELECT SUM(${a}) as s FROM ${g}`,B=b.length>0?O(h,b):O(h),k=await se(B,"select",{signal:ee,timeoutMs:re}),[C]=k;return Number(C?.s??0)},async max(a){let o=F(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT MAX(${a}) as m${o.substring(u)}`:`SELECT MAX(${a}) as m FROM ${g}`,B=b.length>0?O(h,b):O(h),k=await se(B,"select",{signal:ee,timeoutMs:re}),[C]=k;return C?.m},async min(a){let o=F(),u=o.indexOf(" FROM "),h=u!==-1?`SELECT MIN(${a}) as m${o.substring(u)}`:`SELECT MIN(${a}) as m FROM ${g}`,B=b.length>0?O(h,b):O(h),k=await se(B,"select",{signal:ee,timeoutMs:re}),[C]=k;return C?.m},lockForUpdate(){return y+=" FOR UPDATE",q=null,this},sharedLock(){let a=e.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return y+=` ${a}`,q=null,this},withCTE(a,o){return J(a,"withCTE(name)"),y=`WITH ${a} AS (${String(o.toSQL())}) ${y}`,q=null,this},withRecursive(a,o){return J(a,"withRecursive(name)"),y=`WITH RECURSIVE ${a} AS (${String(o.toSQL())}) ${y}`,q=null,this},execute(){return se(E(),"select",{signal:ee,timeoutMs:re})},values(){return E().values()},toParams(){return[...b]},__rawState(){return{sql:et(F()),params:[...b]}},__hasPredicate(){return N.length>0||M},raw(){return E().raw()},get rows(){return},get row(){return},cancel(){try{E().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}`,L=Ge.get(C);if(L===void 0){let I=o.replace(/^(?:or|and)?where/i,"");if(!I)Ge.set(C,""),L="";else{let P=I.charAt(0).toLowerCase()+I.slice(1),Z=I.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),ie=H?Object.keys(H[String(g)]?.columns??{}):[];L=[Z,P,P.toLowerCase()].find(($e)=>ie.includes($e))??Z,Ge.set(C,L)}}if(L==="")return()=>u;let Q=L;return(I)=>{if(Array.isArray(I)){let P=s(I.length,b.length+1);A(B?"OR":k?"AND":"WHERE",`${Q} IN (${P})`),b.push(...I)}else{let P=t(b.length+1);A(B?"OR":k?"AND":"WHERE",`${Q} = ${P}`),b.push(I)}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 D(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 D(g)},select(g,...f){return je(g,f)},selectFrom(g){return je(g)},selectFromSub(g,f){function d(E){return()=>{throw Error(`[query-builder] selectFromSub(...).${E}() is not supported. Apply ${E}() 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 y=typeof g.__rawState==="function"?g.__rawState():null,N=g.toSQL(),b=y?.sql??(typeof N==="string"?N:N?.sql??String(N)),X=y?.params??(Array.isArray(N?.values)?N.values:[]),M=`SELECT * FROM (${b}) AS ${String(f)}`,j=(E,K,R,A)=>{let V=[...E],F=(z,Y,ne)=>{J(z,"selectFromSub where(column)");let W=De(Y,"selectFromSub where(operator)");if(W==="in"||W==="not in"){let re=Array.isArray(ne)?ne:[ne],ee=s(re.length,V.length+1);return V.push(...re),`${z} ${W.toUpperCase()} (${ee})`}let G=t(V.length+1);return V.push(ne),`${z} ${W} ${G}`},U;if(typeof K==="string"&&R!==void 0)U=F(K,R,A);else if(Array.isArray(K)&&K.length===3)U=F(K[0],K[1],K[2]);else if(K&&typeof K==="object"){let z=Object.entries(K).map(([Y,ne])=>F(Y,"=",ne));U=z.length>1?`(${z.join(" AND ")})`:z[0]}else return{clause:null,params:E};return{clause:U,params:V}};function q(E,K,R,A=""){let V=x(K),F=V?`${E} WHERE ${V}${A}`:`${E}${A}`,U=()=>R.length>0?O(F,R):O(F),z=(W,G,re,ee)=>{let ye=j(R,G,re,ee);return ye.clause===null?q(E,K,R,A):q(E,[...K,{conn:W,sql:ye.clause}],ye.params,A)},Y=(W,G)=>{let re=[],ee=[...R],ye=(Ce)=>(Fe,Tt,fe)=>{let qe=j(ee,Fe,Tt,fe);if(qe.clause!==null)re.push({conn:Ce,sql:qe.clause}),ee=qe.params;return we},we={where:ye("AND"),andWhere:ye("AND"),orWhere:ye("OR")};G(we);let Ie=x(re);if(!Ie)throw TypeError("[query-builder] selectFromSub.whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");return q(E,[...K,{conn:W,sql:`(${Ie})`}],ee,A)},ne={distinct(){return q(E.replace(/^SELECT\s+/i,"SELECT DISTINCT "),K,R,A)},distinctOn(...W){let G=W.map(String).join(", ");return q(E.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${G}) `),K,R,A)},selectRaw(W,...G){let re=Ze(W,"selectFromSub.selectRaw(fragment)",G),ee=E.indexOf(" FROM "),ye=ee!==-1?`${E.slice(0,ee)}, ${re}${E.slice(ee)}`:`${E}, ${re}`;return q(ye,K,R,A)},$call(W){return W(this)??this},where(W,G,re){return z("AND",W,G,re)},andWhere(W,G,re){return z("AND",W,G,re)},orWhere(W,G,re){return z("OR",W,G,re)},whereGroup(W){return Y("AND",W)},orWhereGroup(W){return Y("OR",W)},orderBy(W,G="asc"){J(String(W),"selectFromSub.orderBy(column)");let re=G==="asc"?"ASC":"DESC",ee=he.ORDER_BY.test(A)?`${A}, ${W} ${re}`:`${A} ORDER BY ${W} ${re}`;return q(E,K,R,ee)},limit(W){if(!Number.isInteger(W)||W<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${W}`);let G=he.LIMIT.test(A)?A.replace(he.LIMIT,` LIMIT ${W}`):`${A} LIMIT ${W}`;return q(E,K,R,G)},offset(W){if(!Number.isInteger(W)||W<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${W}`);let G=he.OFFSET.test(A)?A.replace(he.OFFSET,` OFFSET ${W}`):`${A} OFFSET ${W}`;return q(E,K,R,G)},toSQL(){return xe(U(),F)},async execute(){return se(U(),"select")},async executeTakeFirst(){let W=await se(U(),"select");return Array.isArray(W)?W[0]:W},async executeTakeFirstOrThrow(){let W=await se(U(),"select"),G=Array.isArray(W)?W[0]:W;if(!G)throw Error("Record not found");return G},async get(){return se(U(),"select")},async first(){let W=await se(U(),"select");return Array.isArray(W)?W[0]:W},async firstOrFail(){let W=await se(U(),"select"),G=Array.isArray(W)?W[0]:W;if(!G)throw Error("No rows found");return G},async count(){let W=R.length>0?O(`SELECT COUNT(*) as c FROM (${F}) as sub`,R):O(`SELECT COUNT(*) as c FROM (${F}) as sub`),G=await se(W,"select");return Number(G?.[0]?.c??0)},async exists(){let W=R.length>0?O(`SELECT EXISTS(${F}) as e`,R):O(`SELECT EXISTS(${F}) as e`),G=await se(W,"select");return Boolean(G?.[0]?.e)},async doesntExist(){return!await ne.exists()},values(){return U().values()},raw(){return U().raw()},cancel(){try{U().cancel()}catch{}},whereRaw:d("whereRaw"),whereColumn:d("whereColumn"),orWhereColumn:d("orWhereColumn"),whereIn:d("whereIn"),orWhereIn:d("orWhereIn"),whereNotIn:d("whereNotIn"),orWhereNotIn:d("orWhereNotIn"),whereLike:d("whereLike"),whereILike:d("whereILike"),orWhereLike:d("orWhereLike"),orWhereILike:d("orWhereILike"),whereNotLike:d("whereNotLike"),whereNotILike:d("whereNotILike"),orWhereNotLike:d("orWhereNotLike"),orWhereNotILike:d("orWhereNotILike"),whereAny:d("whereAny"),whereAll:d("whereAll"),whereNone:d("whereNone"),whereNested:d("whereNested"),orWhereNested:d("orWhereNested"),whereDate:d("whereDate"),whereBetween:d("whereBetween"),whereNotBetween:d("whereNotBetween"),whereJsonContains:d("whereJsonContains"),whereJsonPath:d("whereJsonPath"),whereNull:d("whereNull"),orWhereNull:d("orWhereNull"),whereNotNull:d("whereNotNull"),orWhereNotNull:d("orWhereNotNull"),whereExists:d("whereExists"),orWhereExists:d("orWhereExists"),orWhereBetween:d("orWhereBetween"),orWhereRaw:d("orWhereRaw"),whereJsonDoesntContain:d("whereJsonDoesntContain"),whereJsonContainsKey:d("whereJsonContainsKey"),whereJsonDoesntContainKey:d("whereJsonDoesntContainKey"),whereJsonLength:d("whereJsonLength"),join:d("join"),joinSub:d("joinSub"),innerJoin:d("innerJoin"),leftJoin:d("leftJoin"),leftJoinSub:d("leftJoinSub"),rightJoin:d("rightJoin"),crossJoin:d("crossJoin"),crossJoinSub:d("crossJoinSub"),groupBy:d("groupBy"),groupByRaw:d("groupByRaw"),having:d("having"),havingRaw:d("havingRaw"),addSelect:d("addSelect"),select:d("select"),selectAll:d("selectAll"),orderByDesc:d("orderByDesc"),inRandomOrder:d("inRandomOrder"),reorder:d("reorder"),orderByRaw:d("orderByRaw"),union:d("union"),unionAll:d("unionAll"),forPage:d("forPage"),selectAllRelations:d("selectAllRelations"),with:d("with"),value:d("value"),pluck:d("pluck"),cursorPaginate:d("cursorPaginate"),paginate:d("paginate"),simplePaginate:d("simplePaginate"),chunk:d("chunk"),chunkById:d("chunkById"),eachById:d("eachById"),avg:d("avg"),sum:d("sum"),max:d("max"),min:d("min"),find:d("find"),findOrFail:d("findOrFail"),findMany:d("findMany"),latest:d("latest"),oldest:d("oldest"),lazy:d("lazy"),lazyById:d("lazyById"),pipe:(W)=>W(ne),when:d("when"),tap:()=>ne,dump:()=>ne,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>U().simple(),toText:()=>F,toParams:()=>[...R],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 q(M,[],X)},insertInto(g){let f,d="",y=[],N=[],b=!1,X=()=>j?[]:{changes:0,lastInsertRowid:0},M=()=>{let A=async()=>{return},V=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>M(),andWhere:()=>M(),orWhere:()=>M(),orderBy:()=>M(),limit:()=>M(),offset:()=>M(),toSQL:()=>xe(null,""),execute:async()=>[],get:async()=>[],first:A,executeTakeFirst:A,firstOrFail:V,executeTakeFirstOrThrow:V}},j=e.dialect==="postgres",q=(A)=>{let F=A.flat(2).map(String).filter(Boolean),U=F.length>0&&!F.includes("*")?F.map((ne)=>E(ne)).join(", "):"*",z=async()=>{let ne=await se(O(d,y),"insert"),W=Number(ne?.lastInsertRowid??0),G=Math.max(1,Number(ne?.affectedRows??1)),re=N.filter((we)=>we!==void 0&&we!==null),ee=W>0?O(`SELECT ${U} FROM ${E(String(g))} WHERE ${E("id")} >= ? AND ${E("id")} < ? ORDER BY ${E("id")} ASC`,[W,W+G]):re.length>0?O(`SELECT ${U} FROM ${E(String(g))} WHERE ${E("id")} IN (${re.map(()=>"?").join(", ")}) ORDER BY ${E("id")} ASC`,re):null;if(!ee)return[];let ye=await ee.execute();return Array.isArray(ye)?ye:[]},Y=async()=>(await z())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>xe(O(d,y),d),execute:z,get:z,first:Y,executeTakeFirst:Y,async firstOrFail(){let ne=await Y();if(!ne)throw Error("Insert with RETURNING returned no rows");return ne},async executeTakeFirstOrThrow(){let ne=await Y();if(!ne)throw Error("Insert with RETURNING returned no rows");return ne}}},E=j?(A)=>`"${String(A).replace(/"/g,'""')}"`:n(e.dialect)?(A)=>`\`${String(A).replace(/`/g,"``")}\``:(A)=>`"${String(A).replace(/"/g,'""')}"`,K=j?"postgres":n(e.dialect)?"mysql":"sqlite",R=j?(A)=>`$${A+1}`:(A)=>"?";return{values(A){let V=ke(String(g),Array.isArray(A)?A:[A]),F=V.length;if(N=V.map((ee)=>ee?.id),F===0)return b=!0,f=null,d="",y.length=0,this;b=!1;let U=V[0],z=Object.keys(U),Y=z.length,ne=F*Y;y.length=ne;let W=F===1&&Y>0&&typeof g==="string",G=W?le?.get(g):void 0,re=G?.quoteStyle===K&&G.columns.length===Y;if(re){for(let ee=0;ee<Y;ee++)if(G.columns[ee]!==z[ee]){re=!1;break}}if(re){d=G.sql;for(let ee=0;ee<Y;ee++)y[ee]=U[z[ee]]}else if(F===1)if(!j){let ee=E(z[0]),ye="?";y[0]=U[z[0]];for(let we=1;we<Y;we++)ee+=`,${E(z[we])}`,ye+=",?",y[we]=U[z[we]];d=`INSERT INTO ${E(g)}(${ee})VALUES(${ye})`}else{let ee=z.map((ye)=>E(ye)).join(",");d=`INSERT INTO ${E(g)}(${ee})VALUES(`;for(let ye=0;ye<Y;ye++){if(ye>0)d+=",";d+=R(ye),y[ye]=U[z[ye]]}d+=")"}else{let ee=z.map((we)=>E(we)).join(",");d=`INSERT INTO ${E(g)}(${ee})VALUES`;let ye=0;for(let we=0;we<F;we++){let Ie=V[we];if(we===0)d+="(";else d+="),(";for(let Ce=0;Ce<Y;Ce++){if(Ce>0)d+=",";d+=R(ye),y[ye++]=Ie[z[Ce]]}}d+=")"}if(W&&!re&&d.length<=8192){if(le??=new Map,le.size>=32&&!le.has(g)){let ee=le.keys().next().value;if(ee!==void 0)le.delete(ee)}le.set(g,{columns:z,quoteStyle:K,sql:d})}if(!D._prepareStatement)f=O(d,y);return this},returning(...A){if(b)return M();if(n(e.dialect))return q(A);let V=`${d} RETURNING ${A.join(", ")}`,F=O(V,y),U=async()=>{let z=await se(F,"insert");return Array.isArray(z)?z[0]:z};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>xe(F,V),execute:()=>se(F,"insert"),get:()=>se(F,"insert"),first:U,executeTakeFirst:U,async firstOrFail(){let z=await U();if(!z)throw Error("Insert with RETURNING returned no rows");return z},async executeTakeFirstOrThrow(){let z=await U();if(!z)throw Error("Insert with RETURNING returned no rows");return z}}},toSQL(){if(b)return xe(null,"");if(!f)f=O(d,y);return xe(f,d)},execute(){if(b)return Promise.resolve(X());let A=pe();if(!(A&&(A.onQueryStart||A.onQueryEnd||A.onQueryError||A.startSpan||A.beforeCreate||A.afterCreate||dt(A)))){let F=D._prepareStatement;if(F){let U=F(d);return y.length>0?U.run(...y):U.run()}}if(!f)f=O(d,y);return se(f,"insert")},async executeTakeFirst(){if(b)return X();if(!f)f=O(d,y);return await se(f,"insert")},async executeTakeFirstOrThrow(){if(b)throw Error("Insert failed");if(!f)f=O(d,y);let A=await se(f,"insert");if(!A)throw Error("Insert failed");return A},returningAll(){return this.returning("*")}}},updateTable(g){let f,d=[],y=(M)=>{let j=String(M);if(n(e.dialect))return`\`${j.replace(/`/g,"``")}\``;return`"${j.replace(/"/g,'""')}"`},N=`UPDATE ${y(String(g))}`,b=!1,X=(M)=>{N=`${N} ${b?"AND":"WHERE"} ${M}`,b=!0};return{set(M){let j=ke(String(g),[M])[0],q=Object.keys(j),E=q.length,K=Array.from({length:E});for(let R=0;R<E;R++){let A=q[R],V=j[A];if(ut(V))ct(`set(${A})`);if(_e(V))K[R]=`${y(A)} = ${V.raw}`;else if(ze(V)){let F=Xe(V,d.length+1);K[R]=`${y(A)} = ${F.text}`,d.push(...F.parameters)}else K[R]=`${y(A)} = ${t(d.length+1)}`,d.push(V)}return N=`${N} SET ${K.join(", ")}`,f=O(N,d),this},where(M,j,q){if(j!==void 0&&(typeof M==="string"||_e(M)||ze(M))){let E=De(j,"updateTable.where"),K;if(typeof M==="string")K=y(M);else if(_e(M))K=M.raw;else{let V=Xe(M,d.length+1);K=V.text,d.push(...V.parameters)}if(E.toLowerCase()==="in"||E.toLowerCase()==="not in"){let V=Array.isArray(q)?q:[q],F=s(V.length,d.length+1);return X(`${K} ${E.toUpperCase()} (${F})`),d.push(...V),f=O(N,d),this}let R=Ve(K,E,q,"updateTable.where");if(R)return X(R),f=O(N,d),this;let A=d.length+1;return X(`${K} ${E} ${t(A)}`),d.push(q),f=O(N,d),this}if(Array.isArray(M)){let[E,K,R]=M,A=De(K,"updateTable.where");if(A.toLowerCase()==="in"||A.toLowerCase()==="not in"){let U=Array.isArray(R)?R:[R],z=s(U.length,d.length+1);return X(`${y(String(E))} ${A.toUpperCase()} (${z})`),d.push(...U),f=O(N,d),this}let V=Ve(y(String(E)),A,R,"updateTable.where");if(V)return X(V),f=O(N,d),this;let F=d.length+1;return X(`${y(String(E))} ${A} ${t(F)}`),d.push(R),f=O(N,d),this}if(ut(M))ct("updateTable.where(expr)");if(_e(M))return X(M.raw),f=O(N,d),this;if(ze(M)){let E=Xe(M,d.length+1);return X(E.text),d.push(...E.parameters),f=O(N,d),this}if(M&&typeof M==="object"){let E=Object.keys(M);if(E.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 K=E.map((R)=>St(y(R),M[R],d));return X(K.join(" AND ")),f=O(N,d),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${M===null?"null":typeof M}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(M){return X(`${y(String(M))} IS NULL`),f=O(N,d),this},whereNotNull(M){return X(`${y(String(M))} IS NOT NULL`),f=O(N,d),this},returning(...M){let j=this,q=()=>`${N} RETURNING ${M.join(", ")}`,E=()=>d.length>0?O(q(),d):O(q()),K=async()=>{let U=/\sWHERE\s/i.test(N),z=U?N.slice(N.search(/\sWHERE\s/i)+1):"",Y=d.slice(d.length-(z.match(/\?|\$\d+/g)?.length??0)),ne=y("id"),W=await(Y.length>0?O(`SELECT ${ne} FROM ${y(String(g))}${U?` ${z}`:""}`,Y):O(`SELECT ${ne} FROM ${y(String(g))}${U?` ${z}`:""}`)).execute().catch(()=>[]),G=(Array.isArray(W)?W:[]).map((ye)=>ye?.id).filter((ye)=>ye!==void 0&&ye!==null);if(await se(d.length>0?O(N,d):O(N),"update"),G.length===0)return[];let re=`SELECT ${M.join(", ")} FROM ${y(String(g))} WHERE ${ne} IN (${G.map(()=>"?").join(", ")})`,ee=await O(re,G).execute();return Array.isArray(ee)?ee:[]},R=()=>n(e.dialect)?K():se(E(),"update"),A=async()=>{let U=await R();return Array.isArray(U)?U[0]:U},V=(U)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${U}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},F={where:(...U)=>(j.where(...U),F),andWhere:(...U)=>(j.where(...U),F),whereNull:(...U)=>(j.whereNull(...U),F),whereNotNull:(...U)=>(j.whereNotNull(...U),F),orWhere:V("orWhere"),orderBy:V("orderBy"),limit:V("limit"),offset:V("offset"),toSQL:()=>xe(E(),q()),execute:R,get:R,first:A,executeTakeFirst:A,async firstOrFail(){let U=await A();if(!U)throw Error("Update with RETURNING returned no rows");return U},async executeTakeFirstOrThrow(){let U=await A();if(!U)throw Error("Update with RETURNING returned no rows");return U}};return F},toSQL(){if(!f)f=d.length>0?O(N,d):O(N);return xe(f,N)},async execute(){let M=await se(f,"update");return ve(M)},async executeTakeFirst(){return{numUpdatedRows:ve(await se(f,"update"))}},async executeTakeFirstOrThrow(){let M=ve(await se(f,"update"));if(M===0)throw Error("No rows updated");return{numUpdatedRows:M}},returningAll(){return this.returning("*")}}},deleteFrom(g){let f=(E)=>{let K=String(E);if(n(e.dialect))return`\`${K.replace(/`/g,"``")}\``;return`"${K.replace(/"/g,'""')}"`},y=`DELETE FROM ${f(String(g))}`,N=null,b=[],X=null,M=!1,j=(E)=>{y+=` ${M?"AND":"WHERE"} ${E}`,M=!0},q=()=>{if(N===null)N=b.length>0?O(y,b):O(y);return N};return{where(E,K,R){if(X=E,typeof E==="string"&&K!==void 0){let A=De(K,"deleteFrom.where");if(A.toLowerCase()==="in"||A.toLowerCase()==="not in"){let U=Array.isArray(R)?R:[R],z=s(U.length,b.length+1);return j(`${f(E)} ${A.toUpperCase()} (${z})`),b.push(...U),N=null,this}let V=Ve(f(E),A,R,"deleteFrom.where");if(V)return j(V),N=null,this;let F=b.length+1;return j(`${f(E)} ${A} ${t(F)}`),b.push(R),N=null,this}if(Array.isArray(E)){let[A,V,F]=E,U=De(V,"deleteFrom.where");if(U.toLowerCase()==="in"||U.toLowerCase()==="not in"){let ne=Array.isArray(F)?F:[F],W=s(ne.length,b.length+1);return j(`${f(String(A))} ${U.toUpperCase()} (${W})`),b.push(...ne),N=null,this}let z=Ve(f(String(A)),U,F,"deleteFrom.where");if(z)return j(z),N=null,this;let Y=b.length+1;return j(`${f(String(A))} ${U} ${t(Y)}`),b.push(F),N=null,this}if(ut(E))ct("deleteFrom.where(expr)");if(_e(E))return j(E.raw),N=null,this;if(ze(E)){let A=Xe(E,b.length+1);return j(A.text),b.push(...A.parameters),N=null,this}if(E&&typeof E==="object"){let A=Object.keys(E);if(A.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 V=A.map((F)=>St(f(F),E[F],b));return j(V.join(" AND ")),N=null,this}throw TypeError(`[query-builder] deleteFrom.where(): expected a condition, got ${E===null?"null":typeof E}. Refusing to run a DELETE with no WHERE \u2014 drop the where() call if deleting every row is intended.`)},whereNull(E){return j(`${f(String(E))} IS NULL`),N=null,this},whereNotNull(E){return j(`${f(String(E))} IS NOT NULL`),N=null,this},returning(...E){let K=this,R=()=>`${y} RETURNING ${E.join(", ")}`,A=()=>b.length>0?O(R(),b):O(R()),V=async()=>{await pe()?.beforeDelete?.({table:String(g),where:X});let Y=n(e.dialect)?await(async()=>{let ne=y.slice(y.search(/\sFROM\s/i)+1),W=`SELECT ${E.join(", ")} ${ne}`,G=await(b.length>0?O(W,b):O(W)).execute();return await se(b.length>0?O(y,b):O(y),"delete"),Array.isArray(G)?G:[]})():await se(A(),"delete");try{await pe()?.afterDelete?.({table:String(g),where:X,result:Y})}catch{}return Y},F=async()=>{let Y=await V();return Array.isArray(Y)?Y[0]:Y},U=(Y)=>()=>{throw TypeError(`[query-builder] deleteFrom.returning(...).${Y}() is not supported \u2014 a DELETE cannot be ordered or limited through this builder. Narrow it with where() instead.`)},z={where:(...Y)=>(K.where(...Y),z),andWhere:(...Y)=>(K.where(...Y),z),whereNull:(...Y)=>(K.whereNull(...Y),z),whereNotNull:(...Y)=>(K.whereNotNull(...Y),z),orWhere:U("orWhere"),orderBy:U("orderBy"),limit:U("limit"),offset:U("offset"),toSQL:()=>xe(A(),R()),execute:()=>V(),get:()=>V(),first:F,executeTakeFirst:F,async firstOrFail(){let Y=await F();if(!Y)throw Error("Delete with RETURNING returned no rows");return Y},async executeTakeFirstOrThrow(){let Y=await F();if(!Y)throw Error("Delete with RETURNING returned no rows");return Y}};return z},toSQL(){return xe(q(),y)},async execute(){try{await pe()?.beforeDelete?.({table:String(g),where:X})}catch(K){throw K}let E=ve(await se(q(),"delete"));try{await pe()?.afterDelete?.({table:String(g),where:X,result:E})}catch{}return E},async executeTakeFirst(){return{numDeletedRows:ve(await se(q(),"delete"))}},async executeTakeFirstOrThrow(){let E=ve(await se(q(),"delete"));if(E===0)throw Error("No rows deleted");return{numDeletedRows:E}},returningAll(){return this.returning("*")}}},table(g){let f=this;return{insert(d){return f.insertInto(g).values(d)},update(d){return f.updateTable(g).set(d)},delete(){return f.deleteFrom(g)},select(...d){if(d.length===0)return f.selectFrom(g);return f.select(g,...d)}}},sql:D,raw(g,...f){if(typeof g==="string")return Jt(g,f);return D(g,...f)},simple(g,...f){return D(g,...f).simple()},async advisoryLock(g){if(e.dialect==="postgres"){let f=Se(g),d=O("SELECT pg_advisory_lock($1)",[f]);await se(d,"raw");return}if(n(e.dialect)){let f=`bqb:${String(g)}`,d=O("SELECT GET_LOCK(?, -1) AS ok",[f]);await se(d,"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=Se(g),d=O("SELECT pg_try_advisory_lock($1) as ok",[f]),y=await se(d,"raw");return Boolean(y?.[0]?.ok)}if(n(e.dialect)){let f=`bqb:${String(g)}`,d=O("SELECT GET_LOCK(?, 0) AS ok",[f]),y=await se(d,"raw");return Number(y?.[0]?.ok)===1}return!1},async advisoryUnlock(g){if(e.dialect==="postgres"){let f=Se(g),d=O("SELECT pg_advisory_unlock($1) as ok",[f]),y=await se(d,"raw");return Boolean(y?.[0]?.ok)}if(n(e.dialect)){let f=`bqb:${String(g)}`,d=O("SELECT RELEASE_LOCK(?) AS ok",[f]),y=await se(d,"raw");return Number(y?.[0]?.ok)===1}return!1},unsafe(g,f){return _t(g,f),D.unsafe(g,f)},deferInsert:D.deferInsert?.bind(D),flushDeferredInserts:D.flushDeferredInserts?.bind(D),file(g,f){return D.file(g,f)},async reserve(){let g=await r.reserve(),f=i({sql:g,meta:S,schema:H,hooks:w?.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,d){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let g=O("SELECT 1");return await se(g,"select"),!0}catch{return!1}},async waitForReady(g){let f=Math.max(1,g?.attempts??10),d=Math.max(10,g?.delayMs??100);for(let y=0;y<f;y++){if(await this.ping())return;await new Promise((N)=>setTimeout(N,d))}throw Error("Database not ready after waiting")},async transaction(g,f){let y={...w?.txDefaults,...f},N=w?.sql??r,b=w?.inTransaction===!0,X=b&&typeof N?.savepoint==="function"?"savepoint":"begin",M=async(K)=>{y.logger?.({type:"start",attempt:K});let R=Date.now();return await N[X](async(A)=>{let V=i({sql:A,meta:S,schema:H,hooks:w?.hooks,inTransaction:!0});if(y?.isolation&&!b){let z=y.isolation,Y=z==="read committed"?"READ COMMITTED":z==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await A.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Y}`);else if(n(e.dialect))await A.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Y}`);else if(z!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${z}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(y?.readOnly)if(e.dialect==="postgres")await A.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await A.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let F=await g(V),U=Date.now()-R;return y.logger?.({type:"commit",attempt:K,durationMs:U}),F})},j=Math.max(0,y?.retries??0),q=0,E;for(;;)try{E=await M(q+1);break}catch(K){let R=Yt(K)||zt(K,y.sqlStates);if(q<j&&R){q++,y?.onRetry?.(q,K);let A=an(q,y.backoff);if(A>0)await Xt(A);continue}try{y.onRollback?.(K)}catch{}try{y.afterRollback?.()}catch{}throw K}return await y.afterCommit?.(),E},async savepoint(g){if(w?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let f=D;if(!f||typeof f.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await f.savepoint(async(d)=>{let y=i({sql:d,meta:S,schema:H,hooks:w?.hooks,inTransaction:!0});return await g(y)})},async beginDistributed(g,f){return await(w?.sql??r).beginDistributed(g,async(N)=>{let b=i({sql:N,meta:S,schema:H,hooks:w?.hooks});return await f(b)})},async commitDistributed(g){await r.commitDistributed(g)},async rollbackDistributed(g){await r.rollbackDistributed(g)},setTransactionDefaults(g){w={...w,txDefaults:{...w?.txDefaults,...g}}},transactional(g,f){return(...d)=>this.transaction((y)=>g(y,...d),f)},async insertOrIgnore(g,f){let d=Array.isArray(f)?f:[f];if(!d.length)return;let{colsSql:y,valuesSql:N,params:b}=mt(d),X=Re(String(g)),M=n(e.dialect)?`INSERT IGNORE INTO ${X} (${y}) VALUES ${N}`:`INSERT INTO ${X} (${y}) VALUES ${N} ON CONFLICT DO NOTHING`;return O(M,b).execute()},async insertGetId(g,f,d="id"){let{colsSql:y,valuesSql:N,params:b}=mt([f]),X=Re(String(g));if(n(e.dialect)){await O(`INSERT INTO ${X} (${y}) VALUES ${N}`,b).execute();let[j]=await O("SELECT LAST_INSERT_ID() as id").execute();return j?.id}if(e.dialect==="sqlite"){let j=await O(`INSERT INTO ${X} (${y}) VALUES ${N}`,b).execute();if(j?.lastInsertRowid!=null)return j.lastInsertRowid;let[q]=await O("SELECT last_insert_rowid() as id").execute();return q?.id}let[M]=await O(`INSERT INTO ${X} (${y}) VALUES ${N} RETURNING ${Re(String(d))} as id`,b).execute();return M?.id},async updateOrInsert(g,f,d){let y=Re(String(g)),N=Object.keys(f),b=1,X=N.map((R)=>`${Re(R)} = ${t(b++)}`).join(" AND "),M=N.map((R)=>f[R]);if((await O(`SELECT 1 FROM ${y} WHERE ${X} LIMIT 1`,M).execute()).length){let R=Object.keys(d),A=1,V=R.map((z)=>`${Re(z)} = ${t(A++)}`).join(", "),F=N.map((z)=>`${Re(z)} = ${t(A++)}`).join(" AND "),U=[...R.map((z)=>d[z]),...N.map((z)=>f[z])];return await O(`UPDATE ${y} SET ${V} WHERE ${F}`,U).execute(),!0}let{colsSql:q,valuesSql:E,params:K}=mt([{...f,...d}]);return await O(`INSERT INTO ${y} (${q}) VALUES ${E}`,K).execute(),!0},async upsert(g,f,d,y){let N=d.map((V)=>String(V)),b=(y??[]).map((V)=>String(V)),X=f;if(!X.length)return;let{colsSql:M,valuesSql:j,params:q}=mt(X),E=Re(String(g)),K=`INSERT INTO ${E} (${M}) VALUES ${j}`;if(n(e.dialect)){if(b.length===0)return O(`INSERT IGNORE INTO ${E} (${M}) VALUES ${j}`,q).execute();let V=b.map((F)=>`${Re(F)} = VALUES(${Re(F)})`).join(", ");return O(`${K} ON DUPLICATE KEY UPDATE ${V}`,q).execute()}let R=N.map(Re).join(", ");if(b.length===0)return O(`${K} ON CONFLICT (${R}) DO NOTHING`,q).execute();let A=b.map((V)=>`${Re(V)} = EXCLUDED.${Re(V)}`).join(", ");return O(`${K} ON CONFLICT (${R}) DO UPDATE SET ${A}`,q).execute()},async save(g,f){let d=S?.primaryKeys[String(g)]??"id",y=f[d];if(y!=null)if(await this.selectFrom(g).find(y)){await this.updateTable(g).set(f).where({[d]:y}).execute();let b=await this.selectFrom(g).find(y);if(!b)throw Error("save() failed to retrieve updated row");return b}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 d=await D.unsafe(g);return pe()?.onQueryEnd?.({sql:g,durationMs:Date.now()-f,kind:"raw"}),d}catch(d){throw pe()?.onQueryError?.({sql:g,error:d,durationMs:Date.now()-f,kind:"raw"}),d}},async create(g,f){let d=S?.primaryKeys[String(g)]??"id";try{await pe()?.beforeCreate?.({table:String(g),data:f})}catch(y){throw y}if(e.dialect==="postgres"){let y=D`INSERT INTO ${D(String(g))} ${D(f)} RETURNING ${D(String(d))} as id`,[N]=await y.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 b=await this.selectFrom(g).find(N.id);if(!b)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:b})}catch{}return b}else{let y=await this.insertGetId(g,f,d);if(y==null)throw Error(`create() failed to get insert ID for table ${String(g)}`);let N=await this.selectFrom(g).find(y);if(!N)throw console.error(`create() failed to retrieve inserted row for table ${String(g)} with id ${y}`),console.error("Inserted values:",f),Error(`create() failed to retrieve inserted row for table ${String(g)} with id ${y}`);try{await pe()?.afterCreate?.({table:String(g),data:f,result:N})}catch{}return N}},async createMany(g,f){if(!f?.length)return;let d=f[0],y=Object.keys(d),N=y.length,b=f.length,X=Array.from({length:b*N}),M=n(e.dialect)?(E)=>`\`${String(E).replace(/`/g,"``")}\``:(E)=>`"${String(E).replace(/"/g,'""')}"`,j=`INSERT INTO ${M(String(g))}(${y.map(M).join(",")})VALUES`,q=0;for(let E=0;E<b;E++){if(E>0)j+=",";j+="(";let K=f[E];for(let R=0;R<N;R++){if(R>0)j+=",";j+=t(q+1),X[q++]=K[y[R]]}j+=")"}return O(j,X).execute()},async insertMany(g,f){if(!f?.length)return;let d=f[0],y=Object.keys(d),N=y.length,b=f.length,X=b*N,M=Array(X),j=e.dialect==="postgres",q;if(!j){let R=Array(N);for(let A=0;A<N;A++)R[A]="?";q=`(${R.join(",")})`}else q="";let E=Array(b+2);E[0]=`INSERT INTO ${g}(${y.join(",")})VALUES`;let K=0;if(!j){for(let R=0;R<b;R++){let A=f[R];E[R+1]=q;for(let V=0;V<N;V++)M[K++]=A[y[V]]}return O(E[0]+E.slice(1,b+1).join(","),M).execute()}for(let R=0;R<b;R++){let A=f[R],V=Array(N);for(let F=0;F<N;F++)V[F]=`$${K+1}`,M[K++]=A[y[F]];E[R+1]=`(${V.join(",")})`}return O(E[0]+E.slice(1,b+1).join(","),M).execute()},async updateMany(g,f,d){let y=Object.keys(d),N=y.length;if(N===0)return 0;let b=[],X=Array.from({length:N});for(let j=0;j<N;j++)X[j]=`${y[j]}=${t(j+1)}`,b.push(d[y[j]]);let M=`UPDATE ${g} SET ${X.join(",")}`;if(Array.isArray(f)){let j=De(String(f[1]),"updateMany");M+=` WHERE ${f[0]} ${j} ${t(b.length+1)}`,b.push(f[2])}else if(_e(f))M+=` WHERE ${f.raw}`;else if(ze(f)){let j=Xe(f,b.length+1);M+=` WHERE ${j.text}`,b.push(...j.parameters)}else if(f&&typeof f==="object"&&Object.keys(f).length>0){let j=Object.keys(f).map((q)=>St(q,f[q],b));M+=` WHERE ${j.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(M,b).execute()},async deleteMany(g,f){if(!Array.isArray(f)||f.length===0)return 0;let d=S?.primaryKeys[String(g)]??"id",y=f.length;if(e.dialect==="postgres"){let b=Array(y);for(let X=0;X<y;X++)b[X]=`$${X+1}`;return O(`DELETE FROM ${g} WHERE ${d} IN (${b.join(",")})`,f).execute()}let N=Array(y);for(let b=0;b<y;b++)N[b]="?";return O(`DELETE FROM ${g} WHERE ${d} IN (${N.join(",")})`,f).execute()},async firstOrCreate(g,f,d){let y=await this.selectFrom(g).where(f).first();if(y)return y;return await this.create(g,{...f,...d})},async updateOrCreate(g,f,d){let y=await this.selectFrom(g).where(f).first();if(y){await this.updateTable(g).set(d).where(f).execute();let N=S?.primaryKeys[String(g)]??"id",b=y[N],X=b!=null?await this.selectFrom(g).find(b):await this.selectFrom(g).where(f).first();if(!X)throw Error("updateOrCreate() failed to retrieve updated row");return X}return await this.create(g,{...f,...d})},async count(g,f){let d=f?D(String(f)):D`*`,y=D`SELECT COUNT(${d}) as c FROM ${D(String(g))}`,[N]=await y.execute();return Number(N?.c??0)},async sum(g,f){let d=D`SELECT SUM(${D(String(f))}) as s FROM ${D(String(g))}`,[y]=await d.execute();return Number(y?.s??0)},async avg(g,f){let d=D`SELECT AVG(${D(String(f))}) as a FROM ${D(String(g))}`,[y]=await d.execute();return Number(y?.a??0)},async min(g,f){let d=D`SELECT MIN(${D(String(f))}) as m FROM ${D(String(g))}`,[y]=await d.execute();return y?.m},async max(g,f){let d=D`SELECT MAX(${D(String(f))}) as m FROM ${D(String(g))}`,[y]=await d.execute();return y?.m},getRelationships(g){if(!S?.relations)return{};let f=S.relations[g];if(!f)return{};let d={};for(let[y,N]of Object.entries(f))if(N&&typeof N==="object"&&Object.keys(N).length>0)d[y]=N;return d},hasRelationship(g,f){if(!S?.relations)return!1;let d=S.relations[g];if(!d)return!1;return Object.values(d).some((y)=>y&&typeof y==="object"&&(f in y))},getRelationshipType(g,f){if(!S?.relations)return null;let d=S.relations[g];if(!d)return null;for(let[y,N]of Object.entries(d))if(N&&typeof N==="object"&&f in N)return y;return null},getRelationshipTarget(g,f){if(!S?.relations)return null;let d=S.relations[g];if(!d)return null;for(let[y,N]of Object.entries(d))if(N&&typeof N==="object"&&f in N){let b=N[f];if(typeof b==="string")return S.modelToTable[b]||b;else if(b&&typeof b==="object"){if("model"in b)return S.modelToTable[b.model]||b.model;if("target"in b)return S.modelToTable[b.target]||b.target}}return null}}}function Me(){wt.clear()}function Pe(w){wt.setMaxSize(w)}
3
- export{v,Kn,nn,c,At,Nt,i,Me,Pe};