bun-query-builder 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import"../chunk-hjgcemhy.js";import"../chunk-4cs1xx1d.js";import"../chunk-c7m701dd.js";import"../chunk-cxpaxq2p.js";import"../chunk-3xpe6b57.js";import{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,k,le,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De}from"../chunk-vw9ss7z8.js";import{EventEmitter as Le}from"events";import v from"process";import Ie from"process";import fe from"process";import G from"process";import M from"process";import qe from"tty";import Et,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import ce from"fs/promises";import Me from"os";import ue from"path";import x from"process";function de(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],a=(d)=>{let n=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),n=!0;else if(r.endsWith("..."))r=r.slice(0,-3),n=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:n}},o;while(o=t.exec(e))s.push(a(o));let m;while(m=i.exec(e))s.push(a(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Ee(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function Q(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function P(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,a=t.length,o=e,m;for(;s<a;++s)m=o[t[s]],o=o[t[s]]=s===a-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function B(e){return e.split(".").map((t,i)=>i===0?P(t):t).join(".")}class N extends Error{exitCode=2;isUsageError=!0;usage;constructor(e,t){super(e);if(this.name=this.constructor.name,t!==void 0)this.usage=t;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(e).stack}format(e=!1){if(e&&this.stack)return`${this.message}
3
+ import"../chunk-hjgcemhy.js";import"../chunk-4cs1xx1d.js";import"../chunk-c7m701dd.js";import"../chunk-cxpaxq2p.js";import"../chunk-3xpe6b57.js";import{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,k,le,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De}from"../chunk-6r90xd1j.js";import{EventEmitter as Le}from"events";import v from"process";import Ie from"process";import fe from"process";import G from"process";import M from"process";import qe from"tty";import Et,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import ce from"fs/promises";import Me from"os";import ue from"path";import x from"process";function de(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],a=(d)=>{let n=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),n=!0;else if(r.endsWith("..."))r=r.slice(0,-3),n=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:n}},o;while(o=t.exec(e))s.push(a(o));let m;while(m=i.exec(e))s.push(a(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Ee(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function Q(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function P(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,a=t.length,o=e,m;for(;s<a;++s)m=o[t[s]],o=o[t[s]]=s===a-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function B(e){return e.split(".").map((t,i)=>i===0?P(t):t).join(".")}class N extends Error{exitCode=2;isUsageError=!0;usage;constructor(e,t){super(e);if(this.name=this.constructor.name,t!==void 0)this.usage=t;if(typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error(e).stack}format(e=!1){if(e&&this.stack)return`${this.message}
4
4
 
5
5
  Stack trace:
6
6
  ${this.stack}`;return this.message}}function Ue(e){if(e instanceof N)return!0;return!!e&&typeof e==="object"&&e.name==="ClappError"&&typeof e.message==="string"}function Ge(){let{env:e}=Ie,{TERM:t,TERM_PROGRAM:i}=e;if(Ie.platform!=="win32")return t!=="linux";return Boolean(e.WT_SESSION)||Boolean(e.TERMINUS_SUBLIME)||e.ConEmuTask==="{cmd::Cmder}"||i==="Terminus-Sublime"||i==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var H="\x1B",b=`${H}[`;var ke={to(e,t){if(!t)return`${b}${e+1}G`;return`${b}${t+1};${e+1}H`},move(e,t){let i="";if(e<0)i+=`${b}${-e}D`;else if(e>0)i+=`${b}${e}C`;if(t<0)i+=`${b}${-t}A`;else if(t>0)i+=`${b}${t}B`;return i},up:(e=1)=>`${b}${e}A`,down:(e=1)=>`${b}${e}B`,forward:(e=1)=>`${b}${e}C`,backward:(e=1)=>`${b}${e}D`,nextLine:(e=1)=>`${b}E`.repeat(e),prevLine:(e=1)=>`${b}F`.repeat(e),left:`${b}G`,hide:`${b}?25l`,show:`${b}?25h`,save:`${H}7`,restore:`${H}8`};var Vt={screen:`${b}2J`,up:(e=1)=>`${b}1J`.repeat(e),down:(e=1)=>`${b}J`.repeat(e),line:`${b}2K`,lineEnd:`${b}K`,lineStart:`${b}1K`,lines(e){let t="";for(let i=0;i<e;i++)t+=this.line+(i<e-1?ke.up():"");if(e)t+=ke.left;return t}},Lt={screen:`${H}c`};function He(e,t){let i=[];for(let s=0;s<=t.length;s++)i[s]=[s];for(let s=0;s<=e.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let a=1;a<=e.length;a++)if(t.charAt(s-1)===e.charAt(a-1))i[s][a]=i[s-1][a-1];else i[s][a]=Math.min(i[s-1][a-1]+1,i[s][a-1]+1,i[s-1][a]+1);return i[t.length][e.length]}function Be(e,t,i=2,s=3){return t.map((a)=>({cmd:a,distance:He(e,a)})).filter(({distance:a})=>a<=i).sort((a,o)=>a.distance-o.distance).slice(0,s).map(({cmd:a})=>a)}function Ke(e,t={}){let i={_:[]},s=t.alias||{},a=new Set(t.boolean||[]),o={};for(let n of Object.keys(s))for(let r of s[n])o[r]=n;for(let n of a)if(s[n])for(let r of s[n])a.add(r);function m(n,r){if(n===void 0)return r;if(typeof r==="boolean")return r;return Array.isArray(n)?[...n,r]:[n,r]}function d(n,r){let c=o[n]||n,h=m(i[c],r);if(i[c]=h,s[c])for(let l of s[c])i[l]=h;if(o[n]&&s[o[n]])for(let l of s[o[n]])i[l]=h;i[n]=h}for(let n=0;n<e.length;n++){let r=e[n];if(r==="--"){i._.push(...e.slice(n+1));break}if(r.startsWith("--")){let c=r.indexOf("=");if(c!==-1){let h=P(r.slice(2,c)),l=r.slice(c+1);d(h,l)}else{let h=r.slice(2);if(h.startsWith("no-")){let p=P(h.slice(3));d(p,!1);continue}let l=P(h),y=o[l]||l;if(a.has(y)||a.has(l))d(l,!0);else{let p=e[n+1];if(p!==void 0&&!p.startsWith("-"))d(l,p),n++;else d(l,!0)}}}else if(r.startsWith("-")&&r.length>1){let c=r.slice(1);for(let h=0;h<c.length;h++){let l=c[h],y=o[l]||l;if(h===c.length-1&&!a.has(y)&&!a.has(l)){let p=e[n+1];if(p!==void 0&&!p.startsWith("-"))d(l,p),n++;else d(l,!0)}else d(l,!0)}}else i._.push(r)}return i}class je{rawName;description;name;names;isBoolean;required;config;negated;variadic;constructor(e,t,i){if(this.rawName=e,this.description=t,this.config=Object.assign({},i),e=e.replace(/\.\*/g,""),this.negated=!1,this.variadic=/[<[](?:\.\.\.[^\]>]+|[^\]>]+\.\.\.)[\]>]/.test(e),this.names=de(e).split(",").map((s)=>{let a=s.trim().replace(/^-{1,2}/,"");if(a.startsWith("no-"))this.negated=!0,a=a.replace(/^no-/,"");return B(a)}).sort((s,a)=>s.length>a.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if(e.includes("<"))this.required=!0;else if(e.includes("["))this.required=!1;else this.isBoolean=!0}}var Dt=fe.argv,Ye=`${fe.platform}-${fe.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,_e=G.argv,Qe=`${G.platform}-${G.arch} node-${G.version}`;class $e{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor(e,t,i,s){this.rawName=e,this.description=t,this.config=i,this.cli=s,this.options=[],this.aliasNames=[],this.name=de(e);let a=de(e),o=a.indexOf(":");if(o>0)this.namespace=a.substring(0,o),this.name=a.substring(o+1);if(this.args=Ne(e),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!i)this.config={}}usage(e){return this.usageText=e,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(e,t="-v, --version"){return this.versionNumber=e,this.option(t,"Display version number"),this}example(e){return this.examples.push(e),this}option(e,t,i){let s=new je(e,t,i);return this.options.push(s),this}alias(e){return this.aliasNames.push(e),this}action(e){return this.commandAction=e,this}before(e){return this.beforeHooks.push(e),this}after(e){return this.afterHooks.push(e),this}use(e){return this.middleware.push(e),this}isMatched(e){if(this.aliasNames.includes(e))return!0;if(this.namespace)return`${this.namespace}:${this.name}`===e;return this.name===e}get isDefaultCommand(){return this.name===""||this.aliasNames.includes("!")}get isGlobalCommand(){return this instanceof ve}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption(e){let t=B(e.split(".")[0]);return!!this.options.find((i)=>i.names.some((s)=>B(s)===t))}outputHelp(){let{name:e,commands:t}=this.cli,{versionNumber:i,options:s,helpCallback:a}=this.cli.globalCommand,o=[{body:`${e}${i?`/${i}`:""}`}];if(o.push({title:"Usage",body:` $ ${e} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&t.length>0){let r=Ee(t.map((p)=>p.rawName)),c=new Map,h=[];for(let p of t)if(p.namespace){if(!c.has(p.namespace))c.set(p.namespace,[]);c.get(p.namespace).push(p)}else h.push(p);let l="";if(h.sort((p,D)=>p.rawName<D.rawName?-1:p.rawName>D.rawName?1:0),h.length>0)l+=h.map((p)=>` ${Q(p.rawName,r.length)} ${p.description}`).join(`
@@ -29,7 +29,7 @@ Received ${i}, cleaning up...`),e)try{await e()}catch(s){console.error("Error du
29
29
  `)),this.enableDidYouMean){let t=[];for(let s of this.commands){if(s.displayName)t.push(s.displayName);if(s.aliasNames)t.push(...s.aliasNames)}let i=Be(e,t);if(i.length>0)console.log(E.yellow("Did you mean one of these?")),i.forEach((s)=>console.log(` ${E.dim("\u2022")} ${this.name} ${s}`)),console.log("")}console.log(E.dim("Run"),`${this.name} --help`,E.dim("to see all available commands")),v.exit(1)}async parse(e=_e,t={}){let{run:i=!0,exitOnError:s=!1}=t;if(s)try{return await this.parse(e,{run:i})}catch(n){throw this.handleUsageError(n),n}if(this.rawArgs=e,!this.name)this.name=e[1]?ze(e[1]):"cli";let a=!0,o=e.slice(2),m=o[0];if(m&&!m.startsWith("-")){for(let n of this.commands)if(n.isMatched(m)){let r=this.mri(o,n);a=!1;let c={...r,args:r.args.slice(1)};this.setParsedInfo(c,n,m),this.emit(`command:${m}`,n);break}if(a){let n=o[1];if(n&&!n.startsWith("-")){let r=`${m}:${n}`;for(let c of this.commands)if(c.isMatched(r)){let h=this.mri(o,c);a=!1;let l={...h,args:h.args.slice(2)};this.setParsedInfo(l,c,r),this.emit(`command:${r}`,c);break}}}}if(a){for(let n of this.commands)if(n.name===""){a=!1;let r=this.mri(o,n);this.setParsedInfo(r,n),this.emit("command:!",n);break}}if(a){let n=this.mri(e.slice(2));this.setParsedInfo(n)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction||this.options.interaction===!1)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji||this.options.emoji===!1)this.useEmoji=!1;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache||this.options.cache===!1)this.isNoCache=!0;if(this.options.help&&this.showHelpOnExit)this.outputHelp(),i=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),i=!1,this.unsetMatchedCommand();let d={args:this.args,options:this.options};if(i)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return d}mri(e,t){let i=[...this.globalCommand.options,...t?t.options:[]],s=Pe(i),a=[],o=e.indexOf("--");if(o>-1)a=e.slice(o+1),e=e.slice(0,o);let m=Ke(e,s),d={_:m._};for(let l of Object.keys(m))if(l!=="_")d[B(l)]=m[l];let n=d._,r={"--":a},c=t&&t.config.ignoreOptionDefaultValue?t.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,h=Object.create(null);for(let l of i){if(!c&&l.config.default!==void 0)for(let y of l.names)r[y]=l.config.default;if(Array.isArray(l.config.type)){if(h[l.name]===void 0)h[l.name]={shouldTransform:!0,transformFunction:l.config.type[0]}}}for(let l of Object.keys(d))if(l!=="_"){let y=l.split(".");We(r,y,d[l]),Fe(r,h)}for(let l of i){if(!l.variadic)continue;for(let y of l.names){let p=r[y];if(p===void 0||Array.isArray(p))continue;if(l.config.default!==void 0&&p===l.config.default)continue;r[y]=[p]}}return{args:n,options:r}}async run(e=_e){return this.parse(e,{run:!0,exitOnError:!0})}handleUsageError(e){if(!Ue(e)||e.isUsageError===!1)return;let t=e.message||"command-line error",i=this.name?`${this.name}: `:"",s=/--help/.test(t)?"":e.usage?`
30
30
  Usage: ${e.usage}`:`
31
31
  Run \`${this.name??"cli"} --help\` for usage.`;v.stderr.write(`${i}${t}${s}
32
- `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,n)=>{if(d.variadic)s.push(e.slice(n));else s.push(e[n])}),s.push(t);let a={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(a);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,n=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...a,next:n})}else await m()};await n()}else await m();for(let d of i.afterHooks)await d(a);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Ae{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(e){if(!this.enabled){this.misses++;return}let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>t.ttl){this.cache.delete(e),this.misses++;return}return this.hits++,t.value}set(e,t,i=5000){if(!this.enabled)return;this.cache.set(e,{value:t,timestamp:Date.now(),ttl:i})}has(e){if(!this.enabled)return!1;let t=this.cache.get(e);if(!t)return!1;if(Date.now()-t.timestamp>t.ttl)return this.cache.delete(e),!1;return!0}delete(e){this.cache.delete(e)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let e=Date.now();for(let[t,i]of this.cache.entries())if(e-i.timestamp>i.ttl)this.cache.delete(t)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var Wt=new Ae;function et(){if("FORCE_COLOR"in M.env)return M.env.FORCE_COLOR!=="0";if("NO_COLOR"in M.env||M.env.TERM==="dumb")return!1;if(M.platform==="win32")return!0;return qe.isatty(1)&&qe.isatty(2)}var Re=et();function g(e,t){if(!Re)return(i)=>i;return(i)=>e+i+t}var tt=g("\x1B[0m","\x1B[0m"),it=g("\x1B[31m","\x1B[39m"),st=g("\x1B[32m","\x1B[39m"),rt=g("\x1B[33m","\x1B[39m"),nt=g("\x1B[34m","\x1B[39m"),at=g("\x1B[35m","\x1B[39m"),ot=g("\x1B[36m","\x1B[39m"),lt=g("\x1B[37m","\x1B[39m"),ct=g("\x1B[90m","\x1B[39m"),ut=g("\x1B[1m","\x1B[22m"),dt=g("\x1B[3m","\x1B[23m"),mt=g("\x1B[4m","\x1B[24m"),ht=g("\x1B[2m","\x1B[22m"),pt=g("\x1B[7m","\x1B[27m"),ft=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=Re,Ot={reset:tt,red:it,green:st,yellow:rt,blue:nt,magenta:at,cyan:ot,white:lt,gray:ct,bold:ut,italic:dt,underline:mt,dim:ht,inverse:pt,hidden:ft,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,kt=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(kt),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=Et.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var f=(e,t)=>_t?e:t,Jt=f("\u25C6","*"),Xt=f("\u25A0","x"),Zt=f("\u25B2","x"),ei=f("\u25C7","o"),ti=f("\u250C","T"),qt=f("\u2502","|"),ii=f("\u2514","\u2014"),si=f("\u25CF",">"),ri=f("\u25CB"," "),ni=f("\u25FB","[\u2022]"),ai=f("\u25FC","[+]"),oi=f("\u25FB","[ ]"),li=f("\u25AA","\u2022"),ci=f("\u2500","-"),ui=f("\u256E","+"),di=f("\u251C","+"),mi=f("\u256F","+"),hi=f("\u25CF","\u2022"),pi=f("\u25C6","*"),fi=f("\u25B2","!"),gi=f("\u25A0","x");var bi={light:f("\u2500","-"),heavy:f("\u2501","="),block:f("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=ue.join(e,".config","clapp");this.configPath=ue.join(t,"telemetry.json")}async isEnabled(){if(x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true")return!1;if(x.env.NO_TELEMETRY==="1"||x.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let e=await this.loadConfig();if(e.enabled=!0,!e.userId)e.userId=this.generateUserId();await this.saveConfig(e)}async disable(){let e=await this.loadConfig();e.enabled=!1,await this.saveConfig(e)}async track(e,t){if(!await this.isEnabled())return;let s={event:e,...t,timestamp:Date.now(),platform:Me.platform(),nodeVersion:x.version};if(this.events.push(s),this.events.length>=10)await this.send()}async trackCommand(e,t){await this.track("command",{command:e,duration:t})}async trackError(e,t){await this.track("error",{error:e,command:t})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let t=await this.loadConfig();return t.lastSent=Date.now(),await this.saveConfig(t),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let t=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(t),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(e){return new Promise((t)=>setTimeout(t,e))}async status(){let e=await this.loadConfig();return{enabled:e.enabled,doNotTrack:x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:e.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Bt(this.configPath)){let e=await ce.readFile(this.configPath,"utf-8");return this.config=JSON.parse(e),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(e){this.config=e;try{let t=ue.dirname(this.configPath);await ce.mkdir(t,{recursive:!0}),await ce.writeFile(this.configPath,JSON.stringify(e,null,2),"utf-8")}catch{}}generateUserId(){let e=Math.random().toString(36).substring(2,15),t=Date.now().toString(36);return`${e}-${t}`}}var Si=new Ve;var Ce="0.3.0";var u=new xe("query-builder");u.command("introspect <dir>","Load models and print inferred schema").option("--verbose","Enable verbose logging").example("query-builder introspect ./app/Models --verbose").action(async(e,t)=>{await oe(e,t)});u.command("introspect:db","Reverse-introspect the live database into defineModel() source (#1047)").option("--table <table>","Limit to a single table (repeatable)").example("query-builder introspect:db > app/Models/generated.ts").action(async(e)=>{let t=e?.table,i=t?Array.isArray(t)?t:[t]:void 0,s=await k({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
32
+ `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,n)=>{if(d.variadic)s.push(e.slice(n));else s.push(e[n])}),s.push(t);let a={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(a);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,n=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...a,next:n})}else await m()};await n()}else await m();for(let d of i.afterHooks)await d(a);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Ae{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get(e){if(!this.enabled){this.misses++;return}let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>t.ttl){this.cache.delete(e),this.misses++;return}return this.hits++,t.value}set(e,t,i=5000){if(!this.enabled)return;this.cache.set(e,{value:t,timestamp:Date.now(),ttl:i})}has(e){if(!this.enabled)return!1;let t=this.cache.get(e);if(!t)return!1;if(Date.now()-t.timestamp>t.ttl)return this.cache.delete(e),!1;return!0}delete(e){this.cache.delete(e)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let e=Date.now();for(let[t,i]of this.cache.entries())if(e-i.timestamp>i.ttl)this.cache.delete(t)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var Wt=new Ae;function et(){if("FORCE_COLOR"in M.env)return M.env.FORCE_COLOR!=="0";if("NO_COLOR"in M.env||M.env.TERM==="dumb")return!1;if(M.platform==="win32")return!0;return qe.isatty(1)&&qe.isatty(2)}var Re=et();function g(e,t){if(!Re)return(i)=>i;return(i)=>e+i+t}var tt=g("\x1B[0m","\x1B[0m"),it=g("\x1B[31m","\x1B[39m"),st=g("\x1B[32m","\x1B[39m"),rt=g("\x1B[33m","\x1B[39m"),nt=g("\x1B[34m","\x1B[39m"),at=g("\x1B[35m","\x1B[39m"),ot=g("\x1B[36m","\x1B[39m"),lt=g("\x1B[37m","\x1B[39m"),ct=g("\x1B[90m","\x1B[39m"),ut=g("\x1B[1m","\x1B[22m"),dt=g("\x1B[3m","\x1B[23m"),mt=g("\x1B[4m","\x1B[24m"),ht=g("\x1B[2m","\x1B[22m"),pt=g("\x1B[7m","\x1B[27m"),ft=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=Re,Ot={reset:tt,red:it,green:st,yellow:rt,blue:nt,magenta:at,cyan:ot,white:lt,gray:ct,bold:ut,italic:dt,underline:mt,dim:ht,inverse:pt,hidden:ft,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,kt=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(kt),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=Et.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var f=(e,t)=>_t?e:t,Jt=f("\u25C6","*"),Xt=f("\u25A0","x"),Zt=f("\u25B2","x"),ei=f("\u25C7","o"),ti=f("\u250C","T"),qt=f("\u2502","|"),ii=f("\u2514","\u2014"),si=f("\u25CF",">"),ri=f("\u25CB"," "),ni=f("\u25FB","[\u2022]"),ai=f("\u25FC","[+]"),oi=f("\u25FB","[ ]"),li=f("\u25AA","\u2022"),ci=f("\u2500","-"),ui=f("\u256E","+"),di=f("\u251C","+"),mi=f("\u256F","+"),hi=f("\u25CF","\u2022"),pi=f("\u25C6","*"),fi=f("\u25B2","!"),gi=f("\u25A0","x");var bi={light:f("\u2500","-"),heavy:f("\u2501","="),block:f("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=ue.join(e,".config","clapp");this.configPath=ue.join(t,"telemetry.json")}async isEnabled(){if(x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true")return!1;if(x.env.NO_TELEMETRY==="1"||x.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let e=await this.loadConfig();if(e.enabled=!0,!e.userId)e.userId=this.generateUserId();await this.saveConfig(e)}async disable(){let e=await this.loadConfig();e.enabled=!1,await this.saveConfig(e)}async track(e,t){if(!await this.isEnabled())return;let s={event:e,...t,timestamp:Date.now(),platform:Me.platform(),nodeVersion:x.version};if(this.events.push(s),this.events.length>=10)await this.send()}async trackCommand(e,t){await this.track("command",{command:e,duration:t})}async trackError(e,t){await this.track("error",{error:e,command:t})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let t=await this.loadConfig();return t.lastSent=Date.now(),await this.saveConfig(t),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let t=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(t),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep(e){return new Promise((t)=>setTimeout(t,e))}async status(){let e=await this.loadConfig();return{enabled:e.enabled,doNotTrack:x.env.DO_NOT_TRACK==="1"||x.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:e.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(Bt(this.configPath)){let e=await ce.readFile(this.configPath,"utf-8");return this.config=JSON.parse(e),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig(e){this.config=e;try{let t=ue.dirname(this.configPath);await ce.mkdir(t,{recursive:!0}),await ce.writeFile(this.configPath,JSON.stringify(e,null,2),"utf-8")}catch{}}generateUserId(){let e=Math.random().toString(36).substring(2,15),t=Date.now().toString(36);return`${e}-${t}`}}var Si=new Ve;var Ce="0.3.1";var u=new xe("query-builder");u.command("introspect <dir>","Load models and print inferred schema").option("--verbose","Enable verbose logging").example("query-builder introspect ./app/Models --verbose").action(async(e,t)=>{await oe(e,t)});u.command("introspect:db","Reverse-introspect the live database into defineModel() source (#1047)").option("--table <table>","Limit to a single table (repeatable)").example("query-builder introspect:db > app/Models/generated.ts").action(async(e)=>{let t=e?.table,i=t?Array.isArray(t)?t:[t]:void 0,s=await k({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
33
33
 
34
34
  ${s.map((a)=>a.source).join(`
35
35
  `)}`)});u.command("sql <dir> <table>","Build a sample query for a table").option("--limit <n>","Limit rows",{default:10}).example("query-builder sql ./app/Models users --limit 5").action(async(e,t,i)=>{await Te(e,t,i)});u.command("ping","Test database connectivity (uses environment variables)").example("query-builder ping").action(async()=>{await pe()});u.command("wait-ready","Wait for database to become ready").option("--attempts <n>","Number of attempts",{default:10}).option("--delay <ms>","Delay between attempts",{default:100}).example("query-builder wait-ready --attempts 30 --delay 250").action(async(e)=>{try{await De(e)}catch{let t=await import("process");t.default.exitCode=1}});u.command("unsafe <sql>","Execute an unsafe SQL string (one statement with params)").option("--params <json>","JSON array of parameters").example('query-builder unsafe "SELECT * FROM users WHERE id = $1" --params "[1]"').action(async(e,t)=>{await we(e,t)});u.command("file <path>","Execute a SQL file (supports $1, $2 params)").option("--params <json>","JSON array of parameters").example("query-builder file ./migrations/seed.sql").example('query-builder file ./reports/top.sql --params "[30]"').action(async(e,t)=>{await se(e,t)});u.command("migrate <dir>","Generate SQL migrations from models").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--apply","Execute the generated SQL against the database").option("--full","Force full migration SQL instead of incremental diff").example("query-builder migrate ./app/Models --dialect postgres").action(async(e,t)=>{try{await T(e,{dialect:t.dialect,state:t.state,apply:t.apply,full:t.full}),await C()}catch(i){console.error("-- Migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("explain <sql>","Explain a query").example('query-builder explain "SELECT * FROM users WHERE active = true"').action(async(e)=>{await ie(e)});u.command("query:explain-all <path>","Run EXPLAIN on all SQL files in a directory").option("--verbose","Enable verbose output").option("--json","Output as JSON").example("query-builder query:explain-all ./queries").example("query-builder query:explain-all ./queries/users.sql").action(async(e,t)=>{try{await q(e,{verbose:t.verbose,json:t.json})}catch(i){console.error("-- Explain all failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("relation:diagram","Generate relationship diagram from models").option("--dir <path>","Models directory (defaults to app/Models)").option("--format <fmt>","Output format (mermaid|dot)",{default:"mermaid"}).option("--output <path>","Output file path").option("--verbose","Enable verbose output").example("query-builder relation:diagram").example("query-builder relation:diagram --format dot --output schema.dot").example("query-builder relation:diagram --output schema.mmd").action(async(e)=>{try{await W({dir:e.dir,format:e.format,output:e.output,verbose:e.verbose})}catch(t){console.error("-- Diagram generation failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("migrate:fresh <dir>","Reset database and run all migrations").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--full","Force full migration SQL instead of incremental diff").example("query-builder migrate:fresh ./app/Models --dialect postgres").action(async(e,t)=>{try{console.log("-- Resetting database..."),await R(e,{dialect:t.dialect,state:t.state}),console.log("-- Generating fresh migrations..."),await T(e,{dialect:t.dialect,state:t.state,full:t.full}),console.log("-- Executing migrations..."),await C()}catch(i){console.error("-- Migrate fresh failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("reset <dir>","Drop all tables and reset database").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").example("query-builder reset ./app/Models --dialect postgres").action(async(e,t)=>{try{await R(e,{dialect:t.dialect,state:t.state})}catch(i){console.error("-- Reset failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("seed","Run database seeders").option("--dir <path>","Path to seeders directory (defaults to database/seeders)").option("--class <name>","Run a specific seeder class").option("--verbose","Enable verbose logging").example("query-builder seed").example("query-builder seed --class UserSeeder").example("query-builder seed --dir ./database/seeders").action(async(e)=>{try{if(e.class)await U(e.class,{verbose:e.verbose});else await A({seedersDir:e.dir,verbose:e.verbose})}catch(t){console.error("-- Seeding failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:seed","Run database seeders (alias for seed)").option("--dir <path>","Path to seeders directory (defaults to database/seeders)").option("--class <name>","Run a specific seeder class").option("--verbose","Enable verbose logging").example("query-builder db:seed").example("query-builder db:seed --class UserSeeder").action(async(e)=>{try{if(e.class)await U(e.class,{verbose:e.verbose});else await A({seedersDir:e.dir,verbose:e.verbose})}catch(t){console.error("-- Seeding failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("make:seeder <name>","Create a new seeder file").example("query-builder make:seeder User").example("query-builder make:seeder UserSeeder").action(async(e)=>{try{await ye(e)}catch(t){console.error("-- Failed to create seeder:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:fresh","Drop all tables, re-run migrations and seed the database").option("--models <path>","Path to models directory (defaults to app/Models)").option("--seeders <path>","Path to seeders directory (defaults to database/seeders)").option("--verbose","Enable verbose logging").example("query-builder db:fresh").example("query-builder db:fresh --models ./app/Models --seeders ./database/seeders").action(async(e)=>{try{await be({modelsDir:e.models,seedersDir:e.seeders,verbose:e.verbose})}catch(t){console.error("-- Database fresh failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("make:model <name>","Create a new model file").option("--table <name>","Table name (defaults to plural of model name)").option("--dir <path>","Models directory (defaults to app/Models)").option("--timestamps","Include timestamp fields (default: true)").example("query-builder make:model User").example("query-builder make:model Post --table=blog_posts").action(async(e,t)=>{try{await le(e,{table:t.table,dir:t.dir,timestamps:t.timestamps})}catch(i){console.error("-- Failed to create model:",i);let s=await import("process");s.default.exitCode=1}});u.command("model:show <name>","Show detailed model information").option("--dir <path>","Models directory (defaults to app/Models)").option("--json","Output as JSON").option("--verbose","Enable verbose output").example("query-builder model:show User").example("query-builder model:show Post --json").action(async(e,t)=>{try{await j(e,{dir:t.dir,json:t.json,verbose:t.verbose})}catch(i){console.error("-- Failed to show model:",i);let s=await import("process");s.default.exitCode=1}});u.command("migrate:status","Show migration status").example("query-builder migrate:status").action(async()=>{try{await F()}catch(e){console.error("-- Failed to get migration status:",e);let t=await import("process");t.default.exitCode=1}});u.command("migrate:list","List all migrations (alias for migrate:status)").example("query-builder migrate:list").action(async()=>{try{await ge()}catch(e){console.error("-- Failed to list migrations:",e);let t=await import("process");t.default.exitCode=1}});u.command("migrate:rollback","Rollback migrations").option("--steps <n>","Number of migrations to rollback",{default:1}).option("--no-reverse-schema","Only remove the migration records; leave the schema alone").option("--delete-files","Also delete the rolled-back migration files from disk").example("query-builder migrate:rollback").example("query-builder migrate:rollback --steps 2").example("query-builder migrate:rollback --no-reverse-schema").action(async(e)=>{try{await he({steps:Number(e.steps),reverseSchema:e.reverseSchema,deleteFiles:Boolean(e.deleteFiles)})}catch(t){console.error("-- Rollback failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("migrate:generate [dir]","Generate migration from model changes").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file").option("--apply","Execute the generated SQL").option("--full","Force full migration SQL").example("query-builder migrate:generate").example("query-builder migrate:generate ./app/Models --dialect postgres").action(async(e,t)=>{try{await me(e,{dialect:t?.dialect,state:t?.state,apply:t?.apply,full:t?.full})}catch(i){console.error("-- Generate migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("db:info","Show database information and statistics").example("query-builder db:info").action(async()=>{try{await _()}catch(e){console.error("-- Failed to get database info:",e);let t=await import("process");t.default.exitCode=1}});u.command("db:stats","Show database statistics (alias for db:info)").example("query-builder db:stats").action(async()=>{try{await re()}catch(e){console.error("-- Failed to get database stats:",e);let t=await import("process");t.default.exitCode=1}});u.command("db:wipe","Drop all tables from the database").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--force","Skip confirmation prompt").option("--verbose","Enable verbose output").example("query-builder db:wipe").example("query-builder db:wipe --force").action(async(e)=>{try{await L({dialect:e.dialect,force:e.force,verbose:e.verbose})}catch(t){console.error("-- Wipe failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("db:optimize","Optimize database tables (VACUUM, ANALYZE, OPTIMIZE)").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--aggressive","Use aggressive optimization (VACUUM FULL for postgres)").option("--tables <tables>","Comma-separated list of tables to optimize").option("--verbose","Enable verbose output").example("query-builder db:optimize").example("query-builder db:optimize --aggressive").example("query-builder db:optimize --tables users,posts").action(async(e)=>{try{await I({dialect:e.dialect,aggressive:e.aggressive,tables:e.tables?e.tables.split(","):void 0,verbose:e.verbose})}catch(t){console.error("-- Optimize failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("console","Start interactive query console").example("query-builder console").action(async()=>{try{await O()}catch(e){console.error("-- Console failed:",e);let t=await import("process");t.default.exitCode=1}});u.command("tinker","Start interactive query console (alias for console)").example("query-builder tinker").action(async()=>{try{await Z()}catch(e){console.error("-- Tinker failed:",e);let t=await import("process");t.default.exitCode=1}});u.command("inspect <table>","Inspect a table structure").option("--verbose","Enable verbose output",{default:!0}).example("query-builder inspect users").action(async(e,t)=>{try{await K(e,{verbose:t.verbose})}catch(i){console.error("-- Failed to inspect table:",i);let s=await import("process");s.default.exitCode=1}});u.command("table:info <table>","Show table information (alias for inspect)").option("--verbose","Enable verbose output",{default:!0}).example("query-builder table:info users").action(async(e,t)=>{try{await ae(e,{verbose:t.verbose})}catch(i){console.error("-- Failed to get table info:",i);let s=await import("process");s.default.exitCode=1}});u.command("cache:clear","Clear the query cache").example("query-builder cache:clear").action(async()=>{try{await z()}catch(e){console.error("-- Failed to clear cache:",e);let t=await import("process");t.default.exitCode=1}});u.command("cache:stats","Show cache statistics").example("query-builder cache:stats").action(async()=>{try{await Y()}catch(e){console.error("-- Failed to get cache stats:",e);let t=await import("process");t.default.exitCode=1}});u.command("cache:config","Configure cache settings").option("--size <n>","Set maximum cache size").example("query-builder cache:config --size 500").action(async(e)=>{try{await X({size:e.size})}catch(t){console.error("-- Failed to configure cache:",t);let i=await import("process");i.default.exitCode=1}});u.command("benchmark","Run performance benchmarks").option("--operations <ops>","Comma-separated list of operations (select,insert,update,delete,count)").option("--iterations <n>","Number of iterations per operation",{default:1000}).example("query-builder benchmark").example("query-builder benchmark --operations select,insert --iterations 5000").action(async(e)=>{try{await J({operations:e.operations,iterations:e.iterations?Number(e.iterations):void 0})}catch(t){console.error("-- Benchmark failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("validate:schema [dir]","Validate models against database schema").example("query-builder validate:schema").example("query-builder validate:schema ./app/Models").action(async(e)=>{try{await V(e)}catch(t){console.error("-- Validation failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("check [dir]","Validate schema (alias for validate:schema)").example("query-builder check").action(async(e)=>{try{await Se(e)}catch(t){console.error("-- Check failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("export <table>","Export data from a table").option("--format <fmt>","Export format (json|csv|sql)",{default:"json"}).option("--output <path>","Output file path").option("--limit <n>","Limit number of rows").example("query-builder export users").example("query-builder export users --format csv --output users.csv").example("query-builder export users --format sql --limit 100").action(async(e,t)=>{try{await ee(e,{format:t.format,output:t.output,limit:t.limit?Number(t.limit):void 0})}catch(i){console.error("-- Export failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("import <table> <file>","Import data into a table").option("--format <fmt>","Import format (json|csv)").option("--truncate","Truncate table before import").example("query-builder import users users.json").example("query-builder import users users.csv --truncate").action(async(e,t,i)=>{try{await te(e,t,{format:i.format,truncate:i.truncate})}catch(s){console.error("-- Import failed:",s);let a=await import("process");a.default.exitCode=1}});u.command("dump","Dump database to SQL file").option("--tables <tables>","Comma-separated list of tables to dump").option("--output <path>","Output file path").example("query-builder dump").example("query-builder dump --tables users,posts").example("query-builder dump --output backup.sql").action(async(e)=>{try{await ne({tables:e.tables,output:e.output})}catch(t){console.error("-- Dump failed:",t);let i=await import("process");i.default.exitCode=1}});u.command("version","Show the version of the CLI").action(()=>{console.log(Ce)});u.version(Ce);u.help();u.parse();
@@ -1,24 +1,25 @@
1
1
  // @bun
2
- import{n,e,B,t,P,Be,Ge,r,b,f}from"./chunk-hjgcemhy.js";import{i,xe,ve}from"./chunk-c7m701dd.js";import{M,Ae,Me,N}from"./chunk-cxpaxq2p.js";import{c}from"./chunk-3xpe6b57.js";var Ar=import.meta.require;import{existsSync as Nt,mkdirSync as yr,mkdtempSync as qi,readdirSync as br,readFileSync as Ht,rmSync as hr,unlinkSync as vn,writeFileSync as Tr}from"fs";import{tmpdir as Ki}from"os";import{isAbsolute as Li,join as wt}from"path";import kn from"process";function wr(s){let o=2166136261;for(let l=0;l<s.length;l++)o^=s.charCodeAt(l),o=Math.imul(o,16777619)>>>0;return o.toString(36).padStart(7,"0").slice(-7)}function Cr(s,o=63){if(s.length<=o)return s;let l=`_${wr(s)}`;return s.slice(0,o-l.length)+l}function Ct(s,o){let l=`${s}_`,d=o.startsWith(l)?o:`${l}${o}`;return Cr(d)}class a{quoteIdentifier(s){return`\`${s.replace(/`/g,"``")}\``}getColumnType(s){switch(s.type){case"string":return`varchar(${s.maxLength??255})`;case"text":return"text";case"boolean":return"tinyint(1)";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"datetime";case"timestamptz":return"datetime";case"json":return"json";case"enum":if(s.enumValues&&s.enumValues.length>0)return`ENUM(${s.enumValues.map((l)=>`'${l.replace(/'/g,"''")}'`).join(", ")})`;return"text";default:return"text"}}getPrimaryKeyType(s){return this.getColumnType(s)}getAutoIncrementClause(s){if(s.isPrimaryKey&&(s.type==="integer"||s.type==="bigint"))return"auto_increment";return""}getDefaultValue(s){if(!s.hasDefault||s.defaultValue===void 0)return"";let o=s.defaultValue;if(typeof o==="string"){let l=o.toUpperCase();if(l==="UTC_TIMESTAMP")return"default (UTC_TIMESTAMP)";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(l))return`default ${l}`;let g=`'${o.replace(/'/g,"''")}'`;if(s.type==="text"||s.type==="json"||s.type==="enum"&&!s.enumValues?.length)return`default (${g})`;return`default ${g}`}else if(typeof o==="number"||typeof o==="bigint")return`default ${o}`;else if(typeof o==="boolean")return`default ${o?1:0}`;else if(o instanceof Date)return`default '${o.toISOString()}'`;return""}createEnumType(s,o){return""}foreignKeyClauses(s){return s.columns.filter((o)=>o.references).map((o)=>{let l=o.references,d=`${s.table}_${o.name}_fk`,g=`CONSTRAINT ${this.quoteIdentifier(d)} FOREIGN KEY (${this.quoteIdentifier(o.name)}) REFERENCES ${this.quoteIdentifier(l.table)}(${this.quoteIdentifier(l.column)})`;if(l.onDelete)g+=` ON DELETE ${l.onDelete.toUpperCase()}`;if(l.onUpdate)g+=` ON UPDATE ${l.onUpdate.toUpperCase()}`;return g})}createTable(s){let o=[...s.columns.map((l)=>this.renderColumn(l)),...this.foreignKeyClauses(s)];return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(s.table)} (
2
+ import{n,e,B,t,P,Be,Ge,r,b,f}from"./chunk-hjgcemhy.js";import{i,xe,ve}from"./chunk-c7m701dd.js";import{M,Ae,Me,N}from"./chunk-cxpaxq2p.js";import{c}from"./chunk-3xpe6b57.js";var Ar=import.meta.require;import{existsSync as Nt,mkdirSync as yr,mkdtempSync as Li,readdirSync as br,readFileSync as Ht,rmSync as hr,unlinkSync as vn,writeFileSync as Tr}from"fs";import{tmpdir as Ki}from"os";import{isAbsolute as Bi,join as wt}from"path";import Pn from"process";function wr(s){let o=2166136261;for(let l=0;l<s.length;l++)o^=s.charCodeAt(l),o=Math.imul(o,16777619)>>>0;return o.toString(36).padStart(7,"0").slice(-7)}function Cr(s,o=63){if(s.length<=o)return s;let l=`_${wr(s)}`;return s.slice(0,o-l.length)+l}function Ct(s,o){let l=`${s}_`,d=o.startsWith(l)?o:`${l}${o}`;return Cr(d)}class a{quoteIdentifier(s){return`\`${s.replace(/`/g,"``")}\``}getColumnType(s){switch(s.type){case"string":return`varchar(${s.maxLength??255})`;case"text":return"text";case"boolean":return"tinyint(1)";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"datetime";case"timestamptz":return"datetime";case"json":return"json";case"enum":if(s.enumValues&&s.enumValues.length>0)return`ENUM(${s.enumValues.map((l)=>`'${l.replace(/'/g,"''")}'`).join(", ")})`;return"text";default:return"text"}}getPrimaryKeyType(s){return this.getColumnType(s)}getAutoIncrementClause(s){if(s.isPrimaryKey&&(s.type==="integer"||s.type==="bigint"))return"auto_increment";return""}getDefaultValue(s){if(!s.hasDefault||s.defaultValue===void 0)return"";let o=s.defaultValue;if(typeof o==="string"){let l=o.toUpperCase();if(l==="UTC_TIMESTAMP")return"default (UTC_TIMESTAMP)";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(l))return`default ${l}`;let g=`'${o.replace(/'/g,"''")}'`;if(s.type==="text"||s.type==="json"||s.type==="enum"&&!s.enumValues?.length)return`default (${g})`;return`default ${g}`}else if(typeof o==="number"||typeof o==="bigint")return`default ${o}`;else if(typeof o==="boolean")return`default ${o?1:0}`;else if(o instanceof Date)return`default '${o.toISOString()}'`;return""}createEnumType(s,o){return""}foreignKeyClauses(s){return s.columns.filter((o)=>o.references).map((o)=>{let l=o.references,d=`${s.table}_${o.name}_fk`,g=`CONSTRAINT ${this.quoteIdentifier(d)} FOREIGN KEY (${this.quoteIdentifier(o.name)}) REFERENCES ${this.quoteIdentifier(l.table)}(${this.quoteIdentifier(l.column)})`;if(l.onDelete)g+=` ON DELETE ${l.onDelete.toUpperCase()}`;if(l.onUpdate)g+=` ON UPDATE ${l.onUpdate.toUpperCase()}`;return g})}createTable(s){let o=[...s.columns.map((l)=>this.renderColumn(l)),...this.foreignKeyClauses(s)];return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(s.table)} (
3
3
  ${o.join(`,
4
4
  `)}
5
- ) DEFAULT CHARSET=utf8mb4;`}static KEY_PREFIX_CHARACTERS=255;static MAX_KEY_BYTES=3072;static BYTES_PER_CHARACTER=4;keyPartWidth(s){let o=this.getColumnType(s).toLowerCase();if(o.includes("text")||o.includes("blob")||o==="json")return{bytes:Number.POSITIVE_INFINITY,indexableWhole:!1};let l=o.match(/^(?:var)?char\((\d+)\)$/)?.[1];if(l!==void 0)return{bytes:Number(l)*a.BYTES_PER_CHARACTER,indexableWhole:!0};return{bytes:8,indexableWhole:!0}}keyParts(s,o,l){let d=o.columns.map((x)=>{let y=l?.find((S)=>S.name===x),E=y?this.keyPartWidth(y):{bytes:0,indexableWhole:!0},D=!E.indexableWhole;return{name:x,prefixed:D,bytes:D?a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER:E.bytes,narrowable:!E.indexableWhole||E.bytes>a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}}),g=()=>d.reduce((x,y)=>x+y.bytes,0);while(g()>a.MAX_KEY_BYTES){let x=d.filter((y)=>y.narrowable&&!y.prefixed).sort((y,E)=>E.bytes-y.bytes)[0];if(!x)throw Error(`[migrations] Index '${o.name}' on table '${s}' needs ${g()} bytes of key, over MySQL's ${a.MAX_KEY_BYTES}. Every column in it is already at its ${a.KEY_PREFIX_CHARACTERS}-character prefix, so shorten a column or drop one from the index.`);x.prefixed=!0,x.bytes=a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}return d.map((x)=>x.prefixed?`${this.quoteIdentifier(x.name)}(${a.KEY_PREFIX_CHARACTERS})`:this.quoteIdentifier(x.name))}createIndex(s,o,l){if(o.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on MySQL. Index '${o.name}' on table '${s}' uses WHERE clause: ${o.where}`);let d=o.type==="unique"?"UNIQUE ":"",g=Ct(s,o.name),x=this.keyParts(s,o,l).join(", ");return`CREATE ${d}INDEX ${this.quoteIdentifier(g)} ON ${this.quoteIdentifier(s)} (${x});`}addForeignKey(s,o,l,d,g,x,y=[]){let E=`${s}_${o}_fk`,D=`ALTER TABLE ${this.quoteIdentifier(s)} ADD CONSTRAINT ${this.quoteIdentifier(E)} FOREIGN KEY (${this.quoteIdentifier(o)}) REFERENCES ${this.quoteIdentifier(l)}(${this.quoteIdentifier(d)})`;if(g)D+=` ON DELETE ${g.toUpperCase()}`;if(x)D+=` ON UPDATE ${x.toUpperCase()}`;let S=[...new Set(y)].map((v)=>`ALTER TABLE ${this.quoteIdentifier(s)} DROP FOREIGN KEY ${this.quoteIdentifier(v)};`).join(`
5
+ ) DEFAULT CHARSET=utf8mb4;`}static KEY_PREFIX_CHARACTERS=255;static MAX_KEY_BYTES=3072;static BYTES_PER_CHARACTER=4;keyPartWidth(s){let o=this.getColumnType(s).toLowerCase();if(o.includes("text")||o.includes("blob")||o==="json")return{bytes:Number.POSITIVE_INFINITY,indexableWhole:!1};let l=o.match(/^(?:var)?char\((\d+)\)$/)?.[1];if(l!==void 0)return{bytes:Number(l)*a.BYTES_PER_CHARACTER,indexableWhole:!0};return{bytes:8,indexableWhole:!0}}keyParts(s,o,l){let d=o.columns.map((x)=>{let y=l?.find((S)=>S.name===x),D=y?this.keyPartWidth(y):{bytes:0,indexableWhole:!0},E=!D.indexableWhole;return{name:x,prefixed:E,bytes:E?a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER:D.bytes,narrowable:!D.indexableWhole||D.bytes>a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}}),g=()=>d.reduce((x,y)=>x+y.bytes,0);while(g()>a.MAX_KEY_BYTES){let x=d.filter((y)=>y.narrowable&&!y.prefixed).sort((y,D)=>D.bytes-y.bytes)[0];if(!x)throw Error(`[migrations] Index '${o.name}' on table '${s}' needs ${g()} bytes of key, over MySQL's ${a.MAX_KEY_BYTES}. Every column in it is already at its ${a.KEY_PREFIX_CHARACTERS}-character prefix, so shorten a column or drop one from the index.`);x.prefixed=!0,x.bytes=a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}return d.map((x)=>x.prefixed?`${this.quoteIdentifier(x.name)}(${a.KEY_PREFIX_CHARACTERS})`:this.quoteIdentifier(x.name))}createIndex(s,o,l){if(o.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on MySQL. Index '${o.name}' on table '${s}' uses WHERE clause: ${o.where}`);let d=o.type==="unique"?"UNIQUE ":"",g=Ct(s,o.name),x=this.keyParts(s,o,l).join(", ");return`CREATE ${d}INDEX ${this.quoteIdentifier(g)} ON ${this.quoteIdentifier(s)} (${x});`}addForeignKey(s,o,l,d,g,x,y=[]){let D=`${s}_${o}_fk`,E=`ALTER TABLE ${this.quoteIdentifier(s)} ADD CONSTRAINT ${this.quoteIdentifier(D)} FOREIGN KEY (${this.quoteIdentifier(o)}) REFERENCES ${this.quoteIdentifier(l)}(${this.quoteIdentifier(d)})`;if(g)E+=` ON DELETE ${g.toUpperCase()}`;if(x)E+=` ON UPDATE ${x.toUpperCase()}`;let S=[...new Set(y)].map((v)=>`ALTER TABLE ${this.quoteIdentifier(s)} DROP FOREIGN KEY ${this.quoteIdentifier(v)};`).join(`
6
6
  `);return S?`${S}
7
- ${D};`:`${D};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);return`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${d.join(" ")};`}modifyColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);let x=this.getAutoIncrementClause(o);if(x)d.push(x);return`ALTER TABLE ${this.quoteIdentifier(s)} MODIFY COLUMN ${d.join(" ")};`}renameColumn(s,o,l){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME COLUMN ${this.quoteIdentifier(o)} TO ${this.quoteIdentifier(l)};`}renameTable(s,o){return`RENAME TABLE ${this.quoteIdentifier(s)} TO ${this.quoteIdentifier(o)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; MySQL uses in-place ALTER.")}dropTable(s){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(s)}`}dropColumn(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} DROP COLUMN ${this.quoteIdentifier(o)};`}dropIndex(s,o){let l=Ct(s,o);return`DROP INDEX ${this.quoteIdentifier(l)} ON ${this.quoteIdentifier(s)};`}dropEnumType(s){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
7
+ ${E};`:`${E};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);return`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${d.join(" ")};`}modifyColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);let x=this.getAutoIncrementClause(o);if(x)d.push(x);return`ALTER TABLE ${this.quoteIdentifier(s)} MODIFY COLUMN ${d.join(" ")};`}renameColumn(s,o,l){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME COLUMN ${this.quoteIdentifier(o)} TO ${this.quoteIdentifier(l)};`}renameTable(s,o){return`RENAME TABLE ${this.quoteIdentifier(s)} TO ${this.quoteIdentifier(o)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; MySQL uses in-place ALTER.")}dropTable(s){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(s)}`}dropColumn(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} DROP COLUMN ${this.quoteIdentifier(o)};`}dropIndex(s,o){let l=Ct(s,o);return`DROP INDEX ${this.quoteIdentifier(l)} ON ${this.quoteIdentifier(s)};`}dropEnumType(s){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
8
8
  id INT AUTO_INCREMENT PRIMARY KEY,
9
9
  migration VARCHAR(255) NOT NULL UNIQUE,
10
10
  executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
11
11
  )`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES (?)"}jsonExtract(s,o){return`JSON_UNQUOTE(JSON_EXTRACT(${s}, CONCAT('$.', ${o})))`}dateBucket(s,o,l=0){let d=l===0?s:`DATE_ADD(${s}, INTERVAL ${l} HOUR)`;switch(o){case"hour":return`DATE_FORMAT(${d}, '%Y-%m-%dT%H:00:00.000Z')`;case"week":return`DATE_FORMAT(DATE_SUB(${d}, INTERVAL WEEKDAY(${d}) DAY), '%Y-%m-%dT00:00:00.000Z')`;case"month":return`DATE_FORMAT(${d}, '%Y-%m-01T00:00:00.000Z')`;case"year":return`DATE_FORMAT(${d}, '%Y-01-01T00:00:00.000Z')`;case"day":default:return`DATE_FORMAT(${d}, '%Y-%m-%dT00:00:00.000Z')`}}booleanLiteral(s){return s?"TRUE":"FALSE"}renderColumn(s){let o=this.getColumnType(s),l=[this.quoteIdentifier(s.name),o];if(s.isPrimaryKey){l.push("PRIMARY KEY");let g=this.getAutoIncrementClause(s);if(g)l.push(g)}if(!s.isNullable&&!s.isPrimaryKey)l.push("not null");let d=this.getDefaultValue(s);if(d)l.push(d);return l.join(" ")}}class ce{quoteIdentifier(s){return`"${s.replace(/"/g,'""')}"`}getColumnType(s){switch(s.type){case"string":return`varchar(${s.maxLength??255})`;case"text":return"text";case"boolean":return"boolean";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"timestamp";case"timestamptz":return"timestamptz";case"json":return"jsonb";case"enum":if(s.enumValues&&s.enumValues.length>0)return s.enumTypeName?this.quoteIdentifier(s.enumTypeName):"text";return"text";default:return"text"}}getPrimaryKeyType(s){switch(s.type){case"integer":return"SERIAL";case"bigint":return"BIGSERIAL";default:return this.getColumnType(s)}}getAutoIncrementClause(s){return""}getDefaultValue(s){if(!s.hasDefault||s.defaultValue===void 0)return"";let o=s.defaultValue;if(typeof o==="string"){let l=o.toUpperCase();if(l==="UTC_TIMESTAMP")return"default (now() AT TIME ZONE 'utc')";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(l))return`default ${l}`;return`default '${o.replace(/'/g,"''")}'`}else if(typeof o==="number"||typeof o==="bigint")return`default ${o}`;else if(typeof o==="boolean")return`default ${o?"true":"false"}`;else if(o instanceof Date)return`default '${o.toISOString()}'`;return""}createEnumType(s,o){let l=o.map((d)=>`'${d.replace(/'/g,"''")}'`).join(", ");return`CREATE TYPE ${this.quoteIdentifier(s)} AS ENUM (${l});`}createTable(s){let o=s.columns.map((l)=>this.renderColumn(l)).join(`,
12
12
  `);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(s.table)} (
13
13
  ${o}
14
- );`}createIndex(s,o){let l=o.type==="unique"?"UNIQUE ":"",d=Ct(s,o.name),g=o.columns.map((y)=>this.quoteIdentifier(y)).join(", "),x=o.where?` WHERE ${o.where}`:"";return`CREATE ${l}INDEX IF NOT EXISTS ${this.quoteIdentifier(d)} ON ${this.quoteIdentifier(s)} (${g})${x};`}addForeignKey(s,o,l,d,g,x,y=[]){let E=`${s}_${o}_fk`,D=`ALTER TABLE ${this.quoteIdentifier(s)} ADD CONSTRAINT ${this.quoteIdentifier(E)} FOREIGN KEY (${this.quoteIdentifier(o)}) REFERENCES ${this.quoteIdentifier(l)}(${this.quoteIdentifier(d)})`;if(g)D+=` ON DELETE ${g.toUpperCase()}`;if(x)D+=` ON UPDATE ${x.toUpperCase()}`;let S=[...new Set(y)].map((v)=>`ALTER TABLE ${this.quoteIdentifier(s)} DROP CONSTRAINT ${this.quoteIdentifier(v)};`).join(`
14
+ );`}createIndex(s,o){let l=o.type==="unique"?"UNIQUE ":"",d=Ct(s,o.name),g=o.columns.map((y)=>this.quoteIdentifier(y)).join(", "),x=o.where?` WHERE ${o.where}`:"";return`CREATE ${l}INDEX IF NOT EXISTS ${this.quoteIdentifier(d)} ON ${this.quoteIdentifier(s)} (${g})${x};`}addForeignKey(s,o,l,d,g,x,y=[]){let D=`${s}_${o}_fk`,E=`ALTER TABLE ${this.quoteIdentifier(s)} ADD CONSTRAINT ${this.quoteIdentifier(D)} FOREIGN KEY (${this.quoteIdentifier(o)}) REFERENCES ${this.quoteIdentifier(l)}(${this.quoteIdentifier(d)})`;if(g)E+=` ON DELETE ${g.toUpperCase()}`;if(x)E+=` ON UPDATE ${x.toUpperCase()}`;let S=[...new Set(y)].map((v)=>`ALTER TABLE ${this.quoteIdentifier(s)} DROP CONSTRAINT ${this.quoteIdentifier(v)};`).join(`
15
15
  `);return S?`${S}
16
- ${D};`:`${D};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);return`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${d.join(" ")};`}modifyColumn(s,o){let l=this.getColumnType(o),d=this.quoteIdentifier(s),g=this.quoteIdentifier(o.name),x=[`ALTER TABLE ${d} ALTER COLUMN ${g} DROP DEFAULT;`,`ALTER TABLE ${d} ALTER COLUMN ${g} TYPE ${l} USING ${g}::${l};`];if(!o.isPrimaryKey)x.push(`ALTER TABLE ${d} ALTER COLUMN ${g} ${o.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let y=this.getDefaultValue(o);if(y)x.push(`ALTER TABLE ${d} ALTER COLUMN ${g} SET ${y};`);return x.join(`
16
+ ${E};`:`${E};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);return`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${d.join(" ")};`}modifyColumn(s,o,l){let d=this.getColumnType(o),g=this.quoteIdentifier(s),x=this.quoteIdentifier(o.name);if(l&&this.getColumnType(l)===d&&!Nr(l,o)){let E=[];if(!o.isPrimaryKey&&l.isNullable!==o.isNullable)E.push(`ALTER TABLE ${g} ALTER COLUMN ${x} ${o.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let S=this.getDefaultValue(l),v=this.getDefaultValue(o);if(S!==v)E.push(v?`ALTER TABLE ${g} ALTER COLUMN ${x} SET ${v};`:`ALTER TABLE ${g} ALTER COLUMN ${x} DROP DEFAULT;`);if(E.length)return E.join(`
17
+ `)}let y=[`ALTER TABLE ${g} ALTER COLUMN ${x} DROP DEFAULT;`,`ALTER TABLE ${g} ALTER COLUMN ${x} TYPE ${d} USING ${x}::${d};`];if(!o.isPrimaryKey)y.push(`ALTER TABLE ${g} ALTER COLUMN ${x} ${o.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let D=this.getDefaultValue(o);if(D)y.push(`ALTER TABLE ${g} ALTER COLUMN ${x} SET ${D};`);return y.join(`
17
18
  `)}renameColumn(s,o,l){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME COLUMN ${this.quoteIdentifier(o)} TO ${this.quoteIdentifier(l)};`}renameTable(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME TO ${this.quoteIdentifier(o)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; Postgres uses in-place ALTER.")}dropTable(s){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(s)} CASCADE`}dropColumn(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} DROP COLUMN ${this.quoteIdentifier(o)};`}dropIndex(s,o){let l=Ct(s,o);return`DROP INDEX IF EXISTS ${this.quoteIdentifier(l)};`}dropEnumType(s){return`DROP TYPE IF EXISTS ${this.quoteIdentifier(s)} CASCADE`}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
18
19
  id SERIAL PRIMARY KEY,
19
20
  migration VARCHAR(255) NOT NULL UNIQUE,
20
21
  executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
21
- )`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES ($1)"}jsonExtract(s,o){return`(${s}::jsonb ->> ${o})`}dateBucket(s,o,l=0){let d=l===0?`${s}::timestamp`:`(${s}::timestamp ${l>=0?"+":"-"} interval '${Math.abs(l)} hours')`,g=o==="week"?`date_trunc('week', ${d})`:d;switch(o){case"hour":return`to_char(${g}, 'YYYY-MM-DD"T"HH24:00:00.000"Z"')`;case"month":return`to_char(${g}, 'YYYY-MM-01"T"00:00:00.000"Z"')`;case"year":return`to_char(${g}, 'YYYY-01-01"T"00:00:00.000"Z"')`;case"week":case"day":default:return`to_char(${g}, 'YYYY-MM-DD"T"00:00:00.000"Z"')`}}booleanLiteral(s){return s?"TRUE":"FALSE"}renderColumn(s){let o=s.isPrimaryKey?this.getPrimaryKeyType(s):this.getColumnType(s),l=[this.quoteIdentifier(s.name),o];if(s.isPrimaryKey)l.push("PRIMARY KEY");if(!s.isNullable&&!s.isPrimaryKey)l.push("not null");let d=this.getDefaultValue(s);if(d)l.push(d);if(s.references){let g=`REFERENCES ${this.quoteIdentifier(s.references.table)}(${this.quoteIdentifier(s.references.column)})`;if(s.references.onDelete)g+=` ON DELETE ${s.references.onDelete.toUpperCase()}`;if(s.references.onUpdate)g+=` ON UPDATE ${s.references.onUpdate.toUpperCase()}`;l.push(g)}return l.join(" ")}}class ue extends a{createTable(s){let o=s.columns.map((x)=>this.renderColumn(x)).join(`,
22
+ )`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES ($1)"}jsonExtract(s,o){return`(${s}::jsonb ->> ${o})`}dateBucket(s,o,l=0){let d=l===0?`${s}::timestamp`:`(${s}::timestamp ${l>=0?"+":"-"} interval '${Math.abs(l)} hours')`,g=o==="week"?`date_trunc('week', ${d})`:d;switch(o){case"hour":return`to_char(${g}, 'YYYY-MM-DD"T"HH24:00:00.000"Z"')`;case"month":return`to_char(${g}, 'YYYY-MM-01"T"00:00:00.000"Z"')`;case"year":return`to_char(${g}, 'YYYY-01-01"T"00:00:00.000"Z"')`;case"week":case"day":default:return`to_char(${g}, 'YYYY-MM-DD"T"00:00:00.000"Z"')`}}booleanLiteral(s){return s?"TRUE":"FALSE"}renderColumn(s){let o=s.isPrimaryKey?this.getPrimaryKeyType(s):this.getColumnType(s),l=[this.quoteIdentifier(s.name),o];if(s.isPrimaryKey)l.push("PRIMARY KEY");if(!s.isNullable&&!s.isPrimaryKey)l.push("not null");let d=this.getDefaultValue(s);if(d)l.push(d);if(s.references){let g=`REFERENCES ${this.quoteIdentifier(s.references.table)}(${this.quoteIdentifier(s.references.column)})`;if(s.references.onDelete)g+=` ON DELETE ${s.references.onDelete.toUpperCase()}`;if(s.references.onUpdate)g+=` ON UPDATE ${s.references.onUpdate.toUpperCase()}`;l.push(g)}return l.join(" ")}}function Nr(s,o){return JSON.stringify(s.enumValues??[])!==JSON.stringify(o.enumValues??[])}class ue extends a{createTable(s){let o=s.columns.map((x)=>this.renderColumn(x)).join(`,
22
23
  `),l=[];if(s.tableKind!=="reference"){let x=s.shardKey?.length?s.shardKey:s.columns.filter((y)=>y.isPrimaryKey).map((y)=>y.name);if(x&&x.length>0)l.push(`SHARD KEY (${x.map((y)=>this.quoteIdentifier(y)).join(", ")})`)}if(s.tableKind!=="rowstore"&&s.tableKind!=="reference"){let x=s.sortKey?.length?s.sortKey:void 0;l.push(`SORT KEY (${(x??[]).map((y)=>this.quoteIdentifier(y)).join(", ")})`)}let d=[o,...l].join(`,
23
24
  `);return`CREATE${this.tableKindSuffix(s.tableKind)} TABLE IF NOT EXISTS ${this.quoteIdentifier(s.table)} (
24
25
  ${d}
@@ -31,7 +32,7 @@ ${D};`:`${D};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifie
31
32
  );`}createIndex(s,o){let l=o.type==="unique"?"UNIQUE ":"",d=Ct(s,o.name),g=o.columns.map((y)=>this.quoteIdentifier(y)).join(", "),x=o.where?` WHERE ${o.where}`:"";return`CREATE ${l}INDEX IF NOT EXISTS ${this.quoteIdentifier(d)} ON ${this.quoteIdentifier(s)} (${g})${x};`}addForeignKey(s,o,l,d,g,x){return""}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifier(o.name),l];if(!o.isNullable&&!o.isPrimaryKey)d.push("not null");let g=this.getDefaultValue(o);if(g)d.push(g);return d.push(...this.referencesClause(o)),`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${d.join(" ")};`}modifyColumn(s,o){return`-- SQLite does not support ALTER COLUMN; a table rebuild is required to change ${this.quoteIdentifier(s)}.${this.quoteIdentifier(o.name)}`}renameColumn(s,o,l){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME COLUMN ${this.quoteIdentifier(o)} TO ${this.quoteIdentifier(l)};`}renameTable(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME TO ${this.quoteIdentifier(o)};`}rebuildTable(s){let{target:o,tempName:l,columnSource:d}=s,g=(S)=>this.quoteIdentifier(S),x=o.columns.map((S)=>this.renderColumn(S)).join(`,
32
33
  `),y=`CREATE TABLE ${g(l)} (
33
34
  ${x}
34
- );`,E=o.columns.map((S)=>S.name).filter((S)=>d[S]!==void 0),D=["PRAGMA foreign_keys=OFF;","BEGIN;",y];if(E.length>0){let S=E.map(g).join(", "),v=E.map((Q)=>g(d[Q])).join(", ");D.push(`INSERT INTO ${g(l)} (${S}) SELECT ${v} FROM ${g(o.table)};`)}D.push(`DROP TABLE ${g(o.table)};`),D.push(`ALTER TABLE ${g(l)} RENAME TO ${g(o.table)};`);for(let S of o.indexes)D.push(this.createIndex(o.table,S));return D.push("PRAGMA foreign_key_check;"),D.push("COMMIT;"),D.push("PRAGMA foreign_keys=ON;"),D.join(`
35
+ );`,D=o.columns.map((S)=>S.name).filter((S)=>d[S]!==void 0),E=["PRAGMA foreign_keys=OFF;","BEGIN;",y];if(D.length>0){let S=D.map(g).join(", "),v=D.map((Q)=>g(d[Q])).join(", ");E.push(`INSERT INTO ${g(l)} (${S}) SELECT ${v} FROM ${g(o.table)};`)}E.push(`DROP TABLE ${g(o.table)};`),E.push(`ALTER TABLE ${g(l)} RENAME TO ${g(o.table)};`);for(let S of o.indexes)E.push(this.createIndex(o.table,S));return E.push("PRAGMA foreign_key_check;"),E.push("COMMIT;"),E.push("PRAGMA foreign_keys=ON;"),E.join(`
35
36
  `)}dropTable(s){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(s)}`}dropColumn(s,o){return`ALTER TABLE ${this.quoteIdentifier(s)} DROP COLUMN ${this.quoteIdentifier(o)};`}dropIndex(s,o){let l=Ct(s,o);return`DROP INDEX IF EXISTS ${this.quoteIdentifier(l)};`}dropEnumType(s){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
36
37
  id INTEGER PRIMARY KEY AUTOINCREMENT,
37
38
  migration TEXT NOT NULL UNIQUE,
@@ -47,7 +48,7 @@ ${D};`:`${D};`}addColumn(s,o){let l=this.getColumnType(o),d=[this.quoteIdentifie
47
48
  `).execute();for(let y=0;y<100;y++)await r.unsafe(`
48
49
  INSERT INTO bench_users (name, email, created_at)
49
50
  VALUES (?, ?, ?)
50
- `,[`User ${y}`,`user${y}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(y){throw console.error("-- Failed to setup test table:",y),y}let g=[];if(l.includes("select")){let y=[];for(let E=0;E<o;E++){let D=performance.now();await d.selectFrom("bench_users").where({active:1}).limit(10).execute(),y.push(performance.now()-D)}g.push({operation:"SELECT with WHERE + LIMIT",avgTime:y.reduce((E,D)=>E+D,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("select")){let y=[];for(let E=0;E<o;E++){let D=performance.now();await d.selectFrom("bench_users").where({id:1}).first(),y.push(performance.now()-D)}g.push({operation:"SELECT by ID (first)",avgTime:y.reduce((E,D)=>E+D,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("count")){let y=[];for(let E=0;E<o;E++){let D=performance.now();await d.selectFrom("bench_users").count(),y.push(performance.now()-D)}g.push({operation:"COUNT",avgTime:y.reduce((E,D)=>E+D,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("insert")){let y=[];for(let E=0;E<o;E++){let D=performance.now();await d.insertInto("bench_users").values({name:`Bench User ${E}`,email:`bench${E}@example.com`,created_at:new Date().toISOString()}).execute(),y.push(performance.now()-D)}g.push({operation:"INSERT",avgTime:y.reduce((E,D)=>E+D,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("update")){let y=[];for(let E=0;E<o;E++){let D=performance.now();await d.updateTable("bench_users").set({active:0}).where({id:1}).execute(),y.push(performance.now()-D)}g.push({operation:"UPDATE by ID",avgTime:y.reduce((E,D)=>E+D,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("delete")){let y=[],E=[];for(let D=0;D<o;D++){let S=await d.insertInto("bench_users").values({name:"To Delete",email:`delete${D}@example.com`,created_at:new Date().toISOString()}).execute();E.push(S)}for(let D=0;D<o;D++){let S=performance.now();await d.deleteFrom("bench_users").where({id:E[D]}).execute(),y.push(performance.now()-S)}g.push({operation:"DELETE by ID",avgTime:y.reduce((D,S)=>D+S,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}console.log("-- Benchmark Results"),console.log();let x=Math.max(...g.map((y)=>y.operation.length));console.log("Operation".padEnd(x+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(x+2+12+12+12+12));for(let y of g){let E=y.operation.padEnd(x+2),D=y.avgTime.toFixed(3).padStart(12),S=y.minTime.toFixed(3).padStart(12),v=y.maxTime.toFixed(3).padStart(12),Q=(1000/y.avgTime).toFixed(0).padStart(12);console.log(`${E}${D}${S}${v}${Q}`)}console.log();try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(y){console.error("-- Warning: Failed to cleanup test table:",y)}}async function z(){console.log("-- Clearing query cache..."),xe(),console.log("-- \u2713 Query cache cleared")}async function Y(){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 X(s={}){if(console.log("-- Configuring query cache..."),console.log(),s.size!==void 0){let o=Number(s.size);if(Number.isNaN(o)||o<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");ve(o),console.log(`-- \u2713 Cache max size set to: ${o}`)}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")}import Xt from"process";import{createInterface as Nr}from"readline";async function O(){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 s=i(),o=Nr({input:Xt.stdin,output:Xt.stdout,prompt:"qb> "}),l="",d=!1,g=`
51
+ `,[`User ${y}`,`user${y}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(y){throw console.error("-- Failed to setup test table:",y),y}let g=[];if(l.includes("select")){let y=[];for(let D=0;D<o;D++){let E=performance.now();await d.selectFrom("bench_users").where({active:1}).limit(10).execute(),y.push(performance.now()-E)}g.push({operation:"SELECT with WHERE + LIMIT",avgTime:y.reduce((D,E)=>D+E,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("select")){let y=[];for(let D=0;D<o;D++){let E=performance.now();await d.selectFrom("bench_users").where({id:1}).first(),y.push(performance.now()-E)}g.push({operation:"SELECT by ID (first)",avgTime:y.reduce((D,E)=>D+E,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("count")){let y=[];for(let D=0;D<o;D++){let E=performance.now();await d.selectFrom("bench_users").count(),y.push(performance.now()-E)}g.push({operation:"COUNT",avgTime:y.reduce((D,E)=>D+E,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("insert")){let y=[];for(let D=0;D<o;D++){let E=performance.now();await d.insertInto("bench_users").values({name:`Bench User ${D}`,email:`bench${D}@example.com`,created_at:new Date().toISOString()}).execute(),y.push(performance.now()-E)}g.push({operation:"INSERT",avgTime:y.reduce((D,E)=>D+E,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("update")){let y=[];for(let D=0;D<o;D++){let E=performance.now();await d.updateTable("bench_users").set({active:0}).where({id:1}).execute(),y.push(performance.now()-E)}g.push({operation:"UPDATE by ID",avgTime:y.reduce((D,E)=>D+E,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}if(l.includes("delete")){let y=[],D=[];for(let E=0;E<o;E++){let S=await d.insertInto("bench_users").values({name:"To Delete",email:`delete${E}@example.com`,created_at:new Date().toISOString()}).execute();D.push(S)}for(let E=0;E<o;E++){let S=performance.now();await d.deleteFrom("bench_users").where({id:D[E]}).execute(),y.push(performance.now()-S)}g.push({operation:"DELETE by ID",avgTime:y.reduce((E,S)=>E+S,0)/y.length,minTime:Math.min(...y),maxTime:Math.max(...y),iterations:o})}console.log("-- Benchmark Results"),console.log();let x=Math.max(...g.map((y)=>y.operation.length));console.log("Operation".padEnd(x+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(x+2+12+12+12+12));for(let y of g){let D=y.operation.padEnd(x+2),E=y.avgTime.toFixed(3).padStart(12),S=y.minTime.toFixed(3).padStart(12),v=y.maxTime.toFixed(3).padStart(12),Q=(1000/y.avgTime).toFixed(0).padStart(12);console.log(`${D}${E}${S}${v}${Q}`)}console.log();try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(y){console.error("-- Warning: Failed to cleanup test table:",y)}}async function z(){console.log("-- Clearing query cache..."),xe(),console.log("-- \u2713 Query cache cleared")}async function Y(){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 X(s={}){if(console.log("-- Configuring query cache..."),console.log(),s.size!==void 0){let o=Number(s.size);if(Number.isNaN(o)||o<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");ve(o),console.log(`-- \u2713 Cache max size set to: ${o}`)}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")}import Xt from"process";import{createInterface as _r}from"readline";async function O(){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 s=i(),o=_r({input:Xt.stdin,output:Xt.stdout,prompt:"qb> "}),l="",d=!1,g=`
51
52
  Available Commands:
52
53
  .help Show this help message
53
54
  .exit Exit the console
@@ -66,57 +67,57 @@ Tips:
66
67
  - Use 'await' for async operations
67
68
  - Multi-line input: end with \\ to continue on next line
68
69
  - Press Enter on an empty line to execute multi-line input
69
- `,x=async(E)=>{try{let v=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${E})`)(s);if(v!==void 0)if(Array.isArray(v))console.log(`-- ${v.length} row(s) returned`),console.table(v);else if(typeof v==="object"&&v!==null)console.log(v);else console.log(v)}catch(D){console.error("Error:",D.message)}},y=async(E)=>{let D=E.trim();if(D.startsWith(".")){let S=D.toLowerCase();if(S===".exit"||S===".quit")console.log("Goodbye!"),o.close(),Xt.exit(0);else if(S===".help")console.log(g);else if(S===".clear")console.clear();else if(S===".tables")try{let v=await s.unsafe(`
70
+ `,x=async(D)=>{try{let v=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${D})`)(s);if(v!==void 0)if(Array.isArray(v))console.log(`-- ${v.length} row(s) returned`),console.table(v);else if(typeof v==="object"&&v!==null)console.log(v);else console.log(v)}catch(E){console.error("Error:",E.message)}},y=async(D)=>{let E=D.trim();if(E.startsWith(".")){let S=E.toLowerCase();if(S===".exit"||S===".quit")console.log("Goodbye!"),o.close(),Xt.exit(0);else if(S===".help")console.log(g);else if(S===".clear")console.clear();else if(S===".tables")try{let v=await s.unsafe(`
70
71
  SELECT name FROM sqlite_master
71
72
  WHERE type = 'table'
72
73
  AND name NOT LIKE 'sqlite_%'
73
74
  ORDER BY name
74
- `);if(v.length>0){console.log("Tables:");for(let Q of v)console.log(` - ${Q.name}`)}else console.log("No tables found")}catch(v){console.error("Error listing tables:",v.message)}else console.log(`Unknown command: ${D}`),console.log("Type .help for available commands");return}if(D.endsWith("\\")){d=!0,l+=`${D.slice(0,-1)}
75
- `;return}if(d){if(D==="")await x(l),l="",d=!1;else l+=`${D}
76
- `;return}if(D)await x(D)};o.on("line",async(E)=>{await y(E),o.prompt()}),o.on("SIGINT",()=>{if(d)console.log(`
75
+ `);if(v.length>0){console.log("Tables:");for(let Q of v)console.log(` - ${Q.name}`)}else console.log("No tables found")}catch(v){console.error("Error listing tables:",v.message)}else console.log(`Unknown command: ${E}`),console.log("Type .help for available commands");return}if(E.endsWith("\\")){d=!0,l+=`${E.slice(0,-1)}
76
+ `;return}if(d){if(E==="")await x(l),l="",d=!1;else l+=`${E}
77
+ `;return}if(E)await x(E)};o.on("line",async(D)=>{await y(D),o.prompt()}),o.on("SIGINT",()=>{if(d)console.log(`
77
78
  -- Multi-line input cancelled`),l="",d=!1,o.prompt();else console.log(`
78
79
  -- Type .exit to quit`),o.prompt()}),o.on("close",()=>{console.log(`
79
- Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSync as _r,readFileSync as $r,writeFileSync as Qt}from"fs";async function ee(s,o={}){let l=o.format||"json",d=o.output||`${s}.${l}`,g=o.limit;if(console.log(`-- Exporting data from table: ${s}`),console.log(`-- Format: ${l}`),console.log(`-- Output: ${d}`),g)console.log(`-- Limit: ${g} rows`);console.log();try{let y=i().selectFrom(s);if(g)y=y.limit(g);let E=await y.execute();if(console.log(`-- Retrieved ${E.length} rows`),l==="json")Qt(d,JSON.stringify(E,null,2)),console.log(`-- \u2713 Exported to JSON: ${d}`);else if(l==="csv"){if(E.length===0){Qt(d,""),console.log(`-- \u2713 Exported to CSV: ${d} (empty)`);return}let D=Object.keys(E[0]),S=[D.join(",")];for(let v of E){let Q=D.map((G)=>{let Re=v[G];if(Re===null||Re===void 0)return"";let Ne=String(Re);if(Ne.includes(",")||Ne.includes('"')||Ne.includes(`
80
+ Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSync as $r,readFileSync as vr,writeFileSync as Qt}from"fs";async function ee(s,o={}){let l=o.format||"json",d=o.output||`${s}.${l}`,g=o.limit;if(console.log(`-- Exporting data from table: ${s}`),console.log(`-- Format: ${l}`),console.log(`-- Output: ${d}`),g)console.log(`-- Limit: ${g} rows`);console.log();try{let y=i().selectFrom(s);if(g)y=y.limit(g);let D=await y.execute();if(console.log(`-- Retrieved ${D.length} rows`),l==="json")Qt(d,JSON.stringify(D,null,2)),console.log(`-- \u2713 Exported to JSON: ${d}`);else if(l==="csv"){if(D.length===0){Qt(d,""),console.log(`-- \u2713 Exported to CSV: ${d} (empty)`);return}let E=Object.keys(D[0]),S=[E.join(",")];for(let v of D){let Q=E.map((G)=>{let Re=v[G];if(Re===null||Re===void 0)return"";let Ne=String(Re);if(Ne.includes(",")||Ne.includes('"')||Ne.includes(`
80
81
  `))return`"${Ne.replace(/"/g,'""')}"`;return Ne});S.push(Q.join(","))}Qt(d,S.join(`
81
- `)),console.log(`-- \u2713 Exported to CSV: ${d}`)}else if(l==="sql"){let D=[];for(let S of E){let v=Object.keys(S),Q=v.map((G)=>{let Re=S[G];if(Re===null||Re===void 0)return"NULL";if(typeof Re==="number")return String(Re);return`'${String(Re).replace(/'/g,"''")}'`});D.push(`INSERT INTO ${s} (${v.join(", ")}) VALUES (${Q.join(", ")});`)}Qt(d,D.join(`
82
- `)),console.log(`-- \u2713 Exported to SQL: ${d}`)}}catch(x){throw console.error(`-- Failed to export data from ${s}:`,x),x}}async function te(s,o,l={}){if(!_r(o))throw console.error(`-- File not found: ${o}`),Error(`File not found: ${o}`);let d=l.format||(o.endsWith(".json")?"json":"csv"),g=l.truncate??!1;console.log(`-- Importing data into table: ${s}`),console.log(`-- Format: ${d}`),console.log(`-- File: ${o}`),console.log(`-- Truncate: ${g}`),console.log();try{let x=i();if(g)await x.deleteFrom(s).execute(),console.log("-- Table truncated");let y=$r(o,"utf8"),E=[];if(d==="json"){if(E=JSON.parse(y),!Array.isArray(E))throw TypeError("JSON file must contain an array of objects")}else if(d==="csv"){let v=y.split(`
83
- `).filter((G)=>G.trim());if(v.length<2){console.log("-- No data to import (CSV is empty or has only headers)");return}let Q=v[0].split(",").map((G)=>G.trim());for(let G=1;G<v.length;G++){let Re=v[G].split(",").map((Ce)=>Ce.trim()),Ne={};for(let Ce=0;Ce<Q.length;Ce++){let _e=Re[Ce];if(_e.startsWith('"')&&_e.endsWith('"'))_e=_e.slice(1,-1).replace(/""/g,'"');if(_e==="")_e=null;else if(!Number.isNaN(Number(_e)))_e=Number(_e);Ne[Q[Ce]]=_e}E.push(Ne)}}if(E.length===0){console.log("-- No data to import");return}let D=100,S=0;for(let v=0;v<E.length;v+=D){let Q=E.slice(v,v+D);await x.insertInto(s).values(Q).execute(),S+=Q.length,console.log(`-- Imported ${S}/${E.length} rows...`)}console.log(`-- \u2713 Successfully imported ${E.length} rows`)}catch(x){throw console.error(`-- Failed to import data into ${s}:`,x),x}}async function ne(s={}){let o=e.dialect||"postgres",l=s.output||`dump-${Date.now()}.sql`,d=s.tables?.split(",").map((g)=>g.trim());if(console.log("-- Dumping database"),console.log(`-- Dialect: ${o}`),console.log(`-- Output: ${l}`),d)console.log(`-- Tables: ${d.join(", ")}`);console.log();try{let g=i(),x=[];if(o==="sqlite")x=(await g.unsafe(`
82
+ `)),console.log(`-- \u2713 Exported to CSV: ${d}`)}else if(l==="sql"){let E=[];for(let S of D){let v=Object.keys(S),Q=v.map((G)=>{let Re=S[G];if(Re===null||Re===void 0)return"NULL";if(typeof Re==="number")return String(Re);return`'${String(Re).replace(/'/g,"''")}'`});E.push(`INSERT INTO ${s} (${v.join(", ")}) VALUES (${Q.join(", ")});`)}Qt(d,E.join(`
83
+ `)),console.log(`-- \u2713 Exported to SQL: ${d}`)}}catch(x){throw console.error(`-- Failed to export data from ${s}:`,x),x}}async function te(s,o,l={}){if(!$r(o))throw console.error(`-- File not found: ${o}`),Error(`File not found: ${o}`);let d=l.format||(o.endsWith(".json")?"json":"csv"),g=l.truncate??!1;console.log(`-- Importing data into table: ${s}`),console.log(`-- Format: ${d}`),console.log(`-- File: ${o}`),console.log(`-- Truncate: ${g}`),console.log();try{let x=i();if(g)await x.deleteFrom(s).execute(),console.log("-- Table truncated");let y=vr(o,"utf8"),D=[];if(d==="json"){if(D=JSON.parse(y),!Array.isArray(D))throw TypeError("JSON file must contain an array of objects")}else if(d==="csv"){let v=y.split(`
84
+ `).filter((G)=>G.trim());if(v.length<2){console.log("-- No data to import (CSV is empty or has only headers)");return}let Q=v[0].split(",").map((G)=>G.trim());for(let G=1;G<v.length;G++){let Re=v[G].split(",").map((Ce)=>Ce.trim()),Ne={};for(let Ce=0;Ce<Q.length;Ce++){let _e=Re[Ce];if(_e.startsWith('"')&&_e.endsWith('"'))_e=_e.slice(1,-1).replace(/""/g,'"');if(_e==="")_e=null;else if(!Number.isNaN(Number(_e)))_e=Number(_e);Ne[Q[Ce]]=_e}D.push(Ne)}}if(D.length===0){console.log("-- No data to import");return}let E=100,S=0;for(let v=0;v<D.length;v+=E){let Q=D.slice(v,v+E);await x.insertInto(s).values(Q).execute(),S+=Q.length,console.log(`-- Imported ${S}/${D.length} rows...`)}console.log(`-- \u2713 Successfully imported ${D.length} rows`)}catch(x){throw console.error(`-- Failed to import data into ${s}:`,x),x}}async function ne(s={}){let o=e.dialect||"postgres",l=s.output||`dump-${Date.now()}.sql`,d=s.tables?.split(",").map((g)=>g.trim());if(console.log("-- Dumping database"),console.log(`-- Dialect: ${o}`),console.log(`-- Output: ${l}`),d)console.log(`-- Tables: ${d.join(", ")}`);console.log();try{let g=i(),x=[];if(o==="sqlite")x=(await g.unsafe(`
84
85
  SELECT name FROM sqlite_master
85
86
  WHERE type = 'table'
86
87
  AND name NOT LIKE 'sqlite_%'
87
88
  ORDER BY name
88
- `)).map((D)=>D.name);else if(o==="postgres")x=(await g.unsafe(`
89
+ `)).map((E)=>E.name);else if(o==="postgres")x=(await g.unsafe(`
89
90
  SELECT table_name
90
91
  FROM information_schema.tables
91
92
  WHERE table_schema = 'public'
92
93
  AND table_type = 'BASE TABLE'
93
94
  ORDER BY table_name
94
- `)).map((D)=>D.table_name);else if(n(o))x=(await g.unsafe(`
95
+ `)).map((E)=>E.table_name);else if(n(o))x=(await g.unsafe(`
95
96
  SELECT table_name
96
97
  FROM information_schema.tables
97
98
  WHERE table_schema = DATABASE()
98
99
  AND table_type = 'BASE TABLE'
99
100
  ORDER BY table_name
100
- `)).map((D)=>D.table_name);if(d)x=x.filter((E)=>d.includes(E));if(x.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${x.length} table(s)`);let y=[];y.push("-- Database dump"),y.push(`-- Generated at: ${new Date().toISOString()}`),y.push(`-- Dialect: ${o}`),y.push("");for(let E of x){console.log(`-- Dumping table: ${E}`);let D=await g.selectFrom(E).execute();y.push(`-- Table: ${E}`),y.push(`-- Rows: ${D.length}`),y.push("");for(let S of D){let v=Object.keys(S),Q=v.map((G)=>{let Re=S[G];if(Re===null||Re===void 0)return"NULL";if(typeof Re==="number")return String(Re);return`'${String(Re).replace(/'/g,"''")}'`});y.push(`INSERT INTO ${E} (${v.join(", ")}) VALUES (${Q.join(", ")});`)}y.push("")}Qt(l,y.join(`
101
+ `)).map((E)=>E.table_name);if(d)x=x.filter((D)=>d.includes(D));if(x.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${x.length} table(s)`);let y=[];y.push("-- Database dump"),y.push(`-- Generated at: ${new Date().toISOString()}`),y.push(`-- Dialect: ${o}`),y.push("");for(let D of x){console.log(`-- Dumping table: ${D}`);let E=await g.selectFrom(D).execute();y.push(`-- Table: ${D}`),y.push(`-- Rows: ${E.length}`),y.push("");for(let S of E){let v=Object.keys(S),Q=v.map((G)=>{let Re=S[G];if(Re===null||Re===void 0)return"NULL";if(typeof Re==="number")return String(Re);return`'${String(Re).replace(/'/g,"''")}'`});y.push(`INSERT INTO ${D} (${v.join(", ")}) VALUES (${Q.join(", ")});`)}y.push("")}Qt(l,y.join(`
101
102
  `)),console.log(),console.log(`-- \u2713 Database dump saved to: ${l}`)}catch(g){throw console.error("-- Failed to dump database:",g),g}}async function _(){let s=e.dialect||"postgres",o=e.database?.database||"unknown";console.log("-- Database Information"),console.log(`-- Dialect: ${s}`),console.log(`-- Database: ${o}`),console.log();try{let l=i(),d=[],g=[];if(s==="postgres")g=(await l.unsafe(`
102
103
  SELECT table_name
103
104
  FROM information_schema.tables
104
105
  WHERE table_schema = 'public'
105
106
  AND table_type = 'BASE TABLE'
106
107
  ORDER BY table_name
107
- `)).map((E)=>E.table_name);else if(n(s))g=(await l.unsafe(`
108
+ `)).map((D)=>D.table_name);else if(n(s))g=(await l.unsafe(`
108
109
  SELECT table_name
109
110
  FROM information_schema.tables
110
111
  WHERE table_schema = DATABASE()
111
112
  AND table_type = 'BASE TABLE'
112
113
  ORDER BY table_name
113
- `)).map((E)=>E.table_name);else if(s==="sqlite")g=(await l.unsafe(`
114
+ `)).map((D)=>D.table_name);else if(s==="sqlite")g=(await l.unsafe(`
114
115
  SELECT name
115
116
  FROM sqlite_master
116
117
  WHERE type = 'table'
117
118
  AND name NOT LIKE 'sqlite_%'
118
119
  ORDER BY name
119
- `)).map((E)=>E.name);for(let y of g)try{let E=await l.unsafe(`SELECT COUNT(*) as count FROM ${y}`),D=Number(E[0]?.count||0),S=0,v=0;if(s==="postgres"){let Q=await l.unsafe(`
120
+ `)).map((D)=>D.name);for(let y of g)try{let D=await l.unsafe(`SELECT COUNT(*) as count FROM ${y}`),E=Number(D[0]?.count||0),S=0,v=0;if(s==="postgres"){let Q=await l.unsafe(`
120
121
  SELECT COUNT(*) as count
121
122
  FROM information_schema.columns
122
123
  WHERE table_name = $1
@@ -134,7 +135,7 @@ Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSy
134
135
  FROM information_schema.statistics
135
136
  WHERE table_name = ?
136
137
  AND table_schema = DATABASE()
137
- `,[y]);v=Number(G[0]?.count||0)}else if(s==="sqlite")S=(await l.unsafe(`PRAGMA table_info(${y})`)).length,v=(await l.unsafe(`PRAGMA index_list(${y})`)).length;d.push({name:y,rowCount:D,columns:S,indexes:v})}catch(E){console.error(`-- Error getting info for table ${y}:`,E)}let x=d.reduce((y,E)=>y+E.rowCount,0);if(console.log(`-- Total Tables: ${d.length}`),console.log(`-- Total Rows: ${x.toLocaleString()}`),console.log(),d.length>0){console.log("Tables:"),console.log();let y=Math.max(...d.map((S)=>S.name.length)),E=y+2,D="Table".padEnd(E)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(D),console.log("-".repeat(D.length));for(let S of d){let v=S.name.padEnd(y+2),Q=S.rowCount.toLocaleString().padStart(12),G=(S.columns||0).toString().padStart(10),Re=(S.indexes||0).toString().padStart(10);console.log(`${v}${Q}${G}${Re}`)}}else console.log("-- No tables found");return{dialect:s,database:o,tables:d,totalTables:d.length,totalRows:x}}catch(l){throw console.error("-- Failed to get database info:",l),l}}async function re(){return _()}async function I(s={}){let o=B(s.dialect),l=s.aggressive||!1;if(s.verbose)console.log(`Optimizing ${o} database${l?" (aggressive mode)":""}...`);try{if(o==="postgres"){if(s.tables&&s.tables.length>0)for(let d of s.tables){if(s.verbose)console.log(`Analyzing table: ${d}`);if(l)await r`VACUUM FULL ANALYZE ${r(d)}`;else await r`VACUUM ANALYZE ${r(d)}`}else{if(s.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(l)await r`VACUUM FULL`,await r`ANALYZE`;else await r`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(n(o)){if(s.tables&&s.tables.length>0)for(let d of s.tables){if(s.verbose)console.log(`Optimizing table: ${d}`);await r`OPTIMIZE TABLE ${r(d)}`,await r`ANALYZE TABLE ${r(d)}`}else{let d=Be(),g=await r`
138
+ `,[y]);v=Number(G[0]?.count||0)}else if(s==="sqlite")S=(await l.unsafe(`PRAGMA table_info(${y})`)).length,v=(await l.unsafe(`PRAGMA index_list(${y})`)).length;d.push({name:y,rowCount:E,columns:S,indexes:v})}catch(D){console.error(`-- Error getting info for table ${y}:`,D)}let x=d.reduce((y,D)=>y+D.rowCount,0);if(console.log(`-- Total Tables: ${d.length}`),console.log(`-- Total Rows: ${x.toLocaleString()}`),console.log(),d.length>0){console.log("Tables:"),console.log();let y=Math.max(...d.map((S)=>S.name.length)),D=y+2,E="Table".padEnd(D)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(E),console.log("-".repeat(E.length));for(let S of d){let v=S.name.padEnd(y+2),Q=S.rowCount.toLocaleString().padStart(12),G=(S.columns||0).toString().padStart(10),Re=(S.indexes||0).toString().padStart(10);console.log(`${v}${Q}${G}${Re}`)}}else console.log("-- No tables found");return{dialect:s,database:o,tables:d,totalTables:d.length,totalRows:x}}catch(l){throw console.error("-- Failed to get database info:",l),l}}async function re(){return _()}async function I(s={}){let o=B(s.dialect),l=s.aggressive||!1;if(s.verbose)console.log(`Optimizing ${o} database${l?" (aggressive mode)":""}...`);try{if(o==="postgres"){if(s.tables&&s.tables.length>0)for(let d of s.tables){if(s.verbose)console.log(`Analyzing table: ${d}`);if(l)await r`VACUUM FULL ANALYZE ${r(d)}`;else await r`VACUUM ANALYZE ${r(d)}`}else{if(s.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(l)await r`VACUUM FULL`,await r`ANALYZE`;else await r`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(n(o)){if(s.tables&&s.tables.length>0)for(let d of s.tables){if(s.verbose)console.log(`Optimizing table: ${d}`);await r`OPTIMIZE TABLE ${r(d)}`,await r`ANALYZE TABLE ${r(d)}`}else{let d=Be(),g=await r`
138
139
  SELECT table_name
139
140
  FROM information_schema.tables
140
141
  WHERE table_schema = ${d}
@@ -151,7 +152,7 @@ Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSy
151
152
  FROM sqlite_master
152
153
  WHERE type = 'table'
153
154
  AND name NOT LIKE 'sqlite_%'
154
- `).map((g)=>g.name);if(l.length===0){console.log("No tables found to drop.");return}if(s.verbose)console.log(`Found ${l.length} tables: ${l.join(", ")}`);if(o==="postgres")for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)} CASCADE`}else if(n(o)){await r`SET FOREIGN_KEY_CHECKS = 0`;for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)}`}await r`SET FOREIGN_KEY_CHECKS = 1`}else if(o==="sqlite"){await r`PRAGMA foreign_keys = OFF`;for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)}`}await r`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${l.length} tables`)}catch(l){throw console.error("Error wiping database:",l.message),l}}async function ie(s){let d=await(i().raw([s]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(d,null,2)),d}async function se(s,o={}){let l=i(),d=o.params?JSON.parse(o.params):void 0,g=await l.file(s,d);return console.log(JSON.stringify(g)),g}async function K(s,o={}){let l=e.dialect||"postgres",d=o.verbose??!0;if(d)console.log(`-- Inspecting table: ${s}`),console.log(`-- Dialect: ${l}`),console.log();try{let g=i(),x=[],y=[],E=await g.unsafe(`SELECT COUNT(*) as count FROM ${s}`),D=Number(E[0]?.count||0);if(l==="postgres"){let S=await g.unsafe(`
155
+ `).map((g)=>g.name);if(l.length===0){console.log("No tables found to drop.");return}if(s.verbose)console.log(`Found ${l.length} tables: ${l.join(", ")}`);if(o==="postgres")for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)} CASCADE`}else if(n(o)){await r`SET FOREIGN_KEY_CHECKS = 0`;for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)}`}await r`SET FOREIGN_KEY_CHECKS = 1`}else if(o==="sqlite"){await r`PRAGMA foreign_keys = OFF`;for(let d of l){if(s.verbose)console.log(`Dropping table: ${d}`);await r`DROP TABLE IF EXISTS ${r(d)}`}await r`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${l.length} tables`)}catch(l){throw console.error("Error wiping database:",l.message),l}}async function ie(s){let d=await(i().raw([s]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(d,null,2)),d}async function se(s,o={}){let l=i(),d=o.params?JSON.parse(o.params):void 0,g=await l.file(s,d);return console.log(JSON.stringify(g)),g}async function K(s,o={}){let l=e.dialect||"postgres",d=o.verbose??!0;if(d)console.log(`-- Inspecting table: ${s}`),console.log(`-- Dialect: ${l}`),console.log();try{let g=i(),x=[],y=[],D=await g.unsafe(`SELECT COUNT(*) as count FROM ${s}`),E=Number(D[0]?.count||0);if(l==="postgres"){let S=await g.unsafe(`
155
156
  SELECT
156
157
  c.column_name,
157
158
  c.data_type,
@@ -206,7 +207,7 @@ Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSy
206
207
  ORDER BY ORDINAL_POSITION
207
208
  `,[s]);for(let G of S)x.push({name:G.column_name,type:G.data_type,nullable:G.is_nullable==="YES",default:G.column_default,isPrimaryKey:G.column_key==="PRI",isForeignKey:G.column_key==="MUL"});let v=await g.unsafe(`
208
209
  SHOW INDEXES FROM ${s}
209
- `),Q=new Map;for(let G of v){let Re=G.Key_name;if(!Q.has(Re))Q.set(Re,{columns:[],unique:G.Non_unique===0});Q.get(Re).columns.push(G.Column_name)}for(let[G,Re]of Q)y.push({name:G,columns:Re.columns,unique:Re.unique})}else if(l==="sqlite"){let S=await g.unsafe(`PRAGMA table_info(${s})`);for(let Q of S)x.push({name:Q.name,type:Q.type,nullable:Q.notnull===0,default:Q.dflt_value,isPrimaryKey:Q.pk===1});let v=await g.unsafe(`PRAGMA index_list(${s})`);for(let Q of v){let G=await g.unsafe(`PRAGMA index_info(${Q.name})`);y.push({name:Q.name,columns:G.map((Re)=>Re.name),unique:Q.unique===1})}}if(d){console.log(`Table: ${s}`),console.log(`Rows: ${D.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let S=Math.max(...x.map((Ne)=>Ne.name.length),10),v=Math.max(...x.map((Ne)=>Ne.type.length),10),Q=S+2,G=v+2,Re=`${"Name".padEnd(Q)+"Type".padEnd(G)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(Re),console.log("-".repeat(Re.length));for(let Ne of x){let Ce=Ne.name.padEnd(Q),_e=Ne.type.padEnd(G),Ve=(Ne.nullable?"YES":"NO").padEnd(10),Oe=String(Ne.default||"").padEnd(20),We=[Ne.isPrimaryKey?"PK":"",Ne.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${Ce}${_e}${Ve}${Oe}${We}`)}if(console.log(),y.length>0){console.log("Indexes:"),console.log();for(let Ne of y){let Ce=Ne.unique?" (UNIQUE)":"";console.log(` - ${Ne.name}${Ce}: [${Ne.columns.join(", ")}]`)}console.log()}}return{tableName:s,rowCount:D,columns:x,indexes:y}}catch(g){throw console.error(`-- Failed to inspect table ${s}:`,g),g}}async function ae(s,o={}){return K(s,o)}async function oe(s,o={}){let l=await u({modelsDir:s}),d=$e(l);return console.log(JSON.stringify(d,null,2)),{models:l,schema:d}}function Xe(s){let o=s.toLowerCase();if(/^bool|boolean|tinyint\(1\)/.test(o))return"boolean";if(/int|serial|numeric|decimal|double|real|float|money/.test(o))return"number";if(/timestamp|datetime|date|time/.test(o))return"datetime";if(/json/.test(o))return"json";return"string"}function vr(s){if(/ies$/i.test(s))return s.replace(/ies$/i,"y");if(/ses$/i.test(s))return s.replace(/es$/i,"");if(/s$/i.test(s)&&!/ss$/i.test(s))return s.replace(/s$/i,"");return s}function kr(s){return s.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map((o)=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}function Le(s){return kr(vr(s))}async function qn(s,o){if(o==="postgres")return(await s.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name")).map((g)=>g.table_name);if(n(o))return(await s.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")).map((g)=>g.table_name??g.TABLE_NAME);return(await s.unsafe("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")).map((d)=>d.name)}async function Pr(s,o,l){if(o==="sqlite")return(await s.unsafe(`PRAGMA table_info(${l})`)).map((x)=>({name:x.name,sqlType:String(x.type||""),nullable:Number(x.notnull)===0,isPrimaryKey:Number(x.pk)>0}));if(o==="postgres")return(await s.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
210
+ `),Q=new Map;for(let G of v){let Re=G.Key_name;if(!Q.has(Re))Q.set(Re,{columns:[],unique:G.Non_unique===0});Q.get(Re).columns.push(G.Column_name)}for(let[G,Re]of Q)y.push({name:G,columns:Re.columns,unique:Re.unique})}else if(l==="sqlite"){let S=await g.unsafe(`PRAGMA table_info(${s})`);for(let Q of S)x.push({name:Q.name,type:Q.type,nullable:Q.notnull===0,default:Q.dflt_value,isPrimaryKey:Q.pk===1});let v=await g.unsafe(`PRAGMA index_list(${s})`);for(let Q of v){let G=await g.unsafe(`PRAGMA index_info(${Q.name})`);y.push({name:Q.name,columns:G.map((Re)=>Re.name),unique:Q.unique===1})}}if(d){console.log(`Table: ${s}`),console.log(`Rows: ${E.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let S=Math.max(...x.map((Ne)=>Ne.name.length),10),v=Math.max(...x.map((Ne)=>Ne.type.length),10),Q=S+2,G=v+2,Re=`${"Name".padEnd(Q)+"Type".padEnd(G)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(Re),console.log("-".repeat(Re.length));for(let Ne of x){let Ce=Ne.name.padEnd(Q),_e=Ne.type.padEnd(G),Ve=(Ne.nullable?"YES":"NO").padEnd(10),Oe=String(Ne.default||"").padEnd(20),We=[Ne.isPrimaryKey?"PK":"",Ne.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${Ce}${_e}${Ve}${Oe}${We}`)}if(console.log(),y.length>0){console.log("Indexes:"),console.log();for(let Ne of y){let Ce=Ne.unique?" (UNIQUE)":"";console.log(` - ${Ne.name}${Ce}: [${Ne.columns.join(", ")}]`)}console.log()}}return{tableName:s,rowCount:E,columns:x,indexes:y}}catch(g){throw console.error(`-- Failed to inspect table ${s}:`,g),g}}async function ae(s,o={}){return K(s,o)}async function oe(s,o={}){let l=await u({modelsDir:s}),d=$e(l);return console.log(JSON.stringify(d,null,2)),{models:l,schema:d}}function Xe(s){let o=s.toLowerCase();if(/^bool|boolean|tinyint\(1\)/.test(o))return"boolean";if(/int|serial|numeric|decimal|double|real|float|money/.test(o))return"number";if(/timestamp|datetime|date|time/.test(o))return"datetime";if(/json/.test(o))return"json";return"string"}function Pr(s){if(/ies$/i.test(s))return s.replace(/ies$/i,"y");if(/ses$/i.test(s))return s.replace(/es$/i,"");if(/s$/i.test(s)&&!/ss$/i.test(s))return s.replace(/s$/i,"");return s}function kr(s){return s.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map((o)=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}function Le(s){return kr(Pr(s))}async function qn(s,o){if(o==="postgres")return(await s.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name")).map((g)=>g.table_name);if(n(o))return(await s.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")).map((g)=>g.table_name??g.TABLE_NAME);return(await s.unsafe("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")).map((d)=>d.name)}async function Ir(s,o,l){if(o==="sqlite")return(await s.unsafe(`PRAGMA table_info(${l})`)).map((x)=>({name:x.name,sqlType:String(x.type||""),nullable:Number(x.notnull)===0,isPrimaryKey:Number(x.pk)>0}));if(o==="postgres")return(await s.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
210
211
  (SELECT COUNT(*) FROM information_schema.table_constraints tc
211
212
  JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
212
213
  WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
@@ -224,12 +225,12 @@ Goodbye!`),Xt.exit(0)}),o.prompt()}async function Z(){return O()}import{existsSy
224
225
  ${g}
225
226
  },
226
227
  })
227
- `}async function k(s={}){let o=e.dialect||"postgres",l=i(),d=s.tables?.length?s.tables:await qn(l,o),g=[];for(let x of d){let y=await Pr(l,o,x);if(!y.length)continue;g.push({table:x,modelName:Le(x),primaryKey:y.find((E)=>E.isPrimaryKey)?.name??"id",columns:y,source:Ze(x,y)})}return g}function xn(s,o,l){if(l?.enumValues&&l.enumValues.length>0)return"enum";let d=String(s||"").toLowerCase().trim(),g=d.replace(/\(.*$/,"").replace(/\s+/g," ").trim();if(n(o)&&/^tinyint\(1\)/.test(d))return"boolean";if(/^bool/.test(g))return"boolean";if(g==="int8"||g==="bigint"||g==="bigserial")return"bigint";if(/^(?:int|integer|smallint|mediumint|serial|int2|int4|tinyint)/.test(g))return"integer";if(/^(?:varchar|character varying|nvarchar|nchar|char|character|bpchar)/.test(g)){let x=d.match(/\((\d+)\)/),y=x?Number(x[1]):void 0;if(n(o))return"string";return y!==void 0&&y>255?"text":"string"}if(/text|clob/.test(g))return"text";if(g==="float8"||/^double/.test(g))return"double";if(/^(?:real|float4|float)/.test(g))return"float";if(/^(?:numeric|decimal|money)/.test(g))return"decimal";if(g==="date")return"date";if(g==="timestamptz"||/\bwith time zone\b/.test(d))return"timestamptz";if(/^(?:timestamp|datetime)/.test(g))return"datetime";if(/^time/.test(g))return"string";if(/json/.test(g))return"json";if(/^enum/.test(g))return"enum";return"string"}function Ir(s,o,l){return xn(String(o||s||""),"mysql",{enumValues:l})}function Or(s){let o=String(s||"").trim().match(/^varchar\((\d+)\)/i);if(!o)return;let l=Number(o[1]);return Number.isSafeInteger(l)&&l>0?l:void 0}function Vt(s){let o=String(s??"").toLowerCase().trim();if(o==="cascade"||o==="restrict"||o==="set null")return o;return}async function qr(s,o){let l=await s.unsafe(`PRAGMA table_info(${JSON.stringify(o)})`),d=await s.unsafe(`PRAGMA index_list(${JSON.stringify(o)})`),g=await s.unsafe(`PRAGMA foreign_key_list(${JSON.stringify(o)})`),x=await s.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[o]),y=String(x?.[0]?.sql??""),E=new Map;for(let Q of g)E.set(String(Q.from),{table:String(Q.table),column:String(Q.to??"id"),onDelete:Vt(Q.on_delete),onUpdate:Vt(Q.on_update)});let D=[],S=new Set;for(let Q of d){let G=String(Q.origin??""),Re=String(Q.name??"");if(G==="pk"||Re.startsWith("sqlite_autoindex_"))continue;let Ce=(await s.unsafe(`PRAGMA index_info(${JSON.stringify(Re)})`)).map((Ve)=>String(Ve.name)).filter(Boolean);if(Ce.length===0)continue;let _e=Number(Q.unique)===1;if(_e&&Ce.length===1)S.add(Ce[0]);D.push({name:Re,columns:Ce,type:_e?"unique":"index"})}let v=l.map((Q)=>{let G=String(Q.name),Re=Kr(y,G),Ne=Number(Q.pk)>0,Ce=Q.dflt_value,_e=Ce!==null&&Ce!==void 0;return{name:G,type:xn(String(Q.type??""),"sqlite",{enumValues:Re}),isPrimaryKey:Ne,isUnique:S.has(G),isNullable:Ne?!1:Number(Q.notnull)===0,hasDefault:_e,defaultValue:_e?Dn(Ce):void 0,enumValues:Re,references:E.get(G)}});return{table:o,columns:v,indexes:D}}function Kr(s,o){if(!s)return;let l=new RegExp(`(?:"${o}"|\`${o}\`|\\b${o}\\b)\\s+IN\\s*\\(([^)]*)\\)`,"i"),d=s.match(l);if(!d)return;let g=d[1].split(",").map((x)=>x.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((x)=>x.length>0);return g.length>0?g:void 0}function Dn(s){if(typeof s==="number"||typeof s==="boolean")return s;return String(s)}async function Kn(s){let o=await s.unsafe(`SELECT t.typname AS type_name, e.enumlabel AS label
228
+ `}async function k(s={}){let o=e.dialect||"postgres",l=i(),d=s.tables?.length?s.tables:await qn(l,o),g=[];for(let x of d){let y=await Ir(l,o,x);if(!y.length)continue;g.push({table:x,modelName:Le(x),primaryKey:y.find((D)=>D.isPrimaryKey)?.name??"id",columns:y,source:Ze(x,y)})}return g}function xn(s,o,l){if(l?.enumValues&&l.enumValues.length>0)return"enum";let d=String(s||"").toLowerCase().trim(),g=d.replace(/\(.*$/,"").replace(/\s+/g," ").trim();if(n(o)&&/^tinyint\(1\)/.test(d))return"boolean";if(/^bool/.test(g))return"boolean";if(g==="int8"||g==="bigint"||g==="bigserial")return"bigint";if(/^(?:int|integer|smallint|mediumint|serial|int2|int4|tinyint)/.test(g))return"integer";if(/^(?:varchar|character varying|nvarchar|nchar|char|character|bpchar)/.test(g)){let x=d.match(/\((\d+)\)/),y=x?Number(x[1]):void 0;if(n(o))return"string";return y!==void 0&&y>255?"text":"string"}if(/text|clob/.test(g))return"text";if(g==="float8"||/^double/.test(g))return"double";if(/^(?:real|float4|float)/.test(g))return"float";if(/^(?:numeric|decimal|money)/.test(g))return"decimal";if(g==="date")return"date";if(g==="timestamptz"||/\bwith time zone\b/.test(d))return"timestamptz";if(/^(?:timestamp|datetime)/.test(g))return"datetime";if(/^time/.test(g))return"string";if(/json/.test(g))return"json";if(/^enum/.test(g))return"enum";return"string"}function Or(s,o,l){return xn(String(o||s||""),"mysql",{enumValues:l})}function qr(s){let o=String(s||"").trim().match(/^varchar\((\d+)\)/i);if(!o)return;let l=Number(o[1]);return Number.isSafeInteger(l)&&l>0?l:void 0}function Vt(s){let o=String(s??"").toLowerCase().trim();if(o==="cascade"||o==="restrict"||o==="set null")return o;return}async function Lr(s,o){let l=await s.unsafe(`PRAGMA table_info(${JSON.stringify(o)})`),d=await s.unsafe(`PRAGMA index_list(${JSON.stringify(o)})`),g=await s.unsafe(`PRAGMA foreign_key_list(${JSON.stringify(o)})`),x=await s.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[o]),y=String(x?.[0]?.sql??""),D=new Map;for(let Q of g)D.set(String(Q.from),{table:String(Q.table),column:String(Q.to??"id"),onDelete:Vt(Q.on_delete),onUpdate:Vt(Q.on_update)});let E=[],S=new Set;for(let Q of d){let G=String(Q.origin??""),Re=String(Q.name??"");if(G==="pk"||Re.startsWith("sqlite_autoindex_"))continue;let Ce=(await s.unsafe(`PRAGMA index_info(${JSON.stringify(Re)})`)).map((Ve)=>String(Ve.name)).filter(Boolean);if(Ce.length===0)continue;let _e=Number(Q.unique)===1;if(_e&&Ce.length===1)S.add(Ce[0]);E.push({name:Re,columns:Ce,type:_e?"unique":"index"})}let v=l.map((Q)=>{let G=String(Q.name),Re=Kr(y,G),Ne=Number(Q.pk)>0,Ce=Q.dflt_value,_e=Ce!==null&&Ce!==void 0;return{name:G,type:xn(String(Q.type??""),"sqlite",{enumValues:Re}),isPrimaryKey:Ne,isUnique:S.has(G),isNullable:Ne?!1:Number(Q.notnull)===0,hasDefault:_e,defaultValue:_e?En(Ce):void 0,enumValues:Re,references:D.get(G)}});return{table:o,columns:v,indexes:E}}function Kr(s,o){if(!s)return;let l=new RegExp(`(?:"${o}"|\`${o}\`|\\b${o}\\b)\\s+IN\\s*\\(([^)]*)\\)`,"i"),d=s.match(l);if(!d)return;let g=d[1].split(",").map((x)=>x.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((x)=>x.length>0);return g.length>0?g:void 0}function En(s){if(typeof s==="number"||typeof s==="boolean")return s;return String(s)}async function Ln(s){let o=await s.unsafe(`SELECT t.typname AS type_name, e.enumlabel AS label
228
229
  FROM pg_type t
229
230
  JOIN pg_enum e ON e.enumtypid = t.oid
230
231
  JOIN pg_namespace n ON n.oid = t.typnamespace
231
232
  WHERE n.nspname = 'public'
232
- ORDER BY t.typname, e.enumsortorder`),l=new Map;for(let d of o){let g=String(d.type_name),x=l.get(g);if(x)x.push(String(d.label));else l.set(g,[String(d.label)])}return l}function Lr(s,o,l){let d=l.get(o),g=xn(String(s||o||""),"postgres",{enumValues:d});return d?{type:g,enumValues:d,enumTypeName:o}:{type:g}}async function Br(s,o,l){let d=l??await Kn(s),g=await s.unsafe(`SELECT c.column_name, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length,
233
+ ORDER BY t.typname, e.enumsortorder`),l=new Map;for(let d of o){let g=String(d.type_name),x=l.get(g);if(x)x.push(String(d.label));else l.set(g,[String(d.label)])}return l}function Br(s,o,l){let d=l.get(o),g=xn(String(s||o||""),"postgres",{enumValues:d});return d?{type:g,enumValues:d,enumTypeName:o}:{type:g}}async function Ur(s,o,l){let d=l??await Ln(s),g=await s.unsafe(`SELECT c.column_name, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length,
233
234
  (SELECT COUNT(*) FROM information_schema.table_constraints tc
234
235
  JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
235
236
  WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
@@ -249,7 +250,7 @@ ${g}
249
250
  JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
250
251
  JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
251
252
  JOIN information_schema.referential_constraints rc ON rc.constraint_name = tc.constraint_name
252
- WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`,[o]),E=new Map,D=new Map;for(let G of y){let Re=String(G.constraint_name);D.set(Re,(D.get(Re)??0)+1)}for(let G of y){let Re=String(G.column_name),Ne=E.get(Re),Ce=String(G.constraint_name),_e=D.get(Ce)===1?[...new Set([...Ne?.constraintNames??[],Ce])]:Ne?.constraintNames;E.set(Re,Ne?{...Ne,constraintNames:_e}:{table:String(G.ref_table),column:String(G.ref_column??"id"),onDelete:Vt(G.delete_rule),onUpdate:Vt(G.update_rule),constraintNames:_e})}let{indexes:S,uniqueColumns:v}=Ln(o,x.map((G)=>({indexName:String(G.index_name),isUnique:G.is_unique===!0||G.is_unique==="t",isPrimary:G.is_primary===!0||G.is_primary==="t",column:String(G.column_name),where:G.where_clause?String(G.where_clause):void 0}))),Q=g.map((G)=>{let Re=String(G.column_name),Ne=Number(G.is_pk)>0,Ce=G.column_default==null?null:String(G.column_default),_e=Ce!=null&&/nextval\(/i.test(Ce),Ve=Ce!=null&&!_e;return{name:Re,...Lr(String(G.data_type??""),G.udt_name==null?"":String(G.udt_name),d),isPrimaryKey:Ne,isUnique:v.has(Re),isNullable:Ne?!1:String(G.is_nullable).toUpperCase()==="YES",hasDefault:Ve,defaultValue:Ve?Dn(Ce):void 0,references:E.get(Re)}});return{table:o,columns:Q,indexes:S}}async function Ur(s,o){let l=await s.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
253
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`,[o]),D=new Map,E=new Map;for(let G of y){let Re=String(G.constraint_name);E.set(Re,(E.get(Re)??0)+1)}for(let G of y){let Re=String(G.column_name),Ne=D.get(Re),Ce=String(G.constraint_name),_e=E.get(Ce)===1?[...new Set([...Ne?.constraintNames??[],Ce])]:Ne?.constraintNames;D.set(Re,Ne?{...Ne,constraintNames:_e}:{table:String(G.ref_table),column:String(G.ref_column??"id"),onDelete:Vt(G.delete_rule),onUpdate:Vt(G.update_rule),constraintNames:_e})}let{indexes:S,uniqueColumns:v}=Kn(o,x.map((G)=>({indexName:String(G.index_name),isUnique:G.is_unique===!0||G.is_unique==="t",isPrimary:G.is_primary===!0||G.is_primary==="t",column:String(G.column_name),where:G.where_clause?String(G.where_clause):void 0}))),Q=g.map((G)=>{let Re=String(G.column_name),Ne=Number(G.is_pk)>0,Ce=G.column_default==null?null:String(G.column_default),_e=Ce!=null&&/nextval\(/i.test(Ce),Ve=Ce!=null&&!_e;return{name:Re,...Br(String(G.data_type??""),G.udt_name==null?"":String(G.udt_name),d),isPrimaryKey:Ne,isUnique:v.has(Re),isNullable:Ne?!1:String(G.is_nullable).toUpperCase()==="YES",hasDefault:Ve,defaultValue:Ve?En(Ce):void 0,references:D.get(Re)}});return{table:o,columns:Q,indexes:S}}async function Fr(s,o){let l=await s.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
253
254
  FROM information_schema.columns
254
255
  WHERE table_name = ? AND table_schema = DATABASE()
255
256
  ORDER BY ordinal_position`,[o]),d=await s.unsafe(`SELECT index_name, non_unique, seq_in_index, column_name
@@ -260,7 +261,7 @@ ${g}
260
261
  FROM information_schema.key_column_usage kcu
261
262
  JOIN information_schema.referential_constraints rc
262
263
  ON rc.constraint_name = kcu.constraint_name AND rc.constraint_schema = kcu.table_schema
263
- WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`,[o]),x=new Map,y=new Map;for(let v of g){let Q=String(v.constraint_name??v.CONSTRAINT_NAME);y.set(Q,(y.get(Q)??0)+1)}for(let v of g){let Q=String(v.column_name??v.COLUMN_NAME),G=x.get(Q),Re=String(v.constraint_name??v.CONSTRAINT_NAME),Ne=y.get(Re)===1?[...new Set([...G?.constraintNames??[],Re])]:G?.constraintNames;x.set(Q,G?{...G,constraintNames:Ne}:{table:String(v.ref_table??v.REF_TABLE),column:String(v.ref_column??v.REF_COLUMN??"id"),onDelete:Vt(v.delete_rule??v.DELETE_RULE),onUpdate:Vt(v.update_rule??v.UPDATE_RULE),constraintNames:Ne})}let{indexes:E,uniqueColumns:D}=Ln(o,d.map((v)=>({indexName:String(v.index_name??v.INDEX_NAME),isUnique:Number(v.non_unique??v.NON_UNIQUE)===0,isPrimary:String(v.index_name??v.INDEX_NAME).toUpperCase()==="PRIMARY",column:String(v.column_name??v.COLUMN_NAME)}))),S=l.map((v)=>{let Q=String(v.column_name??v.COLUMN_NAME),G=String(v.column_type??v.COLUMN_TYPE??""),Re=Fr(G),Ce=String(v.column_key??v.COLUMN_KEY??"").toUpperCase()==="PRI",_e=v.column_default??v.COLUMN_DEFAULT,Ve=_e!=null;return{name:Q,type:Ir(v.data_type??v.DATA_TYPE,G,Re),isPrimaryKey:Ce,isUnique:D.has(Q),isNullable:Ce?!1:String(v.is_nullable??v.IS_NULLABLE).toUpperCase()==="YES",hasDefault:Ve,defaultValue:Ve?Dn(_e):void 0,enumValues:Re,maxLength:Or(G),references:x.get(Q)}});return{table:o,columns:S,indexes:E}}function Fr(s){let o=s.match(/^enum\((.*)\)$/i);if(!o)return;return o[1].split(",").map((l)=>l.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((l)=>l.length>0)}function Ln(s,o){let l=new Map;for(let x of o){if(x.isPrimary)continue;let y=l.get(x.indexName)??{isUnique:x.isUnique,isPrimary:x.isPrimary,columns:[],where:x.where};y.columns.push(x.column),l.set(x.indexName,y)}let d=[],g=new Set;for(let[x,y]of l){if(y.columns.length===0)continue;if(y.isUnique&&y.columns.length===1)g.add(y.columns[0]);d.push({name:x,columns:y.columns,type:y.isUnique?"unique":"index",where:y.where})}return{indexes:d,uniqueColumns:g}}async function Bn(s,o={}){let l=s||e.dialect||"postgres",d=i(),x=((o.tables?.length)?o.tables:await qn(d,l)).filter((D)=>D!=="migrations"),y=l==="postgres"?await Kn(d):void 0,E=[];for(let D of x){let S;if(l==="sqlite")S=await qr(d,D);else if(l==="postgres")S=await Br(d,D,y);else S=await Ur(d,D);if(S.columns.length>0)E.push(S)}return{dialect:l,tables:E}}import{existsSync as En,mkdirSync as Vr,writeFileSync as jr}from"fs";import{dirname as Un,join as Rn}from"path";import Fn from"process";function Yr(s){let o=s;while(o!==Un(o)){if(En(Rn(o,"package.json")))return o;o=Un(o)}return Fn.cwd()}async function le(s,o={}){let l=Yr(Fn.cwd()),d=o.dir||Rn(l,"app/Models");if(!En(d))Vr(d,{recursive:!0}),console.log(`-- Created models directory: ${d}`);let g=s.charAt(0).toUpperCase()+s.slice(1),x=o.table||`${s.toLowerCase()}s`,y=`${g}.ts`,E=Rn(d,y);if(En(E))throw console.error(`-- Model already exists: ${E}`),Error(`Model already exists: ${E}`);let S=o.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
264
+ WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`,[o]),x=new Map,y=new Map;for(let v of g){let Q=String(v.constraint_name??v.CONSTRAINT_NAME);y.set(Q,(y.get(Q)??0)+1)}for(let v of g){let Q=String(v.column_name??v.COLUMN_NAME),G=x.get(Q),Re=String(v.constraint_name??v.CONSTRAINT_NAME),Ne=y.get(Re)===1?[...new Set([...G?.constraintNames??[],Re])]:G?.constraintNames;x.set(Q,G?{...G,constraintNames:Ne}:{table:String(v.ref_table??v.REF_TABLE),column:String(v.ref_column??v.REF_COLUMN??"id"),onDelete:Vt(v.delete_rule??v.DELETE_RULE),onUpdate:Vt(v.update_rule??v.UPDATE_RULE),constraintNames:Ne})}let{indexes:D,uniqueColumns:E}=Kn(o,d.map((v)=>({indexName:String(v.index_name??v.INDEX_NAME),isUnique:Number(v.non_unique??v.NON_UNIQUE)===0,isPrimary:String(v.index_name??v.INDEX_NAME).toUpperCase()==="PRIMARY",column:String(v.column_name??v.COLUMN_NAME)}))),S=l.map((v)=>{let Q=String(v.column_name??v.COLUMN_NAME),G=String(v.column_type??v.COLUMN_TYPE??""),Re=Vr(G),Ce=String(v.column_key??v.COLUMN_KEY??"").toUpperCase()==="PRI",_e=v.column_default??v.COLUMN_DEFAULT,Ve=_e!=null;return{name:Q,type:Or(v.data_type??v.DATA_TYPE,G,Re),isPrimaryKey:Ce,isUnique:E.has(Q),isNullable:Ce?!1:String(v.is_nullable??v.IS_NULLABLE).toUpperCase()==="YES",hasDefault:Ve,defaultValue:Ve?En(_e):void 0,enumValues:Re,maxLength:qr(G),references:x.get(Q)}});return{table:o,columns:S,indexes:D}}function Vr(s){let o=s.match(/^enum\((.*)\)$/i);if(!o)return;return o[1].split(",").map((l)=>l.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((l)=>l.length>0)}function Kn(s,o){let l=new Map;for(let x of o){if(x.isPrimary)continue;let y=l.get(x.indexName)??{isUnique:x.isUnique,isPrimary:x.isPrimary,columns:[],where:x.where};y.columns.push(x.column),l.set(x.indexName,y)}let d=[],g=new Set;for(let[x,y]of l){if(y.columns.length===0)continue;if(y.isUnique&&y.columns.length===1)g.add(y.columns[0]);d.push({name:x,columns:y.columns,type:y.isUnique?"unique":"index",where:y.where})}return{indexes:d,uniqueColumns:g}}async function Bn(s,o={}){let l=s||e.dialect||"postgres",d=i(),x=((o.tables?.length)?o.tables:await qn(d,l)).filter((E)=>E!=="migrations"),y=l==="postgres"?await Ln(d):void 0,D=[];for(let E of x){let S;if(l==="sqlite")S=await Lr(d,E);else if(l==="postgres")S=await Ur(d,E,y);else S=await Fr(d,E);if(S.columns.length>0)D.push(S)}return{dialect:l,tables:D}}import{existsSync as Dn,mkdirSync as jr,writeFileSync as Yr}from"fs";import{dirname as Un,join as Rn}from"path";import Fn from"process";function Qr(s){let o=s;while(o!==Un(o)){if(Dn(Rn(o,"package.json")))return o;o=Un(o)}return Fn.cwd()}async function le(s,o={}){let l=Qr(Fn.cwd()),d=o.dir||Rn(l,"app/Models");if(!Dn(d))jr(d,{recursive:!0}),console.log(`-- Created models directory: ${d}`);let g=s.charAt(0).toUpperCase()+s.slice(1),x=o.table||`${s.toLowerCase()}s`,y=`${g}.ts`,D=Rn(d,y);if(Dn(D))throw console.error(`-- Model already exists: ${D}`),Error(`Model already exists: ${D}`);let S=o.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
264
265
  updated_at: { validation: { rule: v.date() } },`:"",v=`import { v } from '@stacksjs/ts-validation'
265
266
  import { defineModel } from 'bun-query-builder'
266
267
 
@@ -280,22 +281,22 @@ ${S}
280
281
  })
281
282
 
282
283
  export default model
283
- `;jr(E,v),console.log(`-- \u2713 Created model: ${E}`),console.log(`-- Table: ${x}`)}async function me(s,o={}){return T(s,o)}import{existsSync as Qn,readFileSync as Gr,unlinkSync as zr}from"fs";import{join as Hr}from"path";import{existsSync as Qr}from"fs";import{dirname as Vn,isAbsolute as Wr,join as Yn}from"path";import jn from"process";function Sn(s=jn.cwd()){let o=s;while(o!==Vn(o)){if(Qr(Yn(o,"package.json")))return o;o=Vn(o)}return jn.cwd()}function $t(s,o="database/migrations"){let l=o||"database/migrations";return Wr(l)?l:Yn(s??Sn(),l)}function Xr(s){let o=[],l="",d=null;for(let g=0;g<s.length;g++){let x=s[g];if(d){if(l+=x,x===d)if(s[g+1]===d)l+=s[g+1],g++;else d=null;continue}if(x==="'"||x==='"'||x==="`"){d=x,l+=x;continue}if(x==="-"&&s[g+1]==="-"){let y=s.indexOf(`
284
- `,g);g=y===-1?s.length:y;continue}if(x==="/"&&s[g+1]==="*"){let y=s.indexOf("*/",g+2);g=y===-1?s.length:y+1;continue}if(x===";"){if(l.trim())o.push(l.trim());l="";continue}l+=x}if(l.trim())o.push(l.trim());return o}function Jr(s,o=e.dialect){let l=(x)=>n(o)?`\`${x}\``:`"${x}"`,d=[],g=[];for(let x of Xr(s)){let y;if(y=/^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?/i.exec(x))d.push(`DROP TABLE IF EXISTS ${l(y[1])}`);else if(y=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+CONSTRAINT\s+["`']?(\w+)["`']?([\s\S]*)$/i.exec(x))if(o==="sqlite")g.push(x);else if(n(o)&&/\bFOREIGN\s+KEY\b/i.test(y[3]??""))d.push(`ALTER TABLE ${l(y[1])} DROP FOREIGN KEY ${l(y[2])}`);else d.push(`ALTER TABLE ${l(y[1])} DROP CONSTRAINT ${l(y[2])}`);else if(y=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+(?:COLUMN\s+["`']?(\w+)["`']?|["`'](\w+)["`']|(\w+))/i.exec(x)){let E=y[2]??y[3]??y[4];if(y[4]&&/^(?:PRIMARY|UNIQUE|INDEX|KEY|FOREIGN|CHECK|FULLTEXT|SPATIAL)$/i.test(y[4]))g.push(x);else d.push(`ALTER TABLE ${l(y[1])} DROP COLUMN ${l(E)}`)}else if(y=/^CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?(?:\s+ON\s+["`']?(\w+)["`']?)?/i.exec(x))d.push(n(o)&&y[2]?`DROP INDEX ${l(y[1])} ON ${l(y[2])}`:`DROP INDEX IF EXISTS ${l(y[1])}`);else g.push(x)}return{down:d.reverse(),skipped:g}}async function he(s={}){let o=s.steps||1,l=s.reverseSchema!==!1;console.log("-- Rolling back migrations"),console.log(`-- Steps: ${o}`),console.log();try{let d=i(),g=[];try{g=await d.unsafe(`
284
+ `;Yr(D,v),console.log(`-- \u2713 Created model: ${D}`),console.log(`-- Table: ${x}`)}async function me(s,o={}){return T(s,o)}import{existsSync as Qn,readFileSync as zr,unlinkSync as Hr}from"fs";import{join as Xr}from"path";import{existsSync as Wr}from"fs";import{dirname as Vn,isAbsolute as Gr,join as Yn}from"path";import jn from"process";function Sn(s=jn.cwd()){let o=s;while(o!==Vn(o)){if(Wr(Yn(o,"package.json")))return o;o=Vn(o)}return jn.cwd()}function $t(s,o="database/migrations"){let l=o||"database/migrations";return Gr(l)?l:Yn(s??Sn(),l)}function Jr(s){let o=[],l="",d=null;for(let g=0;g<s.length;g++){let x=s[g];if(d){if(l+=x,x===d)if(s[g+1]===d)l+=s[g+1],g++;else d=null;continue}if(x==="'"||x==='"'||x==="`"){d=x,l+=x;continue}if(x==="-"&&s[g+1]==="-"){let y=s.indexOf(`
285
+ `,g);g=y===-1?s.length:y;continue}if(x==="/"&&s[g+1]==="*"){let y=s.indexOf("*/",g+2);g=y===-1?s.length:y+1;continue}if(x===";"){if(l.trim())o.push(l.trim());l="";continue}l+=x}if(l.trim())o.push(l.trim());return o}function Zr(s,o=e.dialect){let l=(x)=>n(o)?`\`${x}\``:`"${x}"`,d=[],g=[];for(let x of Jr(s)){let y;if(y=/^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?/i.exec(x))d.push(`DROP TABLE IF EXISTS ${l(y[1])}`);else if(y=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+CONSTRAINT\s+["`']?(\w+)["`']?([\s\S]*)$/i.exec(x))if(o==="sqlite")g.push(x);else if(n(o)&&/\bFOREIGN\s+KEY\b/i.test(y[3]??""))d.push(`ALTER TABLE ${l(y[1])} DROP FOREIGN KEY ${l(y[2])}`);else d.push(`ALTER TABLE ${l(y[1])} DROP CONSTRAINT ${l(y[2])}`);else if(y=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+(?:COLUMN\s+["`']?(\w+)["`']?|["`'](\w+)["`']|(\w+))/i.exec(x)){let D=y[2]??y[3]??y[4];if(y[4]&&/^(?:PRIMARY|UNIQUE|INDEX|KEY|FOREIGN|CHECK|FULLTEXT|SPATIAL)$/i.test(y[4]))g.push(x);else d.push(`ALTER TABLE ${l(y[1])} DROP COLUMN ${l(D)}`)}else if(y=/^CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?(?:\s+ON\s+["`']?(\w+)["`']?)?/i.exec(x))d.push(n(o)&&y[2]?`DROP INDEX ${l(y[1])} ON ${l(y[2])}`:`DROP INDEX IF EXISTS ${l(y[1])}`);else g.push(x)}return{down:d.reverse(),skipped:g}}async function he(s={}){let o=s.steps||1,l=s.reverseSchema!==!1;console.log("-- Rolling back migrations"),console.log(`-- Steps: ${o}`),console.log();try{let d=i(),g=[];try{g=await d.unsafe(`
285
286
  SELECT migration, executed_at
286
287
  FROM migrations
287
288
  ORDER BY executed_at DESC, migration DESC
288
- `)}catch(D){console.log("-- Migrations table not found. Nothing to rollback.",D);return}if(g.length===0){console.log("-- No migrations to rollback");return}let x=g.slice(0,o);console.log(`-- Found ${g.length} executed migrations`),console.log(`-- Rolling back ${x.length} migration(s):`),console.log();for(let D of x)console.log(` - ${D.migration}`);console.log();let y=$t(void 0,e.migrationDir),E=!1;for(let D of x)try{let S=Hr(y,D.migration);if(l&&Qn(S)){let Q=Gr(S,"utf8"),{down:G,skipped:Re}=Jr(Q);for(let Ne of G)await d.unsafe(Ne),console.log(`-- \u21A9 ${Ne}`),E=!0;if(Re.length>0)console.log(`-- \u26A0\uFE0F ${Re.length} statement(s) in ${D.migration} could not be auto-reversed (data/complex DDL) \u2014 reverse manually.`)}let v=`DELETE FROM migrations WHERE migration = ${t(1)}`;if(await d.unsafe(v,[D.migration]),console.log(`-- \u2713 Removed migration record: ${D.migration}`),s.deleteFiles&&Qn(S))zr(S),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${D.migration}`)}catch(S){throw console.error(`-- \u2717 Failed to rollback migration ${D.migration}:`,S),S}if(console.log(),l)console.log(E?"-- \u2713 Reverse DDL executed for the rolled-back migration(s).":"-- \u26A0\uFE0F No reversible DDL found; only migration records were removed.");else console.log("-- \u26A0\uFE0F reverseSchema disabled: only migration records were removed.")}catch(d){throw console.error("-- Rollback failed:",d),d}}import{existsSync as Zr,readdirSync as ei}from"fs";async function F(){let s=e.dialect||"postgres",o=m(s),l=$t(void 0,e.migrationDir);if(console.log("-- Migration Status"),console.log(`-- Dialect: ${s}`),console.log(`-- SQL directory: ${l}`),console.log(),!Zr(l))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let g=ei(l).filter((x)=>x.endsWith(".sql")).sort();if(g.length===0)return console.log("-- No migration files found"),[];try{let x=i(),y=[];try{y=await x.unsafe(o.getExecutedMigrationsQuery())}catch(Q){console.log("-- Migrations table not found. All migrations are pending.",Q),console.log()}let E=new Map(y.map((Q)=>[Q.migration,Q.executed_at])),D=g.map((Q)=>({file:Q,status:E.has(Q)?"executed":"pending",executedAt:E.get(Q)})),S=D.filter((Q)=>Q.status==="executed"),v=D.filter((Q)=>Q.status==="pending");if(console.log(`-- Total migrations: ${g.length}`),console.log(`-- Executed: ${S.length}`),console.log(`-- Pending: ${v.length}`),console.log(),S.length>0){console.log("\u2713 Executed Migrations:");for(let Q of S)console.log(` - ${Q.file} ${Q.executedAt?`(${new Date(Q.executedAt).toLocaleString()})`:""}`);console.log()}if(v.length>0){console.log("\u25CB Pending Migrations:");for(let Q of v)console.log(` - ${Q.file}`);console.log()}return D}catch(x){throw console.error("-- Failed to get migration status:",x),x}}async function ge(){return F()}import{readdirSync as ti}from"fs";import{extname as Mn,join as Wn}from"path";import ni from"process";async function j(s,o={}){let l=o.dir||Wn(ni.cwd(),"app/Models");try{let d=ti(l),g=d.find((v)=>v.replace(Mn(v),"").toLowerCase()===s.toLowerCase());if(!g){console.error(`Model "${s}" not found in ${l}`),console.log(`Available models: ${d.filter((v)=>[".ts",".js"].includes(Mn(v))).map((v)=>v.replace(Mn(v),"")).join(", ")}`);return}let y=await import(Wn(l,g)),E=y.default||y[Object.keys(y)[0]];if(!E||!E.name){console.error(`Invalid model file: ${g}`);return}let D={name:E.name,table:E.table||`${E.name.toLowerCase()}s`,primaryKey:E.primaryKey||"id",attributes:E.attributes||{},relations:E.relations,scopes:E.scopes,indexes:E.indexes,timestamps:E.timestamps!==!1,softDeletes:E.softDeletes===!0},S=[];if(E.beforeCreate)S.push("beforeCreate");if(E.afterCreate)S.push("afterCreate");if(E.beforeUpdate)S.push("beforeUpdate");if(E.afterUpdate)S.push("afterUpdate");if(E.beforeDelete)S.push("beforeDelete");if(E.afterDelete)S.push("afterDelete");if(S.length>0)D.hooks=S;if(o.json)return console.log(JSON.stringify(D,null,2)),D;console.log(`
289
- \uD83D\uDCE6 Model: ${D.name}`),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(`Table: ${D.table}`),console.log(`Primary Key: ${D.primaryKey}`),console.log(`Timestamps: ${D.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${D.softDeletes?"\u2713":"\u2717"}`),console.log(`
290
- \uD83D\uDCCB Attributes (${Object.keys(D.attributes).length}):`);for(let[v,Q]of Object.entries(D.attributes)){let G=Q.type||"string",Re=Q.required?"(required)":"",Ne=Q.unique?"(unique)":"",Ce=Q.default!==void 0?`= ${JSON.stringify(Q.default)}`:"";console.log(` \u2022 ${v}: ${G} ${Re} ${Ne} ${Ce}`.trim())}if(D.relations&&Object.keys(D.relations).length>0){console.log(`
291
- \uD83D\uDD17 Relations (${Object.keys(D.relations).length}):`);for(let[v,Q]of Object.entries(D.relations)){let G=Q.type||"unknown",Re=Q.model||Q.table||"unknown";console.log(` \u2022 ${v}: ${G} \u2192 ${Re}`)}}if(D.scopes&&Object.keys(D.scopes).length>0){console.log(`
292
- \uD83D\uDD0D Scopes (${Object.keys(D.scopes).length}):`);for(let v of Object.keys(D.scopes))console.log(` \u2022 ${v}()`)}if(D.hooks&&D.hooks.length>0){console.log(`
293
- \uD83E\uDE9D Hooks (${D.hooks.length}):`);for(let v of D.hooks)console.log(` \u2022 ${v}`)}if(D.indexes&&D.indexes.length>0){console.log(`
294
- \uD83D\uDCC7 Indexes (${D.indexes.length}):`);for(let v of D.indexes){let Q=Array.isArray(v.columns)?v.columns.join(", "):v.columns,G=v.unique?"(unique)":"";console.log(` \u2022 ${v.name||"unnamed"}: [${Q}] ${G}`.trim())}}return console.log(),D}catch(d){throw console.error(`Error loading model "${s}":`,d.message),d}}async function pe(){let o=await i().ping();return console.log(o?"OK":"NOT READY"),o}import{readdirSync as ri,readFileSync as Gn,statSync as ii}from"fs";import{extname as zn,join as si}from"path";async function q(s,o={}){let l=[];try{let d=ii(s),g=[];if(d.isDirectory())g=ri(s).filter((D)=>zn(D)===".sql").map((D)=>si(s,D));else if(d.isFile()&&zn(s)===".sql")g=[s];else return console.error("Path must be a .sql file or directory containing .sql files"),l;if(g.length===0)return console.log("No .sql files found"),l;if(o.verbose)console.log(`Analyzing ${g.length} SQL file(s)...
295
- `);for(let E of g)try{let D=Gn(E,"utf8").trim();if(!D){if(o.verbose)console.log(`\u2298 ${E}: empty file`);continue}if(o.verbose)console.log(`\uD83D\uDCC4 ${E}`),console.log(` Query: ${D.substring(0,60)}${D.length>60?"...":""}`);let S=await r`EXPLAIN ${r.unsafe(D)}`;if(l.push({file:E,query:D,plan:Array.isArray(S)?S:[S]}),o.verbose&&!o.json){if(console.log(" Plan:"),Array.isArray(S))for(let v of S)if(typeof v==="string")console.log(` ${v}`);else if(v["QUERY PLAN"])console.log(` ${v["QUERY PLAN"]}`);else if(v.plan)console.log(` ${JSON.stringify(v.plan)}`);else console.log(` ${JSON.stringify(v)}`);console.log()}}catch(D){if(l.push({file:E,query:Gn(E,"utf8").trim(),plan:[],error:D.message}),o.verbose)console.log(` \u2717 Error: ${D.message}
296
- `)}let x=l.filter((E)=>!E.error).length,y=l.filter((E)=>E.error).length;if(o.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: ${x} successful, ${y} failed`);if(o.json)console.log(JSON.stringify(l,null,2));return l}catch(d){throw console.error("Error explaining queries:",d.message),d}}import{writeFileSync as ai}from"fs";import{join as oi}from"path";import li from"process";async function W(s={}){let o=s.dir||oi(li.cwd(),"app/Models"),l=s.format||"mermaid";try{let d=await u({modelsDir:o});if(!d||Object.keys(d).length===0)return console.error("No models found"),"";let g="";if(l==="mermaid")g=ui(d);else if(l==="dot")g=ci(d);else return console.error(`Unsupported format: ${l}`),"";if(s.output)ai(s.output,g,"utf8"),console.log(`\u2713 Diagram written to: ${s.output}`);else console.log(g);return g}catch(d){throw console.error("Error generating diagram:",d.message),d}}function ui(s){let o=["erDiagram"];for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.attributes||{};o.push(` ${g} {`);for(let[y,E]of Object.entries(x)){let D=E.type||"string",S=d.primaryKey===y?"PK":"",v=E.unique?"UK":"",Q=[S,v].filter(Boolean).join(","),G=Q?` "${Q}"`:"";o.push(` ${D} ${y}${G}`)}o.push(" }")}for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.relations||{};for(let[y,E]of Object.entries(x)){let{type:D,model:S}=E,v=s[S]?.table||`${S?.toLowerCase()}s`||"unknown",Q="";if(D==="hasOne")Q="||--||";else if(D==="hasMany")Q="||--o{";else if(D==="belongsTo")Q="}o--||";else if(D==="belongsToMany"||D==="manyToMany")Q="}o--o{";else Q="||--||";o.push(` ${g} ${Q} ${v} : "${y}"`)}}return o.join(`
297
- `)}function ci(s){let o=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.attributes||{},y=[];for(let[D,S]of Object.entries(x)){let v=S.type||"string",Q=d.primaryKey===D?" (PK)":"",G=S.unique?" (UK)":"";y.push(`${D}: ${v}${Q}${G}`)}let E=`${y.join("\\l")}\\l`;o.push(` ${g} [label="{${g}|${E}}"];`)}o.push("");for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.relations||{};for(let[y,E]of Object.entries(x)){let{type:D,model:S}=E,v=s[S]?.table||`${S?.toLowerCase()}s`||"unknown",Q="";if(D==="hasOne")Q="arrowhead=none, arrowtail=normal";else if(D==="hasMany")Q="arrowhead=crow, arrowtail=none";else if(D==="belongsTo")Q="arrowhead=normal, arrowtail=none";else if(D==="belongsToMany"||D==="manyToMany")Q="arrowhead=crow, arrowtail=crow";o.push(` ${g} -> ${v} [label="${y}", ${Q}];`)}}return o.push("}"),o.join(`
298
- `)}import{existsSync as Jt,mkdirSync as di,readdirSync as mi,writeFileSync as fi}from"fs";import{dirname as Hn,join as qt}from"path";import Wt from"process";function Zt(s){let o=s;while(o!==Hn(o)){if(Jt(qt(o,"package.json")))return o;o=Hn(o)}return Wt.cwd()}async function Xn(s){if(!Jt(s))return console.log(`-- Seeders directory not found: ${s}`),[];let l=mi(s).sort((g,x)=>g.localeCompare(x)).filter((g)=>(g.endsWith(".ts")||g.endsWith(".js"))&&g!=="index.ts"&&g!=="index.js"),d=[];for(let g of l){let x=qt(s,g);try{let y=await import(x),E=y.default||y[Object.keys(y)[0]];if(E&&typeof E==="function"){let D=new E;if(D&&typeof D.run==="function")d.push({name:g.replace(/\.(ts|js)$/,""),className:String(E.name||""),instance:D})}}catch(y){console.error(`-- Failed to load seeder ${g}:`,y)}}return d.sort((g,x)=>g.instance.order-x.instance.order),d}async function A(s={}){let o=Zt(Wt.cwd()),l=s.seedersDir||qt(o,"database/seeders"),d=s.verbose??!0;if(d)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${l}`);let g=await Xn(l);if(g.length===0){console.log("-- No seeders found");return}if(d)console.log(`-- Found ${g.length} seeder(s)`);let x=i();for(let{name:y,instance:E}of g)try{if(d)console.log(`-- Seeding: ${y}`);if(await E.run(x),d)console.log(`-- \u2713 Seeded: ${y}`)}catch(D){throw console.error(`-- \u2717 Failed to seed ${y}:`,D),D}if(d)console.log("-- All seeders completed successfully")}async function U(s,o={}){let l=Zt(Wt.cwd()),d=qt(l,"database/seeders"),g=o.verbose??!0;if(g)console.log(`-- Running seeder: ${s}`);let x=await Xn(d),y=x.find((D)=>D.className===s)??x.find((D)=>D.name===s);if(!y){let D=x.map((S)=>S.className||S.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${s}. Available: ${D}`),Error(`Seeder not found: ${s}. Available: ${D}`)}let E=i();try{if(await y.instance.run(E),g)console.log(`-- \u2713 Seeder completed: ${s}`)}catch(D){throw console.error(`-- \u2717 Seeder failed: ${s}`,D),D}}async function ye(s){let o=Zt(Wt.cwd()),l=qt(o,"database/seeders");if(!Jt(l))di(l,{recursive:!0}),console.log(`-- Created seeders directory: ${l}`);let g=`${s.replace(/Seeder$/i,"")}Seeder`,x=`${g}.ts`,y=qt(l,x);if(Jt(y))throw console.error(`-- Seeder already exists: ${y}`),Error(`Seeder already exists: ${y}`);let E=`import type { QueryBuilder } from 'bun-query-builder'
289
+ `)}catch(E){console.log("-- Migrations table not found. Nothing to rollback.",E);return}if(g.length===0){console.log("-- No migrations to rollback");return}let x=g.slice(0,o);console.log(`-- Found ${g.length} executed migrations`),console.log(`-- Rolling back ${x.length} migration(s):`),console.log();for(let E of x)console.log(` - ${E.migration}`);console.log();let y=$t(void 0,e.migrationDir),D=!1;for(let E of x)try{let S=Xr(y,E.migration);if(l&&Qn(S)){let Q=zr(S,"utf8"),{down:G,skipped:Re}=Zr(Q);for(let Ne of G)await d.unsafe(Ne),console.log(`-- \u21A9 ${Ne}`),D=!0;if(Re.length>0)console.log(`-- \u26A0\uFE0F ${Re.length} statement(s) in ${E.migration} could not be auto-reversed (data/complex DDL) \u2014 reverse manually.`)}let v=`DELETE FROM migrations WHERE migration = ${t(1)}`;if(await d.unsafe(v,[E.migration]),console.log(`-- \u2713 Removed migration record: ${E.migration}`),s.deleteFiles&&Qn(S))Hr(S),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${E.migration}`)}catch(S){throw console.error(`-- \u2717 Failed to rollback migration ${E.migration}:`,S),S}if(console.log(),l)console.log(D?"-- \u2713 Reverse DDL executed for the rolled-back migration(s).":"-- \u26A0\uFE0F No reversible DDL found; only migration records were removed.");else console.log("-- \u26A0\uFE0F reverseSchema disabled: only migration records were removed.")}catch(d){throw console.error("-- Rollback failed:",d),d}}import{existsSync as ei,readdirSync as ti}from"fs";async function F(){let s=e.dialect||"postgres",o=m(s),l=$t(void 0,e.migrationDir);if(console.log("-- Migration Status"),console.log(`-- Dialect: ${s}`),console.log(`-- SQL directory: ${l}`),console.log(),!ei(l))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let g=ti(l).filter((x)=>x.endsWith(".sql")).sort();if(g.length===0)return console.log("-- No migration files found"),[];try{let x=i(),y=[];try{y=await x.unsafe(o.getExecutedMigrationsQuery())}catch(Q){console.log("-- Migrations table not found. All migrations are pending.",Q),console.log()}let D=new Map(y.map((Q)=>[Q.migration,Q.executed_at])),E=g.map((Q)=>({file:Q,status:D.has(Q)?"executed":"pending",executedAt:D.get(Q)})),S=E.filter((Q)=>Q.status==="executed"),v=E.filter((Q)=>Q.status==="pending");if(console.log(`-- Total migrations: ${g.length}`),console.log(`-- Executed: ${S.length}`),console.log(`-- Pending: ${v.length}`),console.log(),S.length>0){console.log("\u2713 Executed Migrations:");for(let Q of S)console.log(` - ${Q.file} ${Q.executedAt?`(${new Date(Q.executedAt).toLocaleString()})`:""}`);console.log()}if(v.length>0){console.log("\u25CB Pending Migrations:");for(let Q of v)console.log(` - ${Q.file}`);console.log()}return E}catch(x){throw console.error("-- Failed to get migration status:",x),x}}async function ge(){return F()}import{readdirSync as ni}from"fs";import{extname as Mn,join as Wn}from"path";import ri from"process";async function j(s,o={}){let l=o.dir||Wn(ri.cwd(),"app/Models");try{let d=ni(l),g=d.find((v)=>v.replace(Mn(v),"").toLowerCase()===s.toLowerCase());if(!g){console.error(`Model "${s}" not found in ${l}`),console.log(`Available models: ${d.filter((v)=>[".ts",".js"].includes(Mn(v))).map((v)=>v.replace(Mn(v),"")).join(", ")}`);return}let y=await import(Wn(l,g)),D=y.default||y[Object.keys(y)[0]];if(!D||!D.name){console.error(`Invalid model file: ${g}`);return}let E={name:D.name,table:D.table||`${D.name.toLowerCase()}s`,primaryKey:D.primaryKey||"id",attributes:D.attributes||{},relations:D.relations,scopes:D.scopes,indexes:D.indexes,timestamps:D.timestamps!==!1,softDeletes:D.softDeletes===!0},S=[];if(D.beforeCreate)S.push("beforeCreate");if(D.afterCreate)S.push("afterCreate");if(D.beforeUpdate)S.push("beforeUpdate");if(D.afterUpdate)S.push("afterUpdate");if(D.beforeDelete)S.push("beforeDelete");if(D.afterDelete)S.push("afterDelete");if(S.length>0)E.hooks=S;if(o.json)return console.log(JSON.stringify(E,null,2)),E;console.log(`
290
+ \uD83D\uDCE6 Model: ${E.name}`),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(`Table: ${E.table}`),console.log(`Primary Key: ${E.primaryKey}`),console.log(`Timestamps: ${E.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${E.softDeletes?"\u2713":"\u2717"}`),console.log(`
291
+ \uD83D\uDCCB Attributes (${Object.keys(E.attributes).length}):`);for(let[v,Q]of Object.entries(E.attributes)){let G=Q.type||"string",Re=Q.required?"(required)":"",Ne=Q.unique?"(unique)":"",Ce=Q.default!==void 0?`= ${JSON.stringify(Q.default)}`:"";console.log(` \u2022 ${v}: ${G} ${Re} ${Ne} ${Ce}`.trim())}if(E.relations&&Object.keys(E.relations).length>0){console.log(`
292
+ \uD83D\uDD17 Relations (${Object.keys(E.relations).length}):`);for(let[v,Q]of Object.entries(E.relations)){let G=Q.type||"unknown",Re=Q.model||Q.table||"unknown";console.log(` \u2022 ${v}: ${G} \u2192 ${Re}`)}}if(E.scopes&&Object.keys(E.scopes).length>0){console.log(`
293
+ \uD83D\uDD0D Scopes (${Object.keys(E.scopes).length}):`);for(let v of Object.keys(E.scopes))console.log(` \u2022 ${v}()`)}if(E.hooks&&E.hooks.length>0){console.log(`
294
+ \uD83E\uDE9D Hooks (${E.hooks.length}):`);for(let v of E.hooks)console.log(` \u2022 ${v}`)}if(E.indexes&&E.indexes.length>0){console.log(`
295
+ \uD83D\uDCC7 Indexes (${E.indexes.length}):`);for(let v of E.indexes){let Q=Array.isArray(v.columns)?v.columns.join(", "):v.columns,G=v.unique?"(unique)":"";console.log(` \u2022 ${v.name||"unnamed"}: [${Q}] ${G}`.trim())}}return console.log(),E}catch(d){throw console.error(`Error loading model "${s}":`,d.message),d}}async function pe(){let o=await i().ping();return console.log(o?"OK":"NOT READY"),o}import{readdirSync as ii,readFileSync as Gn,statSync as si}from"fs";import{extname as zn,join as ai}from"path";async function q(s,o={}){let l=[];try{let d=si(s),g=[];if(d.isDirectory())g=ii(s).filter((E)=>zn(E)===".sql").map((E)=>ai(s,E));else if(d.isFile()&&zn(s)===".sql")g=[s];else return console.error("Path must be a .sql file or directory containing .sql files"),l;if(g.length===0)return console.log("No .sql files found"),l;if(o.verbose)console.log(`Analyzing ${g.length} SQL file(s)...
296
+ `);for(let D of g)try{let E=Gn(D,"utf8").trim();if(!E){if(o.verbose)console.log(`\u2298 ${D}: empty file`);continue}if(o.verbose)console.log(`\uD83D\uDCC4 ${D}`),console.log(` Query: ${E.substring(0,60)}${E.length>60?"...":""}`);let S=await r`EXPLAIN ${r.unsafe(E)}`;if(l.push({file:D,query:E,plan:Array.isArray(S)?S:[S]}),o.verbose&&!o.json){if(console.log(" Plan:"),Array.isArray(S))for(let v of S)if(typeof v==="string")console.log(` ${v}`);else if(v["QUERY PLAN"])console.log(` ${v["QUERY PLAN"]}`);else if(v.plan)console.log(` ${JSON.stringify(v.plan)}`);else console.log(` ${JSON.stringify(v)}`);console.log()}}catch(E){if(l.push({file:D,query:Gn(D,"utf8").trim(),plan:[],error:E.message}),o.verbose)console.log(` \u2717 Error: ${E.message}
297
+ `)}let x=l.filter((D)=>!D.error).length,y=l.filter((D)=>D.error).length;if(o.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: ${x} successful, ${y} failed`);if(o.json)console.log(JSON.stringify(l,null,2));return l}catch(d){throw console.error("Error explaining queries:",d.message),d}}import{writeFileSync as oi}from"fs";import{join as li}from"path";import ui from"process";async function W(s={}){let o=s.dir||li(ui.cwd(),"app/Models"),l=s.format||"mermaid";try{let d=await u({modelsDir:o});if(!d||Object.keys(d).length===0)return console.error("No models found"),"";let g="";if(l==="mermaid")g=ci(d);else if(l==="dot")g=di(d);else return console.error(`Unsupported format: ${l}`),"";if(s.output)oi(s.output,g,"utf8"),console.log(`\u2713 Diagram written to: ${s.output}`);else console.log(g);return g}catch(d){throw console.error("Error generating diagram:",d.message),d}}function ci(s){let o=["erDiagram"];for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.attributes||{};o.push(` ${g} {`);for(let[y,D]of Object.entries(x)){let E=D.type||"string",S=d.primaryKey===y?"PK":"",v=D.unique?"UK":"",Q=[S,v].filter(Boolean).join(","),G=Q?` "${Q}"`:"";o.push(` ${E} ${y}${G}`)}o.push(" }")}for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.relations||{};for(let[y,D]of Object.entries(x)){let{type:E,model:S}=D,v=s[S]?.table||`${S?.toLowerCase()}s`||"unknown",Q="";if(E==="hasOne")Q="||--||";else if(E==="hasMany")Q="||--o{";else if(E==="belongsTo")Q="}o--||";else if(E==="belongsToMany"||E==="manyToMany")Q="}o--o{";else Q="||--||";o.push(` ${g} ${Q} ${v} : "${y}"`)}}return o.join(`
298
+ `)}function di(s){let o=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.attributes||{},y=[];for(let[E,S]of Object.entries(x)){let v=S.type||"string",Q=d.primaryKey===E?" (PK)":"",G=S.unique?" (UK)":"";y.push(`${E}: ${v}${Q}${G}`)}let D=`${y.join("\\l")}\\l`;o.push(` ${g} [label="{${g}|${D}}"];`)}o.push("");for(let[l,d]of Object.entries(s)){let g=d.table||`${l.toLowerCase()}s`,x=d.relations||{};for(let[y,D]of Object.entries(x)){let{type:E,model:S}=D,v=s[S]?.table||`${S?.toLowerCase()}s`||"unknown",Q="";if(E==="hasOne")Q="arrowhead=none, arrowtail=normal";else if(E==="hasMany")Q="arrowhead=crow, arrowtail=none";else if(E==="belongsTo")Q="arrowhead=normal, arrowtail=none";else if(E==="belongsToMany"||E==="manyToMany")Q="arrowhead=crow, arrowtail=crow";o.push(` ${g} -> ${v} [label="${y}", ${Q}];`)}}return o.push("}"),o.join(`
299
+ `)}import{existsSync as Jt,mkdirSync as mi,readdirSync as fi,writeFileSync as pi}from"fs";import{dirname as Hn,join as qt}from"path";import Wt from"process";function Zt(s){let o=s;while(o!==Hn(o)){if(Jt(qt(o,"package.json")))return o;o=Hn(o)}return Wt.cwd()}async function Xn(s){if(!Jt(s))return console.log(`-- Seeders directory not found: ${s}`),[];let l=fi(s).sort((g,x)=>g.localeCompare(x)).filter((g)=>(g.endsWith(".ts")||g.endsWith(".js"))&&g!=="index.ts"&&g!=="index.js"),d=[];for(let g of l){let x=qt(s,g);try{let y=await import(x),D=y.default||y[Object.keys(y)[0]];if(D&&typeof D==="function"){let E=new D;if(E&&typeof E.run==="function")d.push({name:g.replace(/\.(ts|js)$/,""),className:String(D.name||""),instance:E})}}catch(y){console.error(`-- Failed to load seeder ${g}:`,y)}}return d.sort((g,x)=>g.instance.order-x.instance.order),d}async function A(s={}){let o=Zt(Wt.cwd()),l=s.seedersDir||qt(o,"database/seeders"),d=s.verbose??!0;if(d)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${l}`);let g=await Xn(l);if(g.length===0){console.log("-- No seeders found");return}if(d)console.log(`-- Found ${g.length} seeder(s)`);let x=i();for(let{name:y,instance:D}of g)try{if(d)console.log(`-- Seeding: ${y}`);if(await D.run(x),d)console.log(`-- \u2713 Seeded: ${y}`)}catch(E){throw console.error(`-- \u2717 Failed to seed ${y}:`,E),E}if(d)console.log("-- All seeders completed successfully")}async function U(s,o={}){let l=Zt(Wt.cwd()),d=qt(l,"database/seeders"),g=o.verbose??!0;if(g)console.log(`-- Running seeder: ${s}`);let x=await Xn(d),y=x.find((E)=>E.className===s)??x.find((E)=>E.name===s);if(!y){let E=x.map((S)=>S.className||S.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${s}. Available: ${E}`),Error(`Seeder not found: ${s}. Available: ${E}`)}let D=i();try{if(await y.instance.run(D),g)console.log(`-- \u2713 Seeder completed: ${s}`)}catch(E){throw console.error(`-- \u2717 Seeder failed: ${s}`,E),E}}async function ye(s){let o=Zt(Wt.cwd()),l=qt(o,"database/seeders");if(!Jt(l))mi(l,{recursive:!0}),console.log(`-- Created seeders directory: ${l}`);let g=`${s.replace(/Seeder$/i,"")}Seeder`,x=`${g}.ts`,y=qt(l,x);if(Jt(y))throw console.error(`-- Seeder already exists: ${y}`),Error(`Seeder already exists: ${y}`);let D=`import type { QueryBuilder } from 'bun-query-builder'
299
300
  import { Seeder } from 'bun-query-builder'
300
301
  import { faker } from '@stacksjs/ts-faker'
301
302
 
@@ -340,7 +341,7 @@ export default class ${g} extends Seeder {
340
341
  return 100
341
342
  }
342
343
  }
343
- `;fi(y,E),console.log(`-- \u2713 Created seeder: ${y}`)}async function be(s={}){let o=Zt(Wt.cwd()),l=s.modelsDir||qt(o,"app/Models"),d=s.seedersDir||qt(o,"database/seeders"),g=s.verbose??!0;try{let{resetDatabase:x,generateMigration:y,executeMigration:E}=await import("./chunk-vn93p5q6.js");if(g)console.log("-- Refreshing database...");if(await x(l),g)console.log("-- Running migrations...");if(await y(l,{full:!0}),await E(),g)console.log("-- Running seeders...");if(await A({seedersDir:d,verbose:g}),g)console.log("-- \u2713 Database refreshed successfully")}catch(x){throw console.error("-- \u2717 Database refresh failed:",x),x}}function Te(s,o,l={}){let d=u({modelsDir:s}),g=$e(d);if(e.debug)e.debug.captureText=!0;let x=i({schema:g}),y=x.selectFrom(o).limit(Number(l.limit||10)).toText?.()??"";return console.log(y||"[query]"),{sql:y,qb:x,schema:g}}async function we(s,o={}){let l=i(),d=o.params?JSON.parse(o.params):void 0,g=await l.unsafe(s,d);return console.log(JSON.stringify(g)),g}import{existsSync as pi}from"fs";import{dirname as Jn,join as Zn}from"path";import er from"process";function gi(s){let o=s;while(o!==Jn(o)){if(pi(Zn(o,"package.json")))return o;o=Jn(o)}return er.cwd()}async function V(s){if(!s)s=Zn(gi(er.cwd()),"app/Models");let o=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${o}`),console.log();let l=[];try{let d=await u({modelsDir:s}),g=H(d,{dialect:o}),x=i(),y=[];if(o==="sqlite")y=(await x.unsafe(`
344
+ `;pi(y,D),console.log(`-- \u2713 Created seeder: ${y}`)}async function be(s={}){let o=Zt(Wt.cwd()),l=s.modelsDir||qt(o,"app/Models"),d=s.seedersDir||qt(o,"database/seeders"),g=s.verbose??!0;try{let{resetDatabase:x,generateMigration:y,executeMigration:D}=await import("./chunk-dvg3pg8k.js");if(g)console.log("-- Refreshing database...");if(await x(l),g)console.log("-- Running migrations...");if(await y(l,{full:!0}),await D(),g)console.log("-- Running seeders...");if(await A({seedersDir:d,verbose:g}),g)console.log("-- \u2713 Database refreshed successfully")}catch(x){throw console.error("-- \u2717 Database refresh failed:",x),x}}function Te(s,o,l={}){let d=u({modelsDir:s}),g=$e(d);if(e.debug)e.debug.captureText=!0;let x=i({schema:g}),y=x.selectFrom(o).limit(Number(l.limit||10)).toText?.()??"";return console.log(y||"[query]"),{sql:y,qb:x,schema:g}}async function we(s,o={}){let l=i(),d=o.params?JSON.parse(o.params):void 0,g=await l.unsafe(s,d);return console.log(JSON.stringify(g)),g}import{existsSync as gi}from"fs";import{dirname as Jn,join as Zn}from"path";import er from"process";function yi(s){let o=s;while(o!==Jn(o)){if(gi(Zn(o,"package.json")))return o;o=Jn(o)}return er.cwd()}async function V(s){if(!s)s=Zn(yi(er.cwd()),"app/Models");let o=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${o}`),console.log();let l=[];try{let d=await u({modelsDir:s}),g=H(d,{dialect:o}),x=i(),y=[];if(o==="sqlite")y=(await x.unsafe(`
344
345
  SELECT name FROM sqlite_master
345
346
  WHERE type = 'table'
346
347
  AND name NOT LIKE 'sqlite_%'
@@ -357,7 +358,7 @@ export default class ${g} extends Seeder {
357
358
  WHERE table_schema = DATABASE()
358
359
  AND table_type = 'BASE TABLE'
359
360
  AND table_name != 'migrations'
360
- `)).map((v)=>v.table_name);let E=g.tables.map((S)=>S.table);for(let S of E)if(!y.includes(S))l.push({type:"missing_table",severity:"error",table:S,message:`Table '${S}' defined in models but not found in database`});for(let S of y)if(!E.includes(S))l.push({type:"extra_table",severity:"warning",table:S,message:`Table '${S}' exists in database but not defined in models`});for(let S of g.tables){if(!y.includes(S.table))continue;let v=[];if(o==="sqlite")v=(await x.unsafe(`PRAGMA table_info(${S.table})`)).map((Ne)=>({name:Ne.name,type:Ne.type.toLowerCase()}));else if(o==="postgres")v=(await x.unsafe(`
361
+ `)).map((v)=>v.table_name);let D=g.tables.map((S)=>S.table);for(let S of D)if(!y.includes(S))l.push({type:"missing_table",severity:"error",table:S,message:`Table '${S}' defined in models but not found in database`});for(let S of y)if(!D.includes(S))l.push({type:"extra_table",severity:"warning",table:S,message:`Table '${S}' exists in database but not defined in models`});for(let S of g.tables){if(!y.includes(S.table))continue;let v=[];if(o==="sqlite")v=(await x.unsafe(`PRAGMA table_info(${S.table})`)).map((Ne)=>({name:Ne.name,type:Ne.type.toLowerCase()}));else if(o==="postgres")v=(await x.unsafe(`
361
362
  SELECT column_name, data_type
362
363
  FROM information_schema.columns
363
364
  WHERE table_name = $1
@@ -366,18 +367,18 @@ export default class ${g} extends Seeder {
366
367
  FROM information_schema.columns
367
368
  WHERE table_name = ?
368
369
  AND table_schema = DATABASE()
369
- `,[S.table])).map((Ne)=>({name:Ne.column_name,type:Ne.data_type.toLowerCase()}));let Q=v.map((Re)=>Re.name),G=S.columns.map((Re)=>Re.name);for(let Re of S.columns)if(!Q.includes(Re.name))l.push({type:"missing_column",severity:"error",table:S.table,column:Re.name,expected:Re.type,message:`Column '${S.table}.${Re.name}' defined in model but not found in database`});for(let Re of v)if(!G.includes(Re.name))l.push({type:"extra_column",severity:"warning",table:S.table,column:Re.name,actual:Re.type,message:`Column '${S.table}.${Re.name}' exists in database but not defined in model`});for(let Re of S.columns){let Ne=v.find((Ce)=>Ce.name===Re.name);if(Ne){let Ce=(Oe)=>Oe.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),_e=Ce(Re.type),Ve=Ce(Ne.type);if(_e!==Ve)l.push({type:"type_mismatch",severity:"warning",table:S.table,column:Re.name,expected:Re.type,actual:Ne.type,message:`Column '${S.table}.${Re.name}' type mismatch: expected '${Re.type}', found '${Ne.type}'`})}}}let D=l.filter((S)=>S.severity==="error").length===0;if(D&&l.length===0)console.log("\u2713 Schema is valid - no issues found"),console.log();else{console.log(`-- Found ${l.length} issue(s)`),console.log();let S=l.filter((Q)=>Q.severity==="error"),v=l.filter((Q)=>Q.severity==="warning");if(S.length>0){console.log(`\u2717 Errors (${S.length}):`);for(let Q of S)console.log(` - ${Q.message}`);console.log()}if(v.length>0){console.log(`\u26A0 Warnings (${v.length}):`);for(let Q of v)console.log(` - ${Q.message}`);console.log()}if(!D)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:D,issues:l}}catch(d){throw console.error("-- Schema validation failed:",d),d}}async function Se(s){return V(s)}async function De(s={}){let o=Number(s.attempts||10),l=Number(s.delay||100),d=i();try{return await d.waitForReady({attempts:o,delayMs:l}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class w{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(s){this.driver=c(s.config),this.client=s.client,this.tableName=s.config.tableName??""}table(s){return this.tableName=s,this}index(s){return this.indexName=s,this}entity(s){return this.entityType=s,this}whereKey(s,o,l){return this.keyConditions.push({attribute:s,operator:o,value:l}),this}wherePartitionKey(s,o){return this.whereKey(s,"=",o)}whereSortKey(s,o){return this.whereKey(s,"=",o)}whereSortKeyBeginsWith(s,o){return this.keyConditions.push({attribute:s,operator:"begins_with",value:o}),this}whereSortKeyBetween(s,o,l){return this.keyConditions.push({attribute:s,operator:"BETWEEN",values:[o,l]}),this}where(s,o,l){return this.filterConditions.push({attribute:s,operator:o,value:l}),this}whereEquals(s,o){return this.where(s,"=",o)}whereLessThan(s,o){return this.where(s,"<",o)}whereLessThanOrEqual(s,o){return this.where(s,"<=",o)}whereGreaterThan(s,o){return this.where(s,">",o)}whereGreaterThanOrEqual(s,o){return this.where(s,">=",o)}whereBetween(s,o,l){return this.filterConditions.push({attribute:s,operator:"BETWEEN",values:[o,l]}),this}whereBeginsWith(s,o){return this.filterConditions.push({attribute:s,operator:"begins_with",value:o}),this}whereContains(s,o){return this.where(s,"contains",o)}whereExists(s){return this.where(s,"attribute_exists")}whereNotExists(s){return this.where(s,"attribute_not_exists")}whereIn(s,o){return this.filterConditions.push({attribute:s,operator:"IN",values:o}),this}select(...s){return this.projectionAttrs.push(...s),this}limit(s){return this.limitValue=s,this}ascending(){return this.scanForward=!0,this}descending(){return this.scanForward=!1,this}consistentRead(s=!0){return this.consistentReadValue=s,this}startFrom(s){return this.startKey=s,this}buildQueryParams(){return this.driver.buildQueryParams({tableName:this.tableName,indexName:this.indexName,keyConditions:this.keyConditions,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,scanIndexForward:this.scanForward,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}buildScanParams(){return this.driver.buildScanParams({tableName:this.tableName,indexName:this.indexName,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}toQueryRequest(){let s=this.buildQueryParams(),o={TableName:s.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(s.indexName)o.IndexName=s.indexName;let l=0;if(s.keyConditions.length>0){let d=[];for(let g of s.keyConditions){let x=`#key${l}`;if(o.ExpressionAttributeNames[x]=g.attribute,g.operator==="begins_with"){let y=`:keyval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`begins_with(${x}, ${y})`)}else if(g.operator==="BETWEEN"){let y=`:keyval${l}a`,E=`:keyval${l}b`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.values?.[0]}).v,o.ExpressionAttributeValues[E]=this.driver.marshall({v:g.values?.[1]}).v,d.push(`${x} BETWEEN ${y} AND ${E}`)}else{let y=`:keyval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${x} ${g.operator} ${y}`)}l++}o.KeyConditionExpression=d.join(" AND ")}if(s.filterConditions&&s.filterConditions.length>0){let d=[];for(let g of s.filterConditions){let x=`#flt${l}`;if(o.ExpressionAttributeNames[x]=g.attribute,g.operator==="attribute_exists")d.push(`attribute_exists(${x})`);else if(g.operator==="attribute_not_exists")d.push(`attribute_not_exists(${x})`);else if(g.operator==="begins_with"||g.operator==="contains"){let y=`:fltval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${g.operator}(${x}, ${y})`)}else if(g.operator==="BETWEEN"){let y=`:fltval${l}a`,E=`:fltval${l}b`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.values?.[0]}).v,o.ExpressionAttributeValues[E]=this.driver.marshall({v:g.values?.[1]}).v,d.push(`${x} BETWEEN ${y} AND ${E}`)}else if(g.operator==="IN"){let y=(g.values??[]).map((E,D)=>`:fltval${l}_${D}`);g.values?.forEach((E,D)=>{o.ExpressionAttributeValues[`:fltval${l}_${D}`]=this.driver.marshall({v:E}).v}),d.push(`${x} IN (${y.join(", ")})`)}else{let y=`:fltval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${x} ${g.operator} ${y}`)}l++}o.FilterExpression=d.join(" AND ")}if(s.projectionAttributes&&s.projectionAttributes.length>0){let d=[];for(let g of s.projectionAttributes){let x=`#proj${l}`;o.ExpressionAttributeNames[x]=g,d.push(x),l++}o.ProjectionExpression=d.join(", ")}if(s.limit!==void 0)o.Limit=s.limit;if(s.scanIndexForward!==void 0)o.ScanIndexForward=s.scanIndexForward;if(s.exclusiveStartKey)o.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)o.ConsistentRead=s.consistentRead;if(Object.keys(o.ExpressionAttributeNames).length===0)delete o.ExpressionAttributeNames;if(Object.keys(o.ExpressionAttributeValues).length===0)delete o.ExpressionAttributeValues;return o}toScanRequest(){let s=this.buildScanParams(),o={TableName:s.tableName};if(s.indexName)o.IndexName=s.indexName;if(s.filterConditions&&s.filterConditions.length>0){let{expression:l,expressionAttributeNames:d,expressionAttributeValues:g}=this.driver.buildFilterExpression(s.filterConditions);o.FilterExpression=l,o.ExpressionAttributeNames=d,o.ExpressionAttributeValues=g}if(s.projectionAttributes&&s.projectionAttributes.length>0){let{expression:l,expressionAttributeNames:d}=this.driver.buildProjectionExpression(s.projectionAttributes);o.ProjectionExpression=l,o.ExpressionAttributeNames={...o.ExpressionAttributeNames,...d}}if(s.limit!==void 0)o.Limit=s.limit;if(s.exclusiveStartKey)o.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)o.ConsistentRead=s.consistentRead;return o}async query(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toQueryRequest() to get the request params.");let s=this.toQueryRequest(),o=await this.client.query(s);return{items:o.Items?.map((l)=>this.driver.unmarshall(l)),count:o.Count,scannedCount:o.ScannedCount,lastEvaluatedKey:o.LastEvaluatedKey?this.driver.unmarshall(o.LastEvaluatedKey):void 0,consumedCapacity:o.ConsumedCapacity}}async scan(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toScanRequest() to get the request params.");let s=this.toScanRequest(),o=await this.client.scan(s);return{items:o.Items?.map((l)=>this.driver.unmarshall(l)),count:o.Count,scannedCount:o.ScannedCount,lastEvaluatedKey:o.LastEvaluatedKey?this.driver.unmarshall(o.LastEvaluatedKey):void 0,consumedCapacity:o.ConsumedCapacity}}async getAll(){let s=[],o;do{if(o)this.startFrom(o);let l=this.keyConditions.length>0?await this.query():await this.scan();if(l.items)s.push(...l.items);o=l.lastEvaluatedKey}while(o);return s}async first(){return this.limit(1),(this.keyConditions.length>0?await this.query():await this.scan()).items?.[0]}async count(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.keyConditions.length>0?this.toQueryRequest():this.toScanRequest();return s.Select="COUNT",(this.keyConditions.length>0?await this.client.query(s):await this.client.scan(s)).Count??0}reset(){return this.indexName=void 0,this.entityType=void 0,this.keyConditions=[],this.filterConditions=[],this.projectionAttrs=[],this.limitValue=void 0,this.scanForward=!0,this.consistentReadValue=!1,this.startKey=void 0,this}}class h{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(s){this.driver=c(s.config),this.client=s.client,this.tableName=s.config.tableName??""}table(s){return this.tableName=s,this}key(s){return this.keyData=s,this}item(s){return this.itemData=s,this}set(s,o){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[s]=o,this}setMany(s){if(!this.updateExpressions.set)this.updateExpressions.set={};return Object.assign(this.updateExpressions.set,s),this}remove(s){if(!this.updateExpressions.remove)this.updateExpressions.remove=[];return this.updateExpressions.remove.push(s),this}add(s,o){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[s]=o,this}deleteFromSet(s,o){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[s]=o,this}condition(s){return this.conditionExpr=s,this}ifNotExists(s="pk"){return this.conditionExpr=`attribute_not_exists(${s})`,this}ifExists(s="pk"){return this.conditionExpr=`attribute_exists(${s})`,this}returnOld(){return this.returnValuesOption="ALL_OLD",this}returnNew(){return this.returnValuesOption="ALL_NEW",this}toPutRequest(){let s={TableName:this.tableName,Item:this.driver.marshall(this.itemData)};if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toUpdateRequest(){let s={TableName:this.tableName,Key:this.driver.marshall(this.keyData)},{expression:o,expressionAttributeNames:l,expressionAttributeValues:d}=this.driver.buildUpdateExpression(this.updateExpressions);if(o)s.UpdateExpression=o,s.ExpressionAttributeNames=l,s.ExpressionAttributeValues=d;if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toDeleteRequest(){let s={TableName:this.tableName,Key:this.driver.marshall(this.keyData)};if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toGetRequest(){return{TableName:this.tableName,Key:this.driver.marshall(this.keyData)}}async put(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toPutRequest(),o=await this.client.putItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toUpdateRequest(),o=await this.client.updateItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toDeleteRequest(),o=await this.client.deleteItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toGetRequest(),o=await this.client.getItem(s);if(o.Item)return this.driver.unmarshall(o.Item);return}}function an(s){return new w(s)}function on(s){return new h(s)}function ln(s){let o=c(s.config);return{query:()=>new w(s),item:()=>new h(s),driver:o,registerEntity:(l)=>o.registerEntity(l),buildKey:(l,d)=>o.buildPrimaryKey(l,d)}}class tt{config;entities=new Map;pkAttribute;skAttribute;typeAttribute;constructor(s){this.config=s,this.pkAttribute=s.pkAttribute??"pk",this.skAttribute=s.skAttribute??"sk",this.typeAttribute=s.typeAttribute??"_type";for(let o of s.entities)this.entities.set(o.name,o)}getEntity(s){return this.entities.get(s)}registerEntity(s){this.entities.set(s.name,s)}buildKey(s,o){let l=this.entities.get(s);if(!l)throw Error(`Entity not found: ${s}`);let d=this.interpolatePattern(l.pkPattern,o),g=this.interpolatePattern(l.skPattern,o);return{pk:d,sk:g}}buildGSIKey(s,o,l){let d=this.entities.get(s);if(!d)throw Error(`Entity not found: ${s}`);let g=d.indexes?.find((E)=>E.name===o);if(!g)throw Error(`GSI not found: ${o} for entity ${s}`);let x=this.interpolatePattern(g.pkPattern,l),y=g.skPattern?this.interpolatePattern(g.skPattern,l):void 0;return{pk:x,sk:y}}createItem(s,o){let{pk:l,sk:d}=this.buildKey(s,o),g=this.entities.get(s),x={[this.pkAttribute]:l,[this.skAttribute]:d,[this.typeAttribute]:s,...o};if(g.indexes)for(let y of g.indexes){let E=this.buildGSIKey(s,y.name,o),D=this.config.indexes?.find((S)=>S.name===y.name);if(D){if(x[D.pkAttribute]=E.pk,D.skAttribute&&E.sk)x[D.skAttribute]=E.sk}}return x}parseEntityType(s){if(s[this.typeAttribute])return s[this.typeAttribute];let o=s[this.pkAttribute];if(!o)return;for(let[l,d]of this.entities){let g=d.pkPattern.split("${")[0];if(o.startsWith(g))return l}return}parseItem(s){let o=this.parseEntityType(s);if(!o)return;let{[this.pkAttribute]:l,[this.skAttribute]:d,[this.typeAttribute]:g,...x}=s;return{type:o,data:x}}getEntityPrefix(s){let o=this.entities.get(s);if(!o)throw Error(`Entity not found: ${s}`);return o.pkPattern.split("${")[0]}generateTableDefinition(){let s=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],o=[];if(this.config.indexes)for(let l of this.config.indexes){if(!s.find((d)=>d.name===l.pkAttribute))s.push({name:l.pkAttribute,type:"S"});if(l.skAttribute&&!s.find((d)=>d.name===l.skAttribute))s.push({name:l.skAttribute,type:"S"});o.push({indexName:l.name,keySchema:{partitionKey:l.pkAttribute,sortKey:l.skAttribute},projection:{type:"ALL"}})}return{tableName:this.config.tableName,keySchema:{partitionKey:this.pkAttribute,sortKey:this.skAttribute},attributeDefinitions:s,globalSecondaryIndexes:o.length>0?o:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(s,o){return s.replace(/\$\{(\w+)\}/g,(l,d)=>{if(!(d in o))throw Error(`Missing value for pattern key: ${d}`);return String(o[d])})}}class nt{manager;entityName;options;constructor(s,o,l){this.manager=s,this.entityName=o,this.options=l}async create(s){let o=this.manager.createItem(this.entityName,s),l=new h(this.options).table(this.options.config.tableName).item(o).ifNotExists("pk");if(this.options.client)await l.put();return s}async get(s){let{pk:o,sk:l}=this.manager.buildKey(this.entityName,s),d=new h(this.options).table(this.options.config.tableName).key({pk:o,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");let g=await d.get();if(!g)return;return this.manager.parseItem(g)?.data}async update(s,o){let{pk:l,sk:d}=this.manager.buildKey(this.entityName,s),g=new h(this.options).table(this.options.config.tableName).key({pk:l,sk:d}).setMany(o).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let x=await g.update();if(!x)return;return this.manager.parseItem(x)?.data}async delete(s){let{pk:o,sk:l}=this.manager.buildKey(this.entityName,s),d=new h(this.options).table(this.options.config.tableName).key({pk:o,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");return await d.delete(),!0}query(){return new rt(this.manager,this.entityName,this.options)}async findAll(){let s=this.manager.typeAttribute??"_type",o=new w(this.options).table(this.options.config.tableName).whereEquals(s,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await o.getAll()).map((d)=>this.manager.parseItem(d)).filter((d)=>d!==void 0).map((d)=>d.data)}}class rt{manager;entityName;options;builder;pkValue;skConditions=[];constructor(s,o,l){this.manager=s,this.entityName=o,this.options=l,this.builder=new w(l).table(l.config.tableName)}wherePartitionKey(s){let{pk:o}=this.manager.buildKey(this.entityName,s);this.pkValue=o;let l=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(l,o),this}whereSortKey(s){let{sk:o}=this.manager.buildKey(this.entityName,s),l=this.manager.skAttribute??"sk";return this.builder.whereSortKey(l,o),this}whereSortKeyBeginsWith(s){let o=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(o,s),this}useIndex(s,o){let l=this.manager.buildGSIKey(this.entityName,s,o),d=this.manager.config.indexes?.find((g)=>g.name===s);if(!d)throw Error(`GSI configuration not found: ${s}`);return this.builder.index(s),this.builder.wherePartitionKey(d.pkAttribute,l.pk),this}where(s,o,l){return this.builder.where(s,o,l),this}select(...s){return this.builder.select(...s),this}limit(s){return this.builder.limit(s),this}descending(){return this.builder.descending(),this}async execute(){if(!this.options.client)throw Error("DynamoDB client not provided");return((await this.builder.query()).items??[]).map((o)=>this.manager.parseItem(o)).filter((o)=>o!==void 0).map((o)=>o.data)}async first(){return this.limit(1),(await this.execute())[0]}}function it(s){return new tt(s)}function st(s,o,l){return new nt(s,o,l)}var cn={simpleEntity:(s,o="id")=>({name:s,pkPattern:`${s.toUpperCase()}#\${${o}}`,skPattern:"METADATA",keyFields:[o]}),oneToMany:(s,o,l="id",d="id")=>({parent:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},child:{name:o,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${o.toUpperCase()}#\${${d}}`,keyFields:[l,d]}}),manyToMany:(s,o,l="id",d="relatedId")=>({entity:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},relation:{name:o,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${o.toUpperCase()}#\${${d}}`,keyFields:[l,d],indexes:[{name:"GSI1",pkPattern:`${s.toUpperCase()}#\${${d}}`,skPattern:`${o.toUpperCase()}#\${${l}}`}]}}),hierarchical:(s,o="rootId",l="path")=>({name:s,pkPattern:`ROOT#\${${o}}`,skPattern:`PATH#\${${l}}`,keyFields:[o,l]})};function at(s,o){let l={};for(let[d,g]of Object.entries(s))if(g)l[d]=g.replace(/\{([^}]+)\}/g,(x,y)=>o[y]!==void 0?String(o[y]):`{${y}}`);return l}async function Pt(s){return{models:new Map}}function un(s){return s}function dn(s){return s}function fn(s){return s}function mn(s){return s}class ot{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(s){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...s};let o={region:s.region,endpoint:s.endpoint,credentials:s.credentials,tableName:s.tableName};this.driver=c(o);let l={tableName:s.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=it(l),this.queryBuilderOptions={config:o}}setClient(s){return this.queryBuilderOptions.client=s,this}async discoverModels(){if(!this.config.modelsPath)throw Error("modelsPath must be configured to use discoverModels()");let s=await Pt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),o=[];for(let[,l]of s.models)this.registerParsedModel(l),o.push(l);return o}registerModel(s){let o=this.parseWithTooling(s);return this.registerParsedModel(o)}registerParsedModel(s){this.models.set(s.name,s);let o=this.toSingleTableEntity(s);this.singleTableManager.registerEntity(o);let l=this.toEntityMapping(s);return this.driver.registerEntity(l),s}registerModels(s){return s.map((o)=>this.registerModel(o))}getModel(s){return this.models.get(s)}getAllModels(){return Array.from(this.models.values())}repository(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return st(this.singleTableManager,s,this.queryBuilderOptions)}query(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new w(this.queryBuilderOptions).table(this.config.tableName).entity(s)}item(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new h(this.queryBuilderOptions).table(this.config.tableName)}buildKey(s,o){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let d=at(l.keyPatterns,o);return{pk:d.pk,sk:d.sk}}createItem(s,o){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let d=at(l.keyPatterns,o),{pk:g,sk:x}=d,y={[this.config.pkAttribute]:g,[this.config.skAttribute]:x,[this.config.entityTypeAttribute]:l.name,...o};if(l.hasTimestamps){let E=new Date().toISOString();if(!y.createdAt)y.createdAt=E;y.updatedAt=E}if(l.hasVersioning){if(!y._v)y._v=1}return y}parseItem(s){let o=s[this.config.entityTypeAttribute];if(!o)return;let{[this.config.pkAttribute]:l,[this.config.skAttribute]:d,[this.config.entityTypeAttribute]:g,...x}=s;return{type:o,data:x}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(s){let o=this.models.get(s);if(!o)throw Error(`Model not found: ${s}`);return o.accessPatterns}parseWithTooling(s){let o=s.name.toUpperCase(),l=s.primaryKey??"id",d=this.config.keyDelimiter,g=this.parseAttributes(s),x=this.parseRelationships(s,l),y={pk:`${o}${d}{${l}}`,sk:`${o}${d}{${l}}`,...this.deriveGSIKeyPatterns(o,l,d,x)},E=this.deriveAccessPatterns(s.name,o,l,x);return{name:s.name,entityType:o,primaryKey:l,attributes:g,relationships:x,keyPatterns:y,accessPatterns:E,traits:s.traits??{},hasTimestamps:s.traits?.useTimestamps??!1,hasSoftDeletes:s.traits?.useSoftDeletes??!1,hasUuid:s.traits?.useUuid??!1,hasTtl:s.traits?.useTtl??!1,hasVersioning:s.traits?.useVersioning??!1,original:s}}parseAttributes(s){let o=[];if(o.push({name:s.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),s.attributes)for(let[l,d]of Object.entries(s.attributes))o.push({name:l,fillable:d.fillable??!0,required:d.required??!1,nullable:d.nullable??!0,unique:d.unique??!1,hidden:d.hidden??!1,defaultValue:d.default,cast:d.cast,dynamoDbType:this.inferDynamoDBType(d)});if(s.traits?.useTimestamps)o.push({name:"createdAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"},{name:"updatedAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"});if(s.traits?.useSoftDeletes)o.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return o}inferDynamoDBType(s){if(s.cast){let o=s.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(o))return"N";if(["boolean","bool"].includes(o))return"BOOL";if(["array","list"].includes(o))return"L";if(["object","json","map"].includes(o))return"M"}if(s.validation?.rule){let o=String(s.validation.rule);if(o.includes("integer")||o.includes("numeric")||o.includes("number"))return"N";if(o.includes("boolean"))return"BOOL";if(o.includes("array"))return"L";if(o.includes("object"))return"M"}return"S"}parseRelationships(s,o){let l=[];if(s.hasOne)for(let d of s.hasOne)l.push({type:"hasOne",relatedModel:d,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,requiresGsi:!0});if(s.hasMany)for(let d of s.hasMany)l.push({type:"hasMany",relatedModel:d,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,requiresGsi:!1});if(s.belongsTo)for(let d of s.belongsTo)l.push({type:"belongsTo",relatedModel:d,foreignKey:`${d.toLowerCase()}Id`,localKey:o,requiresGsi:!0});if(s.belongsToMany){let d=Array.isArray(s.belongsToMany)?s.belongsToMany:Object.values(s.belongsToMany);for(let g of d){let x=typeof g==="string"?g:g?.model;if(!x)continue;let y=[s.name,x].sort();l.push({type:"belongsToMany",relatedModel:x,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,pivotEntity:y.join(""),requiresGsi:!0})}}return l}deriveGSIKeyPatterns(s,o,l,d){let g={},x=1;for(let y of d)if(y.requiresGsi&&x<=5)g[`gsi${x}pk`]=`${y.relatedModel.toUpperCase()}${l}{${y.foreignKey}}`,g[`gsi${x}sk`]=`${s}${l}{${o}}`,y.gsiIndex=x,x++;return g}deriveAccessPatterns(s,o,l,d){let g=[];g.push({name:`Get ${s} by ID`,description:`Retrieve a single ${s} by its primary key`,entityType:o,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${o}#123`,exampleSk:`${o}#123`,efficient:!0}),g.push({name:`List all ${s}s`,description:`Scan all ${s} entities`,entityType:o,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:o,efficient:!1});for(let x of d){if(x.type==="hasMany")g.push({name:`Get ${x.relatedModel}s for ${s}`,description:`Query ${x.relatedModel}s related to a ${s}`,entityType:o,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${o}#123`,exampleSk:`${x.relatedModel.toUpperCase()}#`,efficient:!0});if(x.gsiIndex){let y=`GSI${x.gsiIndex}`;g.push({name:`Get ${s}s by ${x.relatedModel}`,description:`Query ${s}s by their related ${x.relatedModel}`,entityType:o,operation:"query",index:y,keyCondition:`gsi${x.gsiIndex}pk = :pk`,examplePk:`${x.relatedModel.toUpperCase()}#123`,efficient:!0})}}return g}toSingleTableEntity(s){let o=this.extractKeyFields(s.keyPatterns.pk);return{name:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk,keyFields:o,indexes:this.extractGSIPatterns(s.keyPatterns)}}extractKeyFields(s){let o=s.match(/\{([^}]+)\}/g);if(!o)return[];return o.map((l)=>l.slice(1,-1))}extractGSIPatterns(s){let o=[];for(let l=1;l<=5;l++){let d=`gsi${l}pk`,g=`gsi${l}sk`;if(s[d])o.push({name:`GSI${l}`,pkPattern:s[d],skPattern:s[g]})}return o.length>0?o:void 0}toEntityMapping(s){return{entityType:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk}}buildGSIConfig(){let s=this.config.gsiConfig??{},o=[];if(s.gsi1pk)o.push({name:"GSI1",pkAttribute:s.gsi1pk,skAttribute:s.gsi1sk});if(s.gsi2pk)o.push({name:"GSI2",pkAttribute:s.gsi2pk,skAttribute:s.gsi2sk});if(s.gsi3pk)o.push({name:"GSI3",pkAttribute:s.gsi3pk,skAttribute:s.gsi3sk});return o}}function hn(s){return new ot(s)}function gn(s){return s.accessPatterns}function pn(s,o="#"){let l=s.name.toUpperCase(),d=s.primaryKey??"id";return{name:s.name,pkPattern:`${l}${o}\${${d}}`,skPattern:`${l}${o}\${${d}}`}}function $e(s){let o={};for(let l of Object.keys(s)){let d=s[l],g=d.definition??d.getDefinition?.()??d,x=b(g),y=g.attributes??{},E={};for(let D of Object.keys(y))E[D]=void 0;o[x]={columns:E,primaryKey:g.primaryKey??"id"}}return o}import{readdirSync as yi}from"fs";import{basename as tr,extname as nr,isAbsolute as bi,join as rr}from"path";import hi from"process";var Ti=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function xi(s){let o=nr(s);if(!Ti.has(o))return!1;let l=tr(s,o);if(l.startsWith("_")||l==="index")return!1;return!l.endsWith(".d")}function Di(s){if(!s||typeof s!=="object")return!1;let o=s;return typeof o.name==="string"||typeof o.table==="string"}function ir(s){let o=[],l=yi(s,{withFileTypes:!0}).sort((d,g)=>d.name.localeCompare(g.name));for(let d of l){let g=rr(s,d.name);if(d.isDirectory()){o.push(...ir(g));continue}if(xi(d.name))o.push(g)}return o}async function u(s){let o=s.cwd??hi.cwd(),l=bi(s.modelsDir)?s.modelsDir:rr(o,s.modelsDir),d={};for(let g of ir(l)){let x=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,y=await import(`${g}${x}`),E=y.default??y,D=E.definition??E.getDefinition?.()??E;if(!Di(D))continue;let S=D.name??tr(g,nr(g));d[S]={...D,name:S}}return d}function lt(s){let o={},l={},d={},g={},x={},y={};for(let E of Object.keys(s)){let D=s[E],S=D.definition??D.getDefinition?.()??D,v=b(S);o[E]=v,l[v]=E,d[v]=S.primaryKey??"id";let Q=[];for(let[_e,Ve]of Object.entries(S.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Ve?.type??"")))Q.push(_e);let G=S.traits??{};if(G.useTimestamps??G.timestampable)Q.push("created_at","updated_at");if(Q.length>0)y[v]=[...new Set(Q)];let Re=(_e)=>{if(!_e)return{};let Ve={};if(Array.isArray(_e)){for(let Oe of _e){let We=Me(Oe);if(We)Ve[We.model]=We.model}return Ve}if(typeof _e==="object"){for(let[Oe,We]of Object.entries(_e)){let ke=Me(We);if(ke)Ve[Oe]=ke.model}return Ve}return{}},Ne=(_e)=>{if(!_e)return{};if(Array.isArray(_e)){let Ve={};for(let Oe of _e)if(typeof Oe==="string")Ve[Oe]=Oe;else if(Oe&&typeof Oe==="object"&&typeof Oe.model==="string")Ve[Oe.model]=Oe;return Ve}return _e},Ce=(_e)=>{if(!_e)return{};return _e};if(g[v]={hasOne:Re(S.hasOne),hasMany:Re(S.hasMany),belongsTo:Re(S.belongsTo),belongsToMany:Ne(S.belongsToMany),hasOneThrough:Ce(S.hasOneThrough),hasManyThrough:Ce(S.hasManyThrough),morphOne:Re(S.morphOne),morphMany:Re(S.morphMany),morphTo:S.morphTo,morphToMany:Re(S.morphToMany),morphedByMany:Re(S.morphedByMany)},S.scopes&&typeof S.scopes==="object"){x[v]={};for(let _e of Object.keys(S.scopes)){let Ve=S.scopes[_e];if(typeof Ve==="function")x[v][_e]=Ve}}}return{modelToTable:o,tableToModel:l,primaryKeys:d,relations:g,scopes:x,models:s,temporalColumns:y}}import{existsSync as $n,mkdirSync as Ei,readdirSync as Ri,readFileSync as Si,writeFileSync as Mi}from"fs";import{dirname as sr,join as en}from"path";import cr from"process";function St(s){if(e.verbose)console.log(s)}function Bt(s){return s.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function An(s){return f(e.relations?.singularizeStrategy)(s)}var zt=0,vt=0,Ut=0,tn=!0,nn=[],jt=null;function ct(){return[...nn]}function Ai(s){let o=s;while(o!==sr(o)){if($n(en(o,"package.json")))return o;o=sr(o)}return cr.cwd()}function wi(){let s=Ai(cr.cwd()),o=$t(s,e.migrationDir);if(!$n(o))Ei(o,{recursive:!0}),St(`-- Created SQL directory: ${o}`);return o}var ut="-- qb:generated";function dt(s){return s.trimStart().startsWith(ut)}function ft(s){return s.split(`
370
+ `,[S.table])).map((Ne)=>({name:Ne.column_name,type:Ne.data_type.toLowerCase()}));let Q=v.map((Re)=>Re.name),G=S.columns.map((Re)=>Re.name);for(let Re of S.columns)if(!Q.includes(Re.name))l.push({type:"missing_column",severity:"error",table:S.table,column:Re.name,expected:Re.type,message:`Column '${S.table}.${Re.name}' defined in model but not found in database`});for(let Re of v)if(!G.includes(Re.name))l.push({type:"extra_column",severity:"warning",table:S.table,column:Re.name,actual:Re.type,message:`Column '${S.table}.${Re.name}' exists in database but not defined in model`});for(let Re of S.columns){let Ne=v.find((Ce)=>Ce.name===Re.name);if(Ne){let Ce=(Oe)=>Oe.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),_e=Ce(Re.type),Ve=Ce(Ne.type);if(_e!==Ve)l.push({type:"type_mismatch",severity:"warning",table:S.table,column:Re.name,expected:Re.type,actual:Ne.type,message:`Column '${S.table}.${Re.name}' type mismatch: expected '${Re.type}', found '${Ne.type}'`})}}}let E=l.filter((S)=>S.severity==="error").length===0;if(E&&l.length===0)console.log("\u2713 Schema is valid - no issues found"),console.log();else{console.log(`-- Found ${l.length} issue(s)`),console.log();let S=l.filter((Q)=>Q.severity==="error"),v=l.filter((Q)=>Q.severity==="warning");if(S.length>0){console.log(`\u2717 Errors (${S.length}):`);for(let Q of S)console.log(` - ${Q.message}`);console.log()}if(v.length>0){console.log(`\u26A0 Warnings (${v.length}):`);for(let Q of v)console.log(` - ${Q.message}`);console.log()}if(!E)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:E,issues:l}}catch(d){throw console.error("-- Schema validation failed:",d),d}}async function Se(s){return V(s)}async function De(s={}){let o=Number(s.attempts||10),l=Number(s.delay||100),d=i();try{return await d.waitForReady({attempts:o,delayMs:l}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class w{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(s){this.driver=c(s.config),this.client=s.client,this.tableName=s.config.tableName??""}table(s){return this.tableName=s,this}index(s){return this.indexName=s,this}entity(s){return this.entityType=s,this}whereKey(s,o,l){return this.keyConditions.push({attribute:s,operator:o,value:l}),this}wherePartitionKey(s,o){return this.whereKey(s,"=",o)}whereSortKey(s,o){return this.whereKey(s,"=",o)}whereSortKeyBeginsWith(s,o){return this.keyConditions.push({attribute:s,operator:"begins_with",value:o}),this}whereSortKeyBetween(s,o,l){return this.keyConditions.push({attribute:s,operator:"BETWEEN",values:[o,l]}),this}where(s,o,l){return this.filterConditions.push({attribute:s,operator:o,value:l}),this}whereEquals(s,o){return this.where(s,"=",o)}whereLessThan(s,o){return this.where(s,"<",o)}whereLessThanOrEqual(s,o){return this.where(s,"<=",o)}whereGreaterThan(s,o){return this.where(s,">",o)}whereGreaterThanOrEqual(s,o){return this.where(s,">=",o)}whereBetween(s,o,l){return this.filterConditions.push({attribute:s,operator:"BETWEEN",values:[o,l]}),this}whereBeginsWith(s,o){return this.filterConditions.push({attribute:s,operator:"begins_with",value:o}),this}whereContains(s,o){return this.where(s,"contains",o)}whereExists(s){return this.where(s,"attribute_exists")}whereNotExists(s){return this.where(s,"attribute_not_exists")}whereIn(s,o){return this.filterConditions.push({attribute:s,operator:"IN",values:o}),this}select(...s){return this.projectionAttrs.push(...s),this}limit(s){return this.limitValue=s,this}ascending(){return this.scanForward=!0,this}descending(){return this.scanForward=!1,this}consistentRead(s=!0){return this.consistentReadValue=s,this}startFrom(s){return this.startKey=s,this}buildQueryParams(){return this.driver.buildQueryParams({tableName:this.tableName,indexName:this.indexName,keyConditions:this.keyConditions,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,scanIndexForward:this.scanForward,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}buildScanParams(){return this.driver.buildScanParams({tableName:this.tableName,indexName:this.indexName,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}toQueryRequest(){let s=this.buildQueryParams(),o={TableName:s.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(s.indexName)o.IndexName=s.indexName;let l=0;if(s.keyConditions.length>0){let d=[];for(let g of s.keyConditions){let x=`#key${l}`;if(o.ExpressionAttributeNames[x]=g.attribute,g.operator==="begins_with"){let y=`:keyval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`begins_with(${x}, ${y})`)}else if(g.operator==="BETWEEN"){let y=`:keyval${l}a`,D=`:keyval${l}b`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.values?.[0]}).v,o.ExpressionAttributeValues[D]=this.driver.marshall({v:g.values?.[1]}).v,d.push(`${x} BETWEEN ${y} AND ${D}`)}else{let y=`:keyval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${x} ${g.operator} ${y}`)}l++}o.KeyConditionExpression=d.join(" AND ")}if(s.filterConditions&&s.filterConditions.length>0){let d=[];for(let g of s.filterConditions){let x=`#flt${l}`;if(o.ExpressionAttributeNames[x]=g.attribute,g.operator==="attribute_exists")d.push(`attribute_exists(${x})`);else if(g.operator==="attribute_not_exists")d.push(`attribute_not_exists(${x})`);else if(g.operator==="begins_with"||g.operator==="contains"){let y=`:fltval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${g.operator}(${x}, ${y})`)}else if(g.operator==="BETWEEN"){let y=`:fltval${l}a`,D=`:fltval${l}b`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.values?.[0]}).v,o.ExpressionAttributeValues[D]=this.driver.marshall({v:g.values?.[1]}).v,d.push(`${x} BETWEEN ${y} AND ${D}`)}else if(g.operator==="IN"){let y=(g.values??[]).map((D,E)=>`:fltval${l}_${E}`);g.values?.forEach((D,E)=>{o.ExpressionAttributeValues[`:fltval${l}_${E}`]=this.driver.marshall({v:D}).v}),d.push(`${x} IN (${y.join(", ")})`)}else{let y=`:fltval${l}`;o.ExpressionAttributeValues[y]=this.driver.marshall({v:g.value}).v,d.push(`${x} ${g.operator} ${y}`)}l++}o.FilterExpression=d.join(" AND ")}if(s.projectionAttributes&&s.projectionAttributes.length>0){let d=[];for(let g of s.projectionAttributes){let x=`#proj${l}`;o.ExpressionAttributeNames[x]=g,d.push(x),l++}o.ProjectionExpression=d.join(", ")}if(s.limit!==void 0)o.Limit=s.limit;if(s.scanIndexForward!==void 0)o.ScanIndexForward=s.scanIndexForward;if(s.exclusiveStartKey)o.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)o.ConsistentRead=s.consistentRead;if(Object.keys(o.ExpressionAttributeNames).length===0)delete o.ExpressionAttributeNames;if(Object.keys(o.ExpressionAttributeValues).length===0)delete o.ExpressionAttributeValues;return o}toScanRequest(){let s=this.buildScanParams(),o={TableName:s.tableName};if(s.indexName)o.IndexName=s.indexName;if(s.filterConditions&&s.filterConditions.length>0){let{expression:l,expressionAttributeNames:d,expressionAttributeValues:g}=this.driver.buildFilterExpression(s.filterConditions);o.FilterExpression=l,o.ExpressionAttributeNames=d,o.ExpressionAttributeValues=g}if(s.projectionAttributes&&s.projectionAttributes.length>0){let{expression:l,expressionAttributeNames:d}=this.driver.buildProjectionExpression(s.projectionAttributes);o.ProjectionExpression=l,o.ExpressionAttributeNames={...o.ExpressionAttributeNames,...d}}if(s.limit!==void 0)o.Limit=s.limit;if(s.exclusiveStartKey)o.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)o.ConsistentRead=s.consistentRead;return o}async query(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toQueryRequest() to get the request params.");let s=this.toQueryRequest(),o=await this.client.query(s);return{items:o.Items?.map((l)=>this.driver.unmarshall(l)),count:o.Count,scannedCount:o.ScannedCount,lastEvaluatedKey:o.LastEvaluatedKey?this.driver.unmarshall(o.LastEvaluatedKey):void 0,consumedCapacity:o.ConsumedCapacity}}async scan(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toScanRequest() to get the request params.");let s=this.toScanRequest(),o=await this.client.scan(s);return{items:o.Items?.map((l)=>this.driver.unmarshall(l)),count:o.Count,scannedCount:o.ScannedCount,lastEvaluatedKey:o.LastEvaluatedKey?this.driver.unmarshall(o.LastEvaluatedKey):void 0,consumedCapacity:o.ConsumedCapacity}}async getAll(){let s=[],o;do{if(o)this.startFrom(o);let l=this.keyConditions.length>0?await this.query():await this.scan();if(l.items)s.push(...l.items);o=l.lastEvaluatedKey}while(o);return s}async first(){return this.limit(1),(this.keyConditions.length>0?await this.query():await this.scan()).items?.[0]}async count(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.keyConditions.length>0?this.toQueryRequest():this.toScanRequest();return s.Select="COUNT",(this.keyConditions.length>0?await this.client.query(s):await this.client.scan(s)).Count??0}reset(){return this.indexName=void 0,this.entityType=void 0,this.keyConditions=[],this.filterConditions=[],this.projectionAttrs=[],this.limitValue=void 0,this.scanForward=!0,this.consistentReadValue=!1,this.startKey=void 0,this}}class h{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(s){this.driver=c(s.config),this.client=s.client,this.tableName=s.config.tableName??""}table(s){return this.tableName=s,this}key(s){return this.keyData=s,this}item(s){return this.itemData=s,this}set(s,o){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[s]=o,this}setMany(s){if(!this.updateExpressions.set)this.updateExpressions.set={};return Object.assign(this.updateExpressions.set,s),this}remove(s){if(!this.updateExpressions.remove)this.updateExpressions.remove=[];return this.updateExpressions.remove.push(s),this}add(s,o){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[s]=o,this}deleteFromSet(s,o){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[s]=o,this}condition(s){return this.conditionExpr=s,this}ifNotExists(s="pk"){return this.conditionExpr=`attribute_not_exists(${s})`,this}ifExists(s="pk"){return this.conditionExpr=`attribute_exists(${s})`,this}returnOld(){return this.returnValuesOption="ALL_OLD",this}returnNew(){return this.returnValuesOption="ALL_NEW",this}toPutRequest(){let s={TableName:this.tableName,Item:this.driver.marshall(this.itemData)};if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toUpdateRequest(){let s={TableName:this.tableName,Key:this.driver.marshall(this.keyData)},{expression:o,expressionAttributeNames:l,expressionAttributeValues:d}=this.driver.buildUpdateExpression(this.updateExpressions);if(o)s.UpdateExpression=o,s.ExpressionAttributeNames=l,s.ExpressionAttributeValues=d;if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toDeleteRequest(){let s={TableName:this.tableName,Key:this.driver.marshall(this.keyData)};if(this.conditionExpr)s.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")s.ReturnValues=this.returnValuesOption;return s}toGetRequest(){return{TableName:this.tableName,Key:this.driver.marshall(this.keyData)}}async put(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toPutRequest(),o=await this.client.putItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toUpdateRequest(),o=await this.client.updateItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toDeleteRequest(),o=await this.client.deleteItem(s);if(o.Attributes)return this.driver.unmarshall(o.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toGetRequest(),o=await this.client.getItem(s);if(o.Item)return this.driver.unmarshall(o.Item);return}}function an(s){return new w(s)}function on(s){return new h(s)}function ln(s){let o=c(s.config);return{query:()=>new w(s),item:()=>new h(s),driver:o,registerEntity:(l)=>o.registerEntity(l),buildKey:(l,d)=>o.buildPrimaryKey(l,d)}}class tt{config;entities=new Map;pkAttribute;skAttribute;typeAttribute;constructor(s){this.config=s,this.pkAttribute=s.pkAttribute??"pk",this.skAttribute=s.skAttribute??"sk",this.typeAttribute=s.typeAttribute??"_type";for(let o of s.entities)this.entities.set(o.name,o)}getEntity(s){return this.entities.get(s)}registerEntity(s){this.entities.set(s.name,s)}buildKey(s,o){let l=this.entities.get(s);if(!l)throw Error(`Entity not found: ${s}`);let d=this.interpolatePattern(l.pkPattern,o),g=this.interpolatePattern(l.skPattern,o);return{pk:d,sk:g}}buildGSIKey(s,o,l){let d=this.entities.get(s);if(!d)throw Error(`Entity not found: ${s}`);let g=d.indexes?.find((D)=>D.name===o);if(!g)throw Error(`GSI not found: ${o} for entity ${s}`);let x=this.interpolatePattern(g.pkPattern,l),y=g.skPattern?this.interpolatePattern(g.skPattern,l):void 0;return{pk:x,sk:y}}createItem(s,o){let{pk:l,sk:d}=this.buildKey(s,o),g=this.entities.get(s),x={[this.pkAttribute]:l,[this.skAttribute]:d,[this.typeAttribute]:s,...o};if(g.indexes)for(let y of g.indexes){let D=this.buildGSIKey(s,y.name,o),E=this.config.indexes?.find((S)=>S.name===y.name);if(E){if(x[E.pkAttribute]=D.pk,E.skAttribute&&D.sk)x[E.skAttribute]=D.sk}}return x}parseEntityType(s){if(s[this.typeAttribute])return s[this.typeAttribute];let o=s[this.pkAttribute];if(!o)return;for(let[l,d]of this.entities){let g=d.pkPattern.split("${")[0];if(o.startsWith(g))return l}return}parseItem(s){let o=this.parseEntityType(s);if(!o)return;let{[this.pkAttribute]:l,[this.skAttribute]:d,[this.typeAttribute]:g,...x}=s;return{type:o,data:x}}getEntityPrefix(s){let o=this.entities.get(s);if(!o)throw Error(`Entity not found: ${s}`);return o.pkPattern.split("${")[0]}generateTableDefinition(){let s=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],o=[];if(this.config.indexes)for(let l of this.config.indexes){if(!s.find((d)=>d.name===l.pkAttribute))s.push({name:l.pkAttribute,type:"S"});if(l.skAttribute&&!s.find((d)=>d.name===l.skAttribute))s.push({name:l.skAttribute,type:"S"});o.push({indexName:l.name,keySchema:{partitionKey:l.pkAttribute,sortKey:l.skAttribute},projection:{type:"ALL"}})}return{tableName:this.config.tableName,keySchema:{partitionKey:this.pkAttribute,sortKey:this.skAttribute},attributeDefinitions:s,globalSecondaryIndexes:o.length>0?o:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(s,o){return s.replace(/\$\{(\w+)\}/g,(l,d)=>{if(!(d in o))throw Error(`Missing value for pattern key: ${d}`);return String(o[d])})}}class nt{manager;entityName;options;constructor(s,o,l){this.manager=s,this.entityName=o,this.options=l}async create(s){let o=this.manager.createItem(this.entityName,s),l=new h(this.options).table(this.options.config.tableName).item(o).ifNotExists("pk");if(this.options.client)await l.put();return s}async get(s){let{pk:o,sk:l}=this.manager.buildKey(this.entityName,s),d=new h(this.options).table(this.options.config.tableName).key({pk:o,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");let g=await d.get();if(!g)return;return this.manager.parseItem(g)?.data}async update(s,o){let{pk:l,sk:d}=this.manager.buildKey(this.entityName,s),g=new h(this.options).table(this.options.config.tableName).key({pk:l,sk:d}).setMany(o).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let x=await g.update();if(!x)return;return this.manager.parseItem(x)?.data}async delete(s){let{pk:o,sk:l}=this.manager.buildKey(this.entityName,s),d=new h(this.options).table(this.options.config.tableName).key({pk:o,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");return await d.delete(),!0}query(){return new rt(this.manager,this.entityName,this.options)}async findAll(){let s=this.manager.typeAttribute??"_type",o=new w(this.options).table(this.options.config.tableName).whereEquals(s,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await o.getAll()).map((d)=>this.manager.parseItem(d)).filter((d)=>d!==void 0).map((d)=>d.data)}}class rt{manager;entityName;options;builder;pkValue;skConditions=[];constructor(s,o,l){this.manager=s,this.entityName=o,this.options=l,this.builder=new w(l).table(l.config.tableName)}wherePartitionKey(s){let{pk:o}=this.manager.buildKey(this.entityName,s);this.pkValue=o;let l=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(l,o),this}whereSortKey(s){let{sk:o}=this.manager.buildKey(this.entityName,s),l=this.manager.skAttribute??"sk";return this.builder.whereSortKey(l,o),this}whereSortKeyBeginsWith(s){let o=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(o,s),this}useIndex(s,o){let l=this.manager.buildGSIKey(this.entityName,s,o),d=this.manager.config.indexes?.find((g)=>g.name===s);if(!d)throw Error(`GSI configuration not found: ${s}`);return this.builder.index(s),this.builder.wherePartitionKey(d.pkAttribute,l.pk),this}where(s,o,l){return this.builder.where(s,o,l),this}select(...s){return this.builder.select(...s),this}limit(s){return this.builder.limit(s),this}descending(){return this.builder.descending(),this}async execute(){if(!this.options.client)throw Error("DynamoDB client not provided");return((await this.builder.query()).items??[]).map((o)=>this.manager.parseItem(o)).filter((o)=>o!==void 0).map((o)=>o.data)}async first(){return this.limit(1),(await this.execute())[0]}}function it(s){return new tt(s)}function st(s,o,l){return new nt(s,o,l)}var cn={simpleEntity:(s,o="id")=>({name:s,pkPattern:`${s.toUpperCase()}#\${${o}}`,skPattern:"METADATA",keyFields:[o]}),oneToMany:(s,o,l="id",d="id")=>({parent:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},child:{name:o,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${o.toUpperCase()}#\${${d}}`,keyFields:[l,d]}}),manyToMany:(s,o,l="id",d="relatedId")=>({entity:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},relation:{name:o,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${o.toUpperCase()}#\${${d}}`,keyFields:[l,d],indexes:[{name:"GSI1",pkPattern:`${s.toUpperCase()}#\${${d}}`,skPattern:`${o.toUpperCase()}#\${${l}}`}]}}),hierarchical:(s,o="rootId",l="path")=>({name:s,pkPattern:`ROOT#\${${o}}`,skPattern:`PATH#\${${l}}`,keyFields:[o,l]})};function at(s,o){let l={};for(let[d,g]of Object.entries(s))if(g)l[d]=g.replace(/\{([^}]+)\}/g,(x,y)=>o[y]!==void 0?String(o[y]):`{${y}}`);return l}async function Pt(s){return{models:new Map}}function un(s){return s}function dn(s){return s}function fn(s){return s}function mn(s){return s}class ot{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(s){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...s};let o={region:s.region,endpoint:s.endpoint,credentials:s.credentials,tableName:s.tableName};this.driver=c(o);let l={tableName:s.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=it(l),this.queryBuilderOptions={config:o}}setClient(s){return this.queryBuilderOptions.client=s,this}async discoverModels(){if(!this.config.modelsPath)throw Error("modelsPath must be configured to use discoverModels()");let s=await Pt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),o=[];for(let[,l]of s.models)this.registerParsedModel(l),o.push(l);return o}registerModel(s){let o=this.parseWithTooling(s);return this.registerParsedModel(o)}registerParsedModel(s){this.models.set(s.name,s);let o=this.toSingleTableEntity(s);this.singleTableManager.registerEntity(o);let l=this.toEntityMapping(s);return this.driver.registerEntity(l),s}registerModels(s){return s.map((o)=>this.registerModel(o))}getModel(s){return this.models.get(s)}getAllModels(){return Array.from(this.models.values())}repository(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return st(this.singleTableManager,s,this.queryBuilderOptions)}query(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new w(this.queryBuilderOptions).table(this.config.tableName).entity(s)}item(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new h(this.queryBuilderOptions).table(this.config.tableName)}buildKey(s,o){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let d=at(l.keyPatterns,o);return{pk:d.pk,sk:d.sk}}createItem(s,o){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let d=at(l.keyPatterns,o),{pk:g,sk:x}=d,y={[this.config.pkAttribute]:g,[this.config.skAttribute]:x,[this.config.entityTypeAttribute]:l.name,...o};if(l.hasTimestamps){let D=new Date().toISOString();if(!y.createdAt)y.createdAt=D;y.updatedAt=D}if(l.hasVersioning){if(!y._v)y._v=1}return y}parseItem(s){let o=s[this.config.entityTypeAttribute];if(!o)return;let{[this.config.pkAttribute]:l,[this.config.skAttribute]:d,[this.config.entityTypeAttribute]:g,...x}=s;return{type:o,data:x}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(s){let o=this.models.get(s);if(!o)throw Error(`Model not found: ${s}`);return o.accessPatterns}parseWithTooling(s){let o=s.name.toUpperCase(),l=s.primaryKey??"id",d=this.config.keyDelimiter,g=this.parseAttributes(s),x=this.parseRelationships(s,l),y={pk:`${o}${d}{${l}}`,sk:`${o}${d}{${l}}`,...this.deriveGSIKeyPatterns(o,l,d,x)},D=this.deriveAccessPatterns(s.name,o,l,x);return{name:s.name,entityType:o,primaryKey:l,attributes:g,relationships:x,keyPatterns:y,accessPatterns:D,traits:s.traits??{},hasTimestamps:s.traits?.useTimestamps??!1,hasSoftDeletes:s.traits?.useSoftDeletes??!1,hasUuid:s.traits?.useUuid??!1,hasTtl:s.traits?.useTtl??!1,hasVersioning:s.traits?.useVersioning??!1,original:s}}parseAttributes(s){let o=[];if(o.push({name:s.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),s.attributes)for(let[l,d]of Object.entries(s.attributes))o.push({name:l,fillable:d.fillable??!0,required:d.required??!1,nullable:d.nullable??!0,unique:d.unique??!1,hidden:d.hidden??!1,defaultValue:d.default,cast:d.cast,dynamoDbType:this.inferDynamoDBType(d)});if(s.traits?.useTimestamps)o.push({name:"createdAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"},{name:"updatedAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"});if(s.traits?.useSoftDeletes)o.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return o}inferDynamoDBType(s){if(s.cast){let o=s.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(o))return"N";if(["boolean","bool"].includes(o))return"BOOL";if(["array","list"].includes(o))return"L";if(["object","json","map"].includes(o))return"M"}if(s.validation?.rule){let o=String(s.validation.rule);if(o.includes("integer")||o.includes("numeric")||o.includes("number"))return"N";if(o.includes("boolean"))return"BOOL";if(o.includes("array"))return"L";if(o.includes("object"))return"M"}return"S"}parseRelationships(s,o){let l=[];if(s.hasOne)for(let d of s.hasOne)l.push({type:"hasOne",relatedModel:d,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,requiresGsi:!0});if(s.hasMany)for(let d of s.hasMany)l.push({type:"hasMany",relatedModel:d,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,requiresGsi:!1});if(s.belongsTo)for(let d of s.belongsTo)l.push({type:"belongsTo",relatedModel:d,foreignKey:`${d.toLowerCase()}Id`,localKey:o,requiresGsi:!0});if(s.belongsToMany){let d=Array.isArray(s.belongsToMany)?s.belongsToMany:Object.values(s.belongsToMany);for(let g of d){let x=typeof g==="string"?g:g?.model;if(!x)continue;let y=[s.name,x].sort();l.push({type:"belongsToMany",relatedModel:x,foreignKey:`${s.name.toLowerCase()}Id`,localKey:o,pivotEntity:y.join(""),requiresGsi:!0})}}return l}deriveGSIKeyPatterns(s,o,l,d){let g={},x=1;for(let y of d)if(y.requiresGsi&&x<=5)g[`gsi${x}pk`]=`${y.relatedModel.toUpperCase()}${l}{${y.foreignKey}}`,g[`gsi${x}sk`]=`${s}${l}{${o}}`,y.gsiIndex=x,x++;return g}deriveAccessPatterns(s,o,l,d){let g=[];g.push({name:`Get ${s} by ID`,description:`Retrieve a single ${s} by its primary key`,entityType:o,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${o}#123`,exampleSk:`${o}#123`,efficient:!0}),g.push({name:`List all ${s}s`,description:`Scan all ${s} entities`,entityType:o,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:o,efficient:!1});for(let x of d){if(x.type==="hasMany")g.push({name:`Get ${x.relatedModel}s for ${s}`,description:`Query ${x.relatedModel}s related to a ${s}`,entityType:o,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${o}#123`,exampleSk:`${x.relatedModel.toUpperCase()}#`,efficient:!0});if(x.gsiIndex){let y=`GSI${x.gsiIndex}`;g.push({name:`Get ${s}s by ${x.relatedModel}`,description:`Query ${s}s by their related ${x.relatedModel}`,entityType:o,operation:"query",index:y,keyCondition:`gsi${x.gsiIndex}pk = :pk`,examplePk:`${x.relatedModel.toUpperCase()}#123`,efficient:!0})}}return g}toSingleTableEntity(s){let o=this.extractKeyFields(s.keyPatterns.pk);return{name:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk,keyFields:o,indexes:this.extractGSIPatterns(s.keyPatterns)}}extractKeyFields(s){let o=s.match(/\{([^}]+)\}/g);if(!o)return[];return o.map((l)=>l.slice(1,-1))}extractGSIPatterns(s){let o=[];for(let l=1;l<=5;l++){let d=`gsi${l}pk`,g=`gsi${l}sk`;if(s[d])o.push({name:`GSI${l}`,pkPattern:s[d],skPattern:s[g]})}return o.length>0?o:void 0}toEntityMapping(s){return{entityType:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk}}buildGSIConfig(){let s=this.config.gsiConfig??{},o=[];if(s.gsi1pk)o.push({name:"GSI1",pkAttribute:s.gsi1pk,skAttribute:s.gsi1sk});if(s.gsi2pk)o.push({name:"GSI2",pkAttribute:s.gsi2pk,skAttribute:s.gsi2sk});if(s.gsi3pk)o.push({name:"GSI3",pkAttribute:s.gsi3pk,skAttribute:s.gsi3sk});return o}}function hn(s){return new ot(s)}function gn(s){return s.accessPatterns}function pn(s,o="#"){let l=s.name.toUpperCase(),d=s.primaryKey??"id";return{name:s.name,pkPattern:`${l}${o}\${${d}}`,skPattern:`${l}${o}\${${d}}`}}function $e(s){let o={};for(let l of Object.keys(s)){let d=s[l],g=d.definition??d.getDefinition?.()??d,x=b(g),y=g.attributes??{},D={};for(let E of Object.keys(y))D[E]=void 0;o[x]={columns:D,primaryKey:g.primaryKey??"id"}}return o}import{readdirSync as bi}from"fs";import{basename as tr,extname as nr,isAbsolute as hi,join as rr}from"path";import Ti from"process";var xi=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function Ei(s){let o=nr(s);if(!xi.has(o))return!1;let l=tr(s,o);if(l.startsWith("_")||l==="index")return!1;return!l.endsWith(".d")}function Di(s){if(!s||typeof s!=="object")return!1;let o=s;return typeof o.name==="string"||typeof o.table==="string"}function ir(s){let o=[],l=bi(s,{withFileTypes:!0}).sort((d,g)=>d.name.localeCompare(g.name));for(let d of l){let g=rr(s,d.name);if(d.isDirectory()){o.push(...ir(g));continue}if(Ei(d.name))o.push(g)}return o}async function u(s){let o=s.cwd??Ti.cwd(),l=hi(s.modelsDir)?s.modelsDir:rr(o,s.modelsDir),d={};for(let g of ir(l)){let x=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,y=await import(`${g}${x}`),D=y.default??y,E=D.definition??D.getDefinition?.()??D;if(!Di(E))continue;let S=E.name??tr(g,nr(g));d[S]={...E,name:S}}return d}function lt(s){let o={},l={},d={},g={},x={},y={};for(let D of Object.keys(s)){let E=s[D],S=E.definition??E.getDefinition?.()??E,v=b(S);o[D]=v,l[v]=D,d[v]=S.primaryKey??"id";let Q=[];for(let[_e,Ve]of Object.entries(S.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Ve?.type??"")))Q.push(_e);let G=S.traits??{};if(G.useTimestamps??G.timestampable)Q.push("created_at","updated_at");if(Q.length>0)y[v]=[...new Set(Q)];let Re=(_e)=>{if(!_e)return{};let Ve={};if(Array.isArray(_e)){for(let Oe of _e){let We=Me(Oe);if(We)Ve[We.model]=We.model}return Ve}if(typeof _e==="object"){for(let[Oe,We]of Object.entries(_e)){let Pe=Me(We);if(Pe)Ve[Oe]=Pe.model}return Ve}return{}},Ne=(_e)=>{if(!_e)return{};if(Array.isArray(_e)){let Ve={};for(let Oe of _e)if(typeof Oe==="string")Ve[Oe]=Oe;else if(Oe&&typeof Oe==="object"&&typeof Oe.model==="string")Ve[Oe.model]=Oe;return Ve}return _e},Ce=(_e)=>{if(!_e)return{};return _e};if(g[v]={hasOne:Re(S.hasOne),hasMany:Re(S.hasMany),belongsTo:Re(S.belongsTo),belongsToMany:Ne(S.belongsToMany),hasOneThrough:Ce(S.hasOneThrough),hasManyThrough:Ce(S.hasManyThrough),morphOne:Re(S.morphOne),morphMany:Re(S.morphMany),morphTo:S.morphTo,morphToMany:Re(S.morphToMany),morphedByMany:Re(S.morphedByMany)},S.scopes&&typeof S.scopes==="object"){x[v]={};for(let _e of Object.keys(S.scopes)){let Ve=S.scopes[_e];if(typeof Ve==="function")x[v][_e]=Ve}}}return{modelToTable:o,tableToModel:l,primaryKeys:d,relations:g,scopes:x,models:s,temporalColumns:y}}import{existsSync as $n,mkdirSync as Ri,readdirSync as Si,readFileSync as Mi,writeFileSync as Ai}from"fs";import{dirname as sr,join as en}from"path";import cr from"process";function St(s){if(e.verbose)console.log(s)}function Bt(s){return s.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function An(s){return f(e.relations?.singularizeStrategy)(s)}var zt=0,vt=0,Ut=0,tn=!0,nn=[],jt=null;function ct(){return[...nn]}function wi(s){let o=s;while(o!==sr(o)){if($n(en(o,"package.json")))return o;o=sr(o)}return cr.cwd()}function Ci(){let s=wi(cr.cwd()),o=$t(s,e.migrationDir);if(!$n(o))Ri(o,{recursive:!0}),St(`-- Created SQL directory: ${o}`);return o}var ut="-- qb:generated";function dt(s){return s.trimStart().startsWith(ut)}function ft(s){return s.split(`
370
371
  `).filter((o)=>!o.trimStart().startsWith("--")).join(`
371
- `).replace(/\s+/g," ").trim().replace(/;+$/,"")}function Ci(s){let o=new Set,l;try{l=Ri(s).filter((d)=>d.endsWith(".sql"))}catch{return o}for(let d of l)try{o.add(ft(Si(en(s,d),"utf8")))}catch{}return o}function dr(s,o){if(!s)return!1;let l=wi();if(jt===null)jt=Ci(l);let d=ft(s);if(d.length>0&&jt.has(d))return St(`-- Migration already in the corpus, not writing it again: ${o}`),!1;zt++;let g=tn?String(zt).padStart(10,"0"):String(Math.floor(Date.now()/1000)+zt),x=`${g}-${o}.sql`;if(!tn){let E=Number(g);while($n(en(l,x)))E+=1,g=String(E),x=`${g}-${o}.sql`}let y=en(l,x);return Mi(y,`${ut}
372
- ${s}`),St(`-- Migration file created: ${x}`),vt++,nn.push(x),jt?.add(d),!0}function Ot(s,o){return s==="integer"&&o==="bigint"||s==="string"&&o==="text"}function ar(s){if(s.endsWith("_id"))return"bigint";if(s.endsWith("_at"))return"datetime";if(s.startsWith("is_")||s.startsWith("has_"))return"boolean";return}function or(s){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean"||typeof s==="bigint"||s instanceof Date)return s;return}function Ni(s){if(s&&typeof s==="object"&&"name"in s){let o=s;if(o.name==="enum"||o.getRules&&Array.isArray(o.getRules())){if(o.enumValues&&Array.isArray(o.enumValues))return o.enumValues.map((l)=>String(l));if(o._values&&Array.isArray(o._values))return o._values.map((l)=>String(l));if(o.values&&Array.isArray(o.values))return o.values.map((l)=>String(l))}}if(s&&typeof s==="object"){let o=s,l=o.allowedValues||o.enumValues||o._values||o.values;if(Array.isArray(l)&&l.length>0)return l.map((d)=>String(d))}return}function Nn(s){if(!s?.rules||!Array.isArray(s.rules))return;for(let o of s.rules)if(o?.name==="max"||o?.name==="maxLength"){if(o.params&&typeof o.params.max==="number")return o.params.max;if(Array.isArray(o.args)&&typeof o.args[0]==="number")return o.args[0];if(typeof o.value==="number")return o.value;if(typeof o.expectedValue==="number")return o.expectedValue}return}var _n=767;function _i(s){if(!s||typeof s!=="object")return;let o=s;if(o.name)switch(String(o.name).toLowerCase()){case"string":{let d=Nn(o);return d&&d>_n?"text":"string"}case"text":return"text";case"integer":case"int":return"integer";case"bigint":return"bigint";case"float":return"float";case"number":return"integer";case"double":return"double";case"decimal":return"decimal";case"boolean":case"bool":return"boolean";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamptz":case"timestamp_tz":return"timestamptz";case"json":return"json";case"enum":return"enum"}if(o.type){let l=String(o.type).toLowerCase();if(l==="string"||l==="text")return"string";if(l==="integer"||l==="int")return"integer";if(l==="bigint")return"bigint";if(l==="float")return"float";if(l==="number")return"integer";if(l==="boolean")return"boolean";if(l==="date")return"date";if(l==="datetime")return"datetime";if(l==="timestamptz"||l==="timestamp_tz")return"timestamptz";if(l==="json")return"json"}return}function $i(s){if(typeof s!=="string")return;switch(s.trim().toLowerCase().replace(/[\s-]+/g,"_")){case"varchar":case"string":return"string";case"text":return"text";case"bool":case"boolean":return"boolean";case"int":case"integer":return"integer";case"bigint":return"bigint";case"float":return"float";case"double":return"double";case"number":case"numeric":case"decimal":return"decimal";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamp_tz":case"timestamptz":case"timestamp_with_time_zone":return"timestamptz";case"json":case"jsonb":return"json";case"enum":return"enum";default:return}}function H(s,o){let l=lt(s),d=[];for(let E of Object.keys(s)){let D=s[E],S=b(D),v=D.primaryKey??"id",Q=D.autoIncrement!==!1,G=D.attributes??{},Re=[],Ne=[];if(!G[v])Re.push({name:Bt(v),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let Ce=new Map,_e=N(D.belongsTo).length>0,Ve=new Set(Object.keys(G).map((qe)=>Bt(qe))),Oe=new Set;for(let qe of Ve){if(!qe.endsWith("_type"))continue;let ze=`${qe.slice(0,-5)}_id`;if(Ve.has(ze))Oe.add(ze)}for(let qe of N(D.belongsTo)){let ze=qe.foreignKey??`${Bt(qe.model)}_id`,Je=l.modelToTable[qe.model];if(Je)Ce.set(ze,{table:Je,onDelete:qe.onDelete})}for(let qe of Object.keys(G)){let ze=G[qe],Je=Bt(qe),xt=Boolean(ze.validation?.rule?.isRequired),Mt=qe===v?!1:ze.nullable??!(ze.required??xt),Pe,Ie,He=qe===v;if(Pe=$i(ze.type)??_i(ze.validation?.rule),Pe==="string"){let yt=Nn(ze.validation?.rule);if(yt&&yt>_n)Pe="text"}if(!Pe||Pe==="enum"){let yt=Ni(ze.validation?.rule);if(yt&&yt.length>0)Pe="enum",Ie=yt}if(!Pe)Pe=ar(Je);if(!Pe){let yt=or(ze.default);if(typeof yt==="string")Pe=yt.length>255?"text":"string";else if(typeof yt==="number")Pe=Number.isInteger(yt)?"integer":"float";else if(typeof yt==="boolean")Pe="boolean";else if(typeof yt==="bigint")Pe="bigint";else if(yt instanceof Date)Pe="datetime"}if(!Pe)Pe=He?"bigint":"string";let Rt=Pe==="string"?Nn(ze.validation?.rule):void 0,kt={name:Je,type:Pe,isPrimaryKey:He,isUnique:Boolean(ze.unique),isNullable:Mt,hasDefault:typeof ze.default<"u",defaultValue:or(ze.default),enumValues:Ie,maxLength:typeof Rt==="number"&&Rt>0&&Rt<=_n?Rt:void 0};if(Je.endsWith("_id")&&ze.foreignKey!==!1&&!Oe.has(Je))if(typeof ze.foreignKey==="object"&&ze.foreignKey!==null){let yt=ze.foreignKey;if(kt.references={table:yt.table,column:yt.column??"id",onDelete:yt.onDelete,onUpdate:yt.onUpdate},yt.nullable!==void 0)kt.isNullable=yt.nullable}else{let yt=Ce.get(Je),Et=Je.replace(/_id$/,"").replace(/(^|_)([a-z])/g,(On,Xi,Mr)=>Mr.toUpperCase()),sn=yt?.table??(_e?void 0:l.modelToTable[Et]);if(sn){let On=l.primaryKeys[sn]??"id";kt.references={table:sn,column:On,onDelete:yt?.onDelete}}}Re.push(kt)}let We=N(D.belongsTo);for(let qe of We){let ze=qe.foreignKey??`${Bt(qe.model)}_id`;if(Re.some((Mt)=>Mt.name===ze))continue;let Je=l.modelToTable[qe.model],xt=Je?l.primaryKeys[Je]??"id":void 0;Re.push({name:ze,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:Je&&xt&&!Oe.has(ze)?{table:Je,column:xt,onDelete:qe.onDelete}:void 0})}let ke=D.traits;if(ke?.useTimestamps??ke?.timestampable??!1){if(!Re.some((qe)=>qe.name==="created_at"))Re.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p});if(!Re.some((qe)=>qe.name==="updated_at"))Re.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(ke?.useSoftDeletes??ke?.softDeletable??!1){if(!Re.some((qe)=>qe.name==="deleted_at"))Re.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(ke?.useUuid??!1){if(!Re.some((qe)=>qe.name==="uuid"))Re.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let qe of D.indexes??[])Ne.push({name:qe.name,columns:qe.columns.map((ze)=>Bt(ze)),type:qe.unique?"unique":"index",where:qe.where});for(let qe of Re)if(qe.isUnique&&!qe.isPrimaryKey)Ne.push({name:`${S}_${qe.name}_unique`,columns:[qe.name],type:"unique"});let Dt=Array.isArray(D.shardKey)?D.shardKey.map(Bt):void 0,Ye=Array.isArray(D.sortKey)?D.sortKey.map(Bt):void 0,Qe=D.tableKind;d.push({table:S,columns:Re,indexes:Ne,shardKey:Dt,sortKey:Ye,tableKind:Qe})}let g=new Set(d.map((E)=>E.table));function x(E){if(!g.has(E.table))g.add(E.table),d.push(E)}for(let E of Object.keys(s)){let D=s[E],S=D?.traits??{},v=b(D),Q=An(v);if(S.likeable){let G=typeof S.likeable==="object"?S.likeable:{},Re=G.table||`${v}_likes`,Ne=G.foreignKey||`${Q}_id`;x({table:Re,columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"user_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"users",column:"id"}},{name:Ne,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:v,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${Re}_user_target_unique`,columns:["user_id",Ne],type:"unique"}]})}if(S.taggable)x({table:"taggables",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"order",type:"integer",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:0},{name:"is_active",type:"boolean",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:!0},{name:"taggable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"taggable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"taggables_target_index",columns:["taggable_id","taggable_type"],type:"index"},{name:"taggables_type_slug_unique",columns:["taggable_type","slug"],type:"unique"}]}),x({table:"taggable_models",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"tag_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"taggables",column:"id"}},{name:"taggable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"taggable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"taggable_models_owner_unique",columns:["tag_id","taggable_id","taggable_type"],type:"unique"},{name:"taggable_models_target_index",columns:["taggable_id","taggable_type"],type:"index"}]});if(S.categorizable)x({table:"categorizables",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"is_active",type:"boolean",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:!0},{name:"categorizable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"categorizables_type_slug_unique",columns:["categorizable_type","slug"],type:"unique"}]}),x({table:"categorizable_models",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"category_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"categorizables",column:"id"}},{name:"categorizable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"categorizable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"categorizable_models_owner_unique",columns:["category_id","categorizable_id","categorizable_type"],type:"unique"},{name:"categorizable_models_target_index",columns:["categorizable_id","categorizable_type"],type:"index"}]})}for(let E of Object.keys(s)){let D=s[E],S=D?.belongsToMany;if(!S||typeof S!=="object"||Array.isArray(S))continue;let v=b(D),Q=An(v);for(let[G,Re]of Object.entries(S)){let Ne=Re;if(!Ne||typeof Ne!=="object")continue;if(Ne.through)continue;let Ce=Ne.pivot;if(!Ce||!Ce.columns&&!Ce.timestamps&&!Ce.uniques)continue;let _e=Ne.model,Oe=s[_e]?.table||`${String(_e).toLowerCase()}s`,We=An(Oe),ke=Ne.table||[Q,We].sort().join("_"),bt=Ne.foreignKey||`${Q}_id`,At=Ne.relatedKey||`${We}_id`,Tt=new Set([bt,At,...Object.keys(Ce.columns??{})]),Dt=new Set;for(let Je of Tt){if(!Je.endsWith("_type"))continue;let xt=`${Je.slice(0,-5)}_id`;if(Tt.has(xt))Dt.add(xt)}let Ye=(Je,xt)=>Dt.has(Je)?void 0:{table:xt,column:"id"},Qe=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:bt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Ye(bt,v)},{name:At,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Ye(At,Oe)}];if(Ce.columns)for(let[Je,xt]of Object.entries(Ce.columns)){let Mt=xt,Pe=ar(Je)??"string";Qe.push({name:Je,type:Pe,isPrimaryKey:!1,isUnique:!1,isNullable:Mt?.nullable??!1,hasDefault:Mt?.default!==void 0,defaultValue:Mt?.default})}if(Ce.timestamps)Qe.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p}),Qe.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let qe=[],ze=Ce.uniques&&Ce.uniques.length>0?Ce.uniques:[[bt,At]];for(let Je=0;Je<ze.length;Je++){let xt=ze[Je];qe.push({name:`${ke}_${xt.join("_")}_unique${Je>0?`_${Je}`:""}`,columns:[...xt],type:"unique"})}x({table:ke,columns:Qe,indexes:qe})}}let y=new Map(d.map((E)=>[E.table,E]));for(let E of d)for(let D of E.columns){if(!D.references)continue;let S=y.get(D.references.table)?.columns.find((v)=>v.name===D.references.column);if(!S||D.type===S.type)continue;D.type=S.type,D.maxLength=S.maxLength,D.enumValues=S.enumValues,D.enumTypeName=S.enumTypeName}return{dialect:o.dialect,vitessSharded:o.vitessSharded,tables:d}}function Ee(s,o={}){zt=0,vt=0,Ut=0,nn=[],jt=null,tn=!0;let l=o.dryRun?()=>!1:dr,d=[],g=m(s.dialect,{vitessSharded:s.vitessSharded}),{tables:x,deferredForeignKeys:y}=mr(s.tables,s.dialect);for(let[D,S]of x.entries()){let v={...S,columns:S.columns.map((Ce)=>y.has(Yt(S.table,Ce.name))?{...Ce,references:void 0}:Ce)},Q=[],G=new Set;for(let Ce of v.columns)if(Ce.type==="enum"&&Ce.enumValues&&Ce.enumValues.length>0){let _e=`${v.table}_${Ce.name}_type`;if(Ce.enumTypeName=_e,!G.has(_e)){let Ve=g.createEnumType(_e,Ce.enumValues);if(Ve)Q.push(Ve);G.add(_e)}}let Re=g.createTable(v);Q.push(Re);for(let Ce of v.indexes)Q.push(g.createIndex(v.table,Ce,v.columns));if(D===x.length-1)for(let Ce of x)for(let _e of Ce.columns){if(!_e.references||!y.has(Yt(Ce.table,_e.name)))continue;let Ve=g.addForeignKey(Ce.table,_e.name,_e.references.table,_e.references.column,_e.references.onDelete,_e.references.onUpdate);if(Ve)Q.push(Ve)}d.push(...Q);let Ne=Q.join(`
372
+ `).replace(/\s+/g," ").trim().replace(/;+$/,"")}function Ni(s){let o=new Set,l;try{l=Si(s).filter((d)=>d.endsWith(".sql"))}catch{return o}for(let d of l)try{o.add(ft(Mi(en(s,d),"utf8")))}catch{}return o}function dr(s,o){if(!s)return!1;let l=Ci();if(jt===null)jt=Ni(l);let d=ft(s);if(d.length>0&&jt.has(d))return St(`-- Migration already in the corpus, not writing it again: ${o}`),!1;zt++;let g=tn?String(zt).padStart(10,"0"):String(Math.floor(Date.now()/1000)+zt),x=`${g}-${o}.sql`;if(!tn){let D=Number(g);while($n(en(l,x)))D+=1,g=String(D),x=`${g}-${o}.sql`}let y=en(l,x);return Ai(y,`${ut}
373
+ ${s}`),St(`-- Migration file created: ${x}`),vt++,nn.push(x),jt?.add(d),!0}function Ot(s,o){return s==="integer"&&o==="bigint"||s==="string"&&o==="text"}function ar(s){if(s.endsWith("_id"))return"bigint";if(s.endsWith("_at"))return"datetime";if(s.startsWith("is_")||s.startsWith("has_"))return"boolean";return}function or(s){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean"||typeof s==="bigint"||s instanceof Date)return s;return}function _i(s){if(s&&typeof s==="object"&&"name"in s){let o=s;if(o.name==="enum"||o.getRules&&Array.isArray(o.getRules())){if(o.enumValues&&Array.isArray(o.enumValues))return o.enumValues.map((l)=>String(l));if(o._values&&Array.isArray(o._values))return o._values.map((l)=>String(l));if(o.values&&Array.isArray(o.values))return o.values.map((l)=>String(l))}}if(s&&typeof s==="object"){let o=s,l=o.allowedValues||o.enumValues||o._values||o.values;if(Array.isArray(l)&&l.length>0)return l.map((d)=>String(d))}return}function Nn(s){if(!s?.rules||!Array.isArray(s.rules))return;for(let o of s.rules)if(o?.name==="max"||o?.name==="maxLength"){if(o.params&&typeof o.params.max==="number")return o.params.max;if(Array.isArray(o.args)&&typeof o.args[0]==="number")return o.args[0];if(typeof o.value==="number")return o.value;if(typeof o.expectedValue==="number")return o.expectedValue}return}var _n=767;function $i(s){if(!s||typeof s!=="object")return;let o=s;if(o.name)switch(String(o.name).toLowerCase()){case"string":{let d=Nn(o);return d&&d>_n?"text":"string"}case"text":return"text";case"integer":case"int":return"integer";case"bigint":return"bigint";case"float":return"float";case"number":return"integer";case"double":return"double";case"decimal":return"decimal";case"boolean":case"bool":return"boolean";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamptz":case"timestamp_tz":return"timestamptz";case"json":return"json";case"enum":return"enum"}if(o.type){let l=String(o.type).toLowerCase();if(l==="string"||l==="text")return"string";if(l==="integer"||l==="int")return"integer";if(l==="bigint")return"bigint";if(l==="float")return"float";if(l==="number")return"integer";if(l==="boolean")return"boolean";if(l==="date")return"date";if(l==="datetime")return"datetime";if(l==="timestamptz"||l==="timestamp_tz")return"timestamptz";if(l==="json")return"json"}return}function vi(s){if(typeof s!=="string")return;switch(s.trim().toLowerCase().replace(/[\s-]+/g,"_")){case"varchar":case"string":return"string";case"text":return"text";case"bool":case"boolean":return"boolean";case"int":case"integer":return"integer";case"bigint":return"bigint";case"float":return"float";case"double":return"double";case"number":case"numeric":case"decimal":return"decimal";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamp_tz":case"timestamptz":case"timestamp_with_time_zone":return"timestamptz";case"json":case"jsonb":return"json";case"enum":return"enum";default:return}}function H(s,o){let l=lt(s),d=[];for(let D of Object.keys(s)){let E=s[D],S=b(E),v=E.primaryKey??"id",Q=E.autoIncrement!==!1,G=E.attributes??{},Re=[],Ne=[];if(!G[v])Re.push({name:Bt(v),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let Ce=new Map,_e=N(E.belongsTo).length>0,Ve=new Set(Object.keys(G).map((qe)=>Bt(qe))),Oe=new Set;for(let qe of Ve){if(!qe.endsWith("_type"))continue;let ze=`${qe.slice(0,-5)}_id`;if(Ve.has(ze))Oe.add(ze)}for(let qe of N(E.belongsTo)){let ze=qe.foreignKey??`${Bt(qe.model)}_id`,Je=l.modelToTable[qe.model];if(Je)Ce.set(ze,{table:Je,onDelete:qe.onDelete})}for(let qe of Object.keys(G)){let ze=G[qe],Je=Bt(qe),xt=Boolean(ze.validation?.rule?.isRequired),Mt=qe===v?!1:ze.nullable??!(ze.required??xt),ke,Ie,He=qe===v;if(ke=vi(ze.type)??$i(ze.validation?.rule),ke==="string"){let yt=Nn(ze.validation?.rule);if(yt&&yt>_n)ke="text"}if(!ke||ke==="enum"){let yt=_i(ze.validation?.rule);if(yt&&yt.length>0)ke="enum",Ie=yt}if(!ke)ke=ar(Je);if(!ke){let yt=or(ze.default);if(typeof yt==="string")ke=yt.length>255?"text":"string";else if(typeof yt==="number")ke=Number.isInteger(yt)?"integer":"float";else if(typeof yt==="boolean")ke="boolean";else if(typeof yt==="bigint")ke="bigint";else if(yt instanceof Date)ke="datetime"}if(!ke)ke=He?"bigint":"string";let Rt=ke==="string"?Nn(ze.validation?.rule):void 0,kt={name:Je,type:ke,isPrimaryKey:He,isUnique:Boolean(ze.unique),isNullable:Mt,hasDefault:typeof ze.default<"u",defaultValue:or(ze.default),enumValues:Ie,maxLength:typeof Rt==="number"&&Rt>0&&Rt<=_n?Rt:void 0};if(Je.endsWith("_id")&&ze.foreignKey!==!1&&!Oe.has(Je))if(typeof ze.foreignKey==="object"&&ze.foreignKey!==null){let yt=ze.foreignKey;if(kt.references={table:yt.table,column:yt.column??"id",onDelete:yt.onDelete,onUpdate:yt.onUpdate},yt.nullable!==void 0)kt.isNullable=yt.nullable}else{let yt=Ce.get(Je),Dt=Je.replace(/_id$/,"").replace(/(^|_)([a-z])/g,(On,Ji,Mr)=>Mr.toUpperCase()),sn=yt?.table??(_e?void 0:l.modelToTable[Dt]);if(sn){let On=l.primaryKeys[sn]??"id";kt.references={table:sn,column:On,onDelete:yt?.onDelete}}}Re.push(kt)}let We=N(E.belongsTo);for(let qe of We){let ze=qe.foreignKey??`${Bt(qe.model)}_id`;if(Re.some((Mt)=>Mt.name===ze))continue;let Je=l.modelToTable[qe.model],xt=Je?l.primaryKeys[Je]??"id":void 0;Re.push({name:ze,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:Je&&xt&&!Oe.has(ze)?{table:Je,column:xt,onDelete:qe.onDelete}:void 0})}let Pe=E.traits;if(Pe?.useTimestamps??Pe?.timestampable??!1){if(!Re.some((qe)=>qe.name==="created_at"))Re.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p});if(!Re.some((qe)=>qe.name==="updated_at"))Re.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Pe?.useSoftDeletes??Pe?.softDeletable??!1){if(!Re.some((qe)=>qe.name==="deleted_at"))Re.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Pe?.useUuid??!1){if(!Re.some((qe)=>qe.name==="uuid"))Re.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let qe of E.indexes??[])Ne.push({name:qe.name,columns:qe.columns.map((ze)=>Bt(ze)),type:qe.unique?"unique":"index",where:qe.where});for(let qe of Re)if(qe.isUnique&&!qe.isPrimaryKey)Ne.push({name:`${S}_${qe.name}_unique`,columns:[qe.name],type:"unique"});let Et=Array.isArray(E.shardKey)?E.shardKey.map(Bt):void 0,Ye=Array.isArray(E.sortKey)?E.sortKey.map(Bt):void 0,Qe=E.tableKind;d.push({table:S,columns:Re,indexes:Ne,shardKey:Et,sortKey:Ye,tableKind:Qe})}let g=new Set(d.map((D)=>D.table));function x(D){if(!g.has(D.table))g.add(D.table),d.push(D)}for(let D of Object.keys(s)){let E=s[D],S=E?.traits??{},v=b(E),Q=An(v);if(S.likeable){let G=typeof S.likeable==="object"?S.likeable:{},Re=G.table||`${v}_likes`,Ne=G.foreignKey||`${Q}_id`;x({table:Re,columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"user_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"users",column:"id"}},{name:Ne,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:v,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${Re}_user_target_unique`,columns:["user_id",Ne],type:"unique"}]})}if(S.taggable)x({table:"taggables",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"order",type:"integer",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:0},{name:"is_active",type:"boolean",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:!0},{name:"taggable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"taggable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"taggables_target_index",columns:["taggable_id","taggable_type"],type:"index"},{name:"taggables_type_slug_unique",columns:["taggable_type","slug"],type:"unique"}]}),x({table:"taggable_models",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"tag_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"taggables",column:"id"}},{name:"taggable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"taggable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"taggable_models_owner_unique",columns:["tag_id","taggable_id","taggable_type"],type:"unique"},{name:"taggable_models_target_index",columns:["taggable_id","taggable_type"],type:"index"}]});if(S.categorizable)x({table:"categorizables",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"is_active",type:"boolean",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:!0},{name:"categorizable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"categorizables_type_slug_unique",columns:["categorizable_type","slug"],type:"unique"}]}),x({table:"categorizable_models",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"category_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"categorizables",column:"id"}},{name:"categorizable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"categorizable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"categorizable_models_owner_unique",columns:["category_id","categorizable_id","categorizable_type"],type:"unique"},{name:"categorizable_models_target_index",columns:["categorizable_id","categorizable_type"],type:"index"}]})}for(let D of Object.keys(s)){let E=s[D],S=E?.belongsToMany;if(!S||typeof S!=="object"||Array.isArray(S))continue;let v=b(E),Q=An(v);for(let[G,Re]of Object.entries(S)){let Ne=Re;if(!Ne||typeof Ne!=="object")continue;if(Ne.through)continue;let Ce=Ne.pivot;if(!Ce||!Ce.columns&&!Ce.timestamps&&!Ce.uniques)continue;let _e=Ne.model,Oe=s[_e]?.table||`${String(_e).toLowerCase()}s`,We=An(Oe),Pe=Ne.table||[Q,We].sort().join("_"),bt=Ne.foreignKey||`${Q}_id`,At=Ne.relatedKey||`${We}_id`,Tt=new Set([bt,At,...Object.keys(Ce.columns??{})]),Et=new Set;for(let Je of Tt){if(!Je.endsWith("_type"))continue;let xt=`${Je.slice(0,-5)}_id`;if(Tt.has(xt))Et.add(xt)}let Ye=(Je,xt)=>Et.has(Je)?void 0:{table:xt,column:"id"},Qe=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:bt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Ye(bt,v)},{name:At,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Ye(At,Oe)}];if(Ce.columns)for(let[Je,xt]of Object.entries(Ce.columns)){let Mt=xt,ke=ar(Je)??"string";Qe.push({name:Je,type:ke,isPrimaryKey:!1,isUnique:!1,isNullable:Mt?.nullable??!1,hasDefault:Mt?.default!==void 0,defaultValue:Mt?.default})}if(Ce.timestamps)Qe.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:p}),Qe.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let qe=[],ze=Ce.uniques&&Ce.uniques.length>0?Ce.uniques:[[bt,At]];for(let Je=0;Je<ze.length;Je++){let xt=ze[Je];qe.push({name:`${Pe}_${xt.join("_")}_unique${Je>0?`_${Je}`:""}`,columns:[...xt],type:"unique"})}x({table:Pe,columns:Qe,indexes:qe})}}let y=new Map(d.map((D)=>[D.table,D]));for(let D of d)for(let E of D.columns){if(!E.references)continue;let S=y.get(E.references.table)?.columns.find((v)=>v.name===E.references.column);if(!S||E.type===S.type)continue;E.type=S.type,E.maxLength=S.maxLength,E.enumValues=S.enumValues,E.enumTypeName=S.enumTypeName}return{dialect:o.dialect,vitessSharded:o.vitessSharded,tables:d}}function Ee(s,o={}){zt=0,vt=0,Ut=0,nn=[],jt=null,tn=!0;let l=o.dryRun?()=>!1:dr,d=[],g=m(s.dialect,{vitessSharded:s.vitessSharded}),{tables:x,deferredForeignKeys:y}=mr(s.tables,s.dialect);for(let[E,S]of x.entries()){let v={...S,columns:S.columns.map((Ce)=>y.has(Yt(S.table,Ce.name))?{...Ce,references:void 0}:Ce)},Q=[],G=new Set;for(let Ce of v.columns)if(Ce.type==="enum"&&Ce.enumValues&&Ce.enumValues.length>0){let _e=`${v.table}_${Ce.name}_type`;if(Ce.enumTypeName=_e,!G.has(_e)){let Ve=g.createEnumType(_e,Ce.enumValues);if(Ve)Q.push(Ve);G.add(_e)}}let Re=g.createTable(v);Q.push(Re);for(let Ce of v.indexes)Q.push(g.createIndex(v.table,Ce,v.columns));if(E===x.length-1)for(let Ce of x)for(let _e of Ce.columns){if(!_e.references||!y.has(Yt(Ce.table,_e.name)))continue;let Ve=g.addForeignKey(Ce.table,_e.name,_e.references.table,_e.references.column,_e.references.onDelete,_e.references.onUpdate);if(Ve)Q.push(Ve)}d.push(...Q);let Ne=Q.join(`
373
374
 
374
- `);l(Ne,`create-${v.table}-table`)}if(vt+Ut===0)St("-- Nothing to migrate");else{let D=[];if(vt>0)D.push(`${vt} created`);if(Ut>0)D.push(`${Ut} updated`);St(`-- Migration files: ${D.join(", ")}`)}return d}function Yt(s,o){return`${s}\x00${o}`}function mr(s,o){if(o==="sqlite"||s.length<2)return{tables:s,deferredForeignKeys:new Set};let l=new Map(s.map((D)=>[D.table,D])),d=new Map;for(let D of s)d.set(D.table,new Set(D.columns.map((S)=>S.references?.table).filter((S)=>Boolean(S&&S!==D.table&&l.has(S)))));let g=[],x=new Set;while(g.length<s.length){let D=s.find((S)=>!x.has(S.table)&&[...d.get(S.table)??[]].every((v)=>x.has(v)));if(!D)break;g.push(D),x.add(D.table)}let y=new Set(s.filter((D)=>!x.has(D.table)).map((D)=>D.table)),E=new Set;for(let D of s){if(!y.has(D.table))continue;for(let S of D.columns)if(S.references&&y.has(S.references.table)&&S.references.table!==D.table)E.add(Yt(D.table,S.name))}return g.push(...s.filter((D)=>y.has(D.table))),{tables:g,deferredForeignKeys:E}}function yn(s){return Ee(s).join(`
375
+ `);l(Ne,`create-${v.table}-table`)}if(vt+Ut===0)St("-- Nothing to migrate");else{let E=[];if(vt>0)E.push(`${vt} created`);if(Ut>0)E.push(`${Ut} updated`);St(`-- Migration files: ${E.join(", ")}`)}return d}function Yt(s,o){return`${s}\x00${o}`}function mr(s,o){if(o==="sqlite"||s.length<2)return{tables:s,deferredForeignKeys:new Set};let l=new Map(s.map((E)=>[E.table,E])),d=new Map;for(let E of s)d.set(E.table,new Set(E.columns.map((S)=>S.references?.table).filter((S)=>Boolean(S&&S!==E.table&&l.has(S)))));let g=[],x=new Set;while(g.length<s.length){let E=s.find((S)=>!x.has(S.table)&&[...d.get(S.table)??[]].every((v)=>x.has(v)));if(!E)break;g.push(E),x.add(E.table)}let y=new Set(s.filter((E)=>!x.has(E.table)).map((E)=>E.table)),D=new Set;for(let E of s){if(!y.has(E.table))continue;for(let S of E.columns)if(S.references&&y.has(S.references.table)&&S.references.table!==E.table)D.add(Yt(E.table,S.name))}return g.push(...s.filter((E)=>y.has(E.table))),{tables:g,deferredForeignKeys:D}}function yn(s){return Ee(s).join(`
375
376
  `)}function bn(s,o){return _t(s,o).join(`
376
- `)}function mt(s){let o=Ar("crypto");function l(g){if(g==null||typeof g!=="object"||g instanceof Date)return g;if(Array.isArray(g))return g.map((y)=>l(y));let x={};for(let y of Object.keys(g).sort())x[y]=l(g[y]);return x}let d=JSON.stringify(l(s));return o.createHash("sha256").update(d).digest("hex")}function lr(s){let o={};for(let l of s)o[l.table]=l;return o}function Gt(s){let o={};for(let l of s)o[l.name]=l;return o}function Ke(s,o){if(o==="sqlite"){if(s.name.endsWith("_id")&&M(s.type))return"INTEGER";switch(s.type){case"string":case"text":case"date":case"datetime":case"timestamptz":case"json":case"enum":return"TEXT";case"boolean":case"integer":case"bigint":return"INTEGER";case"float":case"double":case"decimal":return"REAL";default:return"TEXT"}}if(o==="mysql"||o==="vitess"||o==="singlestore")switch(s.type){case"string":return`VARCHAR(${s.maxLength??255})`;case"text":return"TEXT";case"boolean":return"TINYINT(1)";case"integer":return"INTEGER";case"bigint":return"BIGINT";case"float":return"REAL";case"double":return"DOUBLE";case"decimal":return"DECIMAL";case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return s.type}return s.type}var p="UTC_TIMESTAMP";function Fe(s,o){if(!s.hasDefault||s.defaultValue===void 0)return;let l=s.defaultValue;if(l instanceof Date)return l.toISOString();if(typeof l==="boolean")return l?"1":"0";if(typeof l==="bigint"||typeof l==="number")return String(l);let d=String(l).trim();if(d=d.replace(/::[\w ]+$/i,"").trim(),d.startsWith("'")&&d.endsWith("'")||d.startsWith('"')&&d.endsWith('"'))d=d.slice(1,-1);let g=d.toUpperCase();if(["UTC_TIMESTAMP","UTC_TIMESTAMP()","(UTC_TIMESTAMP)","(UTC_TIMESTAMP())","TIMEZONE('UTC', NOW())","TIMEZONE('UTC'::TEXT, NOW())","(NOW() AT TIME ZONE 'UTC')","NOW() AT TIME ZONE 'UTC'"].includes(g.replace(/\s+/g," ")))return p;if(o==="sqlite"&&g==="CURRENT_TIMESTAMP")return p;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(g))return g==="NOW()"?"CURRENT_TIMESTAMP":g;if(s.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(d))return"1";if(/^(?:0|f|false|no)$/i.test(d))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(d))return String(Number(d));return d}function vi(s,o,l){if(Ke(s,l)!==Ke(o,l))return!0;if(s.isNullable!==o.isNullable)return!0;if(s.hasDefault!==o.hasDefault)return!0;if(Fe(s,l)!==Fe(o,l))return!0;if(s.isUnique!==o.isUnique)return!0;if(s.type==="enum"&&o.type==="enum"){let d=(s.enumValues||[]).slice().sort().join(","),g=(o.enumValues||[]).slice().sort().join(",");if(d!==g)return!0}return!1}function ur(s,o){return JSON.stringify([Ke(s,o),s.isPrimaryKey,s.isUnique,s.isNullable,s.hasDefault,Fe(s,o)??null,(s.enumValues??[]).slice().sort(),s.references?[s.references.table,s.references.column,s.references.onDelete??null,s.references.onUpdate??null]:null])}function ki(s,o,l){let d=Object.keys(s).filter((v)=>!o[v]),g=Object.keys(o).filter((v)=>!s[v]),x=new Map,y=new Map;for(let v of d){let Q=ur(s[v],l),G=x.get(Q)??[];G.push(v),x.set(Q,G)}for(let v of g){let Q=ur(o[v],l),G=y.get(Q)??[];G.push(v),y.set(Q,G)}let E=[],D=new Set,S=new Set;for(let[v,Q]of x){let G=y.get(v);if(Q.length===1&&G&&G.length===1)E.push({from:Q[0],to:G[0]}),D.add(Q[0]),S.add(G[0])}return{renames:E,removed:d.filter((v)=>!D.has(v)),added:g.filter((v)=>!S.has(v))}}function Pi(s){if(!s?.references||!s.hasDefault)return!1;let o=s.defaultValue;return o!==void 0&&o!==null&&String(o).toUpperCase()!=="NULL"}function Ii(s,o){let l=s.columns.find((d)=>d.name===o);if(l&&(l.isPrimaryKey||l.isUnique||l.references))return!0;return s.indexes.some((d)=>d.columns.includes(o))}function Oi(s,o){if(Boolean(s)!==Boolean(o))return!0;if(!s||!o)return!1;if((s.constraintNames?.length??0)>1)return!0;let l=(d)=>(d??"no action").toLowerCase();return s.table!==o.table||s.column!==o.column||l(s.onDelete)!==l(o.onDelete)||l(s.onUpdate)!==l(o.onUpdate)}function fr(s,o){return`${s.type}:${Ct(o,s.name)}:${s.columns.join(",")}`}function Cn(s,o){let l={};for(let d of s)l[fr(d,o)]=d;return l}function je(s,o,l={}){if(!s||s.dialect!==o.dialect){let Oe=Ee(o,{dryRun:l.dryRun}),We=o.tables.map((ke)=>({kind:"create_table",table:ke.table,destructive:!1,sql:""}));return{statements:Oe,operations:We}}let d=l.applyRenames!==!1,g=l.preserveUnknownColumns===!0,x=l.dryRun?()=>!1:dr;zt=0,vt=0,Ut=0,nn=[],jt=null,tn=!1;let y=[],E=[],D=m(o.dialect,{vitessSharded:o.vitessSharded}),S=o.dialect,v=lr(s.tables),Q=lr(o.tables);for(let Oe of Object.keys(v))if(!Q[Oe]){let We=D.dropTable(Oe);y.push(We),E.push({kind:"drop_table",table:Oe,destructive:!0,sql:We}),x(We,`drop-${Oe}-table`),St(`-- Detected dropped table: ${Oe}`)}let G=Object.keys(Q).filter((Oe)=>!v[Oe]).map((Oe)=>Q[Oe]),{tables:Re,deferredForeignKeys:Ne}=mr(G,S);for(let[Oe,We]of Re.entries()){let ke={...We,columns:We.columns.map((Ye)=>Ne.has(Yt(We.table,Ye.name))?{...Ye,references:void 0}:Ye)},bt=[],At=new Set;for(let Ye of ke.columns)if(Ye.type==="enum"&&Ye.enumValues&&Ye.enumValues.length>0){let Qe=`${ke.table}_${Ye.name}_type`;if(Ye.enumTypeName=Qe,!At.has(Qe)){let qe=D.createEnumType(Qe,Ye.enumValues);if(qe)bt.push(qe);At.add(Qe)}}let Tt=D.createTable(ke);bt.push(Tt);for(let Ye of ke.indexes){let Qe=D.createIndex(ke.table,Ye,ke.columns);bt.push(Qe),E.push({kind:"create_index",table:ke.table,column:Ye.name,destructive:!1,sql:Qe})}for(let Ye of We.columns)if(Ye.references&&!Ne.has(Yt(We.table,Ye.name)))E.push({kind:"add_foreign_key",table:We.table,column:Ye.name,destructive:!1,sql:Tt});if(Oe===Re.length-1)for(let Ye of Re)for(let Qe of Ye.columns){if(!Qe.references||!Ne.has(Yt(Ye.table,Qe.name)))continue;let qe=D.addForeignKey(Ye.table,Qe.name,Qe.references.table,Qe.references.column,Qe.references.onDelete,Qe.references.onUpdate);if(!qe)continue;bt.push(qe),E.push({kind:"add_foreign_key",table:Ye.table,column:Qe.name,destructive:!1,sql:qe})}y.push(...bt),E.push({kind:"create_table",table:ke.table,destructive:!1,sql:Tt});let Dt=bt.join(`
377
+ `)}function mt(s){let o=Ar("crypto");function l(g){if(g==null||typeof g!=="object"||g instanceof Date)return g;if(Array.isArray(g))return g.map((y)=>l(y));let x={};for(let y of Object.keys(g).sort())x[y]=l(g[y]);return x}let d=JSON.stringify(l(s));return o.createHash("sha256").update(d).digest("hex")}function lr(s){let o={};for(let l of s)o[l.table]=l;return o}function Gt(s){let o={};for(let l of s)o[l.name]=l;return o}function Ke(s,o){if(o==="sqlite"){if(s.name.endsWith("_id")&&M(s.type))return"INTEGER";switch(s.type){case"string":case"text":case"date":case"datetime":case"timestamptz":case"json":case"enum":return"TEXT";case"boolean":case"integer":case"bigint":return"INTEGER";case"float":case"double":case"decimal":return"REAL";default:return"TEXT"}}if(o==="mysql"||o==="vitess"||o==="singlestore")switch(s.type){case"string":return`VARCHAR(${s.maxLength??255})`;case"text":return"TEXT";case"boolean":return"TINYINT(1)";case"integer":return"INTEGER";case"bigint":return"BIGINT";case"float":return"REAL";case"double":return"DOUBLE";case"decimal":return"DECIMAL";case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return s.type}return s.type}var p="UTC_TIMESTAMP";function Fe(s,o){if(!s.hasDefault||s.defaultValue===void 0)return;let l=s.defaultValue;if(l instanceof Date)return l.toISOString();if(typeof l==="boolean")return l?"1":"0";if(typeof l==="bigint"||typeof l==="number")return String(l);let d=String(l).trim();if(d=d.replace(/::[\w ]+$/i,"").trim(),d.startsWith("'")&&d.endsWith("'")||d.startsWith('"')&&d.endsWith('"'))d=d.slice(1,-1);let g=d.toUpperCase();if(["UTC_TIMESTAMP","UTC_TIMESTAMP()","(UTC_TIMESTAMP)","(UTC_TIMESTAMP())","TIMEZONE('UTC', NOW())","TIMEZONE('UTC'::TEXT, NOW())","(NOW() AT TIME ZONE 'UTC')","NOW() AT TIME ZONE 'UTC'"].includes(g.replace(/\s+/g," ")))return p;if(o==="sqlite"&&g==="CURRENT_TIMESTAMP")return p;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(g))return g==="NOW()"?"CURRENT_TIMESTAMP":g;if(s.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(d))return"1";if(/^(?:0|f|false|no)$/i.test(d))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(d))return String(Number(d));return d}function Pi(s,o,l){if(Ke(s,l)!==Ke(o,l))return!0;if(s.isNullable!==o.isNullable)return!0;if(s.hasDefault!==o.hasDefault)return!0;if(Fe(s,l)!==Fe(o,l))return!0;if(s.isUnique!==o.isUnique)return!0;if(s.type==="enum"&&o.type==="enum"){let d=(s.enumValues||[]).slice().sort().join(","),g=(o.enumValues||[]).slice().sort().join(",");if(d!==g)return!0}return!1}function ur(s,o){return JSON.stringify([Ke(s,o),s.isPrimaryKey,s.isUnique,s.isNullable,s.hasDefault,Fe(s,o)??null,(s.enumValues??[]).slice().sort(),s.references?[s.references.table,s.references.column,s.references.onDelete??null,s.references.onUpdate??null]:null])}function ki(s,o,l){let d=Object.keys(s).filter((v)=>!o[v]),g=Object.keys(o).filter((v)=>!s[v]),x=new Map,y=new Map;for(let v of d){let Q=ur(s[v],l),G=x.get(Q)??[];G.push(v),x.set(Q,G)}for(let v of g){let Q=ur(o[v],l),G=y.get(Q)??[];G.push(v),y.set(Q,G)}let D=[],E=new Set,S=new Set;for(let[v,Q]of x){let G=y.get(v);if(Q.length===1&&G&&G.length===1)D.push({from:Q[0],to:G[0]}),E.add(Q[0]),S.add(G[0])}return{renames:D,removed:d.filter((v)=>!E.has(v)),added:g.filter((v)=>!S.has(v))}}function Ii(s){if(!s?.references||!s.hasDefault)return!1;let o=s.defaultValue;return o!==void 0&&o!==null&&String(o).toUpperCase()!=="NULL"}function Oi(s,o){let l=s.columns.find((d)=>d.name===o);if(l&&(l.isPrimaryKey||l.isUnique||l.references))return!0;return s.indexes.some((d)=>d.columns.includes(o))}function qi(s,o){if(Boolean(s)!==Boolean(o))return!0;if(!s||!o)return!1;if((s.constraintNames?.length??0)>1)return!0;let l=(d)=>(d??"no action").toLowerCase();return s.table!==o.table||s.column!==o.column||l(s.onDelete)!==l(o.onDelete)||l(s.onUpdate)!==l(o.onUpdate)}function fr(s,o){return`${s.type}:${Ct(o,s.name)}:${s.columns.join(",")}`}function Cn(s,o){let l={};for(let d of s)l[fr(d,o)]=d;return l}function je(s,o,l={}){if(!s||s.dialect!==o.dialect){let Oe=Ee(o,{dryRun:l.dryRun}),We=o.tables.map((Pe)=>({kind:"create_table",table:Pe.table,destructive:!1,sql:""}));return{statements:Oe,operations:We}}let d=l.applyRenames!==!1,g=l.preserveUnknownColumns===!0,x=l.dryRun?()=>!1:dr;zt=0,vt=0,Ut=0,nn=[],jt=null,tn=!1;let y=[],D=[],E=m(o.dialect,{vitessSharded:o.vitessSharded}),S=o.dialect,v=lr(s.tables),Q=lr(o.tables);for(let Oe of Object.keys(v))if(!Q[Oe]){let We=E.dropTable(Oe);y.push(We),D.push({kind:"drop_table",table:Oe,destructive:!0,sql:We}),x(We,`drop-${Oe}-table`),St(`-- Detected dropped table: ${Oe}`)}let G=Object.keys(Q).filter((Oe)=>!v[Oe]).map((Oe)=>Q[Oe]),{tables:Re,deferredForeignKeys:Ne}=mr(G,S);for(let[Oe,We]of Re.entries()){let Pe={...We,columns:We.columns.map((Ye)=>Ne.has(Yt(We.table,Ye.name))?{...Ye,references:void 0}:Ye)},bt=[],At=new Set;for(let Ye of Pe.columns)if(Ye.type==="enum"&&Ye.enumValues&&Ye.enumValues.length>0){let Qe=`${Pe.table}_${Ye.name}_type`;if(Ye.enumTypeName=Qe,!At.has(Qe)){let qe=E.createEnumType(Qe,Ye.enumValues);if(qe)bt.push(qe);At.add(Qe)}}let Tt=E.createTable(Pe);bt.push(Tt);for(let Ye of Pe.indexes){let Qe=E.createIndex(Pe.table,Ye,Pe.columns);bt.push(Qe),D.push({kind:"create_index",table:Pe.table,column:Ye.name,destructive:!1,sql:Qe})}for(let Ye of We.columns)if(Ye.references&&!Ne.has(Yt(We.table,Ye.name)))D.push({kind:"add_foreign_key",table:We.table,column:Ye.name,destructive:!1,sql:Tt});if(Oe===Re.length-1)for(let Ye of Re)for(let Qe of Ye.columns){if(!Qe.references||!Ne.has(Yt(Ye.table,Qe.name)))continue;let qe=E.addForeignKey(Ye.table,Qe.name,Qe.references.table,Qe.references.column,Qe.references.onDelete,Qe.references.onUpdate);if(!qe)continue;bt.push(qe),D.push({kind:"add_foreign_key",table:Ye.table,column:Qe.name,destructive:!1,sql:qe})}y.push(...bt),D.push({kind:"create_table",table:Pe.table,destructive:!1,sql:Tt});let Et=bt.join(`
377
378
 
378
- `);x(Dt,`create-${ke.table}-table`)}let Ce=new Set;for(let Oe of Object.keys(Q)){let We=v[Oe],ke=Q[Oe];if(!We)continue;let bt=Gt(We.columns),At=Gt(ke.columns);for(let Tt of Object.keys(At)){let Dt=At[Tt];if(Dt.type!=="enum"||!Dt.enumValues||Dt.enumValues.length===0)continue;let Ye=`${ke.table}_${Dt.name}_type`;if(Dt.enumTypeName=Ye,bt[Tt])continue;if(!Ce.has(Ye)){let Qe=D.createEnumType(Ye,Dt.enumValues);if(Qe)y.push(Qe),E.push({kind:"create_enum",table:ke.table,column:Dt.name,destructive:!1,sql:Qe}),x(Qe,`create-${Ye}-enum`);Ce.add(Ye)}}}for(let Oe of Object.keys(Q)){let We=v[Oe],ke=Q[Oe];if(!We)continue;let bt=Gt(We.columns),At=Cn(We.indexes,We.table),Tt=Gt(ke.columns),Dt=Cn(ke.indexes,ke.table),Ye=[],Qe=Object.keys(bt).filter((Pe)=>!Tt[Pe]),qe=Object.keys(Tt).filter((Pe)=>!bt[Pe]);if(d&&!g){let Pe=ki(bt,Tt,S);Ye=Pe.renames,Qe=Pe.removed,qe=Pe.added}if(g){let Pe=Qe.map((He)=>bt[He]),Ie=We.indexes.filter((He)=>!Dt[fr(He,We.table)]);if(Pe.length>0||Ie.length>0){if(Pe.length>0)St(`-- Keeping ${Pe.length} column(s) on "${ke.table}" no model declares: ${Qe.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(Ie.length>0)St(`-- Keeping ${Ie.length} index(es) on "${ke.table}" no model declares: ${Ie.map((He)=>He.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);ke={...ke,columns:[...ke.columns,...Pe],indexes:[...ke.indexes,...Ie]},Tt=Gt(ke.columns),Dt=Cn(ke.indexes,ke.table)}Qe=[]}let ze=Object.keys(Tt).filter((Pe)=>bt[Pe]&&vi(bt[Pe],Tt[Pe],S)),Je=Object.keys(Tt).filter((Pe)=>bt[Pe]&&Oi(bt[Pe].references,Tt[Pe].references));if(S==="sqlite"){if(ze.length>0||Je.length>0||Qe.some((Ie)=>Ii(We,Ie))||qe.some((Ie)=>Pi(Tt[Ie]))){let Ie={},He=new Map(Ye.map((Et)=>[Et.to,Et.from]));for(let Et of ke.columns)if(bt[Et.name])Ie[Et.name]=Et.name;else if(He.has(Et.name))Ie[Et.name]=He.get(Et.name);let Rt=`_qb_tmp_${ke.table}`,kt=0;while((v[Rt]||Q[Rt])&&kt<100)kt+=1,Rt=`_qb_tmp_${ke.table}_${kt}`;let yt=D.rebuildTable({target:ke,tempName:Rt,columnSource:Ie});y.push(yt);let In=ze.some((Et)=>bt[Et].type!==Tt[Et].type);E.push({kind:"rebuild_table",table:ke.table,destructive:Qe.length>0||In,sql:yt});for(let Et of Ye)E.push({kind:"rename_column",table:ke.table,from:Et.from,to:Et.to,destructive:!1,confidence:"high",sql:yt});for(let Et of Qe)E.push({kind:"drop_column",table:ke.table,column:Et,destructive:!0,sql:yt});St(`-- Detected SQLite table rebuild required: ${ke.table}`),x(yt,`alter-${ke.table}-table`);continue}}let xt=[],Mt=!1;for(let Pe of Object.keys(At))if(!Dt[Pe]){let Ie=At[Pe],He=D.dropIndex(ke.table,Ie.name);xt.push(He),y.push(He),E.push({kind:"drop_index",table:ke.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected dropped index: ${Ie.name} from ${ke.table}`),Mt=!0}for(let Pe of Ye){let Ie=D.renameColumn(ke.table,Pe.from,Pe.to);xt.push(Ie),y.push(Ie),E.push({kind:"rename_column",table:ke.table,from:Pe.from,to:Pe.to,destructive:!1,confidence:"high",sql:Ie}),St(`-- Detected renamed column: ${ke.table}.${Pe.from} -> ${Pe.to}`),Mt=!0}for(let Pe of Qe){let Ie=D.dropColumn(ke.table,Pe);xt.push(Ie),y.push(Ie),E.push({kind:"drop_column",table:ke.table,column:Pe,destructive:!0,sql:Ie}),St(`-- Detected dropped column: ${ke.table}.${Pe}`),Mt=!0}for(let Pe of ze){let Ie=bt[Pe],He=Tt[Pe],Rt=D.modifyColumn(ke.table,He);xt.push(Rt),y.push(Rt),E.push({kind:"modify_column",table:ke.table,column:Pe,destructive:Ie.type!==He.type&&!Ot(Ie.type,He.type),sql:Rt}),St(`-- Detected column change: ${ke.table}.${Pe} (${Ie.type} -> ${He.type})`),Mt=!0}for(let Pe of Je){let Ie=Tt[Pe];if(!Ie.references)continue;let He=D.addForeignKey(ke.table,Ie.name,Ie.references.table,Ie.references.column,Ie.references.onDelete,Ie.references.onUpdate,bt[Pe].references?.constraintNames);if(!He)continue;xt.push(He),y.push(He),E.push({kind:"add_foreign_key",table:ke.table,column:Pe,destructive:!1,sql:He}),St(`-- Detected foreign-key change: ${ke.table}.${Pe} -> ${Ie.references.table}(${Ie.references.column})`),Mt=!0}for(let Pe of qe){let Ie=Tt[Pe],He=D.addColumn(ke.table,Ie);if(xt.push(He),y.push(He),E.push({kind:"add_column",table:ke.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected new column: ${ke.table}.${Ie.name}`),Mt=!0,Ie.references){let Rt=D.addForeignKey(ke.table,Ie.name,Ie.references.table,Ie.references.column,Ie.references.onDelete,Ie.references.onUpdate);if(Rt)xt.push(Rt),y.push(Rt),E.push({kind:"add_foreign_key",table:ke.table,column:Ie.name,destructive:!1,sql:Rt})}}for(let Pe of Object.keys(Dt))if(!At[Pe]){let Ie=Dt[Pe],He=D.createIndex(ke.table,Ie,ke.columns);xt.push(He),y.push(He),E.push({kind:"create_index",table:ke.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected new index: ${Ie.name} in ${ke.table}`),Mt=!0}if(Mt){let Pe=xt.join(`
379
+ `);x(Et,`create-${Pe.table}-table`)}let Ce=new Set;for(let Oe of Object.keys(Q)){let We=v[Oe],Pe=Q[Oe];if(!We)continue;let bt=Gt(We.columns),At=Gt(Pe.columns);for(let Tt of Object.keys(At)){let Et=At[Tt];if(Et.type!=="enum"||!Et.enumValues||Et.enumValues.length===0)continue;let Ye=`${Pe.table}_${Et.name}_type`;if(Et.enumTypeName=Ye,bt[Tt])continue;if(!Ce.has(Ye)){let Qe=E.createEnumType(Ye,Et.enumValues);if(Qe)y.push(Qe),D.push({kind:"create_enum",table:Pe.table,column:Et.name,destructive:!1,sql:Qe}),x(Qe,`create-${Ye}-enum`);Ce.add(Ye)}}}for(let Oe of Object.keys(Q)){let We=v[Oe],Pe=Q[Oe];if(!We)continue;let bt=Gt(We.columns),At=Cn(We.indexes,We.table),Tt=Gt(Pe.columns),Et=Cn(Pe.indexes,Pe.table),Ye=[],Qe=Object.keys(bt).filter((ke)=>!Tt[ke]),qe=Object.keys(Tt).filter((ke)=>!bt[ke]);if(d&&!g){let ke=ki(bt,Tt,S);Ye=ke.renames,Qe=ke.removed,qe=ke.added}if(g){let ke=Qe.map((He)=>bt[He]),Ie=We.indexes.filter((He)=>!Et[fr(He,We.table)]);if(ke.length>0||Ie.length>0){if(ke.length>0)St(`-- Keeping ${ke.length} column(s) on "${Pe.table}" no model declares: ${Qe.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(Ie.length>0)St(`-- Keeping ${Ie.length} index(es) on "${Pe.table}" no model declares: ${Ie.map((He)=>He.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);Pe={...Pe,columns:[...Pe.columns,...ke],indexes:[...Pe.indexes,...Ie]},Tt=Gt(Pe.columns),Et=Cn(Pe.indexes,Pe.table)}Qe=[]}let ze=Object.keys(Tt).filter((ke)=>bt[ke]&&Pi(bt[ke],Tt[ke],S)),Je=Object.keys(Tt).filter((ke)=>bt[ke]&&qi(bt[ke].references,Tt[ke].references));if(S==="sqlite"){if(ze.length>0||Je.length>0||Qe.some((Ie)=>Oi(We,Ie))||qe.some((Ie)=>Ii(Tt[Ie]))){let Ie={},He=new Map(Ye.map((Dt)=>[Dt.to,Dt.from]));for(let Dt of Pe.columns)if(bt[Dt.name])Ie[Dt.name]=Dt.name;else if(He.has(Dt.name))Ie[Dt.name]=He.get(Dt.name);let Rt=`_qb_tmp_${Pe.table}`,kt=0;while((v[Rt]||Q[Rt])&&kt<100)kt+=1,Rt=`_qb_tmp_${Pe.table}_${kt}`;let yt=E.rebuildTable({target:Pe,tempName:Rt,columnSource:Ie});y.push(yt);let In=ze.some((Dt)=>bt[Dt].type!==Tt[Dt].type);D.push({kind:"rebuild_table",table:Pe.table,destructive:Qe.length>0||In,sql:yt});for(let Dt of Ye)D.push({kind:"rename_column",table:Pe.table,from:Dt.from,to:Dt.to,destructive:!1,confidence:"high",sql:yt});for(let Dt of Qe)D.push({kind:"drop_column",table:Pe.table,column:Dt,destructive:!0,sql:yt});St(`-- Detected SQLite table rebuild required: ${Pe.table}`),x(yt,`alter-${Pe.table}-table`);continue}}let xt=[],Mt=!1;for(let ke of Object.keys(At))if(!Et[ke]){let Ie=At[ke],He=E.dropIndex(Pe.table,Ie.name);xt.push(He),y.push(He),D.push({kind:"drop_index",table:Pe.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected dropped index: ${Ie.name} from ${Pe.table}`),Mt=!0}for(let ke of Ye){let Ie=E.renameColumn(Pe.table,ke.from,ke.to);xt.push(Ie),y.push(Ie),D.push({kind:"rename_column",table:Pe.table,from:ke.from,to:ke.to,destructive:!1,confidence:"high",sql:Ie}),St(`-- Detected renamed column: ${Pe.table}.${ke.from} -> ${ke.to}`),Mt=!0}for(let ke of Qe){let Ie=E.dropColumn(Pe.table,ke);xt.push(Ie),y.push(Ie),D.push({kind:"drop_column",table:Pe.table,column:ke,destructive:!0,sql:Ie}),St(`-- Detected dropped column: ${Pe.table}.${ke}`),Mt=!0}for(let ke of ze){let Ie=bt[ke],He=Tt[ke],Rt=E.modifyColumn(Pe.table,He,Ie);xt.push(Rt),y.push(Rt),D.push({kind:"modify_column",table:Pe.table,column:ke,destructive:Ie.type!==He.type&&!Ot(Ie.type,He.type),sql:Rt}),St(`-- Detected column change: ${Pe.table}.${ke} (${Ie.type} -> ${He.type})`),Mt=!0}for(let ke of Je){let Ie=Tt[ke];if(!Ie.references)continue;let He=E.addForeignKey(Pe.table,Ie.name,Ie.references.table,Ie.references.column,Ie.references.onDelete,Ie.references.onUpdate,bt[ke].references?.constraintNames);if(!He)continue;xt.push(He),y.push(He),D.push({kind:"add_foreign_key",table:Pe.table,column:ke,destructive:!1,sql:He}),St(`-- Detected foreign-key change: ${Pe.table}.${ke} -> ${Ie.references.table}(${Ie.references.column})`),Mt=!0}for(let ke of qe){let Ie=Tt[ke],He=E.addColumn(Pe.table,Ie);if(xt.push(He),y.push(He),D.push({kind:"add_column",table:Pe.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected new column: ${Pe.table}.${Ie.name}`),Mt=!0,Ie.references){let Rt=E.addForeignKey(Pe.table,Ie.name,Ie.references.table,Ie.references.column,Ie.references.onDelete,Ie.references.onUpdate);if(Rt)xt.push(Rt),y.push(Rt),D.push({kind:"add_foreign_key",table:Pe.table,column:Ie.name,destructive:!1,sql:Rt})}}for(let ke of Object.keys(Et))if(!At[ke]){let Ie=Et[ke],He=E.createIndex(Pe.table,Ie,Pe.columns);xt.push(He),y.push(He),D.push({kind:"create_index",table:Pe.table,column:Ie.name,destructive:!1,sql:He}),St(`-- Detected new index: ${Ie.name} in ${Pe.table}`),Mt=!0}if(Mt){let ke=xt.join(`
379
380
 
380
- `);x(Pe,`alter-${ke.table}-table`)}}if(vt+Ut===0)St("-- Nothing to migrate");else{let Oe=[];if(vt>0)Oe.push(`${vt} created`);if(Ut>0)Oe.push(`${Ut} updated`);St(`-- Migration files: ${Oe.join(", ")}`)}return{statements:y.length===0?["-- No changes detected"]:y,operations:E}}function _t(s,o,l={}){return je(s,o,l).statements}function Tn(s){return s}class It{get order(){return 100}get description(){return}}function wn(s){return s}function ht(s){switch(s){case"text":return"text";case"string":case"enum":return"varchar";case"integer":case"bigint":return"integer";case"float":case"double":case"decimal":return"fractional";case"boolean":return"boolean";case"date":case"datetime":case"timestamptz":return"date";case"json":return"json";default:return"other"}}function gt(s){let o=String(s??"").toLowerCase().trim();if(/^(?:bool|boolean|bit)\b/.test(o)||o==="tinyint(1)")return"boolean";if(/^(?:json|jsonb)\b/.test(o))return"json";if(/^(?:bytea|blob|binary|varbinary)\b/.test(o))return"binary";if(/^(?:date|time|timestamp|datetime)\b/.test(o))return"date";if(/(?:^|\b)(?:varchar|character varying|nvarchar|char)\b/.test(o))return"varchar";if(/^(?:text|longtext|mediumtext|tinytext|clob|citext)\b/.test(o))return"text";if(/^(?:decimal|numeric|real|double|money)\b/.test(o)||/^float\d*\b/.test(o))return"fractional";if(/^(?:integer|bigint|smallint|tinyint|serial|bigserial|smallserial|mediumint)\b/.test(o)||/^int\d*\b/.test(o))return"integer";return"other"}function pt(s,o,l){if(s===o)return!0;if(l==="sqlite"){if(s==="boolean"&&o==="integer")return!0;if((s==="date"||s==="json")&&o==="text")return!0}if(n(l)&&s==="boolean"&&o==="integer")return!0;if(s==="varchar"&&o==="text")return!0;if(s==="integer"&&o==="fractional")return!0;if(s==="other"||o==="other")return!0;return!1}async function Lt(s,o={}){let l=o.dialect??e.dialect,d=s.tables.map((S)=>S.table),g=await k({tables:d}),x=new Map(g.map((S)=>[S.table.toLowerCase(),S])),y=[],E=[],D=[];for(let S of s.tables){let v=x.get(S.table.toLowerCase());if(!v){y.push(S.table);continue}let Q=new Map(v.columns.map((G)=>[G.name.toLowerCase(),G]));for(let G of S.columns){let Re=Q.get(G.name.toLowerCase()),Ne=ht(G.type);if(!Re){E.push({table:S.table,column:G.name,expected:Ne});continue}let Ce=gt(Re.sqlType);if(!pt(Ne,Ce,l))D.push({table:S.table,column:G.name,expected:Ne,actual:Ce,actualSqlType:Re.sqlType})}}return{missingTables:y,missingColumns:E,typeMismatches:D,clean:y.length===0&&E.length===0&&D.length===0}}function Kt(s){if(s.clean)return"";let o=[];if(s.missingTables.length>0)o.push(` Missing tables: ${s.missingTables.join(", ")}`);for(let g of s.missingColumns.slice(0,10))o.push(` \u2022 ${g.table}.${g.column} is missing (models declare ${g.expected})`);for(let g of s.typeMismatches.slice(0,10))o.push(` \u2022 ${g.table}.${g.column} is ${g.actualSqlType}, models declare ${g.expected}`);let l=Math.min(s.missingColumns.length,10)+Math.min(s.typeMismatches.length,10),d=s.missingColumns.length+s.typeMismatches.length;if(d>l)o.push(` + ${d-l} more`);return["The live schema does not match the models.",...o,"","Migrations will NOT fix this on their own: the runner only applies files that have","not run yet, and a corrected `CREATE TABLE IF NOT EXISTS` is a no-op against a table","that already exists. Regenerate and apply the difference, or rebuild the schema."].join(`
381
- `)}async function Bi(s,o,l){if(l.length===0)return;let d=Rr(Ft());try{await Sr(s,o);for(let g of l)await rn(s,g,o),Ue(`-- \u2713 Recorded applied migration: ${g}`)}catch(g){Ue(`-- Could not record applied migrations (the schema change itself succeeded): ${g instanceof Error?g.message:String(g)}`)}}function xr(s){try{return dt(Ht(s,"utf8"))}catch{return!1}}function Ui(s){let o=s instanceof Error?s.message:String(s);return/duplicate column name/i.test(o)||/duplicate key name/i.test(o)||/duplicate foreign key constraint name/i.test(o)||/\balready exists\b/i.test(o)}function Ue(s){if(e.verbose)console.log(s)}function Dr(s){return wt(s,e.snapshotDir||".qb")}function Pn(s,o){return wt(Dr(s),`model-snapshot.${o}.json`)}function Fi(s,o){let l=Pn(s,o);if(!Nt(l))return;try{let d=Ht(l,"utf8"),g=JSON.parse(d);if(g?.plan&&Array.isArray(g.plan.tables)&&g.plan.dialect)return g.plan;if(Array.isArray(g?.tables)&&g?.dialect)return g;Ue("-- Invalid snapshot format, treating as no previous state");return}catch(d){Ue(`-- Could not load snapshot, treating as no previous state: ${d instanceof Error?d.message:String(d)}`);return}}function Er(s,o,l){let d=Pn(s,o),g=Dr(s),x=mt(l);if(Nt(d))try{let E=JSON.parse(Ht(d,"utf8"));if(E?.hash===x&&E?.dialect===o&&E?.plan){Ue("-- Model snapshot unchanged");return}}catch{}if(!Nt(g))yr(g,{recursive:!0}),Ue(`-- Created snapshot directory: ${g}`);let y={plan:l,hash:x,dialect:o,updatedAt:new Date().toISOString()};Tr(d,JSON.stringify(y,null,2)),Ue(`-- Model snapshot saved to ${d}`)}function et(s,o={}){let l=o.dialect??s.dialect;Er(o.workspaceRoot??Ft(),l,s)}function Ft(){return Sn()}function Rr(s){let o=$t(s,e.migrationDir);if(!Nt(o))yr(o,{recursive:!0}),Ue(`-- Created SQL directory: ${o}`);return o}async function T(s,o={}){if(await P(),!s)s=wt(kn.cwd(),"app/Models");let l=o.dialect||e.dialect||"postgres",d=Ft(),g=await u({modelsDir:s}),x=H(g,{dialect:l,vitessSharded:o.vitessSharded}),y,E=!1;if(!o.full)if(y=Fi(d,l),y)Ue("-- Comparing with stored model snapshot");else{let Re=wt(s,`.qb-migrations.${l}.json`),Ne=String(o.state||Re);if(Nt(Ne))try{let Ce=Ht(Ne,"utf8"),_e=JSON.parse(Ce);if(y=_e?.plan&&_e.plan.tables?_e.plan:_e?.tables?_e:void 0,y)Ue("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!y||o.fromDb)try{let Ce=await Bn(l),_e=new Set(x.tables.map((Oe)=>Oe.table)),Ve=Ce.tables.filter((Oe)=>_e.has(Oe.table));if(Ve.length>0)y={dialect:Ce.dialect,tables:Ve},E=!0,Ue(`-- No snapshot; reconciling against live database (${Ve.length} matching table${Ve.length===1?"":"s"})`)}catch(Ce){Ue(`-- Could not introspect live database, treating as no previous state: ${Ce instanceof Error?Ce.message:String(Ce)}`)}if(!y)Ue("-- No previous snapshot found, generating full migration")}else Ue("-- Full migration requested, ignoring any previous state");let D=o.full?{statements:Ee(x,{dryRun:o.dryRun}),operations:x.tables.map((Re)=>({kind:"create_table",table:Re.table,destructive:!1,sql:""}))}:je(y,x,{applyRenames:o.applyRenames,dryRun:o.dryRun,preserveUnknownColumns:E}),{statements:S,operations:v}=D,Q=S.join(`
382
- `),G=S.some((Re)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(Re));if(o.apply){let Re=qi(wt(Ki(),"qb-migrate-")),Ne=wt(Re,"migration.sql");try{if(G){Tr(Ne,Q);let Ce=i();await Ce.file(Ne),Ue("-- Migration applied"),await Bi(Ce,l,ct())}else Ue("-- No changes; nothing to apply")}catch(Ce){throw console.error("-- Migration failed:",Ce),Ce}finally{hr(Re,{recursive:!0,force:!0})}}if(!o.dryRun)Er(d,l,x);return{sql:Q,sqlStatements:S,hasChanges:G,plan:x,operations:v}}function Vi(s,o){if(s===void 0)return[Rr(o)];let l=Array.isArray(s)?s:[s];if(l.length===0)throw Error("executeMigration was given an empty list of directories. Pass at least one directory, or omit the argument to use the configured migrationDir.");return l.map((d)=>Li(d)?d:wt(o,d))}function ji(s){let o=new Map;for(let l of s){if(!Nt(l))throw Error(`Migration directory not found: ${l}`);for(let d of br(l).filter((g)=>g.endsWith(".sql"))){let g=o.get(d);if(g!==void 0)throw Error(`Duplicate migration file name across directories: "${d}" appears in both ${g} and ${wt(l,d)}. Migrations are recorded by file name, so names must be unique across every directory in a run.`);o.set(d,wt(l,d))}}return[...o].map(([l,d])=>({name:l,path:d})).sort((l,d)=>l.name<d.name?-1:l.name>d.name?1:0)}var pr="bun-query-builder:migrate",Yi=/\bCONCURRENTLY\b|^\s*VACUUM\b|^\s*BEGIN\s*(?:;|TRANSACTION\b)|^\s*PRAGMA\s+foreign_keys\b/im;function gr(s){return s==="postgres"||s==="sqlite"}async function Qi(s,o){if(s==="sqlite")return await o();let l=i(),d;try{d=await l.reserve()}catch{return await o()}let g=!1;try{return await d.advisoryLock(pr),g=!0,await o()}finally{try{if(g)await d.advisoryUnlock(pr)}finally{d.release?.()}}}async function C(s){await P();let o=Ft(),l=e.dialect||"postgres",d=ji(Vi(s,o));if(d.length===0)return Ue("-- No migration files found to execute"),!0;Ue(`-- Found ${d.length} script files to execute`);try{let g=i();return await Qi(l,async()=>{await Sr(g,l);let x=await Hi(g,l),y=d.filter((E)=>!x.includes(E.name));if(y.length===0)return Ue("-- No pending migrations to execute"),!0;Ue(`-- Executing ${y.length} migration${y.length===1?"":"s"}`);for(let{name:E,path:D}of y){Ue(`-- Executing: ${E}`);try{if(gr(l)&&!Yi.test(Ht(D,"utf-8")))await g.transaction(async(v)=>{await v.file(D),await rn(v,E,l)});else if(await g.file(D),await rn(g,E,l),!gr(l))Ue(`-- (${l} commits DDL implicitly, so ${E} was not applied atomically)`);else Ue(`-- (${E} contains a statement that cannot run in a transaction, so it was not applied atomically)`);Ue(`-- \u2713 Migration ${E} executed and recorded`)}catch(S){if(xr(D)&&Ui(S)){await rn(g,E,l),Ue(`-- \u2713 Migration ${E} was already applied; recorded it (${S instanceof Error?S.message:String(S)})`);continue}throw console.error(`-- \u2717 Migration ${E} failed:`,S),S}}return Ue("-- All migrations executed successfully"),!0})}catch(g){throw console.error("-- Migration execution failed:",g),g}return!0}async function R(s,o={}){if(await P(),!s)s=wt(kn.cwd(),"app/Models");let l=o.dialect||e.dialect||"postgres",d=m(l),g=Ft(),x=async(y)=>{let E=d.dropTable(y);await Ge(async(D)=>{if(l==="sqlite")await D.unsafe("PRAGMA foreign_keys = OFF").execute();if(l==="mysql"||l==="vitess")await D.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{await D.unsafe(E).execute()}finally{if(l==="sqlite")await D.unsafe("PRAGMA foreign_keys = ON").execute();if(l==="mysql"||l==="vitess")await D.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}})};try{try{await x("migrations"),Ue("-- Dropped migrations table")}catch(D){console.error(D)}let y=[],E=[];try{let D=await u({modelsDir:s}),S=H(D,{dialect:l});y=S.tables.map((Q)=>Q.table);let v=new Set;for(let Q of S.tables)for(let G of Q.columns)if(G.type==="enum"&&G.enumValues&&G.enumValues.length>0){let Re=`${Q.table}_${G.name}_type`;v.add(Re)}E=Array.from(v)}catch(D){console.error(D),y=[],E=[]}if(y.length===0)Ue("-- No tables found to drop");else{Ue(`-- Dropping ${y.length} tables: ${y.join(", ")}`);for(let D of y.reverse())try{await x(D),Ue(`-- Dropped table: ${D}`)}catch(S){console.error(S),Ue(`-- Table ${D} may not exist, skipping drop`)}}if(E.length>0){Ue(`-- Dropping ${E.length} enum types: ${E.join(", ")}`);for(let D of E)try{let S=d.dropEnumType(D);if(S)await Ge(async(v)=>{await v.unsafe(S).execute(),Ue(`-- Dropped enum type: ${D}`)})}catch(S){console.error(S),Ue(`-- Enum type ${D} may not exist, skipping drop`)}}else Ue("-- No enum types found to drop");if(y.length>0&&!o.preserveMigrationState)try{await Wi(s,g,o)}catch(D){console.error(D),Ue("-- Could not clean up migration files")}else if(y.length===0)Ue("-- No models directory found; keeping committed migration files in place");else Ue("-- Preserving migration files and model snapshot for fresh replay");if(!o.preserveMigrationState)try{await zi(g)}catch(D){console.error(D),Ue("-- Could not clear generated directory")}return Ue("-- Database reset completed successfully"),!0}catch(y){return console.error("-- Database reset failed:",y),!1}}async function Wi(s,o,l={}){if(!s)s=wt(kn.cwd(),"app/Models");if(!o)o=Ft();let d=String(l.dialect||e.dialect||"postgres"),g=Pn(o,d);if(Nt(g))vn(g),Ue(`-- Removed model snapshot file: ${g}`);let x=wt(s,`.qb-migrations.${d}.json`),y=String(l.state||x);if(Nt(y))vn(y),Ue(`-- Removed legacy migration state file: ${y}`);Gi($t(o,e.migrationDir))}function Gi(s){if(!Nt(s))return;let o=0,l=[];for(let d of br(s).filter((g)=>g.endsWith(".sql"))){if(!xr(wt(s,d))){l.push(d);continue}vn(wt(s,d)),Ue(`-- Removed generated migration file: ${d}`),o+=1}if(Ue(`-- Cleaned up ${o} generated migration file${o===1?"":"s"} from migrations directory`),l.length>0)Ue(`-- Kept ${l.length} hand-written migration${l.length===1?"":"s"}: ${l.slice(0,5).join(", ")}${l.length>5?`, +${l.length-5} more`:""}`)}async function zi(s){if(!s)s=Ft();let o=wt(s,"generated");if(Nt(o))try{hr(o,{recursive:!0,force:!0}),Ue("-- Cleared generated directory")}catch(l){console.error("-- Failed to clear generated directory:",l)}}async function Sr(s,o){let d=m(o).createMigrationsTable();try{await s.unsafe(d).execute(),Ue("-- Migrations table ready")}catch(g){throw console.error("-- Failed to create migrations table:",g),g}}async function Hi(s,o){let l=m(o);try{return(await s.unsafe(l.getExecutedMigrationsQuery()).execute()).map((g)=>g.migration)}catch(d){return console.error("-- Failed to get executed migrations:",d),[]}}async function rn(s,o,l){let d=m(l);try{Ue(`-- Recording migration: ${o}`),await s.unsafe(d.recordMigrationQuery(),[o]).execute(),Ue(`-- Successfully recorded migration: ${o}`)}catch(g){throw console.error(`-- Failed to record migration ${o}:`,g),g}}
381
+ `);x(ke,`alter-${Pe.table}-table`)}}if(vt+Ut===0)St("-- Nothing to migrate");else{let Oe=[];if(vt>0)Oe.push(`${vt} created`);if(Ut>0)Oe.push(`${Ut} updated`);St(`-- Migration files: ${Oe.join(", ")}`)}return{statements:y.length===0?["-- No changes detected"]:y,operations:D}}function _t(s,o,l={}){return je(s,o,l).statements}function Tn(s){return s}class It{get order(){return 100}get description(){return}}function wn(s){return s}function ht(s){switch(s){case"text":return"text";case"string":case"enum":return"varchar";case"integer":case"bigint":return"integer";case"float":case"double":case"decimal":return"fractional";case"boolean":return"boolean";case"date":case"datetime":case"timestamptz":return"date";case"json":return"json";default:return"other"}}function gt(s){let o=String(s??"").toLowerCase().trim();if(/^(?:bool|boolean|bit)\b/.test(o)||o==="tinyint(1)")return"boolean";if(/^(?:json|jsonb)\b/.test(o))return"json";if(/^(?:bytea|blob|binary|varbinary)\b/.test(o))return"binary";if(/^(?:date|time|timestamp|datetime)\b/.test(o))return"date";if(/(?:^|\b)(?:varchar|character varying|nvarchar|char)\b/.test(o))return"varchar";if(/^(?:text|longtext|mediumtext|tinytext|clob|citext)\b/.test(o))return"text";if(/^(?:decimal|numeric|real|double|money)\b/.test(o)||/^float\d*\b/.test(o))return"fractional";if(/^(?:integer|bigint|smallint|tinyint|serial|bigserial|smallserial|mediumint)\b/.test(o)||/^int\d*\b/.test(o))return"integer";return"other"}function pt(s,o,l){if(s===o)return!0;if(l==="sqlite"){if(s==="boolean"&&o==="integer")return!0;if((s==="date"||s==="json")&&o==="text")return!0}if(n(l)&&s==="boolean"&&o==="integer")return!0;if(s==="varchar"&&o==="text")return!0;if(s==="integer"&&o==="fractional")return!0;if(s==="other"||o==="other")return!0;return!1}async function Lt(s,o={}){let l=o.dialect??e.dialect,d=s.tables.map((S)=>S.table),g=await k({tables:d}),x=new Map(g.map((S)=>[S.table.toLowerCase(),S])),y=[],D=[],E=[];for(let S of s.tables){let v=x.get(S.table.toLowerCase());if(!v){y.push(S.table);continue}let Q=new Map(v.columns.map((G)=>[G.name.toLowerCase(),G]));for(let G of S.columns){let Re=Q.get(G.name.toLowerCase()),Ne=ht(G.type);if(!Re){D.push({table:S.table,column:G.name,expected:Ne});continue}let Ce=gt(Re.sqlType);if(!pt(Ne,Ce,l))E.push({table:S.table,column:G.name,expected:Ne,actual:Ce,actualSqlType:Re.sqlType})}}return{missingTables:y,missingColumns:D,typeMismatches:E,clean:y.length===0&&D.length===0&&E.length===0}}function Kt(s){if(s.clean)return"";let o=[];if(s.missingTables.length>0)o.push(` Missing tables: ${s.missingTables.join(", ")}`);for(let g of s.missingColumns.slice(0,10))o.push(` \u2022 ${g.table}.${g.column} is missing (models declare ${g.expected})`);for(let g of s.typeMismatches.slice(0,10))o.push(` \u2022 ${g.table}.${g.column} is ${g.actualSqlType}, models declare ${g.expected}`);let l=Math.min(s.missingColumns.length,10)+Math.min(s.typeMismatches.length,10),d=s.missingColumns.length+s.typeMismatches.length;if(d>l)o.push(` + ${d-l} more`);return["The live schema does not match the models.",...o,"","Migrations will NOT fix this on their own: the runner only applies files that have","not run yet, and a corrected `CREATE TABLE IF NOT EXISTS` is a no-op against a table","that already exists. Regenerate and apply the difference, or rebuild the schema."].join(`
382
+ `)}async function Ui(s,o,l){if(l.length===0)return;let d=Rr(Ft());try{await Sr(s,o);for(let g of l)await rn(s,g,o),Ue(`-- \u2713 Recorded applied migration: ${g}`)}catch(g){Ue(`-- Could not record applied migrations (the schema change itself succeeded): ${g instanceof Error?g.message:String(g)}`)}}function xr(s){try{return dt(Ht(s,"utf8"))}catch{return!1}}function Fi(s){let o=s instanceof Error?s.message:String(s);return/duplicate column name/i.test(o)||/duplicate key name/i.test(o)||/duplicate foreign key constraint name/i.test(o)||/\balready exists\b/i.test(o)}function Ue(s){if(e.verbose)console.log(s)}function Er(s){return wt(s,e.snapshotDir||".qb")}function kn(s,o){return wt(Er(s),`model-snapshot.${o}.json`)}function Vi(s,o){let l=kn(s,o);if(!Nt(l))return;try{let d=Ht(l,"utf8"),g=JSON.parse(d);if(g?.plan&&Array.isArray(g.plan.tables)&&g.plan.dialect)return g.plan;if(Array.isArray(g?.tables)&&g?.dialect)return g;Ue("-- Invalid snapshot format, treating as no previous state");return}catch(d){Ue(`-- Could not load snapshot, treating as no previous state: ${d instanceof Error?d.message:String(d)}`);return}}function Dr(s,o,l){let d=kn(s,o),g=Er(s),x=mt(l);if(Nt(d))try{let D=JSON.parse(Ht(d,"utf8"));if(D?.hash===x&&D?.dialect===o&&D?.plan){Ue("-- Model snapshot unchanged");return}}catch{}if(!Nt(g))yr(g,{recursive:!0}),Ue(`-- Created snapshot directory: ${g}`);let y={plan:l,hash:x,dialect:o,updatedAt:new Date().toISOString()};Tr(d,JSON.stringify(y,null,2)),Ue(`-- Model snapshot saved to ${d}`)}function et(s,o={}){let l=o.dialect??s.dialect;Dr(o.workspaceRoot??Ft(),l,s)}function Ft(){return Sn()}function Rr(s){let o=$t(s,e.migrationDir);if(!Nt(o))yr(o,{recursive:!0}),Ue(`-- Created SQL directory: ${o}`);return o}async function T(s,o={}){if(await P(),!s)s=wt(Pn.cwd(),"app/Models");let l=o.dialect||e.dialect||"postgres",d=Ft(),g=await u({modelsDir:s}),x=H(g,{dialect:l,vitessSharded:o.vitessSharded}),y,D=!1;if(!o.full)if(y=Vi(d,l),y)Ue("-- Comparing with stored model snapshot");else{let Re=wt(s,`.qb-migrations.${l}.json`),Ne=String(o.state||Re);if(Nt(Ne))try{let Ce=Ht(Ne,"utf8"),_e=JSON.parse(Ce);if(y=_e?.plan&&_e.plan.tables?_e.plan:_e?.tables?_e:void 0,y)Ue("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!y||o.fromDb)try{let Ce=await Bn(l),_e=new Set(x.tables.map((Oe)=>Oe.table)),Ve=Ce.tables.filter((Oe)=>_e.has(Oe.table));if(Ve.length>0)y={dialect:Ce.dialect,tables:Ve},D=!0,Ue(`-- No snapshot; reconciling against live database (${Ve.length} matching table${Ve.length===1?"":"s"})`)}catch(Ce){Ue(`-- Could not introspect live database, treating as no previous state: ${Ce instanceof Error?Ce.message:String(Ce)}`)}if(!y)Ue("-- No previous snapshot found, generating full migration")}else Ue("-- Full migration requested, ignoring any previous state");let E=o.full?{statements:Ee(x,{dryRun:o.dryRun}),operations:x.tables.map((Re)=>({kind:"create_table",table:Re.table,destructive:!1,sql:""}))}:je(y,x,{applyRenames:o.applyRenames,dryRun:o.dryRun,preserveUnknownColumns:D}),{statements:S,operations:v}=E,Q=S.join(`
383
+ `),G=S.some((Re)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(Re));if(o.apply){let Re=Li(wt(Ki(),"qb-migrate-")),Ne=wt(Re,"migration.sql");try{if(G){Tr(Ne,Q);let Ce=i();await Ce.file(Ne),Ue("-- Migration applied"),await Ui(Ce,l,ct())}else Ue("-- No changes; nothing to apply")}catch(Ce){throw console.error("-- Migration failed:",Ce),Ce}finally{hr(Re,{recursive:!0,force:!0})}}if(!o.dryRun)Dr(d,l,x);return{sql:Q,sqlStatements:S,hasChanges:G,plan:x,operations:v}}function ji(s,o){if(s===void 0)return[Rr(o)];let l=Array.isArray(s)?s:[s];if(l.length===0)throw Error("executeMigration was given an empty list of directories. Pass at least one directory, or omit the argument to use the configured migrationDir.");return l.map((d)=>Bi(d)?d:wt(o,d))}function Yi(s){let o=new Map;for(let l of s){if(!Nt(l))throw Error(`Migration directory not found: ${l}`);for(let d of br(l).filter((g)=>g.endsWith(".sql"))){let g=o.get(d);if(g!==void 0)throw Error(`Duplicate migration file name across directories: "${d}" appears in both ${g} and ${wt(l,d)}. Migrations are recorded by file name, so names must be unique across every directory in a run.`);o.set(d,wt(l,d))}}return[...o].map(([l,d])=>({name:l,path:d})).sort((l,d)=>l.name<d.name?-1:l.name>d.name?1:0)}var pr="bun-query-builder:migrate",Qi=/\bCONCURRENTLY\b|^\s*VACUUM\b|^\s*BEGIN\s*(?:;|TRANSACTION\b)|^\s*PRAGMA\s+foreign_keys\b/im;function gr(s){return s==="postgres"||s==="sqlite"}async function Wi(s,o){if(s==="sqlite")return await o();let l=i(),d;try{d=await l.reserve()}catch{return await o()}let g=!1;try{return await d.advisoryLock(pr),g=!0,await o()}finally{try{if(g)await d.advisoryUnlock(pr)}finally{d.release?.()}}}async function C(s){await P();let o=Ft(),l=e.dialect||"postgres",d=Yi(ji(s,o));if(d.length===0)return Ue("-- No migration files found to execute"),!0;Ue(`-- Found ${d.length} script files to execute`);try{let g=i();return await Wi(l,async()=>{await Sr(g,l);let x=await Xi(g,l),y=d.filter((D)=>!x.includes(D.name));if(y.length===0)return Ue("-- No pending migrations to execute"),!0;Ue(`-- Executing ${y.length} migration${y.length===1?"":"s"}`);for(let{name:D,path:E}of y){Ue(`-- Executing: ${D}`);try{if(gr(l)&&!Qi.test(Ht(E,"utf-8")))await g.transaction(async(v)=>{await v.file(E),await rn(v,D,l)});else if(await g.file(E),await rn(g,D,l),!gr(l))Ue(`-- (${l} commits DDL implicitly, so ${D} was not applied atomically)`);else Ue(`-- (${D} contains a statement that cannot run in a transaction, so it was not applied atomically)`);Ue(`-- \u2713 Migration ${D} executed and recorded`)}catch(S){if(xr(E)&&Fi(S)){await rn(g,D,l),Ue(`-- \u2713 Migration ${D} was already applied; recorded it (${S instanceof Error?S.message:String(S)})`);continue}throw console.error(`-- \u2717 Migration ${D} failed:`,S),S}}return Ue("-- All migrations executed successfully"),!0})}catch(g){throw console.error("-- Migration execution failed:",g),g}return!0}async function R(s,o={}){if(await P(),!s)s=wt(Pn.cwd(),"app/Models");let l=o.dialect||e.dialect||"postgres",d=m(l),g=Ft(),x=async(y)=>{let D=d.dropTable(y);await Ge(async(E)=>{if(l==="sqlite")await E.unsafe("PRAGMA foreign_keys = OFF").execute();if(l==="mysql"||l==="vitess")await E.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{await E.unsafe(D).execute()}finally{if(l==="sqlite")await E.unsafe("PRAGMA foreign_keys = ON").execute();if(l==="mysql"||l==="vitess")await E.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}})};try{try{await x("migrations"),Ue("-- Dropped migrations table")}catch(E){console.error(E)}let y=[],D=[];try{let E=await u({modelsDir:s}),S=H(E,{dialect:l});y=S.tables.map((Q)=>Q.table);let v=new Set;for(let Q of S.tables)for(let G of Q.columns)if(G.type==="enum"&&G.enumValues&&G.enumValues.length>0){let Re=`${Q.table}_${G.name}_type`;v.add(Re)}D=Array.from(v)}catch(E){console.error(E),y=[],D=[]}if(y.length===0)Ue("-- No tables found to drop");else{Ue(`-- Dropping ${y.length} tables: ${y.join(", ")}`);for(let E of y.reverse())try{await x(E),Ue(`-- Dropped table: ${E}`)}catch(S){console.error(S),Ue(`-- Table ${E} may not exist, skipping drop`)}}if(D.length>0){Ue(`-- Dropping ${D.length} enum types: ${D.join(", ")}`);for(let E of D)try{let S=d.dropEnumType(E);if(S)await Ge(async(v)=>{await v.unsafe(S).execute(),Ue(`-- Dropped enum type: ${E}`)})}catch(S){console.error(S),Ue(`-- Enum type ${E} may not exist, skipping drop`)}}else Ue("-- No enum types found to drop");if(y.length>0&&!o.preserveMigrationState)try{await Gi(s,g,o)}catch(E){console.error(E),Ue("-- Could not clean up migration files")}else if(y.length===0)Ue("-- No models directory found; keeping committed migration files in place");else Ue("-- Preserving migration files and model snapshot for fresh replay");if(!o.preserveMigrationState)try{await Hi(g)}catch(E){console.error(E),Ue("-- Could not clear generated directory")}return Ue("-- Database reset completed successfully"),!0}catch(y){return console.error("-- Database reset failed:",y),!1}}async function Gi(s,o,l={}){if(!s)s=wt(Pn.cwd(),"app/Models");if(!o)o=Ft();let d=String(l.dialect||e.dialect||"postgres"),g=kn(o,d);if(Nt(g))vn(g),Ue(`-- Removed model snapshot file: ${g}`);let x=wt(s,`.qb-migrations.${d}.json`),y=String(l.state||x);if(Nt(y))vn(y),Ue(`-- Removed legacy migration state file: ${y}`);zi($t(o,e.migrationDir))}function zi(s){if(!Nt(s))return;let o=0,l=[];for(let d of br(s).filter((g)=>g.endsWith(".sql"))){if(!xr(wt(s,d))){l.push(d);continue}vn(wt(s,d)),Ue(`-- Removed generated migration file: ${d}`),o+=1}if(Ue(`-- Cleaned up ${o} generated migration file${o===1?"":"s"} from migrations directory`),l.length>0)Ue(`-- Kept ${l.length} hand-written migration${l.length===1?"":"s"}: ${l.slice(0,5).join(", ")}${l.length>5?`, +${l.length-5} more`:""}`)}async function Hi(s){if(!s)s=Ft();let o=wt(s,"generated");if(Nt(o))try{hr(o,{recursive:!0,force:!0}),Ue("-- Cleared generated directory")}catch(l){console.error("-- Failed to clear generated directory:",l)}}async function Sr(s,o){let d=m(o).createMigrationsTable();try{await s.unsafe(d).execute(),Ue("-- Migrations table ready")}catch(g){throw console.error("-- Failed to create migrations table:",g),g}}async function Xi(s,o){let l=m(o);try{return(await s.unsafe(l.getExecutedMigrationsQuery()).execute()).map((g)=>g.migration)}catch(d){return console.error("-- Failed to get executed migrations:",d),[]}}async function rn(s,o,l){let d=m(l);try{Ue(`-- Recording migration: ${o}`),await s.unsafe(d.recordMigrationQuery(),[o]).execute(),Ue(`-- Successfully recorded migration: ${o}`)}catch(g){throw console.error(`-- Failed to record migration ${o}:`,g),g}}
383
384
  export{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,Xe,Le,Ze,k,le,a,ce,ue,de,fe,m,et,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De,w,h,an,on,ln,tt,nt,rt,it,st,cn,at,Pt,un,dn,fn,mn,ot,hn,gn,pn,$e,u,lt,ct,ut,dt,ft,Ot,H,Ee,yn,bn,mt,Ke,p,Fe,je,_t,Tn,It,wn,ht,gt,pt,Lt,Kt};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{et,T,C,R}from"./chunk-vw9ss7z8.js";import"./chunk-c7m701dd.js";import"./chunk-3xpe6b57.js";import"./chunk-cxpaxq2p.js";import"./chunk-hjgcemhy.js";import"./chunk-4cs1xx1d.js";export{C as executeMigration,T as generateMigration,R as resetDatabase,et as saveMigrationSnapshot};
2
+ import{et,T,C,R}from"./chunk-6r90xd1j.js";import"./chunk-c7m701dd.js";import"./chunk-3xpe6b57.js";import"./chunk-cxpaxq2p.js";import"./chunk-hjgcemhy.js";import"./chunk-4cs1xx1d.js";export{C as executeMigration,T as generateMigration,R as resetDatabase,et as saveMigrationSnapshot};
@@ -6,7 +6,7 @@ export declare interface DialectDriver {
6
6
  createIndex: (tableName: string, index: IndexPlan, columns?: readonly ColumnPlan[]) => string
7
7
  addForeignKey: (tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string, existingConstraintNames?: string[]) => string
8
8
  addColumn: (tableName: string, column: ColumnPlan) => string
9
- modifyColumn: (tableName: string, column: ColumnPlan) => string
9
+ modifyColumn: (tableName: string, column: ColumnPlan, previous?: ColumnPlan) => string
10
10
  renameColumn: (tableName: string, from: string, to: string) => string
11
11
  renameTable: (from: string, to: string) => string
12
12
  rebuildTable: (spec: RebuildTableSpec) => string
@@ -12,7 +12,7 @@ export declare interface DialectDriver {
12
12
  createIndex: (tableName: string, index: IndexPlan, columns?: readonly ColumnPlan[]) => string
13
13
  addForeignKey: (tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string, existingConstraintNames?: string[]) => string
14
14
  addColumn: (tableName: string, column: ColumnPlan) => string
15
- modifyColumn: (tableName: string, column: ColumnPlan) => string
15
+ modifyColumn: (tableName: string, column: ColumnPlan, previous?: ColumnPlan) => string
16
16
  renameColumn: (tableName: string, from: string, to: string) => string
17
17
  renameTable: (from: string, to: string) => string
18
18
  rebuildTable: (spec: RebuildTableSpec) => string
@@ -35,7 +35,7 @@ export declare class PostgresDriver implements DialectDriver {
35
35
  createIndex(tableName: string, index: IndexPlan): string;
36
36
  addForeignKey(tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string, existingConstraintNames?: string[]): string;
37
37
  addColumn(tableName: string, column: ColumnPlan): string;
38
- modifyColumn(tableName: string, column: ColumnPlan): string;
38
+ modifyColumn(tableName: string, column: ColumnPlan, previous?: ColumnPlan): string;
39
39
  renameColumn(tableName: string, from: string, to: string): string;
40
40
  renameTable(from: string, to: string): string;
41
41
  rebuildTable(): string;
@@ -7,7 +7,7 @@ export declare interface DialectDriver {
7
7
  createIndex: (tableName: string, index: IndexPlan, columns?: readonly ColumnPlan[]) => string
8
8
  addForeignKey: (tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string) => string
9
9
  addColumn: (tableName: string, column: ColumnPlan) => string
10
- modifyColumn: (tableName: string, column: ColumnPlan) => string
10
+ modifyColumn: (tableName: string, column: ColumnPlan, previous?: ColumnPlan) => string
11
11
  renameColumn: (tableName: string, from: string, to: string) => string
12
12
  renameTable: (from: string, to: string) => string
13
13
  rebuildTable: (spec: RebuildTableSpec) => string
package/dist/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,Xe,Le,Ze,k,le,a,ce,ue,de,fe,m,et,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De,w,h,an,on,ln,tt,nt,rt,it,st,cn,at,Pt,un,dn,fn,mn,ot,hn,gn,pn,$e,u,lt,ct,ut,dt,ft,Ot,H,Ee,yn,bn,mt,Ke,p,Fe,je,_t,Tn,It,wn,ht,gt,pt,Lt,Kt}from"../chunk-vw9ss7z8.js";import{D,Sn,Ft,l,yt,bt,i,xe,ve}from"../chunk-c7m701dd.js";import{Tt,c,Q,E,wt,qe,x,ke,We,Ue,Ce,St,d,G,Re,Ve,Dt,He,jt,qt}from"../chunk-3xpe6b57.js";import{$t,Et,xt,vt,Dn,$n,En,kt,Ct,xn,vn,Wt,Ut,Vt,Ht,Qt,Rt,Gt,Jt}from"../chunk-cxpaxq2p.js";import{n,Qe,e,B,t,s,P,Ne,zt,At,Mt,v,Yt,Pe,b,Xt,Zt,f,Je}from"../chunk-hjgcemhy.js";import{en,tn,nn,g,ze,Ye,rn,Ie,sn}from"../chunk-4cs1xx1d.js";export{kt as BelongsToManyRelationBuilder,ze as BrowserQueryBuilder,g as BrowserQueryError,At as DEFAULT_SQLITE_PRAGMAS,Q as DynamoDBClient,Tt as DynamoDBDriverImpl,h as DynamoDBItemBuilder,Re as DynamoDBMigrationDriver,G as DynamoDBMigrationTracker,w as DynamoDBQueryBuilder,ot as DynamoDBToolingAdapter,He as EntityQueryBuilder,ut as GENERATED_MARKER,d as MIGRATIONS_TABLE,qe as Model,a as MySQLDriver,ce as PostgresDriver,fe as SQLiteDriver,It as Seeder,ue as SingleStoreDriver,tt as SingleTableManager,cn as SingleTablePatterns,rt as SingleTableQueryBuilder,nt as SingleTableRepository,p as UTC_CLOCK_DEFAULT,de as VitessDriver,v as applySqliteBootstrapPragmas,Lt as auditSchemaDrift,sn as browserAuth,Ye as browserQuery,$e as buildDatabaseSchema,Ce as buildDynamoDBMigrationPlan,H as buildMigrationPlan,lt as buildSchemaMeta,z as cacheClear,X as cacheConfig,Y as cacheStats,Ke as canonicalStorageType,Fe as canonicalizeDefault,Se as checkSchema,Et as clearLocalModels,Qt as clearModelRegistry,xe as clearQueryCache,e as config,en as configureBrowser,wt as configureModels,Dn as configureOrm,Ue as convertSchemaToDefinition,rn as createBrowserDb,Ie as createBrowserModel,E as createClient,qt as createDynamo,ln as createDynamoDBClient,c as createDynamoDBDriver,on as createDynamoDBItemBuilder,an as createDynamoDBQueryBuilder,hn as createDynamoDBToolingAdapter,$t as createFakerCompatLayer,Ve as createMigrationDriver,Ct as createModel,i as createQueryBuilder,st as createRepository,it as createSingleTableManager,xn as createTableFromModel,_ as dbInfo,I as dbOptimize,re as dbStats,L as dbWipe,Qe as defaultConfig,zt as defineConfig,Gt as defineModel,Tn as defineModels,wn as defineSeeder,ne as dumpDatabase,jt as dynamo,bt as escapeStringLiteral,C as executeMigration,ie as explain,q as explainAllQueries,ee as exportData,xt as extractChanges,vt as extractInsertId,We as extractModelSchema,ke as extractTableDefinition,ht as familyOfDeclared,gt as familyOfSqlType,se as file,Kt as formatSchemaDrift,be as freshDatabase,gn as generateAccessPatterns,W as generateDiagram,je as generateDiffOperations,_t as generateDiffSql,bn as generateDiffSqlString,T as generateMigration,Ze as generateModelSource,Ee as generateSql,yn as generateSqlString,Ut as getAllModels,tn as getBrowserConfig,P as getConfig,En as getDatabase,m as getDialectDriver,Wt as getModel,Vt as getModelRegistry,t as getPlaceholder,s as getPlaceholders,Ht as hasModel,mt as hashMigrationPlan,x as hashTableDefinition,te as importData,Zt as inflectSingular,K as inspectTable,oe as introspect,k as introspectDatabase,nn as isBrowser,St as isDefinitionEqual,dt as isGeneratedMigrationSql,Ot as isLosslessTypeChange,n as isMysqlLike,Sn as iterateAllPivots,ct as lastCreatedMigrationFiles,u as loadModels,le as makeModel,ye as makeSeeder,fn as marshallObject,me as migrateGenerate,ge as migrateList,Dt as migrateModels,he as migrateRollback,F as migrateStatus,ft as migrationBody,Le as modelNameForTable,j as modelShow,I as optimizeDatabase,Pt as parseStacksModels,pe as ping,q as queryExplainAll,l as quoteColumnForDialect,Ft as raw,Jt as registerBrowserModels,Rt as registerModel,W as relationDiagram,$n as releaseOrm,Yt as resetConnection,R as resetDatabase,B as resolveDialect,at as resolveKeyPattern,D as resolvePivot,Mt as resolveSqlitePragmas,J as runBenchmark,U as runSeeder,A as runSeeders,pt as satisfies,et as saveMigrationSnapshot,vn as seedModel,Ne as setConfig,ve as setQueryCacheMaxSize,j as showModel,f as singularizerFor,Te as sql,Xe as sqlTypeToAttr,pn as stacksModelToEntity,O as startConsole,Xt as stripTrailingS,ae as tableInfo,b as tableNameFor,yt as temporalLiteral,Z as tinker,Je as toDialectPlaceholders,un as toDynamoDBItem,dn as toModelInstance,Pe as toTableName,mn as unmarshallItem,we as unsafe,V as validateSchema,De as waitReady,L as wipeDatabase};
2
+ import{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,Xe,Le,Ze,k,le,a,ce,ue,de,fe,m,et,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De,w,h,an,on,ln,tt,nt,rt,it,st,cn,at,Pt,un,dn,fn,mn,ot,hn,gn,pn,$e,u,lt,ct,ut,dt,ft,Ot,H,Ee,yn,bn,mt,Ke,p,Fe,je,_t,Tn,It,wn,ht,gt,pt,Lt,Kt}from"../chunk-6r90xd1j.js";import{D,Sn,Ft,l,yt,bt,i,xe,ve}from"../chunk-c7m701dd.js";import{Tt,c,Q,E,wt,qe,x,ke,We,Ue,Ce,St,d,G,Re,Ve,Dt,He,jt,qt}from"../chunk-3xpe6b57.js";import{$t,Et,xt,vt,Dn,$n,En,kt,Ct,xn,vn,Wt,Ut,Vt,Ht,Qt,Rt,Gt,Jt}from"../chunk-cxpaxq2p.js";import{n,Qe,e,B,t,s,P,Ne,zt,At,Mt,v,Yt,Pe,b,Xt,Zt,f,Je}from"../chunk-hjgcemhy.js";import{en,tn,nn,g,ze,Ye,rn,Ie,sn}from"../chunk-4cs1xx1d.js";export{kt as BelongsToManyRelationBuilder,ze as BrowserQueryBuilder,g as BrowserQueryError,At as DEFAULT_SQLITE_PRAGMAS,Q as DynamoDBClient,Tt as DynamoDBDriverImpl,h as DynamoDBItemBuilder,Re as DynamoDBMigrationDriver,G as DynamoDBMigrationTracker,w as DynamoDBQueryBuilder,ot as DynamoDBToolingAdapter,He as EntityQueryBuilder,ut as GENERATED_MARKER,d as MIGRATIONS_TABLE,qe as Model,a as MySQLDriver,ce as PostgresDriver,fe as SQLiteDriver,It as Seeder,ue as SingleStoreDriver,tt as SingleTableManager,cn as SingleTablePatterns,rt as SingleTableQueryBuilder,nt as SingleTableRepository,p as UTC_CLOCK_DEFAULT,de as VitessDriver,v as applySqliteBootstrapPragmas,Lt as auditSchemaDrift,sn as browserAuth,Ye as browserQuery,$e as buildDatabaseSchema,Ce as buildDynamoDBMigrationPlan,H as buildMigrationPlan,lt as buildSchemaMeta,z as cacheClear,X as cacheConfig,Y as cacheStats,Ke as canonicalStorageType,Fe as canonicalizeDefault,Se as checkSchema,Et as clearLocalModels,Qt as clearModelRegistry,xe as clearQueryCache,e as config,en as configureBrowser,wt as configureModels,Dn as configureOrm,Ue as convertSchemaToDefinition,rn as createBrowserDb,Ie as createBrowserModel,E as createClient,qt as createDynamo,ln as createDynamoDBClient,c as createDynamoDBDriver,on as createDynamoDBItemBuilder,an as createDynamoDBQueryBuilder,hn as createDynamoDBToolingAdapter,$t as createFakerCompatLayer,Ve as createMigrationDriver,Ct as createModel,i as createQueryBuilder,st as createRepository,it as createSingleTableManager,xn as createTableFromModel,_ as dbInfo,I as dbOptimize,re as dbStats,L as dbWipe,Qe as defaultConfig,zt as defineConfig,Gt as defineModel,Tn as defineModels,wn as defineSeeder,ne as dumpDatabase,jt as dynamo,bt as escapeStringLiteral,C as executeMigration,ie as explain,q as explainAllQueries,ee as exportData,xt as extractChanges,vt as extractInsertId,We as extractModelSchema,ke as extractTableDefinition,ht as familyOfDeclared,gt as familyOfSqlType,se as file,Kt as formatSchemaDrift,be as freshDatabase,gn as generateAccessPatterns,W as generateDiagram,je as generateDiffOperations,_t as generateDiffSql,bn as generateDiffSqlString,T as generateMigration,Ze as generateModelSource,Ee as generateSql,yn as generateSqlString,Ut as getAllModels,tn as getBrowserConfig,P as getConfig,En as getDatabase,m as getDialectDriver,Wt as getModel,Vt as getModelRegistry,t as getPlaceholder,s as getPlaceholders,Ht as hasModel,mt as hashMigrationPlan,x as hashTableDefinition,te as importData,Zt as inflectSingular,K as inspectTable,oe as introspect,k as introspectDatabase,nn as isBrowser,St as isDefinitionEqual,dt as isGeneratedMigrationSql,Ot as isLosslessTypeChange,n as isMysqlLike,Sn as iterateAllPivots,ct as lastCreatedMigrationFiles,u as loadModels,le as makeModel,ye as makeSeeder,fn as marshallObject,me as migrateGenerate,ge as migrateList,Dt as migrateModels,he as migrateRollback,F as migrateStatus,ft as migrationBody,Le as modelNameForTable,j as modelShow,I as optimizeDatabase,Pt as parseStacksModels,pe as ping,q as queryExplainAll,l as quoteColumnForDialect,Ft as raw,Jt as registerBrowserModels,Rt as registerModel,W as relationDiagram,$n as releaseOrm,Yt as resetConnection,R as resetDatabase,B as resolveDialect,at as resolveKeyPattern,D as resolvePivot,Mt as resolveSqlitePragmas,J as runBenchmark,U as runSeeder,A as runSeeders,pt as satisfies,et as saveMigrationSnapshot,vn as seedModel,Ne as setConfig,ve as setQueryCacheMaxSize,j as showModel,f as singularizerFor,Te as sql,Xe as sqlTypeToAttr,pn as stacksModelToEntity,O as startConsole,Xt as stripTrailingS,ae as tableInfo,b as tableNameFor,yt as temporalLiteral,Z as tinker,Je as toDialectPlaceholders,un as toDynamoDBItem,dn as toModelInstance,Pe as toTableName,mn as unmarshallItem,we as unsafe,V as validateSchema,De as waitReady,L as wipeDatabase};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",