@stacksjs/query-builder 0.70.98 → 0.70.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +9 -9
  2. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -64,7 +64,7 @@ export type ConfigOf = Config
64
64
  `;for(let Y of X)Z+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
65
65
  `;return Z}}function q4(X,$,Z={}){return u6(X,$,Z,new WeakMap)}function u6(X,$,Z,Y){let{arrayMergeMode:U="replace",skipNullish:_=!1,customMerger:Q}=Z;if($===null||$===void 0)return _?X:$;if(Q){let L=Q(X,$);if(L!==void 0)return L}if(Array.isArray($)||Array.isArray(X))return n6(X,$,U,Y);if(!F9($)||!F9(X))return $;return S4(X,$,Z,Y)}function n6(X,$,Z,Y){if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray(X)&&!Array.isArray($))return $;if(Array.isArray($)&&Array.isArray(X))switch(Z){case"replace":return $;case"concat":return P4(X,$);case"smart":return T4(X,$,Y);default:return $}return $}function P4(X,$){let Z=[...$];for(let Y of X)if(!Z.some((U)=>R1(U,Y)))Z.push(Y);return Z}function T4(X,$,Z){if($.length===0)return X;if(X.length===0)return $;if(F9($[0])&&F9(X[0]))return N4(X,$,Z);if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}function N4(X,$,Z){let Y=[...$];for(let U of X){if(!F9(U)){Y.push(U);continue}let _=["id","name","key","path","type"],Q=!1;for(let L of _)if(L in U){if(Y.find((j)=>F9(j)&&(L in j)&&j[L]===U[L])){Q=!0;break}}if(!Q)Y.push(U)}return Y}function S4(X,$,Z,Y){let U=$;if(F9(U)&&Y.has(U))return Y.get(U);let _={...X};if(F9(U))Y.set(U,_);for(let Q in U){if(!Object.prototype.hasOwnProperty.call(U,Q))continue;let L=U[Q],z=_[Q];if(Z.skipNullish&&(L===null||L===void 0))continue;if(L===null||L===void 0){_[Q]=L;continue}if(F9(L)&&F9(z))_[Q]=u6(z,L,Z,Y);else if(Array.isArray(L)||Array.isArray(z))_[Q]=n6(z,L,Z.arrayMergeMode||"smart",Y);else _[Q]=L}return _}function i6(X,$,Z="replace"){return q4(X,$,{arrayMergeMode:Z==="replace"?"replace":"smart",skipNullish:!0})}function R1(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!R1(X[Z],$[Z]))return!1;return!0}if(F9(X)&&F9($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!R1(X[U],$[U]))return!1}return!0}return!1}function F9(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}class l6{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(X,$,Z={}){let{arrayStrategy:Y="replace",useCache:U=!0,cacheTtl:_,trackPerformance:Q=!0,verbose:L=!1}=Z;if(U){let j=N$.getWithFileCheck("file",X);if(j){if(L)console.log(`Configuration loaded from cache: ${X}`);return j}}let z=async()=>{if(!r$(X))return null;try{let j=`?t=${Date.now()}`,E=await import(X+j),V=E.default||E,G="default"in E,J=Object.keys(E).length>0;if(!G&&!J)throw new g8(X,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof V!=="object"||V===null||Array.isArray(V))throw new g8(X,Error("Configuration must export a valid object"),"unknown");let R={config:i6($,V,Y),source:{type:"file",path:X,priority:100,timestamp:new Date}};if(U)N$.setWithFileCheck("file",R,X,_);return R}catch(j){throw j instanceof Error?e9.configLoad(X,j):e9.configLoad(X,Error(String(j)))}};if(Q)return UZ.track("loadFromPath",z,{path:X});return z()}async tryLoadFromPaths(X,$,Z={}){for(let Y of X)try{let U=await this.loadFromPath(Y,$,Z);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(Z.verbose)console.warn(`Failed to load config from ${Y}:`,U)}return null}generateConfigPaths(X,$,Z){let Y=this.generateNamePatterns(X,Z),U=[];for(let _ of Y)for(let Q of this.extensions)U.push(qZ($,`${_}${Q}`));return U}generateNamePatterns(X,$){let Z=[];if(Z.push("config",".config"),X)Z.push(X,`.${X}.config`,`${X}.config`,`.${X}`);let Y=$===void 0?[]:Array.isArray($)?$:[$];for(let _ of Y){if(!_)continue;if(Z.push(_,`.${_}.config`,`${_}.config`,`.${_}`),X)Z.push(`${X}.${_}.config`,`.${X}.${_}.config`)}let U=new Set;return Z.filter((_)=>{if(!_||U.has(_))return!1;return U.add(_),!0})}checkFileAccess(X){return w4(async()=>{return r$(X)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(X,$,Z){let Y=[];if(!r$(X))return Y;if($||Z){let U=this.generateNamePatterns($||"",Z);for(let _ of U)for(let Q of this.extensions){let L=qZ(X,`${_}${Q}`);if(await this.checkFileAccess(L))Y.push(L)}}else try{let{readdirSync:U}=await import("fs"),_=U(X);for(let Q of _)if(this.looksLikeConfigFile(Q)){let L=qZ(X,Q);if(await this.checkFileAccess(L))Y.push(L)}}catch{return[]}return Y}looksLikeConfigFile(X){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Z)=>Z.test(X))}async validateConfigFile(X){let $=[];try{if(!r$(X))return $.push("Configuration file does not exist"),$;let Z=await import(X),Y=Z.default||Z;if(Y===void 0)$.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)$.push("Configuration must be an object");else if(Array.isArray(Y))$.push("Configuration cannot be an array at the root level");if(X.endsWith(".json"))try{let{readFileSync:U}=await import("fs"),_=U(X,"utf8");JSON.parse(_)}catch(U){$.push(`Invalid JSON syntax: ${U}`)}}catch(Z){$.push(`Failed to load configuration file: ${Z}`)}return $}async getFileModificationTime(X){try{let{statSync:$}=await import("fs");return $(X).mtime}catch{return null}}async preloadConfigurations(X,$={}){let Z=new Map;return await Promise.allSettled(X.map(async(Y)=>{try{let U=await this.loadFromPath(Y,{},$);if(U)Z.set(Y,U.config)}catch(U){if($.verbose)console.warn(`Failed to preload ${Y}:`,U)}})),Z}}class s6{async validateConfiguration(X,$,Z={}){let{stopOnFirstError:Y=!1,validateRequired:U=!0,validateTypes:_=!0,customRules:Q=[],trackPerformance:L=!0,verbose:z=!1}=Z,j=async()=>{let E=[],V=[],G={stopOnFirstError:Y,validateRequired:U,validateTypes:_,customRules:Q,trackPerformance:L,verbose:z};try{if(typeof $==="string")return await this.validateWithSchemaFile(X,$,G);else if(Array.isArray($))return this.validateWithRules(X,[...$,...Q],G);else return this.validateWithJSONSchema(X,$,G)}catch(J){return E.push({path:"",message:`Validation failed: ${J}`,rule:"system"}),{isValid:!1,errors:E,warnings:V}}};if(L)return await UZ.track("validateConfiguration",j);return j()}async validateWithSchemaFile(X,$,Z){try{if(!s2($))throw new d8($,[{path:"",message:"Schema file does not exist"}]);let Y=await import($),U=Y.default||Y;if(Array.isArray(U))return this.validateWithRules(X,U,Z);else return this.validateWithJSONSchema(X,U,Z)}catch(Y){throw new d8($,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema(X,$,Z){let Y=[],U=[];return this.validateObjectAgainstSchema(X,$,"",Y,U,Z),{isValid:Y.length===0,errors:Y,warnings:U}}validateObjectAgainstSchema(X,$,Z,Y,U,_){if(_.validateTypes&&$.type){let Q=Array.isArray(X)?"array":typeof X,L=Array.isArray($.type)?$.type:[$.type];if(!L.includes(Q)){if(Y.push({path:Z,message:`Expected type ${L.join(" or ")}, got ${Q}`,expected:L.join(" or "),actual:Q,rule:"type"}),_.stopOnFirstError)return}}if($.enum&&!$.enum.includes(X)){if(Y.push({path:Z,message:`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"}),_.stopOnFirstError)return}if(typeof X==="string"){if($.minLength!==void 0&&X.length<$.minLength)Y.push({path:Z,message:`String length must be at least ${$.minLength}`,expected:`>= ${$.minLength}`,actual:X.length,rule:"minLength"});if($.maxLength!==void 0&&X.length>$.maxLength)Y.push({path:Z,message:`String length must not exceed ${$.maxLength}`,expected:`<= ${$.maxLength}`,actual:X.length,rule:"maxLength"});if($.pattern){if(!new RegExp($.pattern).test(X))Y.push({path:Z,message:`String does not match pattern ${$.pattern}`,expected:$.pattern,actual:X,rule:"pattern"})}}if(typeof X==="number"){if($.minimum!==void 0&&X<$.minimum)Y.push({path:Z,message:`Value must be at least ${$.minimum}`,expected:`>= ${$.minimum}`,actual:X,rule:"minimum"});if($.maximum!==void 0&&X>$.maximum)Y.push({path:Z,message:`Value must not exceed ${$.maximum}`,expected:`<= ${$.maximum}`,actual:X,rule:"maximum"})}if(Array.isArray(X)&&$.items)for(let Q=0;Q<X.length;Q++){let L=Z?`${Z}[${Q}]`:`[${Q}]`;if(this.validateObjectAgainstSchema(X[Q],$.items,L,Y,U,_),_.stopOnFirstError&&Y.length>0)return}if(X&&typeof X==="object"&&!Array.isArray(X)){let Q=X;if(_.validateRequired&&$.required){for(let L of $.required)if(!(L in Q)){if(Y.push({path:Z?`${Z}.${L}`:L,message:`Missing required property '${L}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if($.properties){for(let[L,z]of Object.entries($.properties))if(L in Q){let j=Z?`${Z}.${L}`:L;if(this.validateObjectAgainstSchema(Q[L],z,j,Y,U,_),_.stopOnFirstError&&Y.length>0)return}}if($.additionalProperties===!1){let L=new Set(Object.keys($.properties||{}));for(let z of Object.keys(Q))if(!L.has(z))U.push({path:Z?`${Z}.${z}`:z,message:`Additional property '${z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(X,$,Z){let Y=[],U=[];for(let _ of $)try{let Q=this.getValueByPath(X,_.path),L=this.validateWithRule(Q,_,_.path);if(Y.push(...L),Z.stopOnFirstError&&Y.length>0)break}catch(Q){Y.push({path:_.path,message:`Rule validation failed: ${Q}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:U}}validateWithRule(X,$,Z){let Y=[];if($.required&&(X===void 0||X===null))return Y.push({path:Z,message:$.message||`Property '${Z}' is required`,expected:"required",rule:"required"}),Y;if(X===void 0||X===null)return Y;if($.type){let U=Array.isArray(X)?"array":typeof X;if(U!==$.type)Y.push({path:Z,message:$.message||`Expected type ${$.type}, got ${U}`,expected:$.type,actual:U,rule:"type"})}if($.min!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U<$.min)Y.push({path:Z,message:$.message||`Value must be at least ${$.min}`,expected:`>= ${$.min}`,actual:U,rule:"min"})}if($.max!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U>$.max)Y.push({path:Z,message:$.message||`Value must not exceed ${$.max}`,expected:`<= ${$.max}`,actual:U,rule:"max"})}if($.pattern&&typeof X==="string"){if(!$.pattern.test(X))Y.push({path:Z,message:$.message||`Value does not match pattern ${$.pattern}`,expected:$.pattern.toString(),actual:X,rule:"pattern"})}if($.enum&&!$.enum.includes(X))Y.push({path:Z,message:$.message||`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"});if($.validator){let U=$.validator(X);if(U)Y.push({path:Z,message:$.message||U,rule:"custom"})}return Y}getValueByPath(X,$){if(!$)return X;let Z=$.split("."),Y=X;for(let U of Z)if(Y&&typeof Y==="object"&&U in Y)Y=Y[U];else return;return Y}generateRulesFromInterface(X){let $=[],Z=X.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of Z){let[,U,_,Q]=Y;$.push({path:U,required:!_,type:this.mapTypeScriptType(Q)})}return $}mapTypeScriptType(X){switch(X.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:ZU},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function A4(X){if(!X)return"";let $=Array.isArray(X)?X.filter(Boolean):[X];if($.length===0)return"";if($.length===1)return` or alias "${$[0]}"`;return` or aliases ${$.map((Z)=>`"${Z}"`).join(", ")}`}class o6{fileLoader=new l6;envProcessor=new t1;validator=new s6;async loadConfig(X){let $=Date.now(),{cache:Z,performance:Y,schema:U,validate:_,...Q}=X;try{if(Z?.enabled){let z=this.checkCache(Q.name||"",Q);if(z)return z}let L;try{L=await this.loadConfigurationStrategies(Q,!0,Z)}catch(z){let j=Q.__strictErrorHandling;if(z instanceof Error&&z.name==="ConfigNotFoundError"){if(j)throw z;L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`No configuration file found for "${Q.name||"config"}", using defaults with environment variables`]}}else if(z instanceof Error&&z.name==="ConfigLoadError"){let E=z.message.includes("EACCES")||z.message.includes("EPERM")||z.message.includes("permission denied"),V=!E&&(z.message.includes("syntax")||z.message.includes("Expected")||z.message.includes("Unexpected")||z.message.includes("BuildMessage")||z.message.includes("errors building")),G=z.message.includes("Configuration must export a valid object")||z.message.includes("Configuration file is empty and exports nothing");if(j&&(G||E))throw z;if(V&&(!j||!G))L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading error, using defaults: ${z.message}`]};else throw z}else L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${z instanceof Error?z.message:String(z)}`]}}if(U||_)await this.validateConfiguration(L.config,U,_,Q.name);if(Z?.enabled&&L)this.cacheResult(Q.name||"",L,Z,Q);if(Y?.enabled){let z={operation:"loadConfig",duration:Date.now()-$,configName:Q.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(z);if(Y.slowThreshold&&z.duration>Y.slowThreshold)V9.warn(`Slow configuration loading detected: ${z.duration}ms for ${Q.name}`);L.metrics=z}return L}catch(L){if(L instanceof Error&&L.name==="ConfigNotFoundError")throw L;let z=Date.now()-$;throw V9.error(`Configuration loading failed after ${z}ms:`,[L instanceof Error?L:Error(String(L))]),L}}async loadConfigurationStrategies(X,$=!1,Z){let{name:Y="",alias:U,cwd:_,configDir:Q,defaultConfig:L,checkEnv:z=!0,arrayStrategy:j="replace",verbose:E=!1}=X,V=_||S8.cwd(),G=[],J=await this.loadLocalConfiguration(Y,U,V,Q,L,j,E,z,Z);if(J)return G.push(...this.getLocalSearchPaths(Y,U,V,Q)),this.finalizeResult(J,G,z,Y,E);let W=await this.loadHomeConfiguration(Y,U,L,j,E,z);if(W)return G.push(...this.getHomeSearchPaths(Y,U)),this.finalizeResult(W,G,z,Y,E);let F=await this.loadPackageJsonConfiguration(Y,U,V,L,j,E,z);if(F)return G.push(L9(V,"package.json")),this.finalizeResult(F,G,z,Y,E);if(G.push(...this.getAllSearchPaths(Y,U,V,Q)),$)throw e9.configNotFound(Y,G,U);return{...await this.applyEnvironmentVariables(Y,L,z,E),warnings:[`No configuration file found for "${Y}"${A4(U)}, using defaults with environment variables`]}}async loadLocalConfiguration(X,$,Z,Y,U,_,Q,L,z){let j=L?t$(X,U,Q):U,E=this.getLocalDirectories(Z,Y);for(let V of E){if(Q)V9.info(`Searching for configuration in: ${V}`);let G=this.fileLoader.generateConfigPaths(X,V,$),J=await this.fileLoader.tryLoadFromPaths(G,j,{arrayStrategy:_,verbose:Q,cacheTtl:z?.ttl,useCache:!z?.ttl||z.ttl>100});if(J){if(Q)V9.success(`Configuration loaded from: ${J.source.path}`);return J}}return null}async loadHomeConfiguration(X,$,Z,Y,U,_){if(!X)return null;let Q=_?t$(X,Z,U):Z,L=[L9(zX(),".config",X),L9(zX(),".config"),zX()];for(let z of L){if(U)V9.info(`Checking home directory: ${z}`);let j=this.fileLoader.generateConfigPaths(X,z,$),E=await this.fileLoader.tryLoadFromPaths(j,Q,{arrayStrategy:Y,verbose:U});if(E){if(U)V9.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration(X,$,Z,Y,U,_,Q){let L=Q?t$(X,Y,_):Y;try{let z=L9(Z,"package.json");if(!L2(z))return null;let j={};try{j=JSON.parse(j2(z,"utf8"))}catch(G){if(_)V9.warn("Failed to parse package.json:",[G instanceof Error?G:Error(String(G))]);return null}let E=j[X],V=X;if(!E&&$){let G=Array.isArray($)?$:[$];for(let J of G){if(!J)continue;if(j[J]){E=j[J],V=J;break}}}if(E&&typeof E==="object"&&!Array.isArray(E)){if(_)V9.success(`Configuration loaded from package.json: ${V}`);return{config:i6(L,E,U),source:{type:"package.json",path:z,priority:30,timestamp:new Date}}}}catch(z){if(_)V9.warn("Failed to load package.json:",[z instanceof Error?z:Error(String(z))])}return null}async applyEnvironmentVariables(X,$,Z,Y){if(!Z||!X||typeof $!=="object"||$===null||Array.isArray($))return{config:$,source:{type:"default",priority:10,timestamp:new Date}};return{config:t$(X,$,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(X,$,Z,Y,U){return{config:X.config,source:X.source,path:X.source.path}}async validateConfiguration(X,$,Z,Y){let U=[];if(Z){let _=Z(X);if(_)U.push(..._)}if($){let _=await this.validator.validateConfiguration(X,$);if(!_.isValid)U.push(..._.errors.map((Q)=>Q.path?`${Q.path}: ${Q.message}`:Q.message))}if(U.length>0)throw e9.configValidation(Y||"unknown",U,Y)}checkCache(X,$){let Z=this.generateCacheKey(X,$);return N$.get(Z)||null}cacheResult(X,$,Z,Y){let U=this.generateCacheKey(X,Y);N$.set(U,$,void 0,Z.ttl)}generateCacheKey(X,$){let Z=[X];if($.alias){let Y=Array.isArray($.alias)?$.alias.join(","):$.alias;Z.push(`alias:${Y}`)}if($.cwd)Z.push(`cwd:${$.cwd}`);if($.configDir)Z.push(`configDir:${$.configDir}`);if("checkEnv"in $)Z.push(`checkEnv:${$.checkEnv}`);return Z.join("|")}getLocalDirectories(X,$){return Array.from(new Set([X,L9(X,"config"),L9(X,".config"),$?L9(X,$):void 0].filter(Boolean)))}getAllSearchPaths(X,$,Z,Y){let U=[];return U.push(...this.getLocalSearchPaths(X,$,Z,Y)),U.push(...this.getHomeSearchPaths(X,$)),U.push(L9(Z,"package.json")),U}getLocalSearchPaths(X,$,Z,Y){let U=this.getLocalDirectories(Z,Y),_=[];for(let Q of U)_.push(...this.fileLoader.generateConfigPaths(X,Q,$));return _}getHomeSearchPaths(X,$){if(!X)return[];let Z=[L9(zX(),".config",X),L9(zX(),".config"),zX()],Y=[];for(let U of Z)Y.push(...this.fileLoader.generateConfigPaths(X,U,$));return Y}async loadConfigWithResult(X){return this.loadConfig(X)}}async function k4(X){let $="defaultConfig"in X&&X.defaultConfig!==void 0?X.defaultConfig:{},Z="cache"in X||"performance"in X||"schema"in X||"validate"in X;try{let Y;if(Z)Y=await H8.loadConfig(X);else Y=await H8.loadConfig({...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??$}catch(Y){let U=Y instanceof Error?Y.name:"UnknownError",_=Y instanceof Error?Y.message:String(Y);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||_.includes("config"))&&X.verbose)V9.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let L=Z?{...X,defaultConfig:$}:{...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in X?X.checkEnv!==!1:!0)return(await H8.applyEnvironmentVariables(L.name||"",$,!0,L.verbose||!1))?.config??$;return $}}function t$(X,$,Z=!1){let Y=new t1,U=X.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(Q,L=[]){let z={...Q};for(let[j,E]of Object.entries(Q)){let V=[...L,j],G=[`${U}_${V.join("_").toUpperCase()}`,`${U}_${V.map((F)=>F.toUpperCase()).join("")}`,`${U}_${V.map((F)=>F.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],J,W;for(let F of G)if(J=S8.env[F],J!==void 0){W=F;break}if(J!==void 0&&W)if(typeof E==="boolean")z[j]=["true","1","yes"].includes(J.toLowerCase());else if(typeof E==="number"){let F=Number(J);if(!Number.isNaN(F))z[j]=F}else if(Array.isArray(E))try{z[j]=JSON.parse(J)}catch{z[j]=J.split(",").map((F)=>F.trim())}else z[j]=J;else if(E&&typeof E==="object"&&!Array.isArray(E))z[j]=_(E,V)}return z}return _($)}var N$,UZ,r6,x4=(X)=>X,B4=(X,$)=>{for(var Z in $)r6(X,Z,{get:$[Z],enumerable:!0,configurable:!0,set:o2.bind($,Z)})},y4=(X,$)=>()=>(X&&($=X(X=0)),$),PZ,a6,BX,S$,r5,h4,v4,a5,W8,K1,d0,C0,b4,t5,f4,e5,g4,d4,TZ,p4,XY,$Y,NZ,c4,m4,u4,n4,V8,t6,i4,p0,l4,s4,ZY,I8,D1,x0,F0,o4,YY,r4,UY,a4,t4,SZ,e4,_Y,QY,X_,AZ,$_,Z_,Y_,U_,__,R8,e6,Q_,z_="0.15.6",$9,K8,Z$,kZ,xZ,D8,BZ,yZ,Y$,hZ,vZ,c9,zY,XU,I9,k9,LY,jY,EY,GY,bZ,U$,L_,B0,O0,j_,FY,E_,OY,G_,F_,fZ,O_,JY,WY,J_,gZ,W_,V_,I_,R_,K_,M8,$U,D_,W9,VY,g8,IY,RY,M1,KY,DY,d8,MY,HY,e9,ZU,V9,H8,M_,H_,C_=e(()=>{N$=new B6,UZ=new y6,r6=Object.defineProperty,PZ={},B4(PZ,{withErrorRecovery:()=>b6,tryLoadConfig:()=>R4,loadConfigWithResult:()=>V4,loadConfig:()=>c6,isRetryableError:()=>E4,isConfigNotFoundError:()=>j4,isBunfigError:()=>f6,globalPerformanceMonitor:()=>S$,globalCache:()=>BX,getEnvOrDefault:()=>G4,generateConfigTypes:()=>K4,defaultGeneratedDir:()=>jY,defaultConfigDir:()=>LY,deepMergeWithArrayStrategy:()=>r1,deepMerge:()=>g6,createLibraryConfig:()=>D4,config:()=>I4,bunfigPlugin:()=>M4,applyEnvVarsToConfig:()=>sX,TypeGenerationError:()=>yZ,SchemaValidationError:()=>Y$,PluginError:()=>vZ,PerformanceMonitor:()=>W1,FileSystemError:()=>BZ,ErrorFactory:()=>c9,EnvVarError:()=>D8,EnvProcessor:()=>ZZ,ConfigValidator:()=>a1,ConfigValidationError:()=>kZ,ConfigNotFoundError:()=>K8,ConfigMergeError:()=>xZ,ConfigLoader:()=>I1,ConfigLoadError:()=>Z$,ConfigFileLoader:()=>YZ,ConfigCache:()=>J1,CacheUtils:()=>r5,BunfigError:()=>$9,BrowserConfigError:()=>hZ,ArrayMergeStrategies:()=>zY}),EY=y4(async()=>{a6=import.meta.require,BX=new J1,S$=new W1,r5={createKey:r2,isEquivalent:a2,estimateMemoryUsage:t2},h4=x8(O1.cwd(),"config"),v4=x8(O1.cwd(),"src/generated"),a5=k8.env.CLARITY_LOG_DIR||W2($4(),"logs"),W8={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:a5,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},K1=await Z4(),d0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,reset:"\x1B[0m"},C0=d0,b4=d0.red,t5=d0.green,f4=d0.yellow,e5=d0.blue,g4=d0.magenta,d4=d0.cyan,TZ=d0.white,p4=d0.gray,XY=d0.bgRed,$Y=d0.bgYellow,NZ=d0.bold,c4=d0.dim,m4=d0.italic,u4=d0.underline,n4=d0.reset,V8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},t6={debug:"\uD83D\uDD0D",info:e5("\u2139"),success:t5("\u2713"),warning:$Y(TZ(NZ(" WARN "))),error:XY(TZ(NZ(" ERROR ")))},i4=new h8("stacks"),p0=new h8("bunfig",{showTags:!0}),l4=i0(T$.cwd(),"config"),s4=i0(T$.cwd(),"src/generated"),ZY=A8.env.CLARITY_LOG_DIR||O2(Q4(),"logs"),I8={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:ZY,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},D1=await z4(),x0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bgGray:(X)=>`\x1B[100m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,strikethrough:(X)=>`\x1B[9m${X}\x1B[0m`,reset:"\x1B[0m"},F0=x0,o4=x0.red,YY=x0.green,r4=x0.yellow,UY=x0.blue,a4=x0.magenta,t4=x0.cyan,SZ=x0.white,e4=x0.gray,_Y=x0.bgRed,QY=x0.bgYellow,X_=x0.bgGray,AZ=x0.bold,$_=x0.dim,Z_=x0.italic,Y_=x0.underline,U_=x0.strikethrough,__=x0.reset,R8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},e6={debug:"\uD83D\uDD0D",info:UY("\u2139"),success:YY("\u2713"),warning:QY(SZ(AZ(" WARN "))),error:_Y(SZ(AZ(" ERROR ")))},Q_=new b8("stacks"),$9=class extends Error{timestamp;context;constructor($,Z={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,Y])=>`${Z}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},K8=class extends $9{code="CONFIG_NOT_FOUND";constructor($,Z,Y){let U=Y?` or alias "${Y}"`:"";super(`Configuration "${$}"${U} not found`,{configName:$,alias:Y,searchPaths:Z,searchPathCount:Z.length})}},Z$=class extends $9{code="CONFIG_LOAD_ERROR";constructor($,Z,Y){super(`Failed to load configuration from "${$}": ${Z.message}`,{configPath:$,configName:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},kZ=class extends $9{code="CONFIG_VALIDATION_ERROR";constructor($,Z,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},xZ=class extends $9{code="CONFIG_MERGE_ERROR";constructor($,Z,Y,U){super(`Failed to merge configuration from "${$}" with "${Z}": ${Y.message}`,{sourcePath:$,targetPath:Z,configName:U,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},D8=class extends $9{code="ENV_VAR_ERROR";constructor($,Z,Y,U){super(`Failed to parse environment variable "${$}" with value "${Z}" as ${Y}`,{envKey:$,envValue:Z,expectedType:Y,configName:U})}},BZ=class extends $9{code="FILE_SYSTEM_ERROR";constructor($,Z,Y){super(`File system ${$} failed for "${Z}": ${Y.message}`,{operation:$,path:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},yZ=class extends $9{code="TYPE_GENERATION_ERROR";constructor($,Z,Y){super(`Failed to generate types from "${$}" to "${Z}": ${Y.message}`,{configDir:$,outputPath:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},Y$=class extends $9{code="SCHEMA_VALIDATION_ERROR";constructor($,Z,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},hZ=class extends $9{code="BROWSER_CONFIG_ERROR";constructor($,Z,Y,U){super(`Failed to fetch configuration from "${$}": ${Z} ${Y}`,{endpoint:$,status:Z,statusText:Y,configName:U})}},vZ=class extends $9{code="PLUGIN_ERROR";constructor($,Z,Y){super(`Plugin "${$}" failed during ${Z}: ${Y.message}`,{pluginName:$,operation:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},c9={configNotFound(X,$,Z){return new K8(X,$,Z)},configLoad(X,$,Z){return new Z$(X,$,Z)},configValidation(X,$,Z){return new kZ(X,$,Z)},configMerge(X,$,Z,Y){return new xZ(X,$,Z,Y)},envVar(X,$,Z,Y){return new D8(X,$,Z,Y)},fileSystem(X,$,Z){return new BZ(X,$,Z)},typeGeneration(X,$,Z){return new yZ(X,$,Z)},schemaValidation(X,$,Z){return new Y$(X,$,Z)},browserConfig(X,$,Z,Y){return new hZ(X,$,Z,Y)},plugin(X,$,Z){return new vZ(X,$,Z)}},zY={replace:"replace",concat:"concat",smart:"smart"},XU=/^https?:\/\//,I9=new b8("bunfig",{showTags:!0}),k9=new I1,LY=s0(t9.cwd(),"config"),jY=s0(t9.cwd(),"src/generated")}),GY=B8.env.CLARITY_LOG_DIR||b2(H4(),"logs"),bZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:GY,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},U$={...bZ},L_=(async()=>{try{let{loadConfig:X}=await EY().then(()=>PZ),$=await X({name:"clarity",alias:"logging",defaultConfig:bZ,cwd:B8.cwd()});if($)Object.assign(U$,$)}catch{}return U$})(),B0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bgGray:(X)=>`\x1B[100m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,strikethrough:(X)=>`\x1B[9m${X}\x1B[0m`,reset:"\x1B[0m"},O0=B0,j_=B0.red,FY=B0.green,E_=B0.yellow,OY=B0.blue,G_=B0.magenta,F_=B0.cyan,fZ=B0.white,O_=B0.gray,JY=B0.bgRed,WY=B0.bgYellow,J_=B0.bgGray,gZ=B0.bold,W_=B0.dim,V_=B0.italic,I_=B0.underline,R_=B0.strikethrough,K_=B0.reset,M8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},$U={debug:"\uD83D\uDD0D",info:OY("\u2139"),success:FY("\u2713"),warning:WY(fZ(gZ(" WARN "))),error:JY(fZ(gZ(" ERROR ")))},D_=new f8("stacks"),W9=class extends Error{timestamp;context;constructor($,Z={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,Y])=>`${Z}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},VY=class extends W9{code="CONFIG_NOT_FOUND";constructor($,Z,Y){let U=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],_="";if(U.length===1)_=` or alias "${U[0]}"`;else if(U.length>1)_=` or aliases ${U.map((Q)=>`"${Q}"`).join(", ")}`;super(`Configuration "${$}"${_} not found`,{configName:$,alias:Y,searchPaths:Z,searchPathCount:Z.length})}},g8=class extends W9{code="CONFIG_LOAD_ERROR";constructor($,Z,Y){super(`Failed to load configuration from "${$}": ${Z.message}`,{configPath:$,configName:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},IY=class extends W9{code="CONFIG_VALIDATION_ERROR";constructor($,Z,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},RY=class extends W9{code="CONFIG_MERGE_ERROR";constructor($,Z,Y,U){super(`Failed to merge configuration from "${$}" with "${Z}": ${Y.message}`,{sourcePath:$,targetPath:Z,configName:U,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},M1=class extends W9{code="ENV_VAR_ERROR";constructor($,Z,Y,U){super(`Failed to parse environment variable "${$}" with value "${Z}" as ${Y}`,{envKey:$,envValue:Z,expectedType:Y,configName:U})}},KY=class extends W9{code="FILE_SYSTEM_ERROR";constructor($,Z,Y){super(`File system ${$} failed for "${Z}": ${Y.message}`,{operation:$,path:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},DY=class extends W9{code="TYPE_GENERATION_ERROR";constructor($,Z,Y){super(`Failed to generate types from "${$}" to "${Z}": ${Y.message}`,{configDir:$,outputPath:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},d8=class extends W9{code="SCHEMA_VALIDATION_ERROR";constructor($,Z,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},MY=class extends W9{code="BROWSER_CONFIG_ERROR";constructor($,Z,Y,U){super(`Failed to fetch configuration from "${$}": ${Z} ${Y}`,{endpoint:$,status:Z,statusText:Y,configName:U})}},HY=class extends W9{code="PLUGIN_ERROR";constructor($,Z,Y){super(`Plugin "${$}" failed during ${Z}: ${Y.message}`,{pluginName:$,operation:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},e9={configNotFound(X,$,Z){return new VY(X,$,Z)},configLoad(X,$,Z){return new g8(X,$,Z)},configValidation(X,$,Z){return new IY(X,$,Z)},configMerge(X,$,Z,Y){return new RY(X,$,Z,Y)},envVar(X,$,Z,Y){return new M1(X,$,Z,Y)},fileSystem(X,$,Z){return new KY(X,$,Z)},typeGeneration(X,$,Z){return new DY(X,$,Z)},schemaValidation(X,$,Z){return new d8(X,$,Z)},browserConfig(X,$,Z,Y){return new MY(X,$,Z,Y)},plugin(X,$,Z){return new HY(X,$,Z)}},ZU=/^https?:\/\//,V9=new f8("bunfig",{showTags:!0}),H8=new o6,M_=L9(S8.cwd(),"config"),H_=L9(S8.cwd(),"src/generated")});function I0(X=f.dialect){return X==="mysql"||X==="singlestore"}function l(X){if(f.dialect==="postgres")return`$${X}`;return"?"}function b0(X,$=1){if(X<=0)return"";if(f.dialect==="postgres"){let Z=`$${$}`;for(let Y=1;Y<X;Y++)Z+=`, $${$+Y}`;return Z}return X===1?"?":`?${", ?".repeat(X-1)}`}async function OG(){if(!_$)_$=await k4({name:"query-builder",alias:"qb",defaultConfig:H1}),w_(_$);return f}function w_(X){if(X.dialect&&uX&&X.dialect!==uX){let $=`${uX}->${X.dialect}`;if(!C1.has($))C1.add($),console.warn(`[query-builder] setConfig({ dialect: '${X.dialect}' }) overrides a previous setConfig({ dialect: '${uX}' }). Config is process-wide; in-flight queries from the previous configuration may break. `+"Run conflicting connections in separate processes \u2014 see stacksjs/stacks#1862 #18.")}if(X.dialect)uX=X.dialect;if(Object.assign(f,X),X.database)f.database={...f.database,...X.database};if(X.timestamps)f.timestamps={...f.timestamps,...X.timestamps};if(X.pagination)f.pagination={...f.pagination,...X.pagination};if(X.softDeletes)f.softDeletes={...f.softDeletes,...X.softDeletes};if(_$)Object.assign(_$,f)}var H1,CY,f,_$=null,uX=null,C1,c0=e(()=>{C_(),H1={verbose:!0,dialect:"postgres",database:{database:"test_db",username:"postgres",password:"postgres",host:"localhost",port:5432},timestamps:{createdAt:"created_at",updatedAt:"updated_at",defaultOrderColumn:"created_at"},pagination:{defaultPerPage:25,cursorColumn:"id"},aliasing:{relationColumnAliasFormat:"table_column"},relations:{foreignKeyFormat:"singularParent_id",maxDepth:10,maxEagerLoad:50,detectCycles:!0},transactionDefaults:{retries:2,isolation:"read committed",sqlStates:["40001","40P01"],backoff:{baseMs:50,factor:2,maxMs:2000,jitter:!0}},sql:{randomFunction:"RANDOM()",sharedLockSyntax:"FOR SHARE",jsonContainsMode:"operator"},features:{distinctOn:!0},debug:{captureText:!0},hooks:{},softDeletes:{enabled:!1,column:"deleted_at",defaultFilter:!0}},CY=Symbol.for("bun-query-builder.config"),f=globalThis[CY]??={...H1},C1=new Set});function q_(){let X=f.sqlite?.pragmas;return Array.isArray(X)?X:YU}function e1(X){for(let $ of q_())try{X.run($)}catch{}}var YU,X5=e(()=>{c0(),YU=["PRAGMA journal_mode = WAL","PRAGMA foreign_keys = ON","PRAGMA busy_timeout = 5000"]}),{SQL:wY}=globalThis.Bun;class UU{db;constructor(X){if(X!==":memory:"&&!X.startsWith(":")){let $=N_(X);if($&&$!==".")T_($,{recursive:!0})}this.db=new P_(X),e1(this.db)}query(X,$=[]){return this.db.prepare(X).all(...$)}run(X,$=[]){return this.db.prepare(X).run(...$)}close(){this.db.close()}get database(){return this.db}}function qY(X){return{__raw:!0,value:X,toString:()=>X}}function PY(X){let $=X.trimStart();for(;;)if($.startsWith("--")){let Z=$.indexOf(`
66
66
  `);$=Z===-1?"":$.slice(Z+1).trimStart()}else if($.startsWith("/*")){let Z=$.indexOf("*/");$=Z===-1?"":$.slice(Z+2).trimStart()}else return $}function S_(X){let $=[],Z="",Y=!1,U=!1,_=!1,Q=!1;for(let z=0;z<X.length;z++){let j=X[z],E=X[z+1];if(!Y&&!U&&!Q&&j==="-"&&E==="-"){_=!0,Z+=j;continue}if(_&&(j===`
67
- `||j==="\r")){_=!1,Z+=j;continue}if(!Y&&!U&&!_&&j==="/"&&E==="*"){Q=!0,Z+=j;continue}if(Q&&j==="*"&&E==="/"){Q=!1,Z+=j+E,z++;continue}if(_||Q){Z+=j;continue}if(j==="'"&&!U){if(Y&&E==="'"){Z+=j+E,z++;continue}Y=!Y,Z+=j;continue}if(j==='"'&&!Y){U=!U,Z+=j;continue}if(j===";"&&!Y&&!U){let V=PY(Z.trim());if(V)$.push(V);Z="";continue}Z+=j}let L=PY(Z.trim());if(L)$.push(L);return $}function TY(X){let $=new UU(X);function Z(_,...Q){let L=_[0],z=[];for(let j=0;j<Q.length;j++){let E=Q[j];if(E&&typeof E==="object"&&(E.__raw||E.raw)){let V=E.__raw?E.value:typeof E.raw==="string"?E.raw:E.raw();L+=V+(_[j+1]||"")}else if(E&&typeof E==="object"&&"sql"in E&&"values"in E)L+=E.sql+(_[j+1]||""),z.push(...E.values);else if(Array.isArray(E)){let V=E.map(()=>"?").join(", ");L+=V+(_[j+1]||""),z.push(...E)}else L+=`?${_[j+1]||""}`,z.push(E)}return{sql:L,values:z,execute:()=>{try{let j=L.trim().toUpperCase();if(j.startsWith("SELECT")||j.startsWith("PRAGMA")||/\bRETURNING\b/.test(j)){let E=$.query(L,z);return Promise.resolve(E)}else{let E=$.run(L,z);return Promise.resolve(E)}}catch(j){return Promise.reject(j)}},raw:()=>L,toString:()=>L,cancel:()=>{}}}function Y(_,...Q){if(Array.isArray(_)&&"raw"in _)return Z(_,...Q);if(typeof _==="string")return qY(_);return Z([""])}Y.raw=(_)=>qY(_),Y.unsafe=(_,Q=[])=>{let L=()=>{try{let z=_.trim().toUpperCase();if(z.startsWith("SELECT")||z.startsWith("PRAGMA")||/\bRETURNING\b/.test(z)){let j=$.query(_,Q);return Promise.resolve(j)}else{let j=$.run(_,Q);return Promise.resolve(j)}}catch(z){return Promise.reject(z)}};return{sql:_,values:Q,execute:L,then:(z,j)=>L().then(z,j),raw:()=>_,toString:()=>_,cancel:()=>{}}},Y.close=()=>{return $.close(),Promise.resolve()},Y.query=(_,Q)=>{try{let L=$.query(_,Q||[]);return Promise.resolve(L)}catch(L){return Promise.reject(L)}},Y.file=async(_,Q)=>{try{let{readFileSync:L}=await import("fs"),z=L(_,"utf-8"),j=S_(z);for(let E of j){let V=E.trim();if(!V||V.startsWith("--"))continue;let G=V.toUpperCase();if(G.startsWith("SELECT")||G.startsWith("PRAGMA"))$.query(E);else $.run(E)}return Promise.resolve([])}catch(L){return Promise.reject(L)}};let U=0;return Y.begin=async(_,Q)=>{let L=typeof _==="function"?_:Q;if(typeof L!=="function")throw TypeError("[query-builder] sqlite begin(): a transaction callback is required");let z=U>0,j=`qb_sp_${U}`;if(z)$.run(`SAVEPOINT ${j}`);else $.run("BEGIN");U++;try{let E=await L(Y);if(U--,z)$.run(`RELEASE SAVEPOINT ${j}`);else $.run("COMMIT");return E}catch(E){U--;try{if(z)$.run(`ROLLBACK TO SAVEPOINT ${j}`),$.run(`RELEASE SAVEPOINT ${j}`);else $.run("ROLLBACK")}catch{}throw E}},Y.savepoint=Y.begin,Y.beginDistributed=async()=>{throw Error("[query-builder] beginDistributed() (two-phase commit) is not supported on SQLite. Use begin()/transaction().")},Y._wrapper=$,Y}function A_(X,$){if((X==="postgres"||X==="mysql"||X==="singlestore")&&e$.env.DB_CONNECTION===X){let j=e$.env,E=(j.DB_DATABASE||$.database||"").replace(/^['"]|['"]$/g,""),V=j.DB_USERNAME||$.username,G=j.DB_PASSWORD??$.password??"",J=j.DB_HOST||$.host||"localhost",W=j.DB_PORT||$.port,F=X==="postgres"?"postgres":"mysql",R=j.DB_SSL==="true"||j.DB_SSL==="1"||$.ssl?"?ssl=true":"";return`${F}://${V}:${G}@${J}${W?`:${W}`:""}/${E}${R}`}if($.url)return $.url;let{database:Z,username:Y,password:U,host:_="localhost",port:Q,ssl:L}=$,z=L||e$.env.DB_SSL==="true"||e$.env.DB_SSL==="1"?"?ssl=true":"";switch(X){case"postgres":return`postgres://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"mysql":case"singlestore":return`mysql://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"sqlite":if(Z===":memory:")return":memory:";return Z||":memory:";default:throw Error(`Unsupported dialect: ${X}`)}}function _U(X){if(!X)return{};let $={},Z=(Y)=>Math.max(0,Math.round(Y/1000));if(typeof X.max==="number"&&Number.isFinite(X.max))$.max=X.max;if(typeof X.idleTimeoutMs==="number"&&Number.isFinite(X.idleTimeoutMs))$.idleTimeout=Z(X.idleTimeoutMs);if(typeof X.acquireTimeoutMs==="number"&&Number.isFinite(X.acquireTimeoutMs))$.connectionTimeout=Z(X.acquireTimeoutMs);if(typeof X.maxLifetimeMs==="number"&&Number.isFinite(X.maxLifetimeMs))$.maxLifetime=Z(X.maxLifetimeMs);return $}function k_(){let X=f.dialect,$=A_(X,f.database);try{if(X==="sqlite")return TY($);let Z=_U(f.database.pool);return Object.keys(Z).length>0?new wY($,Z):new wY($)}catch(Z){if(console.error(`[query-builder] Failed to create database connection for dialect '${X}': ${Z.message}`),X==="sqlite")return TY(":memory:");throw Z}}function x_(){let X=f.database;return JSON.stringify({dialect:f.dialect,database:X.database,username:X.username,password:X.password,host:X.host,port:X.port,url:X.url,pool:_U(X.pool)})}function yX(X=!1){let $=x_();if(X||oX!==null&&w1!==$||!oX)oX=k_(),w1=$;return oX}function RG(){oX=null,w1=null}async function dZ(X){try{return await X(yX())}catch($){if($?.code==="ERR_POSTGRES_CONNECTION_CLOSED"||$?.message?.includes("Connection closed")){console.log("-- Connection closed, creating fresh connection...");let Z=yX(!0);return await X(Z)}throw $}}function B_(){return new Proxy(function(){},{get(X,$){let Z=yX(),Y=Z[$];if(typeof Y==="function")return Y.bind(Z);return Y},apply(X,$,Z){return yX()(...Z)}})}var oX=null,w1=null,p,$X=e(()=>{c0(),X5(),p=B_()});async function KG(X={}){let $=X.iterations||1000,Z=X.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${$}`),console.log(`-- Operations: ${Z.join(", ")}`),console.log();let Y=H0();console.log("-- Setting up test table...");try{await p.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await p.unsafe(`
67
+ `||j==="\r")){_=!1,Z+=j;continue}if(!Y&&!U&&!_&&j==="/"&&E==="*"){Q=!0,Z+=j;continue}if(Q&&j==="*"&&E==="/"){Q=!1,Z+=j+E,z++;continue}if(_||Q){Z+=j;continue}if(j==="'"&&!U){if(Y&&E==="'"){Z+=j+E,z++;continue}Y=!Y,Z+=j;continue}if(j==='"'&&!Y){U=!U,Z+=j;continue}if(j===";"&&!Y&&!U){let V=PY(Z.trim());if(V)$.push(V);Z="";continue}Z+=j}let L=PY(Z.trim());if(L)$.push(L);return $}function TY(X){let $=new UU(X);function Z(_,...Q){let L=_[0],z=[];for(let j=0;j<Q.length;j++){let E=Q[j];if(E&&typeof E==="object"&&(E.__raw||E.raw)){let V=E.__raw?E.value:typeof E.raw==="string"?E.raw:E.raw();L+=V+(_[j+1]||"")}else if(E&&typeof E==="object"&&"sql"in E&&"values"in E)L+=E.sql+(_[j+1]||""),z.push(...E.values);else if(Array.isArray(E)){let V=E.map(()=>"?").join(", ");L+=V+(_[j+1]||""),z.push(...E)}else L+=`?${_[j+1]||""}`,z.push(E)}return{sql:L,values:z,execute:()=>{try{let j=L.trim().toUpperCase();if(j.startsWith("SELECT")||j.startsWith("PRAGMA")||/\bRETURNING\b/.test(j)){let E=$.query(L,z);return Promise.resolve(E)}else{let E=$.run(L,z);return Promise.resolve(E)}}catch(j){return Promise.reject(j)}},raw:()=>L,toString:()=>L,cancel:()=>{}}}function Y(_,...Q){if(Array.isArray(_)&&"raw"in _)return Z(_,...Q);if(typeof _==="string")return qY(_);return Z([""])}Y.raw=(_)=>qY(_),Y.unsafe=(_,Q=[])=>{let L=()=>{try{let z=_.trim().toUpperCase();if(z.startsWith("SELECT")||z.startsWith("PRAGMA")||/\bRETURNING\b/.test(z)){let j=$.query(_,Q);return Promise.resolve(j)}else{let j=$.run(_,Q);return Promise.resolve(j)}}catch(z){return Promise.reject(z)}};return{sql:_,values:Q,execute:L,then:(z,j)=>L().then(z,j),raw:()=>_,toString:()=>_,cancel:()=>{}}},Y.close=()=>{return $.close(),Promise.resolve()},Y.query=(_,Q)=>{try{let L=$.query(_,Q||[]);return Promise.resolve(L)}catch(L){return Promise.reject(L)}},Y.file=async(_,Q)=>{try{let{readFileSync:L}=await import("fs"),z=L(_,"utf-8"),j=S_(z);for(let E of j){let V=E.trim();if(!V||V.startsWith("--"))continue;let G=V.toUpperCase();if(G.startsWith("SELECT")||G.startsWith("PRAGMA"))$.query(E);else $.run(E)}return Promise.resolve([])}catch(L){return Promise.reject(L)}};let U=0;return Y.begin=async(_,Q)=>{let L=typeof _==="function"?_:Q;if(typeof L!=="function")throw TypeError("[query-builder] sqlite begin(): a transaction callback is required");let z=U>0,j=`qb_sp_${U}`;if(z)$.run(`SAVEPOINT ${j}`);else $.run("BEGIN");U++;try{let E=await L(Y);if(U--,z)$.run(`RELEASE SAVEPOINT ${j}`);else $.run("COMMIT");return E}catch(E){U--;try{if(z)$.run(`ROLLBACK TO SAVEPOINT ${j}`),$.run(`RELEASE SAVEPOINT ${j}`);else $.run("ROLLBACK")}catch{}throw E}},Y.savepoint=Y.begin,Y.beginDistributed=async()=>{throw Error("[query-builder] beginDistributed() (two-phase commit) is not supported on SQLite. Use begin()/transaction().")},Y._wrapper=$,Y}function A_(X,$){if((X==="postgres"||X==="mysql"||X==="singlestore")&&e$.env.DB_CONNECTION===X){let j=e$.env,E=(j.DB_DATABASE||$.database||"").replace(/^['"]|['"]$/g,""),V=j.DB_USERNAME||$.username,G=j.DB_PASSWORD??$.password??"",J=j.DB_HOST||$.host||"localhost",W=j.DB_PORT||$.port,F=X==="postgres"?"postgres":"mysql",R=j.DB_SSL==="true"||j.DB_SSL==="1"||$.ssl?"?ssl=true":"";return`${F}://${V}:${G}@${J}${W?`:${W}`:""}/${E}${R}`}if($.url)return $.url;let{database:Z,username:Y,password:U,host:_="localhost",port:Q,ssl:L}=$,z=L||e$.env.DB_SSL==="true"||e$.env.DB_SSL==="1"?"?ssl=true":"";switch(X){case"postgres":return`postgres://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"mysql":case"singlestore":return`mysql://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"sqlite":if(Z===":memory:")return":memory:";return Z||":memory:";default:throw Error(`Unsupported dialect: ${X}`)}}function _U(X){if(!X)return{};let $={},Z=(Y)=>Math.max(0,Math.round(Y/1000));if(typeof X.max==="number"&&Number.isFinite(X.max))$.max=X.max;if(typeof X.idleTimeoutMs==="number"&&Number.isFinite(X.idleTimeoutMs))$.idleTimeout=Z(X.idleTimeoutMs);if(typeof X.acquireTimeoutMs==="number"&&Number.isFinite(X.acquireTimeoutMs))$.connectionTimeout=Z(X.acquireTimeoutMs);if(typeof X.maxLifetimeMs==="number"&&Number.isFinite(X.maxLifetimeMs))$.maxLifetime=Z(X.maxLifetimeMs);return $}function k_(){let X=f.dialect,$=A_(X,f.database);try{if(X==="sqlite")return TY($);let Z=_U(f.database.pool);return Object.keys(Z).length>0?new wY($,Z):new wY($)}catch(Z){if(console.error(`[query-builder] Failed to create database connection for dialect '${X}': ${Z.message}`),X==="sqlite")return TY(":memory:");throw Z}}function x_(){let X=f.database;return JSON.stringify({dialect:f.dialect,database:X.database,username:X.username,password:X.password,host:X.host,port:X.port,url:X.url,pool:_U(X.pool)})}function yX(X=!1){let $=x_();if(X||oX!==null&&w1!==$||!oX)oX=k_(),w1=$;return oX}function RG(){oX=null,w1=null}async function dZ(X){try{return await X(yX())}catch($){if($?.code==="ERR_POSTGRES_CONNECTION_CLOSED"||$?.message?.includes("Connection closed")){console.log("-- Connection closed, creating fresh connection...");let Z=yX(!0);return await X(Z)}throw $}}function B_(){return new Proxy(function(){},{get(X,$){let Z=yX(),Y=Z[$];if(typeof Y==="function")return Y.bind(Z);return Y},apply(X,$,Z){return yX()(...Z)}})}var oX=null,w1=null,c,$X=e(()=>{c0(),X5(),c=B_()});async function KG(X={}){let $=X.iterations||1000,Z=X.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${$}`),console.log(`-- Operations: ${Z.join(", ")}`),console.log();let Y=H0();console.log("-- Setting up test table...");try{await c.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await c.unsafe(`
68
68
  CREATE TABLE bench_users (
69
69
  id INTEGER PRIMARY KEY AUTOINCREMENT,
70
70
  name TEXT NOT NULL,
@@ -72,10 +72,10 @@ export type ConfigOf = Config
72
72
  active INTEGER DEFAULT 1,
73
73
  created_at TEXT
74
74
  )
75
- `).execute();for(let Q=0;Q<100;Q++)await p.unsafe(`
75
+ `).execute();for(let Q=0;Q<100;Q++)await c.unsafe(`
76
76
  INSERT INTO bench_users (name, email, created_at)
77
77
  VALUES (?, ?, ?)
78
- `,[`User ${Q}`,`user${Q}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(Q){throw console.error("-- Failed to setup test table:",Q),Q}let U=[];if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({active:1}).limit(10).execute(),Q.push(performance.now()-z)}U.push({operation:"SELECT with WHERE + LIMIT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({id:1}).first(),Q.push(performance.now()-z)}U.push({operation:"SELECT by ID (first)",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("count")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").count(),Q.push(performance.now()-z)}U.push({operation:"COUNT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("insert")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.insertInto("bench_users").values({name:`Bench User ${L}`,email:`bench${L}@example.com`,created_at:new Date().toISOString()}).execute(),Q.push(performance.now()-z)}U.push({operation:"INSERT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("update")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.updateTable("bench_users").set({active:0}).where({id:1}).execute(),Q.push(performance.now()-z)}U.push({operation:"UPDATE by ID",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("delete")){let Q=[],L=[];for(let z=0;z<$;z++){let j=await Y.insertInto("bench_users").values({name:"To Delete",email:`delete${z}@example.com`,created_at:new Date().toISOString()}).execute();L.push(j)}for(let z=0;z<$;z++){let j=performance.now();await Y.deleteFrom("bench_users").where({id:L[z]}).execute(),Q.push(performance.now()-j)}U.push({operation:"DELETE by ID",avgTime:Q.reduce((z,j)=>z+j,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}console.log("-- Benchmark Results"),console.log();let _=Math.max(...U.map((Q)=>Q.operation.length));console.log("Operation".padEnd(_+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(_+2+12+12+12+12));for(let Q of U){let L=Q.operation.padEnd(_+2),z=Q.avgTime.toFixed(3).padStart(12),j=Q.minTime.toFixed(3).padStart(12),E=Q.maxTime.toFixed(3).padStart(12),V=(1000/Q.avgTime).toFixed(0).padStart(12);console.log(`${L}${z}${j}${E}${V}`)}console.log();try{await p.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(Q){console.error("-- Warning: Failed to cleanup test table:",Q)}}var y_=e(()=>{$X(),v0()});function h_(X){return X.endsWith("s")?X.slice(0,-1):X}function PX(X,$,Z,Y={}){let U=Y.singularize??h_,Q=X.relations?.[$]?.belongsToMany?.[Z];if(Q==null)return null;let L=typeof Q==="object",z=L?Q:null,j=L?z.model:Q,E=X.modelToTable[j]||j,V,G;if(z?.table)V=z.table;else if(z?.through){if(G=z.through,V=X.modelToTable[z.through],!V)throw Error(`[query-builder] belongsToMany relation '${Z}' on '${$}' references unknown through model '${z.through}'. Make sure '${z.through}' is registered via defineModels({...}).`)}else{let q=U($),w=U(E);V=[q,w].sort().join("_")}let J=z?.foreignKey??`${U($)}_id`,W=z?.relatedKey??`${U(E)}_id`,F={};if(z?.pivot?.columns)Object.assign(F,z.pivot.columns);if(G&&Y.models){let q=Y.models[G],w=q?.definition??q?.getDefinition?.()??q,A=w?.attributes??{};for(let[P,H]of Object.entries(A)){if(P===J||P===W||P===(w?.primaryKey??"id"))continue;F[P]={default:H?.default,nullable:H?.nullable,validation:H?.validation}}}let R=Boolean(z?.pivot?.timestamps),D=Object.keys(F);return{pivotTable:V,fkParent:J,fkRelated:W,pivotColumns:D,pivotColumnDefs:F,pivotModelName:G,timestamps:R,relatedModelName:j,relatedTable:E,hasConfig:L}}function*DG(X,$={}){let Z=X.relations;if(!Z)return;for(let[Y,U]of Object.entries(Z)){let _=U?.belongsToMany;if(!_)continue;for(let Q of Object.keys(_)){let L=PX(X,Y,Q,$);if(L)yield{parentTable:Y,relationKey:Q,resolved:L}}}}function p8(X){return typeof X==="object"&&X!==null&&"raw"in X&&typeof X.raw==="string"}function MG(X,...$){if(typeof X==="string")return{raw:X};let Z=X[0];for(let Y=0;Y<$.length;Y++)Z+=q9($[Y])+X[Y+1];return{raw:Z}}function t0(X){return I0(f.dialect)?`\`${X.replace(/`/g,"``")}\``:`"${X.replace(/"/g,'""')}"`}function X8(X,$=1){let Z=Object.keys(X[0]??{}),Y=[],U=$,_=X.map((Q)=>{return`(${Z.map((z)=>{return Y.push(Q[z]),l(U++)}).join(", ")})`});return{colsSql:Z.map(t0).join(", "),valuesSql:_.join(", "),params:Y,nextIndex:U}}function nX(X){return Boolean(X&&(X.onSlowQuery||X.slowQueryThresholdMs!=null&&X.slowQueryThresholdMs>=0))}function NY(X){if(typeof X==="string")return X;if(p8(X))return X.raw;if(X&&typeof X==="object"){let $=X;if(typeof $.raw==="function")return String($.raw());if(typeof $.sql==="string")return $.sql;let Z=String(X);if(Z!=="[object Object]")return Z}throw TypeError(`[query-builder] select(): unsupported column ${String(X)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function c(X,$){if(!o.IDENTIFIER.test(X)){let Z=$?` in ${$}`:"";throw Error(`[query-builder] Invalid identifier${Z}: '${X}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function f0(X,$){if(typeof X!=="string")throw TypeError(`[query-builder] ${$}: operator must be a string, got ${typeof X}`);let Z=X.toLowerCase();if(!q1.has(Z))throw TypeError(`[query-builder] ${$}: refusing to use '${X}' as a SQL operator \u2014 not in the allowed set (${[...q1].join(", ")})`);return X}function Q9(X,$){if(typeof X!=="string"||X.length===0)throw TypeError(`[query-builder] ${$}: identifier must be a non-empty string, got ${typeof X}`);if(X.length>129)throw TypeError(`[query-builder] ${$}: identifier '${X}' too long`);let Z=X.split(".");if(Z.length>2)throw TypeError(`[query-builder] ${$}: identifier '${X}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let Y of Z)if(!/^[A-Z_][A-Z0-9_]*$/i.test(Y))throw TypeError(`[query-builder] ${$}: identifier segment '${Y}' contains characters outside [A-Za-z0-9_]`)}function RX(X,$){if(typeof X==="string")return v_($),X;if(X===null||X===void 0)throw TypeError(`[query-builder] ${$}: fragment must be a SqlFragment, got ${X}`);if(p8(X))return X.raw;if(typeof X==="object"){let Z=X;if(typeof Z.raw==="string")return Z.raw;if(typeof Z.raw==="function"){let U=Z.raw();if(typeof U==="string")return U}if(typeof Z.sql==="string")return Z.sql;let Y=String(X);if(Y!=="[object Object]"&&Y!=="[object Promise]")return Y}throw TypeError(`[query-builder] ${$}: 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 v_(X){if(P1.has(X))return;P1.add(X),console.warn(`[query-builder] ${X}: bare string passed to a *Raw method. Prefer \`sql\`...\`\` tagged-template fragments so values are parameterised `+"instead of concatenated \u2014 concatenating request input into SQL is an "+"injection vector. This will become a hard error in a future release.")}function q9(X){if(X===null)return"NULL";if(typeof X==="number"&&Number.isFinite(X))return String(X);if(typeof X==="boolean")return X?"1":"0";if(typeof X==="string")return`'${X.replace(/'/g,"''")}'`;if(X instanceof Date)return`'${X.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof X}`)}function b_(X,$){let Z=Array.isArray(X)?X:X?[X]:[],Y=[];if(Z.length)Y.push(`PARTITION BY ${Z.join(", ")}`);if($&&$.length)Y.push(`ORDER BY ${$.map(([U,_])=>`${U} ${_==="desc"?"DESC":"ASC"}`).join(", ")}`);return Y.length?`OVER (${Y.join(" ")})`:"OVER ()"}class QU{cache=new Map;maxSize=100;get(X){let $=this.cache.get(X);if(!$)return null;if(Date.now()>$.expiresAt)return this.cache.delete(X),null;return this.cache.delete(X),this.cache.set(X,$),$.data}set(X,$,Z){if(this.cache.has(X))this.cache.delete(X);if(this.cache.size>=this.maxSize){let Y=Date.now(),U=!1;for(let[_,Q]of this.cache)if(Y>Q.expiresAt){if(this.cache.delete(_),U=!0,this.cache.size<this.maxSize)break}if(!U){let _=this.cache.keys().next().value;if(_!==void 0)this.cache.delete(_)}}this.cache.set(X,{data:$,expiresAt:Date.now()+Z})}clear(){this.cache.clear()}setMaxSize(X){this.maxSize=X}}function f_(X){let $=String(X?.message||"").toLowerCase();return $.includes("deadlock")||$.includes("serialization failure")||$.includes("could not serialize access")||$.includes("deadlock found when trying to get lock")||$.includes("lock wait timeout exceeded")||$.includes("database is locked")||$.includes("busy")}function g_(X,$){if(!$||$.length===0)return!1;let Z=X&&(X.code||X.sqlState||X.sqlstate);if(!Z)return!1;return $.includes(Z)}function d_(X){return new Promise(($)=>setTimeout($,X))}function $8(X){let $=rX.get(X);if($!==void 0)return $;let Z=p_(X);if(rX.size>=n_)rX.clear();return rX.set(X,Z),Z}function p_(X){let $=[{key:"GROUP_BY",tokens:/^GROUP\s+BY\b/i},{key:"ORDER_BY",tokens:/^ORDER\s+BY\b/i},{key:"HAVING",tokens:/^HAVING\b/i},{key:"OFFSET",tokens:/^OFFSET\b/i},{key:"LIMIT",tokens:/^LIMIT\b/i},{key:"WHERE",tokens:/^WHERE\b/i}],Z=[],Y=0,U=!1,_="";for(let E=0;E<X.length;E++){let V=X[E];if(U){if(V===_){if(X[E+1]===_){E++;continue}U=!1}continue}if(V==="'"||V==='"'||V==="`"){U=!0,_=V;continue}if(V==="("){Y++;continue}if(V===")"){Y--;continue}if(Y!==0)continue;if(E===0||!/\s/.test(X[E-1]))continue;let G=X.charCodeAt(E)&-33;if(G!==71&&G!==79&&G!==72&&G!==76&&G!==87)continue;let J=X.slice(E);for(let{key:W,tokens:F}of $){let R=J.match(F);if(!R)continue;Z.push({key:W,start:E}),E+=R[0].length-1;break}}if(Z.length<=1)return X;let Q=X.slice(0,Z[0].start).trimEnd(),L={};for(let E=0;E<Z.length;E++){let V=Z[E].start,G=E+1<Z.length?Z[E+1].start:X.length,J=X.slice(V,G).trim();if(!L[Z[E].key])L[Z[E].key]=[];L[Z[E].key].push(J)}let j=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((E)=>L[E]).map((E)=>L[E].join(" ")).join(" ");return j?`${Q} ${j}`:Q}function c_(X,$){let Z=Math.max(1,$?.baseMs??50),Y=Math.max(1,$?.factor??2),U=Math.max(Z,$?.maxMs??2000),_=Math.min(U,Z*Y**Math.max(0,X-1));if($?.jitter){let Q=Math.random()*_*0.2;_=_-Q/2}return Math.floor(_)}function H0(X){let $=X?.sql??yX(),Z=X?.meta,Y=X?.schema,U=new Map;function _(G){if(Array.isArray(G)){let[D,q,w]=G;c(D,"where(column)");let A=String(D);switch(q){case"in":if(Array.isArray(w)){let P=b0(w.length);return $.unsafe(`${A} IN (${P})`,w)}return $.unsafe(`${A} IN (${l(1)})`,[w]);case"not in":if(Array.isArray(w)){let P=b0(w.length);return $.unsafe(`${A} NOT IN (${P})`,w)}return $.unsafe(`${A} NOT IN (${l(1)})`,[w]);case"like":return $.unsafe(`${A} LIKE ${l(1)}`,[w]);case"is":case"is not":{if(w!==null&&w!==void 0)throw TypeError(`[query-builder] where(..., '${q}', ?): operator '${q}' only accepts NULL/undefined as value, got ${typeof w} (${String(w)})`);return $.unsafe(`${A} IS ${q==="is not"?"NOT ":""}NULL`)}case"!=":return $.unsafe(`${A} <> ${l(1)}`,[w]);case"<":case">":case"<=":case">=":case"=":return $.unsafe(`${A} ${q} ${l(1)}`,[w]);default:throw TypeError(`[query-builder] where(..., '${String(q)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in G)return G.raw;let J=Object.keys(G);if(J.length===0)return $.unsafe("");let W=[],F=[],R=1;for(let D of J){c(D,"where(object key)");let q=G[D];if(Array.isArray(q)){let w=b0(q.length,R);W.push(`${D} IN (${w})`),F.push(...q),R+=q.length}else W.push(`${D} = ${l(R++)}`),F.push(q)}return $.unsafe(W.join(" AND "),F)}function Q(G,J,W){if(!W)return J;let F=_(W);return $`${J} WHERE ${F}`}function L(G){let J=f.debug?.captureText;if(f.debug)f.debug.captureText=!0;let W=String(G);if(f.debug)f.debug.captureText=J;return W}function z(G){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 j(G,J,W){let F=f.hooks,R=F?.slowQueryThresholdMs,D=R!=null&&R>=0,q=Boolean(F?.onSlowQuery||D),w=F&&(F.onQueryStart||F.onQueryEnd||F.onQueryError||F.startSpan||q),A=W?.timeoutMs&&W.timeoutMs>0||W?.signal;if(!w&&!A)return G.execute();let P=L(G),H=z(G),N=Date.now(),S;try{if(F?.onQueryStart?.({sql:P,params:H,kind:J}),F?.startSpan)S=F.startSpan({sql:P,params:H,kind:J})}catch{}let h=!1,d=(u,i)=>{if(h)return;h=!0;let m=Date.now()-N;try{if(u)F?.onQueryError?.({sql:P,params:H,error:u,durationMs:m,kind:J});else if(F?.onQueryEnd?.({sql:P,params:H,durationMs:m,rowCount:i,kind:J}),D&&m>=R)if(F?.onSlowQuery)F.onSlowQuery({sql:P,params:H,durationMs:m,kind:J});else console.warn(`[query-builder] slow query (${m}ms >= ${R}ms): ${P}`)}catch{}try{S?.end(u)}catch{}},v=G.execute(),n=[v],a;if(W?.timeoutMs&&W.timeoutMs>0){let u=new Promise((i,m)=>{a=setTimeout(()=>{try{G.cancel?.()}catch{}let X0=Error(`Query timed out after ${W.timeoutMs}ms`);X0.code="EBQBTIMEOUT",m(X0)},W.timeoutMs)});n.push(u)}if(W?.signal){if(W.signal.aborted){try{G.cancel?.()}catch{}let i=Error("Query aborted");return i.code="EBQBABORT",d(i),Promise.reject(i)}let u=()=>{try{G.cancel?.()}catch{}};W.signal.addEventListener("abort",u,{once:!0}),v.finally(()=>{W.signal?.removeEventListener("abort",u)})}return Promise.race(n).then((u)=>{clearTimeout(a);let i=Array.isArray(u)?u.length:typeof u==="number"?u:void 0;return d(void 0,i),u}).catch((u)=>{throw clearTimeout(a),d(u),u})}function E(G,J){let W=J??L(G);return{sql:W,toString:()=>W,execute:()=>G.execute(),values:()=>G.values(),raw:()=>G.raw()}}function V(G,J){let W=$,F=J&&J.length>0?`SELECT ${J.join(", ")} FROM ${String(G)}`:`SELECT * FROM ${String(G)}`,R=null,D=()=>{if(R===null){let O=$8(F);R=y.length>0?$.unsafe(O,y):$.unsafe(O)}return R},q=(O,I)=>{let M=!o.WHERE.test(F)?"WHERE":O==="WHERE"?"AND":O;F=`${F} ${M} ${I}`},w=(O,I)=>{let K=I.__rawState?.();if(K){let M=y.length,C=f.dialect==="postgres"?K.sql.replace(/\$(\d+)/g,(T,k)=>`$${Number(k)+M}`):K.sql;F+=` ${O} ${C}`,y.push(...K.params)}else F+=` ${O} ${String(I.toSQL())}`;R=null},A=(O)=>{let I=/\(|\)|\b(?:WHERE|GROUP BY|HAVING|ORDER BY|LIMIT|OFFSET|UNION)\b/gi,K=0,M=-1,C;while(C=I.exec(F))if(C[0]==="(")K++;else if(C[0]===")")K=Math.max(0,K-1);else if(K===0){M=C.index;break}F=M>=0?`${F.slice(0,M)}${O} ${F.slice(M)}`:`${F} ${O}`,R=null},P=new Set,H,N,S=!1,h=!1,d=!1,v=new Map,n=new Set,a=60000,u=(O)=>{if(f.relations.singularizeStrategy==="none")return O;return O.endsWith("s")?O.slice(0,-1):O},i=(O)=>{if(!Z)return null;return PX(Z,String(G),O,{singularize:u,models:Z.models})},m=(O)=>{if(!O||typeof O!=="object"||n.size===0)return O;let I;for(let K of Object.keys(O))if(K.startsWith("pivot_")){if(!I)I={};I[K.slice(6)]=O[K],delete O[K]}if(I)O.pivot=I;return O},X0=(O)=>{if(n.size===0||!O)return O;if(Array.isArray(O))for(let I=0;I<O.length;I++)m(O[I]);else m(O);return O},R0=(O)=>{if(!Z)return;if(P.has(O.pivotTable))return;let I=String(G),K=Z.primaryKeys[I]??"id";c(O.pivotTable,"wherePivot auto-join (pivot table)"),c(O.fkParent,"wherePivot auto-join (parent FK)"),c(I,"wherePivot auto-join (parent table)"),c(K,"wherePivot auto-join (parent PK)"),R=W`${D()} LEFT JOIN ${W(O.pivotTable)} ON ${W(`${O.pivotTable}.${O.fkParent}`)} = ${W(`${I}.${K}`)}`,F=`${F} LEFT JOIN ${O.pivotTable} ON ${O.pivotTable}.${O.fkParent} = ${I}.${K}`,P.add(O.pivotTable)},z0=[],y=[],J9=(O)=>{if(o.SELECT_STAR.test(F))F=F.replace(o.SELECT_STAR,`SELECT *, ${O}`);else if(o.SELECT.test(F))F=F.replace(o.SELECT_FROM,`SELECT $1, ${O} FROM`);let I=String(D());if(o.SELECT_STAR.test(I)){let K=I.replace(o.SELECT_STAR,`SELECT *, ${O}`);R=$.unsafe(K)}else if(o.SELECT.test(I)){if(o.SELECT_FROM.exec(I)){let M=I.replace(o.SELECT_FROM,`SELECT $1, ${O} FROM`);R=$.unsafe(M)}}},G0=(O,I,K,M)=>{J9(`${O} ${b_(K,M)} AS ${I}`)},UX=(O,I,K,M)=>{c(O,"relationship subquery (parent table)"),c(I,"relationship subquery (target table)"),c(K,"relationship subquery (primary key)");let C=`${O.endsWith("s")?O.slice(0,-1):O}_id`;c(C,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${C} = ${O}.${K}`;if(M){let x=M({where:(g,B,b)=>{return c(g,"relationship subquery condition"),`${I}.${g} ${f0(B,"whereHas callback")} ${q9(b)}`}});if(x)T+=` AND ${x}`}return T},v$=(O,I,K,M)=>{c(O,"relationship subquery (parent table)"),c(I,"relationship subquery (target table)"),c(K,"relationship subquery (primary key)");let C=`${I.endsWith("s")?I.slice(0,-1):I}_id`;c(C,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${K} = ${O}.${C}`;if(M){let x=M({where:(g,B,b)=>{return c(g,"relationship subquery condition"),`${I}.${g} ${f0(B,"whereHas callback")} ${q9(b)}`}});if(x)T+=` AND ${x}`}return T},b$=(O,I,K,M,C,T)=>{c(O,"relationship subquery (parent table)"),c(I,"relationship subquery (target table)"),c(K,"relationship subquery (primary key)"),c(M,"relationship subquery (target primary key)");let k=T&&Z?PX(Z,O,T,{singularize:u,models:Z.models}):null,x=u(O),g=u(I),B=k?.pivotTable??[x,g].sort().join("_"),b=k?.fkParent??`${x}_id`,s=k?.fkRelated??`${g}_id`;c(B,"relationship subquery (pivot table)"),c(b,"relationship subquery (foreign key A)"),c(s,"relationship subquery (foreign key B)");let $0=`SELECT 1 FROM ${B} JOIN ${I} ON ${I}.${M} = ${B}.${s} WHERE ${B}.${b} = ${O}.${K}`;if(C){let r=C({where:(S0,X9,_9)=>{return c(S0,"relationship subquery condition"),`${I}.${S0} ${f0(X9,"whereHas callback")} ${q9(_9)}`}});if(r)$0+=` AND ${r}`}return $0},k7=(O,I,K)=>{c(O,"withCount (parent table)"),c(I,"withCount (target table)"),c(K,"withCount (primary key)");let M=`${O.endsWith("s")?O.slice(0,-1):O}_id`;return c(M,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${I} WHERE ${I}.${M} = ${O}.${K})`},x7=(O,I,K,M)=>{c(O,"withCount (parent table)"),c(I,"withCount (target table)"),c(K,"withCount (primary key)");let C=M&&Z?PX(Z,O,M,{singularize:u,models:Z.models}):null,T=u(O),k=u(I),x=C?.pivotTable??[T,k].sort().join("_"),g=C?.fkParent??`${T}_id`;return c(x,"withCount (pivot table)"),c(g,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${x} WHERE ${x}.${g} = ${O}.${K})`},f$=(O,I,K)=>{if(!Z)return;c(K,`with${O[0]}${O.slice(1).toLowerCase()} (column)`);let M=String(G),C=Z.relations?.[M];if(!C)return;let T=Object.entries(C).find(([r,S0])=>S0&&typeof S0==="object"&&(I in S0));if(!T)return;let[k,x]=T,g=x[I],B=typeof g==="string"?g:g?.model||g?.target||g,b=Z.modelToTable[B]||B,s=Z.primaryKeys[M]??"id";c(b,`with${O} (target table)`);let $0=`${O}(${b}.${K})`,P0;if(k==="hasMany"||k==="hasOne"){let r=`${M.endsWith("s")?M.slice(0,-1):M}_id`;c(r,`with${O} (foreign key)`),P0=`(SELECT ${$0} FROM ${b} WHERE ${b}.${r} = ${M}.${s})`}else if(k==="belongsToMany"){let r=Z?PX(Z,M,I,{singularize:u,models:Z.models}):null,S0=u(M),X9=u(b),_9=r?.pivotTable??[S0,X9].sort().join("_"),_X=r?.fkParent??`${S0}_id`,_0=r?.fkRelated??`${X9}_id`,cX=Z.primaryKeys[b]??"id";c(_9,`with${O} (pivot table)`),c(_X,`with${O} (foreign key)`),c(_0,`with${O} (related key)`),P0=`(SELECT ${$0} FROM ${_9} JOIN ${b} ON ${b}.${cX} = ${_9}.${_0} WHERE ${_9}.${_X} = ${M}.${s})`}else return;J9(`${P0} AS ${I}_${O.toLowerCase()}_${K}`)},R5=()=>{if(v.size===0)return;let O=[];for(let[I,K]of v.entries()){let M=i(I);if(!M)continue;for(let T of K)c(T,"withPivot");let C=K.map((T)=>`${M.pivotTable}.${T} AS pivot_${T}`);O.push(...C)}if(O.length>0){let I=O.join(", ");J9(I)}};return new Proxy({distinct(){return F=F.replace(/^SELECT\s+/i,"SELECT DISTINCT "),R=null,this},distinctOn(...O){let I=O.map(String).join(", ");return F=F.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${I}) `),R=null,this},selectRaw(O){let I=RX(O,"selectRaw(fragment)"),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I}${F.substring(K)}`;else F+=`, ${I}`;return R=null,this},rowNumber(O="row_number",I,K){let M=[];if(I){let x=Array.isArray(I)?I:[I];M.push(`PARTITION BY ${x.join(", ")}`)}if(K&&K.length)M.push(`ORDER BY ${K.map(([x,g])=>`${x} ${g==="desc"?"DESC":"ASC"}`).join(", ")}`);let T=`ROW_NUMBER() ${M.length?`OVER (${M.join(" ")})`:"OVER ()"} AS ${O}`,k=F.indexOf(" FROM ");if(k!==-1)F=`${F.substring(0,k)}, ${T}${F.substring(k)}`;else F+=`, ${T}`;return R=null,this},denseRank(O="dense_rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],C=[];if(M.length)C.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)C.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`DENSE_RANK() ${C.length?`OVER (${C.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},rank(O="rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],C=[];if(M.length)C.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)C.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`RANK() ${C.length?`OVER (${C.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},over(O,I,K={}){return G0(O,I,K.partitionBy,K.orderBy),this},lag(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LAG(${K.join(", ")})`,I.alias??`${O}_lag`,I.partitionBy,I.orderBy),this},lead(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LEAD(${K.join(", ")})`,I.alias??`${O}_lead`,I.partitionBy,I.orderBy),this},sumOver(O,I={}){return G0(`SUM(${O})`,I.alias??`${O}_sum`,I.partitionBy,I.orderBy),this},avgOver(O,I={}){return G0(`AVG(${O})`,I.alias??`${O}_avg`,I.partitionBy,I.orderBy),this},countOver(O="*",I={}){return G0(`COUNT(${O})`,I.alias??"count_over",I.partitionBy,I.orderBy),this},minOver(O,I={}){return G0(`MIN(${O})`,I.alias??`${O}_min`,I.partitionBy,I.orderBy),this},maxOver(O,I={}){return G0(`MAX(${O})`,I.alias??`${O}_max`,I.partitionBy,I.orderBy),this},firstValue(O,I={}){return G0(`FIRST_VALUE(${O})`,I.alias??`${O}_first`,I.partitionBy,I.orderBy),this},lastValue(O,I={}){return G0(`LAST_VALUE(${O})`,I.alias??`${O}_last`,I.partitionBy,I.orderBy),this},selectAll(){return this},select(O){if(!O)return this;let I=Array.isArray(O)?O:[O];if(I.length===0)return this;let K=I.map(NY),M=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(F),C=M?M[1]:"",T=F.indexOf(" FROM ");if(T!==-1)F=`SELECT ${C}${K.join(", ")}${F.substring(T)}`;else F=`SELECT ${C}${K.join(", ")} FROM ${G}`;return R=null,this},addSelect(...O){if(!O.length)return this;let I=O.map(NY),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I.join(", ")}${F.substring(K)}`;else F+=`, ${I.join(", ")}`;return R=null,this},with(...O){if(!Z||!O||O.length===0)return this;let I=[];for(let B of O){if(!B)continue;if(typeof B==="string")I.push({name:B});else if(typeof B==="object"&&!Array.isArray(B))for(let[b,s]of Object.entries(B))if(typeof s==="function")I.push({name:b,callback:s});else I.push({name:b})}if(I.length===0)return this;let K=f.relations.maxEagerLoad??50;if(I.length>K)throw Error(`[query-builder] Too many relationships to eager load (${I.length}). Maximum allowed: ${K}`);let M=String(G),C=new Set,T=new Set,k=new Map,x=(B)=>{let b=Z.relations?.[B];if(!b)return[];return[...Object.keys(b.hasOne||{}),...Object.keys(b.hasMany||{}),...Object.keys(b.belongsTo||{}),...Object.keys(b.belongsToMany||{}),...Object.keys(b.hasOneThrough||{}),...Object.keys(b.hasManyThrough||{}),...Object.keys(b.morphOne||{}),...Object.keys(b.morphMany||{}),...Object.keys(b.morphToMany||{}),...Object.keys(b.morphedByMany||{})]},g=(B,b,s=0,$0)=>{let P0=f.relations.maxDepth??10;if(s>=P0)throw Error(`[query-builder] Maximum relationship depth (${P0}) exceeded at '${b}'. Consider using separate queries or increasing maxDepth.`);let r=Z.relations?.[B];if(!r)return B;let S0=(Z0)=>{if(f.softDeletes?.enabled&&f.softDeletes?.defaultFilter){let Y0=f.softDeletes.column||"deleted_at";return` AND ${Z0}.${Y0} IS NULL`}return""},X9=(Z0)=>{if(!$0)return"";let Y0=[],w0=(L0,a0,R9)=>{c(String(L0),"with() constraint column");let QX=f0(a0,"with() constraint operator");Y0.push(`${Z0}.${String(L0)} ${QX} ${q9(R9)}`)},K0=(L0)=>()=>{throw Error(`[query-builder] with('${b}', ...): ${L0} 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.)`)},T0={where:(L0,a0,R9)=>{if(Array.isArray(L0))w0(L0[0],L0[1],L0[2]);else if(L0&&typeof L0==="object")for(let QX of Object.keys(L0))w0(QX,"=",L0[QX]);else if(a0!==void 0&&R9!==void 0)w0(L0,a0,R9);else if(a0!==void 0)w0(L0,"=",a0);return T0},whereIn:(L0,a0)=>{return c(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IN (${a0.map(q9).join(", ")})`),T0},whereNull:(L0)=>{return c(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NULL`),T0},whereNotNull:(L0)=>{return c(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NOT NULL`),T0},orderBy:K0("orderBy()"),limit:K0("limit()"),offset:K0("offset()"),take:K0("take()")};return $0(T0),Y0.length?` AND ${Y0.join(" AND ")}`:""},_9=()=>{let Z0=(K0)=>{let T0=K0?.[b];return T0?Z.modelToTable[T0]:void 0},Y0=(K0)=>{let T0=K0?.[b],L0=typeof T0==="string"?T0:T0?.model;return L0?Z.modelToTable[L0]:void 0},w0=(K0)=>{let T0=K0?.[b];return T0?.target?Z.modelToTable[T0.target]:void 0};return Z0(r?.hasOne)||Z0(r?.hasMany)||Z0(r?.belongsTo)||Y0(r?.belongsToMany)||w0(r?.hasOneThrough)||w0(r?.hasManyThrough)||Z0(r?.morphOne)||Z0(r?.morphMany)||Z0(r?.morphToMany)||Z0(r?.morphedByMany)},_X=_9()??(Z.modelToTable[b]||Z.tableToModel[b]?Z.modelToTable[b]??b:b),_0=String(_X);if(!_X||!_9()&&!Z.modelToTable[b]&&!Z.tableToModel[b]){let Z0=x(B);if(Z0.length>0&&!Z0.includes(b)){let Y0=` Available relationships: ${Z0.join(", ")}`;throw Error(`[query-builder] Relationship '${b}' not found on table '${B}'.${Y0}`)}}if(f.relations.detectCycles!==!1){let Z0=`${B}->${_0}`;if(C.has(Z0))throw Error(`[query-builder] Circular relationship detected: ${Z0}. This would cause an infinite loop.`);C.add(Z0)}if(!_0||_0===B)return B;let cX=r?.hasOneThrough?.[b]||r?.hasManyThrough?.[b];if(cX){let{through:Z0,target:Y0}=cX,w0=Z.modelToTable[Z0]||Z0,K0=Z.modelToTable[Y0]||Y0,T0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[w0]??"id",a0=`${u(B)}_id`,R9=`${u(w0)}_id`;return A(`LEFT JOIN ${w0} ON ${w0}.${a0} = ${B}.${T0} LEFT JOIN ${K0} ON ${K0}.${R9} = ${w0}.${L0}`),P.add(w0),P.add(K0),K0}if(Boolean(r?.belongsToMany?.[b])){let Z0=PX(Z,B,b,{singularize:u,models:Z.models}),Y0=Z0?.pivotTable??[u(B),u(_0)].sort().join("_"),w0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",T0=Z0?.fkParent??`${u(B)}_id`,L0=Z0?.fkRelated??`${u(_0)}_id`;return A(`LEFT JOIN ${Y0} ON ${Y0}.${T0} = ${B}.${w0} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${L0}${X9(_0)}`),P.add(Y0),P.add(_0),_0}if(Boolean(r?.morphToMany?.[b])){let Z0=b,Y0=`${u(_0)}_${Z0}`,w0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",T0=`${Z0}_type`,L0=`${Z0}_id`,a0=`${u(_0)}_id`,R9=q9(Z.tableToModel[B]||B);return A(`LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${B}.${w0} AND ${Y0}.${T0} = ${R9} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${a0}`),P.add(Y0),P.add(_0),_0}if(Boolean(r?.morphedByMany?.[b])){let Z0=r.morphedByMany?.[b]||b,Y0=Z.modelToTable[Z0]||Z0,w0=u(B),K0=`${u(Y0)}_${w0}`,T0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[Y0]??"id",a0=`${w0}_type`,R9=`${w0}_id`,QX=`${u(Y0)}_id`,f7=q9(Z.tableToModel[Y0]||Y0);return A(`LEFT JOIN ${K0} ON ${K0}.${QX} = ${B}.${T0} LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${K0}.${R9} AND ${K0}.${a0} = ${f7}`),P.add(K0),P.add(Y0),Y0}if(Boolean(r?.belongsTo?.[b])){let Z0=`${u(_0)}_id`,Y0=Z.primaryKeys[_0]??"id";return A(`LEFT JOIN ${_0} ON ${B}.${Z0} = ${_0}.${Y0}${X9(_0)}`),P.add(_0),_0}let B7=Boolean(r?.morphOne?.[b]),y7=Boolean(r?.morphMany?.[b]);if(B7||y7){let Z0=`${b}_type`,Y0=`${b}_id`,w0=Z.primaryKeys[B]??"id",K0=q9(Z.tableToModel[B]||B);return A(`LEFT JOIN ${_0} ON ${_0}.${Y0} = ${B}.${w0} AND ${_0}.${Z0} = ${K0}`),P.add(_0),_0}let h7=`${u(B)}_id`,v7=Z.primaryKeys[B]??"id",b7=`${S0(_0)}${X9(_0)}`;return A(`LEFT JOIN ${_0} ON ${_0}.${h7} = ${B}.${v7}${b7}`),P.add(_0),_0};for(let B of I){let b=B.name.trim();if(B.callback)k.set(b,B.callback);let s=b.split("."),$0=M,P0=0;for(let r of s){if(!r||r.trim().length===0)continue;let S0=r.trim(),X9=k.get(S0);$0=g($0,S0,P0,X9)||$0,P0++}T.add(b)}if(v.size>0){let B=[];for(let[b,s]of v.entries()){let $0=i(b);if(!$0)continue;let P0=s.map((r)=>`${$0.pivotTable}.${r} AS pivot_${r}`);B.push(...P0)}if(B.length>0){let b=B.join(", ");J9(b)}}return R=null,this},whereHas(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let C=Object.entries(M).find(([s,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!C)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=C,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b;if(T==="hasMany"||T==="hasOne"){let s=Z.primaryKeys[K]??"id";b=UX(K,B,s,I)}else if(T==="belongsTo"){let s=Z.primaryKeys[B]??"id";b=v$(K,B,s,I)}else if(T==="belongsToMany"){let s=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";b=b$(K,B,s,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereHas`);R=W`${D()} WHERE EXISTS (${W([b])})`;try{q("WHERE",`EXISTS (${b})`)}catch{}return this},whereDoesntHave(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let C=Object.entries(M).find(([s,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!C)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=C,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b;if(T==="hasMany"||T==="hasOne"){let s=Z.primaryKeys[K]??"id";b=UX(K,B,s,I)}else if(T==="belongsTo"){let s=Z.primaryKeys[B]??"id";b=v$(K,B,s,I)}else if(T==="belongsToMany"){let s=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";b=b$(K,B,s,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereDoesntHave`);R=W`${D()} WHERE NOT EXISTS (${W([b])})`;try{q("WHERE",`NOT EXISTS (${b})`)}catch{}return this},has(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([b,s])=>s&&typeof s==="object"&&(O in s));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[C,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(C==="hasMany"||C==="hasOne"){let b=Z.primaryKeys[I]??"id";B=UX(I,g,b)}else if(C==="belongsTo"){let b=Z.primaryKeys[g]??"id";B=v$(I,g,b)}else if(C==="belongsToMany"){let b=Z.primaryKeys[I]??"id",s=Z.primaryKeys[g]??"id";B=b$(I,g,b,s,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${C}' for has`);R=W`${D()} WHERE EXISTS (${W([B])})`;try{q("WHERE",`EXISTS (${B})`)}catch{}return this},doesntHave(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([b,s])=>s&&typeof s==="object"&&(O in s));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[C,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(C==="hasMany"||C==="hasOne"){let b=Z.primaryKeys[I]??"id";B=UX(I,g,b)}else if(C==="belongsTo"){let b=Z.primaryKeys[g]??"id";B=v$(I,g,b)}else if(C==="belongsToMany"){let b=Z.primaryKeys[I]??"id",s=Z.primaryKeys[g]??"id";B=b$(I,g,b,s,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${C}' for doesntHave`);R=W`${D()} WHERE NOT EXISTS (${W([B])})`;try{q("WHERE",`NOT EXISTS (${B})`)}catch{}return this},withCount(...O){if(!Z||!O||O.length===0)return this;let I=String(G);for(let K of O){let M=Z.relations?.[I];if(!M)continue;let C=Object.entries(M).find(([P0,r])=>r&&typeof r==="object"&&(K in r));if(!C)continue;let[T,k]=C,x=k[K],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b=Z.primaryKeys[I]??"id",s;if(T==="hasMany"||T==="hasOne")s=k7(I,B,b);else if(T==="belongsToMany")s=x7(I,B,b,K);else continue;let $0=`${K}_count`;J9(`${s} AS ${$0}`)}return this},withSum(O,I){return f$("SUM",O,I),this},withAvg(O,I){return f$("AVG",O,I),this},withMax(O,I){return f$("MAX",O,I),this},withMin(O,I){return f$("MIN",O,I),this},applyPivotColumns(){return R5(),this},withPivot(O,...I){if(!Z)return this;let K=String(G),M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${K}'`);let C=I&&I.length>0?I:M.hasConfig?M.pivotColumns:[];if(C.length===0)return this;if(v.set(O,C),M.hasConfig)n.add(O);return R5(),this},wherePivot(O,I,K,M){if(!Z)return this;let C=i(O);if(!C)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);c(C.pivotTable,"wherePivot (pivot table)"),c(I,"wherePivot (column)"),R0(C);let T=M===void 0?"=":String(K),k=M===void 0?K:M,x=y.length+1,g=`${C.pivotTable}.${I} ${T} ${l(x)}`;z0.push(g),y.push(k);let B=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${B} ${g}`,R=null,C.hasConfig)n.add(O);return this},wherePivotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);c(M.pivotTable,"wherePivotIn (pivot table)"),c(I,"wherePivotIn (column)"),R0(M);let C=b0(K.length,y.length+1),T=`${M.pivotTable}.${I} IN (${C})`;z0.push(T),y.push(...K);let k=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)n.add(O);return this},wherePivotNotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);c(M.pivotTable,"wherePivotNotIn (pivot table)"),c(I,"wherePivotNotIn (column)"),R0(M);let C=b0(K.length,y.length+1),T=`${M.pivotTable}.${I} NOT IN (${C})`;z0.push(T),y.push(...K);let k=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)n.add(O);return this},wherePivotNull(O,I){if(!Z)return this;let K=i(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);c(K.pivotTable,"wherePivotNull (pivot table)"),c(I,"wherePivotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NULL`;z0.push(M);let C=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${C} ${M}`,R=null,K.hasConfig)n.add(O);return this},wherePivotNotNull(O,I){if(!Z)return this;let K=i(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);c(K.pivotTable,"wherePivotNotNull (pivot table)"),c(I,"wherePivotNotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NOT NULL`;z0.push(M);let C=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${C} ${M}`,R=null,K.hasConfig)n.add(O);return this},where(O,I,K){let M=()=>o.WHERE.test(F)?"AND":"WHERE";if(typeof O==="string"&&I!==void 0){c(String(O),"where(column)"),f0(I,"where(operator)");let C=String(I).toLowerCase();if(C==="in"||C==="not in"){let k=Array.isArray(K)?K:[K],x=b0(k.length,y.length+1),g=`${String(O)} ${C.toUpperCase()} (${x})`;return z0.push(g),y.push(...k),F=`${F} ${M()} ${g}`,R=null,this}let T=y.length+1;return z0.push(`${String(O)} ${String(I)} ${l(T)}`),y.push(K),F=`${F} ${M()} ${String(O)} ${String(I)} ${l(T)}`,R=null,this}if(Array.isArray(O)){let[C,T,k]=O,x=String(C);c(x,"where(column)");let g=f0(T,"where(operator)");if(g==="in"||g==="not in"){let B=Array.isArray(k)?k:[k],b=b0(B.length,y.length+1);z0.push(`${x} ${g.toUpperCase()} (${b})`),y.push(...B),F=`${F} ${M()} ${x} ${g.toUpperCase()} (${b})`,R=null}else{let B=y.length+1;z0.push(`${x} ${g} ${l(B)}`),y.push(k),F=`${F} ${M()} ${x} ${g} ${l(B)}`,R=null}return this}if(O&&typeof O==="object"&&!p8(O)){let C=O,T=Object.keys(C),k=[];for(let x of T){c(x,"where(column)");let g=C[x];if(Array.isArray(g)){let B=b0(g.length,y.length+1);k.push(`${x} IN (${B})`),z0.push(`${x} IN (${B})`),y.push(...g)}else{let B=y.length+1;k.push(`${x} = ${l(B)}`),z0.push(`${x} = ${l(B)}`),y.push(g)}}if(k.length>0)F=`${F} ${M()} ${k.join(" AND ")}`,R=null;return this}if(p8(O))return z0.push(O.raw),F=`${F} ${M()} ${O.raw}`,R=null,this;return this},whereNull(O){c(String(O),"whereNull(column)");let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NULL`,R=null,this},whereNotNull(O){c(String(O),"whereNotNull(column)");let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NOT NULL`,R=null,this},whereBetween(O,I,K){c(String(O),"whereBetween(column)");let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1;return F=`${F} ${M} ${String(O)} BETWEEN ${l(C)} AND ${l(C+1)}`,y.push(I,K),R=null,this},whereExists(O){let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} EXISTS (${O.toSQL()})`,R=null,this},whereJsonContains(O,I){c(String(O),"whereJsonContains(column)");let K=o.WHERE.test(F)?"AND":"WHERE",M=f.dialect,C=y.length+1;if(M==="postgres"){if(f.sql?.jsonContainsMode==="function")F+=` ${K} jsonb_contains(${O}, ${l(C)})`;else F+=` ${K} ${O} @> ${l(C)}`;y.push(JSON.stringify(I))}else if(I0(M))F+=` ${K} JSON_CONTAINS(${O}, ${l(C)})`,y.push(JSON.stringify(I));else if(Array.isArray(I)){let T=I.map((k,x)=>`EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${l(C+x)})`);F+=` ${K} (${T.join(" AND ")})`;for(let k of I)y.push(k)}else if(I!==null&&typeof I==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else F+=` ${K} EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${l(C)})`,y.push(I);return R=null,this},whereJsonPath(O,I,K){if(f0(I,"whereJsonPath(op)"),typeof O!=="string"||O.length===0||O.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof O==="string"?`'${O.slice(0,32)}...'`:typeof O}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(O))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${O}' \u2014 contains characters outside the allowed JSON-path set`);let M=f.dialect,C=o.WHERE.test(F)?"AND":"WHERE",T=y.length+1;if(M==="postgres")F+=` ${C} ${O} ${I} ${l(T)}`;else if(I0(M))F+=` ${C} JSON_EXTRACT(${O}) ${I} ${l(T)}`;else F+=` ${C} json_extract(${O}) ${I} ${l(T)}`;return y.push(K),R=null,this},whereLike(O,I,K=!1){let M=l(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("WHERE",`${String(O)} ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereLike(O,I,K=!1){let M=l(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("OR",`${String(O)} ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},whereNotLike(O,I,K=!1){let M=l(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereNotILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("WHERE",`${String(O)} NOT ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereNotLike(O,I,K=!1){let M=l(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereNotILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("OR",`${String(O)} NOT ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},whereAny(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereAll(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} (${T.join(" AND ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNone(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} NOT (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNotBetween(O,I,K){c(String(O),"whereNotBetween(column)");let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1;return F+=` ${M} ${O} NOT BETWEEN ${l(C)} AND ${l(C+1)}`,y.push(I,K),R=null,this},whereDate(O,I,K){c(O,"whereDate(column)");let M=K instanceof Date?K.toISOString():typeof K==="string"?K:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof K}`)})(),C=o.WHERE.test(F)?"AND":"WHERE",T=y.length+1;return F+=` ${C} ${O} ${I} ${l(T)}`,y.push(M),R=null,this},whereRaw(O){let I=RX(O,"whereRaw(fragment)"),K=o.WHERE.test(F)?"AND":"WHERE";return F+=` ${K} ${I}`,R=null,this},whereColumn(O,I,K){c(O,"whereColumn(left)"),c(K,"whereColumn(right)");let M=o.WHERE.test(F)?"AND":"WHERE";return F+=` ${M} ${O} ${I} ${K}`,R=null,this},orWhereColumn(O,I,K){return c(O,"orWhereColumn(left)"),c(K,"orWhereColumn(right)"),F+=` OR ${O} ${I} ${K}`,R=null,this},whereIn(O,I){c(String(O),"whereIn(column)");let K=o.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=b0(I.length,y.length+1);F+=` ${K} ${O} IN (${M})`,y.push(...I)}else F+=` ${K} ${O} IN (${String(I.toSQL())})`;return R=null,this},orWhereIn(O,I){if(c(String(O),"orWhereIn(column)"),Array.isArray(I)){let K=b0(I.length,y.length+1);F+=` OR ${O} IN (${K})`,y.push(...I)}else F+=` OR ${O} IN (${String(I.toSQL())})`;return R=null,this},whereNotIn(O,I){c(String(O),"whereNotIn(column)");let K=o.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=b0(I.length,y.length+1);F+=` ${K} ${O} NOT IN (${M})`,y.push(...I)}else F+=` ${K} ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},orWhereNotIn(O,I){if(c(String(O),"orWhereNotIn(column)"),Array.isArray(I)){let K=b0(I.length,y.length+1);F+=` OR ${O} NOT IN (${K})`,y.push(...I)}else F+=` OR ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},whereNested(O){let I=o.WHERE.test(F)?"AND":"WHERE",K=O.toSQL?String(O.toSQL()):String(O);return F+=` ${I} (${K})`,R=null,this},orWhereNested(O){let I=O.toSQL?String(O.toSQL()):String(O);return F+=` OR (${I})`,R=null,this},andWhere(O,I,K){if(typeof O==="string"&&I!==void 0){c(String(O),"andWhere(column)"),f0(I,"andWhere(operator)");let M=y.length+1;return z0.push(`${String(O)} ${String(I)} ${l(M)}`),y.push(K),F=`${F} AND ${String(O)} ${String(I)} ${l(M)}`,R=null,this}if(Array.isArray(O)){let[M,C,T]=O,k=String(M);c(k,"andWhere(column)");let x=f0(C,"andWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=b0(g.length,y.length+1);z0.push(`${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} AND ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`${k} ${x} ${l(g)}`),y.push(T),F=`${F} AND ${k} ${x} ${l(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),C=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=b0(k.length,y.length+1);C.push(`${T} IN (${x})`),z0.push(`${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;C.push(`${T} = ${l(x)}`),z0.push(`${T} = ${l(x)}`),y.push(k)}}if(C.length>0)F=`${F} AND ${C.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(O.raw),F=`${F} AND ${O.raw}`,R=null,this;return this},orWhere(O,I,K){if(typeof O==="string"&&I!==void 0){c(String(O),"orWhere(column)"),f0(I,"orWhere(operator)");let M=y.length+1;return z0.push(`OR ${String(O)} ${String(I)} ${l(M)}`),y.push(K),F=`${F} OR ${String(O)} ${String(I)} ${l(M)}`,R=null,this}if(Array.isArray(O)){let[M,C,T]=O,k=String(M);c(k,"orWhere(column)");let x=f0(C,"orWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=b0(g.length,y.length+1);z0.push(`OR ${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} OR ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`OR ${k} ${x} ${l(g)}`),y.push(T),F=`${F} OR ${k} ${x} ${l(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),C=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=b0(k.length,y.length+1);C.push(`${T} IN (${x})`),z0.push(`OR ${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;C.push(`${T} = ${l(x)}`),z0.push(`OR ${T} = ${l(x)}`),y.push(k)}}if(C.length>0)F=`${F} OR ${C.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(`OR ${O.raw}`),F=`${F} OR ${O.raw}`,R=null,this;return this},orderBy(O,I="asc"){let K=I==="asc"?"ASC":"DESC";return F=o.ORDER_BY.test(F)?`${F}, ${O} ${K}`:`${F} ORDER BY ${O} ${K}`,R=null,this},orderByDesc(O){return F=o.ORDER_BY.test(F)?`${F}, ${O} DESC`:`${F} ORDER BY ${O} DESC`,R=null,this},inRandomOrder(){let O=f.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return F=o.ORDER_BY.test(F)?`${F}, ${O}`:`${F} ORDER BY ${O}`,R=null,this},reorder(O,I="asc"){return F=F.replace(/ORDER BY[\s\S]*$/i,""),F+=` ORDER BY ${O} ${I==="asc"?"ASC":"DESC"}`,R=null,this},latest(O){let I=O??f.timestamps.defaultOrderColumn;return F=o.ORDER_BY.test(F)?`${F}, ${I} DESC`:`${F} ORDER BY ${I} DESC`,R=null,this},oldest(O){let I=O??f.timestamps.defaultOrderColumn;return F=o.ORDER_BY.test(F)?`${F}, ${I} ASC`:`${F} ORDER BY ${I} ASC`,R=null,this},limit(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${O}`);return F=o.LIMIT.test(F)?F.replace(o.LIMIT,` LIMIT ${O}`):`${F} LIMIT ${O}`,R=null,this},offset(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${O}`);return F=o.OFFSET.test(F)?F.replace(o.OFFSET,` OFFSET ${O}`):`${F} OFFSET ${O}`,R=null,this},join(O,I,K,M){return c(O,"join(table)"),Q9(I,"join(onLeft)"),Q9(M,"join(onRight)"),f0(K,"join(operator)"),A(`JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},joinSub(O,I,K,M,C){return c(I,"joinSub(alias)"),Q9(K,"joinSub(onLeft)"),Q9(C,"joinSub(onRight)"),f0(M,"joinSub(operator)"),A(`JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${C}`),P.add(I),this},innerJoin(O,I,K,M){return c(O,"innerJoin(table)"),Q9(I,"innerJoin(onLeft)"),Q9(M,"innerJoin(onRight)"),f0(K,"innerJoin(operator)"),A(`INNER JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoin(O,I,K,M){return c(O,"leftJoin(table)"),Q9(I,"leftJoin(onLeft)"),Q9(M,"leftJoin(onRight)"),f0(K,"leftJoin(operator)"),A(`LEFT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoinSub(O,I,K,M,C){return c(I,"leftJoinSub(alias)"),Q9(K,"leftJoinSub(onLeft)"),Q9(C,"leftJoinSub(onRight)"),f0(M,"leftJoinSub(operator)"),A(`LEFT JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${C}`),P.add(I),this},rightJoin(O,I,K,M){return c(O,"rightJoin(table)"),Q9(I,"rightJoin(onLeft)"),Q9(M,"rightJoin(onRight)"),f0(K,"rightJoin(operator)"),A(`RIGHT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},crossJoin(O){return c(O,"crossJoin(table)"),A(`CROSS JOIN ${O}`),P.add(O),this},crossJoinSub(O,I){return c(I,"crossJoinSub(alias)"),A(`CROSS JOIN (${String(O.toSQL())}) AS ${I}`),P.add(I),this},selectAllRelations(){if(!Y)return this;let O=String(G),I=Object.keys(Y[O]?.columns??{}),K=[];if(I.length>0)K.push(W`${W(O)}.*`);for(let M of P){let C=Object.keys(Y[M]?.columns??{});for(let T of C){let k=f.aliasing.relationColumnAliasFormat==="camelCase"?`${M}_${T}`.replace(/_([a-z])/g,(x,g)=>g.toUpperCase()):f.aliasing.relationColumnAliasFormat==="table.dot.column"?`${M}.${T}`:`${M}_${T}`;K.push(W`${W(`${M}.${T}`)} AS ${W(k)}`)}}if(K.length>0){let M=I.length>0?`${O}.*`:"",C=[];for(let x of P){let g=Object.keys(Y[x]?.columns??{});for(let B of g){let b=f.aliasing.relationColumnAliasFormat==="camelCase"?`${x}_${B}`.replace(/_([a-z])/g,(s,$0)=>$0.toUpperCase()):f.aliasing.relationColumnAliasFormat==="table.dot.column"?`${x}.${B}`:`${x}_${B}`;C.push(`${x}.${B} AS ${b}`)}}let T=[M,...C].filter(Boolean).join(", "),k=F.indexOf(" FROM ");if(k!==-1)F=`SELECT ${T}${F.substring(k)}`;else F=`SELECT ${T} FROM ${O}`;R=null}return this},groupBy(...O){if(O.length)F=o.GROUP_BY.test(F)?`${F}, ${O.join(", ")}`:`${F} GROUP BY ${O.join(", ")}`,R=null;return this},groupByRaw(O){let I=RX(O,"groupByRaw(fragment)");return F=o.GROUP_BY.test(F)?`${F}, ${I}`:`${F} GROUP BY ${I}`,R=null,this},having(O){let I=/\bHAVING\b/i.test(F)?"AND":"HAVING";if(Array.isArray(O)){let K=y.length+1;F=`${F} ${I} ${O[0]} ${O[1]} ${l(K)}`,y.push(O[2]),R=null}else if(O&&typeof O==="object"&&!("raw"in O)){let K=Object.keys(O),M=K.length;if(M){let C=y.length,T=Array.from({length:M});for(let k=0;k<M;k++){let x=K[k];T[k]=`${x} = ${l(C+k+1)}`,y.push(O[x])}F=`${F} ${I} ${T.join(" AND ")}`,R=null}}else if(O&&typeof O.raw<"u")F+=` ${I} ${O.raw}`,R=null;return this},havingRaw(O){let I=RX(O,"havingRaw(fragment)"),K=/\bHAVING\b/i.test(F)?"AND":"HAVING";return F+=` ${K} ${I}`,R=null,this},orderByRaw(O){let I=RX(O,"orderByRaw(fragment)");return F=o.ORDER_BY.test(F)?`${F}, ${I}`:`${F} ORDER BY ${I}`,R=null,this},union(O){return w("UNION",O),this},unionAll(O){return w("UNION ALL",O),this},intersect(O){return w("INTERSECT",O),this},intersectAll(O){return w("INTERSECT ALL",O),this},except(O){return w("EXCEPT",O),this},exceptAll(O){return w("EXCEPT ALL",O),this},forPage(O,I){let K=Math.max(1,Math.floor(O)),M=Math.max(1,Math.floor(I));return F+=` LIMIT ${M} OFFSET ${(K-1)*M}`,R=null,this},toSQL(){let O=$8(F);return{sql:O,toString:()=>O,execute:()=>D().execute(),values:()=>D().values(),raw:()=>D().raw()}},async value(O){let I=W`${D()} LIMIT 1`,K=await j(I,"select",{signal:N,timeoutMs:H}),[M]=K;return M?.[O]},async pluck(O,I){let K=await j(D(),"select",{signal:N,timeoutMs:H});if(I){let M={};for(let C of K){let T=String(C?.[I]);if(Object.prototype.hasOwnProperty.call(M,T))throw Error(`[query-builder] pluck(${O}, ${I}): duplicate key '${T}' \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.`);M[T]=C?.[O]}return M}return K.map((M)=>M?.[O])},async exists(){let O=W`SELECT EXISTS (${D()}) as e`,I=await j(O,"select",{signal:N,timeoutMs:H}),[K]=I;return Boolean(K?.e)},async doesntExist(){return!await this.exists()},async paginate(O,I=1,K={}){if(!Number.isFinite(O)||O<=0||!Number.isInteger(O))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${O}`);if(!Number.isFinite(I)||I<1||!Number.isInteger(I))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${I}`);if(K.tx){let s=$8(F),$0=[...y],P0=await K.tx.unsafe(`SELECT COUNT(*) as c FROM (${s}) as sub`,$0),r=Number(P0?.[0]?.c??0),S0=Math.max(1,Math.ceil(r/O)),X9=Math.max(1,Math.min(I,S0)),_9=(X9-1)*O;return{data:await K.tx.unsafe(`${s} LIMIT ${O} OFFSET ${_9}`,$0),meta:{perPage:O,page:X9,total:r,lastPage:S0}}}let M=W`SELECT COUNT(*) as c FROM (${D()}) as sub`,C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C,k=Number(T?.c??0),x=Math.max(1,Math.ceil(k/O)),g=Math.max(1,Math.min(I,x)),B=(g-1)*O;return{data:await j(W`${D()} LIMIT ${O} OFFSET ${B}`,"select",{signal:N,timeoutMs:H}),meta:{perPage:O,page:g,total:k,lastPage:x}}},async simplePaginate(O,I=1){let K=Math.max(1,I),M=(K-1)*O,C=await j(W`${D()} LIMIT ${O+1} OFFSET ${M}`,"select",{signal:N,timeoutMs:H}),T=C.length>O;return{data:T?C.slice(0,O):C,meta:{perPage:O,page:K,hasMore:T}}},async cursorPaginate(O,I,K="id",M="asc"){let C=D();if(I!==void 0&&I!==null)if(Array.isArray(K)){let s=K.map((S0)=>W(String(S0))),$0=M==="asc"?W`>`:W`<`,P0=W`(${W(s)})`,r=W`(${W(I)})`;C=W`${C} WHERE ${P0} ${$0} ${r}`}else C=M==="asc"?W`${C} WHERE ${W(String(K))} > ${I}`:W`${C} WHERE ${W(String(K))} < ${I}`;if(Array.isArray(K)){let $0=K.map((P0)=>W`${W(String(P0))} ${M==="asc"?W`ASC`:W`DESC`}`).reduce((P0,r,S0)=>S0===0?r:W`${P0}, ${r}`);C=W`${C} ORDER BY ${$0} LIMIT ${O+1}`}else C=W`${C} ORDER BY ${W(String(K))} ${M==="asc"?W`ASC`:W`DESC`} LIMIT ${O+1}`;let T=await j(C,"select",{signal:N,timeoutMs:H}),k=T.length>O,x=T.slice(0,O),g=x[x.length-1],B=k&&g?Array.isArray(K)?K.map((s)=>g[s]):g[K]:null,b=x.length?Array.isArray(K)?K.map((s)=>x[0]?.[s]):x[0]?.[K]:null;return{data:x,meta:{perPage:O,nextCursor:B??null,prevCursor:b}}},async chunk(O,I){let K=1;while(!0){let{data:M,meta:C}=await this.paginate(O,K);if(M.length===0)break;if(await I(M),K>=C.lastPage)break;K+=1}},async chunkById(O,I="id",K){let M;while(!0){let{data:C,meta:T}=await this.cursorPaginate(O,M,I,"asc");if(C.length===0)break;if(K)await K(C);if(M=T.nextCursor,!M)break}},async eachById(O,I="id",K){await this.chunkById(O,I,async(M)=>{for(let C of M)await K?.(C)})},withTimeout(O){return H=Math.max(1,Math.floor(O)),this},abort(O){return N=O,this},withTrashed(){return S=!0,h=!1,this},onlyTrashed(){S=!0,h=!0;let O=f.softDeletes?.column||"deleted_at",I=(C,T)=>{let k=C.toUpperCase(),x=0;for(let g=0;g<C.length;g++){let B=C[g];if(B==="(")x++;else if(B===")")x--;else if(x===0&&k.substring(g,g+5)==="WHERE"&&(g===0||/\s/.test(C[g-1]??""))&&/\s/.test(C[g+5]??""))return`${C.substring(0,g)}WHERE ${T} AND ${C.substring(g+6)}`}return`${C} WHERE ${T}`},K=`${G}.${O} IS NOT NULL`;F=I(F,K);let M=String(D());return R=W([I(M,K)]),this},scope(O,I){let K=String(G),C=Z?.scopes?.[K]?.[O];if(C)return C(this,I);return this},when(O,I,K){if(O)return I(this);if(K)return K(this);return this},tap(O){return O(this),this},dump(){return console.log(String(D())),this},dd(){throw console.log(String(D())),Error("Dump and Die")},cache(O=60000){return a=O,d=!0,this},async explain(){let O=W`EXPLAIN ${D()}`;return await j(O,"select",{signal:N,timeoutMs:H})},simple(){return D().simple()},toText(){return F},async get(){let O=f.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||nX(O));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=$._prepareStatement;if(T){let k=T(F);return X0(y.length>0?k.all(...y):k.all())}}if(R=y.length>0?$.unsafe(F,y):$.unsafe(F),!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=D()._stmt,k=D()._params;if(T)return X0(k&&k.length>0?T.all(...k):T.all());return X0(await D().execute())}if(!f.softDeletes?.enabled&&!d&&!H&&!N)return X0(await j(D(),"select"));let K=D();if(f.softDeletes?.enabled&&f.softDeletes.defaultFilter&&!S){let T=f.softDeletes.column,k=String(G);if((Y?Boolean(Y[k]?.columns?.[T]):!0)&&!o.DELETED_AT.test(F))K=W`${D()} WHERE ${W(String(T))} IS ${h?W`NOT NULL`:W`NULL`}`,q("WHERE",`${String(T)} IS ${h?"NOT ":""}NULL`)}let M=d?`${String(K)}\x00${JSON.stringify(y)}`:"";if(d){let T=A$.get(M);if(T)return T}let C=await j(K,"select",{signal:N,timeoutMs:H});if(d)A$.set(M,C,a);return X0(C)},async executeTakeFirst(){let O=await j(D(),"select",{signal:N,timeoutMs:H});return m(Array.isArray(O)?O[0]:O)},async executeTakeFirstOrThrow(){let O=await this.executeTakeFirst();if(!O)throw Error("Record not found");return O},async first(){let O=f.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||nX(O));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let C=$._prepareStatement;if(C){let T=F.includes(" LIMIT ")?F:`${F} LIMIT 1`,k=C(T),x=y.length>0?k.all(...y):k.all();return m(x[0])}}let K=await j(W`${D()} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return m(M)},async firstOrFail(){let O=await this.first();if(!O)throw Error("Record not found");return O},async find(O){let I=Z?.primaryKeys[String(G)]??"id",K=await j(W`${D()} WHERE ${W(I)} = ${O} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return M},async findOrFail(O){let I=await this.find(O);if(!I)throw Error("Record not found");return I},async findMany(O){let I=Z?.primaryKeys[String(G)]??"id";return await j(W`${D()} WHERE ${W(String(I))} IN ${W(O)}`,"select",{signal:N,timeoutMs:H})},async*lazy(){let O,I=Z?.primaryKeys[String(G)]??"id";while(!0){let M=await(O==null?W`${D()} ORDER BY ${W(String(I))} ASC LIMIT 100`:W`${D()} WHERE ${W(String(I))} > ${O} ORDER BY ${W(String(I))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let C of M)yield C;if(O=M[M.length-1]?.[I],O==null)break}},async*lazyById(){let O=Z?.primaryKeys[String(G)]??"id",I;while(!0){let M=await(I==null?W`${D()} ORDER BY ${W(String(O))} ASC LIMIT 100`:W`${D()} WHERE ${W(String(O))} > ${I} ORDER BY ${W(String(O))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let C of M)yield C;if(I=M[M.length-1]?.[O],I==null)break}},pipe(O){return O(this)},async count(){let O=F.indexOf(" FROM "),I=/ GROUP BY /i.test(F),K;if(I)K=`SELECT COUNT(*) as c FROM (${F}) AS _bqb_count_sub`;else if(O!==-1)K=`SELECT COUNT(*) as c${F.substring(O)}`;else K=`SELECT COUNT(*) as c FROM ${G}`;let M=f.hooks,C=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||nX(M));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!C){let g=$._prepareStatement;if(g){let B=g(K),b=y.length>0?B.all(...y):B.all();return Number(b[0]?.c??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.c??0)},async avg(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT AVG(${O}) as a${F.substring(I)}`:`SELECT AVG(${O}) as a FROM ${G}`,M=f.hooks,C=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||nX(M));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!C){let g=$._prepareStatement;if(g){let B=g(K),b=y.length>0?B.all(...y):B.all();return Number(b[0]?.a??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.a??0)},async sum(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT SUM(${O}) as s${F.substring(I)}`:`SELECT SUM(${O}) as s FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return Number(T?.s??0)},async max(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MAX(${O}) as m${F.substring(I)}`:`SELECT MAX(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return T?.m},async min(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MIN(${O}) as m${F.substring(I)}`:`SELECT MIN(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return T?.m},lockForUpdate(){return F+=" FOR UPDATE",R=null,this},sharedLock(){let O=f.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return F+=` ${O}`,R=null,this},withCTE(O,I){return c(O,"withCTE(name)"),F=`WITH ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},withRecursive(O,I){return c(O,"withRecursive(name)"),F=`WITH RECURSIVE ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},execute(){return j(D(),"select",{signal:N,timeoutMs:H})},values(){return D().values()},toParams(){return[...y]},__rawState(){return{sql:$8(F),params:[...y]}},raw(){return D().raw()},get rows(){return},get row(){return},cancel(){try{D().cancel()}catch{}}},{get(O,I,K){let M=Reflect.get(O,I,K);if(M!==void 0)return M;if(typeof I==="string"&&(I.startsWith("where")||I.startsWith("orWhere")||I.startsWith("andWhere"))){let C=I.startsWith("orWhere"),T=I.startsWith("andWhere"),k=`${String(G)}|${I}`,x=U.get(k);if(x===void 0){let B=I.replace(/^(?:or|and)?where/i,"");if(!B)U.set(k,""),x="";else{let b=B.charAt(0).toLowerCase()+B.slice(1),s=B.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),$0=Y?Object.keys(Y[String(G)]?.columns??{}):[];x=[s,b,b.toLowerCase()].find((P0)=>$0.includes(P0))??s,U.set(k,x)}}if(x==="")return()=>K;let g=x;return(B)=>{let b=Array.isArray(B)?W`${W(g)} IN ${W(B)}`:W`${W(g)} = ${B}`;if(R=C?W`${D()} OR ${b}`:T?W`${D()} AND ${b}`:W`${D()} WHERE ${b}`,Array.isArray(B)){let s=b0(B.length,y.length+1);q(C?"OR":T?"AND":"WHERE",`${g} IN (${s})`),y.push(...B)}else{let s=l(y.length+1);q(C?"OR":T?"AND":"WHERE",`${g} = ${s}`),y.push(B)}return K}}return Reflect.get(O,I,K)}})}return{configure(G){return Object.assign(f,G),this},id(G){if(!o.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 $(String(G))},ids(...G){for(let J of G)if(!o.IDENTIFIER.test(J))throw Error(`[query-builder] Invalid identifier: '${J}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return $(G)},select(G,...J){return V(G,J)},selectFrom(G){return V(G)},selectFromSub(G,J){function W(H){return()=>{throw Error(`[query-builder] selectFromSub(...).${H}() is not supported. Apply ${H}() 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.")}}c(String(J),"selectFromSub(alias)");let F=typeof G.__rawState==="function"?G.__rawState():null,R=G.toSQL(),D=F?.sql??(typeof R==="string"?R:R?.sql??String(R)),q=F?.params??(Array.isArray(R?.values)?R.values:[]),w=`SELECT * FROM (${D}) AS ${String(J)}`,A=(H,N,S,h,d,v,n)=>{let a=!S?"WHERE":n==="WHERE"?"AND":n,u=[...N],i=(X0,R0,z0)=>{c(X0,"selectFromSub where(column)");let y=f0(R0,"selectFromSub where(operator)");if(y==="in"||y==="not in"){let G0=Array.isArray(z0)?z0:[z0],UX=b0(G0.length,u.length+1);return u.push(...G0),`${X0} ${y.toUpperCase()} (${UX})`}let J9=l(u.length+1);return u.push(z0),`${X0} ${y} ${J9}`},m;if(typeof h==="string"&&d!==void 0)m=i(h,d,v);else if(Array.isArray(h)&&h.length===3)m=i(h[0],h[1],h[2]);else if(h&&typeof h==="object")m=Object.entries(h).map(([X0,R0])=>i(X0,"=",R0)).join(" AND ");else return{text:H,params:N};return{text:`${H} ${a} ${m}`,params:u}};function P(H,N,S=!1){let h=()=>N.length>0?$.unsafe(H,N):$.unsafe(H),d={distinct(){return P(H.replace(/^SELECT\s+/i,"SELECT DISTINCT "),N,S)},distinctOn(...v){let n=v.map(String).join(", ");return P(H.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${n}) `),N,S)},selectRaw(v){let n=RX(v,"selectFromSub.selectRaw(fragment)"),a=H.indexOf(" FROM "),u=a!==-1?`${H.slice(0,a)}, ${n}${H.slice(a)}`:`${H}, ${n}`;return P(u,N,S)},where(v,n,a){let u=A(H,N,S,v,n,a,"WHERE");return P(u.text,u.params,!0)},andWhere(v,n,a){let u=A(H,N,S,v,n,a,"AND");return P(u.text,u.params,!0)},orWhere(v,n,a){let u=A(H,N,S,v,n,a,"OR");return P(u.text,u.params,!0)},orderBy(v,n="asc"){c(String(v),"selectFromSub.orderBy(column)");let a=n==="asc"?"ASC":"DESC",u=o.ORDER_BY.test(H)?`${H}, ${v} ${a}`:`${H} ORDER BY ${v} ${a}`;return P(u,N,S)},limit(v){if(!Number.isInteger(v)||v<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${v}`);let n=o.LIMIT.test(H)?H.replace(o.LIMIT,` LIMIT ${v}`):`${H} LIMIT ${v}`;return P(n,N,S)},offset(v){if(!Number.isInteger(v)||v<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${v}`);let n=o.OFFSET.test(H)?H.replace(o.OFFSET,` OFFSET ${v}`):`${H} OFFSET ${v}`;return P(n,N,S)},toSQL(){return E(h(),H)},async execute(){return j(h(),"select")},async executeTakeFirst(){let v=await j(h(),"select");return Array.isArray(v)?v[0]:v},async executeTakeFirstOrThrow(){let v=await j(h(),"select"),n=Array.isArray(v)?v[0]:v;if(!n)throw Error("Record not found");return n},async get(){return j(h(),"select")},async first(){let v=await j(h(),"select");return Array.isArray(v)?v[0]:v},async firstOrFail(){let v=await j(h(),"select"),n=Array.isArray(v)?v[0]:v;if(!n)throw Error("No rows found");return n},async count(){let v=N.length>0?$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`,N):$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`),n=await j(v,"select");return Number(n?.[0]?.c??0)},async exists(){let v=N.length>0?$.unsafe(`SELECT EXISTS(${H}) as e`,N):$.unsafe(`SELECT EXISTS(${H}) as e`),n=await j(v,"select");return Boolean(n?.[0]?.e)},async doesntExist(){return!await d.exists()},values(){return h().values()},raw(){return h().raw()},cancel(){try{h().cancel()}catch{}},whereRaw:W("whereRaw"),whereColumn:W("whereColumn"),orWhereColumn:W("orWhereColumn"),whereIn:W("whereIn"),orWhereIn:W("orWhereIn"),whereNotIn:W("whereNotIn"),orWhereNotIn:W("orWhereNotIn"),whereLike:W("whereLike"),whereILike:W("whereILike"),orWhereLike:W("orWhereLike"),orWhereILike:W("orWhereILike"),whereNotLike:W("whereNotLike"),whereNotILike:W("whereNotILike"),orWhereNotLike:W("orWhereNotLike"),orWhereNotILike:W("orWhereNotILike"),whereAny:W("whereAny"),whereAll:W("whereAll"),whereNone:W("whereNone"),whereNested:W("whereNested"),orWhereNested:W("orWhereNested"),whereDate:W("whereDate"),whereBetween:W("whereBetween"),whereNotBetween:W("whereNotBetween"),whereJsonContains:W("whereJsonContains"),whereJsonPath:W("whereJsonPath"),whereNull:W("whereNull"),whereNotNull:W("whereNotNull"),whereExists:W("whereExists"),whereJsonDoesntContain:W("whereJsonDoesntContain"),whereJsonContainsKey:W("whereJsonContainsKey"),whereJsonDoesntContainKey:W("whereJsonDoesntContainKey"),whereJsonLength:W("whereJsonLength"),join:W("join"),joinSub:W("joinSub"),innerJoin:W("innerJoin"),leftJoin:W("leftJoin"),leftJoinSub:W("leftJoinSub"),rightJoin:W("rightJoin"),crossJoin:W("crossJoin"),crossJoinSub:W("crossJoinSub"),groupBy:W("groupBy"),groupByRaw:W("groupByRaw"),having:W("having"),havingRaw:W("havingRaw"),addSelect:W("addSelect"),select:W("select"),selectAll:W("selectAll"),orderByDesc:W("orderByDesc"),inRandomOrder:W("inRandomOrder"),reorder:W("reorder"),orderByRaw:W("orderByRaw"),union:W("union"),unionAll:W("unionAll"),forPage:W("forPage"),selectAllRelations:W("selectAllRelations"),with:W("with"),value:W("value"),pluck:W("pluck"),cursorPaginate:W("cursorPaginate"),paginate:W("paginate"),simplePaginate:W("simplePaginate"),chunk:W("chunk"),chunkById:W("chunkById"),eachById:W("eachById"),avg:W("avg"),sum:W("sum"),max:W("max"),min:W("min"),find:W("find"),findOrFail:W("findOrFail"),findMany:W("findMany"),latest:W("latest"),oldest:W("oldest"),lazy:W("lazy"),lazyById:W("lazyById"),pipe:(v)=>v(d),when:W("when"),tap:()=>d,dump:()=>d,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>h().simple(),toText:()=>H,toParams:()=>[...N],withTimeout:()=>d,abort:()=>d,lockForUpdate:()=>d,sharedLock:()=>d,withCTE:()=>d,withRecursive:()=>d,cache:()=>d,clone:()=>d,withTrashed:()=>d,onlyTrashed:()=>d,scope:()=>d,get rows(){return[]},get row(){return}};return d}return P(w,q)},insertInto(G){let J,W="",F=[],R=f.dialect==="postgres",D=R?(w)=>`"${String(w).replace(/"/g,'""')}"`:I0(f.dialect)?(w)=>`\`${String(w).replace(/`/g,"``")}\``:(w)=>`"${String(w).replace(/"/g,'""')}"`,q=R?(w)=>`$${w+1}`:(w)=>"?";return{values(w){let A=Array.isArray(w)?w:[w],P=A.length;if(P===0)return J=$.unsafe("SELECT 1"),this;let H=A[0],N=Object.keys(H),S=N.length,h=P*S;if(F.length=h,P===1)if(!R){let d=D(N[0]),v="?";F[0]=H[N[0]];for(let n=1;n<S;n++)d+=`,${D(N[n])}`,v+=",?",F[n]=H[N[n]];W=`INSERT INTO ${D(G)}(${d})VALUES(${v})`}else{let d=N.map((v)=>D(v)).join(",");W=`INSERT INTO ${D(G)}(${d})VALUES(`;for(let v=0;v<S;v++){if(v>0)W+=",";W+=q(v),F[v]=H[N[v]]}W+=")"}else{let d=N.map((n)=>D(n)).join(",");W=`INSERT INTO ${D(G)}(${d})VALUES`;let v=0;for(let n=0;n<P;n++){let a=A[n];if(n===0)W+="(";else W+="),(";for(let u=0;u<S;u++){if(u>0)W+=",";W+=q(v),F[v++]=a[N[u]]}}W+=")"}if(!$._prepareStatement)J=$.unsafe(W,F);return this},returning(...w){let A=`${W} RETURNING ${w.join(", ")}`,P=$.unsafe(A,F),H=async()=>{let N=await j(P,"insert");return Array.isArray(N)?N[0]:N};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>E(P,A),execute:()=>j(P,"insert"),get:()=>j(P,"insert"),first:H,executeTakeFirst:H,async firstOrFail(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N},async executeTakeFirstOrThrow(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N}}},toSQL(){if(!J)J=$.unsafe(W,F);return E(J,W)},execute(){let w=f.hooks;if(!(w&&(w.onQueryStart||w.onQueryEnd||w.onQueryError||w.startSpan||w.beforeCreate||w.afterCreate||nX(w)))){let P=$._prepareStatement;if(P){let H=P(W);return F.length>0?H.run(...F):H.run()}}if(!J)J=$.unsafe(W,F);return j(J,"insert")},async executeTakeFirst(){if(!J)J=$.unsafe(W,F);return await j(J,"insert")},async executeTakeFirstOrThrow(){if(!J)J=$.unsafe(W,F);let w=await j(J,"insert");if(!w)throw Error("Insert failed");return w},returningAll(){let w=`${W} RETURNING *`,A=$.unsafe(w,F),P=async()=>{let H=await j(A,"insert");return Array.isArray(H)?H[0]:H};return{toSQL:()=>E(A,w),execute:()=>j(A,"insert"),get:()=>j(A,"insert"),first:P,executeTakeFirst:P,async firstOrFail(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H}}}}},updateTable(G){let J,W=[],F=(D)=>{let q=String(D);if(I0(f.dialect))return`\`${q.replace(/`/g,"``")}\``;return`"${q.replace(/"/g,'""')}"`},R=`UPDATE ${F(String(G))}`;return{set(D){let q=Object.keys(D),w=q.length,A=Array.from({length:w});for(let P=0;P<w;P++){let H=q[P];A[P]=`${F(H)} = ${l(P+1)}`,W.push(D[H])}return R=`${R} SET ${A.join(", ")}`,J=$.unsafe(R,W),this},where(D,q,w){let A=()=>o.WHERE.test(R)?"AND":"WHERE";if(typeof D==="string"&&q!==void 0){let P=W.length+1;return R=`${R} ${A()} ${F(D)} ${q} ${l(P)}`,W.push(w),J=$.unsafe(R,W),this}if(Array.isArray(D)){let[P,H,N]=D,S=W.length+1;return R=`${R} ${A()} ${F(String(P))} ${String(H)} ${l(S)}`,W.push(N),J=$.unsafe(R,W),this}if(D&&typeof D==="object"&&!("raw"in D)){let P=Object.keys(D),H=P.length,N=W.length,S=Array.from({length:H});for(let h=0;h<H;h++)S[h]=`${F(P[h])} = ${l(N+h+1)}`,W.push(D[P[h]]);R=`${R} ${A()} ${S.join(" AND ")}`,J=$.unsafe(R,W)}return this},returning(...D){let q=`${R} RETURNING ${D.join(", ")}`,w=W.length>0?$.unsafe(q,W):$.unsafe(q),A=async()=>{let H=await j(w,"update");return Array.isArray(H)?H[0]:H},P={where:()=>P,andWhere:()=>P,orWhere:()=>P,orderBy:()=>P,limit:()=>P,offset:()=>P,toSQL:()=>E(w,q),execute:()=>j(w,"update"),get:()=>j(w,"update"),first:A,executeTakeFirst:A,async firstOrFail(){let H=await A();if(!H)throw Error("Update with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await A();if(!H)throw Error("Update with RETURNING returned no rows");return H}};return P},toSQL(){if(!J)J=W.length>0?$.unsafe(R,W):$.unsafe(R);return E(J,R)},execute(){return j(J,"update")},async executeTakeFirst(){return{numUpdatedRows:await j(J,"update")}},async executeTakeFirstOrThrow(){let D=await j(J,"update");if(D===0)throw Error("No rows updated");return{numUpdatedRows:D}},returningAll(){let D=`${R} RETURNING *`,q=W.length>0?$.unsafe(D,W):$.unsafe(D);return{toSQL:()=>E(q,D),execute:()=>j(q,"update"),async executeTakeFirst(){let w=await j(q,"update");return Array.isArray(w)?w[0]:w},async executeTakeFirstOrThrow(){let w=await j(q,"update"),A=Array.isArray(w)?w[0]:w;if(!A)throw Error("Update with RETURNING failed");return A}}}}},deleteFrom(G){let J=(P)=>{let H=String(P);if(I0(f.dialect))return`\`${H.replace(/`/g,"``")}\``;return`"${H.replace(/"/g,'""')}"`},F=`DELETE FROM ${J(String(G))}`,R=null,D=[],q=null,w=()=>o.WHERE.test(F)?"AND":"WHERE",A=()=>{if(R===null)R=D.length>0?$.unsafe(F,D):$.unsafe(F);return R};return{where(P,H,N){if(q=P,typeof P==="string"&&H!==void 0){let S=D.length+1;return F+=` ${w()} ${J(P)} ${H} ${l(S)}`,D.push(N),R=null,this}if(Array.isArray(P)){let[S,h,d]=P,v=D.length+1;return F+=` ${w()} ${J(String(S))} ${h} ${l(v)}`,D.push(d),R=null,this}if(P&&typeof P==="object"&&!("raw"in P)){let S=Object.keys(P),h=[];for(let d of S){let v=D.length+1;h.push(`${J(d)} = ${l(v)}`),D.push(P[d])}return F+=` ${w()} ${h.join(" AND ")}`,R=null,this}return R=Q({},A(),P),this},returning(...P){let H=`${F} RETURNING ${P.join(", ")}`,N=D.length>0?$.unsafe(H,D):$.unsafe(H),S=async()=>{let d=await j(N,"delete");return Array.isArray(d)?d[0]:d},h={where:()=>h,andWhere:()=>h,orWhere:()=>h,orderBy:()=>h,limit:()=>h,offset:()=>h,toSQL:()=>E(N,H),execute:()=>j(N,"delete"),get:()=>j(N,"delete"),first:S,executeTakeFirst:S,async firstOrFail(){let d=await S();if(!d)throw Error("Delete with RETURNING returned no rows");return d},async executeTakeFirstOrThrow(){let d=await S();if(!d)throw Error("Delete with RETURNING returned no rows");return d}};return h},toSQL(){return E(A(),F)},async execute(){try{await f.hooks?.beforeDelete?.({table:String(G),where:q})}catch(H){throw H}let P=await j(A(),"delete");try{await f.hooks?.afterDelete?.({table:String(G),where:q,result:P})}catch{}return P},async executeTakeFirst(){return{numDeletedRows:await j(A(),"delete")}},async executeTakeFirstOrThrow(){let P=await j(A(),"delete");if(P===0)throw Error("No rows deleted");return{numDeletedRows:P}},returningAll(){let P=`${F} RETURNING *`,H=D.length>0?$.unsafe(P,D):$.unsafe(P);return{toSQL:()=>E(H,P),execute:()=>j(H,"delete"),async executeTakeFirst(){let N=await j(H,"delete");return Array.isArray(N)?N[0]:N},async executeTakeFirstOrThrow(){let N=await j(H,"delete"),S=Array.isArray(N)?N[0]:N;if(!S)throw Error("Delete with RETURNING failed");return S}}}}},table(G){let J=this;return{insert(W){return J.insertInto(G).values(W)},update(W){return J.updateTable(G).set(W)},delete(){return J.deleteFrom(G)},select(...W){if(W.length===0)return J.selectFrom(G);return J.select(G,...W)}}},sql:$,raw(G,...J){return $(G,...J)},simple(G,...J){return $(G,...J).simple()},async advisoryLock(G){if(f.dialect==="postgres"){let J=String(G),W=7;for(let D=0;D<J.length;D++)W=W*31+J.charCodeAt(D)|0;let F=typeof G==="number"?G:Math.abs(W),R=p`SELECT pg_advisory_lock(${F})`;await j(R,"raw");return}if(I0(f.dialect)){let J=`bqb:${String(G)}`,W=p`SELECT GET_LOCK(${J}, -1) AS ok`;await j(W,"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(f.dialect==="postgres"){let J=String(G),W=7;for(let q=0;q<J.length;q++)W=W*31+J.charCodeAt(q)|0;let F=typeof G==="number"?G:Math.abs(W),R=p`SELECT pg_try_advisory_lock(${F}) as ok`,D=await j(R,"raw");return Boolean(D?.[0]?.ok)}if(I0(f.dialect)){let J=`bqb:${String(G)}`,W=p`SELECT GET_LOCK(${J}, 0) AS ok`,F=await j(W,"raw");return Number(F?.[0]?.ok)===1}return!1},unsafe(G,J){return p.unsafe(G,J)},file(G,J){return p.file(G,J)},async reserve(){let G=await p.reserve(),J=H0({sql:G,meta:Z,schema:Y});return J.release=()=>G.release(),J},async close(G){await p.close(G)},async listen(G,J){},async unlisten(G){},async notify(G,J){},async copyTo(G,J){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(G,J,W){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let G=p`SELECT 1`;return await j(G,"select"),!0}catch{return!1}},async waitForReady(G){let J=Math.max(1,G?.attempts??10),W=Math.max(10,G?.delayMs??100);for(let F=0;F<J;F++){if(await this.ping())return;await new Promise((R)=>setTimeout(R,W))}throw Error("Database not ready after waiting")},async transaction(G,J){let F={...X?.txDefaults,...J},R=X?.sql??p,D=X?.inTransaction===!0,q=D&&typeof R?.savepoint==="function"?"savepoint":"begin",w=async(H)=>{F.logger?.({type:"start",attempt:H});let N=Date.now();return await R[q](async(S)=>{let h=H0({sql:S,meta:Z,schema:Y,inTransaction:!0});if(F?.isolation&&!D){let n=F.isolation,a=n==="read committed"?"READ COMMITTED":n==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(f.dialect==="postgres")await S.unsafe(`SET TRANSACTION ISOLATION LEVEL ${a}`);else if(I0(f.dialect))await S.unsafe(`SET TRANSACTION ISOLATION LEVEL ${a}`);else if(n!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${n}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(F?.readOnly)if(f.dialect==="postgres")await S.unsafe("SET TRANSACTION READ ONLY");else if(I0(f.dialect))await S.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let d=await G(h),v=Date.now()-N;return F.logger?.({type:"commit",attempt:H,durationMs:v}),d})},A=Math.max(0,F?.retries??0),P=0;for(;;)try{let H=await w(P+1);return F?.afterCommit?.(),H}catch(H){let N=f_(H)||g_(H,F.sqlStates);if(P<A&&N){P++,F?.onRetry?.(P,H);let S=c_(P,F.backoff);if(S>0)await d_(S);continue}try{F.onRollback?.(H)}catch{}try{F.afterRollback?.()}catch{}throw H}},async savepoint(G){let J=$;if(!J||typeof J.savepoint!=="function")throw Error("savepoint() must be called inside a transaction");return await J.savepoint(async(W)=>{let F=H0({sql:W,meta:Z,schema:Y});return await G(F)})},async beginDistributed(G,J){return await(X?.sql??p).beginDistributed(G,async(R)=>{let D=H0({sql:R,meta:Z,schema:Y});return await J(D)})},async commitDistributed(G){await p.commitDistributed(G)},async rollbackDistributed(G){await p.rollbackDistributed(G)},setTransactionDefaults(G){X={...X,txDefaults:{...X?.txDefaults,...G}}},transactional(G,J){return(...W)=>{return this.transaction((F)=>G(F,...W),J)}},async insertOrIgnore(G,J){let W=Array.isArray(J)?J:[J];if(!W.length)return;let{colsSql:F,valuesSql:R,params:D}=X8(W),q=t0(String(G)),w=I0(f.dialect)?`INSERT IGNORE INTO ${q} (${F}) VALUES ${R}`:`INSERT INTO ${q} (${F}) VALUES ${R} ON CONFLICT DO NOTHING`;return p.unsafe(w,D).execute()},async insertGetId(G,J,W="id"){let{colsSql:F,valuesSql:R,params:D}=X8([J]),q=t0(String(G));if(I0(f.dialect)){await p.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();let[A]=await p.unsafe("SELECT LAST_INSERT_ID() as id").execute();return A?.id}if(f.dialect==="sqlite"){let A=await p.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();if(A?.lastInsertRowid!=null)return A.lastInsertRowid;let[P]=await p.unsafe("SELECT last_insert_rowid() as id").execute();return P?.id}let[w]=await p.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R} RETURNING ${t0(String(W))} as id`,D).execute();return w?.id},async updateOrInsert(G,J,W){let F=t0(String(G)),R=Object.keys(J),D=1,q=R.map((S)=>`${t0(S)} = ${l(D++)}`).join(" AND "),w=R.map((S)=>J[S]);if((await p.unsafe(`SELECT 1 FROM ${F} WHERE ${q} LIMIT 1`,w).execute()).length){let S=Object.keys(W),h=1,d=S.map((a)=>`${t0(a)} = ${l(h++)}`).join(", "),v=R.map((a)=>`${t0(a)} = ${l(h++)}`).join(" AND "),n=[...S.map((a)=>W[a]),...R.map((a)=>J[a])];return await p.unsafe(`UPDATE ${F} SET ${d} WHERE ${v}`,n).execute(),!0}let{colsSql:P,valuesSql:H,params:N}=X8([{...J,...W}]);return await p.unsafe(`INSERT INTO ${F} (${P}) VALUES ${H}`,N).execute(),!0},async upsert(G,J,W,F){let R=W.map((d)=>String(d)),D=(F??[]).map((d)=>String(d)),q=J;if(!q.length)return;let{colsSql:w,valuesSql:A,params:P}=X8(q),H=t0(String(G)),N=`INSERT INTO ${H} (${w}) VALUES ${A}`;if(I0(f.dialect)){if(D.length===0)return p.unsafe(`INSERT IGNORE INTO ${H} (${w}) VALUES ${A}`,P).execute();let d=D.map((v)=>`${t0(v)} = VALUES(${t0(v)})`).join(", ");return p.unsafe(`${N} ON DUPLICATE KEY UPDATE ${d}`,P).execute()}let S=R.map(t0).join(", ");if(D.length===0)return p.unsafe(`${N} ON CONFLICT (${S}) DO NOTHING`,P).execute();let h=D.map((d)=>`${t0(d)} = EXCLUDED.${t0(d)}`).join(", ");return p.unsafe(`${N} ON CONFLICT (${S}) DO UPDATE SET ${h}`,P).execute()},async save(G,J){let W=Z?.primaryKeys[String(G)]??"id",F=J[W];if(F!=null)if(await this.selectFrom(G).find(F)){await this.updateTable(G).set(J).where({[W]:F}).execute();let D=await this.selectFrom(G).find(F);if(!D)throw Error("save() failed to retrieve updated row");return D}else return await this.create(G,J);return await this.create(G,J)},async remove(G,J){return await this.deleteFrom(G).where({id:J}).execute()},async find(G,J){return await this.selectFrom(G).find(J)},async findOrFail(G,J){return await this.selectFrom(G).findOrFail(J)},async findMany(G,J){return await this.selectFrom(G).findMany(J)},async latest(G,J){return await this.selectFrom(G).latest(J).first()},async oldest(G,J){return await this.selectFrom(G).oldest(J).first()},skip(G,J){return this.selectFrom(G).offset(J)},async rawQuery(G){let J=Date.now();try{f.hooks?.onQueryStart?.({sql:G,kind:"raw"});let W=await p.unsafe(G);return f.hooks?.onQueryEnd?.({sql:G,durationMs:Date.now()-J,kind:"raw"}),W}catch(W){throw f.hooks?.onQueryError?.({sql:G,error:W,durationMs:Date.now()-J,kind:"raw"}),W}},async create(G,J){let W=Z?.primaryKeys[String(G)]??"id";try{await f.hooks?.beforeCreate?.({table:String(G),data:J})}catch(F){throw F}if(f.dialect==="postgres"){let F=p`INSERT INTO ${p(String(G))} ${p(J)} RETURNING ${p(String(W))} as id`,[R]=await F.execute();if(console.log("resultId",R),!R?.id)throw console.error(`create() failed to get insert ID for table ${String(G)}`),console.error("Inserted values:",J),Error(`create() failed to get insert ID for table ${String(G)}`);let D=await this.selectFrom(G).find(R.id);if(!D)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`);try{await f.hooks?.afterCreate?.({table:String(G),data:J,result:D})}catch{}return D}else{let F=await this.insertGetId(G,J,W);if(F==null)throw Error(`create() failed to get insert ID for table ${String(G)}`);let R=await this.selectFrom(G).find(F);if(!R)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`);try{await f.hooks?.afterCreate?.({table:String(G),data:J,result:R})}catch{}return R}},async createMany(G,J){if(!J?.length)return;let W=J[0],F=Object.keys(W),R=F.length,D=J.length,q=Array.from({length:D*R}),w=I0(f.dialect)?(H)=>`\`${String(H).replace(/`/g,"``")}\``:(H)=>`"${String(H).replace(/"/g,'""')}"`,A=`INSERT INTO ${w(String(G))}(${F.map(w).join(",")})VALUES`,P=0;for(let H=0;H<D;H++){if(H>0)A+=",";A+="(";let N=J[H];for(let S=0;S<R;S++){if(S>0)A+=",";A+=l(P+1),q[P++]=N[F[S]]}A+=")"}return $.unsafe(A,q).execute()},async insertMany(G,J){if(!J?.length)return;let W=J[0],F=Object.keys(W),R=F.length,D=J.length,q=D*R,w=Array(q),A=f.dialect==="postgres",P;if(!A){let S=Array(R);for(let h=0;h<R;h++)S[h]="?";P=`(${S.join(",")})`}else P="";let H=Array(D+2);H[0]=`INSERT INTO ${G}(${F.join(",")})VALUES`;let N=0;if(!A){for(let S=0;S<D;S++){let h=J[S];H[S+1]=P;for(let d=0;d<R;d++)w[N++]=h[F[d]]}return $.unsafe(H[0]+H.slice(1,D+1).join(","),w).execute()}for(let S=0;S<D;S++){let h=J[S],d=Array(R);for(let v=0;v<R;v++)d[v]=`$${N+1}`,w[N++]=h[F[v]];H[S+1]=`(${d.join(",")})`}return $.unsafe(H[0]+H.slice(1,D+1).join(","),w).execute()},async updateMany(G,J,W){let F=Object.keys(W),R=F.length;if(R===0)return 0;let D=[],q=Array.from({length:R});for(let A=0;A<R;A++)q[A]=`${F[A]}=${l(A+1)}`,D.push(W[F[A]]);let w=`UPDATE ${G} SET ${q.join(",")}`;if(Array.isArray(J))w+=` WHERE ${J[0]}${J[1]}${l(D.length+1)}`,D.push(J[2]);else if(J&&typeof J==="object"&&!("raw"in J)){let A=Object.keys(J),P=A.length;if(P>0){let H=D.length,N=Array.from({length:P});for(let S=0;S<P;S++)N[S]=`${A[S]}=${l(H+S+1)}`,D.push(J[A[S]]);w+=` WHERE ${N.join(" AND ")}`}}return $.unsafe(w,D).execute()},async deleteMany(G,J){if(!Array.isArray(J)||J.length===0)return 0;let W=Z?.primaryKeys[String(G)]??"id",F=J.length;if(f.dialect==="postgres"){let D=Array(F);for(let q=0;q<F;q++)D[q]=`$${q+1}`;return $.unsafe(`DELETE FROM ${G} WHERE ${W} IN (${D.join(",")})`,J).execute()}let R=Array(F);for(let D=0;D<F;D++)R[D]="?";return $.unsafe(`DELETE FROM ${G} WHERE ${W} IN (${R.join(",")})`,J).execute()},async firstOrCreate(G,J,W){let F=await this.selectFrom(G).where(J).first();if(F)return F;return await this.create(G,{...J,...W})},async updateOrCreate(G,J,W){let F=await this.selectFrom(G).where(J).first();if(F){await this.updateTable(G).set(W).where(J).execute();let R=Z?.primaryKeys[String(G)]??"id",D=F[R],q=D!=null?await this.selectFrom(G).find(D):await this.selectFrom(G).where(J).first();if(!q)throw Error("updateOrCreate() failed to retrieve updated row");return q}return await this.create(G,{...J,...W})},async count(G,J){let W=J?p(String(J)):p`*`,F=p`SELECT COUNT(${W}) as c FROM ${p(String(G))}`,[R]=await F.execute();return Number(R?.c??0)},async sum(G,J){let W=p`SELECT SUM(${p(String(J))}) as s FROM ${p(String(G))}`,[F]=await W.execute();return Number(F?.s??0)},async avg(G,J){let W=p`SELECT AVG(${p(String(J))}) as a FROM ${p(String(G))}`,[F]=await W.execute();return Number(F?.a??0)},async min(G,J){let W=p`SELECT MIN(${p(String(J))}) as m FROM ${p(String(G))}`,[F]=await W.execute();return F?.m},async max(G,J){let W=p`SELECT MAX(${p(String(J))}) as m FROM ${p(String(G))}`,[F]=await W.execute();return F?.m},getRelationships(G){if(!Z?.relations)return{};let J=Z.relations[G];if(!J)return{};let W={};for(let[F,R]of Object.entries(J))if(R&&typeof R==="object"&&Object.keys(R).length>0)W[F]=R;return W},hasRelationship(G,J){if(!Z?.relations)return!1;let W=Z.relations[G];if(!W)return!1;return Object.values(W).some((F)=>F&&typeof F==="object"&&(J in F))},getRelationshipType(G,J){if(!Z?.relations)return null;let W=Z.relations[G];if(!W)return null;for(let[F,R]of Object.entries(W))if(R&&typeof R==="object"&&J in R)return F;return null},getRelationshipTarget(G,J){if(!Z?.relations)return null;let W=Z.relations[G];if(!W)return null;for(let[F,R]of Object.entries(W))if(R&&typeof R==="object"&&J in R){let D=R[J];if(typeof D==="string")return Z.modelToTable[D]||D;else if(D&&typeof D==="object"){if("model"in D)return Z.modelToTable[D.model]||D.model;if("target"in D)return Z.modelToTable[D.target]||D.target}}return null}}}function m_(){A$.clear()}function u_(X){A$.setMaxSize(X)}var o,q1,P1,A$,rX,n_=500,_Z=e(()=>{c0(),$X(),o={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},q1=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]),P1=new Set,A$=new QU,rX=new Map});async function HG(){console.log("-- Clearing query cache..."),m_(),console.log("-- \u2713 Query cache cleared")}async function CG(){console.log("-- Query Cache Information"),console.log(),console.log("The query cache is an LRU (Least Recently Used) cache with TTL support."),console.log(),console.log("Configuration:"),console.log(" - Default max size: 100 entries"),console.log(" - Default TTL: 60 seconds (60000ms)"),console.log(" - Eviction: LRU when cache is full"),console.log(),console.log("Usage:"),console.log(' qb.selectFrom("users").cache().get() // Cache for 60s'),console.log(' qb.selectFrom("users").cache(5000).get() // Cache for 5s'),console.log(),console.log("Configuration:"),console.log(" clearQueryCache() // Clear all cached queries"),console.log(" setQueryCacheMaxSize(500) // Set max cache size"),console.log(),console.log("Commands:"),console.log(" qb cache:clear // Clear the cache"),console.log(" qb cache:config --size 500 // Configure cache size")}async function wG(X={}){if(console.log("-- Configuring query cache..."),console.log(),X.size!==void 0){let $=Number(X.size);if(Number.isNaN($)||$<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");u_($),console.log(`-- \u2713 Cache max size set to: ${$}`)}else console.log("-- No configuration changes specified"),console.log("-- Available options:"),console.log("-- --size <n> Set maximum cache size (default: 100)"),console.log(),console.log("-- Example: qb cache:config --size 500")}var i_=e(()=>{_Z()});async function s_(){console.log("-- Query Builder Interactive Console"),console.log("-- Type .help for available commands"),console.log("-- Type .exit or press Ctrl+C to quit"),console.log();let X=H0(),$=l_({input:Z8.stdin,output:Z8.stdout,prompt:"qb> "}),Z="",Y=!1,U=`
78
+ `,[`User ${Q}`,`user${Q}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(Q){throw console.error("-- Failed to setup test table:",Q),Q}let U=[];if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({active:1}).limit(10).execute(),Q.push(performance.now()-z)}U.push({operation:"SELECT with WHERE + LIMIT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({id:1}).first(),Q.push(performance.now()-z)}U.push({operation:"SELECT by ID (first)",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("count")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").count(),Q.push(performance.now()-z)}U.push({operation:"COUNT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("insert")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.insertInto("bench_users").values({name:`Bench User ${L}`,email:`bench${L}@example.com`,created_at:new Date().toISOString()}).execute(),Q.push(performance.now()-z)}U.push({operation:"INSERT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("update")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.updateTable("bench_users").set({active:0}).where({id:1}).execute(),Q.push(performance.now()-z)}U.push({operation:"UPDATE by ID",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("delete")){let Q=[],L=[];for(let z=0;z<$;z++){let j=await Y.insertInto("bench_users").values({name:"To Delete",email:`delete${z}@example.com`,created_at:new Date().toISOString()}).execute();L.push(j)}for(let z=0;z<$;z++){let j=performance.now();await Y.deleteFrom("bench_users").where({id:L[z]}).execute(),Q.push(performance.now()-j)}U.push({operation:"DELETE by ID",avgTime:Q.reduce((z,j)=>z+j,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}console.log("-- Benchmark Results"),console.log();let _=Math.max(...U.map((Q)=>Q.operation.length));console.log("Operation".padEnd(_+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(_+2+12+12+12+12));for(let Q of U){let L=Q.operation.padEnd(_+2),z=Q.avgTime.toFixed(3).padStart(12),j=Q.minTime.toFixed(3).padStart(12),E=Q.maxTime.toFixed(3).padStart(12),V=(1000/Q.avgTime).toFixed(0).padStart(12);console.log(`${L}${z}${j}${E}${V}`)}console.log();try{await c.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(Q){console.error("-- Warning: Failed to cleanup test table:",Q)}}var y_=e(()=>{$X(),v0()});function h_(X){return X.endsWith("s")?X.slice(0,-1):X}function PX(X,$,Z,Y={}){let U=Y.singularize??h_,Q=X.relations?.[$]?.belongsToMany?.[Z];if(Q==null)return null;let L=typeof Q==="object",z=L?Q:null,j=L?z.model:Q,E=X.modelToTable[j]||j,V,G;if(z?.table)V=z.table;else if(z?.through){if(G=z.through,V=X.modelToTable[z.through],!V)throw Error(`[query-builder] belongsToMany relation '${Z}' on '${$}' references unknown through model '${z.through}'. Make sure '${z.through}' is registered via defineModels({...}).`)}else{let q=U($),w=U(E);V=[q,w].sort().join("_")}let J=z?.foreignKey??`${U($)}_id`,W=z?.relatedKey??`${U(E)}_id`,F={};if(z?.pivot?.columns)Object.assign(F,z.pivot.columns);if(G&&Y.models){let q=Y.models[G],w=q?.definition??q?.getDefinition?.()??q,A=w?.attributes??{};for(let[P,H]of Object.entries(A)){if(P===J||P===W||P===(w?.primaryKey??"id"))continue;F[P]={default:H?.default,nullable:H?.nullable,validation:H?.validation}}}let R=Boolean(z?.pivot?.timestamps),D=Object.keys(F);return{pivotTable:V,fkParent:J,fkRelated:W,pivotColumns:D,pivotColumnDefs:F,pivotModelName:G,timestamps:R,relatedModelName:j,relatedTable:E,hasConfig:L}}function*DG(X,$={}){let Z=X.relations;if(!Z)return;for(let[Y,U]of Object.entries(Z)){let _=U?.belongsToMany;if(!_)continue;for(let Q of Object.keys(_)){let L=PX(X,Y,Q,$);if(L)yield{parentTable:Y,relationKey:Q,resolved:L}}}}function p8(X){return typeof X==="object"&&X!==null&&"raw"in X&&typeof X.raw==="string"}function MG(X,...$){if(typeof X==="string")return{raw:X};let Z=X[0];for(let Y=0;Y<$.length;Y++)Z+=q9($[Y])+X[Y+1];return{raw:Z}}function t0(X){return I0(f.dialect)?`\`${X.replace(/`/g,"``")}\``:`"${X.replace(/"/g,'""')}"`}function X8(X,$=1){let Z=Object.keys(X[0]??{}),Y=[],U=$,_=X.map((Q)=>{return`(${Z.map((z)=>{return Y.push(Q[z]),l(U++)}).join(", ")})`});return{colsSql:Z.map(t0).join(", "),valuesSql:_.join(", "),params:Y,nextIndex:U}}function nX(X){return Boolean(X&&(X.onSlowQuery||X.slowQueryThresholdMs!=null&&X.slowQueryThresholdMs>=0))}function NY(X){if(typeof X==="string")return X;if(p8(X))return X.raw;if(X&&typeof X==="object"){let $=X;if(typeof $.raw==="function")return String($.raw());if(typeof $.sql==="string")return $.sql;let Z=String(X);if(Z!=="[object Object]")return Z}throw TypeError(`[query-builder] select(): unsupported column ${String(X)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function p(X,$){if(!o.IDENTIFIER.test(X)){let Z=$?` in ${$}`:"";throw Error(`[query-builder] Invalid identifier${Z}: '${X}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function f0(X,$){if(typeof X!=="string")throw TypeError(`[query-builder] ${$}: operator must be a string, got ${typeof X}`);let Z=X.toLowerCase();if(!q1.has(Z))throw TypeError(`[query-builder] ${$}: refusing to use '${X}' as a SQL operator \u2014 not in the allowed set (${[...q1].join(", ")})`);return X}function Q9(X,$){if(typeof X!=="string"||X.length===0)throw TypeError(`[query-builder] ${$}: identifier must be a non-empty string, got ${typeof X}`);if(X.length>129)throw TypeError(`[query-builder] ${$}: identifier '${X}' too long`);let Z=X.split(".");if(Z.length>2)throw TypeError(`[query-builder] ${$}: identifier '${X}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let Y of Z)if(!/^[A-Z_][A-Z0-9_]*$/i.test(Y))throw TypeError(`[query-builder] ${$}: identifier segment '${Y}' contains characters outside [A-Za-z0-9_]`)}function RX(X,$){if(typeof X==="string")return v_($),X;if(X===null||X===void 0)throw TypeError(`[query-builder] ${$}: fragment must be a SqlFragment, got ${X}`);if(p8(X))return X.raw;if(typeof X==="object"){let Z=X;if(typeof Z.raw==="string")return Z.raw;if(typeof Z.raw==="function"){let U=Z.raw();if(typeof U==="string")return U}if(typeof Z.sql==="string")return Z.sql;let Y=String(X);if(Y!=="[object Object]"&&Y!=="[object Promise]")return Y}throw TypeError(`[query-builder] ${$}: 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 v_(X){if(P1.has(X))return;P1.add(X),console.warn(`[query-builder] ${X}: bare string passed to a *Raw method. Prefer \`sql\`...\`\` tagged-template fragments so values are parameterised `+"instead of concatenated \u2014 concatenating request input into SQL is an "+"injection vector. This will become a hard error in a future release.")}function q9(X){if(X===null)return"NULL";if(typeof X==="number"&&Number.isFinite(X))return String(X);if(typeof X==="boolean")return X?"1":"0";if(typeof X==="string")return`'${X.replace(/'/g,"''")}'`;if(X instanceof Date)return`'${X.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof X}`)}function b_(X,$){let Z=Array.isArray(X)?X:X?[X]:[],Y=[];if(Z.length)Y.push(`PARTITION BY ${Z.join(", ")}`);if($&&$.length)Y.push(`ORDER BY ${$.map(([U,_])=>`${U} ${_==="desc"?"DESC":"ASC"}`).join(", ")}`);return Y.length?`OVER (${Y.join(" ")})`:"OVER ()"}class QU{cache=new Map;maxSize=100;get(X){let $=this.cache.get(X);if(!$)return null;if(Date.now()>$.expiresAt)return this.cache.delete(X),null;return this.cache.delete(X),this.cache.set(X,$),$.data}set(X,$,Z){if(this.cache.has(X))this.cache.delete(X);if(this.cache.size>=this.maxSize){let Y=Date.now(),U=!1;for(let[_,Q]of this.cache)if(Y>Q.expiresAt){if(this.cache.delete(_),U=!0,this.cache.size<this.maxSize)break}if(!U){let _=this.cache.keys().next().value;if(_!==void 0)this.cache.delete(_)}}this.cache.set(X,{data:$,expiresAt:Date.now()+Z})}clear(){this.cache.clear()}setMaxSize(X){this.maxSize=X}}function f_(X){let $=String(X?.message||"").toLowerCase();return $.includes("deadlock")||$.includes("serialization failure")||$.includes("could not serialize access")||$.includes("deadlock found when trying to get lock")||$.includes("lock wait timeout exceeded")||$.includes("database is locked")||$.includes("busy")}function g_(X,$){if(!$||$.length===0)return!1;let Z=X&&(X.code||X.sqlState||X.sqlstate);if(!Z)return!1;return $.includes(Z)}function d_(X){return new Promise(($)=>setTimeout($,X))}function $8(X){let $=rX.get(X);if($!==void 0)return $;let Z=p_(X);if(rX.size>=n_)rX.clear();return rX.set(X,Z),Z}function p_(X){let $=[{key:"GROUP_BY",tokens:/^GROUP\s+BY\b/i},{key:"ORDER_BY",tokens:/^ORDER\s+BY\b/i},{key:"HAVING",tokens:/^HAVING\b/i},{key:"OFFSET",tokens:/^OFFSET\b/i},{key:"LIMIT",tokens:/^LIMIT\b/i},{key:"WHERE",tokens:/^WHERE\b/i}],Z=[],Y=0,U=!1,_="";for(let E=0;E<X.length;E++){let V=X[E];if(U){if(V===_){if(X[E+1]===_){E++;continue}U=!1}continue}if(V==="'"||V==='"'||V==="`"){U=!0,_=V;continue}if(V==="("){Y++;continue}if(V===")"){Y--;continue}if(Y!==0)continue;if(E===0||!/\s/.test(X[E-1]))continue;let G=X.charCodeAt(E)&-33;if(G!==71&&G!==79&&G!==72&&G!==76&&G!==87)continue;let J=X.slice(E);for(let{key:W,tokens:F}of $){let R=J.match(F);if(!R)continue;Z.push({key:W,start:E}),E+=R[0].length-1;break}}if(Z.length<=1)return X;let Q=X.slice(0,Z[0].start).trimEnd(),L={};for(let E=0;E<Z.length;E++){let V=Z[E].start,G=E+1<Z.length?Z[E+1].start:X.length,J=X.slice(V,G).trim();if(!L[Z[E].key])L[Z[E].key]=[];L[Z[E].key].push(J)}let j=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((E)=>L[E]).map((E)=>L[E].join(" ")).join(" ");return j?`${Q} ${j}`:Q}function c_(X,$){let Z=Math.max(1,$?.baseMs??50),Y=Math.max(1,$?.factor??2),U=Math.max(Z,$?.maxMs??2000),_=Math.min(U,Z*Y**Math.max(0,X-1));if($?.jitter){let Q=Math.random()*_*0.2;_=_-Q/2}return Math.floor(_)}function H0(X){let $=X?.sql??yX(),Z=X?.meta,Y=X?.schema,U=new Map;function _(G){if(Array.isArray(G)){let[D,q,w]=G;p(D,"where(column)");let A=String(D);switch(q){case"in":if(Array.isArray(w)){let P=b0(w.length);return $.unsafe(`${A} IN (${P})`,w)}return $.unsafe(`${A} IN (${l(1)})`,[w]);case"not in":if(Array.isArray(w)){let P=b0(w.length);return $.unsafe(`${A} NOT IN (${P})`,w)}return $.unsafe(`${A} NOT IN (${l(1)})`,[w]);case"like":return $.unsafe(`${A} LIKE ${l(1)}`,[w]);case"is":case"is not":{if(w!==null&&w!==void 0)throw TypeError(`[query-builder] where(..., '${q}', ?): operator '${q}' only accepts NULL/undefined as value, got ${typeof w} (${String(w)})`);return $.unsafe(`${A} IS ${q==="is not"?"NOT ":""}NULL`)}case"!=":return $.unsafe(`${A} <> ${l(1)}`,[w]);case"<":case">":case"<=":case">=":case"=":return $.unsafe(`${A} ${q} ${l(1)}`,[w]);default:throw TypeError(`[query-builder] where(..., '${String(q)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in G)return G.raw;let J=Object.keys(G);if(J.length===0)return $.unsafe("");let W=[],F=[],R=1;for(let D of J){p(D,"where(object key)");let q=G[D];if(Array.isArray(q)){let w=b0(q.length,R);W.push(`${D} IN (${w})`),F.push(...q),R+=q.length}else W.push(`${D} = ${l(R++)}`),F.push(q)}return $.unsafe(W.join(" AND "),F)}function Q(G,J,W){if(!W)return J;let F=_(W);return $`${J} WHERE ${F}`}function L(G){let J=f.debug?.captureText;if(f.debug)f.debug.captureText=!0;let W=String(G);if(f.debug)f.debug.captureText=J;return W}function z(G){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 j(G,J,W){let F=f.hooks,R=F?.slowQueryThresholdMs,D=R!=null&&R>=0,q=Boolean(F?.onSlowQuery||D),w=F&&(F.onQueryStart||F.onQueryEnd||F.onQueryError||F.startSpan||q),A=W?.timeoutMs&&W.timeoutMs>0||W?.signal;if(!w&&!A)return G.execute();let P=L(G),H=z(G),N=Date.now(),S;try{if(F?.onQueryStart?.({sql:P,params:H,kind:J}),F?.startSpan)S=F.startSpan({sql:P,params:H,kind:J})}catch{}let h=!1,d=(u,i)=>{if(h)return;h=!0;let m=Date.now()-N;try{if(u)F?.onQueryError?.({sql:P,params:H,error:u,durationMs:m,kind:J});else if(F?.onQueryEnd?.({sql:P,params:H,durationMs:m,rowCount:i,kind:J}),D&&m>=R)if(F?.onSlowQuery)F.onSlowQuery({sql:P,params:H,durationMs:m,kind:J});else console.warn(`[query-builder] slow query (${m}ms >= ${R}ms): ${P}`)}catch{}try{S?.end(u)}catch{}},v=G.execute(),n=[v],a;if(W?.timeoutMs&&W.timeoutMs>0){let u=new Promise((i,m)=>{a=setTimeout(()=>{try{G.cancel?.()}catch{}let X0=Error(`Query timed out after ${W.timeoutMs}ms`);X0.code="EBQBTIMEOUT",m(X0)},W.timeoutMs)});n.push(u)}if(W?.signal){if(W.signal.aborted){try{G.cancel?.()}catch{}let i=Error("Query aborted");return i.code="EBQBABORT",d(i),Promise.reject(i)}let u=()=>{try{G.cancel?.()}catch{}};W.signal.addEventListener("abort",u,{once:!0}),v.finally(()=>{W.signal?.removeEventListener("abort",u)})}return Promise.race(n).then((u)=>{clearTimeout(a);let i=Array.isArray(u)?u.length:typeof u==="number"?u:void 0;return d(void 0,i),u}).catch((u)=>{throw clearTimeout(a),d(u),u})}function E(G,J){let W=J??L(G);return{sql:W,toString:()=>W,execute:()=>G.execute(),values:()=>G.values(),raw:()=>G.raw()}}function V(G,J){let W=$,F=J&&J.length>0?`SELECT ${J.join(", ")} FROM ${String(G)}`:`SELECT * FROM ${String(G)}`,R=null,D=()=>{if(R===null){let O=$8(F);R=y.length>0?$.unsafe(O,y):$.unsafe(O)}return R},q=(O,I)=>{let M=!o.WHERE.test(F)?"WHERE":O==="WHERE"?"AND":O;F=`${F} ${M} ${I}`},w=(O,I)=>{let K=I.__rawState?.();if(K){let M=y.length,C=f.dialect==="postgres"?K.sql.replace(/\$(\d+)/g,(T,k)=>`$${Number(k)+M}`):K.sql;F+=` ${O} ${C}`,y.push(...K.params)}else F+=` ${O} ${String(I.toSQL())}`;R=null},A=(O)=>{let I=/\(|\)|\b(?:WHERE|GROUP BY|HAVING|ORDER BY|LIMIT|OFFSET|UNION)\b/gi,K=0,M=-1,C;while(C=I.exec(F))if(C[0]==="(")K++;else if(C[0]===")")K=Math.max(0,K-1);else if(K===0){M=C.index;break}F=M>=0?`${F.slice(0,M)}${O} ${F.slice(M)}`:`${F} ${O}`,R=null},P=new Set,H,N,S=!1,h=!1,d=!1,v=new Map,n=new Set,a=60000,u=(O)=>{if(f.relations.singularizeStrategy==="none")return O;return O.endsWith("s")?O.slice(0,-1):O},i=(O)=>{if(!Z)return null;return PX(Z,String(G),O,{singularize:u,models:Z.models})},m=(O)=>{if(!O||typeof O!=="object"||n.size===0)return O;let I;for(let K of Object.keys(O))if(K.startsWith("pivot_")){if(!I)I={};I[K.slice(6)]=O[K],delete O[K]}if(I)O.pivot=I;return O},X0=(O)=>{if(n.size===0||!O)return O;if(Array.isArray(O))for(let I=0;I<O.length;I++)m(O[I]);else m(O);return O},R0=(O)=>{if(!Z)return;if(P.has(O.pivotTable))return;let I=String(G),K=Z.primaryKeys[I]??"id";p(O.pivotTable,"wherePivot auto-join (pivot table)"),p(O.fkParent,"wherePivot auto-join (parent FK)"),p(I,"wherePivot auto-join (parent table)"),p(K,"wherePivot auto-join (parent PK)"),R=W`${D()} LEFT JOIN ${W(O.pivotTable)} ON ${W(`${O.pivotTable}.${O.fkParent}`)} = ${W(`${I}.${K}`)}`,F=`${F} LEFT JOIN ${O.pivotTable} ON ${O.pivotTable}.${O.fkParent} = ${I}.${K}`,P.add(O.pivotTable)},z0=[],y=[],J9=(O)=>{if(o.SELECT_STAR.test(F))F=F.replace(o.SELECT_STAR,`SELECT *, ${O}`);else if(o.SELECT.test(F))F=F.replace(o.SELECT_FROM,`SELECT $1, ${O} FROM`);let I=String(D());if(o.SELECT_STAR.test(I)){let K=I.replace(o.SELECT_STAR,`SELECT *, ${O}`);R=$.unsafe(K)}else if(o.SELECT.test(I)){if(o.SELECT_FROM.exec(I)){let M=I.replace(o.SELECT_FROM,`SELECT $1, ${O} FROM`);R=$.unsafe(M)}}},G0=(O,I,K,M)=>{J9(`${O} ${b_(K,M)} AS ${I}`)},UX=(O,I,K,M)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)");let C=`${O.endsWith("s")?O.slice(0,-1):O}_id`;p(C,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${C} = ${O}.${K}`;if(M){let x=M({where:(g,B,b)=>{return p(g,"relationship subquery condition"),`${I}.${g} ${f0(B,"whereHas callback")} ${q9(b)}`}});if(x)T+=` AND ${x}`}return T},v$=(O,I,K,M)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)");let C=`${I.endsWith("s")?I.slice(0,-1):I}_id`;p(C,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${K} = ${O}.${C}`;if(M){let x=M({where:(g,B,b)=>{return p(g,"relationship subquery condition"),`${I}.${g} ${f0(B,"whereHas callback")} ${q9(b)}`}});if(x)T+=` AND ${x}`}return T},b$=(O,I,K,M,C,T)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)"),p(M,"relationship subquery (target primary key)");let k=T&&Z?PX(Z,O,T,{singularize:u,models:Z.models}):null,x=u(O),g=u(I),B=k?.pivotTable??[x,g].sort().join("_"),b=k?.fkParent??`${x}_id`,s=k?.fkRelated??`${g}_id`;p(B,"relationship subquery (pivot table)"),p(b,"relationship subquery (foreign key A)"),p(s,"relationship subquery (foreign key B)");let $0=`SELECT 1 FROM ${B} JOIN ${I} ON ${I}.${M} = ${B}.${s} WHERE ${B}.${b} = ${O}.${K}`;if(C){let r=C({where:(S0,X9,_9)=>{return p(S0,"relationship subquery condition"),`${I}.${S0} ${f0(X9,"whereHas callback")} ${q9(_9)}`}});if(r)$0+=` AND ${r}`}return $0},k7=(O,I,K)=>{p(O,"withCount (parent table)"),p(I,"withCount (target table)"),p(K,"withCount (primary key)");let M=`${O.endsWith("s")?O.slice(0,-1):O}_id`;return p(M,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${I} WHERE ${I}.${M} = ${O}.${K})`},x7=(O,I,K,M)=>{p(O,"withCount (parent table)"),p(I,"withCount (target table)"),p(K,"withCount (primary key)");let C=M&&Z?PX(Z,O,M,{singularize:u,models:Z.models}):null,T=u(O),k=u(I),x=C?.pivotTable??[T,k].sort().join("_"),g=C?.fkParent??`${T}_id`;return p(x,"withCount (pivot table)"),p(g,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${x} WHERE ${x}.${g} = ${O}.${K})`},f$=(O,I,K)=>{if(!Z)return;p(K,`with${O[0]}${O.slice(1).toLowerCase()} (column)`);let M=String(G),C=Z.relations?.[M];if(!C)return;let T=Object.entries(C).find(([r,S0])=>S0&&typeof S0==="object"&&(I in S0));if(!T)return;let[k,x]=T,g=x[I],B=typeof g==="string"?g:g?.model||g?.target||g,b=Z.modelToTable[B]||B,s=Z.primaryKeys[M]??"id";p(b,`with${O} (target table)`);let $0=`${O}(${b}.${K})`,P0;if(k==="hasMany"||k==="hasOne"){let r=`${M.endsWith("s")?M.slice(0,-1):M}_id`;p(r,`with${O} (foreign key)`),P0=`(SELECT ${$0} FROM ${b} WHERE ${b}.${r} = ${M}.${s})`}else if(k==="belongsToMany"){let r=Z?PX(Z,M,I,{singularize:u,models:Z.models}):null,S0=u(M),X9=u(b),_9=r?.pivotTable??[S0,X9].sort().join("_"),_X=r?.fkParent??`${S0}_id`,_0=r?.fkRelated??`${X9}_id`,cX=Z.primaryKeys[b]??"id";p(_9,`with${O} (pivot table)`),p(_X,`with${O} (foreign key)`),p(_0,`with${O} (related key)`),P0=`(SELECT ${$0} FROM ${_9} JOIN ${b} ON ${b}.${cX} = ${_9}.${_0} WHERE ${_9}.${_X} = ${M}.${s})`}else return;J9(`${P0} AS ${I}_${O.toLowerCase()}_${K}`)},R5=()=>{if(v.size===0)return;let O=[];for(let[I,K]of v.entries()){let M=i(I);if(!M)continue;for(let T of K)p(T,"withPivot");let C=K.map((T)=>`${M.pivotTable}.${T} AS pivot_${T}`);O.push(...C)}if(O.length>0){let I=O.join(", ");J9(I)}};return new Proxy({distinct(){return F=F.replace(/^SELECT\s+/i,"SELECT DISTINCT "),R=null,this},distinctOn(...O){let I=O.map(String).join(", ");return F=F.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${I}) `),R=null,this},selectRaw(O){let I=RX(O,"selectRaw(fragment)"),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I}${F.substring(K)}`;else F+=`, ${I}`;return R=null,this},rowNumber(O="row_number",I,K){let M=[];if(I){let x=Array.isArray(I)?I:[I];M.push(`PARTITION BY ${x.join(", ")}`)}if(K&&K.length)M.push(`ORDER BY ${K.map(([x,g])=>`${x} ${g==="desc"?"DESC":"ASC"}`).join(", ")}`);let T=`ROW_NUMBER() ${M.length?`OVER (${M.join(" ")})`:"OVER ()"} AS ${O}`,k=F.indexOf(" FROM ");if(k!==-1)F=`${F.substring(0,k)}, ${T}${F.substring(k)}`;else F+=`, ${T}`;return R=null,this},denseRank(O="dense_rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],C=[];if(M.length)C.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)C.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`DENSE_RANK() ${C.length?`OVER (${C.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},rank(O="rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],C=[];if(M.length)C.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)C.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`RANK() ${C.length?`OVER (${C.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},over(O,I,K={}){return G0(O,I,K.partitionBy,K.orderBy),this},lag(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LAG(${K.join(", ")})`,I.alias??`${O}_lag`,I.partitionBy,I.orderBy),this},lead(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LEAD(${K.join(", ")})`,I.alias??`${O}_lead`,I.partitionBy,I.orderBy),this},sumOver(O,I={}){return G0(`SUM(${O})`,I.alias??`${O}_sum`,I.partitionBy,I.orderBy),this},avgOver(O,I={}){return G0(`AVG(${O})`,I.alias??`${O}_avg`,I.partitionBy,I.orderBy),this},countOver(O="*",I={}){return G0(`COUNT(${O})`,I.alias??"count_over",I.partitionBy,I.orderBy),this},minOver(O,I={}){return G0(`MIN(${O})`,I.alias??`${O}_min`,I.partitionBy,I.orderBy),this},maxOver(O,I={}){return G0(`MAX(${O})`,I.alias??`${O}_max`,I.partitionBy,I.orderBy),this},firstValue(O,I={}){return G0(`FIRST_VALUE(${O})`,I.alias??`${O}_first`,I.partitionBy,I.orderBy),this},lastValue(O,I={}){return G0(`LAST_VALUE(${O})`,I.alias??`${O}_last`,I.partitionBy,I.orderBy),this},selectAll(){return this},select(O){if(!O)return this;let I=Array.isArray(O)?O:[O];if(I.length===0)return this;let K=I.map(NY),M=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(F),C=M?M[1]:"",T=F.indexOf(" FROM ");if(T!==-1)F=`SELECT ${C}${K.join(", ")}${F.substring(T)}`;else F=`SELECT ${C}${K.join(", ")} FROM ${G}`;return R=null,this},addSelect(...O){if(!O.length)return this;let I=O.map(NY),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I.join(", ")}${F.substring(K)}`;else F+=`, ${I.join(", ")}`;return R=null,this},with(...O){if(!Z||!O||O.length===0)return this;let I=[];for(let B of O){if(!B)continue;if(typeof B==="string")I.push({name:B});else if(typeof B==="object"&&!Array.isArray(B))for(let[b,s]of Object.entries(B))if(typeof s==="function")I.push({name:b,callback:s});else I.push({name:b})}if(I.length===0)return this;let K=f.relations.maxEagerLoad??50;if(I.length>K)throw Error(`[query-builder] Too many relationships to eager load (${I.length}). Maximum allowed: ${K}`);let M=String(G),C=new Set,T=new Set,k=new Map,x=(B)=>{let b=Z.relations?.[B];if(!b)return[];return[...Object.keys(b.hasOne||{}),...Object.keys(b.hasMany||{}),...Object.keys(b.belongsTo||{}),...Object.keys(b.belongsToMany||{}),...Object.keys(b.hasOneThrough||{}),...Object.keys(b.hasManyThrough||{}),...Object.keys(b.morphOne||{}),...Object.keys(b.morphMany||{}),...Object.keys(b.morphToMany||{}),...Object.keys(b.morphedByMany||{})]},g=(B,b,s=0,$0)=>{let P0=f.relations.maxDepth??10;if(s>=P0)throw Error(`[query-builder] Maximum relationship depth (${P0}) exceeded at '${b}'. Consider using separate queries or increasing maxDepth.`);let r=Z.relations?.[B];if(!r)return B;let S0=(Z0)=>{if(f.softDeletes?.enabled&&f.softDeletes?.defaultFilter){let Y0=f.softDeletes.column||"deleted_at";return` AND ${Z0}.${Y0} IS NULL`}return""},X9=(Z0)=>{if(!$0)return"";let Y0=[],w0=(L0,a0,R9)=>{p(String(L0),"with() constraint column");let QX=f0(a0,"with() constraint operator");Y0.push(`${Z0}.${String(L0)} ${QX} ${q9(R9)}`)},K0=(L0)=>()=>{throw Error(`[query-builder] with('${b}', ...): ${L0} 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.)`)},T0={where:(L0,a0,R9)=>{if(Array.isArray(L0))w0(L0[0],L0[1],L0[2]);else if(L0&&typeof L0==="object")for(let QX of Object.keys(L0))w0(QX,"=",L0[QX]);else if(a0!==void 0&&R9!==void 0)w0(L0,a0,R9);else if(a0!==void 0)w0(L0,"=",a0);return T0},whereIn:(L0,a0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IN (${a0.map(q9).join(", ")})`),T0},whereNull:(L0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NULL`),T0},whereNotNull:(L0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NOT NULL`),T0},orderBy:K0("orderBy()"),limit:K0("limit()"),offset:K0("offset()"),take:K0("take()")};return $0(T0),Y0.length?` AND ${Y0.join(" AND ")}`:""},_9=()=>{let Z0=(K0)=>{let T0=K0?.[b];return T0?Z.modelToTable[T0]:void 0},Y0=(K0)=>{let T0=K0?.[b],L0=typeof T0==="string"?T0:T0?.model;return L0?Z.modelToTable[L0]:void 0},w0=(K0)=>{let T0=K0?.[b];return T0?.target?Z.modelToTable[T0.target]:void 0};return Z0(r?.hasOne)||Z0(r?.hasMany)||Z0(r?.belongsTo)||Y0(r?.belongsToMany)||w0(r?.hasOneThrough)||w0(r?.hasManyThrough)||Z0(r?.morphOne)||Z0(r?.morphMany)||Z0(r?.morphToMany)||Z0(r?.morphedByMany)},_X=_9()??(Z.modelToTable[b]||Z.tableToModel[b]?Z.modelToTable[b]??b:b),_0=String(_X);if(!_X||!_9()&&!Z.modelToTable[b]&&!Z.tableToModel[b]){let Z0=x(B);if(Z0.length>0&&!Z0.includes(b)){let Y0=` Available relationships: ${Z0.join(", ")}`;throw Error(`[query-builder] Relationship '${b}' not found on table '${B}'.${Y0}`)}}if(f.relations.detectCycles!==!1){let Z0=`${B}->${_0}`;if(C.has(Z0))throw Error(`[query-builder] Circular relationship detected: ${Z0}. This would cause an infinite loop.`);C.add(Z0)}if(!_0||_0===B)return B;let cX=r?.hasOneThrough?.[b]||r?.hasManyThrough?.[b];if(cX){let{through:Z0,target:Y0}=cX,w0=Z.modelToTable[Z0]||Z0,K0=Z.modelToTable[Y0]||Y0,T0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[w0]??"id",a0=`${u(B)}_id`,R9=`${u(w0)}_id`;return A(`LEFT JOIN ${w0} ON ${w0}.${a0} = ${B}.${T0} LEFT JOIN ${K0} ON ${K0}.${R9} = ${w0}.${L0}`),P.add(w0),P.add(K0),K0}if(Boolean(r?.belongsToMany?.[b])){let Z0=PX(Z,B,b,{singularize:u,models:Z.models}),Y0=Z0?.pivotTable??[u(B),u(_0)].sort().join("_"),w0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",T0=Z0?.fkParent??`${u(B)}_id`,L0=Z0?.fkRelated??`${u(_0)}_id`;return A(`LEFT JOIN ${Y0} ON ${Y0}.${T0} = ${B}.${w0} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${L0}${X9(_0)}`),P.add(Y0),P.add(_0),_0}if(Boolean(r?.morphToMany?.[b])){let Z0=b,Y0=`${u(_0)}_${Z0}`,w0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",T0=`${Z0}_type`,L0=`${Z0}_id`,a0=`${u(_0)}_id`,R9=q9(Z.tableToModel[B]||B);return A(`LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${B}.${w0} AND ${Y0}.${T0} = ${R9} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${a0}`),P.add(Y0),P.add(_0),_0}if(Boolean(r?.morphedByMany?.[b])){let Z0=r.morphedByMany?.[b]||b,Y0=Z.modelToTable[Z0]||Z0,w0=u(B),K0=`${u(Y0)}_${w0}`,T0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[Y0]??"id",a0=`${w0}_type`,R9=`${w0}_id`,QX=`${u(Y0)}_id`,f7=q9(Z.tableToModel[Y0]||Y0);return A(`LEFT JOIN ${K0} ON ${K0}.${QX} = ${B}.${T0} LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${K0}.${R9} AND ${K0}.${a0} = ${f7}`),P.add(K0),P.add(Y0),Y0}if(Boolean(r?.belongsTo?.[b])){let Z0=`${u(_0)}_id`,Y0=Z.primaryKeys[_0]??"id";return A(`LEFT JOIN ${_0} ON ${B}.${Z0} = ${_0}.${Y0}${X9(_0)}`),P.add(_0),_0}let B7=Boolean(r?.morphOne?.[b]),y7=Boolean(r?.morphMany?.[b]);if(B7||y7){let Z0=`${b}_type`,Y0=`${b}_id`,w0=Z.primaryKeys[B]??"id",K0=q9(Z.tableToModel[B]||B);return A(`LEFT JOIN ${_0} ON ${_0}.${Y0} = ${B}.${w0} AND ${_0}.${Z0} = ${K0}`),P.add(_0),_0}let h7=`${u(B)}_id`,v7=Z.primaryKeys[B]??"id",b7=`${S0(_0)}${X9(_0)}`;return A(`LEFT JOIN ${_0} ON ${_0}.${h7} = ${B}.${v7}${b7}`),P.add(_0),_0};for(let B of I){let b=B.name.trim();if(B.callback)k.set(b,B.callback);let s=b.split("."),$0=M,P0=0;for(let r of s){if(!r||r.trim().length===0)continue;let S0=r.trim(),X9=k.get(S0);$0=g($0,S0,P0,X9)||$0,P0++}T.add(b)}if(v.size>0){let B=[];for(let[b,s]of v.entries()){let $0=i(b);if(!$0)continue;let P0=s.map((r)=>`${$0.pivotTable}.${r} AS pivot_${r}`);B.push(...P0)}if(B.length>0){let b=B.join(", ");J9(b)}}return R=null,this},whereHas(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let C=Object.entries(M).find(([s,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!C)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=C,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b;if(T==="hasMany"||T==="hasOne"){let s=Z.primaryKeys[K]??"id";b=UX(K,B,s,I)}else if(T==="belongsTo"){let s=Z.primaryKeys[B]??"id";b=v$(K,B,s,I)}else if(T==="belongsToMany"){let s=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";b=b$(K,B,s,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereHas`);R=W`${D()} WHERE EXISTS (${W([b])})`;try{q("WHERE",`EXISTS (${b})`)}catch{}return this},whereDoesntHave(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let C=Object.entries(M).find(([s,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!C)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=C,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b;if(T==="hasMany"||T==="hasOne"){let s=Z.primaryKeys[K]??"id";b=UX(K,B,s,I)}else if(T==="belongsTo"){let s=Z.primaryKeys[B]??"id";b=v$(K,B,s,I)}else if(T==="belongsToMany"){let s=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";b=b$(K,B,s,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereDoesntHave`);R=W`${D()} WHERE NOT EXISTS (${W([b])})`;try{q("WHERE",`NOT EXISTS (${b})`)}catch{}return this},has(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([b,s])=>s&&typeof s==="object"&&(O in s));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[C,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(C==="hasMany"||C==="hasOne"){let b=Z.primaryKeys[I]??"id";B=UX(I,g,b)}else if(C==="belongsTo"){let b=Z.primaryKeys[g]??"id";B=v$(I,g,b)}else if(C==="belongsToMany"){let b=Z.primaryKeys[I]??"id",s=Z.primaryKeys[g]??"id";B=b$(I,g,b,s,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${C}' for has`);R=W`${D()} WHERE EXISTS (${W([B])})`;try{q("WHERE",`EXISTS (${B})`)}catch{}return this},doesntHave(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([b,s])=>s&&typeof s==="object"&&(O in s));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[C,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(C==="hasMany"||C==="hasOne"){let b=Z.primaryKeys[I]??"id";B=UX(I,g,b)}else if(C==="belongsTo"){let b=Z.primaryKeys[g]??"id";B=v$(I,g,b)}else if(C==="belongsToMany"){let b=Z.primaryKeys[I]??"id",s=Z.primaryKeys[g]??"id";B=b$(I,g,b,s,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${C}' for doesntHave`);R=W`${D()} WHERE NOT EXISTS (${W([B])})`;try{q("WHERE",`NOT EXISTS (${B})`)}catch{}return this},withCount(...O){if(!Z||!O||O.length===0)return this;let I=String(G);for(let K of O){let M=Z.relations?.[I];if(!M)continue;let C=Object.entries(M).find(([P0,r])=>r&&typeof r==="object"&&(K in r));if(!C)continue;let[T,k]=C,x=k[K],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,b=Z.primaryKeys[I]??"id",s;if(T==="hasMany"||T==="hasOne")s=k7(I,B,b);else if(T==="belongsToMany")s=x7(I,B,b,K);else continue;let $0=`${K}_count`;J9(`${s} AS ${$0}`)}return this},withSum(O,I){return f$("SUM",O,I),this},withAvg(O,I){return f$("AVG",O,I),this},withMax(O,I){return f$("MAX",O,I),this},withMin(O,I){return f$("MIN",O,I),this},applyPivotColumns(){return R5(),this},withPivot(O,...I){if(!Z)return this;let K=String(G),M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${K}'`);let C=I&&I.length>0?I:M.hasConfig?M.pivotColumns:[];if(C.length===0)return this;if(v.set(O,C),M.hasConfig)n.add(O);return R5(),this},wherePivot(O,I,K,M){if(!Z)return this;let C=i(O);if(!C)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(C.pivotTable,"wherePivot (pivot table)"),p(I,"wherePivot (column)"),R0(C);let T=M===void 0?"=":String(K),k=M===void 0?K:M,x=y.length+1,g=`${C.pivotTable}.${I} ${T} ${l(x)}`;z0.push(g),y.push(k);let B=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${B} ${g}`,R=null,C.hasConfig)n.add(O);return this},wherePivotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(M.pivotTable,"wherePivotIn (pivot table)"),p(I,"wherePivotIn (column)"),R0(M);let C=b0(K.length,y.length+1),T=`${M.pivotTable}.${I} IN (${C})`;z0.push(T),y.push(...K);let k=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)n.add(O);return this},wherePivotNotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=i(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(M.pivotTable,"wherePivotNotIn (pivot table)"),p(I,"wherePivotNotIn (column)"),R0(M);let C=b0(K.length,y.length+1),T=`${M.pivotTable}.${I} NOT IN (${C})`;z0.push(T),y.push(...K);let k=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)n.add(O);return this},wherePivotNull(O,I){if(!Z)return this;let K=i(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(K.pivotTable,"wherePivotNull (pivot table)"),p(I,"wherePivotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NULL`;z0.push(M);let C=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${C} ${M}`,R=null,K.hasConfig)n.add(O);return this},wherePivotNotNull(O,I){if(!Z)return this;let K=i(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(K.pivotTable,"wherePivotNotNull (pivot table)"),p(I,"wherePivotNotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NOT NULL`;z0.push(M);let C=o.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${C} ${M}`,R=null,K.hasConfig)n.add(O);return this},where(O,I,K){let M=()=>o.WHERE.test(F)?"AND":"WHERE";if(typeof O==="string"&&I!==void 0){p(String(O),"where(column)"),f0(I,"where(operator)");let C=String(I).toLowerCase();if(C==="in"||C==="not in"){let k=Array.isArray(K)?K:[K],x=b0(k.length,y.length+1),g=`${String(O)} ${C.toUpperCase()} (${x})`;return z0.push(g),y.push(...k),F=`${F} ${M()} ${g}`,R=null,this}let T=y.length+1;return z0.push(`${String(O)} ${String(I)} ${l(T)}`),y.push(K),F=`${F} ${M()} ${String(O)} ${String(I)} ${l(T)}`,R=null,this}if(Array.isArray(O)){let[C,T,k]=O,x=String(C);p(x,"where(column)");let g=f0(T,"where(operator)");if(g==="in"||g==="not in"){let B=Array.isArray(k)?k:[k],b=b0(B.length,y.length+1);z0.push(`${x} ${g.toUpperCase()} (${b})`),y.push(...B),F=`${F} ${M()} ${x} ${g.toUpperCase()} (${b})`,R=null}else{let B=y.length+1;z0.push(`${x} ${g} ${l(B)}`),y.push(k),F=`${F} ${M()} ${x} ${g} ${l(B)}`,R=null}return this}if(O&&typeof O==="object"&&!p8(O)){let C=O,T=Object.keys(C),k=[];for(let x of T){p(x,"where(column)");let g=C[x];if(Array.isArray(g)){let B=b0(g.length,y.length+1);k.push(`${x} IN (${B})`),z0.push(`${x} IN (${B})`),y.push(...g)}else{let B=y.length+1;k.push(`${x} = ${l(B)}`),z0.push(`${x} = ${l(B)}`),y.push(g)}}if(k.length>0)F=`${F} ${M()} ${k.join(" AND ")}`,R=null;return this}if(p8(O))return z0.push(O.raw),F=`${F} ${M()} ${O.raw}`,R=null,this;return this},whereNull(O){p(String(O),"whereNull(column)");let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NULL`,R=null,this},whereNotNull(O){p(String(O),"whereNotNull(column)");let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NOT NULL`,R=null,this},whereBetween(O,I,K){p(String(O),"whereBetween(column)");let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1;return F=`${F} ${M} ${String(O)} BETWEEN ${l(C)} AND ${l(C+1)}`,y.push(I,K),R=null,this},whereExists(O){let I=o.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} EXISTS (${O.toSQL()})`,R=null,this},whereJsonContains(O,I){p(String(O),"whereJsonContains(column)");let K=o.WHERE.test(F)?"AND":"WHERE",M=f.dialect,C=y.length+1;if(M==="postgres"){if(f.sql?.jsonContainsMode==="function")F+=` ${K} jsonb_contains(${O}, ${l(C)})`;else F+=` ${K} ${O} @> ${l(C)}`;y.push(JSON.stringify(I))}else if(I0(M))F+=` ${K} JSON_CONTAINS(${O}, ${l(C)})`,y.push(JSON.stringify(I));else if(Array.isArray(I)){let T=I.map((k,x)=>`EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${l(C+x)})`);F+=` ${K} (${T.join(" AND ")})`;for(let k of I)y.push(k)}else if(I!==null&&typeof I==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else F+=` ${K} EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${l(C)})`,y.push(I);return R=null,this},whereJsonPath(O,I,K){if(f0(I,"whereJsonPath(op)"),typeof O!=="string"||O.length===0||O.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof O==="string"?`'${O.slice(0,32)}...'`:typeof O}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(O))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${O}' \u2014 contains characters outside the allowed JSON-path set`);let M=f.dialect,C=o.WHERE.test(F)?"AND":"WHERE",T=y.length+1;if(M==="postgres")F+=` ${C} ${O} ${I} ${l(T)}`;else if(I0(M))F+=` ${C} JSON_EXTRACT(${O}) ${I} ${l(T)}`;else F+=` ${C} json_extract(${O}) ${I} ${l(T)}`;return y.push(K),R=null,this},whereLike(O,I,K=!1){let M=l(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("WHERE",`${String(O)} ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereLike(O,I,K=!1){let M=l(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("OR",`${String(O)} ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},whereNotLike(O,I,K=!1){let M=l(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereNotILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("WHERE",`${String(O)} NOT ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereNotLike(O,I,K=!1){let M=l(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereNotILike(O,I){let K=l(y.length+1);if(f.dialect==="postgres")q("OR",`${String(O)} NOT ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},whereAny(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereAll(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} (${T.join(" AND ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNone(O,I,K){if(O.length===0)return this;let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1,T=O.map((k,x)=>`${k} ${I} ${l(C+x)}`);F+=` ${M} NOT (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNotBetween(O,I,K){p(String(O),"whereNotBetween(column)");let M=o.WHERE.test(F)?"AND":"WHERE",C=y.length+1;return F+=` ${M} ${O} NOT BETWEEN ${l(C)} AND ${l(C+1)}`,y.push(I,K),R=null,this},whereDate(O,I,K){p(O,"whereDate(column)");let M=K instanceof Date?K.toISOString():typeof K==="string"?K:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof K}`)})(),C=o.WHERE.test(F)?"AND":"WHERE",T=y.length+1;return F+=` ${C} ${O} ${I} ${l(T)}`,y.push(M),R=null,this},whereRaw(O){let I=RX(O,"whereRaw(fragment)"),K=o.WHERE.test(F)?"AND":"WHERE";return F+=` ${K} ${I}`,R=null,this},whereColumn(O,I,K){p(O,"whereColumn(left)"),p(K,"whereColumn(right)");let M=o.WHERE.test(F)?"AND":"WHERE";return F+=` ${M} ${O} ${I} ${K}`,R=null,this},orWhereColumn(O,I,K){return p(O,"orWhereColumn(left)"),p(K,"orWhereColumn(right)"),F+=` OR ${O} ${I} ${K}`,R=null,this},whereIn(O,I){p(String(O),"whereIn(column)");let K=o.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=b0(I.length,y.length+1);F+=` ${K} ${O} IN (${M})`,y.push(...I)}else F+=` ${K} ${O} IN (${String(I.toSQL())})`;return R=null,this},orWhereIn(O,I){if(p(String(O),"orWhereIn(column)"),Array.isArray(I)){let K=b0(I.length,y.length+1);F+=` OR ${O} IN (${K})`,y.push(...I)}else F+=` OR ${O} IN (${String(I.toSQL())})`;return R=null,this},whereNotIn(O,I){p(String(O),"whereNotIn(column)");let K=o.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=b0(I.length,y.length+1);F+=` ${K} ${O} NOT IN (${M})`,y.push(...I)}else F+=` ${K} ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},orWhereNotIn(O,I){if(p(String(O),"orWhereNotIn(column)"),Array.isArray(I)){let K=b0(I.length,y.length+1);F+=` OR ${O} NOT IN (${K})`,y.push(...I)}else F+=` OR ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},whereNested(O){let I=o.WHERE.test(F)?"AND":"WHERE",K=O.toSQL?String(O.toSQL()):String(O);return F+=` ${I} (${K})`,R=null,this},orWhereNested(O){let I=O.toSQL?String(O.toSQL()):String(O);return F+=` OR (${I})`,R=null,this},andWhere(O,I,K){if(typeof O==="string"&&I!==void 0){p(String(O),"andWhere(column)"),f0(I,"andWhere(operator)");let M=y.length+1;return z0.push(`${String(O)} ${String(I)} ${l(M)}`),y.push(K),F=`${F} AND ${String(O)} ${String(I)} ${l(M)}`,R=null,this}if(Array.isArray(O)){let[M,C,T]=O,k=String(M);p(k,"andWhere(column)");let x=f0(C,"andWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=b0(g.length,y.length+1);z0.push(`${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} AND ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`${k} ${x} ${l(g)}`),y.push(T),F=`${F} AND ${k} ${x} ${l(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),C=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=b0(k.length,y.length+1);C.push(`${T} IN (${x})`),z0.push(`${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;C.push(`${T} = ${l(x)}`),z0.push(`${T} = ${l(x)}`),y.push(k)}}if(C.length>0)F=`${F} AND ${C.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(O.raw),F=`${F} AND ${O.raw}`,R=null,this;return this},orWhere(O,I,K){if(typeof O==="string"&&I!==void 0){p(String(O),"orWhere(column)"),f0(I,"orWhere(operator)");let M=y.length+1;return z0.push(`OR ${String(O)} ${String(I)} ${l(M)}`),y.push(K),F=`${F} OR ${String(O)} ${String(I)} ${l(M)}`,R=null,this}if(Array.isArray(O)){let[M,C,T]=O,k=String(M);p(k,"orWhere(column)");let x=f0(C,"orWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=b0(g.length,y.length+1);z0.push(`OR ${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} OR ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`OR ${k} ${x} ${l(g)}`),y.push(T),F=`${F} OR ${k} ${x} ${l(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),C=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=b0(k.length,y.length+1);C.push(`${T} IN (${x})`),z0.push(`OR ${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;C.push(`${T} = ${l(x)}`),z0.push(`OR ${T} = ${l(x)}`),y.push(k)}}if(C.length>0)F=`${F} OR ${C.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(`OR ${O.raw}`),F=`${F} OR ${O.raw}`,R=null,this;return this},orderBy(O,I="asc"){let K=I==="asc"?"ASC":"DESC";return F=o.ORDER_BY.test(F)?`${F}, ${O} ${K}`:`${F} ORDER BY ${O} ${K}`,R=null,this},orderByDesc(O){return F=o.ORDER_BY.test(F)?`${F}, ${O} DESC`:`${F} ORDER BY ${O} DESC`,R=null,this},inRandomOrder(){let O=f.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return F=o.ORDER_BY.test(F)?`${F}, ${O}`:`${F} ORDER BY ${O}`,R=null,this},reorder(O,I="asc"){return F=F.replace(/ORDER BY[\s\S]*$/i,""),F+=` ORDER BY ${O} ${I==="asc"?"ASC":"DESC"}`,R=null,this},latest(O){let I=O??f.timestamps.defaultOrderColumn;return F=o.ORDER_BY.test(F)?`${F}, ${I} DESC`:`${F} ORDER BY ${I} DESC`,R=null,this},oldest(O){let I=O??f.timestamps.defaultOrderColumn;return F=o.ORDER_BY.test(F)?`${F}, ${I} ASC`:`${F} ORDER BY ${I} ASC`,R=null,this},limit(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${O}`);return F=o.LIMIT.test(F)?F.replace(o.LIMIT,` LIMIT ${O}`):`${F} LIMIT ${O}`,R=null,this},offset(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${O}`);return F=o.OFFSET.test(F)?F.replace(o.OFFSET,` OFFSET ${O}`):`${F} OFFSET ${O}`,R=null,this},join(O,I,K,M){return p(O,"join(table)"),Q9(I,"join(onLeft)"),Q9(M,"join(onRight)"),f0(K,"join(operator)"),A(`JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},joinSub(O,I,K,M,C){return p(I,"joinSub(alias)"),Q9(K,"joinSub(onLeft)"),Q9(C,"joinSub(onRight)"),f0(M,"joinSub(operator)"),A(`JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${C}`),P.add(I),this},innerJoin(O,I,K,M){return p(O,"innerJoin(table)"),Q9(I,"innerJoin(onLeft)"),Q9(M,"innerJoin(onRight)"),f0(K,"innerJoin(operator)"),A(`INNER JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoin(O,I,K,M){return p(O,"leftJoin(table)"),Q9(I,"leftJoin(onLeft)"),Q9(M,"leftJoin(onRight)"),f0(K,"leftJoin(operator)"),A(`LEFT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoinSub(O,I,K,M,C){return p(I,"leftJoinSub(alias)"),Q9(K,"leftJoinSub(onLeft)"),Q9(C,"leftJoinSub(onRight)"),f0(M,"leftJoinSub(operator)"),A(`LEFT JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${C}`),P.add(I),this},rightJoin(O,I,K,M){return p(O,"rightJoin(table)"),Q9(I,"rightJoin(onLeft)"),Q9(M,"rightJoin(onRight)"),f0(K,"rightJoin(operator)"),A(`RIGHT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},crossJoin(O){return p(O,"crossJoin(table)"),A(`CROSS JOIN ${O}`),P.add(O),this},crossJoinSub(O,I){return p(I,"crossJoinSub(alias)"),A(`CROSS JOIN (${String(O.toSQL())}) AS ${I}`),P.add(I),this},selectAllRelations(){if(!Y)return this;let O=String(G),I=Object.keys(Y[O]?.columns??{}),K=[];if(I.length>0)K.push(W`${W(O)}.*`);for(let M of P){let C=Object.keys(Y[M]?.columns??{});for(let T of C){let k=f.aliasing.relationColumnAliasFormat==="camelCase"?`${M}_${T}`.replace(/_([a-z])/g,(x,g)=>g.toUpperCase()):f.aliasing.relationColumnAliasFormat==="table.dot.column"?`${M}.${T}`:`${M}_${T}`;K.push(W`${W(`${M}.${T}`)} AS ${W(k)}`)}}if(K.length>0){let M=I.length>0?`${O}.*`:"",C=[];for(let x of P){let g=Object.keys(Y[x]?.columns??{});for(let B of g){let b=f.aliasing.relationColumnAliasFormat==="camelCase"?`${x}_${B}`.replace(/_([a-z])/g,(s,$0)=>$0.toUpperCase()):f.aliasing.relationColumnAliasFormat==="table.dot.column"?`${x}.${B}`:`${x}_${B}`;C.push(`${x}.${B} AS ${b}`)}}let T=[M,...C].filter(Boolean).join(", "),k=F.indexOf(" FROM ");if(k!==-1)F=`SELECT ${T}${F.substring(k)}`;else F=`SELECT ${T} FROM ${O}`;R=null}return this},groupBy(...O){if(O.length)F=o.GROUP_BY.test(F)?`${F}, ${O.join(", ")}`:`${F} GROUP BY ${O.join(", ")}`,R=null;return this},groupByRaw(O){let I=RX(O,"groupByRaw(fragment)");return F=o.GROUP_BY.test(F)?`${F}, ${I}`:`${F} GROUP BY ${I}`,R=null,this},having(O){let I=/\bHAVING\b/i.test(F)?"AND":"HAVING";if(Array.isArray(O)){let K=y.length+1;F=`${F} ${I} ${O[0]} ${O[1]} ${l(K)}`,y.push(O[2]),R=null}else if(O&&typeof O==="object"&&!("raw"in O)){let K=Object.keys(O),M=K.length;if(M){let C=y.length,T=Array.from({length:M});for(let k=0;k<M;k++){let x=K[k];T[k]=`${x} = ${l(C+k+1)}`,y.push(O[x])}F=`${F} ${I} ${T.join(" AND ")}`,R=null}}else if(O&&typeof O.raw<"u")F+=` ${I} ${O.raw}`,R=null;return this},havingRaw(O){let I=RX(O,"havingRaw(fragment)"),K=/\bHAVING\b/i.test(F)?"AND":"HAVING";return F+=` ${K} ${I}`,R=null,this},orderByRaw(O){let I=RX(O,"orderByRaw(fragment)");return F=o.ORDER_BY.test(F)?`${F}, ${I}`:`${F} ORDER BY ${I}`,R=null,this},union(O){return w("UNION",O),this},unionAll(O){return w("UNION ALL",O),this},intersect(O){return w("INTERSECT",O),this},intersectAll(O){return w("INTERSECT ALL",O),this},except(O){return w("EXCEPT",O),this},exceptAll(O){return w("EXCEPT ALL",O),this},forPage(O,I){let K=Math.max(1,Math.floor(O)),M=Math.max(1,Math.floor(I));return F+=` LIMIT ${M} OFFSET ${(K-1)*M}`,R=null,this},toSQL(){let O=$8(F);return{sql:O,toString:()=>O,execute:()=>D().execute(),values:()=>D().values(),raw:()=>D().raw()}},async value(O){let I=W`${D()} LIMIT 1`,K=await j(I,"select",{signal:N,timeoutMs:H}),[M]=K;return M?.[O]},async pluck(O,I){let K=await j(D(),"select",{signal:N,timeoutMs:H});if(I){let M={};for(let C of K){let T=String(C?.[I]);if(Object.prototype.hasOwnProperty.call(M,T))throw Error(`[query-builder] pluck(${O}, ${I}): duplicate key '${T}' \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.`);M[T]=C?.[O]}return M}return K.map((M)=>M?.[O])},async exists(){let O=W`SELECT EXISTS (${D()}) as e`,I=await j(O,"select",{signal:N,timeoutMs:H}),[K]=I;return Boolean(K?.e)},async doesntExist(){return!await this.exists()},async paginate(O,I=1,K={}){if(!Number.isFinite(O)||O<=0||!Number.isInteger(O))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${O}`);if(!Number.isFinite(I)||I<1||!Number.isInteger(I))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${I}`);if(K.tx){let s=$8(F),$0=[...y],P0=await K.tx.unsafe(`SELECT COUNT(*) as c FROM (${s}) as sub`,$0),r=Number(P0?.[0]?.c??0),S0=Math.max(1,Math.ceil(r/O)),X9=Math.max(1,Math.min(I,S0)),_9=(X9-1)*O;return{data:await K.tx.unsafe(`${s} LIMIT ${O} OFFSET ${_9}`,$0),meta:{perPage:O,page:X9,total:r,lastPage:S0}}}let M=W`SELECT COUNT(*) as c FROM (${D()}) as sub`,C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C,k=Number(T?.c??0),x=Math.max(1,Math.ceil(k/O)),g=Math.max(1,Math.min(I,x)),B=(g-1)*O;return{data:await j(W`${D()} LIMIT ${O} OFFSET ${B}`,"select",{signal:N,timeoutMs:H}),meta:{perPage:O,page:g,total:k,lastPage:x}}},async simplePaginate(O,I=1){let K=Math.max(1,I),M=(K-1)*O,C=await j(W`${D()} LIMIT ${O+1} OFFSET ${M}`,"select",{signal:N,timeoutMs:H}),T=C.length>O;return{data:T?C.slice(0,O):C,meta:{perPage:O,page:K,hasMore:T}}},async cursorPaginate(O,I,K="id",M="asc"){let C=D();if(I!==void 0&&I!==null)if(Array.isArray(K)){let s=K.map((S0)=>W(String(S0))),$0=M==="asc"?W`>`:W`<`,P0=W`(${W(s)})`,r=W`(${W(I)})`;C=W`${C} WHERE ${P0} ${$0} ${r}`}else C=M==="asc"?W`${C} WHERE ${W(String(K))} > ${I}`:W`${C} WHERE ${W(String(K))} < ${I}`;if(Array.isArray(K)){let $0=K.map((P0)=>W`${W(String(P0))} ${M==="asc"?W`ASC`:W`DESC`}`).reduce((P0,r,S0)=>S0===0?r:W`${P0}, ${r}`);C=W`${C} ORDER BY ${$0} LIMIT ${O+1}`}else C=W`${C} ORDER BY ${W(String(K))} ${M==="asc"?W`ASC`:W`DESC`} LIMIT ${O+1}`;let T=await j(C,"select",{signal:N,timeoutMs:H}),k=T.length>O,x=T.slice(0,O),g=x[x.length-1],B=k&&g?Array.isArray(K)?K.map((s)=>g[s]):g[K]:null,b=x.length?Array.isArray(K)?K.map((s)=>x[0]?.[s]):x[0]?.[K]:null;return{data:x,meta:{perPage:O,nextCursor:B??null,prevCursor:b}}},async chunk(O,I){let K=1;while(!0){let{data:M,meta:C}=await this.paginate(O,K);if(M.length===0)break;if(await I(M),K>=C.lastPage)break;K+=1}},async chunkById(O,I="id",K){let M;while(!0){let{data:C,meta:T}=await this.cursorPaginate(O,M,I,"asc");if(C.length===0)break;if(K)await K(C);if(M=T.nextCursor,!M)break}},async eachById(O,I="id",K){await this.chunkById(O,I,async(M)=>{for(let C of M)await K?.(C)})},withTimeout(O){return H=Math.max(1,Math.floor(O)),this},abort(O){return N=O,this},withTrashed(){return S=!0,h=!1,this},onlyTrashed(){S=!0,h=!0;let O=f.softDeletes?.column||"deleted_at",I=(C,T)=>{let k=C.toUpperCase(),x=0;for(let g=0;g<C.length;g++){let B=C[g];if(B==="(")x++;else if(B===")")x--;else if(x===0&&k.substring(g,g+5)==="WHERE"&&(g===0||/\s/.test(C[g-1]??""))&&/\s/.test(C[g+5]??""))return`${C.substring(0,g)}WHERE ${T} AND ${C.substring(g+6)}`}return`${C} WHERE ${T}`},K=`${G}.${O} IS NOT NULL`;F=I(F,K);let M=String(D());return R=W([I(M,K)]),this},scope(O,I){let K=String(G),C=Z?.scopes?.[K]?.[O];if(C)return C(this,I);return this},when(O,I,K){if(O)return I(this);if(K)return K(this);return this},tap(O){return O(this),this},dump(){return console.log(String(D())),this},dd(){throw console.log(String(D())),Error("Dump and Die")},cache(O=60000){return a=O,d=!0,this},async explain(){let O=W`EXPLAIN ${D()}`;return await j(O,"select",{signal:N,timeoutMs:H})},simple(){return D().simple()},toText(){return F},async get(){let O=f.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||nX(O));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=$._prepareStatement;if(T){let k=T(F);return X0(y.length>0?k.all(...y):k.all())}}if(R=y.length>0?$.unsafe(F,y):$.unsafe(F),!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=D()._stmt,k=D()._params;if(T)return X0(k&&k.length>0?T.all(...k):T.all());return X0(await D().execute())}if(!f.softDeletes?.enabled&&!d&&!H&&!N)return X0(await j(D(),"select"));let K=D();if(f.softDeletes?.enabled&&f.softDeletes.defaultFilter&&!S){let T=f.softDeletes.column,k=String(G);if((Y?Boolean(Y[k]?.columns?.[T]):!0)&&!o.DELETED_AT.test(F))K=W`${D()} WHERE ${W(String(T))} IS ${h?W`NOT NULL`:W`NULL`}`,q("WHERE",`${String(T)} IS ${h?"NOT ":""}NULL`)}let M=d?`${String(K)}\x00${JSON.stringify(y)}`:"";if(d){let T=A$.get(M);if(T)return T}let C=await j(K,"select",{signal:N,timeoutMs:H});if(d)A$.set(M,C,a);return X0(C)},async executeTakeFirst(){let O=await j(D(),"select",{signal:N,timeoutMs:H});return m(Array.isArray(O)?O[0]:O)},async executeTakeFirstOrThrow(){let O=await this.executeTakeFirst();if(!O)throw Error("Record not found");return O},async first(){let O=f.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||nX(O));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!I){let C=$._prepareStatement;if(C){let T=F.includes(" LIMIT ")?F:`${F} LIMIT 1`,k=C(T),x=y.length>0?k.all(...y):k.all();return m(x[0])}}let K=await j(W`${D()} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return m(M)},async firstOrFail(){let O=await this.first();if(!O)throw Error("Record not found");return O},async find(O){let I=Z?.primaryKeys[String(G)]??"id",K=await j(W`${D()} WHERE ${W(I)} = ${O} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return M},async findOrFail(O){let I=await this.find(O);if(!I)throw Error("Record not found");return I},async findMany(O){let I=Z?.primaryKeys[String(G)]??"id";return await j(W`${D()} WHERE ${W(String(I))} IN ${W(O)}`,"select",{signal:N,timeoutMs:H})},async*lazy(){let O,I=Z?.primaryKeys[String(G)]??"id";while(!0){let M=await(O==null?W`${D()} ORDER BY ${W(String(I))} ASC LIMIT 100`:W`${D()} WHERE ${W(String(I))} > ${O} ORDER BY ${W(String(I))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let C of M)yield C;if(O=M[M.length-1]?.[I],O==null)break}},async*lazyById(){let O=Z?.primaryKeys[String(G)]??"id",I;while(!0){let M=await(I==null?W`${D()} ORDER BY ${W(String(O))} ASC LIMIT 100`:W`${D()} WHERE ${W(String(O))} > ${I} ORDER BY ${W(String(O))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let C of M)yield C;if(I=M[M.length-1]?.[O],I==null)break}},pipe(O){return O(this)},async count(){let O=F.indexOf(" FROM "),I=/ GROUP BY /i.test(F),K;if(I)K=`SELECT COUNT(*) as c FROM (${F}) AS _bqb_count_sub`;else if(O!==-1)K=`SELECT COUNT(*) as c${F.substring(O)}`;else K=`SELECT COUNT(*) as c FROM ${G}`;let M=f.hooks,C=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||nX(M));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!C){let g=$._prepareStatement;if(g){let B=g(K),b=y.length>0?B.all(...y):B.all();return Number(b[0]?.c??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.c??0)},async avg(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT AVG(${O}) as a${F.substring(I)}`:`SELECT AVG(${O}) as a FROM ${G}`,M=f.hooks,C=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||nX(M));if(!f.softDeletes?.enabled&&!d&&!H&&!N&&!C){let g=$._prepareStatement;if(g){let B=g(K),b=y.length>0?B.all(...y):B.all();return Number(b[0]?.a??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.a??0)},async sum(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT SUM(${O}) as s${F.substring(I)}`:`SELECT SUM(${O}) as s FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return Number(T?.s??0)},async max(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MAX(${O}) as m${F.substring(I)}`:`SELECT MAX(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return T?.m},async min(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MIN(${O}) as m${F.substring(I)}`:`SELECT MIN(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),C=await j(M,"select",{signal:N,timeoutMs:H}),[T]=C;return T?.m},lockForUpdate(){return F+=" FOR UPDATE",R=null,this},sharedLock(){let O=f.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return F+=` ${O}`,R=null,this},withCTE(O,I){return p(O,"withCTE(name)"),F=`WITH ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},withRecursive(O,I){return p(O,"withRecursive(name)"),F=`WITH RECURSIVE ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},execute(){return j(D(),"select",{signal:N,timeoutMs:H})},values(){return D().values()},toParams(){return[...y]},__rawState(){return{sql:$8(F),params:[...y]}},raw(){return D().raw()},get rows(){return},get row(){return},cancel(){try{D().cancel()}catch{}}},{get(O,I,K){let M=Reflect.get(O,I,K);if(M!==void 0)return M;if(typeof I==="string"&&(I.startsWith("where")||I.startsWith("orWhere")||I.startsWith("andWhere"))){let C=I.startsWith("orWhere"),T=I.startsWith("andWhere"),k=`${String(G)}|${I}`,x=U.get(k);if(x===void 0){let B=I.replace(/^(?:or|and)?where/i,"");if(!B)U.set(k,""),x="";else{let b=B.charAt(0).toLowerCase()+B.slice(1),s=B.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),$0=Y?Object.keys(Y[String(G)]?.columns??{}):[];x=[s,b,b.toLowerCase()].find((P0)=>$0.includes(P0))??s,U.set(k,x)}}if(x==="")return()=>K;let g=x;return(B)=>{let b=Array.isArray(B)?W`${W(g)} IN ${W(B)}`:W`${W(g)} = ${B}`;if(R=C?W`${D()} OR ${b}`:T?W`${D()} AND ${b}`:W`${D()} WHERE ${b}`,Array.isArray(B)){let s=b0(B.length,y.length+1);q(C?"OR":T?"AND":"WHERE",`${g} IN (${s})`),y.push(...B)}else{let s=l(y.length+1);q(C?"OR":T?"AND":"WHERE",`${g} = ${s}`),y.push(B)}return K}}return Reflect.get(O,I,K)}})}return{configure(G){return Object.assign(f,G),this},id(G){if(!o.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 $(String(G))},ids(...G){for(let J of G)if(!o.IDENTIFIER.test(J))throw Error(`[query-builder] Invalid identifier: '${J}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return $(G)},select(G,...J){return V(G,J)},selectFrom(G){return V(G)},selectFromSub(G,J){function W(H){return()=>{throw Error(`[query-builder] selectFromSub(...).${H}() is not supported. Apply ${H}() 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.")}}p(String(J),"selectFromSub(alias)");let F=typeof G.__rawState==="function"?G.__rawState():null,R=G.toSQL(),D=F?.sql??(typeof R==="string"?R:R?.sql??String(R)),q=F?.params??(Array.isArray(R?.values)?R.values:[]),w=`SELECT * FROM (${D}) AS ${String(J)}`,A=(H,N,S,h,d,v,n)=>{let a=!S?"WHERE":n==="WHERE"?"AND":n,u=[...N],i=(X0,R0,z0)=>{p(X0,"selectFromSub where(column)");let y=f0(R0,"selectFromSub where(operator)");if(y==="in"||y==="not in"){let G0=Array.isArray(z0)?z0:[z0],UX=b0(G0.length,u.length+1);return u.push(...G0),`${X0} ${y.toUpperCase()} (${UX})`}let J9=l(u.length+1);return u.push(z0),`${X0} ${y} ${J9}`},m;if(typeof h==="string"&&d!==void 0)m=i(h,d,v);else if(Array.isArray(h)&&h.length===3)m=i(h[0],h[1],h[2]);else if(h&&typeof h==="object")m=Object.entries(h).map(([X0,R0])=>i(X0,"=",R0)).join(" AND ");else return{text:H,params:N};return{text:`${H} ${a} ${m}`,params:u}};function P(H,N,S=!1){let h=()=>N.length>0?$.unsafe(H,N):$.unsafe(H),d={distinct(){return P(H.replace(/^SELECT\s+/i,"SELECT DISTINCT "),N,S)},distinctOn(...v){let n=v.map(String).join(", ");return P(H.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${n}) `),N,S)},selectRaw(v){let n=RX(v,"selectFromSub.selectRaw(fragment)"),a=H.indexOf(" FROM "),u=a!==-1?`${H.slice(0,a)}, ${n}${H.slice(a)}`:`${H}, ${n}`;return P(u,N,S)},where(v,n,a){let u=A(H,N,S,v,n,a,"WHERE");return P(u.text,u.params,!0)},andWhere(v,n,a){let u=A(H,N,S,v,n,a,"AND");return P(u.text,u.params,!0)},orWhere(v,n,a){let u=A(H,N,S,v,n,a,"OR");return P(u.text,u.params,!0)},orderBy(v,n="asc"){p(String(v),"selectFromSub.orderBy(column)");let a=n==="asc"?"ASC":"DESC",u=o.ORDER_BY.test(H)?`${H}, ${v} ${a}`:`${H} ORDER BY ${v} ${a}`;return P(u,N,S)},limit(v){if(!Number.isInteger(v)||v<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${v}`);let n=o.LIMIT.test(H)?H.replace(o.LIMIT,` LIMIT ${v}`):`${H} LIMIT ${v}`;return P(n,N,S)},offset(v){if(!Number.isInteger(v)||v<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${v}`);let n=o.OFFSET.test(H)?H.replace(o.OFFSET,` OFFSET ${v}`):`${H} OFFSET ${v}`;return P(n,N,S)},toSQL(){return E(h(),H)},async execute(){return j(h(),"select")},async executeTakeFirst(){let v=await j(h(),"select");return Array.isArray(v)?v[0]:v},async executeTakeFirstOrThrow(){let v=await j(h(),"select"),n=Array.isArray(v)?v[0]:v;if(!n)throw Error("Record not found");return n},async get(){return j(h(),"select")},async first(){let v=await j(h(),"select");return Array.isArray(v)?v[0]:v},async firstOrFail(){let v=await j(h(),"select"),n=Array.isArray(v)?v[0]:v;if(!n)throw Error("No rows found");return n},async count(){let v=N.length>0?$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`,N):$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`),n=await j(v,"select");return Number(n?.[0]?.c??0)},async exists(){let v=N.length>0?$.unsafe(`SELECT EXISTS(${H}) as e`,N):$.unsafe(`SELECT EXISTS(${H}) as e`),n=await j(v,"select");return Boolean(n?.[0]?.e)},async doesntExist(){return!await d.exists()},values(){return h().values()},raw(){return h().raw()},cancel(){try{h().cancel()}catch{}},whereRaw:W("whereRaw"),whereColumn:W("whereColumn"),orWhereColumn:W("orWhereColumn"),whereIn:W("whereIn"),orWhereIn:W("orWhereIn"),whereNotIn:W("whereNotIn"),orWhereNotIn:W("orWhereNotIn"),whereLike:W("whereLike"),whereILike:W("whereILike"),orWhereLike:W("orWhereLike"),orWhereILike:W("orWhereILike"),whereNotLike:W("whereNotLike"),whereNotILike:W("whereNotILike"),orWhereNotLike:W("orWhereNotLike"),orWhereNotILike:W("orWhereNotILike"),whereAny:W("whereAny"),whereAll:W("whereAll"),whereNone:W("whereNone"),whereNested:W("whereNested"),orWhereNested:W("orWhereNested"),whereDate:W("whereDate"),whereBetween:W("whereBetween"),whereNotBetween:W("whereNotBetween"),whereJsonContains:W("whereJsonContains"),whereJsonPath:W("whereJsonPath"),whereNull:W("whereNull"),whereNotNull:W("whereNotNull"),whereExists:W("whereExists"),whereJsonDoesntContain:W("whereJsonDoesntContain"),whereJsonContainsKey:W("whereJsonContainsKey"),whereJsonDoesntContainKey:W("whereJsonDoesntContainKey"),whereJsonLength:W("whereJsonLength"),join:W("join"),joinSub:W("joinSub"),innerJoin:W("innerJoin"),leftJoin:W("leftJoin"),leftJoinSub:W("leftJoinSub"),rightJoin:W("rightJoin"),crossJoin:W("crossJoin"),crossJoinSub:W("crossJoinSub"),groupBy:W("groupBy"),groupByRaw:W("groupByRaw"),having:W("having"),havingRaw:W("havingRaw"),addSelect:W("addSelect"),select:W("select"),selectAll:W("selectAll"),orderByDesc:W("orderByDesc"),inRandomOrder:W("inRandomOrder"),reorder:W("reorder"),orderByRaw:W("orderByRaw"),union:W("union"),unionAll:W("unionAll"),forPage:W("forPage"),selectAllRelations:W("selectAllRelations"),with:W("with"),value:W("value"),pluck:W("pluck"),cursorPaginate:W("cursorPaginate"),paginate:W("paginate"),simplePaginate:W("simplePaginate"),chunk:W("chunk"),chunkById:W("chunkById"),eachById:W("eachById"),avg:W("avg"),sum:W("sum"),max:W("max"),min:W("min"),find:W("find"),findOrFail:W("findOrFail"),findMany:W("findMany"),latest:W("latest"),oldest:W("oldest"),lazy:W("lazy"),lazyById:W("lazyById"),pipe:(v)=>v(d),when:W("when"),tap:()=>d,dump:()=>d,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>h().simple(),toText:()=>H,toParams:()=>[...N],withTimeout:()=>d,abort:()=>d,lockForUpdate:()=>d,sharedLock:()=>d,withCTE:()=>d,withRecursive:()=>d,cache:()=>d,clone:()=>d,withTrashed:()=>d,onlyTrashed:()=>d,scope:()=>d,get rows(){return[]},get row(){return}};return d}return P(w,q)},insertInto(G){let J,W="",F=[],R=f.dialect==="postgres",D=R?(w)=>`"${String(w).replace(/"/g,'""')}"`:I0(f.dialect)?(w)=>`\`${String(w).replace(/`/g,"``")}\``:(w)=>`"${String(w).replace(/"/g,'""')}"`,q=R?(w)=>`$${w+1}`:(w)=>"?";return{values(w){let A=Array.isArray(w)?w:[w],P=A.length;if(P===0)return J=$.unsafe("SELECT 1"),this;let H=A[0],N=Object.keys(H),S=N.length,h=P*S;if(F.length=h,P===1)if(!R){let d=D(N[0]),v="?";F[0]=H[N[0]];for(let n=1;n<S;n++)d+=`,${D(N[n])}`,v+=",?",F[n]=H[N[n]];W=`INSERT INTO ${D(G)}(${d})VALUES(${v})`}else{let d=N.map((v)=>D(v)).join(",");W=`INSERT INTO ${D(G)}(${d})VALUES(`;for(let v=0;v<S;v++){if(v>0)W+=",";W+=q(v),F[v]=H[N[v]]}W+=")"}else{let d=N.map((n)=>D(n)).join(",");W=`INSERT INTO ${D(G)}(${d})VALUES`;let v=0;for(let n=0;n<P;n++){let a=A[n];if(n===0)W+="(";else W+="),(";for(let u=0;u<S;u++){if(u>0)W+=",";W+=q(v),F[v++]=a[N[u]]}}W+=")"}if(!$._prepareStatement)J=$.unsafe(W,F);return this},returning(...w){let A=`${W} RETURNING ${w.join(", ")}`,P=$.unsafe(A,F),H=async()=>{let N=await j(P,"insert");return Array.isArray(N)?N[0]:N};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>E(P,A),execute:()=>j(P,"insert"),get:()=>j(P,"insert"),first:H,executeTakeFirst:H,async firstOrFail(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N},async executeTakeFirstOrThrow(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N}}},toSQL(){if(!J)J=$.unsafe(W,F);return E(J,W)},execute(){let w=f.hooks;if(!(w&&(w.onQueryStart||w.onQueryEnd||w.onQueryError||w.startSpan||w.beforeCreate||w.afterCreate||nX(w)))){let P=$._prepareStatement;if(P){let H=P(W);return F.length>0?H.run(...F):H.run()}}if(!J)J=$.unsafe(W,F);return j(J,"insert")},async executeTakeFirst(){if(!J)J=$.unsafe(W,F);return await j(J,"insert")},async executeTakeFirstOrThrow(){if(!J)J=$.unsafe(W,F);let w=await j(J,"insert");if(!w)throw Error("Insert failed");return w},returningAll(){let w=`${W} RETURNING *`,A=$.unsafe(w,F),P=async()=>{let H=await j(A,"insert");return Array.isArray(H)?H[0]:H};return{toSQL:()=>E(A,w),execute:()=>j(A,"insert"),get:()=>j(A,"insert"),first:P,executeTakeFirst:P,async firstOrFail(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H}}}}},updateTable(G){let J,W=[],F=(D)=>{let q=String(D);if(I0(f.dialect))return`\`${q.replace(/`/g,"``")}\``;return`"${q.replace(/"/g,'""')}"`},R=`UPDATE ${F(String(G))}`;return{set(D){let q=Object.keys(D),w=q.length,A=Array.from({length:w});for(let P=0;P<w;P++){let H=q[P];A[P]=`${F(H)} = ${l(P+1)}`,W.push(D[H])}return R=`${R} SET ${A.join(", ")}`,J=$.unsafe(R,W),this},where(D,q,w){let A=()=>o.WHERE.test(R)?"AND":"WHERE";if(typeof D==="string"&&q!==void 0){let P=W.length+1;return R=`${R} ${A()} ${F(D)} ${q} ${l(P)}`,W.push(w),J=$.unsafe(R,W),this}if(Array.isArray(D)){let[P,H,N]=D,S=W.length+1;return R=`${R} ${A()} ${F(String(P))} ${String(H)} ${l(S)}`,W.push(N),J=$.unsafe(R,W),this}if(D&&typeof D==="object"&&!("raw"in D)){let P=Object.keys(D),H=P.length,N=W.length,S=Array.from({length:H});for(let h=0;h<H;h++)S[h]=`${F(P[h])} = ${l(N+h+1)}`,W.push(D[P[h]]);R=`${R} ${A()} ${S.join(" AND ")}`,J=$.unsafe(R,W)}return this},returning(...D){let q=`${R} RETURNING ${D.join(", ")}`,w=W.length>0?$.unsafe(q,W):$.unsafe(q),A=async()=>{let H=await j(w,"update");return Array.isArray(H)?H[0]:H},P={where:()=>P,andWhere:()=>P,orWhere:()=>P,orderBy:()=>P,limit:()=>P,offset:()=>P,toSQL:()=>E(w,q),execute:()=>j(w,"update"),get:()=>j(w,"update"),first:A,executeTakeFirst:A,async firstOrFail(){let H=await A();if(!H)throw Error("Update with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await A();if(!H)throw Error("Update with RETURNING returned no rows");return H}};return P},toSQL(){if(!J)J=W.length>0?$.unsafe(R,W):$.unsafe(R);return E(J,R)},execute(){return j(J,"update")},async executeTakeFirst(){return{numUpdatedRows:await j(J,"update")}},async executeTakeFirstOrThrow(){let D=await j(J,"update");if(D===0)throw Error("No rows updated");return{numUpdatedRows:D}},returningAll(){let D=`${R} RETURNING *`,q=W.length>0?$.unsafe(D,W):$.unsafe(D);return{toSQL:()=>E(q,D),execute:()=>j(q,"update"),async executeTakeFirst(){let w=await j(q,"update");return Array.isArray(w)?w[0]:w},async executeTakeFirstOrThrow(){let w=await j(q,"update"),A=Array.isArray(w)?w[0]:w;if(!A)throw Error("Update with RETURNING failed");return A}}}}},deleteFrom(G){let J=(P)=>{let H=String(P);if(I0(f.dialect))return`\`${H.replace(/`/g,"``")}\``;return`"${H.replace(/"/g,'""')}"`},F=`DELETE FROM ${J(String(G))}`,R=null,D=[],q=null,w=()=>o.WHERE.test(F)?"AND":"WHERE",A=()=>{if(R===null)R=D.length>0?$.unsafe(F,D):$.unsafe(F);return R};return{where(P,H,N){if(q=P,typeof P==="string"&&H!==void 0){let S=D.length+1;return F+=` ${w()} ${J(P)} ${H} ${l(S)}`,D.push(N),R=null,this}if(Array.isArray(P)){let[S,h,d]=P,v=D.length+1;return F+=` ${w()} ${J(String(S))} ${h} ${l(v)}`,D.push(d),R=null,this}if(P&&typeof P==="object"&&!("raw"in P)){let S=Object.keys(P),h=[];for(let d of S){let v=D.length+1;h.push(`${J(d)} = ${l(v)}`),D.push(P[d])}return F+=` ${w()} ${h.join(" AND ")}`,R=null,this}return R=Q({},A(),P),this},returning(...P){let H=`${F} RETURNING ${P.join(", ")}`,N=D.length>0?$.unsafe(H,D):$.unsafe(H),S=async()=>{let d=await j(N,"delete");return Array.isArray(d)?d[0]:d},h={where:()=>h,andWhere:()=>h,orWhere:()=>h,orderBy:()=>h,limit:()=>h,offset:()=>h,toSQL:()=>E(N,H),execute:()=>j(N,"delete"),get:()=>j(N,"delete"),first:S,executeTakeFirst:S,async firstOrFail(){let d=await S();if(!d)throw Error("Delete with RETURNING returned no rows");return d},async executeTakeFirstOrThrow(){let d=await S();if(!d)throw Error("Delete with RETURNING returned no rows");return d}};return h},toSQL(){return E(A(),F)},async execute(){try{await f.hooks?.beforeDelete?.({table:String(G),where:q})}catch(H){throw H}let P=await j(A(),"delete");try{await f.hooks?.afterDelete?.({table:String(G),where:q,result:P})}catch{}return P},async executeTakeFirst(){return{numDeletedRows:await j(A(),"delete")}},async executeTakeFirstOrThrow(){let P=await j(A(),"delete");if(P===0)throw Error("No rows deleted");return{numDeletedRows:P}},returningAll(){let P=`${F} RETURNING *`,H=D.length>0?$.unsafe(P,D):$.unsafe(P);return{toSQL:()=>E(H,P),execute:()=>j(H,"delete"),async executeTakeFirst(){let N=await j(H,"delete");return Array.isArray(N)?N[0]:N},async executeTakeFirstOrThrow(){let N=await j(H,"delete"),S=Array.isArray(N)?N[0]:N;if(!S)throw Error("Delete with RETURNING failed");return S}}}}},table(G){let J=this;return{insert(W){return J.insertInto(G).values(W)},update(W){return J.updateTable(G).set(W)},delete(){return J.deleteFrom(G)},select(...W){if(W.length===0)return J.selectFrom(G);return J.select(G,...W)}}},sql:$,raw(G,...J){return $(G,...J)},simple(G,...J){return $(G,...J).simple()},async advisoryLock(G){if(f.dialect==="postgres"){let J=String(G),W=7;for(let D=0;D<J.length;D++)W=W*31+J.charCodeAt(D)|0;let F=typeof G==="number"?G:Math.abs(W),R=c`SELECT pg_advisory_lock(${F})`;await j(R,"raw");return}if(I0(f.dialect)){let J=`bqb:${String(G)}`,W=c`SELECT GET_LOCK(${J}, -1) AS ok`;await j(W,"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(f.dialect==="postgres"){let J=String(G),W=7;for(let q=0;q<J.length;q++)W=W*31+J.charCodeAt(q)|0;let F=typeof G==="number"?G:Math.abs(W),R=c`SELECT pg_try_advisory_lock(${F}) as ok`,D=await j(R,"raw");return Boolean(D?.[0]?.ok)}if(I0(f.dialect)){let J=`bqb:${String(G)}`,W=c`SELECT GET_LOCK(${J}, 0) AS ok`,F=await j(W,"raw");return Number(F?.[0]?.ok)===1}return!1},unsafe(G,J){return $.unsafe(G,J)},file(G,J){return c.file(G,J)},async reserve(){let G=await c.reserve(),J=H0({sql:G,meta:Z,schema:Y});return J.release=()=>G.release(),J},async close(G){await c.close(G)},async listen(G,J){},async unlisten(G){},async notify(G,J){},async copyTo(G,J){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(G,J,W){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let G=c`SELECT 1`;return await j(G,"select"),!0}catch{return!1}},async waitForReady(G){let J=Math.max(1,G?.attempts??10),W=Math.max(10,G?.delayMs??100);for(let F=0;F<J;F++){if(await this.ping())return;await new Promise((R)=>setTimeout(R,W))}throw Error("Database not ready after waiting")},async transaction(G,J){let F={...X?.txDefaults,...J},R=X?.sql??c,D=X?.inTransaction===!0,q=D&&typeof R?.savepoint==="function"?"savepoint":"begin",w=async(H)=>{F.logger?.({type:"start",attempt:H});let N=Date.now();return await R[q](async(S)=>{let h=H0({sql:S,meta:Z,schema:Y,inTransaction:!0});if(F?.isolation&&!D){let n=F.isolation,a=n==="read committed"?"READ COMMITTED":n==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(f.dialect==="postgres")await S.unsafe(`SET TRANSACTION ISOLATION LEVEL ${a}`);else if(I0(f.dialect))await S.unsafe(`SET TRANSACTION ISOLATION LEVEL ${a}`);else if(n!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${n}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(F?.readOnly)if(f.dialect==="postgres")await S.unsafe("SET TRANSACTION READ ONLY");else if(I0(f.dialect))await S.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let d=await G(h),v=Date.now()-N;return F.logger?.({type:"commit",attempt:H,durationMs:v}),d})},A=Math.max(0,F?.retries??0),P=0;for(;;)try{let H=await w(P+1);return F?.afterCommit?.(),H}catch(H){let N=f_(H)||g_(H,F.sqlStates);if(P<A&&N){P++,F?.onRetry?.(P,H);let S=c_(P,F.backoff);if(S>0)await d_(S);continue}try{F.onRollback?.(H)}catch{}try{F.afterRollback?.()}catch{}throw H}},async savepoint(G){let J=$;if(!J||typeof J.savepoint!=="function")throw Error("savepoint() must be called inside a transaction");return await J.savepoint(async(W)=>{let F=H0({sql:W,meta:Z,schema:Y});return await G(F)})},async beginDistributed(G,J){return await(X?.sql??c).beginDistributed(G,async(R)=>{let D=H0({sql:R,meta:Z,schema:Y});return await J(D)})},async commitDistributed(G){await c.commitDistributed(G)},async rollbackDistributed(G){await c.rollbackDistributed(G)},setTransactionDefaults(G){X={...X,txDefaults:{...X?.txDefaults,...G}}},transactional(G,J){return(...W)=>{return this.transaction((F)=>G(F,...W),J)}},async insertOrIgnore(G,J){let W=Array.isArray(J)?J:[J];if(!W.length)return;let{colsSql:F,valuesSql:R,params:D}=X8(W),q=t0(String(G)),w=I0(f.dialect)?`INSERT IGNORE INTO ${q} (${F}) VALUES ${R}`:`INSERT INTO ${q} (${F}) VALUES ${R} ON CONFLICT DO NOTHING`;return c.unsafe(w,D).execute()},async insertGetId(G,J,W="id"){let{colsSql:F,valuesSql:R,params:D}=X8([J]),q=t0(String(G));if(I0(f.dialect)){await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();let[A]=await c.unsafe("SELECT LAST_INSERT_ID() as id").execute();return A?.id}if(f.dialect==="sqlite"){let A=await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();if(A?.lastInsertRowid!=null)return A.lastInsertRowid;let[P]=await c.unsafe("SELECT last_insert_rowid() as id").execute();return P?.id}let[w]=await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R} RETURNING ${t0(String(W))} as id`,D).execute();return w?.id},async updateOrInsert(G,J,W){let F=t0(String(G)),R=Object.keys(J),D=1,q=R.map((S)=>`${t0(S)} = ${l(D++)}`).join(" AND "),w=R.map((S)=>J[S]);if((await c.unsafe(`SELECT 1 FROM ${F} WHERE ${q} LIMIT 1`,w).execute()).length){let S=Object.keys(W),h=1,d=S.map((a)=>`${t0(a)} = ${l(h++)}`).join(", "),v=R.map((a)=>`${t0(a)} = ${l(h++)}`).join(" AND "),n=[...S.map((a)=>W[a]),...R.map((a)=>J[a])];return await c.unsafe(`UPDATE ${F} SET ${d} WHERE ${v}`,n).execute(),!0}let{colsSql:P,valuesSql:H,params:N}=X8([{...J,...W}]);return await c.unsafe(`INSERT INTO ${F} (${P}) VALUES ${H}`,N).execute(),!0},async upsert(G,J,W,F){let R=W.map((d)=>String(d)),D=(F??[]).map((d)=>String(d)),q=J;if(!q.length)return;let{colsSql:w,valuesSql:A,params:P}=X8(q),H=t0(String(G)),N=`INSERT INTO ${H} (${w}) VALUES ${A}`;if(I0(f.dialect)){if(D.length===0)return c.unsafe(`INSERT IGNORE INTO ${H} (${w}) VALUES ${A}`,P).execute();let d=D.map((v)=>`${t0(v)} = VALUES(${t0(v)})`).join(", ");return c.unsafe(`${N} ON DUPLICATE KEY UPDATE ${d}`,P).execute()}let S=R.map(t0).join(", ");if(D.length===0)return c.unsafe(`${N} ON CONFLICT (${S}) DO NOTHING`,P).execute();let h=D.map((d)=>`${t0(d)} = EXCLUDED.${t0(d)}`).join(", ");return c.unsafe(`${N} ON CONFLICT (${S}) DO UPDATE SET ${h}`,P).execute()},async save(G,J){let W=Z?.primaryKeys[String(G)]??"id",F=J[W];if(F!=null)if(await this.selectFrom(G).find(F)){await this.updateTable(G).set(J).where({[W]:F}).execute();let D=await this.selectFrom(G).find(F);if(!D)throw Error("save() failed to retrieve updated row");return D}else return await this.create(G,J);return await this.create(G,J)},async remove(G,J){return await this.deleteFrom(G).where({id:J}).execute()},async find(G,J){return await this.selectFrom(G).find(J)},async findOrFail(G,J){return await this.selectFrom(G).findOrFail(J)},async findMany(G,J){return await this.selectFrom(G).findMany(J)},async latest(G,J){return await this.selectFrom(G).latest(J).first()},async oldest(G,J){return await this.selectFrom(G).oldest(J).first()},skip(G,J){return this.selectFrom(G).offset(J)},async rawQuery(G){let J=Date.now();try{f.hooks?.onQueryStart?.({sql:G,kind:"raw"});let W=await c.unsafe(G);return f.hooks?.onQueryEnd?.({sql:G,durationMs:Date.now()-J,kind:"raw"}),W}catch(W){throw f.hooks?.onQueryError?.({sql:G,error:W,durationMs:Date.now()-J,kind:"raw"}),W}},async create(G,J){let W=Z?.primaryKeys[String(G)]??"id";try{await f.hooks?.beforeCreate?.({table:String(G),data:J})}catch(F){throw F}if(f.dialect==="postgres"){let F=c`INSERT INTO ${c(String(G))} ${c(J)} RETURNING ${c(String(W))} as id`,[R]=await F.execute();if(console.log("resultId",R),!R?.id)throw console.error(`create() failed to get insert ID for table ${String(G)}`),console.error("Inserted values:",J),Error(`create() failed to get insert ID for table ${String(G)}`);let D=await this.selectFrom(G).find(R.id);if(!D)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`);try{await f.hooks?.afterCreate?.({table:String(G),data:J,result:D})}catch{}return D}else{let F=await this.insertGetId(G,J,W);if(F==null)throw Error(`create() failed to get insert ID for table ${String(G)}`);let R=await this.selectFrom(G).find(F);if(!R)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`);try{await f.hooks?.afterCreate?.({table:String(G),data:J,result:R})}catch{}return R}},async createMany(G,J){if(!J?.length)return;let W=J[0],F=Object.keys(W),R=F.length,D=J.length,q=Array.from({length:D*R}),w=I0(f.dialect)?(H)=>`\`${String(H).replace(/`/g,"``")}\``:(H)=>`"${String(H).replace(/"/g,'""')}"`,A=`INSERT INTO ${w(String(G))}(${F.map(w).join(",")})VALUES`,P=0;for(let H=0;H<D;H++){if(H>0)A+=",";A+="(";let N=J[H];for(let S=0;S<R;S++){if(S>0)A+=",";A+=l(P+1),q[P++]=N[F[S]]}A+=")"}return $.unsafe(A,q).execute()},async insertMany(G,J){if(!J?.length)return;let W=J[0],F=Object.keys(W),R=F.length,D=J.length,q=D*R,w=Array(q),A=f.dialect==="postgres",P;if(!A){let S=Array(R);for(let h=0;h<R;h++)S[h]="?";P=`(${S.join(",")})`}else P="";let H=Array(D+2);H[0]=`INSERT INTO ${G}(${F.join(",")})VALUES`;let N=0;if(!A){for(let S=0;S<D;S++){let h=J[S];H[S+1]=P;for(let d=0;d<R;d++)w[N++]=h[F[d]]}return $.unsafe(H[0]+H.slice(1,D+1).join(","),w).execute()}for(let S=0;S<D;S++){let h=J[S],d=Array(R);for(let v=0;v<R;v++)d[v]=`$${N+1}`,w[N++]=h[F[v]];H[S+1]=`(${d.join(",")})`}return $.unsafe(H[0]+H.slice(1,D+1).join(","),w).execute()},async updateMany(G,J,W){let F=Object.keys(W),R=F.length;if(R===0)return 0;let D=[],q=Array.from({length:R});for(let A=0;A<R;A++)q[A]=`${F[A]}=${l(A+1)}`,D.push(W[F[A]]);let w=`UPDATE ${G} SET ${q.join(",")}`;if(Array.isArray(J))w+=` WHERE ${J[0]}${J[1]}${l(D.length+1)}`,D.push(J[2]);else if(J&&typeof J==="object"&&!("raw"in J)){let A=Object.keys(J),P=A.length;if(P>0){let H=D.length,N=Array.from({length:P});for(let S=0;S<P;S++)N[S]=`${A[S]}=${l(H+S+1)}`,D.push(J[A[S]]);w+=` WHERE ${N.join(" AND ")}`}}return $.unsafe(w,D).execute()},async deleteMany(G,J){if(!Array.isArray(J)||J.length===0)return 0;let W=Z?.primaryKeys[String(G)]??"id",F=J.length;if(f.dialect==="postgres"){let D=Array(F);for(let q=0;q<F;q++)D[q]=`$${q+1}`;return $.unsafe(`DELETE FROM ${G} WHERE ${W} IN (${D.join(",")})`,J).execute()}let R=Array(F);for(let D=0;D<F;D++)R[D]="?";return $.unsafe(`DELETE FROM ${G} WHERE ${W} IN (${R.join(",")})`,J).execute()},async firstOrCreate(G,J,W){let F=await this.selectFrom(G).where(J).first();if(F)return F;return await this.create(G,{...J,...W})},async updateOrCreate(G,J,W){let F=await this.selectFrom(G).where(J).first();if(F){await this.updateTable(G).set(W).where(J).execute();let R=Z?.primaryKeys[String(G)]??"id",D=F[R],q=D!=null?await this.selectFrom(G).find(D):await this.selectFrom(G).where(J).first();if(!q)throw Error("updateOrCreate() failed to retrieve updated row");return q}return await this.create(G,{...J,...W})},async count(G,J){let W=J?c(String(J)):c`*`,F=c`SELECT COUNT(${W}) as c FROM ${c(String(G))}`,[R]=await F.execute();return Number(R?.c??0)},async sum(G,J){let W=c`SELECT SUM(${c(String(J))}) as s FROM ${c(String(G))}`,[F]=await W.execute();return Number(F?.s??0)},async avg(G,J){let W=c`SELECT AVG(${c(String(J))}) as a FROM ${c(String(G))}`,[F]=await W.execute();return Number(F?.a??0)},async min(G,J){let W=c`SELECT MIN(${c(String(J))}) as m FROM ${c(String(G))}`,[F]=await W.execute();return F?.m},async max(G,J){let W=c`SELECT MAX(${c(String(J))}) as m FROM ${c(String(G))}`,[F]=await W.execute();return F?.m},getRelationships(G){if(!Z?.relations)return{};let J=Z.relations[G];if(!J)return{};let W={};for(let[F,R]of Object.entries(J))if(R&&typeof R==="object"&&Object.keys(R).length>0)W[F]=R;return W},hasRelationship(G,J){if(!Z?.relations)return!1;let W=Z.relations[G];if(!W)return!1;return Object.values(W).some((F)=>F&&typeof F==="object"&&(J in F))},getRelationshipType(G,J){if(!Z?.relations)return null;let W=Z.relations[G];if(!W)return null;for(let[F,R]of Object.entries(W))if(R&&typeof R==="object"&&J in R)return F;return null},getRelationshipTarget(G,J){if(!Z?.relations)return null;let W=Z.relations[G];if(!W)return null;for(let[F,R]of Object.entries(W))if(R&&typeof R==="object"&&J in R){let D=R[J];if(typeof D==="string")return Z.modelToTable[D]||D;else if(D&&typeof D==="object"){if("model"in D)return Z.modelToTable[D.model]||D.model;if("target"in D)return Z.modelToTable[D.target]||D.target}}return null}}}function m_(){A$.clear()}function u_(X){A$.setMaxSize(X)}var o,q1,P1,A$,rX,n_=500,_Z=e(()=>{c0(),$X(),o={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},q1=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]),P1=new Set,A$=new QU,rX=new Map});async function HG(){console.log("-- Clearing query cache..."),m_(),console.log("-- \u2713 Query cache cleared")}async function CG(){console.log("-- Query Cache Information"),console.log(),console.log("The query cache is an LRU (Least Recently Used) cache with TTL support."),console.log(),console.log("Configuration:"),console.log(" - Default max size: 100 entries"),console.log(" - Default TTL: 60 seconds (60000ms)"),console.log(" - Eviction: LRU when cache is full"),console.log(),console.log("Usage:"),console.log(' qb.selectFrom("users").cache().get() // Cache for 60s'),console.log(' qb.selectFrom("users").cache(5000).get() // Cache for 5s'),console.log(),console.log("Configuration:"),console.log(" clearQueryCache() // Clear all cached queries"),console.log(" setQueryCacheMaxSize(500) // Set max cache size"),console.log(),console.log("Commands:"),console.log(" qb cache:clear // Clear the cache"),console.log(" qb cache:config --size 500 // Configure cache size")}async function wG(X={}){if(console.log("-- Configuring query cache..."),console.log(),X.size!==void 0){let $=Number(X.size);if(Number.isNaN($)||$<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");u_($),console.log(`-- \u2713 Cache max size set to: ${$}`)}else console.log("-- No configuration changes specified"),console.log("-- Available options:"),console.log("-- --size <n> Set maximum cache size (default: 100)"),console.log(),console.log("-- Example: qb cache:config --size 500")}var i_=e(()=>{_Z()});async function s_(){console.log("-- Query Builder Interactive Console"),console.log("-- Type .help for available commands"),console.log("-- Type .exit or press Ctrl+C to quit"),console.log();let X=H0(),$=l_({input:Z8.stdin,output:Z8.stdout,prompt:"qb> "}),Z="",Y=!1,U=`
79
79
  Available Commands:
80
80
  .help Show this help message
81
81
  .exit Exit the console
@@ -162,24 +162,24 @@ Goodbye!`),Z8.exit(0)}),$.prompt()}async function TG(){return s_()}var o_=e(()=>
162
162
  FROM information_schema.statistics
163
163
  WHERE table_name = ?
164
164
  AND table_schema = DATABASE()
165
- `,[Q]);E=Number(G[0]?.count||0)}else if(X==="sqlite")j=(await Z.unsafe(`PRAGMA table_info(${Q})`)).length,E=(await Z.unsafe(`PRAGMA index_list(${Q})`)).length;Y.push({name:Q,rowCount:z,columns:j,indexes:E})}catch(L){console.error(`-- Error getting info for table ${Q}:`,L)}let _=Y.reduce((Q,L)=>Q+L.rowCount,0);if(console.log(`-- Total Tables: ${Y.length}`),console.log(`-- Total Rows: ${_.toLocaleString()}`),console.log(),Y.length>0){console.log("Tables:"),console.log();let Q=Math.max(...Y.map((j)=>j.name.length)),L=Q+2,z="Table".padEnd(L)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(z),console.log("-".repeat(z.length));for(let j of Y){let E=j.name.padEnd(Q+2),V=j.rowCount.toLocaleString().padStart(12),G=(j.columns||0).toString().padStart(10),J=(j.indexes||0).toString().padStart(10);console.log(`${E}${V}${G}${J}`)}}else console.log("-- No tables found");return{dialect:X,database:$,tables:Y,totalTables:Y.length,totalRows:_}}catch(Z){throw console.error("-- Failed to get database info:",Z),Z}}async function xG(){return e_()}var XQ=e(()=>{c0(),v0()});async function yG(X={}){let $=X.dialect||SY.env.DB_DIALECT||"postgres",Z=X.aggressive||!1;if(X.verbose)console.log(`Optimizing ${$} database${Z?" (aggressive mode)":""}...`);try{if($==="postgres"){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);if(Z)await p`VACUUM FULL ANALYZE ${p(Y)}`;else await p`VACUUM ANALYZE ${p(Y)}`}else{if(X.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(Z)await p`VACUUM FULL`,await p`ANALYZE`;else await p`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(I0($)){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Optimizing table: ${Y}`);await p`OPTIMIZE TABLE ${p(Y)}`,await p`ANALYZE TABLE ${p(Y)}`}else{let Y=SY.env.DB_NAME||"test",U=await p`
165
+ `,[Q]);E=Number(G[0]?.count||0)}else if(X==="sqlite")j=(await Z.unsafe(`PRAGMA table_info(${Q})`)).length,E=(await Z.unsafe(`PRAGMA index_list(${Q})`)).length;Y.push({name:Q,rowCount:z,columns:j,indexes:E})}catch(L){console.error(`-- Error getting info for table ${Q}:`,L)}let _=Y.reduce((Q,L)=>Q+L.rowCount,0);if(console.log(`-- Total Tables: ${Y.length}`),console.log(`-- Total Rows: ${_.toLocaleString()}`),console.log(),Y.length>0){console.log("Tables:"),console.log();let Q=Math.max(...Y.map((j)=>j.name.length)),L=Q+2,z="Table".padEnd(L)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(z),console.log("-".repeat(z.length));for(let j of Y){let E=j.name.padEnd(Q+2),V=j.rowCount.toLocaleString().padStart(12),G=(j.columns||0).toString().padStart(10),J=(j.indexes||0).toString().padStart(10);console.log(`${E}${V}${G}${J}`)}}else console.log("-- No tables found");return{dialect:X,database:$,tables:Y,totalTables:Y.length,totalRows:_}}catch(Z){throw console.error("-- Failed to get database info:",Z),Z}}async function xG(){return e_()}var XQ=e(()=>{c0(),v0()});async function yG(X={}){let $=X.dialect||SY.env.DB_DIALECT||"postgres",Z=X.aggressive||!1;if(X.verbose)console.log(`Optimizing ${$} database${Z?" (aggressive mode)":""}...`);try{if($==="postgres"){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);if(Z)await c`VACUUM FULL ANALYZE ${c(Y)}`;else await c`VACUUM ANALYZE ${c(Y)}`}else{if(X.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(Z)await c`VACUUM FULL`,await c`ANALYZE`;else await c`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(I0($)){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Optimizing table: ${Y}`);await c`OPTIMIZE TABLE ${c(Y)}`,await c`ANALYZE TABLE ${c(Y)}`}else{let Y=SY.env.DB_NAME||"test",U=await c`
166
166
  SELECT table_name
167
167
  FROM information_schema.tables
168
168
  WHERE table_schema = ${Y}
169
- `;for(let _ of U){let Q=_.table_name||_.TABLE_NAME;if(X.verbose)console.log(`Optimizing table: ${Q}`);await p`OPTIMIZE TABLE ${p(Q)}`,await p`ANALYZE TABLE ${p(Q)}`}}console.log("\u2713 MySQL optimization complete")}else if($==="sqlite"){if(X.verbose)console.log("Running VACUUM on SQLite database...");if(await p`VACUUM`,X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);await p`ANALYZE ${p(Y)}`}else await p`ANALYZE`;if(Z){if(X.verbose)console.log("Running aggressive SQLite optimizations...");await p`PRAGMA optimize`,await p`PRAGMA wal_checkpoint(TRUNCATE)`}console.log("\u2713 SQLite optimization complete")}else console.error(`Unsupported dialect: ${$}`)}catch(Y){throw console.error("Error optimizing database:",Y.message),Y}}var $Q=e(()=>{c0(),$X()});async function vG(X={}){let $=X.dialect||AY.env.DB_DIALECT||"postgres";if(X.verbose)console.log(`Wiping all tables from ${$} database...`);try{let Z=[];if($==="postgres")Z=(await p`
169
+ `;for(let _ of U){let Q=_.table_name||_.TABLE_NAME;if(X.verbose)console.log(`Optimizing table: ${Q}`);await c`OPTIMIZE TABLE ${c(Q)}`,await c`ANALYZE TABLE ${c(Q)}`}}console.log("\u2713 MySQL optimization complete")}else if($==="sqlite"){if(X.verbose)console.log("Running VACUUM on SQLite database...");if(await c`VACUUM`,X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);await c`ANALYZE ${c(Y)}`}else await c`ANALYZE`;if(Z){if(X.verbose)console.log("Running aggressive SQLite optimizations...");await c`PRAGMA optimize`,await c`PRAGMA wal_checkpoint(TRUNCATE)`}console.log("\u2713 SQLite optimization complete")}else console.error(`Unsupported dialect: ${$}`)}catch(Y){throw console.error("Error optimizing database:",Y.message),Y}}var $Q=e(()=>{c0(),$X()});async function vG(X={}){let $=X.dialect||AY.env.DB_DIALECT||"postgres";if(X.verbose)console.log(`Wiping all tables from ${$} database...`);try{let Z=[];if($==="postgres")Z=(await c`
170
170
  SELECT tablename
171
171
  FROM pg_tables
172
172
  WHERE schemaname = 'public'
173
- `).map((U)=>U.tablename);else if(I0($)){let Y=AY.env.DB_NAME||"test";Z=(await p`
173
+ `).map((U)=>U.tablename);else if(I0($)){let Y=AY.env.DB_NAME||"test";Z=(await c`
174
174
  SELECT table_name
175
175
  FROM information_schema.tables
176
176
  WHERE table_schema = ${Y}
177
- `).map((_)=>_.table_name||_.TABLE_NAME)}else if($==="sqlite")Z=(await p`
177
+ `).map((_)=>_.table_name||_.TABLE_NAME)}else if($==="sqlite")Z=(await c`
178
178
  SELECT name
179
179
  FROM sqlite_master
180
180
  WHERE type = 'table'
181
181
  AND name NOT LIKE 'sqlite_%'
182
- `).map((U)=>U.name);if(Z.length===0){console.log("No tables found to drop.");return}if(X.verbose)console.log(`Found ${Z.length} tables: ${Z.join(", ")}`);if($==="postgres")for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await p`DROP TABLE IF EXISTS ${p(Y)} CASCADE`}else if(I0($)){await p`SET FOREIGN_KEY_CHECKS = 0`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await p`DROP TABLE IF EXISTS ${p(Y)}`}await p`SET FOREIGN_KEY_CHECKS = 1`}else if($==="sqlite"){await p`PRAGMA foreign_keys = OFF`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await p`DROP TABLE IF EXISTS ${p(Y)}`}await p`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${Z.length} tables`)}catch(Z){throw console.error("Error wiping database:",Z.message),Z}}var ZQ=e(()=>{c0(),$X()});async function bG(X){let Y=await(H0().raw([X]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(Y,null,2)),Y}var YQ=e(()=>{v0()});async function fG(X,$={}){let Z=H0(),Y=$.params?JSON.parse($.params):void 0,U=await Z.file(X,Y);return console.log(JSON.stringify(U)),U}var UQ=e(()=>{v0()});async function _Q(X,$={}){let Z=f.dialect||"postgres",Y=$.verbose??!0;if(Y)console.log(`-- Inspecting table: ${X}`),console.log(`-- Dialect: ${Z}`),console.log();try{let U=H0(),_=[],Q=[],L=await U.unsafe(`SELECT COUNT(*) as count FROM ${X}`),z=Number(L[0]?.count||0);if(Z==="postgres"){let j=await U.unsafe(`
182
+ `).map((U)=>U.name);if(Z.length===0){console.log("No tables found to drop.");return}if(X.verbose)console.log(`Found ${Z.length} tables: ${Z.join(", ")}`);if($==="postgres")for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)} CASCADE`}else if(I0($)){await c`SET FOREIGN_KEY_CHECKS = 0`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)}`}await c`SET FOREIGN_KEY_CHECKS = 1`}else if($==="sqlite"){await c`PRAGMA foreign_keys = OFF`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)}`}await c`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${Z.length} tables`)}catch(Z){throw console.error("Error wiping database:",Z.message),Z}}var ZQ=e(()=>{c0(),$X()});async function bG(X){let Y=await(H0().raw([X]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(Y,null,2)),Y}var YQ=e(()=>{v0()});async function fG(X,$={}){let Z=H0(),Y=$.params?JSON.parse($.params):void 0,U=await Z.file(X,Y);return console.log(JSON.stringify(U)),U}var UQ=e(()=>{v0()});async function _Q(X,$={}){let Z=f.dialect||"postgres",Y=$.verbose??!0;if(Y)console.log(`-- Inspecting table: ${X}`),console.log(`-- Dialect: ${Z}`),console.log();try{let U=H0(),_=[],Q=[],L=await U.unsafe(`SELECT COUNT(*) as count FROM ${X}`),z=Number(L[0]?.count||0);if(Z==="postgres"){let j=await U.unsafe(`
183
183
  SELECT
184
184
  c.column_name,
185
185
  c.data_type,
@@ -346,7 +346,7 @@ export default model
346
346
  \uD83D\uDD0D Scopes (${Object.keys(z.scopes).length}):`);for(let E of Object.keys(z.scopes))console.log(` \u2022 ${E}()`)}if(z.hooks&&z.hooks.length>0){console.log(`
347
347
  \uD83E\uDE9D Hooks (${z.hooks.length}):`);for(let E of z.hooks)console.log(` \u2022 ${E}`)}if(z.indexes&&z.indexes.length>0){console.log(`
348
348
  \uD83D\uDCC7 Indexes (${z.indexes.length}):`);for(let E of z.indexes){let V=Array.isArray(E.columns)?E.columns.join(", "):E.columns,G=E.unique?"(unique)":"";console.log(` \u2022 ${E.name||"unnamed"}: [${V}] ${G}`.trim())}}return console.log(),z}catch(Y){throw console.error(`Error loading model "${X}":`,Y.message),Y}}var rQ=()=>{};async function jF(){let $=await H0().ping();return console.log($?"OK":"NOT READY"),$}var aQ=e(()=>{v0()});async function FF(X,$={}){let Z=[];try{let Y=eQ(X),U=[];if(Y.isDirectory())U=tQ(X).filter((z)=>bY(z)===".sql").map((z)=>Xz(X,z));else if(Y.isFile()&&bY(X)===".sql")U=[X];else return console.error("Path must be a .sql file or directory containing .sql files"),Z;if(U.length===0)return console.log("No .sql files found"),Z;if($.verbose)console.log(`Analyzing ${U.length} SQL file(s)...
349
- `);for(let L of U)try{let z=vY(L,"utf8").trim();if(!z){if($.verbose)console.log(`\u2298 ${L}: empty file`);continue}if($.verbose)console.log(`\uD83D\uDCC4 ${L}`),console.log(` Query: ${z.substring(0,60)}${z.length>60?"...":""}`);let j=await p`EXPLAIN ${p.unsafe(z)}`;if(Z.push({file:L,query:z,plan:Array.isArray(j)?j:[j]}),$.verbose&&!$.json){if(console.log(" Plan:"),Array.isArray(j))for(let E of j)if(typeof E==="string")console.log(` ${E}`);else if(E["QUERY PLAN"])console.log(` ${E["QUERY PLAN"]}`);else if(E.plan)console.log(` ${JSON.stringify(E.plan)}`);else console.log(` ${JSON.stringify(E)}`);console.log()}}catch(z){if(Z.push({file:L,query:vY(L,"utf8").trim(),plan:[],error:z.message}),$.verbose)console.log(` \u2717 Error: ${z.message}
349
+ `);for(let L of U)try{let z=vY(L,"utf8").trim();if(!z){if($.verbose)console.log(`\u2298 ${L}: empty file`);continue}if($.verbose)console.log(`\uD83D\uDCC4 ${L}`),console.log(` Query: ${z.substring(0,60)}${z.length>60?"...":""}`);let j=await c`EXPLAIN ${c.unsafe(z)}`;if(Z.push({file:L,query:z,plan:Array.isArray(j)?j:[j]}),$.verbose&&!$.json){if(console.log(" Plan:"),Array.isArray(j))for(let E of j)if(typeof E==="string")console.log(` ${E}`);else if(E["QUERY PLAN"])console.log(` ${E["QUERY PLAN"]}`);else if(E.plan)console.log(` ${JSON.stringify(E.plan)}`);else console.log(` ${JSON.stringify(E)}`);console.log()}}catch(z){if(Z.push({file:L,query:vY(L,"utf8").trim(),plan:[],error:z.message}),$.verbose)console.log(` \u2717 Error: ${z.message}
350
350
  `)}let _=Z.filter((L)=>!L.error).length,Q=Z.filter((L)=>L.error).length;if($.verbose)console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`Summary: ${_} successful, ${Q} failed`);if($.json)console.log(JSON.stringify(Z,null,2));return Z}catch(Y){throw console.error("Error explaining queries:",Y.message),Y}}var $z=e(()=>{$X()});async function VF(X={}){let $=X.dir||Yz(Uz.cwd(),"app/Models"),Z=X.format||"mermaid";try{let Y=await pX({modelsDir:$});if(!Y||Object.keys(Y).length===0)return console.error("No models found"),"";let U="";if(Z==="mermaid")U=_z(Y);else if(Z==="dot")U=Qz(Y);else return console.error(`Unsupported format: ${Z}`),"";if(X.output)Zz(X.output,U,"utf8"),console.log(`\u2713 Diagram written to: ${X.output}`);else console.log(U);return U}catch(Y){throw console.error("Error generating diagram:",Y.message),Y}}function _z(X){let $=["erDiagram"];for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.attributes||{};$.push(` ${U} {`);for(let[Q,L]of Object.entries(_)){let z=L.type||"string",j=Y.primaryKey===Q?"PK":"",E=L.unique?"UK":"",V=[j,E].filter(Boolean).join(","),G=V?` "${V}"`:"";$.push(` ${z} ${Q}${G}`)}$.push(" }")}for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.relations||{};for(let[Q,L]of Object.entries(_)){let{type:z,model:j}=L,E=X[j]?.table||`${j?.toLowerCase()}s`||"unknown",V="";if(z==="hasOne")V="||--||";else if(z==="hasMany")V="||--o{";else if(z==="belongsTo")V="}o--||";else if(z==="belongsToMany"||z==="manyToMany")V="}o--o{";else V="||--||";$.push(` ${U} ${V} ${E} : "${Q}"`)}}return $.join(`
351
351
  `)}function Qz(X){let $=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.attributes||{},Q=[];for(let[z,j]of Object.entries(_)){let E=j.type||"string",V=Y.primaryKey===z?" (PK)":"",G=j.unique?" (UK)":"";Q.push(`${z}: ${E}${V}${G}`)}let L=`${Q.join("\\l")}\\l`;$.push(` ${U} [label="{${U}|${L}}"];`)}$.push("");for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.relations||{};for(let[Q,L]of Object.entries(_)){let{type:z,model:j}=L,E=X[j]?.table||`${j?.toLowerCase()}s`||"unknown",V="";if(z==="hasOne")V="arrowhead=none, arrowtail=normal";else if(z==="hasMany")V="arrowhead=crow, arrowtail=none";else if(z==="belongsTo")V="arrowhead=normal, arrowtail=none";else if(z==="belongsToMany"||z==="manyToMany")V="arrowhead=crow, arrowtail=crow";$.push(` ${U} -> ${E} [label="${Q}", ${V}];`)}}return $.push("}"),$.join(`
352
352
  `)}var zz=e(()=>{v0()});function zZ(X){let $=X;while($!==fY($)){if(c8(m9($,"package.json")))return $;$=fY($)}return h$.cwd()}async function AU(X){if(!c8(X))return console.log(`-- Seeders directory not found: ${X}`),[];let Z=jz(X).filter((U)=>(U.endsWith(".ts")||U.endsWith(".js"))&&U!=="index.ts"&&U!=="index.js"),Y=[];for(let U of Z){let _=m9(X,U);try{let Q=await import(_),L=Q.default||Q[Object.keys(Q)[0]];if(L&&typeof L==="function"){let z=new L;if(z&&typeof z.run==="function")Y.push({name:U.replace(/\.(ts|js)$/,""),instance:z})}}catch(Q){console.error(`-- Failed to load seeder ${U}:`,Q)}}return Y.sort((U,_)=>U.instance.order-_.instance.order),Y}async function Gz(X={}){let $=zZ(h$.cwd()),Z=X.seedersDir||m9($,"database/seeders"),Y=X.verbose??!0;if(Y)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${Z}`);let U=await AU(Z);if(U.length===0){console.log("-- No seeders found");return}if(Y)console.log(`-- Found ${U.length} seeder(s)`);let _=H0();for(let{name:Q,instance:L}of U)try{if(Y)console.log(`-- Seeding: ${Q}`);if(await L.run(_),Y)console.log(`-- \u2713 Seeded: ${Q}`)}catch(z){throw console.error(`-- \u2717 Failed to seed ${Q}:`,z),z}if(Y)console.log("-- All seeders completed successfully")}async function DF(X,$={}){let Z=zZ(h$.cwd()),Y=m9(Z,"database/seeders"),U=$.verbose??!0;if(U)console.log(`-- Running seeder: ${X}`);let Q=(await AU(Y)).find((z)=>z.name===X);if(!Q)throw console.error(`-- Seeder not found: ${X}`),Error(`Seeder not found: ${X}`);let L=H0();try{if(await Q.instance.run(L),U)console.log(`-- \u2713 Seeder completed: ${X}`)}catch(z){throw console.error(`-- \u2717 Seeder failed: ${X}`,z),z}}async function MF(X){let $=zZ(h$.cwd()),Z=m9($,"database/seeders");if(!c8(Z))Lz(Z,{recursive:!0}),console.log(`-- Created seeders directory: ${Z}`);let U=`${X.replace(/Seeder$/i,"")}Seeder`,_=`${U}.ts`,Q=m9(Z,_);if(c8(Q))throw console.error(`-- Seeder already exists: ${Q}`),Error(`Seeder already exists: ${Q}`);let L=`import type { QueryBuilder } from 'bun-query-builder'
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/query-builder",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.70.98",
5
+ "version": "0.70.99",
6
6
  "description": "The Stacks Query Builder integration",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -51,11 +51,11 @@
51
51
  "prepublishOnly": "bun run build"
52
52
  },
53
53
  "devDependencies": {
54
- "@stacksjs/database": "0.70.98",
54
+ "@stacksjs/database": "0.70.99",
55
55
  "better-dx": "^0.2.16",
56
- "@stacksjs/types": "0.70.98"
56
+ "@stacksjs/types": "0.70.99"
57
57
  },
58
58
  "dependencies": {
59
- "bun-query-builder": "^0.1.52"
59
+ "bun-query-builder": "^0.1.53"
60
60
  }
61
61
  }