bun-query-builder 0.3.7 → 0.3.8

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,26 +1,26 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import"../chunk-bpwg9p8b.js";import"../chunk-93ny6tvm.js";import"../chunk-b5fh1hw4.js";import"../chunk-vmptnnff.js";import"../chunk-7dxm19yj.js";import{Z,ee,te,ne,I,re,ie,se,ae,L,oe,K,F,le,ce,j,ue,de,C,fe,w,R,A,ye,be,q,Te,W,we,U,V,N,H,Se,De,Ee,$e,Q,xe,ve}from"../chunk-3htakbmy.js";import{EventEmitter as Le}from"events";import v from"process";import Oe from"process";import X from"process";import D from"process";import E from"process";import qe from"tty";import kt,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import G from"fs/promises";import Me from"os";import Y from"path";import S from"process";function J(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],n=(d)=>{let a=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),a=!0;else if(r.endsWith("..."))r=r.slice(0,-3),a=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:a}},o;while(o=t.exec(e))s.push(n(o));let m;while(m=i.exec(e))s.push(n(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Ie(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function z(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function T(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,n=t.length,o=e,m;for(;s<n;++s)m=o[t[s]],o=o[t[s]]=s===n-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function _(e){return e.split(".").map((t,i)=>i===0?T(t):t).join(".")}class M 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-bpwg9p8b.js";import"../chunk-93ny6tvm.js";import"../chunk-vyqr0w2z.js";import"../chunk-rzfnhh9f.js";import"../chunk-9wck98bv.js";import{Z,ee,te,ne,I,re,ie,se,ae,L,oe,K,F,le,ce,j,ue,de,C,fe,w,R,A,ye,be,q,Te,W,we,U,V,M,H,Se,De,Ee,$e,Q,xe,ve}from"../chunk-3b13fc8j.js";import{EventEmitter as Le}from"events";import v from"process";import Oe from"process";import X from"process";import D from"process";import E from"process";import qe from"tty";import kt,{stdin as Gt,stdout as Ht}from"process";import{existsSync as Bt}from"fs";import G from"fs/promises";import Me from"os";import Y from"path";import S from"process";function J(e){return e.replace(/[<[].+/,"").trim()}function Ne(e){let t=/<([^>]+)>/g,i=/\[([^\]]+)\]/g,s=[],n=(d)=>{let a=!1,r=d[1];if(r.startsWith("..."))r=r.slice(3),a=!0;else if(r.endsWith("..."))r=r.slice(0,-3),a=!0;return{required:d[0].startsWith("<"),value:r.trim(),variadic:a}},o;while(o=t.exec(e))s.push(n(o));let m;while(m=i.exec(e))s.push(n(m));return s}function Pe(e){let t={alias:{},boolean:[]};for(let[i,s]of e.entries()){if(s.names.length>1)t.alias[s.names[0]]=s.names.slice(1);if(s.isBoolean)if(s.negated){if(!e.some((o,m)=>m!==i&&o.names.some((d)=>s.names.includes(d))&&typeof o.required==="boolean"))t.boolean.push(s.names[0])}else t.boolean.push(s.names[0])}return t}function Ie(e){return e.reduce((t,i)=>t.length>=i.length?t:i,"")}function z(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}function N(e){return e.replace(/([a-z])-([a-z])/g,(t,i,s)=>i+s.toUpperCase())}function We(e,t,i){let s=0,n=t.length,o=e,m;for(;s<n;++s)m=o[t[s]],o=o[t[s]]=s===n-1?i:m!=null?m:!!~t[s+1].indexOf(".")||!(+t[s+1]>-1)?{}:[]}function Fe(e,t){for(let i of Object.keys(t)){let s=t[i];if(e[i]===void 0)continue;if(s.shouldTransform){if(e[i]=Array.prototype.concat.call([],e[i]),typeof s.transformFunction==="function")e[i]=e[i].map(s.transformFunction)}}}function ze(e){let t=/([^\\/]+)$/.exec(e);return t?t[1]:""}function _(e){return e.split(".").map((t,i)=>i===0?N(t):t).join(".")}class B 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
- ${this.stack}`;return this.message}}function Ue(e){if(e instanceof M)return!0;return!!e&&typeof e==="object"&&e.name==="ClappError"&&typeof e.message==="string"}function Ge(){let{env:e}=Oe,{TERM:t,TERM_PROGRAM:i}=e;if(Oe.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 P="\x1B",b=`${P}[`;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:`${P}7`,restore:`${P}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:`${P}c`};function He(e,t){let i=[];for(let s=0;s<=t.length;s++)i[s]=[s];for(let s=0;s<=e.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let n=1;n<=e.length;n++)if(t.charAt(s-1)===e.charAt(n-1))i[s][n]=i[s-1][n-1];else i[s][n]=Math.min(i[s-1][n-1]+1,i[s][n-1]+1,i[s-1][n]+1);return i[t.length][e.length]}function Be(e,t,i=2,s=3){return t.map((n)=>({cmd:n,distance:He(e,n)})).filter(({distance:n})=>n<=i).sort((n,o)=>n.distance-o.distance).slice(0,s).map(({cmd:n})=>n)}function Ke(e,t={}){let i={_:[]},s=t.alias||{},n=new Set(t.boolean||[]),o={};for(let a of Object.keys(s))for(let r of s[a])o[r]=a;for(let a of n)if(s[a])for(let r of s[a])n.add(r);function m(a,r){if(a===void 0)return r;if(typeof r==="boolean")return r;return Array.isArray(a)?[...a,r]:[a,r]}function d(a,r){let c=o[a]||a,h=m(i[c],r);if(i[c]=h,s[c])for(let l of s[c])i[l]=h;if(o[a]&&s[o[a]])for(let l of s[o[a]])i[l]=h;i[a]=h}for(let a=0;a<e.length;a++){let r=e[a];if(r==="--"){i._.push(...e.slice(a+1));break}if(r.startsWith("--")){let c=r.indexOf("=");if(c!==-1){let h=T(r.slice(2,c)),l=r.slice(c+1);d(h,l)}else{let h=r.slice(2);if(h.startsWith("no-")){let f=T(h.slice(3));d(f,!1);continue}let l=T(h),y=o[l]||l;if(n.has(y)||n.has(l))d(l,!0);else{let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}}}else if(r.startsWith("-")&&r.length>1){let c=r.slice(1);for(let h=0;h<c.length;h++){let l=c[h],y=o[l]||l;if(h===c.length-1&&!n.has(y)&&!n.has(l)){let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}else d(l,!0)}}else i._.push(r)}return i}class 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=J(e).split(",").map((s)=>{let n=s.trim().replace(/^-{1,2}/,"");if(n.startsWith("no-"))this.negated=!0,n=n.replace(/^no-/,"");return _(n)}).sort((s,n)=>s.length>n.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if(e.includes("<"))this.required=!0;else if(e.includes("["))this.required=!1;else this.isBoolean=!0}}var Dt=X.argv,Ye=`${X.platform}-${X.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,_e=D.argv,Qe=`${D.platform}-${D.arch} node-${D.version}`;class me{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=J(e);let n=J(e),o=n.indexOf(":");if(o>0)this.namespace=n.substring(0,o),this.name=n.substring(o+1);if(this.args=Ne(e),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!i)this.config={}}usage(e){return this.usageText=e,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(e,t="-v, --version"){return this.versionNumber=e,this.option(t,"Display version number"),this}example(e){return this.examples.push(e),this}option(e,t,i){let s=new 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 he}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption(e){let t=_(e.split(".")[0]);return!!this.options.find((i)=>i.names.some((s)=>_(s)===t))}outputHelp(){let{name:e,commands:t}=this.cli,{versionNumber:i,options:s,helpCallback:n}=this.cli.globalCommand,o=[{body:`${e}${i?`/${i}`:""}`}];if(o.push({title:"Usage",body:` $ ${e} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&t.length>0){let r=Ie(t.map((f)=>f.rawName)),c=new Map,h=[];for(let f of t)if(f.namespace){if(!c.has(f.namespace))c.set(f.namespace,[]);c.get(f.namespace).push(f)}else h.push(f);let l="";if(h.sort((f,B)=>f.rawName<B.rawName?-1:f.rawName>B.rawName?1:0),h.length>0)l+=h.map((f)=>` ${z(f.rawName,r.length)} ${f.description}`).join(`
7
- `);let y=Array.from(c.keys()).sort();for(let f of y){let B=c.get(f);if(l.length>0)l+=`
6
+ ${this.stack}`;return this.message}}function Ue(e){if(e instanceof B)return!0;return!!e&&typeof e==="object"&&e.name==="ClappError"&&typeof e.message==="string"}function Ge(){let{env:e}=Oe,{TERM:t,TERM_PROGRAM:i}=e;if(Oe.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 P="\x1B",b=`${P}[`;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:`${P}7`,restore:`${P}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:`${P}c`};function He(e,t){let i=[];for(let s=0;s<=t.length;s++)i[s]=[s];for(let s=0;s<=e.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let n=1;n<=e.length;n++)if(t.charAt(s-1)===e.charAt(n-1))i[s][n]=i[s-1][n-1];else i[s][n]=Math.min(i[s-1][n-1]+1,i[s][n-1]+1,i[s-1][n]+1);return i[t.length][e.length]}function Be(e,t,i=2,s=3){return t.map((n)=>({cmd:n,distance:He(e,n)})).filter(({distance:n})=>n<=i).sort((n,o)=>n.distance-o.distance).slice(0,s).map(({cmd:n})=>n)}function Ke(e,t={}){let i={_:[]},s=t.alias||{},n=new Set(t.boolean||[]),o={};for(let a of Object.keys(s))for(let r of s[a])o[r]=a;for(let a of n)if(s[a])for(let r of s[a])n.add(r);function m(a,r){if(a===void 0)return r;if(typeof r==="boolean")return r;return Array.isArray(a)?[...a,r]:[a,r]}function d(a,r){let c=o[a]||a,h=m(i[c],r);if(i[c]=h,s[c])for(let l of s[c])i[l]=h;if(o[a]&&s[o[a]])for(let l of s[o[a]])i[l]=h;i[a]=h}for(let a=0;a<e.length;a++){let r=e[a];if(r==="--"){i._.push(...e.slice(a+1));break}if(r.startsWith("--")){let c=r.indexOf("=");if(c!==-1){let h=N(r.slice(2,c)),l=r.slice(c+1);d(h,l)}else{let h=r.slice(2);if(h.startsWith("no-")){let f=N(h.slice(3));d(f,!1);continue}let l=N(h),y=o[l]||l;if(n.has(y)||n.has(l))d(l,!0);else{let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}}}else if(r.startsWith("-")&&r.length>1){let c=r.slice(1);for(let h=0;h<c.length;h++){let l=c[h],y=o[l]||l;if(h===c.length-1&&!n.has(y)&&!n.has(l)){let f=e[a+1];if(f!==void 0&&!f.startsWith("-"))d(l,f),a++;else d(l,!0)}else d(l,!0)}}else i._.push(r)}return i}class 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=J(e).split(",").map((s)=>{let n=s.trim().replace(/^-{1,2}/,"");if(n.startsWith("no-"))this.negated=!0,n=n.replace(/^no-/,"");return _(n)}).sort((s,n)=>s.length>n.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if(e.includes("<"))this.required=!0;else if(e.includes("["))this.required=!1;else this.isBoolean=!0}}var Dt=X.argv,Ye=`${X.platform}-${X.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,_e=D.argv,Qe=`${D.platform}-${D.arch} node-${D.version}`;class me{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=J(e);let n=J(e),o=n.indexOf(":");if(o>0)this.namespace=n.substring(0,o),this.name=n.substring(o+1);if(this.args=Ne(e),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!i)this.config={}}usage(e){return this.usageText=e,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(e,t="-v, --version"){return this.versionNumber=e,this.option(t,"Display version number"),this}example(e){return this.examples.push(e),this}option(e,t,i){let s=new 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 he}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption(e){let t=_(e.split(".")[0]);return!!this.options.find((i)=>i.names.some((s)=>_(s)===t))}outputHelp(){let{name:e,commands:t}=this.cli,{versionNumber:i,options:s,helpCallback:n}=this.cli.globalCommand,o=[{body:`${e}${i?`/${i}`:""}`}];if(o.push({title:"Usage",body:` $ ${e} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&t.length>0){let r=Ie(t.map((f)=>f.rawName)),c=new Map,h=[];for(let f of t)if(f.namespace){if(!c.has(f.namespace))c.set(f.namespace,[]);c.get(f.namespace).push(f)}else h.push(f);let l="";if(h.sort((f,T)=>f.rawName<T.rawName?-1:f.rawName>T.rawName?1:0),h.length>0)l+=h.map((f)=>` ${z(f.rawName,r.length)} ${f.description}`).join(`
7
+ `);let y=Array.from(c.keys()).sort();for(let f of y){let T=c.get(f);if(l.length>0)l+=`
8
8
 
9
9
  `;l+=` ${f}:
10
- `,l+=B.map((Ce)=>` ${z(Ce.rawName,r.length-2)} ${Ce.description}`).join(`
10
+ `,l+=T.map((Ce)=>` ${z(Ce.rawName,r.length-2)} ${Ce.description}`).join(`
11
11
  `)}o.push({title:"Commands",body:l}),o.push({body:`Run \`${e} <command> --help\` for command details.`})}let d=new Set(this.options.flatMap((r)=>r.names)),a=this.isGlobalCommand?s:[...this.options,...(s||[]).filter((r)=>!r.names.some((c)=>d.has(c)))];if(!this.isGlobalCommand&&!this.isDefaultCommand)a=a.filter((r)=>r.name!=="version");if(a.length>0){let r=Ie(a.map((c)=>c.rawName));o.push({title:"Options",body:a.map((c)=>` ${z(c.rawName,r.length)} ${c.description} ${c.config.default===void 0?"":`(default: ${c.config.default})`}`).join(`
12
12
  `)})}if(this.examples.length>0)o.push({title:"Examples",body:this.examples.map((r)=>{if(typeof r==="function")return r(e);return r}).join(`
13
13
  `)});if(n)o=n(o)||o;console.log(o.map((r)=>r.title?`${r.title}:
14
14
  ${r.body}`:r.body).join(`
15
15
 
16
- `))}outputVersion(){let{name:e}=this.cli,{versionNumber:t}=this.cli.globalCommand;if(t)console.log(`${e}/${t} ${typeof Bun<"u"?Ye:Qe}`)}get usageLine(){return`$ ${this.cli.name} ${this.usageText||this.rawName}`}checkRequiredArgs(){let e=this.args.filter((t)=>t.required).length;if(this.cli.args.length<e){let i=this.args.filter((n)=>n.required).slice(this.cli.args.length),s=i.map((n)=>`<${n.value}>`).join(" ");throw new M(`Missing required argument${i.length>1?"s":""}: ${s}
16
+ `))}outputVersion(){let{name:e}=this.cli,{versionNumber:t}=this.cli.globalCommand;if(t)console.log(`${e}/${t} ${typeof Bun<"u"?Ye:Qe}`)}get usageLine(){return`$ ${this.cli.name} ${this.usageText||this.rawName}`}checkRequiredArgs(){let e=this.args.filter((t)=>t.required).length;if(this.cli.args.length<e){let i=this.args.filter((n)=>n.required).slice(this.cli.args.length),s=i.map((n)=>`<${n.value}>`).join(" ");throw new B(`Missing required argument${i.length>1?"s":""}: ${s}
17
17
 
18
18
  Run \`${this.cli.name} ${this.rawName} --help\` for usage information.`,this.usageLine)}}checkUnknownOptions(){let{options:e,globalCommand:t}=this.cli;if(!this.config.allowUnknownOptions){for(let i of Object.keys(e))if(i!=="--"&&!this.hasOption(i)&&!t.hasOption(i)){let n=[...t.options,...this.options].flatMap((r)=>r.names),o=_(i.split(".")[0]),m=i.length>1?`--${i}`:`-${i}`,d=Be(o,n),a=`Unknown option \`${m}\``;if(d.length>0)a+=`
19
19
 
20
20
  Did you mean one of these?`,d.forEach((r)=>{let c=r.length>1?`--${r}`:`-${r}`;a+=`
21
21
  \u2022 ${c}`});throw a+=`
22
22
 
23
- Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new M(a,this.usageLine)}}}checkOptionValue(){let{options:e,globalCommand:t}=this.cli,i=[...t.options,...this.options];for(let s of i){let n=e[s.name.split(".")[0]];if(s.required){let o=i.some((m)=>m.negated&&m.names.includes(s.name));if(n===!0||n===!1&&!o)throw new M(`Option \`${s.rawName}\` requires a value.
23
+ Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new B(a,this.usageLine)}}}checkOptionValue(){let{options:e,globalCommand:t}=this.cli,i=[...t.options,...this.options];for(let s of i){let n=e[s.name.split(".")[0]];if(s.required){let o=i.some((m)=>m.negated&&m.names.includes(s.name));if(n===!0||n===!1&&!o)throw new B(`Option \`${s.rawName}\` requires a value.
24
24
 
25
25
  Example: ${this.cli.name} ${this.rawName} ${s.rawName} <value>`,this.usageLine)}}}}class he extends me{constructor(e){super("@@global@@","",{},e)}}var Je=me,x={red:["\x1B[31m","\x1B[39m"],green:["\x1B[32m","\x1B[39m"],blue:["\x1B[34m","\x1B[39m"],yellow:["\x1B[33m","\x1B[39m"],cyan:["\x1B[36m","\x1B[39m"],magenta:["\x1B[35m","\x1B[39m"],white:["\x1B[37m","\x1B[39m"],gray:["\x1B[90m","\x1B[39m"],bgRed:["\x1B[41m","\x1B[49m"],bgGreen:["\x1B[42m","\x1B[49m"],bgBlue:["\x1B[44m","\x1B[49m"],bgYellow:["\x1B[43m","\x1B[49m"],bgCyan:["\x1B[46m","\x1B[49m"],bgMagenta:["\x1B[45m","\x1B[49m"],bold:["\x1B[1m","\x1B[22m"],italic:["\x1B[3m","\x1B[23m"],underline:["\x1B[4m","\x1B[24m"],dim:["\x1B[2m","\x1B[22m"],inverse:["\x1B[7m","\x1B[27m"],hidden:["\x1B[8m","\x1B[28m"],strikethrough:["\x1B[9m","\x1B[29m"]};var O={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function Xe(){return!0}function Ze(){let e={};e.supportsColor=Xe();function t(s,n=[]){let o=s===""?[]:[...n,s],m=function(a){if(!e.supportsColor)return a;let r="",c="";for(let h of o)if(h in O&&O[h]in x){let l=O[h];r+=x[l][0],c=x[l][1]+c}else if(h in x)r+=x[h][0],c=x[h][1]+c;return r+a+c},d=[...Object.keys(x),...Object.keys(O)];for(let a of d)if(!(a in m))Object.defineProperty(m,a,{get(){return t(a,o)}});return m}let i=[...Object.keys(x),...Object.keys(O)];for(let s of i)if(!(s in e))Object.defineProperty(e,s,{get(){return t(s)}});return e}var k=Ze();class pe extends Le{name;commands;globalCommand;matchedCommand;matchedCommandName;rawArgs;args;options;showHelpOnExit;showVersionOnExit;enableDidYouMean=!0;signalHandlersSet=!1;isVerbose=!1;isQuiet=!1;isDebug=!1;isNoInteraction=!1;environment;isDryRun=!1;isForce=!1;useEmoji=!0;theme;isNoCache=!1;constructor(e=""){super();this.name=e,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new he(this),this.globalCommand.usage("<command> [options]")}handleSignals(e){if(this.signalHandlersSet)return this;let t=async(i)=>{if(console.log(`
26
26
 
@@ -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(k.yellow("Did you mean one of these?")),i.forEach((s)=>console.log(` ${k.dim("\u2022")} ${this.name} ${s}`)),console.log("")}console.log(k.dim("Run"),`${this.name} --help`,k.dim("to see all available commands")),v.exit(1)}async parse(e=_e,t={}){let{run:i=!0,exitOnError:s=!1}=t;if(s)try{return await this.parse(e,{run:i})}catch(a){throw this.handleUsageError(a),a}if(this.rawArgs=e,!this.name)this.name=e[1]?ze(e[1]):"cli";let n=!0,o=e.slice(2),m=o[0];if(m&&!m.startsWith("-")){for(let a of this.commands)if(a.isMatched(m)){let r=this.mri(o,a);n=!1;let c={...r,args:r.args.slice(1)};this.setParsedInfo(c,a,m),this.emit(`command:${m}`,a);break}if(n){let a=o[1];if(a&&!a.startsWith("-")){let r=`${m}:${a}`;for(let c of this.commands)if(c.isMatched(r)){let h=this.mri(o,c);n=!1;let l={...h,args:h.args.slice(2)};this.setParsedInfo(l,c,r),this.emit(`command:${r}`,c);break}}}}if(n){for(let a of this.commands)if(a.name===""){n=!1;let r=this.mri(o,a);this.setParsedInfo(r,a),this.emit("command:!",a);break}}if(n){let a=this.mri(e.slice(2));this.setParsedInfo(a)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction||this.options.interaction===!1)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji||this.options.emoji===!1)this.useEmoji=!1;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache||this.options.cache===!1)this.isNoCache=!0;if(this.options.help&&this.showHelpOnExit)this.outputHelp(),i=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),i=!1,this.unsetMatchedCommand();let d={args:this.args,options:this.options};if(i)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return d}mri(e,t){let i=[...this.globalCommand.options,...t?t.options:[]],s=Pe(i),n=[],o=e.indexOf("--");if(o>-1)n=e.slice(o+1),e=e.slice(0,o);let m=Ke(e,s),d={_:m._};for(let l of Object.keys(m))if(l!=="_")d[_(l)]=m[l];let a=d._,r={"--":n},c=t&&t.config.ignoreOptionDefaultValue?t.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,h=Object.create(null);for(let l of i){if(!c&&l.config.default!==void 0)for(let y of l.names)r[y]=l.config.default;if(Array.isArray(l.config.type)){if(h[l.name]===void 0)h[l.name]={shouldTransform:!0,transformFunction:l.config.type[0]}}}for(let l of Object.keys(d))if(l!=="_"){let y=l.split(".");We(r,y,d[l]),Fe(r,h)}for(let l of i){if(!l.variadic)continue;for(let y of l.names){let f=r[y];if(f===void 0||Array.isArray(f))continue;if(l.config.default!==void 0&&f===l.config.default)continue;r[y]=[f]}}return{args:a,options:r}}async run(e=_e){return this.parse(e,{run:!0,exitOnError:!0})}handleUsageError(e){if(!Ue(e)||e.isUsageError===!1)return;let t=e.message||"command-line error",i=this.name?`${this.name}: `:"",s=/--help/.test(t)?"":e.usage?`
30
30
  Usage: ${e.usage}`:`
31
31
  Run \`${this.name??"cli"} --help\` for usage.`;v.stderr.write(`${i}${t}${s}
32
- `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,a)=>{if(d.variadic)s.push(e.slice(a));else s.push(e[a])}),s.push(t);let n={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(n);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,a=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...n,next:a})}else await m()};await a()}else await m();for(let d of i.afterHooks)await d(n);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class 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 E.env)return E.env.FORCE_COLOR!=="0";if("NO_COLOR"in E.env||E.env.TERM==="dumb")return!1;if(E.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"),ft=g("\x1B[7m","\x1B[27m"),pt=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=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:ft,hidden:pt,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,Et=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(Et),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=kt.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var p=(e,t)=>_t?e:t,Jt=p("\u25C6","*"),Xt=p("\u25A0","x"),Zt=p("\u25B2","x"),ei=p("\u25C7","o"),ti=p("\u250C","T"),qt=p("\u2502","|"),ii=p("\u2514","\u2014"),si=p("\u25CF",">"),ri=p("\u25CB"," "),ni=p("\u25FB","[\u2022]"),ai=p("\u25FC","[+]"),oi=p("\u25FB","[ ]"),li=p("\u25AA","\u2022"),ci=p("\u2500","-"),ui=p("\u256E","+"),di=p("\u251C","+"),mi=p("\u256F","+"),hi=p("\u25CF","\u2022"),fi=p("\u25C6","*"),pi=p("\u25B2","!"),gi=p("\u25A0","x");var bi={light:p("\u2500","-"),heavy:p("\u2501","="),block:p("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=Y.join(e,".config","clapp");this.configPath=Y.join(t,"telemetry.json")}async isEnabled(){if(S.env.DO_NOT_TRACK==="1"||S.env.DO_NOT_TRACK==="true")return!1;if(S.env.NO_TELEMETRY==="1"||S.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:S.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:S.env.DO_NOT_TRACK==="1"||S.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 G.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=Y.dirname(this.configPath);await G.mkdir(t,{recursive:!0}),await G.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 ge="0.3.7";var u=new pe("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 de(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 C({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
32
+ `),v.exit(e.exitCode??2)}async runMatchedCommand(){let{args:e,options:t,matchedCommand:i}=this;if(!i||!i.commandAction)return;i.checkUnknownOptions(),i.checkOptionValue(),i.checkRequiredArgs();let s=[];i.args.forEach((d,a)=>{if(d.variadic)s.push(e.slice(a));else s.push(e[a])}),s.push(t);let n={command:i,args:s,options:t};for(let d of i.beforeHooks)await d(n);let o,m=async()=>{let d=i.commandAction.apply(this,s);if(d instanceof Promise)o=await d;else o=d;return o};if(i.middleware.length>0){let d=0,a=async()=>{if(d<i.middleware.length){let r=i.middleware[d++];await r({...n,next:a})}else await m()};await a()}else await m();for(let d of i.afterHooks)await d(n);return o}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return v.removeAllListeners("SIGINT"),v.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class 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 E.env)return E.env.FORCE_COLOR!=="0";if("NO_COLOR"in E.env||E.env.TERM==="dumb")return!1;if(E.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"),ft=g("\x1B[7m","\x1B[27m"),pt=g("\x1B[8m","\x1B[28m"),gt=g("\x1B[9m","\x1B[29m"),bt=g("\x1B[41m","\x1B[49m"),yt=g("\x1B[42m","\x1B[49m"),$t=g("\x1B[43m","\x1B[49m"),vt=g("\x1B[44m","\x1B[49m"),wt=g("\x1B[45m","\x1B[49m"),xt=g("\x1B[46m","\x1B[49m"),Ct=g("\x1B[47m","\x1B[49m"),St=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:ft,hidden:pt,strikethrough:gt,bgRed:bt,bgGreen:yt,bgYellow:$t,bgBlue:vt,bgMagenta:wt,bgCyan:xt,bgWhite:Ct,isColorSupported:St},It=Ot,Et=["up","down","left","right","space","enter","cancel"],Kt={actions:new Set(Et),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};var Yt=kt.platform.startsWith("win"),Qt=Symbol("clapp:cancel");var _t=Ge();var p=(e,t)=>_t?e:t,Jt=p("\u25C6","*"),Xt=p("\u25A0","x"),Zt=p("\u25B2","x"),ei=p("\u25C7","o"),ti=p("\u250C","T"),qt=p("\u2502","|"),ii=p("\u2514","\u2014"),si=p("\u25CF",">"),ri=p("\u25CB"," "),ni=p("\u25FB","[\u2022]"),ai=p("\u25FC","[+]"),oi=p("\u25FB","[ ]"),li=p("\u25AA","\u2022"),ci=p("\u2500","-"),ui=p("\u256E","+"),di=p("\u251C","+"),mi=p("\u256F","+"),hi=p("\u25CF","\u2022"),fi=p("\u25C6","*"),pi=p("\u25B2","!"),gi=p("\u25A0","x");var bi={light:p("\u2500","-"),heavy:p("\u2501","="),block:p("\u2588","#")};function Mt(){return`${It.gray(qt)} `}var yi=Mt();class Ve{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let e=Me.homedir(),t=Y.join(e,".config","clapp");this.configPath=Y.join(t,"telemetry.json")}async isEnabled(){if(S.env.DO_NOT_TRACK==="1"||S.env.DO_NOT_TRACK==="true")return!1;if(S.env.NO_TELEMETRY==="1"||S.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:S.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:S.env.DO_NOT_TRACK==="1"||S.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 G.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=Y.dirname(this.configPath);await G.mkdir(t,{recursive:!0}),await G.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 ge="0.3.8";var u=new pe("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 de(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 C({tables:i});console.log(`import { defineModel } from 'bun-query-builder'
33
33
 
34
34
  ${s.map((n)=>n.source).join(`
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 Ee(e,t,i)});u.command("ping","Test database connectivity (uses environment variables)").example("query-builder ping").action(async()=>{await we()});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 ve(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 $e(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 ce(e,t)});u.command("migrate <dir>","Generate SQL migrations from models").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--apply","Execute the generated SQL against the database").option("--full","Force full migration SQL instead of incremental diff").option("--from-db","Diff the models against the live database instead of the model snapshot").option("--strict","Fail when the migrated schema does not match the models").example("query-builder migrate ./app/Models --dialect postgres").example("query-builder migrate ./app/Models --from-db --strict").action(async(e,t)=>{try{await w(e,{dialect:t.dialect,state:t.state,apply:t.apply,full:t.full,fromDb:t.fromDb}),await R(void 0,{strict:t.strict,auditDrift:t.strict?"always":!0})}catch(i){console.error("-- Migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("explain <sql>","Explain a query").example('query-builder explain "SELECT * FROM users WHERE active = true"').action(async(e)=>{await le(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 U(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 V({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 A(e,{dialect:t.dialect,state:t.state}),console.log("-- Generating fresh migrations..."),await w(e,{dialect:t.dialect,state:t.state,full:t.full}),console.log("-- Executing migrations..."),await R()}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 A(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 H(e.class,{verbose:e.verbose});else await N({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 H(e.class,{verbose:e.verbose});else await N({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 Se(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 De({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 fe(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 W(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 q()}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 Te()}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 be({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 ye(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 L()}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 oe()}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 F({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 K({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 I()}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 re()}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 j(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 ue(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 ee()}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 te()}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 ne({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 Z({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 Q(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 xe(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 ie(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 se(e,t,{format:i.format,truncate:i.truncate})}catch(s){console.error("-- Import failed:",s);let n=await import("process");n.default.exitCode=1}});u.command("dump","Dump database to SQL file").option("--tables <tables>","Comma-separated list of tables to dump").option("--output <path>","Output file path").example("query-builder dump").example("query-builder dump --tables users,posts").example("query-builder dump --output backup.sql").action(async(e)=>{try{await ae({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(ge)});u.version(ge);u.help();u.parse();
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 Ee(e,t,i)});u.command("ping","Test database connectivity (uses environment variables)").example("query-builder ping").action(async()=>{await we()});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 ve(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 $e(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 ce(e,t)});u.command("migrate <dir>","Generate SQL migrations from models").option("--dialect <d>","Dialect (postgres|mysql|sqlite) \u2014 defaults to the configured dialect").option("--state <path>","Path to migration state file (defaults to <dir>/.qb-migrations.<dialect>.json)").option("--apply","Execute the generated SQL against the database").option("--full","Force full migration SQL instead of incremental diff").option("--from-db","Diff the models against the live database instead of the model snapshot").option("--strict","Fail when the migrated schema does not match the models").example("query-builder migrate ./app/Models --dialect postgres").example("query-builder migrate ./app/Models --from-db --strict").action(async(e,t)=>{try{await w(e,{dialect:t.dialect,state:t.state,apply:t.apply,full:t.full,fromDb:t.fromDb}),await R(void 0,{strict:t.strict,auditDrift:t.strict?"always":!0})}catch(i){console.error("-- Migration failed:",i);let s=await import("process");s.default.exitCode=1}});u.command("explain <sql>","Explain a query").example('query-builder explain "SELECT * FROM users WHERE active = true"').action(async(e)=>{await le(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 U(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 V({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 A(e,{dialect:t.dialect,state:t.state}),console.log("-- Generating fresh migrations..."),await w(e,{dialect:t.dialect,state:t.state,full:t.full}),console.log("-- Executing migrations..."),await R()}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 A(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 H(e.class,{verbose:e.verbose});else await M({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 H(e.class,{verbose:e.verbose});else await M({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 Se(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 De({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 fe(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 W(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 q()}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 Te()}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 be({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 ye(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 L()}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 oe()}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 F({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 K({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 I()}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 re()}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 j(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 ue(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 ee()}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 te()}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 ne({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 Z({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 Q(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 xe(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 ie(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 se(e,t,{format:i.format,truncate:i.truncate})}catch(s){console.error("-- Import failed:",s);let n=await import("process");n.default.exitCode=1}});u.command("dump","Dump database to SQL file").option("--tables <tables>","Comma-separated list of tables to dump").option("--output <path>","Output file path").example("query-builder dump").example("query-builder dump --tables users,posts").example("query-builder dump --output backup.sql").action(async(e)=>{try{await ae({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(ge)});u.version(ge);u.help();u.parse();
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{n,e,P,t,B,Ke,st,r,T,m}from"./chunk-bpwg9p8b.js";import{i,Re,Ae}from"./chunk-b5fh1hw4.js";import{M,Pe,Be,O}from"./chunk-vmptnnff.js";import{u}from"./chunk-7dxm19yj.js";var Ur=import.meta.require;async function Z(s={}){let a=s.iterations||1000,l=s.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${a}`),console.log(`-- Operations: ${l.join(", ")}`),console.log();let c=i();console.log("-- Setting up test table...");try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await r.unsafe(`
2
+ import{n,e,P,t,B,Ke,st,r,T,m}from"./chunk-bpwg9p8b.js";import{i,Re,Ae}from"./chunk-vyqr0w2z.js";import{N,Pe,Be,O}from"./chunk-rzfnhh9f.js";import{u}from"./chunk-9wck98bv.js";var Ur=import.meta.require;async function Z(s={}){let a=s.iterations||1000,l=s.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${a}`),console.log(`-- Operations: ${l.join(", ")}`),console.log();let c=i();console.log("-- Setting up test table...");try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await r.unsafe(`
3
3
  CREATE TABLE bench_users (
4
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
5
5
  name TEXT NOT NULL,
@@ -274,7 +274,7 @@ ${x};`:`${x};`}addColumn(s,a){let l=this.getColumnType(a),c=[this.quoteIdentifie
274
274
  );`}tableKindSuffix(s){switch(s){case"rowstore":return" ROWSTORE";case"reference":return" REFERENCE";default:return""}}addForeignKey(){return""}createIndex(s,a,l){if(a.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on SingleStore. Index '${a.name}' on table '${s}' uses WHERE clause: ${a.where}`);return super.createIndex(s,a,l)}}class ge extends o{sharded;constructor(s=!0){super();this.sharded=s}getAutoIncrementClause(s){return this.sharded?"":super.getAutoIncrementClause(s)}renderColumn(s){if(!this.sharded||!s.references)return super.renderColumn(s);let{references:a,...l}=s;return super.renderColumn(l)}foreignKeyClauses(s){return this.sharded?[]:super.foreignKeyClauses(s)}createTable(s){return super.createTable(s)}addForeignKey(...s){return this.sharded?"":super.addForeignKey(...s)}createMigrationsTable(){if(!this.sharded)return super.createMigrationsTable();return`CREATE TABLE IF NOT EXISTS migrations (
275
275
  migration VARCHAR(255) NOT NULL PRIMARY KEY,
276
276
  executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
277
- )`}}class pe{quoteIdentifier(s){return`"${s.replace(/"/g,'""')}"`}getColumnType(s){if(s.name.endsWith("_id")&&M(s.type))return"INTEGER";if(s.type==="enum"){if(s.enumValues&&s.enumValues.length>0){let a=s.enumValues.map((l)=>`'${l.replace(/'/g,"''")}'`).join(", ");return`TEXT CHECK (${this.quoteIdentifier(s.name)} IN (${a}))`}return"TEXT"}return Pe(s.type)}getPrimaryKeyType(s){return this.getColumnType(s)}getAutoIncrementClause(s){if(s.isPrimaryKey&&(s.type==="integer"||s.type==="bigint"))return"AUTOINCREMENT";return""}getDefaultValue(s){if(!s.hasDefault||s.defaultValue===void 0)return"";let a=s.defaultValue;if(typeof a==="string"){if(a.toUpperCase()==="UTC_TIMESTAMP")return"default CURRENT_TIMESTAMP";if(["CURRENT_TIMESTAMP","CURRENT_DATE","CURRENT_TIME","NOW()","NULL","TRUE","FALSE"].includes(a.toUpperCase()))return`default ${a.toUpperCase()}`;return`default '${a.replace(/'/g,"''")}'`}else if(typeof a==="number"||typeof a==="bigint")return`default ${a}`;else if(typeof a==="boolean")return`default ${a?1:0}`;else if(a instanceof Date)return`default '${a.toISOString()}'`;return""}createEnumType(s,a){return""}createTable(s){let a=s.columns.map((l)=>this.renderColumn(l)).join(`,
277
+ )`}}class pe{quoteIdentifier(s){return`"${s.replace(/"/g,'""')}"`}getColumnType(s){if(s.name.endsWith("_id")&&N(s.type))return"INTEGER";if(s.type==="enum"){if(s.enumValues&&s.enumValues.length>0){let a=s.enumValues.map((l)=>`'${l.replace(/'/g,"''")}'`).join(", ");return`TEXT CHECK (${this.quoteIdentifier(s.name)} IN (${a}))`}return"TEXT"}return Pe(s.type)}getPrimaryKeyType(s){return this.getColumnType(s)}getAutoIncrementClause(s){if(s.isPrimaryKey&&(s.type==="integer"||s.type==="bigint"))return"AUTOINCREMENT";return""}getDefaultValue(s){if(!s.hasDefault||s.defaultValue===void 0)return"";let a=s.defaultValue;if(typeof a==="string"){if(a.toUpperCase()==="UTC_TIMESTAMP")return"default CURRENT_TIMESTAMP";if(["CURRENT_TIMESTAMP","CURRENT_DATE","CURRENT_TIME","NOW()","NULL","TRUE","FALSE"].includes(a.toUpperCase()))return`default ${a.toUpperCase()}`;return`default '${a.replace(/'/g,"''")}'`}else if(typeof a==="number"||typeof a==="bigint")return`default ${a}`;else if(typeof a==="boolean")return`default ${a?1:0}`;else if(a instanceof Date)return`default '${a.toISOString()}'`;return""}createEnumType(s,a){return""}createTable(s){let a=s.columns.map((l)=>this.renderColumn(l)).join(`,
278
278
  `);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(s.table)} (
279
279
  ${a}
280
280
  );`}createIndex(s,a){let l=a.type==="unique"?"UNIQUE ":"",c=Pt(s,a.name),f=a.columns.map((p)=>this.quoteIdentifier(p)).join(", "),b=a.where?` WHERE ${a.where}`:"";return`CREATE ${l}INDEX IF NOT EXISTS ${this.quoteIdentifier(c)} ON ${this.quoteIdentifier(s)} (${f})${b};`}addForeignKey(s,a,l,c,f,b){return""}addColumn(s,a){let l=this.getColumnType(a),c=[this.quoteIdentifier(a.name),l];if(!a.isNullable&&!a.isPrimaryKey)c.push("not null");let f=this.getDefaultValue(a);if(f)c.push(f);return c.push(...this.referencesClause(a)),`ALTER TABLE ${this.quoteIdentifier(s)} ADD COLUMN ${c.join(" ")};`}modifyColumn(s,a){return`-- SQLite does not support ALTER COLUMN; a table rebuild is required to change ${this.quoteIdentifier(s)}.${this.quoteIdentifier(a.name)}`}renameColumn(s,a,l){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME COLUMN ${this.quoteIdentifier(a)} TO ${this.quoteIdentifier(l)};`}renameTable(s,a){return`ALTER TABLE ${this.quoteIdentifier(s)} RENAME TO ${this.quoteIdentifier(a)};`}rebuildTable(s){let{target:a,tempName:l,columnSource:c}=s,f=(D)=>this.quoteIdentifier(D),b=a.columns.map((D)=>this.renderColumn(D)).join(`,
@@ -304,7 +304,7 @@ ${x};`:`${x};`}addColumn(s,a){let l=this.getColumnType(a),c=[this.quoteIdentifie
304
304
  `);for(let E of f)try{let x=hr(E,"utf8").trim();if(!x){if(a.verbose)console.log(`\u2298 ${E}: empty file`);continue}if(a.verbose)console.log(`\uD83D\uDCC4 ${E}`),console.log(` Query: ${x.substring(0,60)}${x.length>60?"...":""}`);let D=await r`EXPLAIN ${r.unsafe(x)}`;if(l.push({file:E,query:x,plan:Array.isArray(D)?D:[D]}),a.verbose&&!a.json){if(console.log(" Plan:"),Array.isArray(D))for(let _ of D)if(typeof _==="string")console.log(` ${_}`);else if(_["QUERY PLAN"])console.log(` ${_["QUERY PLAN"]}`);else if(_.plan)console.log(` ${JSON.stringify(_.plan)}`);else console.log(` ${JSON.stringify(_)}`);console.log()}}catch(x){if(l.push({file:E,query:hr(E,"utf8").trim(),plan:[],error:x.message}),a.verbose)console.log(` \u2717 Error: ${x.message}
305
305
  `)}let b=l.filter((E)=>!E.error).length,p=l.filter((E)=>E.error).length;if(a.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: ${b} successful, ${p} failed`);if(a.json)console.log(JSON.stringify(l,null,2));return l}catch(c){throw console.error("Error explaining queries:",c.message),c}}import{writeFileSync as Ui}from"fs";import{join as Fi}from"path";import Vi from"process";async function V(s={}){let a=s.dir||Fi(Vi.cwd(),"app/Models"),l=s.format||"mermaid";try{let c=await d({modelsDir:a});if(!c||Object.keys(c).length===0)return console.error("No models found"),"";let f="";if(l==="mermaid")f=ji(c);else if(l==="dot")f=Yi(c);else return console.error(`Unsupported format: ${l}`),"";if(s.output)Ui(s.output,f,"utf8"),console.log(`\u2713 Diagram written to: ${s.output}`);else console.log(f);return f}catch(c){throw console.error("Error generating diagram:",c.message),c}}function ji(s){let a=["erDiagram"];for(let[l,c]of Object.entries(s)){let f=c.table||`${l.toLowerCase()}s`,b=c.attributes||{};a.push(` ${f} {`);for(let[p,E]of Object.entries(b)){let x=E.type||"string",D=c.primaryKey===p?"PK":"",_=E.unique?"UK":"",v=[D,_].filter(Boolean).join(","),k=v?` "${v}"`:"";a.push(` ${x} ${p}${k}`)}a.push(" }")}for(let[l,c]of Object.entries(s)){let f=c.table||`${l.toLowerCase()}s`,b=c.relations||{};for(let[p,E]of Object.entries(b)){let{type:x,model:D}=E,_=s[D]?.table||`${D?.toLowerCase()}s`||"unknown",v="";if(x==="hasOne")v="||--||";else if(x==="hasMany")v="||--o{";else if(x==="belongsTo")v="}o--||";else if(x==="belongsToMany"||x==="manyToMany")v="}o--o{";else v="||--||";a.push(` ${f} ${v} ${_} : "${p}"`)}}return a.join(`
306
306
  `)}function Yi(s){let a=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[l,c]of Object.entries(s)){let f=c.table||`${l.toLowerCase()}s`,b=c.attributes||{},p=[];for(let[x,D]of Object.entries(b)){let _=D.type||"string",v=c.primaryKey===x?" (PK)":"",k=D.unique?" (UK)":"";p.push(`${x}: ${_}${v}${k}`)}let E=`${p.join("\\l")}\\l`;a.push(` ${f} [label="{${f}|${E}}"];`)}a.push("");for(let[l,c]of Object.entries(s)){let f=c.table||`${l.toLowerCase()}s`,b=c.relations||{};for(let[p,E]of Object.entries(b)){let{type:x,model:D}=E,_=s[D]?.table||`${D?.toLowerCase()}s`||"unknown",v="";if(x==="hasOne")v="arrowhead=none, arrowtail=normal";else if(x==="hasMany")v="arrowhead=crow, arrowtail=none";else if(x==="belongsTo")v="arrowhead=normal, arrowtail=none";else if(x==="belongsToMany"||x==="manyToMany")v="arrowhead=crow, arrowtail=crow";a.push(` ${f} -> ${_} [label="${p}", ${v}];`)}}return a.push("}"),a.join(`
307
- `)}import{existsSync as dn,mkdirSync as Qi,readdirSync as Wi,writeFileSync as Gi}from"fs";import{dirname as xr,join as Lt}from"path";import tn from"process";function mn(s){let a=s;while(a!==xr(a)){if(dn(Lt(a,"package.json")))return a;a=xr(a)}return tn.cwd()}async function Er(s){if(!dn(s))return console.log(`-- Seeders directory not found: ${s}`),[];let l=Wi(s).sort((f,b)=>f.localeCompare(b)).filter((f)=>(f.endsWith(".ts")||f.endsWith(".js"))&&f!=="index.ts"&&f!=="index.js"),c=[];for(let f of l){let b=Lt(s,f);try{let p=await import(b),E=p.default||p[Object.keys(p)[0]];if(E&&typeof E==="function"){let x=new E;if(x&&typeof x.run==="function")c.push({name:f.replace(/\.(ts|js)$/,""),className:String(E.name||""),instance:x})}}catch(p){console.error(`-- Failed to load seeder ${f}:`,p)}}return c.sort((f,b)=>f.instance.order-b.instance.order),c}async function N(s={}){let a=mn(tn.cwd()),l=s.seedersDir||Lt(a,"database/seeders"),c=s.verbose??!0;if(c)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${l}`);let f=await Er(l);if(f.length===0){console.log("-- No seeders found");return}if(c)console.log(`-- Found ${f.length} seeder(s)`);let b=i();for(let{name:p,instance:E}of f)try{if(c)console.log(`-- Seeding: ${p}`);if(await E.run(b),c)console.log(`-- \u2713 Seeded: ${p}`)}catch(x){throw console.error(`-- \u2717 Failed to seed ${p}:`,x),x}if(c)console.log("-- All seeders completed successfully")}async function H(s,a={}){let l=mn(tn.cwd()),c=Lt(l,"database/seeders"),f=a.verbose??!0;if(f)console.log(`-- Running seeder: ${s}`);let b=await Er(c),p=b.find((x)=>x.className===s)??b.find((x)=>x.name===s);if(!p){let x=b.map((D)=>D.className||D.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${s}. Available: ${x}`),Error(`Seeder not found: ${s}. Available: ${x}`)}let E=i();try{if(await p.instance.run(E),f)console.log(`-- \u2713 Seeder completed: ${s}`)}catch(x){throw console.error(`-- \u2717 Seeder failed: ${s}`,x),x}}async function Se(s){let a=mn(tn.cwd()),l=Lt(a,"database/seeders");if(!dn(l))Qi(l,{recursive:!0}),console.log(`-- Created seeders directory: ${l}`);let f=`${s.replace(/Seeder$/i,"")}Seeder`,b=`${f}.ts`,p=Lt(l,b);if(dn(p))throw console.error(`-- Seeder already exists: ${p}`),Error(`Seeder already exists: ${p}`);let E=`import type { QueryBuilder } from 'bun-query-builder'
307
+ `)}import{existsSync as dn,mkdirSync as Qi,readdirSync as Wi,writeFileSync as Gi}from"fs";import{dirname as xr,join as Lt}from"path";import tn from"process";function mn(s){let a=s;while(a!==xr(a)){if(dn(Lt(a,"package.json")))return a;a=xr(a)}return tn.cwd()}async function Er(s){if(!dn(s))return console.log(`-- Seeders directory not found: ${s}`),[];let l=Wi(s).sort((f,b)=>f.localeCompare(b)).filter((f)=>(f.endsWith(".ts")||f.endsWith(".js"))&&f!=="index.ts"&&f!=="index.js"),c=[];for(let f of l){let b=Lt(s,f);try{let p=await import(b),E=p.default||p[Object.keys(p)[0]];if(E&&typeof E==="function"){let x=new E;if(x&&typeof x.run==="function")c.push({name:f.replace(/\.(ts|js)$/,""),className:String(E.name||""),instance:x})}}catch(p){console.error(`-- Failed to load seeder ${f}:`,p)}}return c.sort((f,b)=>f.instance.order-b.instance.order),c}async function M(s={}){let a=mn(tn.cwd()),l=s.seedersDir||Lt(a,"database/seeders"),c=s.verbose??!0;if(c)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${l}`);let f=await Er(l);if(f.length===0){console.log("-- No seeders found");return}if(c)console.log(`-- Found ${f.length} seeder(s)`);let b=i();for(let{name:p,instance:E}of f)try{if(c)console.log(`-- Seeding: ${p}`);if(await E.run(b),c)console.log(`-- \u2713 Seeded: ${p}`)}catch(x){throw console.error(`-- \u2717 Failed to seed ${p}:`,x),x}if(c)console.log("-- All seeders completed successfully")}async function H(s,a={}){let l=mn(tn.cwd()),c=Lt(l,"database/seeders"),f=a.verbose??!0;if(f)console.log(`-- Running seeder: ${s}`);let b=await Er(c),p=b.find((x)=>x.className===s)??b.find((x)=>x.name===s);if(!p){let x=b.map((D)=>D.className||D.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${s}. Available: ${x}`),Error(`Seeder not found: ${s}. Available: ${x}`)}let E=i();try{if(await p.instance.run(E),f)console.log(`-- \u2713 Seeder completed: ${s}`)}catch(x){throw console.error(`-- \u2717 Seeder failed: ${s}`,x),x}}async function Se(s){let a=mn(tn.cwd()),l=Lt(a,"database/seeders");if(!dn(l))Qi(l,{recursive:!0}),console.log(`-- Created seeders directory: ${l}`);let f=`${s.replace(/Seeder$/i,"")}Seeder`,b=`${f}.ts`,p=Lt(l,b);if(dn(p))throw console.error(`-- Seeder already exists: ${p}`),Error(`Seeder already exists: ${p}`);let E=`import type { QueryBuilder } from 'bun-query-builder'
308
308
  import { Seeder } from 'bun-query-builder'
309
309
  import { faker } from '@stacksjs/ts-faker'
310
310
 
@@ -349,7 +349,7 @@ export default class ${f} extends Seeder {
349
349
  return 100
350
350
  }
351
351
  }
352
- `;Gi(p,E),console.log(`-- \u2713 Created seeder: ${p}`)}async function De(s={}){let a=mn(tn.cwd()),l=s.modelsDir||Lt(a,"app/Models"),c=s.seedersDir||Lt(a,"database/seeders"),f=s.verbose??!0;try{let{resetDatabase:b,generateMigration:p,executeMigration:E}=await import("./chunk-w84w1rrf.js");if(f)console.log("-- Refreshing database...");if(await b(l),f)console.log("-- Running migrations...");if(await p(l,{full:!0}),await E(),f)console.log("-- Running seeders...");if(await N({seedersDir:c,verbose:f}),f)console.log("-- \u2713 Database refreshed successfully")}catch(b){throw console.error("-- \u2717 Database refresh failed:",b),b}}function Ee(s,a,l={}){let c=d({modelsDir:s}),f=ke(c);if(e.debug)e.debug.captureText=!0;let b=i({schema:f}),p=b.selectFrom(a).limit(Number(l.limit||10)).toText?.()??"";return console.log(p||"[query]"),{sql:p,qb:b,schema:f}}async function $e(s,a={}){let l=i(),c=a.params?JSON.parse(a.params):void 0,f=await l.unsafe(s,c);return console.log(JSON.stringify(f)),f}import{existsSync as zi}from"fs";import{dirname as Dr,join as Rr}from"path";import Sr from"process";function Hi(s){let a=s;while(a!==Dr(a)){if(zi(Rr(a,"package.json")))return a;a=Dr(a)}return Sr.cwd()}async function Q(s){if(!s)s=Rr(Hi(Sr.cwd()),"app/Models");let a=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${a}`),console.log();let l=[];try{let c=await d({modelsDir:s}),f=G(c,{dialect:a}),b=i(),p=[];if(a==="sqlite")p=(await b.unsafe(`
352
+ `;Gi(p,E),console.log(`-- \u2713 Created seeder: ${p}`)}async function De(s={}){let a=mn(tn.cwd()),l=s.modelsDir||Lt(a,"app/Models"),c=s.seedersDir||Lt(a,"database/seeders"),f=s.verbose??!0;try{let{resetDatabase:b,generateMigration:p,executeMigration:E}=await import("./chunk-g7qvmctn.js");if(f)console.log("-- Refreshing database...");if(await b(l),f)console.log("-- Running migrations...");if(await p(l,{full:!0}),await E(),f)console.log("-- Running seeders...");if(await M({seedersDir:c,verbose:f}),f)console.log("-- \u2713 Database refreshed successfully")}catch(b){throw console.error("-- \u2717 Database refresh failed:",b),b}}function Ee(s,a,l={}){let c=d({modelsDir:s}),f=ke(c);if(e.debug)e.debug.captureText=!0;let b=i({schema:f}),p=b.selectFrom(a).limit(Number(l.limit||10)).toText?.()??"";return console.log(p||"[query]"),{sql:p,qb:b,schema:f}}async function $e(s,a={}){let l=i(),c=a.params?JSON.parse(a.params):void 0,f=await l.unsafe(s,c);return console.log(JSON.stringify(f)),f}import{existsSync as zi}from"fs";import{dirname as Dr,join as Rr}from"path";import Sr from"process";function Hi(s){let a=s;while(a!==Dr(a)){if(zi(Rr(a,"package.json")))return a;a=Dr(a)}return Sr.cwd()}async function Q(s){if(!s)s=Rr(Hi(Sr.cwd()),"app/Models");let a=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${s}`),console.log(`-- Dialect: ${a}`),console.log();let l=[];try{let c=await d({modelsDir:s}),f=G(c,{dialect:a}),b=i(),p=[];if(a==="sqlite")p=(await b.unsafe(`
353
353
  SELECT name FROM sqlite_master
354
354
  WHERE type = 'table'
355
355
  AND name NOT LIKE 'sqlite_%'
@@ -375,17 +375,17 @@ export default class ${f} extends Seeder {
375
375
  FROM information_schema.columns
376
376
  WHERE table_name = ?
377
377
  AND table_schema = DATABASE()
378
- `,[D.table])).map((z)=>({name:z.column_name,type:z.data_type.toLowerCase()}));let v=_.map((Y)=>Y.name),k=D.columns.map((Y)=>Y.name);for(let Y of D.columns)if(!v.includes(Y.name))l.push({type:"missing_column",severity:"error",table:D.table,column:Y.name,expected:Y.type,message:`Column '${D.table}.${Y.name}' defined in model but not found in database`});for(let Y of _)if(!k.includes(Y.name))l.push({type:"extra_column",severity:"warning",table:D.table,column:Y.name,actual:Y.type,message:`Column '${D.table}.${Y.name}' exists in database but not defined in model`});for(let Y of D.columns){let z=_.find((X)=>X.name===Y.name);if(z){let X=(We)=>We.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),_e=X(Y.type),Fe=X(z.type);if(_e!==Fe)l.push({type:"type_mismatch",severity:"warning",table:D.table,column:Y.name,expected:Y.type,actual:z.type,message:`Column '${D.table}.${Y.name}' type mismatch: expected '${Y.type}', found '${z.type}'`})}}}let x=l.filter((D)=>D.severity==="error").length===0;if(x&&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 D=l.filter((v)=>v.severity==="error"),_=l.filter((v)=>v.severity==="warning");if(D.length>0){console.log(`\u2717 Errors (${D.length}):`);for(let v of D)console.log(` - ${v.message}`);console.log()}if(_.length>0){console.log(`\u26A0 Warnings (${_.length}):`);for(let v of _)console.log(` - ${v.message}`);console.log()}if(!x)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:x,issues:l}}catch(c){throw console.error("-- Schema validation failed:",c),c}}async function xe(s){return Q(s)}async function ve(s={}){let a=Number(s.attempts||10),l=Number(s.delay||100),c=i();try{return await c.waitForReady({attempts:a,delayMs:l}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class S{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(s){this.driver=u(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,a,l){return this.keyConditions.push({attribute:s,operator:a,value:l}),this}wherePartitionKey(s,a){return this.whereKey(s,"=",a)}whereSortKey(s,a){return this.whereKey(s,"=",a)}whereSortKeyBeginsWith(s,a){return this.keyConditions.push({attribute:s,operator:"begins_with",value:a}),this}whereSortKeyBetween(s,a,l){return this.keyConditions.push({attribute:s,operator:"BETWEEN",values:[a,l]}),this}where(s,a,l){return this.filterConditions.push({attribute:s,operator:a,value:l}),this}whereEquals(s,a){return this.where(s,"=",a)}whereLessThan(s,a){return this.where(s,"<",a)}whereLessThanOrEqual(s,a){return this.where(s,"<=",a)}whereGreaterThan(s,a){return this.where(s,">",a)}whereGreaterThanOrEqual(s,a){return this.where(s,">=",a)}whereBetween(s,a,l){return this.filterConditions.push({attribute:s,operator:"BETWEEN",values:[a,l]}),this}whereBeginsWith(s,a){return this.filterConditions.push({attribute:s,operator:"begins_with",value:a}),this}whereContains(s,a){return this.where(s,"contains",a)}whereExists(s){return this.where(s,"attribute_exists")}whereNotExists(s){return this.where(s,"attribute_not_exists")}whereIn(s,a){return this.filterConditions.push({attribute:s,operator:"IN",values:a}),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(),a={TableName:s.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(s.indexName)a.IndexName=s.indexName;let l=0;if(s.keyConditions.length>0){let c=[];for(let f of s.keyConditions){let b=`#key${l}`;if(a.ExpressionAttributeNames[b]=f.attribute,f.operator==="begins_with"){let p=`:keyval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`begins_with(${b}, ${p})`)}else if(f.operator==="BETWEEN"){let p=`:keyval${l}a`,E=`:keyval${l}b`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.values?.[0]}).v,a.ExpressionAttributeValues[E]=this.driver.marshall({v:f.values?.[1]}).v,c.push(`${b} BETWEEN ${p} AND ${E}`)}else{let p=`:keyval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${b} ${f.operator} ${p}`)}l++}a.KeyConditionExpression=c.join(" AND ")}if(s.filterConditions&&s.filterConditions.length>0){let c=[];for(let f of s.filterConditions){let b=`#flt${l}`;if(a.ExpressionAttributeNames[b]=f.attribute,f.operator==="attribute_exists")c.push(`attribute_exists(${b})`);else if(f.operator==="attribute_not_exists")c.push(`attribute_not_exists(${b})`);else if(f.operator==="begins_with"||f.operator==="contains"){let p=`:fltval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${f.operator}(${b}, ${p})`)}else if(f.operator==="BETWEEN"){let p=`:fltval${l}a`,E=`:fltval${l}b`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.values?.[0]}).v,a.ExpressionAttributeValues[E]=this.driver.marshall({v:f.values?.[1]}).v,c.push(`${b} BETWEEN ${p} AND ${E}`)}else if(f.operator==="IN"){let p=(f.values??[]).map((E,x)=>`:fltval${l}_${x}`);f.values?.forEach((E,x)=>{a.ExpressionAttributeValues[`:fltval${l}_${x}`]=this.driver.marshall({v:E}).v}),c.push(`${b} IN (${p.join(", ")})`)}else{let p=`:fltval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${b} ${f.operator} ${p}`)}l++}a.FilterExpression=c.join(" AND ")}if(s.projectionAttributes&&s.projectionAttributes.length>0){let c=[];for(let f of s.projectionAttributes){let b=`#proj${l}`;a.ExpressionAttributeNames[b]=f,c.push(b),l++}a.ProjectionExpression=c.join(", ")}if(s.limit!==void 0)a.Limit=s.limit;if(s.scanIndexForward!==void 0)a.ScanIndexForward=s.scanIndexForward;if(s.exclusiveStartKey)a.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)a.ConsistentRead=s.consistentRead;if(Object.keys(a.ExpressionAttributeNames).length===0)delete a.ExpressionAttributeNames;if(Object.keys(a.ExpressionAttributeValues).length===0)delete a.ExpressionAttributeValues;return a}toScanRequest(){let s=this.buildScanParams(),a={TableName:s.tableName};if(s.indexName)a.IndexName=s.indexName;if(s.filterConditions&&s.filterConditions.length>0){let{expression:l,expressionAttributeNames:c,expressionAttributeValues:f}=this.driver.buildFilterExpression(s.filterConditions);a.FilterExpression=l,a.ExpressionAttributeNames=c,a.ExpressionAttributeValues=f}if(s.projectionAttributes&&s.projectionAttributes.length>0){let{expression:l,expressionAttributeNames:c}=this.driver.buildProjectionExpression(s.projectionAttributes);a.ProjectionExpression=l,a.ExpressionAttributeNames={...a.ExpressionAttributeNames,...c}}if(s.limit!==void 0)a.Limit=s.limit;if(s.exclusiveStartKey)a.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)a.ConsistentRead=s.consistentRead;return a}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(),a=await this.client.query(s);return{items:a.Items?.map((l)=>this.driver.unmarshall(l)),count:a.Count,scannedCount:a.ScannedCount,lastEvaluatedKey:a.LastEvaluatedKey?this.driver.unmarshall(a.LastEvaluatedKey):void 0,consumedCapacity:a.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(),a=await this.client.scan(s);return{items:a.Items?.map((l)=>this.driver.unmarshall(l)),count:a.Count,scannedCount:a.ScannedCount,lastEvaluatedKey:a.LastEvaluatedKey?this.driver.unmarshall(a.LastEvaluatedKey):void 0,consumedCapacity:a.ConsumedCapacity}}async getAll(){let s=[],a;do{if(a)this.startFrom(a);let l=this.keyConditions.length>0?await this.query():await this.scan();if(l.items)s.push(...l.items);a=l.lastEvaluatedKey}while(a);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 g{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(s){this.driver=u(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,a){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[s]=a,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,a){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[s]=a,this}deleteFromSet(s,a){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[s]=a,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:a,expressionAttributeNames:l,expressionAttributeValues:c}=this.driver.buildUpdateExpression(this.updateExpressions);if(a)s.UpdateExpression=a,s.ExpressionAttributeNames=l,s.ExpressionAttributeValues=c;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(),a=await this.client.putItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toUpdateRequest(),a=await this.client.updateItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toDeleteRequest(),a=await this.client.deleteItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toGetRequest(),a=await this.client.getItem(s);if(a.Item)return this.driver.unmarshall(a.Item);return}}function Dn(s){return new S(s)}function En(s){return new g(s)}function $n(s){let a=u(s.config);return{query:()=>new S(s),item:()=>new g(s),driver:a,registerEntity:(l)=>a.registerEntity(l),buildKey:(l,c)=>a.buildPrimaryKey(l,c)}}class gt{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 a of s.entities)this.entities.set(a.name,a)}getEntity(s){return this.entities.get(s)}registerEntity(s){this.entities.set(s.name,s)}buildKey(s,a){let l=this.entities.get(s);if(!l)throw Error(`Entity not found: ${s}`);let c=this.interpolatePattern(l.pkPattern,a),f=this.interpolatePattern(l.skPattern,a);return{pk:c,sk:f}}buildGSIKey(s,a,l){let c=this.entities.get(s);if(!c)throw Error(`Entity not found: ${s}`);let f=c.indexes?.find((E)=>E.name===a);if(!f)throw Error(`GSI not found: ${a} for entity ${s}`);let b=this.interpolatePattern(f.pkPattern,l),p=f.skPattern?this.interpolatePattern(f.skPattern,l):void 0;return{pk:b,sk:p}}createItem(s,a){let{pk:l,sk:c}=this.buildKey(s,a),f=this.entities.get(s),b={[this.pkAttribute]:l,[this.skAttribute]:c,[this.typeAttribute]:s,...a};if(f.indexes)for(let p of f.indexes){let E=this.buildGSIKey(s,p.name,a),x=this.config.indexes?.find((D)=>D.name===p.name);if(x){if(b[x.pkAttribute]=E.pk,x.skAttribute&&E.sk)b[x.skAttribute]=E.sk}}return b}parseEntityType(s){if(s[this.typeAttribute])return s[this.typeAttribute];let a=s[this.pkAttribute];if(!a)return;for(let[l,c]of this.entities){let f=c.pkPattern.split("${")[0];if(a.startsWith(f))return l}return}parseItem(s){let a=this.parseEntityType(s);if(!a)return;let{[this.pkAttribute]:l,[this.skAttribute]:c,[this.typeAttribute]:f,...b}=s;return{type:a,data:b}}getEntityPrefix(s){let a=this.entities.get(s);if(!a)throw Error(`Entity not found: ${s}`);return a.pkPattern.split("${")[0]}generateTableDefinition(){let s=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],a=[];if(this.config.indexes)for(let l of this.config.indexes){if(!s.find((c)=>c.name===l.pkAttribute))s.push({name:l.pkAttribute,type:"S"});if(l.skAttribute&&!s.find((c)=>c.name===l.skAttribute))s.push({name:l.skAttribute,type:"S"});a.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:a.length>0?a:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(s,a){return s.replace(/\$\{(\w+)\}/g,(l,c)=>{if(!(c in a))throw Error(`Missing value for pattern key: ${c}`);return String(a[c])})}}class pt{manager;entityName;options;constructor(s,a,l){this.manager=s,this.entityName=a,this.options=l}async create(s){let a=this.manager.createItem(this.entityName,s),l=new g(this.options).table(this.options.config.tableName).item(a).ifNotExists("pk");if(this.options.client)await l.put();return s}async get(s){let{pk:a,sk:l}=this.manager.buildKey(this.entityName,s),c=new g(this.options).table(this.options.config.tableName).key({pk:a,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");let f=await c.get();if(!f)return;return this.manager.parseItem(f)?.data}async update(s,a){let{pk:l,sk:c}=this.manager.buildKey(this.entityName,s),f=new g(this.options).table(this.options.config.tableName).key({pk:l,sk:c}).setMany(a).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let b=await f.update();if(!b)return;return this.manager.parseItem(b)?.data}async delete(s){let{pk:a,sk:l}=this.manager.buildKey(this.entityName,s),c=new g(this.options).table(this.options.config.tableName).key({pk:a,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");return await c.delete(),!0}query(){return new yt(this.manager,this.entityName,this.options)}async findAll(){let s=this.manager.typeAttribute??"_type",a=new S(this.options).table(this.options.config.tableName).whereEquals(s,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await a.getAll()).map((c)=>this.manager.parseItem(c)).filter((c)=>c!==void 0).map((c)=>c.data)}}class yt{manager;entityName;options;builder;pkValue;skConditions=[];constructor(s,a,l){this.manager=s,this.entityName=a,this.options=l,this.builder=new S(l).table(l.config.tableName)}wherePartitionKey(s){let{pk:a}=this.manager.buildKey(this.entityName,s);this.pkValue=a;let l=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(l,a),this}whereSortKey(s){let{sk:a}=this.manager.buildKey(this.entityName,s),l=this.manager.skAttribute??"sk";return this.builder.whereSortKey(l,a),this}whereSortKeyBeginsWith(s){let a=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(a,s),this}useIndex(s,a){let l=this.manager.buildGSIKey(this.entityName,s,a),c=this.manager.config.indexes?.find((f)=>f.name===s);if(!c)throw Error(`GSI configuration not found: ${s}`);return this.builder.index(s),this.builder.wherePartitionKey(c.pkAttribute,l.pk),this}where(s,a,l){return this.builder.where(s,a,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((a)=>this.manager.parseItem(a)).filter((a)=>a!==void 0).map((a)=>a.data)}async first(){return this.limit(1),(await this.execute())[0]}}function bt(s){return new gt(s)}function Tt(s,a,l){return new pt(s,a,l)}var xn={simpleEntity:(s,a="id")=>({name:s,pkPattern:`${s.toUpperCase()}#\${${a}}`,skPattern:"METADATA",keyFields:[a]}),oneToMany:(s,a,l="id",c="id")=>({parent:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},child:{name:a,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${a.toUpperCase()}#\${${c}}`,keyFields:[l,c]}}),manyToMany:(s,a,l="id",c="relatedId")=>({entity:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},relation:{name:a,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${a.toUpperCase()}#\${${c}}`,keyFields:[l,c],indexes:[{name:"GSI1",pkPattern:`${s.toUpperCase()}#\${${c}}`,skPattern:`${a.toUpperCase()}#\${${l}}`}]}}),hierarchical:(s,a="rootId",l="path")=>({name:s,pkPattern:`ROOT#\${${a}}`,skPattern:`PATH#\${${l}}`,keyFields:[a,l]})};function wt(s,a){let l={};for(let[c,f]of Object.entries(s))if(f)l[c]=f.replace(/\{([^}]+)\}/g,(b,p)=>a[p]!==void 0?String(a[p]):`{${p}}`);return l}async function Qt(s){return{models:new Map}}function vn(s){return s}function kn(s){return s}function Cn(s){return s}function Rn(s){return s}class St{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(s){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...s};let a={region:s.region,endpoint:s.endpoint,credentials:s.credentials,tableName:s.tableName};this.driver=u(a);let l={tableName:s.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=bt(l),this.queryBuilderOptions={config:a}}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 Qt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),a=[];for(let[,l]of s.models)this.registerParsedModel(l),a.push(l);return a}registerModel(s){let a=this.parseWithTooling(s);return this.registerParsedModel(a)}registerParsedModel(s){this.models.set(s.name,s);let a=this.toSingleTableEntity(s);this.singleTableManager.registerEntity(a);let l=this.toEntityMapping(s);return this.driver.registerEntity(l),s}registerModels(s){return s.map((a)=>this.registerModel(a))}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 Tt(this.singleTableManager,s,this.queryBuilderOptions)}query(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new S(this.queryBuilderOptions).table(this.config.tableName).entity(s)}item(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new g(this.queryBuilderOptions).table(this.config.tableName)}buildKey(s,a){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let c=wt(l.keyPatterns,a);return{pk:c.pk,sk:c.sk}}createItem(s,a){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let c=wt(l.keyPatterns,a),{pk:f,sk:b}=c,p={[this.config.pkAttribute]:f,[this.config.skAttribute]:b,[this.config.entityTypeAttribute]:l.name,...a};if(l.hasTimestamps){let E=new Date().toISOString();if(!p.createdAt)p.createdAt=E;p.updatedAt=E}if(l.hasVersioning){if(!p._v)p._v=1}return p}parseItem(s){let a=s[this.config.entityTypeAttribute];if(!a)return;let{[this.config.pkAttribute]:l,[this.config.skAttribute]:c,[this.config.entityTypeAttribute]:f,...b}=s;return{type:a,data:b}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(s){let a=this.models.get(s);if(!a)throw Error(`Model not found: ${s}`);return a.accessPatterns}parseWithTooling(s){let a=s.name.toUpperCase(),l=s.primaryKey??"id",c=this.config.keyDelimiter,f=this.parseAttributes(s),b=this.parseRelationships(s,l),p={pk:`${a}${c}{${l}}`,sk:`${a}${c}{${l}}`,...this.deriveGSIKeyPatterns(a,l,c,b)},E=this.deriveAccessPatterns(s.name,a,l,b);return{name:s.name,entityType:a,primaryKey:l,attributes:f,relationships:b,keyPatterns:p,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 a=[];if(a.push({name:s.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),s.attributes)for(let[l,c]of Object.entries(s.attributes))a.push({name:l,fillable:c.fillable??!0,required:c.required??!1,nullable:c.nullable??!0,unique:c.unique??!1,hidden:c.hidden??!1,defaultValue:c.default,cast:c.cast,dynamoDbType:this.inferDynamoDBType(c)});if(s.traits?.useTimestamps)a.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)a.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return a}inferDynamoDBType(s){if(s.cast){let a=s.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(a))return"N";if(["boolean","bool"].includes(a))return"BOOL";if(["array","list"].includes(a))return"L";if(["object","json","map"].includes(a))return"M"}if(s.validation?.rule){let a=String(s.validation.rule);if(a.includes("integer")||a.includes("numeric")||a.includes("number"))return"N";if(a.includes("boolean"))return"BOOL";if(a.includes("array"))return"L";if(a.includes("object"))return"M"}return"S"}parseRelationships(s,a){let l=[];if(s.hasOne)for(let c of s.hasOne)l.push({type:"hasOne",relatedModel:c,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,requiresGsi:!0});if(s.hasMany)for(let c of s.hasMany)l.push({type:"hasMany",relatedModel:c,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,requiresGsi:!1});if(s.belongsTo)for(let c of s.belongsTo)l.push({type:"belongsTo",relatedModel:c,foreignKey:`${c.toLowerCase()}Id`,localKey:a,requiresGsi:!0});if(s.belongsToMany){let c=Array.isArray(s.belongsToMany)?s.belongsToMany:Object.values(s.belongsToMany);for(let f of c){let b=typeof f==="string"?f:f?.model;if(!b)continue;let p=[s.name,b].sort();l.push({type:"belongsToMany",relatedModel:b,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,pivotEntity:p.join(""),requiresGsi:!0})}}return l}deriveGSIKeyPatterns(s,a,l,c){let f={},b=1;for(let p of c)if(p.requiresGsi&&b<=5)f[`gsi${b}pk`]=`${p.relatedModel.toUpperCase()}${l}{${p.foreignKey}}`,f[`gsi${b}sk`]=`${s}${l}{${a}}`,p.gsiIndex=b,b++;return f}deriveAccessPatterns(s,a,l,c){let f=[];f.push({name:`Get ${s} by ID`,description:`Retrieve a single ${s} by its primary key`,entityType:a,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${a}#123`,exampleSk:`${a}#123`,efficient:!0}),f.push({name:`List all ${s}s`,description:`Scan all ${s} entities`,entityType:a,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:a,efficient:!1});for(let b of c){if(b.type==="hasMany")f.push({name:`Get ${b.relatedModel}s for ${s}`,description:`Query ${b.relatedModel}s related to a ${s}`,entityType:a,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${a}#123`,exampleSk:`${b.relatedModel.toUpperCase()}#`,efficient:!0});if(b.gsiIndex){let p=`GSI${b.gsiIndex}`;f.push({name:`Get ${s}s by ${b.relatedModel}`,description:`Query ${s}s by their related ${b.relatedModel}`,entityType:a,operation:"query",index:p,keyCondition:`gsi${b.gsiIndex}pk = :pk`,examplePk:`${b.relatedModel.toUpperCase()}#123`,efficient:!0})}}return f}toSingleTableEntity(s){let a=this.extractKeyFields(s.keyPatterns.pk);return{name:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk,keyFields:a,indexes:this.extractGSIPatterns(s.keyPatterns)}}extractKeyFields(s){let a=s.match(/\{([^}]+)\}/g);if(!a)return[];return a.map((l)=>l.slice(1,-1))}extractGSIPatterns(s){let a=[];for(let l=1;l<=5;l++){let c=`gsi${l}pk`,f=`gsi${l}sk`;if(s[c])a.push({name:`GSI${l}`,pkPattern:s[c],skPattern:s[f]})}return a.length>0?a:void 0}toEntityMapping(s){return{entityType:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk}}buildGSIConfig(){let s=this.config.gsiConfig??{},a=[];if(s.gsi1pk)a.push({name:"GSI1",pkAttribute:s.gsi1pk,skAttribute:s.gsi1sk});if(s.gsi2pk)a.push({name:"GSI2",pkAttribute:s.gsi2pk,skAttribute:s.gsi2sk});if(s.gsi3pk)a.push({name:"GSI3",pkAttribute:s.gsi3pk,skAttribute:s.gsi3sk});return a}}function An(s){return new St(s)}function Nn(s){return s.accessPatterns}function Mn(s,a="#"){let l=s.name.toUpperCase(),c=s.primaryKey??"id";return{name:s.name,pkPattern:`${l}${a}\${${c}}`,skPattern:`${l}${a}\${${c}}`}}function ke(s){let a={};for(let l of Object.keys(s)){let c=s[l],f=c.definition??c.getDefinition?.()??c,b=T(f),p=f.attributes??{},E={};for(let x of Object.keys(p))E[x]=void 0;a[b]={columns:E,primaryKey:f.primaryKey??"id"}}return a}import{readdirSync as Xi}from"fs";import{basename as Mr,extname as Ar,isAbsolute as Ji,join as wr}from"path";import Zi from"process";var es=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function ts(s){let a=Ar(s);if(!es.has(a))return!1;let l=Mr(s,a);if(l.startsWith("_")||l==="index")return!1;return!l.endsWith(".d")}function ns(s){if(!s||typeof s!=="object")return!1;let a=s;return typeof a.name==="string"||typeof a.table==="string"}function Cr(s){let a=[],l=Xi(s,{withFileTypes:!0}).sort((c,f)=>c.name.localeCompare(f.name));for(let c of l){let f=wr(s,c.name);if(c.isDirectory()){a.push(...Cr(f));continue}if(ts(c.name))a.push(f)}return a}async function d(s){let a=s.cwd??Zi.cwd(),l=Ji(s.modelsDir)?s.modelsDir:wr(a,s.modelsDir),c={};for(let f of Cr(l)){let b=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,p=await import(`${f}${b}`),E=p.default??p,x=E.definition??E.getDefinition?.()??E;if(!ns(x))continue;let D=x.name??Mr(f,Ar(f));c[D]={...x,name:D}}return c}function Dt(s){let a={},l={},c={},f={},b={},p={};for(let E of Object.keys(s)){let x=s[E],D=x.definition??x.getDefinition?.()??x,_=T(D);a[E]=_,l[_]=E,c[_]=D.primaryKey??"id";let v=[];for(let[_e,Fe]of Object.entries(D.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Fe?.type??"")))v.push(_e);let k=D.traits??{};if(k.useTimestamps??k.timestampable)v.push("created_at","updated_at");if(v.length>0)p[_]=[...new Set(v)];let Y=(_e)=>{if(!_e)return{};let Fe={};if(Array.isArray(_e)){for(let We of _e){let tt=Be(We);if(tt)Fe[tt.model]=tt.model}return Fe}if(typeof _e==="object"){for(let[We,tt]of Object.entries(_e)){let Ze=Be(tt);if(Ze)Fe[We]=Ze.model}return Fe}return{}},z=(_e)=>{if(!_e)return{};if(Array.isArray(_e)){let Fe={};for(let We of _e)if(typeof We==="string")Fe[We]=We;else if(We&&typeof We==="object"&&typeof We.model==="string")Fe[We.model]=We;return Fe}return _e},X=(_e)=>{if(!_e)return{};return _e};if(f[_]={hasOne:Y(D.hasOne),hasMany:Y(D.hasMany),belongsTo:Y(D.belongsTo),belongsToMany:z(D.belongsToMany),hasOneThrough:X(D.hasOneThrough),hasManyThrough:X(D.hasManyThrough),morphOne:Y(D.morphOne),morphMany:Y(D.morphMany),morphTo:D.morphTo,morphToMany:Y(D.morphToMany),morphedByMany:Y(D.morphedByMany)},D.scopes&&typeof D.scopes==="object"){b[_]={};for(let _e of Object.keys(D.scopes)){let Fe=D.scopes[_e];if(typeof Fe==="function")b[_][_e]=Fe}}}return{modelToTable:a,tableToModel:l,primaryKeys:c,relations:f,scopes:b,models:s,temporalColumns:p}}import{existsSync as Qn,mkdirSync as rs,readdirSync as is,readFileSync as ss,writeFileSync as as}from"fs";import{dirname as Nr,join as gn}from"path";import Or from"process";function At(s){if(e.verbose)console.log(s)}function Kt(s){return s.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Un(s){return m(e.relations?.singularizeStrategy)(s)}var pn=0,rn=0,fn=0,Vn=!0,yn=[],sn=null;function Et(){return[...yn]}function os(s){let a=s;while(a!==Nr(a)){if(Qn(gn(a,"package.json")))return a;a=Nr(a)}return Or.cwd()}function ls(){let s=os(Or.cwd()),a=Ot(s,e.migrationDir);if(!Qn(a))rs(a,{recursive:!0}),At(`-- Created SQL directory: ${a}`);return a}var $t="-- qb:generated";function xt(s){return s.trimStart().startsWith($t)}function vt(s){return s.split(`
378
+ `,[D.table])).map((z)=>({name:z.column_name,type:z.data_type.toLowerCase()}));let v=_.map((Y)=>Y.name),k=D.columns.map((Y)=>Y.name);for(let Y of D.columns)if(!v.includes(Y.name))l.push({type:"missing_column",severity:"error",table:D.table,column:Y.name,expected:Y.type,message:`Column '${D.table}.${Y.name}' defined in model but not found in database`});for(let Y of _)if(!k.includes(Y.name))l.push({type:"extra_column",severity:"warning",table:D.table,column:Y.name,actual:Y.type,message:`Column '${D.table}.${Y.name}' exists in database but not defined in model`});for(let Y of D.columns){let z=_.find((X)=>X.name===Y.name);if(z){let X=(We)=>We.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),_e=X(Y.type),Fe=X(z.type);if(_e!==Fe)l.push({type:"type_mismatch",severity:"warning",table:D.table,column:Y.name,expected:Y.type,actual:z.type,message:`Column '${D.table}.${Y.name}' type mismatch: expected '${Y.type}', found '${z.type}'`})}}}let x=l.filter((D)=>D.severity==="error").length===0;if(x&&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 D=l.filter((v)=>v.severity==="error"),_=l.filter((v)=>v.severity==="warning");if(D.length>0){console.log(`\u2717 Errors (${D.length}):`);for(let v of D)console.log(` - ${v.message}`);console.log()}if(_.length>0){console.log(`\u26A0 Warnings (${_.length}):`);for(let v of _)console.log(` - ${v.message}`);console.log()}if(!x)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:x,issues:l}}catch(c){throw console.error("-- Schema validation failed:",c),c}}async function xe(s){return Q(s)}async function ve(s={}){let a=Number(s.attempts||10),l=Number(s.delay||100),c=i();try{return await c.waitForReady({attempts:a,delayMs:l}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class S{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(s){this.driver=u(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,a,l){return this.keyConditions.push({attribute:s,operator:a,value:l}),this}wherePartitionKey(s,a){return this.whereKey(s,"=",a)}whereSortKey(s,a){return this.whereKey(s,"=",a)}whereSortKeyBeginsWith(s,a){return this.keyConditions.push({attribute:s,operator:"begins_with",value:a}),this}whereSortKeyBetween(s,a,l){return this.keyConditions.push({attribute:s,operator:"BETWEEN",values:[a,l]}),this}where(s,a,l){return this.filterConditions.push({attribute:s,operator:a,value:l}),this}whereEquals(s,a){return this.where(s,"=",a)}whereLessThan(s,a){return this.where(s,"<",a)}whereLessThanOrEqual(s,a){return this.where(s,"<=",a)}whereGreaterThan(s,a){return this.where(s,">",a)}whereGreaterThanOrEqual(s,a){return this.where(s,">=",a)}whereBetween(s,a,l){return this.filterConditions.push({attribute:s,operator:"BETWEEN",values:[a,l]}),this}whereBeginsWith(s,a){return this.filterConditions.push({attribute:s,operator:"begins_with",value:a}),this}whereContains(s,a){return this.where(s,"contains",a)}whereExists(s){return this.where(s,"attribute_exists")}whereNotExists(s){return this.where(s,"attribute_not_exists")}whereIn(s,a){return this.filterConditions.push({attribute:s,operator:"IN",values:a}),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(),a={TableName:s.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(s.indexName)a.IndexName=s.indexName;let l=0;if(s.keyConditions.length>0){let c=[];for(let f of s.keyConditions){let b=`#key${l}`;if(a.ExpressionAttributeNames[b]=f.attribute,f.operator==="begins_with"){let p=`:keyval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`begins_with(${b}, ${p})`)}else if(f.operator==="BETWEEN"){let p=`:keyval${l}a`,E=`:keyval${l}b`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.values?.[0]}).v,a.ExpressionAttributeValues[E]=this.driver.marshall({v:f.values?.[1]}).v,c.push(`${b} BETWEEN ${p} AND ${E}`)}else{let p=`:keyval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${b} ${f.operator} ${p}`)}l++}a.KeyConditionExpression=c.join(" AND ")}if(s.filterConditions&&s.filterConditions.length>0){let c=[];for(let f of s.filterConditions){let b=`#flt${l}`;if(a.ExpressionAttributeNames[b]=f.attribute,f.operator==="attribute_exists")c.push(`attribute_exists(${b})`);else if(f.operator==="attribute_not_exists")c.push(`attribute_not_exists(${b})`);else if(f.operator==="begins_with"||f.operator==="contains"){let p=`:fltval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${f.operator}(${b}, ${p})`)}else if(f.operator==="BETWEEN"){let p=`:fltval${l}a`,E=`:fltval${l}b`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.values?.[0]}).v,a.ExpressionAttributeValues[E]=this.driver.marshall({v:f.values?.[1]}).v,c.push(`${b} BETWEEN ${p} AND ${E}`)}else if(f.operator==="IN"){let p=(f.values??[]).map((E,x)=>`:fltval${l}_${x}`);f.values?.forEach((E,x)=>{a.ExpressionAttributeValues[`:fltval${l}_${x}`]=this.driver.marshall({v:E}).v}),c.push(`${b} IN (${p.join(", ")})`)}else{let p=`:fltval${l}`;a.ExpressionAttributeValues[p]=this.driver.marshall({v:f.value}).v,c.push(`${b} ${f.operator} ${p}`)}l++}a.FilterExpression=c.join(" AND ")}if(s.projectionAttributes&&s.projectionAttributes.length>0){let c=[];for(let f of s.projectionAttributes){let b=`#proj${l}`;a.ExpressionAttributeNames[b]=f,c.push(b),l++}a.ProjectionExpression=c.join(", ")}if(s.limit!==void 0)a.Limit=s.limit;if(s.scanIndexForward!==void 0)a.ScanIndexForward=s.scanIndexForward;if(s.exclusiveStartKey)a.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)a.ConsistentRead=s.consistentRead;if(Object.keys(a.ExpressionAttributeNames).length===0)delete a.ExpressionAttributeNames;if(Object.keys(a.ExpressionAttributeValues).length===0)delete a.ExpressionAttributeValues;return a}toScanRequest(){let s=this.buildScanParams(),a={TableName:s.tableName};if(s.indexName)a.IndexName=s.indexName;if(s.filterConditions&&s.filterConditions.length>0){let{expression:l,expressionAttributeNames:c,expressionAttributeValues:f}=this.driver.buildFilterExpression(s.filterConditions);a.FilterExpression=l,a.ExpressionAttributeNames=c,a.ExpressionAttributeValues=f}if(s.projectionAttributes&&s.projectionAttributes.length>0){let{expression:l,expressionAttributeNames:c}=this.driver.buildProjectionExpression(s.projectionAttributes);a.ProjectionExpression=l,a.ExpressionAttributeNames={...a.ExpressionAttributeNames,...c}}if(s.limit!==void 0)a.Limit=s.limit;if(s.exclusiveStartKey)a.ExclusiveStartKey=this.driver.marshall(s.exclusiveStartKey);if(s.consistentRead)a.ConsistentRead=s.consistentRead;return a}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(),a=await this.client.query(s);return{items:a.Items?.map((l)=>this.driver.unmarshall(l)),count:a.Count,scannedCount:a.ScannedCount,lastEvaluatedKey:a.LastEvaluatedKey?this.driver.unmarshall(a.LastEvaluatedKey):void 0,consumedCapacity:a.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(),a=await this.client.scan(s);return{items:a.Items?.map((l)=>this.driver.unmarshall(l)),count:a.Count,scannedCount:a.ScannedCount,lastEvaluatedKey:a.LastEvaluatedKey?this.driver.unmarshall(a.LastEvaluatedKey):void 0,consumedCapacity:a.ConsumedCapacity}}async getAll(){let s=[],a;do{if(a)this.startFrom(a);let l=this.keyConditions.length>0?await this.query():await this.scan();if(l.items)s.push(...l.items);a=l.lastEvaluatedKey}while(a);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 g{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(s){this.driver=u(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,a){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[s]=a,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,a){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[s]=a,this}deleteFromSet(s,a){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[s]=a,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:a,expressionAttributeNames:l,expressionAttributeValues:c}=this.driver.buildUpdateExpression(this.updateExpressions);if(a)s.UpdateExpression=a,s.ExpressionAttributeNames=l,s.ExpressionAttributeValues=c;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(),a=await this.client.putItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toUpdateRequest(),a=await this.client.updateItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toDeleteRequest(),a=await this.client.deleteItem(s);if(a.Attributes)return this.driver.unmarshall(a.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let s=this.toGetRequest(),a=await this.client.getItem(s);if(a.Item)return this.driver.unmarshall(a.Item);return}}function Dn(s){return new S(s)}function En(s){return new g(s)}function $n(s){let a=u(s.config);return{query:()=>new S(s),item:()=>new g(s),driver:a,registerEntity:(l)=>a.registerEntity(l),buildKey:(l,c)=>a.buildPrimaryKey(l,c)}}class gt{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 a of s.entities)this.entities.set(a.name,a)}getEntity(s){return this.entities.get(s)}registerEntity(s){this.entities.set(s.name,s)}buildKey(s,a){let l=this.entities.get(s);if(!l)throw Error(`Entity not found: ${s}`);let c=this.interpolatePattern(l.pkPattern,a),f=this.interpolatePattern(l.skPattern,a);return{pk:c,sk:f}}buildGSIKey(s,a,l){let c=this.entities.get(s);if(!c)throw Error(`Entity not found: ${s}`);let f=c.indexes?.find((E)=>E.name===a);if(!f)throw Error(`GSI not found: ${a} for entity ${s}`);let b=this.interpolatePattern(f.pkPattern,l),p=f.skPattern?this.interpolatePattern(f.skPattern,l):void 0;return{pk:b,sk:p}}createItem(s,a){let{pk:l,sk:c}=this.buildKey(s,a),f=this.entities.get(s),b={[this.pkAttribute]:l,[this.skAttribute]:c,[this.typeAttribute]:s,...a};if(f.indexes)for(let p of f.indexes){let E=this.buildGSIKey(s,p.name,a),x=this.config.indexes?.find((D)=>D.name===p.name);if(x){if(b[x.pkAttribute]=E.pk,x.skAttribute&&E.sk)b[x.skAttribute]=E.sk}}return b}parseEntityType(s){if(s[this.typeAttribute])return s[this.typeAttribute];let a=s[this.pkAttribute];if(!a)return;for(let[l,c]of this.entities){let f=c.pkPattern.split("${")[0];if(a.startsWith(f))return l}return}parseItem(s){let a=this.parseEntityType(s);if(!a)return;let{[this.pkAttribute]:l,[this.skAttribute]:c,[this.typeAttribute]:f,...b}=s;return{type:a,data:b}}getEntityPrefix(s){let a=this.entities.get(s);if(!a)throw Error(`Entity not found: ${s}`);return a.pkPattern.split("${")[0]}generateTableDefinition(){let s=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],a=[];if(this.config.indexes)for(let l of this.config.indexes){if(!s.find((c)=>c.name===l.pkAttribute))s.push({name:l.pkAttribute,type:"S"});if(l.skAttribute&&!s.find((c)=>c.name===l.skAttribute))s.push({name:l.skAttribute,type:"S"});a.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:a.length>0?a:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(s,a){return s.replace(/\$\{(\w+)\}/g,(l,c)=>{if(!(c in a))throw Error(`Missing value for pattern key: ${c}`);return String(a[c])})}}class pt{manager;entityName;options;constructor(s,a,l){this.manager=s,this.entityName=a,this.options=l}async create(s){let a=this.manager.createItem(this.entityName,s),l=new g(this.options).table(this.options.config.tableName).item(a).ifNotExists("pk");if(this.options.client)await l.put();return s}async get(s){let{pk:a,sk:l}=this.manager.buildKey(this.entityName,s),c=new g(this.options).table(this.options.config.tableName).key({pk:a,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");let f=await c.get();if(!f)return;return this.manager.parseItem(f)?.data}async update(s,a){let{pk:l,sk:c}=this.manager.buildKey(this.entityName,s),f=new g(this.options).table(this.options.config.tableName).key({pk:l,sk:c}).setMany(a).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let b=await f.update();if(!b)return;return this.manager.parseItem(b)?.data}async delete(s){let{pk:a,sk:l}=this.manager.buildKey(this.entityName,s),c=new g(this.options).table(this.options.config.tableName).key({pk:a,sk:l});if(!this.options.client)throw Error("DynamoDB client not provided");return await c.delete(),!0}query(){return new yt(this.manager,this.entityName,this.options)}async findAll(){let s=this.manager.typeAttribute??"_type",a=new S(this.options).table(this.options.config.tableName).whereEquals(s,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await a.getAll()).map((c)=>this.manager.parseItem(c)).filter((c)=>c!==void 0).map((c)=>c.data)}}class yt{manager;entityName;options;builder;pkValue;skConditions=[];constructor(s,a,l){this.manager=s,this.entityName=a,this.options=l,this.builder=new S(l).table(l.config.tableName)}wherePartitionKey(s){let{pk:a}=this.manager.buildKey(this.entityName,s);this.pkValue=a;let l=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(l,a),this}whereSortKey(s){let{sk:a}=this.manager.buildKey(this.entityName,s),l=this.manager.skAttribute??"sk";return this.builder.whereSortKey(l,a),this}whereSortKeyBeginsWith(s){let a=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(a,s),this}useIndex(s,a){let l=this.manager.buildGSIKey(this.entityName,s,a),c=this.manager.config.indexes?.find((f)=>f.name===s);if(!c)throw Error(`GSI configuration not found: ${s}`);return this.builder.index(s),this.builder.wherePartitionKey(c.pkAttribute,l.pk),this}where(s,a,l){return this.builder.where(s,a,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((a)=>this.manager.parseItem(a)).filter((a)=>a!==void 0).map((a)=>a.data)}async first(){return this.limit(1),(await this.execute())[0]}}function bt(s){return new gt(s)}function Tt(s,a,l){return new pt(s,a,l)}var xn={simpleEntity:(s,a="id")=>({name:s,pkPattern:`${s.toUpperCase()}#\${${a}}`,skPattern:"METADATA",keyFields:[a]}),oneToMany:(s,a,l="id",c="id")=>({parent:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},child:{name:a,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${a.toUpperCase()}#\${${c}}`,keyFields:[l,c]}}),manyToMany:(s,a,l="id",c="relatedId")=>({entity:{name:s,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:"METADATA",keyFields:[l]},relation:{name:a,pkPattern:`${s.toUpperCase()}#\${${l}}`,skPattern:`${a.toUpperCase()}#\${${c}}`,keyFields:[l,c],indexes:[{name:"GSI1",pkPattern:`${s.toUpperCase()}#\${${c}}`,skPattern:`${a.toUpperCase()}#\${${l}}`}]}}),hierarchical:(s,a="rootId",l="path")=>({name:s,pkPattern:`ROOT#\${${a}}`,skPattern:`PATH#\${${l}}`,keyFields:[a,l]})};function wt(s,a){let l={};for(let[c,f]of Object.entries(s))if(f)l[c]=f.replace(/\{([^}]+)\}/g,(b,p)=>a[p]!==void 0?String(a[p]):`{${p}}`);return l}async function Qt(s){return{models:new Map}}function vn(s){return s}function kn(s){return s}function Cn(s){return s}function Rn(s){return s}class St{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(s){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...s};let a={region:s.region,endpoint:s.endpoint,credentials:s.credentials,tableName:s.tableName};this.driver=u(a);let l={tableName:s.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=bt(l),this.queryBuilderOptions={config:a}}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 Qt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),a=[];for(let[,l]of s.models)this.registerParsedModel(l),a.push(l);return a}registerModel(s){let a=this.parseWithTooling(s);return this.registerParsedModel(a)}registerParsedModel(s){this.models.set(s.name,s);let a=this.toSingleTableEntity(s);this.singleTableManager.registerEntity(a);let l=this.toEntityMapping(s);return this.driver.registerEntity(l),s}registerModels(s){return s.map((a)=>this.registerModel(a))}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 Tt(this.singleTableManager,s,this.queryBuilderOptions)}query(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new S(this.queryBuilderOptions).table(this.config.tableName).entity(s)}item(s){if(!this.models.get(s))throw Error(`Model not found: ${s}`);return new g(this.queryBuilderOptions).table(this.config.tableName)}buildKey(s,a){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let c=wt(l.keyPatterns,a);return{pk:c.pk,sk:c.sk}}createItem(s,a){let l=this.models.get(s);if(!l)throw Error(`Model not found: ${s}`);let c=wt(l.keyPatterns,a),{pk:f,sk:b}=c,p={[this.config.pkAttribute]:f,[this.config.skAttribute]:b,[this.config.entityTypeAttribute]:l.name,...a};if(l.hasTimestamps){let E=new Date().toISOString();if(!p.createdAt)p.createdAt=E;p.updatedAt=E}if(l.hasVersioning){if(!p._v)p._v=1}return p}parseItem(s){let a=s[this.config.entityTypeAttribute];if(!a)return;let{[this.config.pkAttribute]:l,[this.config.skAttribute]:c,[this.config.entityTypeAttribute]:f,...b}=s;return{type:a,data:b}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(s){let a=this.models.get(s);if(!a)throw Error(`Model not found: ${s}`);return a.accessPatterns}parseWithTooling(s){let a=s.name.toUpperCase(),l=s.primaryKey??"id",c=this.config.keyDelimiter,f=this.parseAttributes(s),b=this.parseRelationships(s,l),p={pk:`${a}${c}{${l}}`,sk:`${a}${c}{${l}}`,...this.deriveGSIKeyPatterns(a,l,c,b)},E=this.deriveAccessPatterns(s.name,a,l,b);return{name:s.name,entityType:a,primaryKey:l,attributes:f,relationships:b,keyPatterns:p,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 a=[];if(a.push({name:s.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),s.attributes)for(let[l,c]of Object.entries(s.attributes))a.push({name:l,fillable:c.fillable??!0,required:c.required??!1,nullable:c.nullable??!0,unique:c.unique??!1,hidden:c.hidden??!1,defaultValue:c.default,cast:c.cast,dynamoDbType:this.inferDynamoDBType(c)});if(s.traits?.useTimestamps)a.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)a.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return a}inferDynamoDBType(s){if(s.cast){let a=s.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(a))return"N";if(["boolean","bool"].includes(a))return"BOOL";if(["array","list"].includes(a))return"L";if(["object","json","map"].includes(a))return"M"}if(s.validation?.rule){let a=String(s.validation.rule);if(a.includes("integer")||a.includes("numeric")||a.includes("number"))return"N";if(a.includes("boolean"))return"BOOL";if(a.includes("array"))return"L";if(a.includes("object"))return"M"}return"S"}parseRelationships(s,a){let l=[];if(s.hasOne)for(let c of s.hasOne)l.push({type:"hasOne",relatedModel:c,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,requiresGsi:!0});if(s.hasMany)for(let c of s.hasMany)l.push({type:"hasMany",relatedModel:c,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,requiresGsi:!1});if(s.belongsTo)for(let c of s.belongsTo)l.push({type:"belongsTo",relatedModel:c,foreignKey:`${c.toLowerCase()}Id`,localKey:a,requiresGsi:!0});if(s.belongsToMany){let c=Array.isArray(s.belongsToMany)?s.belongsToMany:Object.values(s.belongsToMany);for(let f of c){let b=typeof f==="string"?f:f?.model;if(!b)continue;let p=[s.name,b].sort();l.push({type:"belongsToMany",relatedModel:b,foreignKey:`${s.name.toLowerCase()}Id`,localKey:a,pivotEntity:p.join(""),requiresGsi:!0})}}return l}deriveGSIKeyPatterns(s,a,l,c){let f={},b=1;for(let p of c)if(p.requiresGsi&&b<=5)f[`gsi${b}pk`]=`${p.relatedModel.toUpperCase()}${l}{${p.foreignKey}}`,f[`gsi${b}sk`]=`${s}${l}{${a}}`,p.gsiIndex=b,b++;return f}deriveAccessPatterns(s,a,l,c){let f=[];f.push({name:`Get ${s} by ID`,description:`Retrieve a single ${s} by its primary key`,entityType:a,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${a}#123`,exampleSk:`${a}#123`,efficient:!0}),f.push({name:`List all ${s}s`,description:`Scan all ${s} entities`,entityType:a,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:a,efficient:!1});for(let b of c){if(b.type==="hasMany")f.push({name:`Get ${b.relatedModel}s for ${s}`,description:`Query ${b.relatedModel}s related to a ${s}`,entityType:a,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${a}#123`,exampleSk:`${b.relatedModel.toUpperCase()}#`,efficient:!0});if(b.gsiIndex){let p=`GSI${b.gsiIndex}`;f.push({name:`Get ${s}s by ${b.relatedModel}`,description:`Query ${s}s by their related ${b.relatedModel}`,entityType:a,operation:"query",index:p,keyCondition:`gsi${b.gsiIndex}pk = :pk`,examplePk:`${b.relatedModel.toUpperCase()}#123`,efficient:!0})}}return f}toSingleTableEntity(s){let a=this.extractKeyFields(s.keyPatterns.pk);return{name:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk,keyFields:a,indexes:this.extractGSIPatterns(s.keyPatterns)}}extractKeyFields(s){let a=s.match(/\{([^}]+)\}/g);if(!a)return[];return a.map((l)=>l.slice(1,-1))}extractGSIPatterns(s){let a=[];for(let l=1;l<=5;l++){let c=`gsi${l}pk`,f=`gsi${l}sk`;if(s[c])a.push({name:`GSI${l}`,pkPattern:s[c],skPattern:s[f]})}return a.length>0?a:void 0}toEntityMapping(s){return{entityType:s.name,pkPattern:s.keyPatterns.pk,skPattern:s.keyPatterns.sk}}buildGSIConfig(){let s=this.config.gsiConfig??{},a=[];if(s.gsi1pk)a.push({name:"GSI1",pkAttribute:s.gsi1pk,skAttribute:s.gsi1sk});if(s.gsi2pk)a.push({name:"GSI2",pkAttribute:s.gsi2pk,skAttribute:s.gsi2sk});if(s.gsi3pk)a.push({name:"GSI3",pkAttribute:s.gsi3pk,skAttribute:s.gsi3sk});return a}}function An(s){return new St(s)}function Mn(s){return s.accessPatterns}function Nn(s,a="#"){let l=s.name.toUpperCase(),c=s.primaryKey??"id";return{name:s.name,pkPattern:`${l}${a}\${${c}}`,skPattern:`${l}${a}\${${c}}`}}function ke(s){let a={};for(let l of Object.keys(s)){let c=s[l],f=c.definition??c.getDefinition?.()??c,b=T(f),p=f.attributes??{},E={};for(let x of Object.keys(p))E[x]=void 0;a[b]={columns:E,primaryKey:f.primaryKey??"id"}}return a}import{readdirSync as Xi}from"fs";import{basename as Mr,extname as Ar,isAbsolute as Ji,join as wr}from"path";import Zi from"process";var es=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function ts(s){let a=Ar(s);if(!es.has(a))return!1;let l=Mr(s,a);if(l.startsWith("_")||l==="index")return!1;return!l.endsWith(".d")}function ns(s){if(!s||typeof s!=="object")return!1;let a=s;return typeof a.name==="string"||typeof a.table==="string"}function Cr(s){let a=[],l=Xi(s,{withFileTypes:!0}).sort((c,f)=>c.name.localeCompare(f.name));for(let c of l){let f=wr(s,c.name);if(c.isDirectory()){a.push(...Cr(f));continue}if(ts(c.name))a.push(f)}return a}async function d(s){let a=s.cwd??Zi.cwd(),l=Ji(s.modelsDir)?s.modelsDir:wr(a,s.modelsDir),c={};for(let f of Cr(l)){let b=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,p=await import(`${f}${b}`),E=p.default??p,x=E.definition??E.getDefinition?.()??E;if(!ns(x))continue;let D=x.name??Mr(f,Ar(f));c[D]={...x,name:D}}return c}function Dt(s){let a={},l={},c={},f={},b={},p={};for(let E of Object.keys(s)){let x=s[E],D=x.definition??x.getDefinition?.()??x,_=T(D);a[E]=_,l[_]=E,c[_]=D.primaryKey??"id";let v=[];for(let[_e,Fe]of Object.entries(D.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Fe?.type??"")))v.push(_e);let k=D.traits??{};if(k.useTimestamps??k.timestampable)v.push("created_at","updated_at");if(v.length>0)p[_]=[...new Set(v)];let Y=(_e)=>{if(!_e)return{};let Fe={};if(Array.isArray(_e)){for(let We of _e){let tt=Be(We);if(tt)Fe[tt.model]=tt.model}return Fe}if(typeof _e==="object"){for(let[We,tt]of Object.entries(_e)){let Ze=Be(tt);if(Ze)Fe[We]=Ze.model}return Fe}return{}},z=(_e)=>{if(!_e)return{};if(Array.isArray(_e)){let Fe={};for(let We of _e)if(typeof We==="string")Fe[We]=We;else if(We&&typeof We==="object"&&typeof We.model==="string")Fe[We.model]=We;return Fe}return _e},X=(_e)=>{if(!_e)return{};return _e};if(f[_]={hasOne:Y(D.hasOne),hasMany:Y(D.hasMany),belongsTo:Y(D.belongsTo),belongsToMany:z(D.belongsToMany),hasOneThrough:X(D.hasOneThrough),hasManyThrough:X(D.hasManyThrough),morphOne:Y(D.morphOne),morphMany:Y(D.morphMany),morphTo:D.morphTo,morphToMany:Y(D.morphToMany),morphedByMany:Y(D.morphedByMany)},D.scopes&&typeof D.scopes==="object"){b[_]={};for(let _e of Object.keys(D.scopes)){let Fe=D.scopes[_e];if(typeof Fe==="function")b[_][_e]=Fe}}}return{modelToTable:a,tableToModel:l,primaryKeys:c,relations:f,scopes:b,models:s,temporalColumns:p}}import{existsSync as Qn,mkdirSync as rs,readdirSync as is,readFileSync as ss,writeFileSync as as}from"fs";import{dirname as Nr,join as gn}from"path";import Or from"process";function At(s){if(e.verbose)console.log(s)}function Kt(s){return s.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Un(s){return m(e.relations?.singularizeStrategy)(s)}var pn=0,rn=0,fn=0,Vn=!0,yn=[],sn=null;function Et(){return[...yn]}function os(s){let a=s;while(a!==Nr(a)){if(Qn(gn(a,"package.json")))return a;a=Nr(a)}return Or.cwd()}function ls(){let s=os(Or.cwd()),a=Ot(s,e.migrationDir);if(!Qn(a))rs(a,{recursive:!0}),At(`-- Created SQL directory: ${a}`);return a}var $t="-- qb:generated";function xt(s){return s.trimStart().startsWith($t)}function vt(s){return s.split(`
379
379
  `).filter((a)=>!a.trimStart().startsWith("--")).join(`
380
380
  `).replace(/\s+/g," ").trim().replace(/;+$/,"")}function us(s){let a=new Set,l;try{l=is(s).filter((c)=>c.endsWith(".sql"))}catch{return a}for(let c of l)try{a.add(vt(ss(gn(s,c),"utf8")))}catch{}return a}function cs(s,a){if(!s)return!1;let l=ls();if(sn===null)sn=us(l);let c=vt(s);if(c.length>0&&sn.has(c))return At(`-- Migration already in the corpus, not writing it again: ${a}`),!1;pn++;let f=Vn?String(pn).padStart(10,"0"):String(Math.floor(Date.now()/1000)+pn),b=`${f}-${a}.sql`;if(!Vn){let E=Number(f);while(Qn(gn(l,b)))E+=1,f=String(E),b=`${f}-${a}.sql`}let p=gn(l,b);return as(p,`${$t}
381
381
  ${s}`),At(`-- Migration file created: ${b}`),rn++,yn.push(b),sn?.add(c),!0}function Gt(s,a){return s==="integer"&&a==="bigint"||s==="string"&&a==="text"}function $r(s){if(s.endsWith("_id"))return"bigint";if(s.endsWith("_at"))return"datetime";if(s.startsWith("is_")||s.startsWith("has_"))return"boolean";return}function _r(s){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean"||typeof s==="bigint"||s instanceof Date)return s;return}function ds(s){if(s&&typeof s==="object"&&"name"in s){let a=s;if(a.name==="enum"||a.getRules&&Array.isArray(a.getRules())){if(a.enumValues&&Array.isArray(a.enumValues))return a.enumValues.map((l)=>String(l));if(a._values&&Array.isArray(a._values))return a._values.map((l)=>String(l));if(a.values&&Array.isArray(a.values))return a.values.map((l)=>String(l))}}if(s&&typeof s==="object"){let a=s,l=a.allowedValues||a.enumValues||a._values||a.values;if(Array.isArray(l)&&l.length>0)return l.map((c)=>String(c))}return}function jn(s){if(!s?.rules||!Array.isArray(s.rules))return;for(let a of s.rules)if(a?.name==="max"||a?.name==="maxLength"){if(a.params&&typeof a.params.max==="number")return a.params.max;if(Array.isArray(a.args)&&typeof a.args[0]==="number")return a.args[0];if(typeof a.value==="number")return a.value;if(typeof a.expectedValue==="number")return a.expectedValue}return}var Yn=767;function qr(s){if(typeof s!=="string")return;let a=s.trim().toLowerCase().match(/^(?:decimal|numeric)\s*\(\s*(\d+)\s*(?:,\s*(\d+)\s*)?\)$/);if(!a)return;return{precision:Number(a[1]),scale:a[2]===void 0?void 0:Number(a[2])}}function ms(s){let a=s;if(!a||typeof a!=="object")return{};let l=(b)=>typeof b==="number"?b:void 0,c=l(a.precision),f=l(a.scale);if(Array.isArray(a.rules)){for(let b of a.rules)if(b?.name==="precision")c??=l(b.params?.precision)??l(b.args?.[0]),f??=l(b.params?.scale)??l(b.args?.[1]);else if(b?.name==="scale")f??=l(b.params?.scale)??l(b.args?.[0])}return{precision:c,scale:f}}function fs(s,a){let l=qr(a?.type)??{},c=ms(a?.validation?.rule),f=a?.precision??l.precision??c.precision,b=a?.scale??l.scale??c.scale;if(f!==void 0&&(!Number.isInteger(f)||f<1||f>1000))throw Error(`[migrations] Attribute "${s}": decimal precision must be an integer from 1 to 1000, got ${f}`);if(b!==void 0&&(!Number.isInteger(b)||b<0))throw Error(`[migrations] Attribute "${s}": decimal scale must be a non-negative integer, got ${b}`);if(f!==void 0&&b!==void 0&&b>f)throw Error(`[migrations] Attribute "${s}": decimal scale (${b}) cannot exceed precision (${f})`);return{precision:f,scale:b}}function ps(s){if(!s||typeof s!=="object")return;let a=s;if(a.name)switch(String(a.name).toLowerCase()){case"string":{let c=jn(a);return c&&c>Yn?"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(a.type){let l=String(a.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 Pr(s){if(typeof s!=="string")return;if(qr(s))return"decimal";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 G(s,a){let l=Dt(s),c=[];for(let E of Object.keys(s)){let x=s[E],D=T(x),_=x.primaryKey??"id",v=x.autoIncrement!==!1,k=x.attributes??{},Y=[],z=[];if(!k[_])Y.push({name:Kt(_),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let X=new Map,_e=O(x.belongsTo).length>0,Fe=new Set(Object.keys(k).map((Ne)=>Kt(Ne))),We=new Set;for(let Ne of Fe){if(!Ne.endsWith("_type"))continue;let Le=`${Ne.slice(0,-5)}_id`;if(Fe.has(Le))We.add(Le)}for(let Ne of O(x.belongsTo)){let Le=Ne.foreignKey??`${Kt(Ne.model)}_id`,et=l.modelToTable[Ne.model];if(et)X.set(Le,{table:et,onDelete:Ne.onDelete})}for(let Ne of Object.keys(k)){let Le=k[Ne],et=Kt(Ne),Mt=Boolean(Le.validation?.rule?.isRequired),Rt=Ne===_?!1:Le.nullable??!(Le.required??Mt),Xe,Ie,Oe=Ne===_;if(Xe=Pr(Le.type)??ps(Le.validation?.rule),Xe==="string"){let rt=jn(Le.validation?.rule);if(rt&&rt>Yn)Xe="text"}if(!Xe||Xe==="enum"){let rt=ds(Le.validation?.rule);if(rt&&rt.length>0)Xe="enum",Ie=rt}if(!Xe)Xe=$r(et);if(!Xe){let rt=_r(Le.default);if(typeof rt==="string")Xe=rt.length>255?"text":"string";else if(typeof rt==="number")Xe=Number.isInteger(rt)?"integer":"float";else if(typeof rt==="boolean")Xe="boolean";else if(typeof rt==="bigint")Xe="bigint";else if(rt instanceof Date)Xe="datetime"}if(!Xe)Xe=Oe?"bigint":"string";let Ye=fs(Ne,Le),at=Ye.precision!==void 0||Ye.scale!==void 0;if(at&&Xe!=="decimal"&&Pr(Le.type)===void 0)Xe="decimal";let Nt=Xe==="string"?jn(Le.validation?.rule):void 0,qt={name:et,type:Xe,isPrimaryKey:Oe,isUnique:Boolean(Le.unique),isNullable:Rt,hasDefault:typeof Le.default<"u",defaultValue:_r(Le.default),enumValues:Ie,maxLength:typeof Nt==="number"&&Nt>0&&Nt<=Yn?Nt:void 0};if(Xe==="decimal"&&at){if(Ye.precision!==void 0)qt.precision=Ye.precision;if(Ye.scale!==void 0)qt.scale=Ye.scale}if(et.endsWith("_id")&&Le.foreignKey!==!1&&!We.has(et))if(typeof Le.foreignKey==="object"&&Le.foreignKey!==null){let rt=Le.foreignKey;if(qt.references={table:rt.table,column:rt.column??"id",onDelete:rt.onDelete,onUpdate:rt.onUpdate},rt.nullable!==void 0)qt.isNullable=rt.nullable}else{let rt=X.get(et),Ut=et.replace(/_id$/,"").replace(/(^|_)([a-z])/g,(ot,on,Br)=>Br.toUpperCase()),Wt=rt?.table??(_e?void 0:l.modelToTable[Ut]);if(Wt){let ot=l.primaryKeys[Wt]??"id";qt.references={table:Wt,column:ot,onDelete:rt?.onDelete}}}Y.push(qt)}let tt=O(x.belongsTo);for(let Ne of tt){let Le=Ne.foreignKey??`${Kt(Ne.model)}_id`;if(Y.some((Rt)=>Rt.name===Le))continue;let et=l.modelToTable[Ne.model],Mt=et?l.primaryKeys[et]??"id":void 0;Y.push({name:Le,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:et&&Mt&&!We.has(Le)?{table:et,column:Mt,onDelete:Ne.onDelete}:void 0})}let Ze=x.traits;if(Ze?.useTimestamps??Ze?.timestampable??!1){if(!Y.some((Ne)=>Ne.name==="created_at"))Y.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:y});if(!Y.some((Ne)=>Ne.name==="updated_at"))Y.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ze?.useSoftDeletes??Ze?.softDeletable??!1){if(!Y.some((Ne)=>Ne.name==="deleted_at"))Y.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ze?.useUuid??!1){if(!Y.some((Ne)=>Ne.name==="uuid"))Y.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let Ne of x.indexes??[])z.push({name:Ne.name,columns:Ne.columns.map((Le)=>Kt(Le)),type:Ne.unique?"unique":"index",where:Ne.where});for(let Ne of Y)if(Ne.isUnique&&!Ne.isPrimaryKey)z.push({name:`${D}_${Ne.name}_unique`,columns:[Ne.name],type:"unique"});let it=Array.isArray(x.shardKey)?x.shardKey.map(Kt):void 0,lt=Array.isArray(x.sortKey)?x.sortKey.map(Kt):void 0,je=x.tableKind;c.push({table:D,columns:Y,indexes:z,shardKey:it,sortKey:lt,tableKind:je})}let f=new Set(c.map((E)=>E.table));function b(E){if(!f.has(E.table))f.add(E.table),c.push(E)}for(let E of Object.keys(s)){let x=s[E],D=x?.traits??{},_=T(x),v=Un(_);if(D.likeable){let k=typeof D.likeable==="object"?D.likeable:{},Y=k.table||`${_}_likes`,z=k.foreignKey||`${v}_id`;b({table:Y,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:z,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:_,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:y},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${Y}_user_target_unique`,columns:["user_id",z],type:"unique"}]})}if(D.taggable)b({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:y},{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"}]}),b({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:y},{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(D.categorizable)b({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:y},{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"}]}),b({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:y},{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 x=s[E],D=x?.belongsToMany;if(!D||typeof D!=="object"||Array.isArray(D))continue;let _=T(x),v=Un(_);for(let[k,Y]of Object.entries(D)){let z=Y;if(!z||typeof z!=="object")continue;if(z.through)continue;let X=z.pivot;if(!X||!X.columns&&!X.timestamps&&!X.uniques)continue;let _e=z.model,We=s[_e]?.table||`${String(_e).toLowerCase()}s`,tt=Un(We),Ze=z.table||[v,tt].sort().join("_"),Me=z.foreignKey||`${v}_id`,nt=z.relatedKey||`${tt}_id`,_t=new Set([Me,nt,...Object.keys(X.columns??{})]),it=new Set;for(let et of _t){if(!et.endsWith("_type"))continue;let Mt=`${et.slice(0,-5)}_id`;if(_t.has(Mt))it.add(Mt)}let lt=(et,Mt)=>it.has(et)?void 0:{table:Mt,column:"id"},je=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:Me,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:lt(Me,_)},{name:nt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:lt(nt,We)}];if(X.columns)for(let[et,Mt]of Object.entries(X.columns)){let Rt=Mt,Xe=$r(et)??"string";je.push({name:et,type:Xe,isPrimaryKey:!1,isUnique:!1,isNullable:Rt?.nullable??!1,hasDefault:Rt?.default!==void 0,defaultValue:Rt?.default})}if(X.timestamps)je.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:y}),je.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let Ne=[],Le=X.uniques&&X.uniques.length>0?X.uniques:[[Me,nt]];for(let et=0;et<Le.length;et++){let Mt=Le[et];Ne.push({name:`${Ze}_${Mt.join("_")}_unique${et>0?`_${et}`:""}`,columns:[...Mt],type:"unique"})}b({table:Ze,columns:je,indexes:Ne})}}let p=new Map(c.map((E)=>[E.table,E]));for(let E of c)for(let x of E.columns){if(!x.references)continue;let D=p.get(x.references.table)?.columns.find((_)=>_.name===x.references.column);if(!D||x.type===D.type)continue;x.type=D.type,x.maxLength=D.maxLength,x.precision=D.precision,x.scale=D.scale,x.enumValues=D.enumValues,x.enumTypeName=D.enumTypeName}return{dialect:a.dialect,vitessSharded:a.vitessSharded,tables:c}}function J(s,a){pn=0,rn=0,fn=0,yn=[],sn=null,Vn=a.deterministic;for(let c of s)cs(c.sql,c.name);if(rn+fn===0)At("-- Nothing to migrate");else{let c=[];if(rn>0)c.push(`${rn} created`);if(fn>0)c.push(`${fn} updated`);At(`-- Migration files: ${c.join(", ")}`)}return[...yn]}function Ce(s){let a=[],l=[],c=h(s.dialect,{vitessSharded:s.vitessSharded}),{tables:f,deferredForeignKeys:b}=Lr(s.tables,s.dialect);for(let[p,E]of f.entries()){let x={...E,columns:E.columns.map((k)=>b.has(Bt(E.table,k.name))?{...k,references:void 0}:k)},D=[],_=new Set;for(let k of x.columns)if(k.type==="enum"&&k.enumValues&&k.enumValues.length>0){let Y=`${x.table}_${k.name}_type`;if(k.enumTypeName=Y,!_.has(Y)){let z=c.createEnumType(Y,k.enumValues);if(z)D.push(z);_.add(Y)}}let v=c.createTable(x);D.push(v);for(let k of x.indexes)D.push(c.createIndex(x.table,k,x.columns));if(p===f.length-1)for(let k of f)for(let Y of k.columns){if(!Y.references||!b.has(Bt(k.table,Y.name)))continue;let z=c.addForeignKey(k.table,Y.name,Y.references.table,Y.references.column,Y.references.onDelete,Y.references.onUpdate);if(z)D.push(z)}a.push(...D),l.push({name:`create-${x.table}-table`,sql:D.join(`
382
382
 
383
383
  `)})}return{statements:a,files:l}}function Jt(s,a={}){let{statements:l,files:c}=Ce(s);if(a.write===!0&&!a.dryRun)J(c,{deterministic:!0});return l}function Bt(s,a){return`${s}\x00${a}`}function Lr(s,a){if(a==="sqlite"||s.length<2)return{tables:s,deferredForeignKeys:new Set};let l=new Map(s.map((x)=>[x.table,x])),c=new Map;for(let x of s)c.set(x.table,new Set(x.columns.map((D)=>D.references?.table).filter((D)=>Boolean(D&&D!==x.table&&l.has(D)))));let f=[],b=new Set;while(f.length<s.length){let x=s.find((D)=>!b.has(D.table)&&[...c.get(D.table)??[]].every((_)=>b.has(_)));if(!x)break;f.push(x),b.add(x.table)}let p=new Set(s.filter((x)=>!b.has(x.table)).map((x)=>x.table)),E=new Set;for(let x of s){if(!p.has(x.table))continue;for(let D of x.columns)if(D.references&&p.has(D.references.table)&&D.references.table!==x.table)E.add(Bt(x.table,D.name))}return f.push(...s.filter((x)=>p.has(x.table))),{tables:f,deferredForeignKeys:E}}function On(s){return Jt(s).join(`
384
384
  `)}function Pn(s,a){return Xt(s,a).join(`
385
- `)}function kt(s){let a=Ur("crypto");function l(f){if(f==null||typeof f!=="object"||f instanceof Date)return f;if(Array.isArray(f))return f.map((p)=>l(p));let b={};for(let p of Object.keys(f).sort())b[p]=l(f[p]);return b}let c=JSON.stringify(l(s));return a.createHash("sha256").update(c).digest("hex")}function vr(s){let a={};for(let l of s)a[l.table]=l;return a}function nn(s){let a={};for(let l of s)a[l.name]=l;return a}function Ge(s,a){if(a==="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(a==="mysql"||a==="vitess"||a==="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 Ft(s).toUpperCase();case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return s.type}if(s.type==="string")return`varchar(${s.maxLength??255})`;if(s.type==="decimal")return Ft(s);return s.type}function zt(s,a){if(s.type==="string"&&a.type==="string")return(a.maxLength??255)<(s.maxLength??255);if(s.type==="decimal"&&a.type==="decimal"){let l=un(s),c=un(a);return c.scale<l.scale||c.precision-c.scale<l.precision-l.scale}if(s.type==="enum"&&a.type==="enum")return(s.enumValues??[]).some((l)=>!(a.enumValues??[]).includes(l));return!1}var y="UTC_TIMESTAMP";function Je(s,a){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 c=String(l).trim();if(c=c.replace(/::[\w ]+$/i,"").trim(),c.startsWith("'")&&c.endsWith("'")||c.startsWith('"')&&c.endsWith('"'))c=c.slice(1,-1);let f=c.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(f.replace(/\s+/g," ")))return y;if(a==="sqlite"&&f==="CURRENT_TIMESTAMP")return y;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(f))return f==="NOW()"?"CURRENT_TIMESTAMP":f;if(s.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(c))return"1";if(/^(?:0|f|false|no)$/i.test(c))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(c))return String(Number(c));return c}function gs(s,a,l){if(Ge(s,l)!==Ge(a,l))return!0;if(s.isNullable!==a.isNullable)return!0;if(s.hasDefault!==a.hasDefault)return!0;if(Je(s,l)!==Je(a,l))return!0;if(s.isUnique!==a.isUnique)return!0;if(s.type==="enum"&&a.type==="enum"){let c=(s.enumValues||[]).slice().sort().join(","),f=(a.enumValues||[]).slice().sort().join(",");if(c!==f)return!0}return!1}function kr(s,a){return JSON.stringify([Ge(s,a),s.isPrimaryKey,s.isUnique,s.isNullable,s.hasDefault,Je(s,a)??null,(s.enumValues??[]).slice().sort(),s.references?[s.references.table,s.references.column,s.references.onDelete??null,s.references.onUpdate??null]:null])}function ys(s,a,l){let c=Object.keys(s).filter((_)=>!a[_]),f=Object.keys(a).filter((_)=>!s[_]),b=new Map,p=new Map;for(let _ of c){let v=kr(s[_],l),k=b.get(v)??[];k.push(_),b.set(v,k)}for(let _ of f){let v=kr(a[_],l),k=p.get(v)??[];k.push(_),p.set(v,k)}let E=[],x=new Set,D=new Set;for(let[_,v]of b){let k=p.get(_);if(v.length===1&&k&&k.length===1)E.push({from:v[0],to:k[0]}),x.add(v[0]),D.add(k[0])}return{renames:E,removed:c.filter((_)=>!x.has(_)),added:f.filter((_)=>!D.has(_))}}function bs(s){if(!s?.references||!s.hasDefault)return!1;let a=s.defaultValue;return a!==void 0&&a!==null&&String(a).toUpperCase()!=="NULL"}function hs(s){return!s.isPrimaryKey&&!s.isNullable&&!(s.hasDefault&&s.defaultValue!==void 0)}function Ir(s,a){if(!hs(a))return{column:a};let l=`${s}.${a.name} is NOT NULL in the model but has no default, so rows already in "${s}" would have no value for it. It is added as NULLABLE. Backfill it, then give the attribute a default or regenerate from the live database (fromDb) to apply NOT NULL.`;return{column:{...a,isNullable:!0},warning:l}}function Ts(s,a){let l=s.columns.find((c)=>c.name===a);if(l&&(l.isPrimaryKey||l.isUnique||l.references))return!0;return s.indexes.some((c)=>c.columns.includes(a))}function xs(s,a){if(Boolean(s)!==Boolean(a))return!0;if(!s||!a)return!1;if((s.constraintNames?.length??0)>1)return!0;let l=(c)=>(c??"no action").toLowerCase();return s.table!==a.table||s.column!==a.column||l(s.onDelete)!==l(a.onDelete)||l(s.onUpdate)!==l(a.onUpdate)}function Kr(s,a){return`${s.type}:${Pt(a,s.name)}:${s.columns.join(",")}:${Yt(s.where)}`}function Yt(s){if(!s||!s.trim())return"";return s.trim().split(/('(?:[^']|'')*')/).map((l,c)=>{if(c%2===1)return l;return l.replace(/::\s*(?:character varying|bit varying|double precision|timestamp(?:\s*\(\d+\))?(?:\s+with(?:out)?\s+time\s+zone)?|time(?:\s+with(?:out)?\s+time\s+zone)?|"?[a-z_][\w$]*"?(?:\s*\(\d+(?:\s*,\s*\d+)?\))?)(?:\[\])?/gi,"").replace(/"/g,"").toLowerCase().replace(/!=/g,"<>").replace(/[()]/g," ").replace(/\s+/g," ").replace(/<>\s*all\s*array\s*\[/g," not in ").replace(/=\s*any\s*array\s*\[/g," in ").replace(/([\w.]+) between (\S+) and (\S+)/g,"$1 >= $2 and $1 <= $3").replace(/[[\]]/g," ").replace(/\s+/g,"")}).join("")}function Fn(s,a){let l={};for(let c of s)l[Kr(c,a)]=c;return l}function ze(s,a,l={}){if(!s||s.dialect!==a.dialect){let{statements:tt,files:Ze}=Ce(a);if(l.write===!0&&!l.dryRun)J(Ze,{deterministic:!0});let Me=a.tables.map((nt)=>({kind:"create_table",table:nt.table,destructive:!1,sql:""}));return{statements:tt,operations:Me,files:Ze}}let c=l.applyRenames!==!1,f=l.preserveUnknownColumns===!0,b=[],p=(tt,Ze)=>{if(tt)b.push({name:Ze,sql:tt})},E=[],x=[],D=h(a.dialect,{vitessSharded:a.vitessSharded}),_=a.dialect,v=vr(s.tables),k=vr(a.tables);for(let tt of Object.keys(v))if(!k[tt]){let Ze=D.dropTable(tt);E.push(Ze),x.push({kind:"drop_table",table:tt,destructive:!0,sql:Ze}),p(Ze,`drop-${tt}-table`),At(`-- Detected dropped table: ${tt}`)}let Y=Object.keys(k).filter((tt)=>!v[tt]).map((tt)=>k[tt]),{tables:z,deferredForeignKeys:X}=Lr(Y,_);for(let[tt,Ze]of z.entries()){let Me={...Ze,columns:Ze.columns.map((je)=>X.has(Bt(Ze.table,je.name))?{...je,references:void 0}:je)},nt=[],_t=new Set;for(let je of Me.columns)if(je.type==="enum"&&je.enumValues&&je.enumValues.length>0){let Ne=`${Me.table}_${je.name}_type`;if(je.enumTypeName=Ne,!_t.has(Ne)){let Le=D.createEnumType(Ne,je.enumValues);if(Le)nt.push(Le);_t.add(Ne)}}let it=D.createTable(Me);nt.push(it);for(let je of Me.indexes){let Ne=D.createIndex(Me.table,je,Me.columns);nt.push(Ne),x.push({kind:"create_index",table:Me.table,column:je.name,destructive:!1,sql:Ne})}for(let je of Ze.columns)if(je.references&&!X.has(Bt(Ze.table,je.name)))x.push({kind:"add_foreign_key",table:Ze.table,column:je.name,destructive:!1,sql:it});if(tt===z.length-1)for(let je of z)for(let Ne of je.columns){if(!Ne.references||!X.has(Bt(je.table,Ne.name)))continue;let Le=D.addForeignKey(je.table,Ne.name,Ne.references.table,Ne.references.column,Ne.references.onDelete,Ne.references.onUpdate);if(!Le)continue;nt.push(Le),x.push({kind:"add_foreign_key",table:je.table,column:Ne.name,destructive:!1,sql:Le})}E.push(...nt),x.push({kind:"create_table",table:Me.table,destructive:!1,sql:it});let lt=nt.join(`
385
+ `)}function kt(s){let a=Ur("crypto");function l(f){if(f==null||typeof f!=="object"||f instanceof Date)return f;if(Array.isArray(f))return f.map((p)=>l(p));let b={};for(let p of Object.keys(f).sort())b[p]=l(f[p]);return b}let c=JSON.stringify(l(s));return a.createHash("sha256").update(c).digest("hex")}function vr(s){let a={};for(let l of s)a[l.table]=l;return a}function nn(s){let a={};for(let l of s)a[l.name]=l;return a}function Ge(s,a){if(a==="sqlite"){if(s.name.endsWith("_id")&&N(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(a==="mysql"||a==="vitess"||a==="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 Ft(s).toUpperCase();case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return s.type}if(s.type==="string")return`varchar(${s.maxLength??255})`;if(s.type==="decimal")return Ft(s);return s.type}function zt(s,a){if(s.type==="string"&&a.type==="string")return(a.maxLength??255)<(s.maxLength??255);if(s.type==="decimal"&&a.type==="decimal"){let l=un(s),c=un(a);return c.scale<l.scale||c.precision-c.scale<l.precision-l.scale}if(s.type==="enum"&&a.type==="enum")return(s.enumValues??[]).some((l)=>!(a.enumValues??[]).includes(l));return!1}var y="UTC_TIMESTAMP";function Je(s,a){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 c=String(l).trim();if(c=c.replace(/::[\w ]+$/i,"").trim(),c.startsWith("'")&&c.endsWith("'")||c.startsWith('"')&&c.endsWith('"'))c=c.slice(1,-1);let f=c.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(f.replace(/\s+/g," ")))return y;if(a==="sqlite"&&f==="CURRENT_TIMESTAMP")return y;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(f))return f==="NOW()"?"CURRENT_TIMESTAMP":f;if(s.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(c))return"1";if(/^(?:0|f|false|no)$/i.test(c))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(c))return String(Number(c));return c}function gs(s,a,l){if(Ge(s,l)!==Ge(a,l))return!0;if(s.isNullable!==a.isNullable)return!0;if(s.hasDefault!==a.hasDefault)return!0;if(Je(s,l)!==Je(a,l))return!0;if(s.isUnique!==a.isUnique)return!0;if(s.type==="enum"&&a.type==="enum"){let c=(s.enumValues||[]).slice().sort().join(","),f=(a.enumValues||[]).slice().sort().join(",");if(c!==f)return!0}return!1}function kr(s,a){return JSON.stringify([Ge(s,a),s.isPrimaryKey,s.isUnique,s.isNullable,s.hasDefault,Je(s,a)??null,(s.enumValues??[]).slice().sort(),s.references?[s.references.table,s.references.column,s.references.onDelete??null,s.references.onUpdate??null]:null])}function ys(s,a,l){let c=Object.keys(s).filter((_)=>!a[_]),f=Object.keys(a).filter((_)=>!s[_]),b=new Map,p=new Map;for(let _ of c){let v=kr(s[_],l),k=b.get(v)??[];k.push(_),b.set(v,k)}for(let _ of f){let v=kr(a[_],l),k=p.get(v)??[];k.push(_),p.set(v,k)}let E=[],x=new Set,D=new Set;for(let[_,v]of b){let k=p.get(_);if(v.length===1&&k&&k.length===1)E.push({from:v[0],to:k[0]}),x.add(v[0]),D.add(k[0])}return{renames:E,removed:c.filter((_)=>!x.has(_)),added:f.filter((_)=>!D.has(_))}}function bs(s){if(!s?.references||!s.hasDefault)return!1;let a=s.defaultValue;return a!==void 0&&a!==null&&String(a).toUpperCase()!=="NULL"}function hs(s){return!s.isPrimaryKey&&!s.isNullable&&!(s.hasDefault&&s.defaultValue!==void 0)}function Ir(s,a){if(!hs(a))return{column:a};let l=`${s}.${a.name} is NOT NULL in the model but has no default, so rows already in "${s}" would have no value for it. It is added as NULLABLE. Backfill it, then give the attribute a default or regenerate from the live database (fromDb) to apply NOT NULL.`;return{column:{...a,isNullable:!0},warning:l}}function Ts(s,a){let l=s.columns.find((c)=>c.name===a);if(l&&(l.isPrimaryKey||l.isUnique||l.references))return!0;return s.indexes.some((c)=>c.columns.includes(a))}function xs(s,a){if(Boolean(s)!==Boolean(a))return!0;if(!s||!a)return!1;if((s.constraintNames?.length??0)>1)return!0;let l=(c)=>(c??"no action").toLowerCase();return s.table!==a.table||s.column!==a.column||l(s.onDelete)!==l(a.onDelete)||l(s.onUpdate)!==l(a.onUpdate)}function Kr(s,a){return`${s.type}:${Pt(a,s.name)}:${s.columns.join(",")}:${Yt(s.where)}`}function Yt(s){if(!s||!s.trim())return"";return s.trim().split(/('(?:[^']|'')*')/).map((l,c)=>{if(c%2===1)return l;return l.replace(/::\s*(?:character varying|bit varying|double precision|timestamp(?:\s*\(\d+\))?(?:\s+with(?:out)?\s+time\s+zone)?|time(?:\s+with(?:out)?\s+time\s+zone)?|"?[a-z_][\w$]*"?(?:\s*\(\d+(?:\s*,\s*\d+)?\))?)(?:\[\])?/gi,"").replace(/"/g,"").toLowerCase().replace(/!=/g,"<>").replace(/[()]/g," ").replace(/\s+/g," ").replace(/<>\s*all\s*array\s*\[/g," not in ").replace(/=\s*any\s*array\s*\[/g," in ").replace(/([\w.]+) between (\S+) and (\S+)/g,"$1 >= $2 and $1 <= $3").replace(/[[\]]/g," ").replace(/\s+/g,"")}).join("")}function Fn(s,a){let l={};for(let c of s)l[Kr(c,a)]=c;return l}function ze(s,a,l={}){if(!s||s.dialect!==a.dialect){let{statements:tt,files:Ze}=Ce(a);if(l.write===!0&&!l.dryRun)J(Ze,{deterministic:!0});let Me=a.tables.map((nt)=>({kind:"create_table",table:nt.table,destructive:!1,sql:""}));return{statements:tt,operations:Me,files:Ze}}let c=l.applyRenames!==!1,f=l.preserveUnknownColumns===!0,b=[],p=(tt,Ze)=>{if(tt)b.push({name:Ze,sql:tt})},E=[],x=[],D=h(a.dialect,{vitessSharded:a.vitessSharded}),_=a.dialect,v=vr(s.tables),k=vr(a.tables);for(let tt of Object.keys(v))if(!k[tt]){let Ze=D.dropTable(tt);E.push(Ze),x.push({kind:"drop_table",table:tt,destructive:!0,sql:Ze}),p(Ze,`drop-${tt}-table`),At(`-- Detected dropped table: ${tt}`)}let Y=Object.keys(k).filter((tt)=>!v[tt]).map((tt)=>k[tt]),{tables:z,deferredForeignKeys:X}=Lr(Y,_);for(let[tt,Ze]of z.entries()){let Me={...Ze,columns:Ze.columns.map((je)=>X.has(Bt(Ze.table,je.name))?{...je,references:void 0}:je)},nt=[],_t=new Set;for(let je of Me.columns)if(je.type==="enum"&&je.enumValues&&je.enumValues.length>0){let Ne=`${Me.table}_${je.name}_type`;if(je.enumTypeName=Ne,!_t.has(Ne)){let Le=D.createEnumType(Ne,je.enumValues);if(Le)nt.push(Le);_t.add(Ne)}}let it=D.createTable(Me);nt.push(it);for(let je of Me.indexes){let Ne=D.createIndex(Me.table,je,Me.columns);nt.push(Ne),x.push({kind:"create_index",table:Me.table,column:je.name,destructive:!1,sql:Ne})}for(let je of Ze.columns)if(je.references&&!X.has(Bt(Ze.table,je.name)))x.push({kind:"add_foreign_key",table:Ze.table,column:je.name,destructive:!1,sql:it});if(tt===z.length-1)for(let je of z)for(let Ne of je.columns){if(!Ne.references||!X.has(Bt(je.table,Ne.name)))continue;let Le=D.addForeignKey(je.table,Ne.name,Ne.references.table,Ne.references.column,Ne.references.onDelete,Ne.references.onUpdate);if(!Le)continue;nt.push(Le),x.push({kind:"add_foreign_key",table:je.table,column:Ne.name,destructive:!1,sql:Le})}E.push(...nt),x.push({kind:"create_table",table:Me.table,destructive:!1,sql:it});let lt=nt.join(`
386
386
 
387
387
  `);p(lt,`create-${Me.table}-table`)}let _e=new Set,Fe=new Set;for(let tt of Object.keys(k)){let Ze=v[tt],Me=k[tt];if(!Ze)continue;let nt=nn(Ze.columns),_t=nn(Me.columns);for(let it of Object.keys(_t)){let lt=_t[it];if(lt.type!=="enum"||!lt.enumValues||lt.enumValues.length===0)continue;let je=`${Me.table}_${lt.name}_type`;lt.enumTypeName=je;let Ne=nt[it];if(Ne?.type==="enum"){let Le=Ne.enumValues??[],et=lt.enumValues.filter((Xe)=>!Le.includes(Xe)),Mt=Le.filter((Xe)=>!lt.enumValues.includes(Xe)),Rt=Ne.enumTypeName??je;if(D.addEnumValues&&Le.length>0&&et.length>0&&Mt.length===0&&Rt===je){let Xe=D.addEnumValues(Rt,et);E.push(Xe),x.push({kind:"add_enum_value",table:Me.table,column:lt.name,destructive:!1,sql:Xe}),p(Xe,`alter-${Rt}-enum`),At(`-- Detected new enum value(s) on ${Me.table}.${lt.name}: ${et.join(", ")}`),Fe.add(Bt(Me.table,lt.name))}continue}if(!_e.has(je)){let Le=D.createEnumType(je,lt.enumValues);if(Le)E.push(Le),x.push({kind:"create_enum",table:Me.table,column:lt.name,destructive:!1,sql:Le}),p(Le,`create-${je}-enum`);_e.add(je)}}}for(let tt of Object.keys(k)){let Ze=v[tt],Me=k[tt];if(!Ze)continue;let nt=nn(Ze.columns),_t=Fn(Ze.indexes,Ze.table),it=nn(Me.columns),lt=Fn(Me.indexes,Me.table),je=[],Ne=Object.keys(nt).filter((Ie)=>!it[Ie]),Le=Object.keys(it).filter((Ie)=>!nt[Ie]);if(c&&!f){let Ie=ys(nt,it,_);je=Ie.renames,Ne=Ie.removed,Le=Ie.added}if(f){let Ie=Ne.map((at)=>nt[at]),Oe=new Set(Me.indexes.map((at)=>Pt(Me.table,at.name))),Ye=Ze.indexes.filter((at)=>!lt[Kr(at,Ze.table)]&&!Oe.has(Pt(Ze.table,at.name)));if(Ie.length>0||Ye.length>0){if(Ie.length>0)At(`-- Keeping ${Ie.length} column(s) on "${Me.table}" no model declares: ${Ne.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(Ye.length>0)At(`-- Keeping ${Ye.length} index(es) on "${Me.table}" no model declares: ${Ye.map((at)=>at.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);Me={...Me,columns:[...Me.columns,...Ie],indexes:[...Me.indexes,...Ye]},it=nn(Me.columns),lt=Fn(Me.indexes,Me.table)}Ne=[]}for(let Ie of Object.keys(nt))if(it[Ie]&&Fe.has(Bt(Me.table,Ie)))nt[Ie]={...nt[Ie],enumValues:it[Ie].enumValues};let et=Object.keys(it).filter((Ie)=>nt[Ie]&&gs(nt[Ie],it[Ie],_)),Mt=Object.keys(it).filter((Ie)=>nt[Ie]&&xs(nt[Ie].references,it[Ie].references));if(_==="sqlite"){if(et.length>0||Mt.length>0||Ne.some((Oe)=>Ts(Ze,Oe))||Le.some((Oe)=>bs(it[Oe]))){let Oe={},Ye=new Map(je.map((ot)=>[ot.to,ot.from])),at=[],Nt=[];for(let ot of Me.columns)if(nt[ot.name])Oe[ot.name]=ot.name,Nt.push(ot);else if(Ye.has(ot.name))Oe[ot.name]=Ye.get(ot.name),Nt.push(ot);else{let on=Ir(Me.table,ot);if(on.warning)at.push(on.warning);Nt.push(on.column)}let qt=at.length>0?{...Me,columns:Nt}:Me,rt=`_qb_tmp_${Me.table}`,an=0;while((v[rt]||k[rt])&&an<100)an+=1,rt=`_qb_tmp_${Me.table}_${an}`;let Ut=D.rebuildTable({target:qt,tempName:rt,columnSource:Oe});E.push(Ut);let Wt=et.some((ot)=>nt[ot].type!==it[ot].type);if(x.push({kind:"rebuild_table",table:Me.table,destructive:Ne.length>0||Wt,sql:Ut,...at.length>0?{warning:at.join(" ")}:{}}),l.write===!0&&!l.dryRun)at.forEach((ot)=>console.warn(`-- ${ot}`));for(let ot of je)x.push({kind:"rename_column",table:Me.table,from:ot.from,to:ot.to,destructive:!1,confidence:"high",sql:Ut});for(let ot of Ne)x.push({kind:"drop_column",table:Me.table,column:ot,destructive:!0,sql:Ut});At(`-- Detected SQLite table rebuild required: ${Me.table}`),p(`${at.map((ot)=>`-- qb: ${ot}
388
388
  `).join("")}${Ut}`,`alter-${Me.table}-table`);continue}}let Rt=[],Xe=!1;for(let Ie of Object.keys(_t))if(!lt[Ie]){let Oe=_t[Ie],Ye=D.dropIndex(Me.table,Oe.name);Rt.push(Ye),E.push(Ye),x.push({kind:"drop_index",table:Me.table,column:Oe.name,destructive:!1,sql:Ye}),At(`-- Detected dropped index: ${Oe.name} from ${Me.table}`),Xe=!0}for(let Ie of je){let Oe=D.renameColumn(Me.table,Ie.from,Ie.to);Rt.push(Oe),E.push(Oe),x.push({kind:"rename_column",table:Me.table,from:Ie.from,to:Ie.to,destructive:!1,confidence:"high",sql:Oe}),At(`-- Detected renamed column: ${Me.table}.${Ie.from} -> ${Ie.to}`),Xe=!0}for(let Ie of Ne){let Oe=D.dropColumn(Me.table,Ie);Rt.push(Oe),E.push(Oe),x.push({kind:"drop_column",table:Me.table,column:Ie,destructive:!0,sql:Oe}),At(`-- Detected dropped column: ${Me.table}.${Ie}`),Xe=!0}for(let Ie of et){let Oe=nt[Ie],Ye=it[Ie],at=D.modifyColumn(Me.table,Ye,Oe);Rt.push(at),E.push(at),x.push({kind:"modify_column",table:Me.table,column:Ie,destructive:Oe.type!==Ye.type&&!Gt(Oe.type,Ye.type)||zt(Oe,Ye),sql:at}),At(`-- Detected column change: ${Me.table}.${Ie} (${Oe.type} -> ${Ye.type})`),Xe=!0}for(let Ie of Mt){let Oe=it[Ie];if(!Oe.references)continue;let Ye=D.addForeignKey(Me.table,Oe.name,Oe.references.table,Oe.references.column,Oe.references.onDelete,Oe.references.onUpdate,nt[Ie].references?.constraintNames);if(!Ye)continue;Rt.push(Ye),E.push(Ye),x.push({kind:"add_foreign_key",table:Me.table,column:Ie,destructive:!1,sql:Ye}),At(`-- Detected foreign-key change: ${Me.table}.${Ie} -> ${Oe.references.table}(${Oe.references.column})`),Xe=!0}for(let Ie of Le){let{column:Oe,warning:Ye}=Ir(Me.table,it[Ie]),at=D.addColumn(Me.table,Oe);if(Rt.push(Ye?`-- qb: ${Ye}
389
389
  ${at}`:at),E.push(at),x.push({kind:"add_column",table:Me.table,column:Oe.name,destructive:!1,sql:at,...Ye?{warning:Ye}:{}}),At(`-- Detected new column: ${Me.table}.${Oe.name}`),Ye&&l.write===!0&&!l.dryRun)console.warn(`-- ${Ye}`);if(Xe=!0,Oe.references){let Nt=D.addForeignKey(Me.table,Oe.name,Oe.references.table,Oe.references.column,Oe.references.onDelete,Oe.references.onUpdate);if(Nt)Rt.push(Nt),E.push(Nt),x.push({kind:"add_foreign_key",table:Me.table,column:Oe.name,destructive:!1,sql:Nt})}}for(let Ie of Object.keys(lt))if(!_t[Ie]){let Oe=lt[Ie],Ye=D.createIndex(Me.table,Oe,Me.columns);Rt.push(Ye),E.push(Ye),x.push({kind:"create_index",table:Me.table,column:Oe.name,destructive:!1,sql:Ye}),At(`-- Detected new index: ${Oe.name} in ${Me.table}`),Xe=!0}if(Xe){let Ie=Rt.join(`
390
390
 
391
- `);p(Ie,`alter-${Me.table}-table`)}}if(l.write===!0&&!l.dryRun)J(b,{deterministic:!1});return{statements:E.length===0?["-- No changes detected"]:E,operations:x,files:b}}function Xt(s,a,l={}){return ze(s,a,l).statements}function Bn(s){return s}class Zt{get order(){return 100}get description(){return}}function _n(s){return s}export{Z,ee,te,ne,I,re,ie,se,ae,L,oe,K,F,le,ce,j,ue,de,ct,Ue,ut,C,fe,o,me,he,ge,pe,h,dt,ft,mt,Ve,He,ht,w,R,Qe,A,ye,be,q,Te,W,we,U,V,N,H,Se,De,Ee,$e,Q,xe,ve,S,g,Dn,En,$n,gt,pt,yt,bt,Tt,xn,wt,Qt,vn,kn,Cn,Rn,St,An,Nn,Mn,ke,d,Dt,Et,$t,xt,vt,Gt,G,J,Ce,Jt,On,Pn,kt,Ge,zt,y,Je,Yt,ze,Xt,Bn,Zt,_n};
391
+ `);p(Ie,`alter-${Me.table}-table`)}}if(l.write===!0&&!l.dryRun)J(b,{deterministic:!1});return{statements:E.length===0?["-- No changes detected"]:E,operations:x,files:b}}function Xt(s,a,l={}){return ze(s,a,l).statements}function Bn(s){return s}class Zt{get order(){return 100}get description(){return}}function _n(s){return s}export{Z,ee,te,ne,I,re,ie,se,ae,L,oe,K,F,le,ce,j,ue,de,ct,Ue,ut,C,fe,o,me,he,ge,pe,h,dt,ft,mt,Ve,He,ht,w,R,Qe,A,ye,be,q,Te,W,we,U,V,M,H,Se,De,Ee,$e,Q,xe,ve,S,g,Dn,En,$n,gt,pt,yt,bt,Tt,xn,wt,Qt,vn,kn,Cn,Rn,St,An,Mn,Nn,ke,d,Dt,Et,$t,xt,vt,Gt,G,J,Ce,Jt,On,Pn,kt,Ge,zt,y,Je,Yt,ze,Xt,Bn,Zt,_n};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{rn,sn,an,on,ln,Ft,cn,un}from"./chunk-vmptnnff.js";import"./chunk-bpwg9p8b.js";import"./chunk-93ny6tvm.js";export{ln as clearModelRegistry,cn as defineModel,sn as getAllModels,rn as getModel,an as getModelRegistry,on as hasModel,un as registerBrowserModels,Ft as registerModel};
2
+ import{rn,sn,an,on,ln,Ft,cn,un}from"./chunk-rzfnhh9f.js";import"./chunk-bpwg9p8b.js";import"./chunk-93ny6tvm.js";export{ln as clearModelRegistry,cn as defineModel,sn as getAllModels,rn as getModel,an as getModelRegistry,on as hasModel,un as registerBrowserModels,Ft as registerModel};