bun-query-builder 0.2.68 → 0.2.69

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.
@@ -1,19 +1,19 @@
1
1
  // @bun
2
- import{n,e,H,t,s,Q,qe,Ce,w,We,r,p,y,Tt,x,o,Re,A,Ae,Me,M}from"./chunk-kxsapz85.js";import{c}from"./chunk-55jccfgb.js";var ri=import.meta.require;import{existsSync as Zn,mkdirSync as Ks,mkdtempSync as xa,readdirSync as Fs,readFileSync as xr,rmSync as Us,unlinkSync as Zr,writeFileSync as Qs}from"fs";import{tmpdir as Na}from"os";import{isAbsolute as ka,join as Qn}from"path";import es from"process";function si(d){let h=2166136261;for(let D=0;D<d.length;D++)h^=d.charCodeAt(D),h=Math.imul(h,16777619)>>>0;return h.toString(36).padStart(7,"0").slice(-7)}function ii(d,h=63){if(d.length<=h)return d;let D=`_${si(d)}`;return d.slice(0,h-D.length)+D}function Hn(d,h){let D=`${d}_`,E=h.startsWith(D)?h:`${D}${h}`;return ii(E)}class a{quoteIdentifier(d){return`\`${d.replace(/`/g,"``")}\``}getColumnType(d){switch(d.type){case"string":return`varchar(${d.maxLength??255})`;case"text":return"text";case"boolean":return"tinyint(1)";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"datetime";case"timestamptz":return"datetime";case"json":return"json";case"enum":if(d.enumValues&&d.enumValues.length>0)return`ENUM(${d.enumValues.map((D)=>`'${D.replace(/'/g,"''")}'`).join(", ")})`;return"text";default:return"text"}}getPrimaryKeyType(d){return this.getColumnType(d)}getAutoIncrementClause(d){if(d.isPrimaryKey&&(d.type==="integer"||d.type==="bigint"))return"auto_increment";return""}getDefaultValue(d){if(!d.hasDefault||d.defaultValue===void 0)return"";let h=d.defaultValue;if(typeof h==="string"){let D=h.toUpperCase();if(D==="UTC_TIMESTAMP")return"default (UTC_TIMESTAMP)";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(D))return`default ${D}`;let V=`'${h.replace(/'/g,"''")}'`;if(d.type==="text"||d.type==="json"||d.type==="enum"&&!d.enumValues?.length)return`default (${V})`;return`default ${V}`}else if(typeof h==="number"||typeof h==="bigint")return`default ${h}`;else if(typeof h==="boolean")return`default ${h?1:0}`;else if(h instanceof Date)return`default '${h.toISOString()}'`;return""}createEnumType(d,h){return""}foreignKeyClauses(d){return d.columns.filter((h)=>h.references).map((h)=>{let D=h.references,E=`${d.table}_${h.name}_fk`,V=`CONSTRAINT ${this.quoteIdentifier(E)} FOREIGN KEY (${this.quoteIdentifier(h.name)}) REFERENCES ${this.quoteIdentifier(D.table)}(${this.quoteIdentifier(D.column)})`;if(D.onDelete)V+=` ON DELETE ${D.onDelete.toUpperCase()}`;if(D.onUpdate)V+=` ON UPDATE ${D.onUpdate.toUpperCase()}`;return V})}createTable(d){let h=[...d.columns.map((D)=>this.renderColumn(D)),...this.foreignKeyClauses(d)];return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
2
+ import{n,e,H,t,s,Q,qe,Ce,w,We,r,p,y,Tt,x,o,Re,A,Ae,Me,M}from"./chunk-8pz2q01r.js";import{c}from"./chunk-kwpppy92.js";var ri=import.meta.require;import{existsSync as Zn,mkdirSync as Ks,mkdtempSync as xa,readdirSync as Fs,readFileSync as xr,rmSync as Us,unlinkSync as Zr,writeFileSync as Qs}from"fs";import{tmpdir as Na}from"os";import{isAbsolute as ka,join as Qn}from"path";import es from"process";function si(d){let h=2166136261;for(let D=0;D<d.length;D++)h^=d.charCodeAt(D),h=Math.imul(h,16777619)>>>0;return h.toString(36).padStart(7,"0").slice(-7)}function ii(d,h=63){if(d.length<=h)return d;let D=`_${si(d)}`;return d.slice(0,h-D.length)+D}function Hn(d,h){let D=`${d}_`,E=h.startsWith(D)?h:`${D}${h}`;return ii(E)}class a{quoteIdentifier(d){return`\`${d.replace(/`/g,"``")}\``}getColumnType(d){switch(d.type){case"string":return`varchar(${d.maxLength??255})`;case"text":return"text";case"boolean":return"tinyint(1)";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"datetime";case"timestamptz":return"datetime";case"json":return"json";case"enum":if(d.enumValues&&d.enumValues.length>0)return`ENUM(${d.enumValues.map((D)=>`'${D.replace(/'/g,"''")}'`).join(", ")})`;return"text";default:return"text"}}getPrimaryKeyType(d){return this.getColumnType(d)}getAutoIncrementClause(d){if(d.isPrimaryKey&&(d.type==="integer"||d.type==="bigint"))return"auto_increment";return""}getDefaultValue(d){if(!d.hasDefault||d.defaultValue===void 0)return"";let h=d.defaultValue;if(typeof h==="string"){let D=h.toUpperCase();if(D==="UTC_TIMESTAMP")return"default (UTC_TIMESTAMP)";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(D))return`default ${D}`;let V=`'${h.replace(/'/g,"''")}'`;if(d.type==="text"||d.type==="json"||d.type==="enum"&&!d.enumValues?.length)return`default (${V})`;return`default ${V}`}else if(typeof h==="number"||typeof h==="bigint")return`default ${h}`;else if(typeof h==="boolean")return`default ${h?1:0}`;else if(h instanceof Date)return`default '${h.toISOString()}'`;return""}createEnumType(d,h){return""}foreignKeyClauses(d){return d.columns.filter((h)=>h.references).map((h)=>{let D=h.references,E=`${d.table}_${h.name}_fk`,V=`CONSTRAINT ${this.quoteIdentifier(E)} FOREIGN KEY (${this.quoteIdentifier(h.name)}) REFERENCES ${this.quoteIdentifier(D.table)}(${this.quoteIdentifier(D.column)})`;if(D.onDelete)V+=` ON DELETE ${D.onDelete.toUpperCase()}`;if(D.onUpdate)V+=` ON UPDATE ${D.onUpdate.toUpperCase()}`;return V})}createTable(d){let h=[...d.columns.map((D)=>this.renderColumn(D)),...this.foreignKeyClauses(d)];return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
3
3
  ${h.join(`,
4
4
  `)}
5
- ) DEFAULT CHARSET=utf8mb4;`}static KEY_PREFIX_CHARACTERS=255;static MAX_KEY_BYTES=3072;static BYTES_PER_CHARACTER=4;keyPartWidth(d){let h=this.getColumnType(d).toLowerCase();if(h.includes("text")||h.includes("blob")||h==="json")return{bytes:Number.POSITIVE_INFINITY,indexableWhole:!1};let D=h.match(/^(?:var)?char\((\d+)\)$/)?.[1];if(D!==void 0)return{bytes:Number(D)*a.BYTES_PER_CHARACTER,indexableWhole:!0};return{bytes:8,indexableWhole:!0}}keyParts(d,h,D){let E=h.columns.map((ke)=>{let xe=D?.find((Ve)=>Ve.name===ke),Ke=xe?this.keyPartWidth(xe):{bytes:0,indexableWhole:!0},Ie=!Ke.indexableWhole;return{name:ke,prefixed:Ie,bytes:Ie?a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER:Ke.bytes,narrowable:!Ke.indexableWhole||Ke.bytes>a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}}),V=()=>E.reduce((ke,xe)=>ke+xe.bytes,0);while(V()>a.MAX_KEY_BYTES){let ke=E.filter((xe)=>xe.narrowable&&!xe.prefixed).sort((xe,Ke)=>Ke.bytes-xe.bytes)[0];if(!ke)throw Error(`[migrations] Index '${h.name}' on table '${d}' needs ${V()} bytes of key, over MySQL's ${a.MAX_KEY_BYTES}. Every column in it is already at its ${a.KEY_PREFIX_CHARACTERS}-character prefix, so shorten a column or drop one from the index.`);ke.prefixed=!0,ke.bytes=a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}return E.map((ke)=>ke.prefixed?`${this.quoteIdentifier(ke.name)}(${a.KEY_PREFIX_CHARACTERS})`:this.quoteIdentifier(ke.name))}createIndex(d,h,D){if(h.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on MySQL. Index '${h.name}' on table '${d}' uses WHERE clause: ${h.where}`);let E=h.type==="unique"?"UNIQUE ":"",V=Hn(d,h.name),ke=this.keyParts(d,h,D).join(", ");return`CREATE ${E}INDEX ${this.quoteIdentifier(V)} ON ${this.quoteIdentifier(d)} (${ke});`}addForeignKey(d,h,D,E,V,ke,xe=[]){let Ke=`${d}_${h}_fk`,Ie=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Ke)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)Ie+=` ON DELETE ${V.toUpperCase()}`;if(ke)Ie+=` ON UPDATE ${ke.toUpperCase()}`;let Ve=[...new Set(xe)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP FOREIGN KEY ${this.quoteIdentifier(gt)};`).join(`
5
+ ) DEFAULT CHARSET=utf8mb4;`}static KEY_PREFIX_CHARACTERS=255;static MAX_KEY_BYTES=3072;static BYTES_PER_CHARACTER=4;keyPartWidth(d){let h=this.getColumnType(d).toLowerCase();if(h.includes("text")||h.includes("blob")||h==="json")return{bytes:Number.POSITIVE_INFINITY,indexableWhole:!1};let D=h.match(/^(?:var)?char\((\d+)\)$/)?.[1];if(D!==void 0)return{bytes:Number(D)*a.BYTES_PER_CHARACTER,indexableWhole:!0};return{bytes:8,indexableWhole:!0}}keyParts(d,h,D){let E=h.columns.map((ke)=>{let xe=D?.find((Ve)=>Ve.name===ke),Ke=xe?this.keyPartWidth(xe):{bytes:0,indexableWhole:!0},ve=!Ke.indexableWhole;return{name:ke,prefixed:ve,bytes:ve?a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER:Ke.bytes,narrowable:!Ke.indexableWhole||Ke.bytes>a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}}),V=()=>E.reduce((ke,xe)=>ke+xe.bytes,0);while(V()>a.MAX_KEY_BYTES){let ke=E.filter((xe)=>xe.narrowable&&!xe.prefixed).sort((xe,Ke)=>Ke.bytes-xe.bytes)[0];if(!ke)throw Error(`[migrations] Index '${h.name}' on table '${d}' needs ${V()} bytes of key, over MySQL's ${a.MAX_KEY_BYTES}. Every column in it is already at its ${a.KEY_PREFIX_CHARACTERS}-character prefix, so shorten a column or drop one from the index.`);ke.prefixed=!0,ke.bytes=a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}return E.map((ke)=>ke.prefixed?`${this.quoteIdentifier(ke.name)}(${a.KEY_PREFIX_CHARACTERS})`:this.quoteIdentifier(ke.name))}createIndex(d,h,D){if(h.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on MySQL. Index '${h.name}' on table '${d}' uses WHERE clause: ${h.where}`);let E=h.type==="unique"?"UNIQUE ":"",V=Hn(d,h.name),ke=this.keyParts(d,h,D).join(", ");return`CREATE ${E}INDEX ${this.quoteIdentifier(V)} ON ${this.quoteIdentifier(d)} (${ke});`}addForeignKey(d,h,D,E,V,ke,xe=[]){let Ke=`${d}_${h}_fk`,ve=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Ke)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)ve+=` ON DELETE ${V.toUpperCase()}`;if(ke)ve+=` ON UPDATE ${ke.toUpperCase()}`;let Ve=[...new Set(xe)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP FOREIGN KEY ${this.quoteIdentifier(gt)};`).join(`
6
6
  `);return Ve?`${Ve}
7
- ${Ie};`:`${Ie};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);return`ALTER TABLE ${this.quoteIdentifier(d)} ADD COLUMN ${E.join(" ")};`}modifyColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);let ke=this.getAutoIncrementClause(h);if(ke)E.push(ke);return`ALTER TABLE ${this.quoteIdentifier(d)} MODIFY COLUMN ${E.join(" ")};`}renameColumn(d,h,D){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME COLUMN ${this.quoteIdentifier(h)} TO ${this.quoteIdentifier(D)};`}renameTable(d,h){return`RENAME TABLE ${this.quoteIdentifier(d)} TO ${this.quoteIdentifier(h)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; MySQL uses in-place ALTER.")}dropTable(d){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(d)}`}dropColumn(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} DROP COLUMN ${this.quoteIdentifier(h)};`}dropIndex(d,h){let D=Hn(d,h);return`DROP INDEX ${this.quoteIdentifier(D)} ON ${this.quoteIdentifier(d)};`}dropEnumType(d){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
7
+ ${ve};`:`${ve};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);return`ALTER TABLE ${this.quoteIdentifier(d)} ADD COLUMN ${E.join(" ")};`}modifyColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);let ke=this.getAutoIncrementClause(h);if(ke)E.push(ke);return`ALTER TABLE ${this.quoteIdentifier(d)} MODIFY COLUMN ${E.join(" ")};`}renameColumn(d,h,D){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME COLUMN ${this.quoteIdentifier(h)} TO ${this.quoteIdentifier(D)};`}renameTable(d,h){return`RENAME TABLE ${this.quoteIdentifier(d)} TO ${this.quoteIdentifier(h)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; MySQL uses in-place ALTER.")}dropTable(d){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(d)}`}dropColumn(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} DROP COLUMN ${this.quoteIdentifier(h)};`}dropIndex(d,h){let D=Hn(d,h);return`DROP INDEX ${this.quoteIdentifier(D)} ON ${this.quoteIdentifier(d)};`}dropEnumType(d){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
8
8
  id INT AUTO_INCREMENT PRIMARY KEY,
9
9
  migration VARCHAR(255) NOT NULL UNIQUE,
10
10
  executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
11
11
  )`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES (?)"}jsonExtract(d,h){return`JSON_UNQUOTE(JSON_EXTRACT(${d}, CONCAT('$.', ${h})))`}dateBucket(d,h,D=0){let E=D===0?d:`DATE_ADD(${d}, INTERVAL ${D} HOUR)`;switch(h){case"hour":return`DATE_FORMAT(${E}, '%Y-%m-%dT%H:00:00.000Z')`;case"week":return`DATE_FORMAT(DATE_SUB(${E}, INTERVAL WEEKDAY(${E}) DAY), '%Y-%m-%dT00:00:00.000Z')`;case"month":return`DATE_FORMAT(${E}, '%Y-%m-01T00:00:00.000Z')`;case"year":return`DATE_FORMAT(${E}, '%Y-01-01T00:00:00.000Z')`;case"day":default:return`DATE_FORMAT(${E}, '%Y-%m-%dT00:00:00.000Z')`}}booleanLiteral(d){return d?"TRUE":"FALSE"}renderColumn(d){let h=this.getColumnType(d),D=[this.quoteIdentifier(d.name),h];if(d.isPrimaryKey){D.push("PRIMARY KEY");let V=this.getAutoIncrementClause(d);if(V)D.push(V)}if(!d.isNullable&&!d.isPrimaryKey)D.push("not null");let E=this.getDefaultValue(d);if(E)D.push(E);return D.join(" ")}}class ce{quoteIdentifier(d){return`"${d.replace(/"/g,'""')}"`}getColumnType(d){switch(d.type){case"string":return`varchar(${d.maxLength??255})`;case"text":return"text";case"boolean":return"boolean";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"timestamp";case"timestamptz":return"timestamptz";case"json":return"jsonb";case"enum":if(d.enumValues&&d.enumValues.length>0)return d.enumTypeName?this.quoteIdentifier(d.enumTypeName):"text";return"text";default:return"text"}}getPrimaryKeyType(d){switch(d.type){case"integer":return"SERIAL";case"bigint":return"BIGSERIAL";default:return this.getColumnType(d)}}getAutoIncrementClause(d){return""}getDefaultValue(d){if(!d.hasDefault||d.defaultValue===void 0)return"";let h=d.defaultValue;if(typeof h==="string"){let D=h.toUpperCase();if(D==="UTC_TIMESTAMP")return"default (now() AT TIME ZONE 'utc')";if(["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"].includes(D))return`default ${D}`;return`default '${h.replace(/'/g,"''")}'`}else if(typeof h==="number"||typeof h==="bigint")return`default ${h}`;else if(typeof h==="boolean")return`default ${h?"true":"false"}`;else if(h instanceof Date)return`default '${h.toISOString()}'`;return""}createEnumType(d,h){let D=h.map((E)=>`'${E.replace(/'/g,"''")}'`).join(", ");return`CREATE TYPE ${this.quoteIdentifier(d)} AS ENUM (${D});`}createTable(d){let h=d.columns.map((D)=>this.renderColumn(D)).join(`,
12
12
  `);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
13
13
  ${h}
14
- );`}createIndex(d,h){let D=h.type==="unique"?"UNIQUE ":"",E=Hn(d,h.name),V=h.columns.map((xe)=>this.quoteIdentifier(xe)).join(", "),ke=h.where?` WHERE ${h.where}`:"";return`CREATE ${D}INDEX IF NOT EXISTS ${this.quoteIdentifier(E)} ON ${this.quoteIdentifier(d)} (${V})${ke};`}addForeignKey(d,h,D,E,V,ke,xe=[]){let Ke=`${d}_${h}_fk`,Ie=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Ke)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)Ie+=` ON DELETE ${V.toUpperCase()}`;if(ke)Ie+=` ON UPDATE ${ke.toUpperCase()}`;let Ve=[...new Set(xe)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP CONSTRAINT ${this.quoteIdentifier(gt)};`).join(`
14
+ );`}createIndex(d,h){let D=h.type==="unique"?"UNIQUE ":"",E=Hn(d,h.name),V=h.columns.map((xe)=>this.quoteIdentifier(xe)).join(", "),ke=h.where?` WHERE ${h.where}`:"";return`CREATE ${D}INDEX IF NOT EXISTS ${this.quoteIdentifier(E)} ON ${this.quoteIdentifier(d)} (${V})${ke};`}addForeignKey(d,h,D,E,V,ke,xe=[]){let Ke=`${d}_${h}_fk`,ve=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Ke)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)ve+=` ON DELETE ${V.toUpperCase()}`;if(ke)ve+=` ON UPDATE ${ke.toUpperCase()}`;let Ve=[...new Set(xe)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP CONSTRAINT ${this.quoteIdentifier(gt)};`).join(`
15
15
  `);return Ve?`${Ve}
16
- ${Ie};`:`${Ie};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);return`ALTER TABLE ${this.quoteIdentifier(d)} ADD COLUMN ${E.join(" ")};`}modifyColumn(d,h){let D=this.getColumnType(h),E=this.quoteIdentifier(d),V=this.quoteIdentifier(h.name),ke=[`ALTER TABLE ${E} ALTER COLUMN ${V} DROP DEFAULT;`,`ALTER TABLE ${E} ALTER COLUMN ${V} TYPE ${D} USING ${V}::${D};`];if(!h.isPrimaryKey)ke.push(`ALTER TABLE ${E} ALTER COLUMN ${V} ${h.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let xe=this.getDefaultValue(h);if(xe)ke.push(`ALTER TABLE ${E} ALTER COLUMN ${V} SET ${xe};`);return ke.join(`
16
+ ${ve};`:`${ve};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);return`ALTER TABLE ${this.quoteIdentifier(d)} ADD COLUMN ${E.join(" ")};`}modifyColumn(d,h){let D=this.getColumnType(h),E=this.quoteIdentifier(d),V=this.quoteIdentifier(h.name),ke=[`ALTER TABLE ${E} ALTER COLUMN ${V} DROP DEFAULT;`,`ALTER TABLE ${E} ALTER COLUMN ${V} TYPE ${D} USING ${V}::${D};`];if(!h.isPrimaryKey)ke.push(`ALTER TABLE ${E} ALTER COLUMN ${V} ${h.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let xe=this.getDefaultValue(h);if(xe)ke.push(`ALTER TABLE ${E} ALTER COLUMN ${V} SET ${xe};`);return ke.join(`
17
17
  `)}renameColumn(d,h,D){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME COLUMN ${this.quoteIdentifier(h)} TO ${this.quoteIdentifier(D)};`}renameTable(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME TO ${this.quoteIdentifier(h)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; Postgres uses in-place ALTER.")}dropTable(d){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(d)} CASCADE`}dropColumn(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} DROP COLUMN ${this.quoteIdentifier(h)};`}dropIndex(d,h){let D=Hn(d,h);return`DROP INDEX IF EXISTS ${this.quoteIdentifier(D)};`}dropEnumType(d){return`DROP TYPE IF EXISTS ${this.quoteIdentifier(d)} CASCADE`}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
18
18
  id SERIAL PRIMARY KEY,
19
19
  migration VARCHAR(255) NOT NULL UNIQUE,
@@ -31,7 +31,7 @@ ${Ie};`:`${Ie};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentif
31
31
  );`}createIndex(d,h){let D=h.type==="unique"?"UNIQUE ":"",E=Hn(d,h.name),V=h.columns.map((xe)=>this.quoteIdentifier(xe)).join(", "),ke=h.where?` WHERE ${h.where}`:"";return`CREATE ${D}INDEX IF NOT EXISTS ${this.quoteIdentifier(E)} ON ${this.quoteIdentifier(d)} (${V})${ke};`}addForeignKey(d,h,D,E,V,ke){return""}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentifier(h.name),D];if(!h.isNullable&&!h.isPrimaryKey)E.push("not null");let V=this.getDefaultValue(h);if(V)E.push(V);return`ALTER TABLE ${this.quoteIdentifier(d)} ADD COLUMN ${E.join(" ")};`}modifyColumn(d,h){return`-- SQLite does not support ALTER COLUMN; a table rebuild is required to change ${this.quoteIdentifier(d)}.${this.quoteIdentifier(h.name)}`}renameColumn(d,h,D){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME COLUMN ${this.quoteIdentifier(h)} TO ${this.quoteIdentifier(D)};`}renameTable(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} RENAME TO ${this.quoteIdentifier(h)};`}rebuildTable(d){let{target:h,tempName:D,columnSource:E}=d,V=(Ve)=>this.quoteIdentifier(Ve),ke=h.columns.map((Ve)=>this.renderColumn(Ve)).join(`,
32
32
  `),xe=`CREATE TABLE ${V(D)} (
33
33
  ${ke}
34
- );`,Ke=h.columns.map((Ve)=>Ve.name).filter((Ve)=>E[Ve]!==void 0),Ie=["PRAGMA foreign_keys=OFF;","BEGIN;",xe];if(Ke.length>0){let Ve=Ke.map(V).join(", "),gt=Ke.map((pt)=>V(E[pt])).join(", ");Ie.push(`INSERT INTO ${V(D)} (${Ve}) SELECT ${gt} FROM ${V(h.table)};`)}Ie.push(`DROP TABLE ${V(h.table)};`),Ie.push(`ALTER TABLE ${V(D)} RENAME TO ${V(h.table)};`);for(let Ve of h.indexes)Ie.push(this.createIndex(h.table,Ve));return Ie.push("PRAGMA foreign_key_check;"),Ie.push("COMMIT;"),Ie.push("PRAGMA foreign_keys=ON;"),Ie.join(`
34
+ );`,Ke=h.columns.map((Ve)=>Ve.name).filter((Ve)=>E[Ve]!==void 0),ve=["PRAGMA foreign_keys=OFF;","BEGIN;",xe];if(Ke.length>0){let Ve=Ke.map(V).join(", "),gt=Ke.map((pt)=>V(E[pt])).join(", ");ve.push(`INSERT INTO ${V(D)} (${Ve}) SELECT ${gt} FROM ${V(h.table)};`)}ve.push(`DROP TABLE ${V(h.table)};`),ve.push(`ALTER TABLE ${V(D)} RENAME TO ${V(h.table)};`);for(let Ve of h.indexes)ve.push(this.createIndex(h.table,Ve));return ve.push("PRAGMA foreign_key_check;"),ve.push("COMMIT;"),ve.push("PRAGMA foreign_keys=ON;"),ve.join(`
35
35
  `)}dropTable(d){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(d)}`}dropColumn(d,h){return`ALTER TABLE ${this.quoteIdentifier(d)} DROP COLUMN ${this.quoteIdentifier(h)};`}dropIndex(d,h){let D=Hn(d,h);return`DROP INDEX IF EXISTS ${this.quoteIdentifier(D)};`}dropEnumType(d){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
36
36
  id INTEGER PRIMARY KEY AUTOINCREMENT,
37
37
  migration TEXT NOT NULL UNIQUE,
@@ -47,7 +47,7 @@ ${Ie};`:`${Ie};`}addColumn(d,h){let D=this.getColumnType(h),E=[this.quoteIdentif
47
47
  `).execute();for(let xe=0;xe<100;xe++)await r.unsafe(`
48
48
  INSERT INTO bench_users (name, email, created_at)
49
49
  VALUES (?, ?, ?)
50
- `,[`User ${xe}`,`user${xe}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(xe){throw console.error("-- Failed to setup test table:",xe),xe}let V=[];if(D.includes("select")){let xe=[];for(let Ke=0;Ke<h;Ke++){let Ie=performance.now();await E.selectFrom("bench_users").where({active:1}).limit(10).execute(),xe.push(performance.now()-Ie)}V.push({operation:"SELECT with WHERE + LIMIT",avgTime:xe.reduce((Ke,Ie)=>Ke+Ie,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("select")){let xe=[];for(let Ke=0;Ke<h;Ke++){let Ie=performance.now();await E.selectFrom("bench_users").where({id:1}).first(),xe.push(performance.now()-Ie)}V.push({operation:"SELECT by ID (first)",avgTime:xe.reduce((Ke,Ie)=>Ke+Ie,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("count")){let xe=[];for(let Ke=0;Ke<h;Ke++){let Ie=performance.now();await E.selectFrom("bench_users").count(),xe.push(performance.now()-Ie)}V.push({operation:"COUNT",avgTime:xe.reduce((Ke,Ie)=>Ke+Ie,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("insert")){let xe=[];for(let Ke=0;Ke<h;Ke++){let Ie=performance.now();await E.insertInto("bench_users").values({name:`Bench User ${Ke}`,email:`bench${Ke}@example.com`,created_at:new Date().toISOString()}).execute(),xe.push(performance.now()-Ie)}V.push({operation:"INSERT",avgTime:xe.reduce((Ke,Ie)=>Ke+Ie,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("update")){let xe=[];for(let Ke=0;Ke<h;Ke++){let Ie=performance.now();await E.updateTable("bench_users").set({active:0}).where({id:1}).execute(),xe.push(performance.now()-Ie)}V.push({operation:"UPDATE by ID",avgTime:xe.reduce((Ke,Ie)=>Ke+Ie,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("delete")){let xe=[],Ke=[];for(let Ie=0;Ie<h;Ie++){let Ve=await E.insertInto("bench_users").values({name:"To Delete",email:`delete${Ie}@example.com`,created_at:new Date().toISOString()}).execute();Ke.push(Ve)}for(let Ie=0;Ie<h;Ie++){let Ve=performance.now();await E.deleteFrom("bench_users").where({id:Ke[Ie]}).execute(),xe.push(performance.now()-Ve)}V.push({operation:"DELETE by ID",avgTime:xe.reduce((Ie,Ve)=>Ie+Ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}console.log("-- Benchmark Results"),console.log();let ke=Math.max(...V.map((xe)=>xe.operation.length));console.log("Operation".padEnd(ke+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(ke+2+12+12+12+12));for(let xe of V){let Ke=xe.operation.padEnd(ke+2),Ie=xe.avgTime.toFixed(3).padStart(12),Ve=xe.minTime.toFixed(3).padStart(12),gt=xe.maxTime.toFixed(3).padStart(12),pt=(1000/xe.avgTime).toFixed(0).padStart(12);console.log(`${Ke}${Ie}${Ve}${gt}${pt}`)}console.log();try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(xe){console.error("-- Warning: Failed to cleanup test table:",xe)}}function ai(d){return y(e.relations?.singularizeStrategy)(d)}function S(d,h,D,E={}){let V=E.singularize??ai,xe=d.relations?.[h]?.belongsToMany?.[D];if(xe==null)return null;let Ke=typeof xe==="object",Ie=Ke?xe:null,Ve=Ke?Ie.model:xe,gt=d.modelToTable[Ve]||Ve,pt,xt;if(Ie?.table)pt=Ie.table;else if(Ie?.through){if(xt=Ie.through,pt=d.modelToTable[Ie.through],!pt)throw Error(`[query-builder] belongsToMany relation '${D}' on '${h}' references unknown through model '${Ie.through}'. Make sure '${Ie.through}' is registered via defineModels({...}).`)}else{let Ue=V(h),ve=V(gt);pt=[Ue,ve].sort().join("_")}let ht=Ie?.foreignKey??`${V(h)}_id`,Jt=Ie?.relatedKey??`${V(gt)}_id`,jt={};if(Ie?.pivot?.columns)Object.assign(jt,Ie.pivot.columns);if(xt&&E.models){let Ue=E.models[xt],ve=Ue?.definition??Ue?.getDefinition?.()??Ue,Ne=ve?.attributes??{};for(let[St,He]of Object.entries(Ne)){if(St===ht||St===Jt||St===(ve?.primaryKey??"id"))continue;jt[St]={default:He?.default,nullable:He?.nullable,validation:He?.validation}}}let Tn=Boolean(Ie?.pivot?.timestamps),Fe=Object.keys(jt);return{pivotTable:pt,fkParent:ht,fkRelated:Jt,pivotColumns:Fe,pivotColumnDefs:jt,pivotModelName:xt,timestamps:Tn,relatedModelName:Ve,relatedTable:gt,hasConfig:Ke}}function*Zt(d,h={}){let D=d.relations;if(!D)return;for(let[E,V]of Object.entries(D)){let ke=V?.belongsToMany;if(!ke)continue;for(let xe of Object.keys(ke)){let Ke=S(d,E,xe,h);if(Ke)yield{parentTable:E,relationKey:xe,resolved:Ke}}}}function Xn(d){return typeof d==="object"&&d!==null&&"raw"in d&&typeof d.raw==="string"}function Fr(d,h,D){if(Array.isArray(h)){let V=s(h.length,D.length+1),ke=o(d,h,!1,V);return D.push(...h),ke}let E=`${d} = ${t(D.length+1)}`;return D.push(h),E}function Tr(d){return typeof d==="object"&&d!==null&&"sql"in d&&typeof d.sql==="string"&&(!("parameters"in d)||Array.isArray(d.parameters))}function br(d,h){let D=d.parameters??[];if(e.dialect!=="postgres"||D.length===0)return{text:d.sql,parameters:D};let E=0,V=d.sql.replace(/\?/g,(ke)=>{if(E>=D.length)return ke;return t(h+E++)});if(E!==D.length)throw TypeError(`[query-builder] SQL expression declares ${D.length} parameters but contains only ${E} placeholders`);return{text:V,parameters:D}}function en(d,...h){if(typeof d==="string")return{raw:d};let D=d[0];for(let E=0;E<h.length;E++)D+=nr(h[E])+d[E+1];return{raw:D}}function Vn(d){return n(e.dialect)?`\`${d.replace(/`/g,"``")}\``:`"${d.replace(/"/g,'""')}"`}function Or(d,h=1){let D=Object.keys(d[0]??{}),E=[],V=h,ke=d.map((xe)=>`(${D.map((Ie)=>(E.push(xe[Ie]),t(V++))).join(", ")})`);return{colsSql:D.map(Vn).join(", "),valuesSql:ke.join(", "),params:E,nextIndex:V}}function Sr(d){return Boolean(d&&(d.onSlowQuery||d.slowQueryThresholdMs!=null&&d.slowQueryThresholdMs>=0))}function l(d,h=e.dialect){if(!n(h))return d;let D=/^([A-Z_][\w$]*)(?:\.([A-Z_][\w$]*))?(?:\s+as\s+([A-Z_][\w$]*))?$/i.exec(d.trim());if(!D)return d;let[,E,V,ke]=D,xe=V?`\`${E}\`.\`${V}\``:`\`${E}\``;return ke?`${xe} AS \`${ke}\``:xe}function kt(d,h=e.dialect){if(!n(h)||d===null||d===void 0)return d;if(typeof d==="string"){let D=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}(?::\d{2})?)(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/.exec(d);if(!D)return d;let[,E,V]=D;return`${E} ${V.length===5?`${V}:00`:V}`}if(!(d instanceof Date)||Number.isNaN(d.getTime()))return d;return d.toISOString().replace("T"," ").replace(/\.\d+Z$/,"")}function rs(d){if(typeof d==="string")return l(d);if(Xn(d))return d.raw;if(d&&typeof d==="object"){let h=d;if(typeof h.raw==="function")return String(h.raw());if(typeof h.sql==="string")return h.sql;let D=String(d);if(D!=="[object Object]")return D}throw TypeError(`[query-builder] select(): unsupported column ${String(d)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function oi(d){let h=/\(|\)|\bORDER\s+BY\b/gi,D=0,E;while(E=h.exec(d))if(E[0]==="(")D++;else if(E[0]===")")D=Math.max(0,D-1);else if(D===0)return!0;return!1}var An={SELECT_STAR:/^SELECT\s+\*/i,SELECT:/^SELECT\s+/i,SELECT_FROM:/^SELECT\s+(.+?)\s+FROM/i,WHERE:/\bWHERE\b/i,ORDER_BY:/\bORDER\s+BY\b/i,GROUP_BY:/\bGROUP\s+BY\b/i,LIMIT:/\sLIMIT\s+\d+/i,OFFSET:/\sOFFSET\s+\d+/i,IDENTIFIER:/^[A-Z_][\w.]*$/i,DELETED_AT:/\bdeleted_at\b/i},ss=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function Xt(d,h){if(!An.IDENTIFIER.test(d)){let D=h?` in ${h}`:"";throw Error(`[query-builder] Invalid identifier${D}: '${d}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function Ln(d,h){if(typeof d!=="string")throw TypeError(`[query-builder] ${h}: operator must be a string, got ${typeof d}`);let D=d.toLowerCase();if(!ss.has(D))throw TypeError(`[query-builder] ${h}: refusing to use '${d}' as a SQL operator \u2014 not in the allowed set (${[...ss].join(", ")})`);return d}function Jn(d,h){if(typeof d!=="string"||d.length===0)throw TypeError(`[query-builder] ${h}: identifier must be a non-empty string, got ${typeof d}`);if(d.length>129)throw TypeError(`[query-builder] ${h}: identifier '${d}' too long`);let D=d.split(".");if(D.length>2)throw TypeError(`[query-builder] ${h}: identifier '${d}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let E of D)if(!/^[A-Z_][A-Z0-9_]*$/i.test(E))throw TypeError(`[query-builder] ${h}: identifier segment '${E}' contains characters outside [A-Za-z0-9_]`)}function ur(d,h){if(typeof d==="string")return li(h),d;if(d===null||d===void 0)throw TypeError(`[query-builder] ${h}: fragment must be a SqlFragment, got ${d}`);if(Xn(d))return d.raw;if(typeof d==="object"){let D=d;if(typeof D.raw==="string")return D.raw;if(typeof D.raw==="function"){let V=D.raw();if(typeof V==="string")return V}if(typeof D.sql==="string")return D.sql;let E=String(d);if(E!=="[object Object]"&&E!=="[object Promise]")return E}throw TypeError(`[query-builder] ${h}: cannot render this value as a SQL fragment. `+"A Bun `sql`...`` query object cannot be converted to SQL text \u2014 pass a "+"string, or use the exported `raw` helper: raw`count(*) as c` / raw('age > 18').")}var is=new Set;function li(d){if(is.has(d))return;is.add(d),console.warn(`[query-builder] ${d}: bare string passed to a *Raw method. Prefer the \`raw\`...\`\` tagged template, which escapes interpolated `+"values for the configured dialect \u2014 concatenating request input into SQL "+"is an injection vector. This will become a hard error in a future release.")}function Ct(d,h=e.dialect){return n(h)?d.replace(/\\/g,"\\\\").replace(/'/g,"''"):d.replace(/'/g,"''")}function nr(d){if(d===null)return"NULL";if(typeof d==="number"&&Number.isFinite(d))return String(d);if(typeof d==="boolean")return d?"1":"0";if(typeof d==="string")return`'${Ct(d)}'`;if(d instanceof Date)return`'${d.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof d}`)}function ui(d,h){let D=Array.isArray(d)?d:d?[d]:[],E=[];if(D.length)E.push(`PARTITION BY ${D.join(", ")}`);if(h&&h.length)E.push(`ORDER BY ${h.map(([V,ke])=>`${V} ${ke==="desc"?"DESC":"ASC"}`).join(", ")}`);return E.length?`OVER (${E.join(" ")})`:"OVER ()"}class as{cache=new Map;maxSize=100;get(d){let h=this.cache.get(d);if(!h)return null;if(Date.now()>h.expiresAt)return this.cache.delete(d),null;return this.cache.delete(d),this.cache.set(d,h),h.data}set(d,h,D){if(this.cache.has(d))this.cache.delete(d);if(this.cache.size>=this.maxSize){let E=Date.now(),V=!1;for(let[ke,xe]of this.cache)if(E>xe.expiresAt){if(this.cache.delete(ke),V=!0,this.cache.size<this.maxSize)break}if(!V){let ke=this.cache.keys().next().value;if(ke!==void 0)this.cache.delete(ke)}}this.cache.set(d,{data:h,expiresAt:Date.now()+D})}clear(){this.cache.clear()}setMaxSize(d){this.maxSize=Math.max(0,Math.floor(d));while(this.cache.size>this.maxSize){let h=this.cache.keys().next().value;if(h===void 0)break;this.cache.delete(h)}}}var Cr=new as;function ci(d){let h=String(d?.message||"").toLowerCase();return h.includes("deadlock")||h.includes("serialization failure")||h.includes("could not serialize access")||h.includes("deadlock found when trying to get lock")||h.includes("lock wait timeout exceeded")||h.includes("database is locked")||h.includes("busy")}function di(d,h){if(!h||h.length===0)return!1;let D=d&&(d.code||d.sqlState||d.sqlstate);if(!D)return!1;return h.includes(D)}function fi(d){return new Promise((h)=>setTimeout(h,d))}var Mr=new Map,mi=500,gi=[{key:"GROUP_BY",pattern:/GROUP\s+BY\b/iy},{key:"ORDER_BY",pattern:/ORDER\s+BY\b/iy},{key:"HAVING",pattern:/HAVING\b/iy},{key:"OFFSET",pattern:/OFFSET\b/iy},{key:"LIMIT",pattern:/LIMIT\b/iy},{key:"WHERE",pattern:/WHERE\b/iy}],yi=[{key:"tail",pattern:/GROUP\s+BY\b/iy},{key:"tail",pattern:/ORDER\s+BY\b/iy},{key:"tail",pattern:/HAVING\b/iy},{key:"tail",pattern:/LIMIT\b/iy},{key:"tail",pattern:/OFFSET\b/iy},{key:"tail",pattern:/WINDOW\b/iy},{key:"tail",pattern:/UNION\b/iy},{key:"tail",pattern:/INTERSECT\b/iy},{key:"tail",pattern:/EXCEPT\b/iy},{key:"tail",pattern:/FOR\s+UPDATE\b/iy},{key:"tail",pattern:/FOR\s+SHARE\b/iy},{key:"tail",pattern:/LOCK\s+IN\s+SHARE\s+MODE\b/iy}],pi=[{key:"cut",pattern:/GROUP\s+BY\b/iy},{key:"cut",pattern:/ORDER\s+BY\b/iy},{key:"cut",pattern:/WHERE\b/iy},{key:"cut",pattern:/HAVING\b/iy},{key:"cut",pattern:/LIMIT\b/iy},{key:"cut",pattern:/OFFSET\b/iy},{key:"cut",pattern:/UNION\b/iy}];function wr(d){let h=Mr.get(d);if(h!==void 0)return h;let D=hi(d);if(Mr.size>=mi)Mr.clear();return Mr.set(d,D),D}function hi(d){let h=Re(d,gi);if(h.length<=1)return d;let D=d.slice(0,h[0].start).trimEnd(),E={};for(let xe=0;xe<h.length;xe++){let Ke=h[xe].start,Ie=xe+1<h.length?h[xe+1].start:d.length,Ve=d.slice(Ke,Ie).trim();if(!E[h[xe].key])E[h[xe].key]=[];E[h[xe].key].push(Ve)}let ke=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((xe)=>E[xe]).map((xe)=>E[xe].join(" ")).join(" ");return ke?`${D} ${ke}`:D}function Ti(d,h){let D=Math.max(1,h?.baseMs??50),E=Math.max(1,h?.factor??2),V=Math.max(D,h?.maxMs??2000),ke=Math.min(V,D*E**Math.max(0,d-1));if(h?.jitter)ke=Math.min(V,ke*(0.9+Math.random()*0.2));return Math.floor(ke)}function i(d){let h=d?.sql??w(),D=d?.meta,E=d?.schema,V,ke=(Fe,Ue)=>{let ve=D?.temporalColumns?.[Fe];if(!ve||ve.length===0||!n(e.dialect))return Ue;return Ue.map((Ne)=>{let St=null;for(let He of ve){if(!(He in Ne))continue;let Gt=kt(Ne[He]);if(Gt!==Ne[He])St=St??{...Ne},St[He]=Gt}return St??Ne})};function xe(Fe){if(typeof Fe==="number")return Fe;let Ue=String(Fe),ve=7;for(let Ne=0;Ne<Ue.length;Ne++)ve=ve*31+Ue.charCodeAt(Ne)|0;return Math.abs(ve)}function Ke(){if(!d?.hooks)return e.hooks;return{...e.hooks,...d.hooks}}let Ie=new Map;function Ve(Fe){if(Array.isArray(Fe)){let[He,Gt,qt]=Fe;Xt(He,"where(column)");let Lt=String(He);switch(Gt){case"in":if(Array.isArray(qt)){let Dt=s(qt.length);return h.unsafe(`${Lt} IN (${Dt})`,qt)}return h.unsafe(`${Lt} IN (${t(1)})`,[qt]);case"not in":if(Array.isArray(qt)){let Dt=s(qt.length);return h.unsafe(`${Lt} NOT IN (${Dt})`,qt)}return h.unsafe(`${Lt} NOT IN (${t(1)})`,[qt]);case"like":return h.unsafe(`${Lt} LIKE ${t(1)}`,[qt]);case"is":case"is not":{if(qt!==null&&qt!==void 0)throw TypeError(`[query-builder] where(..., '${Gt}', ?): operator '${Gt}' only accepts NULL/undefined as value, got ${typeof qt} (${String(qt)})`);return h.unsafe(`${Lt} IS ${Gt==="is not"?"NOT ":""}NULL`)}case"!=":return h.unsafe(`${Lt} <> ${t(1)}`,[qt]);case"<":case">":case"<=":case">=":case"=":return h.unsafe(`${Lt} ${Gt} ${t(1)}`,[qt]);default:throw TypeError(`[query-builder] where(..., '${String(Gt)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in Fe)return Fe.raw;let Ue=Object.keys(Fe);if(Ue.length===0)return h.unsafe("");let ve=[],Ne=[],St=1;for(let He of Ue){Xt(He,"where(object key)");let Gt=Fe[He];if(Array.isArray(Gt)){let qt=s(Gt.length,St);ve.push(`${He} IN (${qt})`),Ne.push(...Gt),St+=Gt.length}else ve.push(`${He} = ${t(St++)}`),Ne.push(Gt)}return h.unsafe(ve.join(" AND "),Ne)}function gt(Fe,Ue,ve){if(!ve)return Ue;let Ne=Ve(ve);return h`${Ue} WHERE ${Ne}`}function pt(Fe){let Ue=e.debug?.captureText;if(e.debug)e.debug.captureText=!0;let ve=String(Fe);if(e.debug)e.debug.captureText=Ue;return ve}function xt(Fe){if(!Fe||typeof Fe!=="object")return;if(Array.isArray(Fe.values))return Fe.values;if(Array.isArray(Fe.parameters))return Fe.parameters;if(Array.isArray(Fe.params))return Fe.params;return}function ht(Fe,Ue,ve){let Ne=Ke(),St=Ne?.slowQueryThresholdMs,He=St!=null&&St>=0,Gt=Boolean(Ne?.onSlowQuery||He),qt=Ne&&(Ne.onQueryStart||Ne.onQueryEnd||Ne.onQueryError||Ne.startSpan||Gt),Lt=ve?.timeoutMs&&ve.timeoutMs>0||ve?.signal;if(!qt&&!Lt)return Fe.execute();let Dt=pt(Fe),yt=xt(Fe),wt=Date.now(),$t;try{if(Ne?.onQueryStart?.({sql:Dt,params:yt,kind:Ue}),Ne?.startSpan)$t=Ne.startSpan({sql:Dt,params:yt,kind:Ue})}catch{}let vt=!1,Wt=(Vt,zt,_t=Boolean(Vt))=>{if(vt)return;vt=!0;let yn=Date.now()-wt;try{if(_t)Ne?.onQueryError?.({sql:Dt,params:yt,error:Vt,durationMs:yn,kind:Ue});else if(Ne?.onQueryEnd?.({sql:Dt,params:yt,durationMs:yn,rowCount:zt,kind:Ue}),He&&yn>=St)if(Ne?.onSlowQuery)Ne.onSlowQuery({sql:Dt,params:yt,durationMs:yn,kind:Ue});else console.warn(`[query-builder] slow query (${yn}ms >= ${St}ms): ${Dt}`)}catch{}try{$t?.end(Vt)}catch{}};if(typeof Fe.executeSync==="function"){let Vt,zt,_t=!1;try{Vt=Fe.executeSync()}catch(Sn){zt=Sn,_t=!0}if(ve?.signal?.aborted){try{Fe.cancel?.()}catch{}zt=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),_t=!0}if(_t)return Wt(zt,void 0,!0),Promise.reject(zt);let yn=Array.isArray(Vt)?Vt.length:typeof Vt==="number"?Vt:void 0;return Wt(void 0,yn),Promise.resolve(Vt)}let Et=Fe.execute(),Ot=[Et],Ht;if(ve?.timeoutMs&&ve.timeoutMs>0){let Vt=new Promise((zt,_t)=>{Ht=setTimeout(()=>{try{Fe.cancel?.()}catch{}let yn=Error(`Query timed out after ${ve.timeoutMs}ms`);yn.code="EBQBTIMEOUT",_t(yn)},ve.timeoutMs)});Ot.push(Vt)}if(ve?.signal){if(ve.signal.aborted){try{Fe.cancel?.()}catch{}let zt=Error("Query aborted");return zt.code="EBQBABORT",Wt(zt),Promise.reject(zt)}let Vt=()=>{try{Fe.cancel?.()}catch{}};ve.signal.addEventListener("abort",Vt,{once:!0}),Et.finally(()=>{ve.signal?.removeEventListener("abort",Vt)})}return Promise.race(Ot).then((Vt)=>{clearTimeout(Ht);let zt=Array.isArray(Vt)?Vt.length:typeof Vt==="number"?Vt:void 0;return Wt(void 0,zt),Vt}).catch((Vt)=>{throw clearTimeout(Ht),Wt(Vt),Vt})}function Jt(Fe){if(typeof Fe==="number")return Number.isFinite(Fe)?Fe:0;if(typeof Fe==="bigint")return Number(Fe);if(!Fe||typeof Fe!=="object")return 0;let Ue=Fe;for(let ve of["changes","affectedRows","count","rowCount","numAffectedRows","numUpdatedRows","numDeletedRows","numInsertedOrUpdatedRows"])if(Ue[ve]!==void 0&&Ue[ve]!==null)return Jt(Ue[ve]);if(Array.isArray(Fe))return Fe.reduce((ve,Ne)=>ve+Jt(Ne),0);return 0}function jt(Fe,Ue){let ve=Ue??pt(Fe);return{sql:ve,toString:()=>ve,execute:()=>Fe.execute(),values:()=>Fe.values(),raw:()=>Fe.raw()}}function Tn(Fe,Ue){let ve=h,Ne=Ue&&Ue.length>0?`SELECT ${Ue.join(", ")} FROM ${String(Fe)}`:`SELECT * FROM ${String(Fe)}`,St=[],He=[],Gt=!1,qt=!1,Lt=!1,Dt=null,yt=()=>{if(Dt===null){let U=wr(Wt());Dt=He.length>0?h.unsafe(U,He):h.unsafe(U)}return Dt},wt=(U,G)=>{St.push({conn:U,sql:G}),Dt=null},$t=(U,G)=>{wt(U==="OR"?"OR":"AND",G)},vt=(U)=>{let G=Re(U,yi,1);return G.length>0?G[0].start:-1},Wt=(U)=>{let G=x(U?[...St,U]:St);if(!G)return Ne;if(Gt)return`${Ne} ${qt?"AND":"WHERE"} ${G}`;let Le=vt(Ne);return Le>=0?`${Ne.slice(0,Le)}WHERE ${G} ${Ne.slice(Le)}`:`${Ne} WHERE ${G}`},Et=(U,G)=>{let Le=Tn(Fe);G(Le);let je=Le.__whereState?.();if(!je||!je.body)throw TypeError("[query-builder] whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");let bt=He.length,It=bt>0&&e.dialect==="postgres"?je.body.replace(/\$(\d+)/g,(Ft,Ut)=>`$${Number(Ut)+bt}`):je.body;He.push(...je.params),wt(U,`(${It})`)},Ot=(U,G,Le,je,bt,It)=>{if(typeof je==="string"&&bt!==void 0){Xt(String(je),`${Le}(column)`),Ln(bt,`${Le}(operator)`);let Ft=He.length+1;return He.push(It),wt(G,`${String(je)} ${String(bt)} ${t(Ft)}`),U}if(Array.isArray(je)){let[Ft,Ut,Yt]=je,Kt=String(Ft);Xt(Kt,`${Le}(column)`);let Qt=Ln(Ut,`${Le}(operator)`);if(Qt==="in"||Qt==="not in"){let bn=Array.isArray(Yt)?Yt:[Yt],Rn=s(bn.length,He.length+1),vn=o(l(Kt),bn,Qt==="not in",Rn);He.push(...bn),wt(G,vn)}else{let bn=He.length+1;He.push(Yt),wt(G,`${Kt} ${Qt} ${t(bn)}`)}return U}if(typeof je==="function")return Et(G,je),U;if(je&&typeof je==="object"&&!("raw"in je)){let Ft=[];for(let Ut of Object.keys(je)){Xt(Ut,`${Le}(column)`);let Yt=je[Ut];if(Array.isArray(Yt)){let Kt=s(Yt.length,He.length+1);Ft.push(o(l(Ut),Yt,!1,Kt)),He.push(...Yt)}else{let Kt=He.length+1;Ft.push(`${Ut} = ${t(Kt)}`),He.push(Yt)}}if(Ft.length>0)wt(G,Ft.length>1?`(${Ft.join(" AND ")})`:Ft[0]);return U}if(je&&typeof je.raw<"u")return wt(G,je.raw),U;return U},Ht=(U,G)=>{if(St.length>0)Ne=Wt(),St.length=0;Gt=!0;let Le=G.__rawState?.();if(Le){let je=He.length,bt=e.dialect==="postgres"?Le.sql.replace(/\$(\d+)/g,(It,Ft)=>`$${Number(Ft)+je}`):Le.sql;Ne+=` ${U} ${bt}`,He.push(...Le.params),qt=G.__hasPredicate?.()??An.WHERE.test(bt)}else{let je=String(G.toSQL());Ne+=` ${U} ${je}`,qt=G.__hasPredicate?.()??An.WHERE.test(je)}Dt=null},Vt=(U)=>{let G=Re(Ne,pi,1),Le=G.length>0?G[0].start:-1;Ne=Le>=0?`${Ne.slice(0,Le)}${U} ${Ne.slice(Le)}`:`${Ne} ${U}`,Dt=null},zt=new Set,_t,yn,Sn=!1,En=!1,$n=!1,Cn=new Map,Fn=new Set,er=60000,Mn=(U)=>y(e.relations.singularizeStrategy)(U),Yn=(U)=>{if(!D)return null;return S(D,String(Fe),U,{singularize:Mn,models:D.models})},lr=(U)=>{if(!U||typeof U!=="object"||Fn.size===0)return U;let G;for(let Le of Object.keys(U))if(Le.startsWith("pivot_")){if(!G)G={};G[Le.slice(6)]=U[Le],delete U[Le]}if(G)U.pivot=G;return U},tr=(U)=>{if(Fn.size===0||!U)return U;if(Array.isArray(U))for(let G=0;G<U.length;G++)lr(U[G]);else lr(U);return U},yr=(U)=>{if(!D)return;if(zt.has(U.pivotTable))return;let G=String(Fe),Le=D.primaryKeys[G]??"id";Xt(U.pivotTable,"wherePivot auto-join (pivot table)"),Xt(U.fkParent,"wherePivot auto-join (parent FK)"),Xt(G,"wherePivot auto-join (parent table)"),Xt(Le,"wherePivot auto-join (parent PK)"),Dt=ve`${yt()} LEFT JOIN ${ve(U.pivotTable)} ON ${ve(`${U.pivotTable}.${U.fkParent}`)} = ${ve(`${G}.${Le}`)}`,Ne=`${Ne} LEFT JOIN ${U.pivotTable} ON ${U.pivotTable}.${U.fkParent} = ${G}.${Le}`,zt.add(U.pivotTable)},pr=(U)=>{if(An.SELECT_STAR.test(Ne))Ne=Ne.replace(An.SELECT_STAR,`SELECT *, ${U}`);else if(An.SELECT.test(Ne))Ne=Ne.replace(An.SELECT_FROM,`SELECT $1, ${U} FROM`);let G=String(yt());if(An.SELECT_STAR.test(G)){let Le=G.replace(An.SELECT_STAR,`SELECT *, ${U}`);Dt=h.unsafe(Le)}else if(An.SELECT.test(G)){if(An.SELECT_FROM.exec(G)){let je=G.replace(An.SELECT_FROM,`SELECT $1, ${U} FROM`);Dt=h.unsafe(je)}}},Gn=(U,G,Le,je)=>{pr(`${U} ${ui(Le,je)} AS ${G}`)},Nr=(U,G,Le,je)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)");let bt=`${U.endsWith("s")?U.slice(0,-1):U}_id`;Xt(bt,"relationship subquery (foreign key)");let It=`SELECT 1 FROM ${G} WHERE ${G}.${bt} = ${U}.${Le}`;if(je){let Ut=je({where:(Yt,Kt,Qt)=>(Xt(Yt,"relationship subquery condition"),`${G}.${Yt} ${Ln(Kt,"whereHas callback")} ${nr(Qt)}`)});if(Ut)It+=` AND ${Ut}`}return It},kr=(U,G,Le,je)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)");let bt=`${G.endsWith("s")?G.slice(0,-1):G}_id`;Xt(bt,"relationship subquery (foreign key)");let It=`SELECT 1 FROM ${G} WHERE ${G}.${Le} = ${U}.${bt}`;if(je){let Ut=je({where:(Yt,Kt,Qt)=>(Xt(Yt,"relationship subquery condition"),`${G}.${Yt} ${Ln(Kt,"whereHas callback")} ${nr(Qt)}`)});if(Ut)It+=` AND ${Ut}`}return It},Br=(U,G,Le,je,bt,It)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)"),Xt(je,"relationship subquery (target primary key)");let Ft=It&&D?S(D,U,It,{singularize:Mn,models:D.models}):null,Ut=Mn(U),Yt=Mn(G),Kt=Ft?.pivotTable??[Ut,Yt].sort().join("_"),Qt=Ft?.fkParent??`${Ut}_id`,bn=Ft?.fkRelated??`${Yt}_id`;Xt(Kt,"relationship subquery (pivot table)"),Xt(Qt,"relationship subquery (foreign key A)"),Xt(bn,"relationship subquery (foreign key B)");let Rn=`SELECT 1 FROM ${Kt} JOIN ${G} ON ${G}.${je} = ${Kt}.${bn} WHERE ${Kt}.${Qt} = ${U}.${Le}`;if(bt){let wn=bt({where:(_n,Un,jn)=>(Xt(_n,"relationship subquery condition"),`${G}.${_n} ${Ln(Un,"whereHas callback")} ${nr(jn)}`)});if(wn)Rn+=` AND ${wn}`}return Rn},Ys=(U,G,Le)=>{Xt(U,"withCount (parent table)"),Xt(G,"withCount (target table)"),Xt(Le,"withCount (primary key)");let je=`${U.endsWith("s")?U.slice(0,-1):U}_id`;return Xt(je,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${G} WHERE ${G}.${je} = ${U}.${Le})`},Gs=(U,G,Le,je)=>{Xt(U,"withCount (parent table)"),Xt(G,"withCount (target table)"),Xt(Le,"withCount (primary key)");let bt=je&&D?S(D,U,je,{singularize:Mn,models:D.models}):null,It=Mn(U),Ft=Mn(G),Ut=bt?.pivotTable??[It,Ft].sort().join("_"),Yt=bt?.fkParent??`${It}_id`;return Xt(Ut,"withCount (pivot table)"),Xt(Yt,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${Ut} WHERE ${Ut}.${Yt} = ${U}.${Le})`},Ar=(U,G,Le)=>{if(!D)return;Xt(Le,`with${U[0]}${U.slice(1).toLowerCase()} (column)`);let je=String(Fe),bt=D.relations?.[je];if(!bt)return;let It=Object.entries(bt).find(([wn,_n])=>_n&&typeof _n==="object"&&(G in _n));if(!It)return;let[Ft,Ut]=It,Yt=Ut[G],Kt=typeof Yt==="string"?Yt:Yt?.model||Yt?.target||Yt,Qt=D.modelToTable[Kt]||Kt,bn=D.primaryKeys[je]??"id";Xt(Qt,`with${U} (target table)`);let Rn=`${U}(${Qt}.${Le})`,vn;if(Ft==="hasMany"||Ft==="hasOne"){let wn=`${je.endsWith("s")?je.slice(0,-1):je}_id`;Xt(wn,`with${U} (foreign key)`),vn=`(SELECT ${Rn} FROM ${Qt} WHERE ${Qt}.${wn} = ${je}.${bn})`}else if(Ft==="belongsToMany"){let wn=D?S(D,je,G,{singularize:Mn,models:D.models}):null,_n=Mn(je),Un=Mn(Qt),jn=wn?.pivotTable??[_n,Un].sort().join("_"),Kn=wn?.fkParent??`${_n}_id`,xn=wn?.fkRelated??`${Un}_id`,hr=D.primaryKeys[Qt]??"id";Xt(jn,`with${U} (pivot table)`),Xt(Kn,`with${U} (foreign key)`),Xt(xn,`with${U} (related key)`),vn=`(SELECT ${Rn} FROM ${jn} JOIN ${Qt} ON ${Qt}.${hr} = ${jn}.${xn} WHERE ${jn}.${Kn} = ${je}.${bn})`}else return;pr(`${vn} AS ${G}_${U.toLowerCase()}_${Le}`)},ns=()=>{if(Cn.size===0)return;let U=[];for(let[G,Le]of Cn.entries()){let je=Yn(G);if(!je)continue;for(let It of Le)Xt(It,"withPivot");let bt=Le.map((It)=>`${je.pivotTable}.${It} AS pivot_${It}`);U.push(...bt)}if(U.length>0){let G=U.join(", ");pr(G)}};return new Proxy({distinct(){return Ne=Ne.replace(/^SELECT\s+/i,"SELECT DISTINCT "),Dt=null,this},distinctOn(...U){let G=U.map(String).join(", ");return Ne=Ne.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${G}) `),Dt=null,this},selectRaw(U){let G=ur(U,"selectRaw(fragment)"),Le=Ne.indexOf(" FROM ");if(Le!==-1)Ne=`${Ne.substring(0,Le)}, ${G}${Ne.substring(Le)}`;else Ne+=`, ${G}`;return Dt=null,this},rowNumber(U="row_number",G,Le){let je=[];if(G){let Ut=Array.isArray(G)?G:[G];je.push(`PARTITION BY ${Ut.join(", ")}`)}if(Le&&Le.length)je.push(`ORDER BY ${Le.map(([Ut,Yt])=>`${Ut} ${Yt==="desc"?"DESC":"ASC"}`).join(", ")}`);let It=`ROW_NUMBER() ${je.length?`OVER (${je.join(" ")})`:"OVER ()"} AS ${U}`,Ft=Ne.indexOf(" FROM ");if(Ft!==-1)Ne=`${Ne.substring(0,Ft)}, ${It}${Ne.substring(Ft)}`;else Ne+=`, ${It}`;return Dt=null,this},denseRank(U="dense_rank",G,Le){let je=Array.isArray(G)?G:G?[G]:[],bt=[];if(je.length)bt.push(`PARTITION BY ${je.join(", ")}`);if(Le&&Le.length)bt.push(`ORDER BY ${Le.map(([Yt,Kt])=>`${Yt} ${Kt==="desc"?"DESC":"ASC"}`).join(", ")}`);let Ft=`DENSE_RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ne.indexOf(" FROM ");if(Ut!==-1)Ne=`${Ne.substring(0,Ut)}, ${Ft}${Ne.substring(Ut)}`;else Ne+=`, ${Ft}`;return Dt=null,this},rank(U="rank",G,Le){let je=Array.isArray(G)?G:G?[G]:[],bt=[];if(je.length)bt.push(`PARTITION BY ${je.join(", ")}`);if(Le&&Le.length)bt.push(`ORDER BY ${Le.map(([Yt,Kt])=>`${Yt} ${Kt==="desc"?"DESC":"ASC"}`).join(", ")}`);let Ft=`RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ne.indexOf(" FROM ");if(Ut!==-1)Ne=`${Ne.substring(0,Ut)}, ${Ft}${Ne.substring(Ut)}`;else Ne+=`, ${Ft}`;return Dt=null,this},over(U,G,Le={}){return Gn(U,G,Le.partitionBy,Le.orderBy),this},lag(U,G={}){let Le=[U,String(G.offset??1)];if(G.defaultValue!==void 0)Le.push(String(G.defaultValue));return Gn(`LAG(${Le.join(", ")})`,G.alias??`${U}_lag`,G.partitionBy,G.orderBy),this},lead(U,G={}){let Le=[U,String(G.offset??1)];if(G.defaultValue!==void 0)Le.push(String(G.defaultValue));return Gn(`LEAD(${Le.join(", ")})`,G.alias??`${U}_lead`,G.partitionBy,G.orderBy),this},sumOver(U,G={}){return Gn(`SUM(${U})`,G.alias??`${U}_sum`,G.partitionBy,G.orderBy),this},avgOver(U,G={}){return Gn(`AVG(${U})`,G.alias??`${U}_avg`,G.partitionBy,G.orderBy),this},countOver(U="*",G={}){return Gn(`COUNT(${U})`,G.alias??"count_over",G.partitionBy,G.orderBy),this},minOver(U,G={}){return Gn(`MIN(${U})`,G.alias??`${U}_min`,G.partitionBy,G.orderBy),this},maxOver(U,G={}){return Gn(`MAX(${U})`,G.alias??`${U}_max`,G.partitionBy,G.orderBy),this},firstValue(U,G={}){return Gn(`FIRST_VALUE(${U})`,G.alias??`${U}_first`,G.partitionBy,G.orderBy),this},lastValue(U,G={}){return Gn(`LAST_VALUE(${U})`,G.alias??`${U}_last`,G.partitionBy,G.orderBy),this},selectAll(){return this},select(U){if(!U)return this;let G=Array.isArray(U)?U:[U];if(G.length===0)return this;let Le=G.map(rs),je=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(Ne),bt=je?je[1]:"",It=Ne.indexOf(" FROM ");if(It!==-1)Ne=`SELECT ${bt}${Le.join(", ")}${Ne.substring(It)}`;else Ne=`SELECT ${bt}${Le.join(", ")} FROM ${Fe}`;return Dt=null,this},addSelect(...U){if(!U.length)return this;let G=U.map(rs),Le=Ne.indexOf(" FROM ");if(Le!==-1)Ne=`${Ne.substring(0,Le)}, ${G.join(", ")}${Ne.substring(Le)}`;else Ne+=`, ${G.join(", ")}`;return Dt=null,this},with(...U){if(!D||!U||U.length===0)return this;let G=[];for(let Kt of U){if(!Kt)continue;if(typeof Kt==="string")G.push({name:Kt});else if(typeof Kt==="object"&&!Array.isArray(Kt))for(let[Qt,bn]of Object.entries(Kt))if(typeof bn==="function")G.push({name:Qt,callback:bn});else G.push({name:Qt})}if(G.length===0)return this;let Le=e.relations.maxEagerLoad??50;if(G.length>Le)throw Error(`[query-builder] Too many relationships to eager load (${G.length}). Maximum allowed: ${Le}`);let je=String(Fe),bt=new Set,It=new Set,Ft=new Map,Ut=(Kt)=>{let Qt=D.relations?.[Kt];if(!Qt)return[];return[...Object.keys(Qt.hasOne||{}),...Object.keys(Qt.hasMany||{}),...Object.keys(Qt.belongsTo||{}),...Object.keys(Qt.belongsToMany||{}),...Object.keys(Qt.hasOneThrough||{}),...Object.keys(Qt.hasManyThrough||{}),...Object.keys(Qt.morphOne||{}),...Object.keys(Qt.morphMany||{}),...Object.keys(Qt.morphToMany||{}),...Object.keys(Qt.morphedByMany||{})]},Yt=(Kt,Qt,bn=0,Rn)=>{let vn=e.relations.maxDepth??10;if(bn>=vn)throw Error(`[query-builder] Maximum relationship depth (${vn}) exceeded at '${Qt}'. Consider using separate queries or increasing maxDepth.`);let wn=D.relations?.[Kt];if(!wn)return Kt;let _n=(Nn)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let kn=e.softDeletes.column||"deleted_at";return` AND ${Nn}.${kn} IS NULL`}return""},Un=(Nn)=>{if(!Rn)return"";let kn=[],In=(Bn,Wn,zn)=>{Xt(String(Bn),"with() constraint column");let dr=Ln(Wn,"with() constraint operator");kn.push(`${Nn}.${String(Bn)} ${dr} ${nr(zn)}`)},On=(Bn)=>()=>{throw Error(`[query-builder] with('${Qt}', ...): ${Bn} is not supported inside a constraint callback on the JOIN-based builder \u2014 apply it to the outer query, or use the model layer's eager loading. (Silently ignoring it would return wrong data.)`)},Pn={where:(Bn,Wn,zn)=>{if(Array.isArray(Bn))In(Bn[0],Bn[1],Bn[2]);else if(Bn&&typeof Bn==="object")for(let dr of Object.keys(Bn))In(dr,"=",Bn[dr]);else if(Wn!==void 0&&zn!==void 0)In(Bn,Wn,zn);else if(Wn!==void 0)In(Bn,"=",Wn);return Pn},whereIn:(Bn,Wn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IN (${Wn.map(nr).join(", ")})`),Pn),whereNull:(Bn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IS NULL`),Pn),whereNotNull:(Bn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IS NOT NULL`),Pn),orderBy:On("orderBy()"),limit:On("limit()"),offset:On("offset()"),take:On("take()")};return Rn(Pn),kn.length?` AND ${kn.join(" AND ")}`:""},jn=()=>{let Nn=(On)=>{let Pn=On?.[Qt];return Pn?D.modelToTable[Pn]:void 0},kn=(On)=>{let Pn=On?.[Qt],Bn=typeof Pn==="string"?Pn:Pn?.model;return Bn?D.modelToTable[Bn]:void 0},In=(On)=>{let Pn=On?.[Qt];return Pn?.target?D.modelToTable[Pn.target]:void 0};return Nn(wn?.hasOne)||Nn(wn?.hasMany)||Nn(wn?.belongsTo)||kn(wn?.belongsToMany)||In(wn?.hasOneThrough)||In(wn?.hasManyThrough)||Nn(wn?.morphOne)||Nn(wn?.morphMany)||Nn(wn?.morphToMany)||Nn(wn?.morphedByMany)},Kn=jn()??(D.modelToTable[Qt]||D.tableToModel[Qt]?D.modelToTable[Qt]??Qt:Qt),xn=String(Kn);if(!Kn||!jn()&&!D.modelToTable[Qt]&&!D.tableToModel[Qt]){let Nn=Ut(Kt);if(Nn.length>0&&!Nn.includes(Qt)){let kn=` Available relationships: ${Nn.join(", ")}`;throw Error(`[query-builder] Relationship '${Qt}' not found on table '${Kt}'.${kn}`)}}if(e.relations.detectCycles!==!1){let Nn=`${Kt}->${xn}`;if(bt.has(Nn))throw Error(`[query-builder] Circular relationship detected: ${Nn}. This would cause an infinite loop.`);bt.add(Nn)}if(!xn||xn===Kt)return Kt;let hr=wn?.hasOneThrough?.[Qt]||wn?.hasManyThrough?.[Qt];if(hr){let{through:Nn,target:kn}=hr,In=D.modelToTable[Nn]||Nn,On=D.modelToTable[kn]||kn,Pn=D.primaryKeys[Kt]??"id",Bn=D.primaryKeys[In]??"id",Wn=`${Mn(Kt)}_id`,zn=`${Mn(In)}_id`;return Vt(`LEFT JOIN ${In} ON ${In}.${Wn} = ${Kt}.${Pn} LEFT JOIN ${On} ON ${On}.${zn} = ${In}.${Bn}`),zt.add(In),zt.add(On),On}if(Boolean(wn?.belongsToMany?.[Qt])){let Nn=S(D,Kt,Qt,{singularize:Mn,models:D.models}),kn=Nn?.pivotTable??[Mn(Kt),Mn(xn)].sort().join("_"),In=D.primaryKeys[Kt]??"id",On=D.primaryKeys[xn]??"id",Pn=Nn?.fkParent??`${Mn(Kt)}_id`,Bn=Nn?.fkRelated??`${Mn(xn)}_id`;return Vt(`LEFT JOIN ${kn} ON ${kn}.${Pn} = ${Kt}.${In} LEFT JOIN ${xn} ON ${xn}.${On} = ${kn}.${Bn}${Un(xn)}`),zt.add(kn),zt.add(xn),xn}if(Boolean(wn?.morphToMany?.[Qt])){let Nn=Qt,kn=`${Mn(xn)}_${Nn}`,In=D.primaryKeys[Kt]??"id",On=D.primaryKeys[xn]??"id",Pn=`${Nn}_type`,Bn=`${Nn}_id`,Wn=`${Mn(xn)}_id`,zn=nr(D.tableToModel[Kt]||Kt);return Vt(`LEFT JOIN ${kn} ON ${kn}.${Bn} = ${Kt}.${In} AND ${kn}.${Pn} = ${zn} LEFT JOIN ${xn} ON ${xn}.${On} = ${kn}.${Wn}`),zt.add(kn),zt.add(xn),xn}if(Boolean(wn?.morphedByMany?.[Qt])){let Nn=wn.morphedByMany?.[Qt]||Qt,kn=D.modelToTable[Nn]||Nn,In=Mn(Kt),On=`${Mn(kn)}_${In}`,Pn=D.primaryKeys[Kt]??"id",Bn=D.primaryKeys[kn]??"id",Wn=`${In}_type`,zn=`${In}_id`,dr=`${Mn(kn)}_id`,ni=nr(D.tableToModel[kn]||kn);return Vt(`LEFT JOIN ${On} ON ${On}.${dr} = ${Kt}.${Pn} LEFT JOIN ${kn} ON ${kn}.${Bn} = ${On}.${zn} AND ${On}.${Wn} = ${ni}`),zt.add(On),zt.add(kn),kn}if(Boolean(wn?.belongsTo?.[Qt])){let Nn=`${Mn(xn)}_id`,kn=D.primaryKeys[xn]??"id";return Vt(`LEFT JOIN ${xn} ON ${Kt}.${Nn} = ${xn}.${kn}${Un(xn)}`),zt.add(xn),xn}let zs=Boolean(wn?.morphOne?.[Qt]),Xs=Boolean(wn?.morphMany?.[Qt]);if(zs||Xs){let Nn=`${Qt}_type`,kn=`${Qt}_id`,In=D.primaryKeys[Kt]??"id",On=nr(D.tableToModel[Kt]||Kt);return Vt(`LEFT JOIN ${xn} ON ${xn}.${kn} = ${Kt}.${In} AND ${xn}.${Nn} = ${On}`),zt.add(xn),xn}let Zs=`${Mn(Kt)}_id`,ei=D.primaryKeys[Kt]??"id",ti=`${_n(xn)}${Un(xn)}`;return Vt(`LEFT JOIN ${xn} ON ${xn}.${Zs} = ${Kt}.${ei}${ti}`),zt.add(xn),xn};for(let Kt of G){let Qt=Kt.name.trim();if(Kt.callback)Ft.set(Qt,Kt.callback);let bn=Qt.split("."),Rn=je,vn=0;for(let wn of bn){if(!wn||wn.trim().length===0)continue;let _n=wn.trim(),Un=Ft.get(_n);Rn=Yt(Rn,_n,vn,Un)||Rn,vn++}It.add(Qt)}if(Cn.size>0){let Kt=[];for(let[Qt,bn]of Cn.entries()){let Rn=Yn(Qt);if(!Rn)continue;let vn=bn.map((wn)=>`${Rn.pivotTable}.${wn} AS pivot_${wn}`);Kt.push(...vn)}if(Kt.length>0){let Qt=Kt.join(", ");pr(Qt)}}return Dt=null,this},whereHas(U,G){if(!D)return this;let Le=String(Fe),je=D.relations?.[Le];if(!je)throw Error(`[query-builder] No relationships defined for table '${Le}'`);let bt=Object.entries(je).find(([bn,Rn])=>Rn&&typeof Rn==="object"&&(U in Rn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${Le}'`);let[It,Ft]=bt,Ut=Ft[U],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt;if(It==="hasMany"||It==="hasOne"){let bn=D.primaryKeys[Le]??"id";Qt=Nr(Le,Kt,bn,G)}else if(It==="belongsTo"){let bn=D.primaryKeys[Kt]??"id";Qt=kr(Le,Kt,bn,G)}else if(It==="belongsToMany"){let bn=D.primaryKeys[Le]??"id",Rn=D.primaryKeys[Kt]??"id";Qt=Br(Le,Kt,bn,Rn,G,U)}else throw Error(`[query-builder] Unsupported relationship type '${It}' for whereHas`);return $t("WHERE",`EXISTS (${Qt})`),this},whereDoesntHave(U,G){if(!D)return this;let Le=String(Fe),je=D.relations?.[Le];if(!je)throw Error(`[query-builder] No relationships defined for table '${Le}'`);let bt=Object.entries(je).find(([bn,Rn])=>Rn&&typeof Rn==="object"&&(U in Rn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${Le}'`);let[It,Ft]=bt,Ut=Ft[U],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt;if(It==="hasMany"||It==="hasOne"){let bn=D.primaryKeys[Le]??"id";Qt=Nr(Le,Kt,bn,G)}else if(It==="belongsTo"){let bn=D.primaryKeys[Kt]??"id";Qt=kr(Le,Kt,bn,G)}else if(It==="belongsToMany"){let bn=D.primaryKeys[Le]??"id",Rn=D.primaryKeys[Kt]??"id";Qt=Br(Le,Kt,bn,Rn,G,U)}else throw Error(`[query-builder] Unsupported relationship type '${It}' for whereDoesntHave`);return $t("WHERE",`NOT EXISTS (${Qt})`),this},has(U){if(!D)return this;let G=String(Fe),Le=D.relations?.[G];if(!Le)throw Error(`[query-builder] No relationships defined for table '${G}'`);let je=Object.entries(Le).find(([Qt,bn])=>bn&&typeof bn==="object"&&(U in bn));if(!je)throw Error(`[query-builder] Relationship '${U}' not found on table '${G}'`);let[bt,It]=je,Ft=It[U],Ut=typeof Ft==="string"?Ft:Ft?.model||Ft?.target||Ft,Yt=D.modelToTable[Ut]||Ut,Kt;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[G]??"id";Kt=Nr(G,Yt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Yt]??"id";Kt=kr(G,Yt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[G]??"id",bn=D.primaryKeys[Yt]??"id";Kt=Br(G,Yt,Qt,bn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for has`);return $t("WHERE",`EXISTS (${Kt})`),this},doesntHave(U){if(!D)return this;let G=String(Fe),Le=D.relations?.[G];if(!Le)throw Error(`[query-builder] No relationships defined for table '${G}'`);let je=Object.entries(Le).find(([Qt,bn])=>bn&&typeof bn==="object"&&(U in bn));if(!je)throw Error(`[query-builder] Relationship '${U}' not found on table '${G}'`);let[bt,It]=je,Ft=It[U],Ut=typeof Ft==="string"?Ft:Ft?.model||Ft?.target||Ft,Yt=D.modelToTable[Ut]||Ut,Kt;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[G]??"id";Kt=Nr(G,Yt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Yt]??"id";Kt=kr(G,Yt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[G]??"id",bn=D.primaryKeys[Yt]??"id";Kt=Br(G,Yt,Qt,bn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for doesntHave`);return $t("WHERE",`NOT EXISTS (${Kt})`),this},withCount(...U){if(!D||!U||U.length===0)return this;let G=String(Fe);for(let Le of U){let je=D.relations?.[G];if(!je)continue;let bt=Object.entries(je).find(([vn,wn])=>wn&&typeof wn==="object"&&(Le in wn));if(!bt)continue;let[It,Ft]=bt,Ut=Ft[Le],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt=D.primaryKeys[G]??"id",bn;if(It==="hasMany"||It==="hasOne")bn=Ys(G,Kt,Qt);else if(It==="belongsToMany")bn=Gs(G,Kt,Qt,Le);else continue;let Rn=`${Le}_count`;pr(`${bn} AS ${Rn}`)}return this},withSum(U,G){return Ar("SUM",U,G),this},withAvg(U,G){return Ar("AVG",U,G),this},withMax(U,G){return Ar("MAX",U,G),this},withMin(U,G){return Ar("MIN",U,G),this},applyPivotColumns(){return ns(),this},withPivot(U,...G){if(!D)return this;let Le=String(Fe),je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${Le}'`);let bt=G&&G.length>0?G:je.hasConfig?je.pivotColumns:[];if(bt.length===0)return this;if(Cn.set(U,bt),je.hasConfig)Fn.add(U);return ns(),this},wherePivot(U,G,Le,je){if(!D)return this;let bt=Yn(U);if(!bt)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(bt.pivotTable,"wherePivot (pivot table)"),Xt(G,"wherePivot (column)"),yr(bt);let It=je===void 0?"=":String(Le),Ft=je===void 0?Le:je,Ut=He.length+1,Yt=`${bt.pivotTable}.${G} ${It} ${t(Ut)}`;if(He.push(Ft),wt("AND",Yt),bt.hasConfig)Fn.add(U);return this},wherePivotIn(U,G,Le){if(!D||!Array.isArray(Le))return this;let je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(je.pivotTable,"wherePivotIn (pivot table)"),Xt(G,"wherePivotIn (column)"),yr(je);let bt=s(Le.length,He.length+1),It=o(`${je.pivotTable}.${G}`,Le,!1,bt);if(He.push(...Le),wt("AND",It),je.hasConfig)Fn.add(U);return this},wherePivotNotIn(U,G,Le){if(!D||!Array.isArray(Le)||Le.length===0)return this;let je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(je.pivotTable,"wherePivotNotIn (pivot table)"),Xt(G,"wherePivotNotIn (column)"),yr(je);let bt=s(Le.length,He.length+1),It=`${je.pivotTable}.${G} NOT IN (${bt})`;if(He.push(...Le),wt("AND",It),je.hasConfig)Fn.add(U);return this},wherePivotNull(U,G){if(!D)return this;let Le=Yn(U);if(!Le)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(Xt(Le.pivotTable,"wherePivotNull (pivot table)"),Xt(G,"wherePivotNull (column)"),yr(Le),wt("AND",`${Le.pivotTable}.${G} IS NULL`),Le.hasConfig)Fn.add(U);return this},wherePivotNotNull(U,G){if(!D)return this;let Le=Yn(U);if(!Le)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(Xt(Le.pivotTable,"wherePivotNotNull (pivot table)"),Xt(G,"wherePivotNotNull (column)"),yr(Le),wt("AND",`${Le.pivotTable}.${G} IS NOT NULL`),Le.hasConfig)Fn.add(U);return this},where(U,G,Le){if(typeof U==="string"&&G!==void 0){Xt(String(U),"where(column)"),Ln(G,"where(operator)");let je=String(G).toLowerCase();if(je==="in"||je==="not in"){let It=Array.isArray(Le)?Le:[Le],Ft=s(It.length,He.length+1),Ut=o(l(String(U)),It,je==="not in",Ft);return He.push(...It),wt("AND",Ut),this}let bt=He.length+1;return He.push(Le),wt("AND",`${l(String(U))} ${String(G)} ${t(bt)}`),this}if(Array.isArray(U)){let[je,bt,It]=U,Ft=String(je);Xt(Ft,"where(column)");let Ut=Ln(bt,"where(operator)");if(Ut==="in"||Ut==="not in"){let Yt=Array.isArray(It)?It:[It],Kt=s(Yt.length,He.length+1),Qt=o(l(Ft),Yt,Ut==="not in",Kt);He.push(...Yt),wt("AND",Qt)}else{let Yt=He.length+1;He.push(It),wt("AND",`${l(Ft)} ${Ut} ${t(Yt)}`)}return this}if(U&&typeof U==="object"&&!Xn(U)){let je=U,bt=Object.keys(je),It=[];for(let Ft of bt){Xt(Ft,"where(column)");let Ut=je[Ft];if(Array.isArray(Ut)){let Yt=s(Ut.length,He.length+1);It.push(o(l(Ft),Ut,!1,Yt)),He.push(...Ut)}else{let Yt=He.length+1;It.push(`${l(Ft)} = ${t(Yt)}`),He.push(Ut)}}if(It.length>0)wt("AND",It.length>1?`(${It.join(" AND ")})`:It[0]);return this}if(Xn(U))return wt("AND",U.raw),this;if(typeof U==="function")return Et("AND",U),this;if(U===void 0||U===null)throw TypeError("where() was called with no condition.");if(typeof U==="string")throw TypeError(`where(${JSON.stringify(U)}) is missing an operator and a value. Pass where(column, operator, value), or whereRaw() for a raw fragment.`);throw TypeError(`where() does not understand a condition of type ${typeof U}.`)},whereNull(U){return Xt(String(U),"whereNull(column)"),wt("AND",`${String(U)} IS NULL`),this},whereNotNull(U){return Xt(String(U),"whereNotNull(column)"),wt("AND",`${String(U)} IS NOT NULL`),this},orWhereNull(U){return Xt(String(U),"orWhereNull(column)"),wt("OR",`${String(U)} IS NULL`),this},orWhereNotNull(U){return Xt(String(U),"orWhereNotNull(column)"),wt("OR",`${String(U)} IS NOT NULL`),this},whereBetween(U,G,Le){Xt(String(U),"whereBetween(column)");let je=He.length+1;return He.push(G,Le),wt("AND",`${String(U)} BETWEEN ${t(je)} AND ${t(je+1)}`),this},orWhereBetween(U,G,Le){Xt(String(U),"orWhereBetween(column)");let je=He.length+1;return He.push(G,Le),wt("OR",`${String(U)} BETWEEN ${t(je)} AND ${t(je+1)}`),this},whereExists(U){return wt("AND",`EXISTS (${U.toSQL()})`),this},orWhereExists(U){return wt("OR",`EXISTS (${U.toSQL()})`),this},whereGroup(U){return Et("AND",U),this},orWhereGroup(U){return Et("OR",U),this},__whereState(){return{body:x(St),params:[...He]}},whereJsonContains(U,G){Xt(String(U),"whereJsonContains(column)");let Le=e.dialect,je=He.length+1;if(Le==="postgres"){let It=typeof G==="number"||typeof G==="boolean"?`to_jsonb(${t(je)})`:t(je);if(e.sql?.jsonContainsMode==="function")wt("AND",`jsonb_contains(${U}, ${It})`);else wt("AND",`${U} @> ${It}`);He.push(G)}else if(n(Le))wt("AND",`JSON_CONTAINS(${U}, ${t(je)})`),He.push(JSON.stringify(G));else if(Array.isArray(G)){let bt=G.map((It,Ft)=>`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(je+Ft)})`);wt("AND",`(${bt.join(" AND ")})`);for(let It of G)He.push(It)}else if(G!==null&&typeof G==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else wt("AND",`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(je)})`),He.push(G);return this},whereJsonPath(U,G,Le){if(Ln(G,"whereJsonPath(op)"),typeof U!=="string"||U.length===0||U.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof U==="string"?`'${U.slice(0,32)}...'`:typeof U}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(U))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${U}' \u2014 contains characters outside the allowed JSON-path set`);let je=e.dialect,bt=He.length+1;if(je==="postgres")wt("AND",`${U} ${G} ${t(bt)}`);else if(n(je))wt("AND",`JSON_EXTRACT(${U}) ${G} ${t(bt)}`);else wt("AND",`json_extract(${U}) ${G} ${t(bt)}`);return He.push(Le),this},whereLike(U,G,Le=!1){let je=t(He.length+1);return $t("WHERE",`${Le?String(U):`LOWER(${String(U)})`} LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},whereILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("WHERE",`${String(U)} ILIKE ${Le}`);else $t("WHERE",`LOWER(${String(U)}) LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},orWhereLike(U,G,Le=!1){let je=t(He.length+1);return $t("OR",`${Le?String(U):`LOWER(${String(U)})`} LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},orWhereILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("OR",`${String(U)} ILIKE ${Le}`);else $t("OR",`LOWER(${String(U)}) LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},whereNotLike(U,G,Le=!1){let je=t(He.length+1);return $t("WHERE",`${Le?String(U):`LOWER(${String(U)})`} NOT LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},whereNotILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("WHERE",`${String(U)} NOT ILIKE ${Le}`);else $t("WHERE",`LOWER(${String(U)}) NOT LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},orWhereNotLike(U,G,Le=!1){let je=t(He.length+1);return $t("OR",`${Le?String(U):`LOWER(${String(U)})`} NOT LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},orWhereNotILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("OR",`${String(U)} NOT ILIKE ${Le}`);else $t("OR",`LOWER(${String(U)}) NOT LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},whereAny(U,G,Le){if(U.length===0)return wt("AND",`(${Tt})`),this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`(${bt.join(" OR ")})`),this},whereAll(U,G,Le){if(U.length===0)return this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`(${bt.join(" AND ")})`),this},whereNone(U,G,Le){if(U.length===0)return this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`NOT (${bt.join(" OR ")})`),this},whereNotBetween(U,G,Le){Xt(String(U),"whereNotBetween(column)");let je=He.length+1;return He.push(G,Le),wt("AND",`${U} NOT BETWEEN ${t(je)} AND ${t(je+1)}`),this},whereDate(U,G,Le){Xt(U,"whereDate(column)");let je=Le instanceof Date?Le.toISOString():typeof Le==="string"?Le:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof Le}`)})(),bt=He.length+1;return He.push(je),wt("AND",`${U} ${G} ${t(bt)}`),this},whereRaw(U){return wt("AND",ur(U,"whereRaw(fragment)")),this},orWhereRaw(U){return wt("OR",ur(U,"orWhereRaw(fragment)")),this},whereColumn(U,G,Le){return Xt(U,"whereColumn(left)"),Xt(Le,"whereColumn(right)"),wt("AND",`${U} ${G} ${Le}`),this},orWhereColumn(U,G,Le){return Xt(U,"orWhereColumn(left)"),Xt(Le,"orWhereColumn(right)"),wt("OR",`${U} ${G} ${Le}`),this},whereIn(U,G){if(Xt(String(U),"whereIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!1,Le);He.push(...G),wt("AND",je)}else wt("AND",`${U} IN (${String(G.toSQL())})`);return this},orWhereIn(U,G){if(Xt(String(U),"orWhereIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!1,Le);He.push(...G),wt("OR",je)}else wt("OR",`${U} IN (${String(G.toSQL())})`);return this},whereNotIn(U,G){if(Xt(String(U),"whereNotIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!0,Le);He.push(...G),wt("AND",je)}else wt("AND",`${U} NOT IN (${String(G.toSQL())})`);return this},orWhereNotIn(U,G){if(Xt(String(U),"orWhereNotIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!0,Le);He.push(...G),wt("OR",je)}else wt("OR",`${U} NOT IN (${String(G.toSQL())})`);return this},whereNested(U){let G=U.toSQL?String(U.toSQL()):String(U);return wt("AND",`(${G})`),this},orWhereNested(U){let G=U.toSQL?String(U.toSQL()):String(U);return wt("OR",`(${G})`),this},andWhere(U,G,Le){return Ot(this,"AND","andWhere",U,G,Le)},orWhere(U,G,Le){return Ot(this,"OR","orWhere",U,G,Le)},orderBy(U,G="asc"){let Le=G==="asc"?"ASC":"DESC",je=l(String(U));return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${je} ${Le}`:`${Ne} ORDER BY ${je} ${Le}`,Dt=null,this},orderByDesc(U){return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${U} DESC`:`${Ne} ORDER BY ${U} DESC`,Dt=null,this},inRandomOrder(){let U=e.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${U}`:`${Ne} ORDER BY ${U}`,Dt=null,this},reorder(U,G="asc"){return Ne=Ne.replace(/ORDER BY[\s\S]*$/i,""),Ne+=` ORDER BY ${U} ${G==="asc"?"ASC":"DESC"}`,Dt=null,this},latest(U){let G=U??e.timestamps.defaultOrderColumn;return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G} DESC`:`${Ne} ORDER BY ${G} DESC`,Dt=null,this},oldest(U){let G=U??e.timestamps.defaultOrderColumn;return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G} ASC`:`${Ne} ORDER BY ${G} ASC`,Dt=null,this},limit(U){if(!Number.isFinite(U)||U<0||!Number.isInteger(U))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${U}`);return Ne=An.LIMIT.test(Ne)?Ne.replace(An.LIMIT,` LIMIT ${U}`):`${Ne} LIMIT ${U}`,Dt=null,this},offset(U){if(!Number.isFinite(U)||U<0||!Number.isInteger(U))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${U}`);return Ne=An.OFFSET.test(Ne)?Ne.replace(An.OFFSET,` OFFSET ${U}`):`${Ne} OFFSET ${U}`,Dt=null,this},join(U,G,Le,je){return Xt(U,"join(table)"),Jn(G,"join(onLeft)"),Jn(je,"join(onRight)"),Ln(Le,"join(operator)"),Vt(`JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},joinSub(U,G,Le,je,bt){return Xt(G,"joinSub(alias)"),Jn(Le,"joinSub(onLeft)"),Jn(bt,"joinSub(onRight)"),Ln(je,"joinSub(operator)"),Vt(`JOIN (${String(U.toSQL())}) AS ${G} ON ${Le} ${je} ${bt}`),zt.add(G),this},innerJoin(U,G,Le,je){return Xt(U,"innerJoin(table)"),Jn(G,"innerJoin(onLeft)"),Jn(je,"innerJoin(onRight)"),Ln(Le,"innerJoin(operator)"),Vt(`INNER JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},leftJoin(U,G,Le,je){return Xt(U,"leftJoin(table)"),Jn(G,"leftJoin(onLeft)"),Jn(je,"leftJoin(onRight)"),Ln(Le,"leftJoin(operator)"),Vt(`LEFT JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},leftJoinSub(U,G,Le,je,bt){return Xt(G,"leftJoinSub(alias)"),Jn(Le,"leftJoinSub(onLeft)"),Jn(bt,"leftJoinSub(onRight)"),Ln(je,"leftJoinSub(operator)"),Vt(`LEFT JOIN (${String(U.toSQL())}) AS ${G} ON ${Le} ${je} ${bt}`),zt.add(G),this},rightJoin(U,G,Le,je){return Xt(U,"rightJoin(table)"),Jn(G,"rightJoin(onLeft)"),Jn(je,"rightJoin(onRight)"),Ln(Le,"rightJoin(operator)"),Vt(`RIGHT JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},crossJoin(U){return Xt(U,"crossJoin(table)"),Vt(`CROSS JOIN ${U}`),zt.add(U),this},crossJoinSub(U,G){return Xt(G,"crossJoinSub(alias)"),Vt(`CROSS JOIN (${String(U.toSQL())}) AS ${G}`),zt.add(G),this},selectAllRelations(){if(!E)return this;let U=String(Fe),G=Object.keys(E[U]?.columns??{}),Le=[];if(G.length>0)Le.push(ve`${ve(U)}.*`);for(let je of zt){let bt=Object.keys(E[je]?.columns??{});for(let It of bt){let Ft=e.aliasing.relationColumnAliasFormat==="camelCase"?`${je}_${It}`.replace(/_([a-z])/g,(Ut,Yt)=>Yt.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${je}.${It}`:`${je}_${It}`;Le.push(ve`${ve(`${je}.${It}`)} AS ${ve(Ft)}`)}}if(Le.length>0){let je=G.length>0?`${U}.*`:"",bt=[];for(let Ut of zt){let Yt=Object.keys(E[Ut]?.columns??{});for(let Kt of Yt){let Qt=e.aliasing.relationColumnAliasFormat==="camelCase"?`${Ut}_${Kt}`.replace(/_([a-z])/g,(bn,Rn)=>Rn.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${Ut}.${Kt}`:`${Ut}_${Kt}`;bt.push(`${Ut}.${Kt} AS ${Qt}`)}}let It=[je,...bt].filter(Boolean).join(", "),Ft=Ne.indexOf(" FROM ");if(Ft!==-1)Ne=`SELECT ${It}${Ne.substring(Ft)}`;else Ne=`SELECT ${It} FROM ${U}`;Dt=null}return this},groupBy(...U){if(U.length)Ne=An.GROUP_BY.test(Ne)?`${Ne}, ${U.map((G)=>l(String(G))).join(", ")}`:`${Ne} GROUP BY ${U.map((G)=>l(String(G))).join(", ")}`,Dt=null;return this},groupByRaw(U){let G=ur(U,"groupByRaw(fragment)");return Ne=An.GROUP_BY.test(Ne)?`${Ne}, ${G}`:`${Ne} GROUP BY ${G}`,Dt=null,this},having(U){let G=Lt?"AND":"HAVING";if(Array.isArray(U)){let Le=He.length+1;Ne=`${Ne} ${G} ${U[0]} ${U[1]} ${t(Le)}`,He.push(U[2]),Lt=!0,Dt=null}else if(U&&typeof U==="object"&&!("raw"in U)){let Le=Object.keys(U),je=Le.length;if(je){let bt=He.length,It=Array.from({length:je});for(let Ft=0;Ft<je;Ft++){let Ut=Le[Ft];It[Ft]=`${Ut} = ${t(bt+Ft+1)}`,He.push(U[Ut])}Ne=`${Ne} ${G} ${It.join(" AND ")}`,Lt=!0,Dt=null}}else if(U&&typeof U.raw<"u")Ne+=` ${G} ${U.raw}`,Lt=!0,Dt=null;return this},havingRaw(U){let G=ur(U,"havingRaw(fragment)");return Ne+=` ${Lt?"AND":"HAVING"} ${G}`,Lt=!0,Dt=null,this},orderByRaw(U){let G=ur(U,"orderByRaw(fragment)");return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G}`:`${Ne} ORDER BY ${G}`,Dt=null,this},$call(U){return U(this),this},union(U){return Ht("UNION",U),this},unionAll(U){return Ht("UNION ALL",U),this},intersect(U){return Ht("INTERSECT",U),this},intersectAll(U){return Ht("INTERSECT ALL",U),this},except(U){return Ht("EXCEPT",U),this},exceptAll(U){return Ht("EXCEPT ALL",U),this},forPage(U,G){let Le=Math.max(1,Math.floor(U)),je=Math.max(1,Math.floor(G));return Ne+=` LIMIT ${je} OFFSET ${(Le-1)*je}`,Dt=null,this},toSQL(){let U=wr(Wt());return{sql:U,toString:()=>U,execute:()=>yt().execute(),values:()=>yt().values(),raw:()=>yt().raw()}},async value(U){let G=ve`${yt()} LIMIT 1`,Le=await ht(G,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return je?.[U]},async pluck(U,G){let Le=await ht(yt(),"select",{signal:yn,timeoutMs:_t});if(G){let je={};for(let bt of Le){let It=String(bt?.[G]);if(Object.prototype.hasOwnProperty.call(je,It))throw Error(`[query-builder] pluck(${U}, ${G}): duplicate key '${It}' \u2014 multiple rows share this value, so the resulting map would silently drop data. Use a unique key column or pluck without a key to get an array.`);je[It]=bt?.[U]}return je}return Le.map((je)=>je?.[U])},async exists(){let U=ve`SELECT EXISTS (${yt()}) as e`,G=await ht(U,"select",{signal:yn,timeoutMs:_t}),[Le]=G;return Boolean(Le?.e)},async doesntExist(){return!await this.exists()},async paginate(U,G=1,Le={}){if(typeof U==="object"&&U!==null){let bn=U;G=bn.page??1,Le=bn.tx?{tx:bn.tx}:{},U=bn.perPage??10}if(!Number.isFinite(U)||U<=0||!Number.isInteger(U))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${U}`);if(!Number.isFinite(G)||G<1||!Number.isInteger(G))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${G}`);if(Le.tx){let bn=wr(Wt()),Rn=[...He],vn=await Le.tx.unsafe(`SELECT COUNT(*) as c FROM (${bn}) as sub`,Rn),wn=Number(vn?.[0]?.c??0),_n=Math.max(1,Math.ceil(wn/U)),Un=Math.max(1,Math.min(G,_n)),jn=(Un-1)*U;return{data:await Le.tx.unsafe(`${bn} LIMIT ${U} OFFSET ${jn}`,Rn),meta:{perPage:U,page:Un,total:wn,lastPage:_n}}}let je=ve`SELECT COUNT(*) as c FROM (${yt()}) as sub`,bt=await ht(je,"select",{signal:yn,timeoutMs:_t}),[It]=bt,Ft=Number(It?.c??0),Ut=Math.max(1,Math.ceil(Ft/U)),Yt=Math.max(1,Math.min(G,Ut)),Kt=(Yt-1)*U;return{data:await ht(ve`${yt()} LIMIT ${U} OFFSET ${Kt}`,"select",{signal:yn,timeoutMs:_t}),meta:{perPage:U,page:Yt,total:Ft,lastPage:Ut}}},async simplePaginate(U,G=1){let Le=Math.max(1,G),je=(Le-1)*U,bt=await ht(ve`${yt()} LIMIT ${U+1} OFFSET ${je}`,"select",{signal:yn,timeoutMs:_t}),It=bt.length>U;return{data:It?bt.slice(0,U):bt,meta:{perPage:U,page:Le,hasMore:It}}},async cursorPaginate(U,G,Le="id",je="asc"){if(!Number.isInteger(U)||U<=0)throw TypeError(`[query-builder] cursorPaginate(perPage): expected positive integer, got ${U}`);let bt=(Array.isArray(Le)?Le:[Le]).map(String);for(let Kn of bt)Xt(Kn,"cursorPaginate(column)");let It=je==="asc"?">":"<",Ft=je==="asc"?"ASC":"DESC",Ut=[...He],Yt="";if(G!==void 0&&G!==null)if(Array.isArray(Le)){let Kn=G.map((xn)=>(Ut.push(xn),t(Ut.length)));Yt=`(${bt.join(", ")}) ${It} (${Kn.join(", ")})`}else Ut.push(G),Yt=`${bt[0]} ${It} ${t(Ut.length)}`;let Kt=wr(Yt?Wt({conn:"AND",sql:Yt}):Wt()),Qt=bt.map((Kn)=>`${Kn} ${Ft}`).join(", ");if(oi(Kt))throw TypeError("[query-builder] cursorPaginate() cannot be combined with orderBy() \u2014 it orders by "+`${Qt} itself, and a cursor is only meaningful in that order. Remove the orderBy(), or pass the column and direction to cursorPaginate().`);let bn=Ut.length>0?h.unsafe(`${Kt} ORDER BY ${Qt} LIMIT ${U+1}`,Ut):h.unsafe(`${Kt} ORDER BY ${Qt} LIMIT ${U+1}`),Rn=await ht(bn,"select",{signal:yn,timeoutMs:_t}),vn=Rn.length>U,wn=Rn.slice(0,U),_n=wn[wn.length-1],Un=vn&&_n?Array.isArray(Le)?Le.map((Kn)=>_n[Kn]):_n[Le]:null,jn=wn.length?Array.isArray(Le)?Le.map((Kn)=>wn[0]?.[Kn]):wn[0]?.[Le]:null;return{data:wn,meta:{perPage:U,nextCursor:Un??null,prevCursor:jn}}},async chunk(U,G){let Le=1;while(!0){let{data:je,meta:bt}=await this.paginate(U,Le);if(je.length===0)break;if(await G(je),Le>=bt.lastPage)break;Le+=1}},async chunkById(U,G="id",Le){let je;while(!0){let{data:bt,meta:It}=await this.cursorPaginate(U,je,G,"asc");if(bt.length===0)break;if(Le)await Le(bt);if(je=It.nextCursor,!je)break}},async eachById(U,G="id",Le){await this.chunkById(U,G,async(je)=>{for(let bt of je)await Le?.(bt)})},withTimeout(U){return _t=Math.max(1,Math.floor(U)),this},abort(U){return yn=U,this},withTrashed(){return Sn=!0,En=!1,this},onlyTrashed(){Sn=!0,En=!0;let U=e.softDeletes?.column||"deleted_at",G=(bt,It)=>{let Ft=bt.toUpperCase(),Ut=0;for(let Yt=0;Yt<bt.length;Yt++){let Kt=bt[Yt];if(Kt==="(")Ut++;else if(Kt===")")Ut--;else if(Ut===0&&Ft.substring(Yt,Yt+5)==="WHERE"&&(Yt===0||/\s/.test(bt[Yt-1]??""))&&/\s/.test(bt[Yt+5]??""))return`${bt.substring(0,Yt)}WHERE ${It} AND ${bt.substring(Yt+6)}`}return`${bt} WHERE ${It}`},Le=`${Fe}.${U} IS NOT NULL`;Ne=G(Ne,Le);let je=String(yt());return Dt=ve([G(je,Le)]),this},scope(U,G){let Le=String(Fe),bt=D?.scopes?.[Le]?.[U];if(bt)return bt(this,G);return this},when(U,G,Le){if(U)return G(this);if(Le)return Le(this);return this},tap(U){return U(this),this},dump(){return console.log(String(yt())),this},dd(){throw console.log(String(yt())),Error("Dump and Die")},cache(U=60000){return er=U,$n=!0,this},async explain(){let U=ve`EXPLAIN ${yt()}`;return await ht(U,"select",{signal:yn,timeoutMs:_t})},simple(){return yt().simple()},toText(){return Wt()},async get(){let U=Ke(),G=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||Sr(U));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let Ft=h._prepareStatement;if(Ft){let Ut=Ft(Wt());return tr(He.length>0?Ut.all(...He):Ut.all())}}let Le=Wt();if(Dt=He.length>0?h.unsafe(Le,He):h.unsafe(Le),!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let Ft=yt()._stmt,Ut=yt()._params;if(Ft)return tr(Ut&&Ut.length>0?Ft.all(...Ut):Ft.all());return tr(await yt().execute())}if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn)return tr(await ht(yt(),"select"));let je=yt();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!Sn){let Ft=e.softDeletes.column,Ut=String(Fe);if((E?Boolean(E[Ut]?.columns?.[Ft]):!0)&&!An.DELETED_AT.test(Wt()))$t("WHERE",`${String(Ft)} IS ${En?"NOT ":""}NULL`),je=yt()}let bt=$n?`${String(je)}\x00${JSON.stringify(He)}`:"";if($n){let Ft=Cr.get(bt);if(Ft)return Ft}let It=await ht(je,"select",{signal:yn,timeoutMs:_t});if($n)Cr.set(bt,It,er);return tr(It)},async executeTakeFirst(){let U=await ht(yt(),"select",{signal:yn,timeoutMs:_t});return lr(Array.isArray(U)?U[0]:U)},async executeTakeFirstOrThrow(){let U=await this.executeTakeFirst();if(!U)throw Error("Record not found");return U},async first(){let U=Ke(),G=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||Sr(U));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let bt=h._prepareStatement;if(bt){let It=Wt(),Ft=It.includes(" LIMIT ")?It:`${It} LIMIT 1`,Ut=bt(Ft),Yt=He.length>0?Ut.all(...He):Ut.all();return lr(Yt[0])}}let Le=await ht(ve`${yt()} LIMIT 1`,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return lr(je)},async firstOrFail(){let U=await this.first();if(!U)throw Error("Record not found");return U},async find(U){let G=D?.primaryKeys[String(Fe)]??"id",Le=await ht(ve`${yt()} WHERE ${ve(G)} = ${U} LIMIT 1`,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return je},async findOrFail(U){let G=await this.find(U);if(!G)throw Error("Record not found");return G},async findMany(U){let G=D?.primaryKeys[String(Fe)]??"id";return await ht(ve`${yt()} WHERE ${ve(String(G))} IN ${ve(U)}`,"select",{signal:yn,timeoutMs:_t})},async*lazy(){let U,G=D?.primaryKeys[String(Fe)]??"id";while(!0){let je=await(U==null?ve`${yt()} ORDER BY ${ve(String(G))} ASC LIMIT 100`:ve`${yt()} WHERE ${ve(String(G))} > ${U} ORDER BY ${ve(String(G))} ASC LIMIT 100`).execute();if(je.length===0)break;for(let bt of je)yield bt;if(U=je[je.length-1]?.[G],U==null)break}},async*lazyById(){let U=D?.primaryKeys[String(Fe)]??"id",G;while(!0){let je=await(G==null?ve`${yt()} ORDER BY ${ve(String(U))} ASC LIMIT 100`:ve`${yt()} WHERE ${ve(String(U))} > ${G} ORDER BY ${ve(String(U))} ASC LIMIT 100`).execute();if(je.length===0)break;for(let bt of je)yield bt;if(G=je[je.length-1]?.[U],G==null)break}},pipe(U){return U(this)},async count(){let U=Wt(),G=U.indexOf(" FROM "),Le=/ GROUP BY /i.test(U),je;if(Le)je=`SELECT COUNT(*) as c FROM (${U}) AS _bqb_count_sub`;else if(G!==-1)je=`SELECT COUNT(*) as c${U.substring(G)}`;else je=`SELECT COUNT(*) as c FROM ${Fe}`;let bt=Ke(),It=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||Sr(bt));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!It){let Kt=h._prepareStatement;if(Kt){let Qt=Kt(je),bn=He.length>0?Qt.all(...He):Qt.all();return Number(bn[0]?.c??0)}}let Ft=He.length>0?h.unsafe(je,He):h.unsafe(je),Ut=await ht(Ft,"select",{signal:yn,timeoutMs:_t}),[Yt]=Ut;return Number(Yt?.c??0)},async avg(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT AVG(${U}) as a${G.substring(Le)}`:`SELECT AVG(${U}) as a FROM ${Fe}`,bt=Ke(),It=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||Sr(bt));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!It){let Kt=h._prepareStatement;if(Kt){let Qt=Kt(je),bn=He.length>0?Qt.all(...He):Qt.all();return Number(bn[0]?.a??0)}}let Ft=He.length>0?h.unsafe(je,He):h.unsafe(je),Ut=await ht(Ft,"select",{signal:yn,timeoutMs:_t}),[Yt]=Ut;return Number(Yt?.a??0)},async sum(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT SUM(${U}) as s${G.substring(Le)}`:`SELECT SUM(${U}) as s FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Number(Ft?.s??0)},async max(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT MAX(${U}) as m${G.substring(Le)}`:`SELECT MAX(${U}) as m FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Ft?.m},async min(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT MIN(${U}) as m${G.substring(Le)}`:`SELECT MIN(${U}) as m FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Ft?.m},lockForUpdate(){return Ne+=" FOR UPDATE",Dt=null,this},sharedLock(){let U=e.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return Ne+=` ${U}`,Dt=null,this},withCTE(U,G){return Xt(U,"withCTE(name)"),Ne=`WITH ${U} AS (${String(G.toSQL())}) ${Ne}`,Dt=null,this},withRecursive(U,G){return Xt(U,"withRecursive(name)"),Ne=`WITH RECURSIVE ${U} AS (${String(G.toSQL())}) ${Ne}`,Dt=null,this},execute(){return ht(yt(),"select",{signal:yn,timeoutMs:_t})},values(){return yt().values()},toParams(){return[...He]},__rawState(){return{sql:wr(Wt()),params:[...He]}},__hasPredicate(){return St.length>0||qt},raw(){return yt().raw()},get rows(){return},get row(){return},cancel(){try{yt().cancel()}catch{}}},{get(U,G,Le){let je=Reflect.get(U,G,Le);if(je!==void 0)return je;if(typeof G==="string"&&(G.startsWith("where")||G.startsWith("orWhere")||G.startsWith("andWhere"))){let bt=G.startsWith("orWhere"),It=G.startsWith("andWhere"),Ft=`${String(Fe)}|${G}`,Ut=Ie.get(Ft);if(Ut===void 0){let Kt=G.replace(/^(?:or|and)?where/i,"");if(!Kt)Ie.set(Ft,""),Ut="";else{let Qt=Kt.charAt(0).toLowerCase()+Kt.slice(1),bn=Kt.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),Rn=E?Object.keys(E[String(Fe)]?.columns??{}):[];Ut=[bn,Qt,Qt.toLowerCase()].find((vn)=>Rn.includes(vn))??bn,Ie.set(Ft,Ut)}}if(Ut==="")return()=>Le;let Yt=Ut;return(Kt)=>{if(Array.isArray(Kt)){let Qt=s(Kt.length,He.length+1);$t(bt?"OR":It?"AND":"WHERE",`${Yt} IN (${Qt})`),He.push(...Kt)}else{let Qt=t(He.length+1);$t(bt?"OR":It?"AND":"WHERE",`${Yt} = ${Qt}`),He.push(Kt)}return Le}}return Reflect.get(U,G,Le)}})}return{configure(Fe){return qe(Fe),this},id(Fe){if(!An.IDENTIFIER.test(Fe))throw Error(`[query-builder] Invalid identifier: '${Fe}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return h(String(Fe))},ids(...Fe){for(let Ue of Fe)if(!An.IDENTIFIER.test(Ue))throw Error(`[query-builder] Invalid identifier: '${Ue}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return h(Fe)},select(Fe,...Ue){return Tn(Fe,Ue)},selectFrom(Fe){return Tn(Fe)},selectFromSub(Fe,Ue){function ve(yt){return()=>{throw Error(`[query-builder] selectFromSub(...).${yt}() is not supported. Apply ${yt}() to the underlying subquery BEFORE passing it to selectFromSub, or use the regular selectFrom(...) builder. This previously silently returned without `+"affecting the SQL, producing wrong results \u2014 see stacksjs/stacks#1862 #11.")}}Xt(String(Ue),"selectFromSub(alias)");let Ne=typeof Fe.__rawState==="function"?Fe.__rawState():null,St=Fe.toSQL(),He=Ne?.sql??(typeof St==="string"?St:St?.sql??String(St)),Gt=Ne?.params??(Array.isArray(St?.values)?St.values:[]),qt=`SELECT * FROM (${He}) AS ${String(Ue)}`,Lt=(yt,wt,$t,vt)=>{let Wt=[...yt],Et=(Ht,Vt,zt)=>{Xt(Ht,"selectFromSub where(column)");let _t=Ln(Vt,"selectFromSub where(operator)");if(_t==="in"||_t==="not in"){let Sn=Array.isArray(zt)?zt:[zt],En=s(Sn.length,Wt.length+1);return Wt.push(...Sn),`${Ht} ${_t.toUpperCase()} (${En})`}let yn=t(Wt.length+1);return Wt.push(zt),`${Ht} ${_t} ${yn}`},Ot;if(typeof wt==="string"&&$t!==void 0)Ot=Et(wt,$t,vt);else if(Array.isArray(wt)&&wt.length===3)Ot=Et(wt[0],wt[1],wt[2]);else if(wt&&typeof wt==="object"){let Ht=Object.entries(wt).map(([Vt,zt])=>Et(Vt,"=",zt));Ot=Ht.length>1?`(${Ht.join(" AND ")})`:Ht[0]}else return{clause:null,params:yt};return{clause:Ot,params:Wt}};function Dt(yt,wt,$t,vt=""){let Wt=x(wt),Et=Wt?`${yt} WHERE ${Wt}${vt}`:`${yt}${vt}`,Ot=()=>$t.length>0?h.unsafe(Et,$t):h.unsafe(Et),Ht=(_t,yn,Sn,En)=>{let $n=Lt($t,yn,Sn,En);return $n.clause===null?Dt(yt,wt,$t,vt):Dt(yt,[...wt,{conn:_t,sql:$n.clause}],$n.params,vt)},Vt=(_t,yn)=>{let Sn=[],En=[...$t],$n=(er)=>(Mn,Yn,lr)=>{let tr=Lt(En,Mn,Yn,lr);if(tr.clause!==null)Sn.push({conn:er,sql:tr.clause}),En=tr.params;return Cn},Cn={where:$n("AND"),andWhere:$n("AND"),orWhere:$n("OR")};yn(Cn);let Fn=x(Sn);if(!Fn)throw TypeError("[query-builder] selectFromSub.whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");return Dt(yt,[...wt,{conn:_t,sql:`(${Fn})`}],En,vt)},zt={distinct(){return Dt(yt.replace(/^SELECT\s+/i,"SELECT DISTINCT "),wt,$t,vt)},distinctOn(..._t){let yn=_t.map(String).join(", ");return Dt(yt.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${yn}) `),wt,$t,vt)},selectRaw(_t){let yn=ur(_t,"selectFromSub.selectRaw(fragment)"),Sn=yt.indexOf(" FROM "),En=Sn!==-1?`${yt.slice(0,Sn)}, ${yn}${yt.slice(Sn)}`:`${yt}, ${yn}`;return Dt(En,wt,$t,vt)},$call(_t){return _t(this)??this},where(_t,yn,Sn){return Ht("AND",_t,yn,Sn)},andWhere(_t,yn,Sn){return Ht("AND",_t,yn,Sn)},orWhere(_t,yn,Sn){return Ht("OR",_t,yn,Sn)},whereGroup(_t){return Vt("AND",_t)},orWhereGroup(_t){return Vt("OR",_t)},orderBy(_t,yn="asc"){Xt(String(_t),"selectFromSub.orderBy(column)");let Sn=yn==="asc"?"ASC":"DESC",En=An.ORDER_BY.test(vt)?`${vt}, ${_t} ${Sn}`:`${vt} ORDER BY ${_t} ${Sn}`;return Dt(yt,wt,$t,En)},limit(_t){if(!Number.isInteger(_t)||_t<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${_t}`);let yn=An.LIMIT.test(vt)?vt.replace(An.LIMIT,` LIMIT ${_t}`):`${vt} LIMIT ${_t}`;return Dt(yt,wt,$t,yn)},offset(_t){if(!Number.isInteger(_t)||_t<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${_t}`);let yn=An.OFFSET.test(vt)?vt.replace(An.OFFSET,` OFFSET ${_t}`):`${vt} OFFSET ${_t}`;return Dt(yt,wt,$t,yn)},toSQL(){return jt(Ot(),Et)},async execute(){return ht(Ot(),"select")},async executeTakeFirst(){let _t=await ht(Ot(),"select");return Array.isArray(_t)?_t[0]:_t},async executeTakeFirstOrThrow(){let _t=await ht(Ot(),"select"),yn=Array.isArray(_t)?_t[0]:_t;if(!yn)throw Error("Record not found");return yn},async get(){return ht(Ot(),"select")},async first(){let _t=await ht(Ot(),"select");return Array.isArray(_t)?_t[0]:_t},async firstOrFail(){let _t=await ht(Ot(),"select"),yn=Array.isArray(_t)?_t[0]:_t;if(!yn)throw Error("No rows found");return yn},async count(){let _t=$t.length>0?h.unsafe(`SELECT COUNT(*) as c FROM (${Et}) as sub`,$t):h.unsafe(`SELECT COUNT(*) as c FROM (${Et}) as sub`),yn=await ht(_t,"select");return Number(yn?.[0]?.c??0)},async exists(){let _t=$t.length>0?h.unsafe(`SELECT EXISTS(${Et}) as e`,$t):h.unsafe(`SELECT EXISTS(${Et}) as e`),yn=await ht(_t,"select");return Boolean(yn?.[0]?.e)},async doesntExist(){return!await zt.exists()},values(){return Ot().values()},raw(){return Ot().raw()},cancel(){try{Ot().cancel()}catch{}},whereRaw:ve("whereRaw"),whereColumn:ve("whereColumn"),orWhereColumn:ve("orWhereColumn"),whereIn:ve("whereIn"),orWhereIn:ve("orWhereIn"),whereNotIn:ve("whereNotIn"),orWhereNotIn:ve("orWhereNotIn"),whereLike:ve("whereLike"),whereILike:ve("whereILike"),orWhereLike:ve("orWhereLike"),orWhereILike:ve("orWhereILike"),whereNotLike:ve("whereNotLike"),whereNotILike:ve("whereNotILike"),orWhereNotLike:ve("orWhereNotLike"),orWhereNotILike:ve("orWhereNotILike"),whereAny:ve("whereAny"),whereAll:ve("whereAll"),whereNone:ve("whereNone"),whereNested:ve("whereNested"),orWhereNested:ve("orWhereNested"),whereDate:ve("whereDate"),whereBetween:ve("whereBetween"),whereNotBetween:ve("whereNotBetween"),whereJsonContains:ve("whereJsonContains"),whereJsonPath:ve("whereJsonPath"),whereNull:ve("whereNull"),orWhereNull:ve("orWhereNull"),whereNotNull:ve("whereNotNull"),orWhereNotNull:ve("orWhereNotNull"),whereExists:ve("whereExists"),orWhereExists:ve("orWhereExists"),orWhereBetween:ve("orWhereBetween"),orWhereRaw:ve("orWhereRaw"),whereJsonDoesntContain:ve("whereJsonDoesntContain"),whereJsonContainsKey:ve("whereJsonContainsKey"),whereJsonDoesntContainKey:ve("whereJsonDoesntContainKey"),whereJsonLength:ve("whereJsonLength"),join:ve("join"),joinSub:ve("joinSub"),innerJoin:ve("innerJoin"),leftJoin:ve("leftJoin"),leftJoinSub:ve("leftJoinSub"),rightJoin:ve("rightJoin"),crossJoin:ve("crossJoin"),crossJoinSub:ve("crossJoinSub"),groupBy:ve("groupBy"),groupByRaw:ve("groupByRaw"),having:ve("having"),havingRaw:ve("havingRaw"),addSelect:ve("addSelect"),select:ve("select"),selectAll:ve("selectAll"),orderByDesc:ve("orderByDesc"),inRandomOrder:ve("inRandomOrder"),reorder:ve("reorder"),orderByRaw:ve("orderByRaw"),union:ve("union"),unionAll:ve("unionAll"),forPage:ve("forPage"),selectAllRelations:ve("selectAllRelations"),with:ve("with"),value:ve("value"),pluck:ve("pluck"),cursorPaginate:ve("cursorPaginate"),paginate:ve("paginate"),simplePaginate:ve("simplePaginate"),chunk:ve("chunk"),chunkById:ve("chunkById"),eachById:ve("eachById"),avg:ve("avg"),sum:ve("sum"),max:ve("max"),min:ve("min"),find:ve("find"),findOrFail:ve("findOrFail"),findMany:ve("findMany"),latest:ve("latest"),oldest:ve("oldest"),lazy:ve("lazy"),lazyById:ve("lazyById"),pipe:(_t)=>_t(zt),when:ve("when"),tap:()=>zt,dump:()=>zt,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>Ot().simple(),toText:()=>Et,toParams:()=>[...$t],withTimeout:()=>zt,abort:()=>zt,lockForUpdate:()=>zt,sharedLock:()=>zt,withCTE:()=>zt,withRecursive:()=>zt,cache:()=>zt,clone:()=>zt,withTrashed:()=>zt,onlyTrashed:()=>zt,scope:()=>zt,get rows(){return[]},get row(){return}};return zt}return Dt(qt,[],Gt)},insertInto(Fe){let Ue,ve="",Ne=[],St=[],He=!1,Gt=()=>Lt?[]:{changes:0,lastInsertRowid:0},qt=()=>{let vt=async()=>{return},Wt=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>qt(),andWhere:()=>qt(),orWhere:()=>qt(),orderBy:()=>qt(),limit:()=>qt(),offset:()=>qt(),toSQL:()=>jt(null,""),execute:async()=>[],get:async()=>[],first:vt,executeTakeFirst:vt,firstOrFail:Wt,executeTakeFirstOrThrow:Wt}},Lt=e.dialect==="postgres",Dt=(vt)=>{let Et=vt.flat(2).map(String).filter(Boolean),Ot=Et.length>0&&!Et.includes("*")?Et.map((zt)=>yt(zt)).join(", "):"*",Ht=async()=>{let zt=await ht(h.unsafe(ve,Ne),"insert"),_t=Number(zt?.lastInsertRowid??0),yn=Math.max(1,Number(zt?.affectedRows??1)),Sn=St.filter((Cn)=>Cn!==void 0&&Cn!==null),En=_t>0?h.unsafe(`SELECT ${Ot} FROM ${yt(String(Fe))} WHERE ${yt("id")} >= ? AND ${yt("id")} < ? ORDER BY ${yt("id")} ASC`,[_t,_t+yn]):Sn.length>0?h.unsafe(`SELECT ${Ot} FROM ${yt(String(Fe))} WHERE ${yt("id")} IN (${Sn.map(()=>"?").join(", ")}) ORDER BY ${yt("id")} ASC`,Sn):null;if(!En)return[];let $n=await En.execute();return Array.isArray($n)?$n:[]},Vt=async()=>(await Ht())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>jt(h.unsafe(ve,Ne),ve),execute:Ht,get:Ht,first:Vt,executeTakeFirst:Vt,async firstOrFail(){let zt=await Vt();if(!zt)throw Error("Insert with RETURNING returned no rows");return zt},async executeTakeFirstOrThrow(){let zt=await Vt();if(!zt)throw Error("Insert with RETURNING returned no rows");return zt}}},yt=Lt?(vt)=>`"${String(vt).replace(/"/g,'""')}"`:n(e.dialect)?(vt)=>`\`${String(vt).replace(/`/g,"``")}\``:(vt)=>`"${String(vt).replace(/"/g,'""')}"`,wt=Lt?"postgres":n(e.dialect)?"mysql":"sqlite",$t=Lt?(vt)=>`$${vt+1}`:(vt)=>"?";return{values(vt){let Wt=ke(String(Fe),Array.isArray(vt)?vt:[vt]),Et=Wt.length;if(St=Wt.map((En)=>En?.id),Et===0)return He=!0,Ue=null,ve="",Ne.length=0,this;He=!1;let Ot=Wt[0],Ht=Object.keys(Ot),Vt=Ht.length,zt=Et*Vt;Ne.length=zt;let _t=Et===1&&Vt>0&&typeof Fe==="string",yn=_t?V?.get(Fe):void 0,Sn=yn?.quoteStyle===wt&&yn.columns.length===Vt;if(Sn){for(let En=0;En<Vt;En++)if(yn.columns[En]!==Ht[En]){Sn=!1;break}}if(Sn){ve=yn.sql;for(let En=0;En<Vt;En++)Ne[En]=Ot[Ht[En]]}else if(Et===1)if(!Lt){let En=yt(Ht[0]),$n="?";Ne[0]=Ot[Ht[0]];for(let Cn=1;Cn<Vt;Cn++)En+=`,${yt(Ht[Cn])}`,$n+=",?",Ne[Cn]=Ot[Ht[Cn]];ve=`INSERT INTO ${yt(Fe)}(${En})VALUES(${$n})`}else{let En=Ht.map(($n)=>yt($n)).join(",");ve=`INSERT INTO ${yt(Fe)}(${En})VALUES(`;for(let $n=0;$n<Vt;$n++){if($n>0)ve+=",";ve+=$t($n),Ne[$n]=Ot[Ht[$n]]}ve+=")"}else{let En=Ht.map((Cn)=>yt(Cn)).join(",");ve=`INSERT INTO ${yt(Fe)}(${En})VALUES`;let $n=0;for(let Cn=0;Cn<Et;Cn++){let Fn=Wt[Cn];if(Cn===0)ve+="(";else ve+="),(";for(let er=0;er<Vt;er++){if(er>0)ve+=",";ve+=$t($n),Ne[$n++]=Fn[Ht[er]]}}ve+=")"}if(_t&&!Sn&&ve.length<=8192){if(V??=new Map,V.size>=32&&!V.has(Fe)){let En=V.keys().next().value;if(En!==void 0)V.delete(En)}V.set(Fe,{columns:Ht,quoteStyle:wt,sql:ve})}if(!h._prepareStatement)Ue=h.unsafe(ve,Ne);return this},returning(...vt){if(He)return qt();if(n(e.dialect))return Dt(vt);let Wt=`${ve} RETURNING ${vt.join(", ")}`,Et=h.unsafe(Wt,Ne),Ot=async()=>{let Ht=await ht(Et,"insert");return Array.isArray(Ht)?Ht[0]:Ht};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>jt(Et,Wt),execute:()=>ht(Et,"insert"),get:()=>ht(Et,"insert"),first:Ot,executeTakeFirst:Ot,async firstOrFail(){let Ht=await Ot();if(!Ht)throw Error("Insert with RETURNING returned no rows");return Ht},async executeTakeFirstOrThrow(){let Ht=await Ot();if(!Ht)throw Error("Insert with RETURNING returned no rows");return Ht}}},toSQL(){if(He)return jt(null,"");if(!Ue)Ue=h.unsafe(ve,Ne);return jt(Ue,ve)},execute(){if(He)return Promise.resolve(Gt());let vt=Ke();if(!(vt&&(vt.onQueryStart||vt.onQueryEnd||vt.onQueryError||vt.startSpan||vt.beforeCreate||vt.afterCreate||Sr(vt)))){let Et=h._prepareStatement;if(Et){let Ot=Et(ve);return Ne.length>0?Ot.run(...Ne):Ot.run()}}if(!Ue)Ue=h.unsafe(ve,Ne);return ht(Ue,"insert")},async executeTakeFirst(){if(He)return Gt();if(!Ue)Ue=h.unsafe(ve,Ne);return await ht(Ue,"insert")},async executeTakeFirstOrThrow(){if(He)throw Error("Insert failed");if(!Ue)Ue=h.unsafe(ve,Ne);let vt=await ht(Ue,"insert");if(!vt)throw Error("Insert failed");return vt},returningAll(){if(He)return qt();let vt=`${ve} RETURNING *`,Wt=h.unsafe(vt,Ne),Et=async()=>{let Ot=await ht(Wt,"insert");return Array.isArray(Ot)?Ot[0]:Ot};return{toSQL:()=>jt(Wt,vt),execute:()=>ht(Wt,"insert"),get:()=>ht(Wt,"insert"),first:Et,executeTakeFirst:Et,async firstOrFail(){let Ot=await Et();if(!Ot)throw Error("Insert with RETURNING returned no rows");return Ot},async executeTakeFirstOrThrow(){let Ot=await Et();if(!Ot)throw Error("Insert with RETURNING returned no rows");return Ot}}}}},updateTable(Fe){let Ue,ve=[],Ne=(qt)=>{let Lt=String(qt);if(n(e.dialect))return`\`${Lt.replace(/`/g,"``")}\``;return`"${Lt.replace(/"/g,'""')}"`},St=`UPDATE ${Ne(String(Fe))}`,He=!1,Gt=(qt)=>{St=`${St} ${He?"AND":"WHERE"} ${qt}`,He=!0};return{set(qt){let Lt=ke(String(Fe),[qt])[0],Dt=Object.keys(Lt),yt=Dt.length,wt=Array.from({length:yt});for(let $t=0;$t<yt;$t++){let vt=Dt[$t],Wt=Lt[vt];if(Xn(Wt))wt[$t]=`${Ne(vt)} = ${Wt.raw}`;else if(Tr(Wt)){let Et=br(Wt,ve.length+1);wt[$t]=`${Ne(vt)} = ${Et.text}`,ve.push(...Et.parameters)}else wt[$t]=`${Ne(vt)} = ${t(ve.length+1)}`,ve.push(Wt)}return St=`${St} SET ${wt.join(", ")}`,Ue=h.unsafe(St,ve),this},where(qt,Lt,Dt){if(Lt!==void 0&&(typeof qt==="string"||Xn(qt)||Tr(qt))){let yt=Ln(Lt,"updateTable.where"),wt;if(typeof qt==="string")wt=Ne(qt);else if(Xn(qt))wt=qt.raw;else{let vt=br(qt,ve.length+1);wt=vt.text,ve.push(...vt.parameters)}if(yt.toLowerCase()==="in"||yt.toLowerCase()==="not in"){let vt=Array.isArray(Dt)?Dt:[Dt],Wt=s(vt.length,ve.length+1);return Gt(`${wt} ${yt.toUpperCase()} (${Wt})`),ve.push(...vt),Ue=h.unsafe(St,ve),this}let $t=ve.length+1;return Gt(`${wt} ${yt} ${t($t)}`),ve.push(Dt),Ue=h.unsafe(St,ve),this}if(Array.isArray(qt)){let[yt,wt,$t]=qt,vt=Ln(wt,"updateTable.where");if(vt.toLowerCase()==="in"||vt.toLowerCase()==="not in"){let Et=Array.isArray($t)?$t:[$t],Ot=s(Et.length,ve.length+1);return Gt(`${Ne(String(yt))} ${vt.toUpperCase()} (${Ot})`),ve.push(...Et),Ue=h.unsafe(St,ve),this}let Wt=ve.length+1;return Gt(`${Ne(String(yt))} ${vt} ${t(Wt)}`),ve.push($t),Ue=h.unsafe(St,ve),this}if(Xn(qt))return Gt(qt.raw),Ue=h.unsafe(St,ve),this;if(Tr(qt)){let yt=br(qt,ve.length+1);return Gt(yt.text),ve.push(...yt.parameters),Ue=h.unsafe(St,ve),this}if(qt&&typeof qt==="object"){let yt=Object.keys(qt);if(yt.length===0)throw TypeError("[query-builder] updateTable.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if updating every row is intended.");let wt=yt.map(($t)=>Fr(Ne($t),qt[$t],ve));return Gt(wt.join(" AND ")),Ue=h.unsafe(St,ve),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${qt===null?"null":typeof qt}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(qt){return Gt(`${Ne(String(qt))} IS NULL`),Ue=h.unsafe(St,ve),this},whereNotNull(qt){return Gt(`${Ne(String(qt))} IS NOT NULL`),Ue=h.unsafe(St,ve),this},returning(...qt){let Lt=this,Dt=()=>`${St} RETURNING ${qt.join(", ")}`,yt=()=>ve.length>0?h.unsafe(Dt(),ve):h.unsafe(Dt()),wt=async()=>{let Ot=/\sWHERE\s/i.test(St),Ht=Ot?St.slice(St.search(/\sWHERE\s/i)+1):"",Vt=ve.slice(ve.length-(Ht.match(/\?|\$\d+/g)?.length??0)),zt=Ne("id"),_t=await(Vt.length>0?h.unsafe(`SELECT ${zt} FROM ${Ne(String(Fe))}${Ot?` ${Ht}`:""}`,Vt):h.unsafe(`SELECT ${zt} FROM ${Ne(String(Fe))}${Ot?` ${Ht}`:""}`)).execute().catch(()=>[]),yn=(Array.isArray(_t)?_t:[]).map(($n)=>$n?.id).filter(($n)=>$n!==void 0&&$n!==null);if(await ht(ve.length>0?h.unsafe(St,ve):h.unsafe(St),"update"),yn.length===0)return[];let Sn=`SELECT ${qt.join(", ")} FROM ${Ne(String(Fe))} WHERE ${zt} IN (${yn.map(()=>"?").join(", ")})`,En=await h.unsafe(Sn,yn).execute();return Array.isArray(En)?En:[]},$t=()=>n(e.dialect)?wt():ht(yt(),"update"),vt=async()=>{let Ot=await $t();return Array.isArray(Ot)?Ot[0]:Ot},Wt=(Ot)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${Ot}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},Et={where:(...Ot)=>(Lt.where(...Ot),Et),andWhere:(...Ot)=>(Lt.where(...Ot),Et),whereNull:(...Ot)=>(Lt.whereNull(...Ot),Et),whereNotNull:(...Ot)=>(Lt.whereNotNull(...Ot),Et),orWhere:Wt("orWhere"),orderBy:Wt("orderBy"),limit:Wt("limit"),offset:Wt("offset"),toSQL:()=>jt(yt(),Dt()),execute:$t,get:$t,first:vt,executeTakeFirst:vt,async firstOrFail(){let Ot=await vt();if(!Ot)throw Error("Update with RETURNING returned no rows");return Ot},async executeTakeFirstOrThrow(){let Ot=await vt();if(!Ot)throw Error("Update with RETURNING returned no rows");return Ot}};return Et},toSQL(){if(!Ue)Ue=ve.length>0?h.unsafe(St,ve):h.unsafe(St);return jt(Ue,St)},async execute(){let qt=await ht(Ue,"update");return Jt(qt)},async executeTakeFirst(){return{numUpdatedRows:Jt(await ht(Ue,"update"))}},async executeTakeFirstOrThrow(){let qt=Jt(await ht(Ue,"update"));if(qt===0)throw Error("No rows updated");return{numUpdatedRows:qt}},returningAll(){let qt=()=>`${St} RETURNING *`,Lt=()=>ve.length>0?h.unsafe(qt(),ve):h.unsafe(qt());return{toSQL:()=>jt(Lt(),qt()),execute:()=>ht(Lt(),"update"),async executeTakeFirst(){let Dt=await ht(Lt(),"update");return Array.isArray(Dt)?Dt[0]:Dt},async executeTakeFirstOrThrow(){let Dt=await ht(Lt(),"update"),yt=Array.isArray(Dt)?Dt[0]:Dt;if(!yt)throw Error("Update with RETURNING failed");return yt}}}}},deleteFrom(Fe){let Ue=(yt)=>{let wt=String(yt);if(n(e.dialect))return`\`${wt.replace(/`/g,"``")}\``;return`"${wt.replace(/"/g,'""')}"`},Ne=`DELETE FROM ${Ue(String(Fe))}`,St=null,He=[],Gt=null,qt=!1,Lt=(yt)=>{Ne+=` ${qt?"AND":"WHERE"} ${yt}`,qt=!0},Dt=()=>{if(St===null)St=He.length>0?h.unsafe(Ne,He):h.unsafe(Ne);return St};return{where(yt,wt,$t){if(Gt=yt,typeof yt==="string"&&wt!==void 0){let vt=Ln(wt,"deleteFrom.where");if(vt.toLowerCase()==="in"||vt.toLowerCase()==="not in"){let Et=Array.isArray($t)?$t:[$t],Ot=s(Et.length,He.length+1);return Lt(`${Ue(yt)} ${vt.toUpperCase()} (${Ot})`),He.push(...Et),St=null,this}let Wt=He.length+1;return Lt(`${Ue(yt)} ${vt} ${t(Wt)}`),He.push($t),St=null,this}if(Array.isArray(yt)){let[vt,Wt,Et]=yt,Ot=Ln(Wt,"deleteFrom.where");if(Ot.toLowerCase()==="in"||Ot.toLowerCase()==="not in"){let Vt=Array.isArray(Et)?Et:[Et],zt=s(Vt.length,He.length+1);return Lt(`${Ue(String(vt))} ${Ot.toUpperCase()} (${zt})`),He.push(...Vt),St=null,this}let Ht=He.length+1;return Lt(`${Ue(String(vt))} ${Ot} ${t(Ht)}`),He.push(Et),St=null,this}if(Xn(yt))return Lt(yt.raw),St=null,this;if(Tr(yt)){let vt=br(yt,He.length+1);return Lt(vt.text),He.push(...vt.parameters),St=null,this}if(yt&&typeof yt==="object"){let vt=Object.keys(yt);if(vt.length===0)throw TypeError("[query-builder] deleteFrom.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if deleting every row is intended.");let Wt=vt.map((Et)=>Fr(Ue(Et),yt[Et],He));return Lt(Wt.join(" AND ")),St=null,this}throw TypeError(`[query-builder] deleteFrom.where(): expected a condition, got ${yt===null?"null":typeof yt}. Refusing to run a DELETE with no WHERE \u2014 drop the where() call if deleting every row is intended.`)},whereNull(yt){return Lt(`${Ue(String(yt))} IS NULL`),St=null,this},whereNotNull(yt){return Lt(`${Ue(String(yt))} IS NOT NULL`),St=null,this},returning(...yt){let wt=this,$t=()=>`${Ne} RETURNING ${yt.join(", ")}`,vt=()=>He.length>0?h.unsafe($t(),He):h.unsafe($t()),Wt=async()=>{await Ke()?.beforeDelete?.({table:String(Fe),where:Gt});let Vt=n(e.dialect)?await(async()=>{let zt=Ne.slice(Ne.search(/\sFROM\s/i)+1),_t=`SELECT ${yt.join(", ")} ${zt}`,yn=await(He.length>0?h.unsafe(_t,He):h.unsafe(_t)).execute();return await ht(He.length>0?h.unsafe(Ne,He):h.unsafe(Ne),"delete"),Array.isArray(yn)?yn:[]})():await ht(vt(),"delete");try{await Ke()?.afterDelete?.({table:String(Fe),where:Gt,result:Vt})}catch{}return Vt},Et=async()=>{let Vt=await Wt();return Array.isArray(Vt)?Vt[0]:Vt},Ot=(Vt)=>()=>{throw TypeError(`[query-builder] deleteFrom.returning(...).${Vt}() is not supported \u2014 a DELETE cannot be ordered or limited through this builder. Narrow it with where() instead.`)},Ht={where:(...Vt)=>(wt.where(...Vt),Ht),andWhere:(...Vt)=>(wt.where(...Vt),Ht),whereNull:(...Vt)=>(wt.whereNull(...Vt),Ht),whereNotNull:(...Vt)=>(wt.whereNotNull(...Vt),Ht),orWhere:Ot("orWhere"),orderBy:Ot("orderBy"),limit:Ot("limit"),offset:Ot("offset"),toSQL:()=>jt(vt(),$t()),execute:()=>Wt(),get:()=>Wt(),first:Et,executeTakeFirst:Et,async firstOrFail(){let Vt=await Et();if(!Vt)throw Error("Delete with RETURNING returned no rows");return Vt},async executeTakeFirstOrThrow(){let Vt=await Et();if(!Vt)throw Error("Delete with RETURNING returned no rows");return Vt}};return Ht},toSQL(){return jt(Dt(),Ne)},async execute(){try{await Ke()?.beforeDelete?.({table:String(Fe),where:Gt})}catch(wt){throw wt}let yt=Jt(await ht(Dt(),"delete"));try{await Ke()?.afterDelete?.({table:String(Fe),where:Gt,result:yt})}catch{}return yt},async executeTakeFirst(){return{numDeletedRows:Jt(await ht(Dt(),"delete"))}},async executeTakeFirstOrThrow(){let yt=Jt(await ht(Dt(),"delete"));if(yt===0)throw Error("No rows deleted");return{numDeletedRows:yt}},returningAll(){let yt=()=>`${Ne} RETURNING *`,wt=()=>He.length>0?h.unsafe(yt(),He):h.unsafe(yt());return{toSQL:()=>jt(wt(),yt()),execute:()=>ht(wt(),"delete"),async executeTakeFirst(){let $t=await ht(wt(),"delete");return Array.isArray($t)?$t[0]:$t},async executeTakeFirstOrThrow(){let $t=await ht(wt(),"delete"),vt=Array.isArray($t)?$t[0]:$t;if(!vt)throw Error("Delete with RETURNING failed");return vt}}}}},table(Fe){let Ue=this;return{insert(ve){return Ue.insertInto(Fe).values(ve)},update(ve){return Ue.updateTable(Fe).set(ve)},delete(){return Ue.deleteFrom(Fe)},select(...ve){if(ve.length===0)return Ue.selectFrom(Fe);return Ue.select(Fe,...ve)}}},sql:h,raw(Fe,...Ue){return h(Fe,...Ue)},simple(Fe,...Ue){return h(Fe,...Ue).simple()},async advisoryLock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),ve=h`SELECT pg_advisory_lock(${Ue})`;await ht(ve,"raw");return}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,ve=h`SELECT GET_LOCK(${Ue}, -1) AS ok`;await ht(ve,"raw");return}throw Error("[query-builder] advisoryLock() is not supported on SQLite \u2014 use a Postgres or MySQL deployment for distributed locking.")},async tryAdvisoryLock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),ve=h`SELECT pg_try_advisory_lock(${Ue}) as ok`,Ne=await ht(ve,"raw");return Boolean(Ne?.[0]?.ok)}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,ve=h`SELECT GET_LOCK(${Ue}, 0) AS ok`,Ne=await ht(ve,"raw");return Number(Ne?.[0]?.ok)===1}return!1},async advisoryUnlock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),ve=h`SELECT pg_advisory_unlock(${Ue}) as ok`,Ne=await ht(ve,"raw");return Boolean(Ne?.[0]?.ok)}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,ve=h`SELECT RELEASE_LOCK(${Ue}) AS ok`,Ne=await ht(ve,"raw");return Number(Ne?.[0]?.ok)===1}return!1},unsafe(Fe,Ue){return h.unsafe(Fe,Ue)},file(Fe,Ue){return h.file(Fe,Ue)},async reserve(){let Fe=await r.reserve(),Ue=i({sql:Fe,meta:D,schema:E,hooks:d?.hooks});return Ue.release=()=>Fe.release(),Ue},async close(Fe){await r.close(Fe)},async listen(Fe,Ue){},async unlisten(Fe){},async notify(Fe,Ue){},async copyTo(Fe,Ue){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(Fe,Ue,ve){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let Fe=h`SELECT 1`;return await ht(Fe,"select"),!0}catch{return!1}},async waitForReady(Fe){let Ue=Math.max(1,Fe?.attempts??10),ve=Math.max(10,Fe?.delayMs??100);for(let Ne=0;Ne<Ue;Ne++){if(await this.ping())return;await new Promise((St)=>setTimeout(St,ve))}throw Error("Database not ready after waiting")},async transaction(Fe,Ue){let Ne={...d?.txDefaults,...Ue},St=d?.sql??r,He=d?.inTransaction===!0,Gt=He&&typeof St?.savepoint==="function"?"savepoint":"begin",qt=async(yt)=>{Ne.logger?.({type:"start",attempt:yt});let wt=Date.now();return await St[Gt](async($t)=>{let vt=i({sql:$t,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});if(Ne?.isolation&&!He){let Ot=Ne.isolation,Ht=Ot==="read committed"?"READ COMMITTED":Ot==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await $t.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Ht}`);else if(n(e.dialect))await $t.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Ht}`);else if(Ot!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${Ot}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(Ne?.readOnly)if(e.dialect==="postgres")await $t.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await $t.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let Wt=await Fe(vt),Et=Date.now()-wt;return Ne.logger?.({type:"commit",attempt:yt,durationMs:Et}),Wt})},Lt=Math.max(0,Ne?.retries??0),Dt=0;for(;;)try{let yt=await qt(Dt+1);return Ne?.afterCommit?.(),yt}catch(yt){let wt=ci(yt)||di(yt,Ne.sqlStates);if(Dt<Lt&&wt){Dt++,Ne?.onRetry?.(Dt,yt);let $t=Ti(Dt,Ne.backoff);if($t>0)await fi($t);continue}try{Ne.onRollback?.(yt)}catch{}try{Ne.afterRollback?.()}catch{}throw yt}},async savepoint(Fe){if(d?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let Ue=h;if(!Ue||typeof Ue.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await Ue.savepoint(async(ve)=>{let Ne=i({sql:ve,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});return await Fe(Ne)})},async beginDistributed(Fe,Ue){return await(d?.sql??r).beginDistributed(Fe,async(St)=>{let He=i({sql:St,meta:D,schema:E,hooks:d?.hooks});return await Ue(He)})},async commitDistributed(Fe){await r.commitDistributed(Fe)},async rollbackDistributed(Fe){await r.rollbackDistributed(Fe)},setTransactionDefaults(Fe){d={...d,txDefaults:{...d?.txDefaults,...Fe}}},transactional(Fe,Ue){return(...ve)=>this.transaction((Ne)=>Fe(Ne,...ve),Ue)},async insertOrIgnore(Fe,Ue){let ve=Array.isArray(Ue)?Ue:[Ue];if(!ve.length)return;let{colsSql:Ne,valuesSql:St,params:He}=Or(ve),Gt=Vn(String(Fe)),qt=n(e.dialect)?`INSERT IGNORE INTO ${Gt} (${Ne}) VALUES ${St}`:`INSERT INTO ${Gt} (${Ne}) VALUES ${St} ON CONFLICT DO NOTHING`;return h.unsafe(qt,He).execute()},async insertGetId(Fe,Ue,ve="id"){let{colsSql:Ne,valuesSql:St,params:He}=Or([Ue]),Gt=Vn(String(Fe));if(n(e.dialect)){await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St}`,He).execute();let[Lt]=await h.unsafe("SELECT LAST_INSERT_ID() as id").execute();return Lt?.id}if(e.dialect==="sqlite"){let Lt=await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St}`,He).execute();if(Lt?.lastInsertRowid!=null)return Lt.lastInsertRowid;let[Dt]=await h.unsafe("SELECT last_insert_rowid() as id").execute();return Dt?.id}let[qt]=await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St} RETURNING ${Vn(String(ve))} as id`,He).execute();return qt?.id},async updateOrInsert(Fe,Ue,ve){let Ne=Vn(String(Fe)),St=Object.keys(Ue),He=1,Gt=St.map(($t)=>`${Vn($t)} = ${t(He++)}`).join(" AND "),qt=St.map(($t)=>Ue[$t]);if((await h.unsafe(`SELECT 1 FROM ${Ne} WHERE ${Gt} LIMIT 1`,qt).execute()).length){let $t=Object.keys(ve),vt=1,Wt=$t.map((Ht)=>`${Vn(Ht)} = ${t(vt++)}`).join(", "),Et=St.map((Ht)=>`${Vn(Ht)} = ${t(vt++)}`).join(" AND "),Ot=[...$t.map((Ht)=>ve[Ht]),...St.map((Ht)=>Ue[Ht])];return await h.unsafe(`UPDATE ${Ne} SET ${Wt} WHERE ${Et}`,Ot).execute(),!0}let{colsSql:Dt,valuesSql:yt,params:wt}=Or([{...Ue,...ve}]);return await h.unsafe(`INSERT INTO ${Ne} (${Dt}) VALUES ${yt}`,wt).execute(),!0},async upsert(Fe,Ue,ve,Ne){let St=ve.map((Wt)=>String(Wt)),He=(Ne??[]).map((Wt)=>String(Wt)),Gt=Ue;if(!Gt.length)return;let{colsSql:qt,valuesSql:Lt,params:Dt}=Or(Gt),yt=Vn(String(Fe)),wt=`INSERT INTO ${yt} (${qt}) VALUES ${Lt}`;if(n(e.dialect)){if(He.length===0)return h.unsafe(`INSERT IGNORE INTO ${yt} (${qt}) VALUES ${Lt}`,Dt).execute();let Wt=He.map((Et)=>`${Vn(Et)} = VALUES(${Vn(Et)})`).join(", ");return h.unsafe(`${wt} ON DUPLICATE KEY UPDATE ${Wt}`,Dt).execute()}let $t=St.map(Vn).join(", ");if(He.length===0)return h.unsafe(`${wt} ON CONFLICT (${$t}) DO NOTHING`,Dt).execute();let vt=He.map((Wt)=>`${Vn(Wt)} = EXCLUDED.${Vn(Wt)}`).join(", ");return h.unsafe(`${wt} ON CONFLICT (${$t}) DO UPDATE SET ${vt}`,Dt).execute()},async save(Fe,Ue){let ve=D?.primaryKeys[String(Fe)]??"id",Ne=Ue[ve];if(Ne!=null)if(await this.selectFrom(Fe).find(Ne)){await this.updateTable(Fe).set(Ue).where({[ve]:Ne}).execute();let He=await this.selectFrom(Fe).find(Ne);if(!He)throw Error("save() failed to retrieve updated row");return He}else return await this.create(Fe,Ue);return await this.create(Fe,Ue)},async remove(Fe,Ue){return await this.deleteFrom(Fe).where({id:Ue}).execute()},async find(Fe,Ue){return await this.selectFrom(Fe).find(Ue)},async findOrFail(Fe,Ue){return await this.selectFrom(Fe).findOrFail(Ue)},async findMany(Fe,Ue){return await this.selectFrom(Fe).findMany(Ue)},async latest(Fe,Ue){return await this.selectFrom(Fe).latest(Ue).first()},async oldest(Fe,Ue){return await this.selectFrom(Fe).oldest(Ue).first()},skip(Fe,Ue){return this.selectFrom(Fe).offset(Ue)},async rawQuery(Fe){let Ue=Date.now();try{Ke()?.onQueryStart?.({sql:Fe,kind:"raw"});let ve=await h.unsafe(Fe);return Ke()?.onQueryEnd?.({sql:Fe,durationMs:Date.now()-Ue,kind:"raw"}),ve}catch(ve){throw Ke()?.onQueryError?.({sql:Fe,error:ve,durationMs:Date.now()-Ue,kind:"raw"}),ve}},async create(Fe,Ue){let ve=D?.primaryKeys[String(Fe)]??"id";try{await Ke()?.beforeCreate?.({table:String(Fe),data:Ue})}catch(Ne){throw Ne}if(e.dialect==="postgres"){let Ne=h`INSERT INTO ${h(String(Fe))} ${h(Ue)} RETURNING ${h(String(ve))} as id`,[St]=await Ne.execute();if(!St?.id)throw console.error(`create() failed to get insert ID for table ${String(Fe)}`),console.error("Inserted values:",Ue),Error(`create() failed to get insert ID for table ${String(Fe)}`);let He=await this.selectFrom(Fe).find(St.id);if(!He)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${St.id}`),console.error("Inserted values:",Ue),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${St.id}`);try{await Ke()?.afterCreate?.({table:String(Fe),data:Ue,result:He})}catch{}return He}else{let Ne=await this.insertGetId(Fe,Ue,ve);if(Ne==null)throw Error(`create() failed to get insert ID for table ${String(Fe)}`);let St=await this.selectFrom(Fe).find(Ne);if(!St)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ne}`),console.error("Inserted values:",Ue),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ne}`);try{await Ke()?.afterCreate?.({table:String(Fe),data:Ue,result:St})}catch{}return St}},async createMany(Fe,Ue){if(!Ue?.length)return;let ve=Ue[0],Ne=Object.keys(ve),St=Ne.length,He=Ue.length,Gt=Array.from({length:He*St}),qt=n(e.dialect)?(yt)=>`\`${String(yt).replace(/`/g,"``")}\``:(yt)=>`"${String(yt).replace(/"/g,'""')}"`,Lt=`INSERT INTO ${qt(String(Fe))}(${Ne.map(qt).join(",")})VALUES`,Dt=0;for(let yt=0;yt<He;yt++){if(yt>0)Lt+=",";Lt+="(";let wt=Ue[yt];for(let $t=0;$t<St;$t++){if($t>0)Lt+=",";Lt+=t(Dt+1),Gt[Dt++]=wt[Ne[$t]]}Lt+=")"}return h.unsafe(Lt,Gt).execute()},async insertMany(Fe,Ue){if(!Ue?.length)return;let ve=Ue[0],Ne=Object.keys(ve),St=Ne.length,He=Ue.length,Gt=He*St,qt=Array(Gt),Lt=e.dialect==="postgres",Dt;if(!Lt){let $t=Array(St);for(let vt=0;vt<St;vt++)$t[vt]="?";Dt=`(${$t.join(",")})`}else Dt="";let yt=Array(He+2);yt[0]=`INSERT INTO ${Fe}(${Ne.join(",")})VALUES`;let wt=0;if(!Lt){for(let $t=0;$t<He;$t++){let vt=Ue[$t];yt[$t+1]=Dt;for(let Wt=0;Wt<St;Wt++)qt[wt++]=vt[Ne[Wt]]}return h.unsafe(yt[0]+yt.slice(1,He+1).join(","),qt).execute()}for(let $t=0;$t<He;$t++){let vt=Ue[$t],Wt=Array(St);for(let Et=0;Et<St;Et++)Wt[Et]=`$${wt+1}`,qt[wt++]=vt[Ne[Et]];yt[$t+1]=`(${Wt.join(",")})`}return h.unsafe(yt[0]+yt.slice(1,He+1).join(","),qt).execute()},async updateMany(Fe,Ue,ve){let Ne=Object.keys(ve),St=Ne.length;if(St===0)return 0;let He=[],Gt=Array.from({length:St});for(let Lt=0;Lt<St;Lt++)Gt[Lt]=`${Ne[Lt]}=${t(Lt+1)}`,He.push(ve[Ne[Lt]]);let qt=`UPDATE ${Fe} SET ${Gt.join(",")}`;if(Array.isArray(Ue)){let Lt=Ln(String(Ue[1]),"updateMany");qt+=` WHERE ${Ue[0]} ${Lt} ${t(He.length+1)}`,He.push(Ue[2])}else if(Xn(Ue))qt+=` WHERE ${Ue.raw}`;else if(Tr(Ue)){let Lt=br(Ue,He.length+1);qt+=` WHERE ${Lt.text}`,He.push(...Lt.parameters)}else if(Ue&&typeof Ue==="object"&&Object.keys(Ue).length>0){let Lt=Object.keys(Ue).map((Dt)=>Fr(Dt,Ue[Dt],He));qt+=` WHERE ${Lt.join(" AND ")}`}else if(Ue&&typeof Ue==="object")throw TypeError("[query-builder] updateMany(): an empty object is not a filter. Pass a condition, or use updateTable(table).set(data).execute() if updating every row is intended.");else throw TypeError(`[query-builder] updateMany(): expected a condition, got ${Ue===null?"null":typeof Ue}. Refusing to run an UPDATE with no WHERE \u2014 use updateTable(table).set(data).execute() if updating every row is intended.`);return h.unsafe(qt,He).execute()},async deleteMany(Fe,Ue){if(!Array.isArray(Ue)||Ue.length===0)return 0;let ve=D?.primaryKeys[String(Fe)]??"id",Ne=Ue.length;if(e.dialect==="postgres"){let He=Array(Ne);for(let Gt=0;Gt<Ne;Gt++)He[Gt]=`$${Gt+1}`;return h.unsafe(`DELETE FROM ${Fe} WHERE ${ve} IN (${He.join(",")})`,Ue).execute()}let St=Array(Ne);for(let He=0;He<Ne;He++)St[He]="?";return h.unsafe(`DELETE FROM ${Fe} WHERE ${ve} IN (${St.join(",")})`,Ue).execute()},async firstOrCreate(Fe,Ue,ve){let Ne=await this.selectFrom(Fe).where(Ue).first();if(Ne)return Ne;return await this.create(Fe,{...Ue,...ve})},async updateOrCreate(Fe,Ue,ve){let Ne=await this.selectFrom(Fe).where(Ue).first();if(Ne){await this.updateTable(Fe).set(ve).where(Ue).execute();let St=D?.primaryKeys[String(Fe)]??"id",He=Ne[St],Gt=He!=null?await this.selectFrom(Fe).find(He):await this.selectFrom(Fe).where(Ue).first();if(!Gt)throw Error("updateOrCreate() failed to retrieve updated row");return Gt}return await this.create(Fe,{...Ue,...ve})},async count(Fe,Ue){let ve=Ue?h(String(Ue)):h`*`,Ne=h`SELECT COUNT(${ve}) as c FROM ${h(String(Fe))}`,[St]=await Ne.execute();return Number(St?.c??0)},async sum(Fe,Ue){let ve=h`SELECT SUM(${h(String(Ue))}) as s FROM ${h(String(Fe))}`,[Ne]=await ve.execute();return Number(Ne?.s??0)},async avg(Fe,Ue){let ve=h`SELECT AVG(${h(String(Ue))}) as a FROM ${h(String(Fe))}`,[Ne]=await ve.execute();return Number(Ne?.a??0)},async min(Fe,Ue){let ve=h`SELECT MIN(${h(String(Ue))}) as m FROM ${h(String(Fe))}`,[Ne]=await ve.execute();return Ne?.m},async max(Fe,Ue){let ve=h`SELECT MAX(${h(String(Ue))}) as m FROM ${h(String(Fe))}`,[Ne]=await ve.execute();return Ne?.m},getRelationships(Fe){if(!D?.relations)return{};let Ue=D.relations[Fe];if(!Ue)return{};let ve={};for(let[Ne,St]of Object.entries(Ue))if(St&&typeof St==="object"&&Object.keys(St).length>0)ve[Ne]=St;return ve},hasRelationship(Fe,Ue){if(!D?.relations)return!1;let ve=D.relations[Fe];if(!ve)return!1;return Object.values(ve).some((Ne)=>Ne&&typeof Ne==="object"&&(Ue in Ne))},getRelationshipType(Fe,Ue){if(!D?.relations)return null;let ve=D.relations[Fe];if(!ve)return null;for(let[Ne,St]of Object.entries(ve))if(St&&typeof St==="object"&&Ue in St)return Ne;return null},getRelationshipTarget(Fe,Ue){if(!D?.relations)return null;let ve=D.relations[Fe];if(!ve)return null;for(let[Ne,St]of Object.entries(ve))if(St&&typeof St==="object"&&Ue in St){let He=St[Ue];if(typeof He==="string")return D.modelToTable[He]||He;else if(He&&typeof He==="object"){if("model"in He)return D.modelToTable[He.model]||He.model;if("target"in He)return D.modelToTable[He.target]||He.target}}return null}}}function Qe(){Cr.clear()}function Ge(d){Cr.setMaxSize(d)}async function z(){console.log("-- Clearing query cache..."),Qe(),console.log("-- \u2713 Query cache cleared")}async function Y(){console.log("-- Query Cache Information"),console.log(),console.log("The query cache is an LRU (Least Recently Used) cache with TTL support."),console.log(),console.log("Configuration:"),console.log(" - Default max size: 100 entries"),console.log(" - Default TTL: 60 seconds (60000ms)"),console.log(" - Eviction: LRU when cache is full"),console.log(),console.log("Usage:"),console.log(' qb.selectFrom("users").cache().get() // Cache for 60s'),console.log(' qb.selectFrom("users").cache(5000).get() // Cache for 5s'),console.log(),console.log("Configuration:"),console.log(" clearQueryCache() // Clear all cached queries"),console.log(" setQueryCacheMaxSize(500) // Set max cache size"),console.log(),console.log("Commands:"),console.log(" qb cache:clear // Clear the cache"),console.log(" qb cache:config --size 500 // Configure cache size")}async function X(d={}){if(console.log("-- Configuring query cache..."),console.log(),d.size!==void 0){let h=Number(d.size);if(Number.isNaN(h)||h<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");Ge(h),console.log(`-- \u2713 Cache max size set to: ${h}`)}else console.log("-- No configuration changes specified"),console.log("-- Available options:"),console.log("-- --size <n> Set maximum cache size (default: 100)"),console.log(),console.log("-- Example: qb cache:config --size 500")}import Ir from"process";import{createInterface as bi}from"readline";async function N(){console.log("-- Query Builder Interactive Console"),console.log("-- Type .help for available commands"),console.log("-- Type .exit or press Ctrl+C to quit"),console.log();let d=i(),h=bi({input:Ir.stdin,output:Ir.stdout,prompt:"qb> "}),D="",E=!1,V=`
50
+ `,[`User ${xe}`,`user${xe}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(xe){throw console.error("-- Failed to setup test table:",xe),xe}let V=[];if(D.includes("select")){let xe=[];for(let Ke=0;Ke<h;Ke++){let ve=performance.now();await E.selectFrom("bench_users").where({active:1}).limit(10).execute(),xe.push(performance.now()-ve)}V.push({operation:"SELECT with WHERE + LIMIT",avgTime:xe.reduce((Ke,ve)=>Ke+ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("select")){let xe=[];for(let Ke=0;Ke<h;Ke++){let ve=performance.now();await E.selectFrom("bench_users").where({id:1}).first(),xe.push(performance.now()-ve)}V.push({operation:"SELECT by ID (first)",avgTime:xe.reduce((Ke,ve)=>Ke+ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("count")){let xe=[];for(let Ke=0;Ke<h;Ke++){let ve=performance.now();await E.selectFrom("bench_users").count(),xe.push(performance.now()-ve)}V.push({operation:"COUNT",avgTime:xe.reduce((Ke,ve)=>Ke+ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("insert")){let xe=[];for(let Ke=0;Ke<h;Ke++){let ve=performance.now();await E.insertInto("bench_users").values({name:`Bench User ${Ke}`,email:`bench${Ke}@example.com`,created_at:new Date().toISOString()}).execute(),xe.push(performance.now()-ve)}V.push({operation:"INSERT",avgTime:xe.reduce((Ke,ve)=>Ke+ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("update")){let xe=[];for(let Ke=0;Ke<h;Ke++){let ve=performance.now();await E.updateTable("bench_users").set({active:0}).where({id:1}).execute(),xe.push(performance.now()-ve)}V.push({operation:"UPDATE by ID",avgTime:xe.reduce((Ke,ve)=>Ke+ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}if(D.includes("delete")){let xe=[],Ke=[];for(let ve=0;ve<h;ve++){let Ve=await E.insertInto("bench_users").values({name:"To Delete",email:`delete${ve}@example.com`,created_at:new Date().toISOString()}).execute();Ke.push(Ve)}for(let ve=0;ve<h;ve++){let Ve=performance.now();await E.deleteFrom("bench_users").where({id:Ke[ve]}).execute(),xe.push(performance.now()-Ve)}V.push({operation:"DELETE by ID",avgTime:xe.reduce((ve,Ve)=>ve+Ve,0)/xe.length,minTime:Math.min(...xe),maxTime:Math.max(...xe),iterations:h})}console.log("-- Benchmark Results"),console.log();let ke=Math.max(...V.map((xe)=>xe.operation.length));console.log("Operation".padEnd(ke+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(ke+2+12+12+12+12));for(let xe of V){let Ke=xe.operation.padEnd(ke+2),ve=xe.avgTime.toFixed(3).padStart(12),Ve=xe.minTime.toFixed(3).padStart(12),gt=xe.maxTime.toFixed(3).padStart(12),pt=(1000/xe.avgTime).toFixed(0).padStart(12);console.log(`${Ke}${ve}${Ve}${gt}${pt}`)}console.log();try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(xe){console.error("-- Warning: Failed to cleanup test table:",xe)}}function ai(d){return y(e.relations?.singularizeStrategy)(d)}function S(d,h,D,E={}){let V=E.singularize??ai,xe=d.relations?.[h]?.belongsToMany?.[D];if(xe==null)return null;let Ke=typeof xe==="object",ve=Ke?xe:null,Ve=Ke?ve.model:xe,gt=d.modelToTable[Ve]||Ve,pt,xt;if(ve?.table)pt=ve.table;else if(ve?.through){if(xt=ve.through,pt=d.modelToTable[ve.through],!pt)throw Error(`[query-builder] belongsToMany relation '${D}' on '${h}' references unknown through model '${ve.through}'. Make sure '${ve.through}' is registered via defineModels({...}).`)}else{let Ue=V(h),_e=V(gt);pt=[Ue,_e].sort().join("_")}let ht=ve?.foreignKey??`${V(h)}_id`,Jt=ve?.relatedKey??`${V(gt)}_id`,jt={};if(ve?.pivot?.columns)Object.assign(jt,ve.pivot.columns);if(xt&&E.models){let Ue=E.models[xt],_e=Ue?.definition??Ue?.getDefinition?.()??Ue,Ne=_e?.attributes??{};for(let[St,He]of Object.entries(Ne)){if(St===ht||St===Jt||St===(_e?.primaryKey??"id"))continue;jt[St]={default:He?.default,nullable:He?.nullable,validation:He?.validation}}}let Tn=Boolean(ve?.pivot?.timestamps),Fe=Object.keys(jt);return{pivotTable:pt,fkParent:ht,fkRelated:Jt,pivotColumns:Fe,pivotColumnDefs:jt,pivotModelName:xt,timestamps:Tn,relatedModelName:Ve,relatedTable:gt,hasConfig:Ke}}function*Zt(d,h={}){let D=d.relations;if(!D)return;for(let[E,V]of Object.entries(D)){let ke=V?.belongsToMany;if(!ke)continue;for(let xe of Object.keys(ke)){let Ke=S(d,E,xe,h);if(Ke)yield{parentTable:E,relationKey:xe,resolved:Ke}}}}function Xn(d){return typeof d==="object"&&d!==null&&"raw"in d&&typeof d.raw==="string"}function Fr(d,h,D){if(Array.isArray(h)){let V=s(h.length,D.length+1),ke=o(d,h,!1,V);return D.push(...h),ke}let E=`${d} = ${t(D.length+1)}`;return D.push(h),E}function Tr(d){return typeof d==="object"&&d!==null&&"sql"in d&&typeof d.sql==="string"&&(!("parameters"in d)||Array.isArray(d.parameters))}function br(d,h){let D=d.parameters??[];if(e.dialect!=="postgres"||D.length===0)return{text:d.sql,parameters:D};let E=0,V=d.sql.replace(/\?/g,(ke)=>{if(E>=D.length)return ke;return t(h+E++)});if(E!==D.length)throw TypeError(`[query-builder] SQL expression declares ${D.length} parameters but contains only ${E} placeholders`);return{text:V,parameters:D}}function en(d,...h){if(typeof d==="string")return{raw:d};let D=d[0];for(let E=0;E<h.length;E++)D+=nr(h[E])+d[E+1];return{raw:D}}function Vn(d){return n(e.dialect)?`\`${d.replace(/`/g,"``")}\``:`"${d.replace(/"/g,'""')}"`}function Or(d,h=1){let D=Object.keys(d[0]??{}),E=[],V=h,ke=d.map((xe)=>`(${D.map((ve)=>(E.push(xe[ve]),t(V++))).join(", ")})`);return{colsSql:D.map(Vn).join(", "),valuesSql:ke.join(", "),params:E,nextIndex:V}}function Sr(d){return Boolean(d&&(d.onSlowQuery||d.slowQueryThresholdMs!=null&&d.slowQueryThresholdMs>=0))}function l(d,h=e.dialect){if(!n(h))return d;let D=/^([A-Z_][\w$]*)(?:\.([A-Z_][\w$]*))?(?:\s+as\s+([A-Z_][\w$]*))?$/i.exec(d.trim());if(!D)return d;let[,E,V,ke]=D,xe=V?`\`${E}\`.\`${V}\``:`\`${E}\``;return ke?`${xe} AS \`${ke}\``:xe}function kt(d,h=e.dialect){if(!n(h)||d===null||d===void 0)return d;if(typeof d==="string"){let D=/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}(?::\d{2})?)(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/.exec(d);if(!D)return d;let[,E,V]=D;return`${E} ${V.length===5?`${V}:00`:V}`}if(!(d instanceof Date)||Number.isNaN(d.getTime()))return d;return d.toISOString().replace("T"," ").replace(/\.\d+Z$/,"")}function rs(d){if(typeof d==="string")return l(d);if(Xn(d))return d.raw;if(d&&typeof d==="object"){let h=d;if(typeof h.raw==="function")return String(h.raw());if(typeof h.sql==="string")return h.sql;let D=String(d);if(D!=="[object Object]")return D}throw TypeError(`[query-builder] select(): unsupported column ${String(d)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function oi(d){let h=/\(|\)|\bORDER\s+BY\b/gi,D=0,E;while(E=h.exec(d))if(E[0]==="(")D++;else if(E[0]===")")D=Math.max(0,D-1);else if(D===0)return!0;return!1}var An={SELECT_STAR:/^SELECT\s+\*/i,SELECT:/^SELECT\s+/i,SELECT_FROM:/^SELECT\s+(.+?)\s+FROM/i,WHERE:/\bWHERE\b/i,ORDER_BY:/\bORDER\s+BY\b/i,GROUP_BY:/\bGROUP\s+BY\b/i,LIMIT:/\sLIMIT\s+\d+/i,OFFSET:/\sOFFSET\s+\d+/i,IDENTIFIER:/^[A-Z_][\w.]*$/i,DELETED_AT:/\bdeleted_at\b/i},ss=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function Xt(d,h){if(!An.IDENTIFIER.test(d)){let D=h?` in ${h}`:"";throw Error(`[query-builder] Invalid identifier${D}: '${d}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function qn(d,h){if(typeof d!=="string")throw TypeError(`[query-builder] ${h}: operator must be a string, got ${typeof d}`);let D=d.toLowerCase();if(!ss.has(D))throw TypeError(`[query-builder] ${h}: refusing to use '${d}' as a SQL operator \u2014 not in the allowed set (${[...ss].join(", ")})`);return d}function Jn(d,h){if(typeof d!=="string"||d.length===0)throw TypeError(`[query-builder] ${h}: identifier must be a non-empty string, got ${typeof d}`);if(d.length>129)throw TypeError(`[query-builder] ${h}: identifier '${d}' too long`);let D=d.split(".");if(D.length>2)throw TypeError(`[query-builder] ${h}: identifier '${d}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let E of D)if(!/^[A-Z_][A-Z0-9_]*$/i.test(E))throw TypeError(`[query-builder] ${h}: identifier segment '${E}' contains characters outside [A-Za-z0-9_]`)}function ur(d,h){if(typeof d==="string")return li(h),d;if(d===null||d===void 0)throw TypeError(`[query-builder] ${h}: fragment must be a SqlFragment, got ${d}`);if(Xn(d))return d.raw;if(typeof d==="object"){let D=d;if(typeof D.raw==="string")return D.raw;if(typeof D.raw==="function"){let V=D.raw();if(typeof V==="string")return V}if(typeof D.sql==="string")return D.sql;let E=String(d);if(E!=="[object Object]"&&E!=="[object Promise]")return E}throw TypeError(`[query-builder] ${h}: cannot render this value as a SQL fragment. `+"A Bun `sql`...`` query object cannot be converted to SQL text \u2014 pass a "+"string, or use the exported `raw` helper: raw`count(*) as c` / raw('age > 18').")}var is=new Set;function li(d){if(is.has(d))return;is.add(d),console.warn(`[query-builder] ${d}: bare string passed to a *Raw method. Prefer the \`raw\`...\`\` tagged template, which escapes interpolated `+"values for the configured dialect \u2014 concatenating request input into SQL "+"is an injection vector. This will become a hard error in a future release.")}function Ct(d,h=e.dialect){return n(h)?d.replace(/\\/g,"\\\\").replace(/'/g,"''"):d.replace(/'/g,"''")}function nr(d){if(d===null)return"NULL";if(typeof d==="number"&&Number.isFinite(d))return String(d);if(typeof d==="boolean")return d?"1":"0";if(typeof d==="string")return`'${Ct(d)}'`;if(d instanceof Date)return`'${d.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof d}`)}function ui(d,h){let D=Array.isArray(d)?d:d?[d]:[],E=[];if(D.length)E.push(`PARTITION BY ${D.join(", ")}`);if(h&&h.length)E.push(`ORDER BY ${h.map(([V,ke])=>`${V} ${ke==="desc"?"DESC":"ASC"}`).join(", ")}`);return E.length?`OVER (${E.join(" ")})`:"OVER ()"}class as{cache=new Map;maxSize=100;get(d){let h=this.cache.get(d);if(!h)return null;if(Date.now()>h.expiresAt)return this.cache.delete(d),null;return this.cache.delete(d),this.cache.set(d,h),h.data}set(d,h,D){if(this.cache.has(d))this.cache.delete(d);if(this.cache.size>=this.maxSize){let E=Date.now(),V=!1;for(let[ke,xe]of this.cache)if(E>xe.expiresAt){if(this.cache.delete(ke),V=!0,this.cache.size<this.maxSize)break}if(!V){let ke=this.cache.keys().next().value;if(ke!==void 0)this.cache.delete(ke)}}this.cache.set(d,{data:h,expiresAt:Date.now()+D})}clear(){this.cache.clear()}setMaxSize(d){this.maxSize=Math.max(0,Math.floor(d));while(this.cache.size>this.maxSize){let h=this.cache.keys().next().value;if(h===void 0)break;this.cache.delete(h)}}}var Cr=new as;function ci(d){let h=String(d?.message||"").toLowerCase();return h.includes("deadlock")||h.includes("serialization failure")||h.includes("could not serialize access")||h.includes("deadlock found when trying to get lock")||h.includes("lock wait timeout exceeded")||h.includes("database is locked")||h.includes("busy")}function di(d,h){if(!h||h.length===0)return!1;let D=d&&(d.code||d.sqlState||d.sqlstate);if(!D)return!1;return h.includes(D)}function fi(d){return new Promise((h)=>setTimeout(h,d))}var Mr=new Map,mi=500,gi=[{key:"GROUP_BY",pattern:/GROUP\s+BY\b/iy},{key:"ORDER_BY",pattern:/ORDER\s+BY\b/iy},{key:"HAVING",pattern:/HAVING\b/iy},{key:"OFFSET",pattern:/OFFSET\b/iy},{key:"LIMIT",pattern:/LIMIT\b/iy},{key:"WHERE",pattern:/WHERE\b/iy}],yi=[{key:"tail",pattern:/GROUP\s+BY\b/iy},{key:"tail",pattern:/ORDER\s+BY\b/iy},{key:"tail",pattern:/HAVING\b/iy},{key:"tail",pattern:/LIMIT\b/iy},{key:"tail",pattern:/OFFSET\b/iy},{key:"tail",pattern:/WINDOW\b/iy},{key:"tail",pattern:/UNION\b/iy},{key:"tail",pattern:/INTERSECT\b/iy},{key:"tail",pattern:/EXCEPT\b/iy},{key:"tail",pattern:/FOR\s+UPDATE\b/iy},{key:"tail",pattern:/FOR\s+SHARE\b/iy},{key:"tail",pattern:/LOCK\s+IN\s+SHARE\s+MODE\b/iy}],pi=[{key:"cut",pattern:/GROUP\s+BY\b/iy},{key:"cut",pattern:/ORDER\s+BY\b/iy},{key:"cut",pattern:/WHERE\b/iy},{key:"cut",pattern:/HAVING\b/iy},{key:"cut",pattern:/LIMIT\b/iy},{key:"cut",pattern:/OFFSET\b/iy},{key:"cut",pattern:/UNION\b/iy}];function wr(d){let h=Mr.get(d);if(h!==void 0)return h;let D=hi(d);if(Mr.size>=mi)Mr.clear();return Mr.set(d,D),D}function hi(d){let h=Re(d,gi);if(h.length<=1)return d;let D=d.slice(0,h[0].start).trimEnd(),E={};for(let xe=0;xe<h.length;xe++){let Ke=h[xe].start,ve=xe+1<h.length?h[xe+1].start:d.length,Ve=d.slice(Ke,ve).trim();if(!E[h[xe].key])E[h[xe].key]=[];E[h[xe].key].push(Ve)}let ke=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((xe)=>E[xe]).map((xe)=>E[xe].join(" ")).join(" ");return ke?`${D} ${ke}`:D}function Ti(d,h){let D=Math.max(1,h?.baseMs??50),E=Math.max(1,h?.factor??2),V=Math.max(D,h?.maxMs??2000),ke=Math.min(V,D*E**Math.max(0,d-1));if(h?.jitter)ke=Math.min(V,ke*(0.9+Math.random()*0.2));return Math.floor(ke)}function i(d){let h=d?.sql??w(),D=d?.meta,E=d?.schema,V,ke=(Fe,Ue)=>{let _e=D?.temporalColumns?.[Fe];if(!_e||_e.length===0||!n(e.dialect))return Ue;return Ue.map((Ne)=>{let St=null;for(let He of _e){if(!(He in Ne))continue;let Gt=kt(Ne[He]);if(Gt!==Ne[He])St=St??{...Ne},St[He]=Gt}return St??Ne})};function xe(Fe){if(typeof Fe==="number")return Fe;let Ue=String(Fe),_e=7;for(let Ne=0;Ne<Ue.length;Ne++)_e=_e*31+Ue.charCodeAt(Ne)|0;return Math.abs(_e)}function Ke(){if(!d?.hooks)return e.hooks;return{...e.hooks,...d.hooks}}let ve=new Map;function Ve(Fe){if(Array.isArray(Fe)){let[He,Gt,Lt]=Fe;Xt(He,"where(column)");let qt=String(He);switch(Gt){case"in":if(Array.isArray(Lt)){let Dt=s(Lt.length);return h.unsafe(`${qt} IN (${Dt})`,Lt)}return h.unsafe(`${qt} IN (${t(1)})`,[Lt]);case"not in":if(Array.isArray(Lt)){let Dt=s(Lt.length);return h.unsafe(`${qt} NOT IN (${Dt})`,Lt)}return h.unsafe(`${qt} NOT IN (${t(1)})`,[Lt]);case"like":return h.unsafe(`${qt} LIKE ${t(1)}`,[Lt]);case"is":case"is not":{if(Lt!==null&&Lt!==void 0)throw TypeError(`[query-builder] where(..., '${Gt}', ?): operator '${Gt}' only accepts NULL/undefined as value, got ${typeof Lt} (${String(Lt)})`);return h.unsafe(`${qt} IS ${Gt==="is not"?"NOT ":""}NULL`)}case"!=":return h.unsafe(`${qt} <> ${t(1)}`,[Lt]);case"<":case">":case"<=":case">=":case"=":return h.unsafe(`${qt} ${Gt} ${t(1)}`,[Lt]);default:throw TypeError(`[query-builder] where(..., '${String(Gt)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in Fe)return Fe.raw;let Ue=Object.keys(Fe);if(Ue.length===0)return h.unsafe("");let _e=[],Ne=[],St=1;for(let He of Ue){Xt(He,"where(object key)");let Gt=Fe[He];if(Array.isArray(Gt)){let Lt=s(Gt.length,St);_e.push(`${He} IN (${Lt})`),Ne.push(...Gt),St+=Gt.length}else _e.push(`${He} = ${t(St++)}`),Ne.push(Gt)}return h.unsafe(_e.join(" AND "),Ne)}function gt(Fe,Ue,_e){if(!_e)return Ue;let Ne=Ve(_e);return h`${Ue} WHERE ${Ne}`}function pt(Fe){let Ue=e.debug?.captureText;if(e.debug)e.debug.captureText=!0;let _e=String(Fe);if(e.debug)e.debug.captureText=Ue;return _e}function xt(Fe){if(!Fe||typeof Fe!=="object")return;if(Array.isArray(Fe.values))return Fe.values;if(Array.isArray(Fe.parameters))return Fe.parameters;if(Array.isArray(Fe.params))return Fe.params;return}function ht(Fe,Ue,_e){let Ne=Ke(),St=Ne?.slowQueryThresholdMs,He=St!=null&&St>=0,Gt=Boolean(Ne?.onSlowQuery||He),Lt=Ne&&(Ne.onQueryStart||Ne.onQueryEnd||Ne.onQueryError||Ne.startSpan||Gt),qt=_e?.timeoutMs&&_e.timeoutMs>0||_e?.signal;if(!Lt&&!qt)return Fe.execute();let Dt=pt(Fe),yt=xt(Fe),wt=Date.now(),$t;try{if(Ne?.onQueryStart?.({sql:Dt,params:yt,kind:Ue}),Ne?.startSpan)$t=Ne.startSpan({sql:Dt,params:yt,kind:Ue})}catch{}let vt=!1,Wt=(Vt,zt,_t=Boolean(Vt))=>{if(vt)return;vt=!0;let yn=Date.now()-wt;try{if(_t)Ne?.onQueryError?.({sql:Dt,params:yt,error:Vt,durationMs:yn,kind:Ue});else if(Ne?.onQueryEnd?.({sql:Dt,params:yt,durationMs:yn,rowCount:zt,kind:Ue}),He&&yn>=St)if(Ne?.onSlowQuery)Ne.onSlowQuery({sql:Dt,params:yt,durationMs:yn,kind:Ue});else console.warn(`[query-builder] slow query (${yn}ms >= ${St}ms): ${Dt}`)}catch{}try{$t?.end(Vt)}catch{}};if(typeof Fe.executeSync==="function"){let Vt,zt,_t=!1;try{Vt=Fe.executeSync()}catch(Sn){zt=Sn,_t=!0}if(_e?.signal?.aborted){try{Fe.cancel?.()}catch{}zt=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),_t=!0}if(_t)return Wt(zt,void 0,!0),Promise.reject(zt);let yn=Array.isArray(Vt)?Vt.length:typeof Vt==="number"?Vt:void 0;return Wt(void 0,yn),Promise.resolve(Vt)}let Et=Fe.execute(),Ot=[Et],Ht;if(_e?.timeoutMs&&_e.timeoutMs>0){let Vt=new Promise((zt,_t)=>{Ht=setTimeout(()=>{try{Fe.cancel?.()}catch{}let yn=Error(`Query timed out after ${_e.timeoutMs}ms`);yn.code="EBQBTIMEOUT",_t(yn)},_e.timeoutMs)});Ot.push(Vt)}if(_e?.signal){if(_e.signal.aborted){try{Fe.cancel?.()}catch{}let zt=Error("Query aborted");return zt.code="EBQBABORT",Wt(zt),Promise.reject(zt)}let Vt=()=>{try{Fe.cancel?.()}catch{}};_e.signal.addEventListener("abort",Vt,{once:!0}),Et.finally(()=>{_e.signal?.removeEventListener("abort",Vt)})}return Promise.race(Ot).then((Vt)=>{clearTimeout(Ht);let zt=Array.isArray(Vt)?Vt.length:typeof Vt==="number"?Vt:void 0;return Wt(void 0,zt),Vt}).catch((Vt)=>{throw clearTimeout(Ht),Wt(Vt),Vt})}function Jt(Fe){if(typeof Fe==="number")return Number.isFinite(Fe)?Fe:0;if(typeof Fe==="bigint")return Number(Fe);if(!Fe||typeof Fe!=="object")return 0;let Ue=Fe;for(let _e of["changes","affectedRows","count","rowCount","numAffectedRows","numUpdatedRows","numDeletedRows","numInsertedOrUpdatedRows"])if(Ue[_e]!==void 0&&Ue[_e]!==null)return Jt(Ue[_e]);if(Array.isArray(Fe))return Fe.reduce((_e,Ne)=>_e+Jt(Ne),0);return 0}function jt(Fe,Ue){let _e=Ue??pt(Fe);return{sql:_e,toString:()=>_e,execute:()=>Fe.execute(),values:()=>Fe.values(),raw:()=>Fe.raw()}}function Tn(Fe,Ue){let _e=h,Ne=Ue&&Ue.length>0?`SELECT ${Ue.join(", ")} FROM ${String(Fe)}`:`SELECT * FROM ${String(Fe)}`,St=[],He=[],Gt=!1,Lt=!1,qt=!1,Dt=null,yt=()=>{if(Dt===null){let U=wr(Wt());Dt=He.length>0?h.unsafe(U,He):h.unsafe(U)}return Dt},wt=(U,G)=>{St.push({conn:U,sql:G}),Dt=null},$t=(U,G)=>{wt(U==="OR"?"OR":"AND",G)},vt=(U)=>{let G=Re(U,yi,1);return G.length>0?G[0].start:-1},Wt=(U)=>{let G=x(U?[...St,U]:St);if(!G)return Ne;if(Gt)return`${Ne} ${Lt?"AND":"WHERE"} ${G}`;let Le=vt(Ne);return Le>=0?`${Ne.slice(0,Le)}WHERE ${G} ${Ne.slice(Le)}`:`${Ne} WHERE ${G}`},Et=(U,G)=>{let Le=Tn(Fe);G(Le);let je=Le.__whereState?.();if(!je||!je.body)throw TypeError("[query-builder] whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");let bt=He.length,It=bt>0&&e.dialect==="postgres"?je.body.replace(/\$(\d+)/g,(Ft,Ut)=>`$${Number(Ut)+bt}`):je.body;He.push(...je.params),wt(U,`(${It})`)},Ot=(U,G,Le,je,bt,It)=>{if(typeof je==="string"&&bt!==void 0){Xt(String(je),`${Le}(column)`),qn(bt,`${Le}(operator)`);let Ft=He.length+1;return He.push(It),wt(G,`${String(je)} ${String(bt)} ${t(Ft)}`),U}if(Array.isArray(je)){let[Ft,Ut,Yt]=je,Kt=String(Ft);Xt(Kt,`${Le}(column)`);let Qt=qn(Ut,`${Le}(operator)`);if(Qt==="in"||Qt==="not in"){let bn=Array.isArray(Yt)?Yt:[Yt],Rn=s(bn.length,He.length+1),vn=o(l(Kt),bn,Qt==="not in",Rn);He.push(...bn),wt(G,vn)}else{let bn=He.length+1;He.push(Yt),wt(G,`${Kt} ${Qt} ${t(bn)}`)}return U}if(typeof je==="function")return Et(G,je),U;if(je&&typeof je==="object"&&!("raw"in je)){let Ft=[];for(let Ut of Object.keys(je)){Xt(Ut,`${Le}(column)`);let Yt=je[Ut];if(Array.isArray(Yt)){let Kt=s(Yt.length,He.length+1);Ft.push(o(l(Ut),Yt,!1,Kt)),He.push(...Yt)}else{let Kt=He.length+1;Ft.push(`${Ut} = ${t(Kt)}`),He.push(Yt)}}if(Ft.length>0)wt(G,Ft.length>1?`(${Ft.join(" AND ")})`:Ft[0]);return U}if(je&&typeof je.raw<"u")return wt(G,je.raw),U;return U},Ht=(U,G)=>{if(St.length>0)Ne=Wt(),St.length=0;Gt=!0;let Le=G.__rawState?.();if(Le){let je=He.length,bt=e.dialect==="postgres"?Le.sql.replace(/\$(\d+)/g,(It,Ft)=>`$${Number(Ft)+je}`):Le.sql;Ne+=` ${U} ${bt}`,He.push(...Le.params),Lt=G.__hasPredicate?.()??An.WHERE.test(bt)}else{let je=String(G.toSQL());Ne+=` ${U} ${je}`,Lt=G.__hasPredicate?.()??An.WHERE.test(je)}Dt=null},Vt=(U)=>{let G=Re(Ne,pi,1),Le=G.length>0?G[0].start:-1;Ne=Le>=0?`${Ne.slice(0,Le)}${U} ${Ne.slice(Le)}`:`${Ne} ${U}`,Dt=null},zt=new Set,_t,yn,Sn=!1,En=!1,$n=!1,Cn=new Map,Fn=new Set,er=60000,Mn=(U)=>y(e.relations.singularizeStrategy)(U),Yn=(U)=>{if(!D)return null;return S(D,String(Fe),U,{singularize:Mn,models:D.models})},lr=(U)=>{if(!U||typeof U!=="object"||Fn.size===0)return U;let G;for(let Le of Object.keys(U))if(Le.startsWith("pivot_")){if(!G)G={};G[Le.slice(6)]=U[Le],delete U[Le]}if(G)U.pivot=G;return U},tr=(U)=>{if(Fn.size===0||!U)return U;if(Array.isArray(U))for(let G=0;G<U.length;G++)lr(U[G]);else lr(U);return U},yr=(U)=>{if(!D)return;if(zt.has(U.pivotTable))return;let G=String(Fe),Le=D.primaryKeys[G]??"id";Xt(U.pivotTable,"wherePivot auto-join (pivot table)"),Xt(U.fkParent,"wherePivot auto-join (parent FK)"),Xt(G,"wherePivot auto-join (parent table)"),Xt(Le,"wherePivot auto-join (parent PK)"),Dt=_e`${yt()} LEFT JOIN ${_e(U.pivotTable)} ON ${_e(`${U.pivotTable}.${U.fkParent}`)} = ${_e(`${G}.${Le}`)}`,Ne=`${Ne} LEFT JOIN ${U.pivotTable} ON ${U.pivotTable}.${U.fkParent} = ${G}.${Le}`,zt.add(U.pivotTable)},pr=(U)=>{if(An.SELECT_STAR.test(Ne))Ne=Ne.replace(An.SELECT_STAR,`SELECT *, ${U}`);else if(An.SELECT.test(Ne))Ne=Ne.replace(An.SELECT_FROM,`SELECT $1, ${U} FROM`);let G=String(yt());if(An.SELECT_STAR.test(G)){let Le=G.replace(An.SELECT_STAR,`SELECT *, ${U}`);Dt=h.unsafe(Le)}else if(An.SELECT.test(G)){if(An.SELECT_FROM.exec(G)){let je=G.replace(An.SELECT_FROM,`SELECT $1, ${U} FROM`);Dt=h.unsafe(je)}}},Gn=(U,G,Le,je)=>{pr(`${U} ${ui(Le,je)} AS ${G}`)},Nr=(U,G,Le,je)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)");let bt=`${U.endsWith("s")?U.slice(0,-1):U}_id`;Xt(bt,"relationship subquery (foreign key)");let It=`SELECT 1 FROM ${G} WHERE ${G}.${bt} = ${U}.${Le}`;if(je){let Ut=je({where:(Yt,Kt,Qt)=>(Xt(Yt,"relationship subquery condition"),`${G}.${Yt} ${qn(Kt,"whereHas callback")} ${nr(Qt)}`)});if(Ut)It+=` AND ${Ut}`}return It},kr=(U,G,Le,je)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)");let bt=`${G.endsWith("s")?G.slice(0,-1):G}_id`;Xt(bt,"relationship subquery (foreign key)");let It=`SELECT 1 FROM ${G} WHERE ${G}.${Le} = ${U}.${bt}`;if(je){let Ut=je({where:(Yt,Kt,Qt)=>(Xt(Yt,"relationship subquery condition"),`${G}.${Yt} ${qn(Kt,"whereHas callback")} ${nr(Qt)}`)});if(Ut)It+=` AND ${Ut}`}return It},Br=(U,G,Le,je,bt,It)=>{Xt(U,"relationship subquery (parent table)"),Xt(G,"relationship subquery (target table)"),Xt(Le,"relationship subquery (primary key)"),Xt(je,"relationship subquery (target primary key)");let Ft=It&&D?S(D,U,It,{singularize:Mn,models:D.models}):null,Ut=Mn(U),Yt=Mn(G),Kt=Ft?.pivotTable??[Ut,Yt].sort().join("_"),Qt=Ft?.fkParent??`${Ut}_id`,bn=Ft?.fkRelated??`${Yt}_id`;Xt(Kt,"relationship subquery (pivot table)"),Xt(Qt,"relationship subquery (foreign key A)"),Xt(bn,"relationship subquery (foreign key B)");let Rn=`SELECT 1 FROM ${Kt} JOIN ${G} ON ${G}.${je} = ${Kt}.${bn} WHERE ${Kt}.${Qt} = ${U}.${Le}`;if(bt){let wn=bt({where:(_n,Un,jn)=>(Xt(_n,"relationship subquery condition"),`${G}.${_n} ${qn(Un,"whereHas callback")} ${nr(jn)}`)});if(wn)Rn+=` AND ${wn}`}return Rn},Ys=(U,G,Le)=>{Xt(U,"withCount (parent table)"),Xt(G,"withCount (target table)"),Xt(Le,"withCount (primary key)");let je=`${U.endsWith("s")?U.slice(0,-1):U}_id`;return Xt(je,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${G} WHERE ${G}.${je} = ${U}.${Le})`},Gs=(U,G,Le,je)=>{Xt(U,"withCount (parent table)"),Xt(G,"withCount (target table)"),Xt(Le,"withCount (primary key)");let bt=je&&D?S(D,U,je,{singularize:Mn,models:D.models}):null,It=Mn(U),Ft=Mn(G),Ut=bt?.pivotTable??[It,Ft].sort().join("_"),Yt=bt?.fkParent??`${It}_id`;return Xt(Ut,"withCount (pivot table)"),Xt(Yt,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${Ut} WHERE ${Ut}.${Yt} = ${U}.${Le})`},Ar=(U,G,Le)=>{if(!D)return;Xt(Le,`with${U[0]}${U.slice(1).toLowerCase()} (column)`);let je=String(Fe),bt=D.relations?.[je];if(!bt)return;let It=Object.entries(bt).find(([wn,_n])=>_n&&typeof _n==="object"&&(G in _n));if(!It)return;let[Ft,Ut]=It,Yt=Ut[G],Kt=typeof Yt==="string"?Yt:Yt?.model||Yt?.target||Yt,Qt=D.modelToTable[Kt]||Kt,bn=D.primaryKeys[je]??"id";Xt(Qt,`with${U} (target table)`);let Rn=`${U}(${Qt}.${Le})`,vn;if(Ft==="hasMany"||Ft==="hasOne"){let wn=`${je.endsWith("s")?je.slice(0,-1):je}_id`;Xt(wn,`with${U} (foreign key)`),vn=`(SELECT ${Rn} FROM ${Qt} WHERE ${Qt}.${wn} = ${je}.${bn})`}else if(Ft==="belongsToMany"){let wn=D?S(D,je,G,{singularize:Mn,models:D.models}):null,_n=Mn(je),Un=Mn(Qt),jn=wn?.pivotTable??[_n,Un].sort().join("_"),Kn=wn?.fkParent??`${_n}_id`,xn=wn?.fkRelated??`${Un}_id`,hr=D.primaryKeys[Qt]??"id";Xt(jn,`with${U} (pivot table)`),Xt(Kn,`with${U} (foreign key)`),Xt(xn,`with${U} (related key)`),vn=`(SELECT ${Rn} FROM ${jn} JOIN ${Qt} ON ${Qt}.${hr} = ${jn}.${xn} WHERE ${jn}.${Kn} = ${je}.${bn})`}else return;pr(`${vn} AS ${G}_${U.toLowerCase()}_${Le}`)},ns=()=>{if(Cn.size===0)return;let U=[];for(let[G,Le]of Cn.entries()){let je=Yn(G);if(!je)continue;for(let It of Le)Xt(It,"withPivot");let bt=Le.map((It)=>`${je.pivotTable}.${It} AS pivot_${It}`);U.push(...bt)}if(U.length>0){let G=U.join(", ");pr(G)}};return new Proxy({distinct(){return Ne=Ne.replace(/^SELECT\s+/i,"SELECT DISTINCT "),Dt=null,this},distinctOn(...U){let G=U.map(String).join(", ");return Ne=Ne.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${G}) `),Dt=null,this},selectRaw(U){let G=ur(U,"selectRaw(fragment)"),Le=Ne.indexOf(" FROM ");if(Le!==-1)Ne=`${Ne.substring(0,Le)}, ${G}${Ne.substring(Le)}`;else Ne+=`, ${G}`;return Dt=null,this},rowNumber(U="row_number",G,Le){let je=[];if(G){let Ut=Array.isArray(G)?G:[G];je.push(`PARTITION BY ${Ut.join(", ")}`)}if(Le&&Le.length)je.push(`ORDER BY ${Le.map(([Ut,Yt])=>`${Ut} ${Yt==="desc"?"DESC":"ASC"}`).join(", ")}`);let It=`ROW_NUMBER() ${je.length?`OVER (${je.join(" ")})`:"OVER ()"} AS ${U}`,Ft=Ne.indexOf(" FROM ");if(Ft!==-1)Ne=`${Ne.substring(0,Ft)}, ${It}${Ne.substring(Ft)}`;else Ne+=`, ${It}`;return Dt=null,this},denseRank(U="dense_rank",G,Le){let je=Array.isArray(G)?G:G?[G]:[],bt=[];if(je.length)bt.push(`PARTITION BY ${je.join(", ")}`);if(Le&&Le.length)bt.push(`ORDER BY ${Le.map(([Yt,Kt])=>`${Yt} ${Kt==="desc"?"DESC":"ASC"}`).join(", ")}`);let Ft=`DENSE_RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ne.indexOf(" FROM ");if(Ut!==-1)Ne=`${Ne.substring(0,Ut)}, ${Ft}${Ne.substring(Ut)}`;else Ne+=`, ${Ft}`;return Dt=null,this},rank(U="rank",G,Le){let je=Array.isArray(G)?G:G?[G]:[],bt=[];if(je.length)bt.push(`PARTITION BY ${je.join(", ")}`);if(Le&&Le.length)bt.push(`ORDER BY ${Le.map(([Yt,Kt])=>`${Yt} ${Kt==="desc"?"DESC":"ASC"}`).join(", ")}`);let Ft=`RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ne.indexOf(" FROM ");if(Ut!==-1)Ne=`${Ne.substring(0,Ut)}, ${Ft}${Ne.substring(Ut)}`;else Ne+=`, ${Ft}`;return Dt=null,this},over(U,G,Le={}){return Gn(U,G,Le.partitionBy,Le.orderBy),this},lag(U,G={}){let Le=[U,String(G.offset??1)];if(G.defaultValue!==void 0)Le.push(String(G.defaultValue));return Gn(`LAG(${Le.join(", ")})`,G.alias??`${U}_lag`,G.partitionBy,G.orderBy),this},lead(U,G={}){let Le=[U,String(G.offset??1)];if(G.defaultValue!==void 0)Le.push(String(G.defaultValue));return Gn(`LEAD(${Le.join(", ")})`,G.alias??`${U}_lead`,G.partitionBy,G.orderBy),this},sumOver(U,G={}){return Gn(`SUM(${U})`,G.alias??`${U}_sum`,G.partitionBy,G.orderBy),this},avgOver(U,G={}){return Gn(`AVG(${U})`,G.alias??`${U}_avg`,G.partitionBy,G.orderBy),this},countOver(U="*",G={}){return Gn(`COUNT(${U})`,G.alias??"count_over",G.partitionBy,G.orderBy),this},minOver(U,G={}){return Gn(`MIN(${U})`,G.alias??`${U}_min`,G.partitionBy,G.orderBy),this},maxOver(U,G={}){return Gn(`MAX(${U})`,G.alias??`${U}_max`,G.partitionBy,G.orderBy),this},firstValue(U,G={}){return Gn(`FIRST_VALUE(${U})`,G.alias??`${U}_first`,G.partitionBy,G.orderBy),this},lastValue(U,G={}){return Gn(`LAST_VALUE(${U})`,G.alias??`${U}_last`,G.partitionBy,G.orderBy),this},selectAll(){return this},select(U){if(!U)return this;let G=Array.isArray(U)?U:[U];if(G.length===0)return this;let Le=G.map(rs),je=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(Ne),bt=je?je[1]:"",It=Ne.indexOf(" FROM ");if(It!==-1)Ne=`SELECT ${bt}${Le.join(", ")}${Ne.substring(It)}`;else Ne=`SELECT ${bt}${Le.join(", ")} FROM ${Fe}`;return Dt=null,this},addSelect(...U){if(!U.length)return this;let G=U.map(rs),Le=Ne.indexOf(" FROM ");if(Le!==-1)Ne=`${Ne.substring(0,Le)}, ${G.join(", ")}${Ne.substring(Le)}`;else Ne+=`, ${G.join(", ")}`;return Dt=null,this},with(...U){if(!D||!U||U.length===0)return this;let G=[];for(let Kt of U){if(!Kt)continue;if(typeof Kt==="string")G.push({name:Kt});else if(typeof Kt==="object"&&!Array.isArray(Kt))for(let[Qt,bn]of Object.entries(Kt))if(typeof bn==="function")G.push({name:Qt,callback:bn});else G.push({name:Qt})}if(G.length===0)return this;let Le=e.relations.maxEagerLoad??50;if(G.length>Le)throw Error(`[query-builder] Too many relationships to eager load (${G.length}). Maximum allowed: ${Le}`);let je=String(Fe),bt=new Set,It=new Set,Ft=new Map,Ut=(Kt)=>{let Qt=D.relations?.[Kt];if(!Qt)return[];return[...Object.keys(Qt.hasOne||{}),...Object.keys(Qt.hasMany||{}),...Object.keys(Qt.belongsTo||{}),...Object.keys(Qt.belongsToMany||{}),...Object.keys(Qt.hasOneThrough||{}),...Object.keys(Qt.hasManyThrough||{}),...Object.keys(Qt.morphOne||{}),...Object.keys(Qt.morphMany||{}),...Object.keys(Qt.morphToMany||{}),...Object.keys(Qt.morphedByMany||{})]},Yt=(Kt,Qt,bn=0,Rn)=>{let vn=e.relations.maxDepth??10;if(bn>=vn)throw Error(`[query-builder] Maximum relationship depth (${vn}) exceeded at '${Qt}'. Consider using separate queries or increasing maxDepth.`);let wn=D.relations?.[Kt];if(!wn)return Kt;let _n=(Nn)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let kn=e.softDeletes.column||"deleted_at";return` AND ${Nn}.${kn} IS NULL`}return""},Un=(Nn)=>{if(!Rn)return"";let kn=[],In=(Bn,Wn,zn)=>{Xt(String(Bn),"with() constraint column");let dr=qn(Wn,"with() constraint operator");kn.push(`${Nn}.${String(Bn)} ${dr} ${nr(zn)}`)},On=(Bn)=>()=>{throw Error(`[query-builder] with('${Qt}', ...): ${Bn} is not supported inside a constraint callback on the JOIN-based builder \u2014 apply it to the outer query, or use the model layer's eager loading. (Silently ignoring it would return wrong data.)`)},Pn={where:(Bn,Wn,zn)=>{if(Array.isArray(Bn))In(Bn[0],Bn[1],Bn[2]);else if(Bn&&typeof Bn==="object")for(let dr of Object.keys(Bn))In(dr,"=",Bn[dr]);else if(Wn!==void 0&&zn!==void 0)In(Bn,Wn,zn);else if(Wn!==void 0)In(Bn,"=",Wn);return Pn},whereIn:(Bn,Wn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IN (${Wn.map(nr).join(", ")})`),Pn),whereNull:(Bn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IS NULL`),Pn),whereNotNull:(Bn)=>(Xt(String(Bn),"with() constraint column"),kn.push(`${Nn}.${String(Bn)} IS NOT NULL`),Pn),orderBy:On("orderBy()"),limit:On("limit()"),offset:On("offset()"),take:On("take()")};return Rn(Pn),kn.length?` AND ${kn.join(" AND ")}`:""},jn=()=>{let Nn=(On)=>{let Pn=On?.[Qt];return Pn?D.modelToTable[Pn]:void 0},kn=(On)=>{let Pn=On?.[Qt],Bn=typeof Pn==="string"?Pn:Pn?.model;return Bn?D.modelToTable[Bn]:void 0},In=(On)=>{let Pn=On?.[Qt];return Pn?.target?D.modelToTable[Pn.target]:void 0};return Nn(wn?.hasOne)||Nn(wn?.hasMany)||Nn(wn?.belongsTo)||kn(wn?.belongsToMany)||In(wn?.hasOneThrough)||In(wn?.hasManyThrough)||Nn(wn?.morphOne)||Nn(wn?.morphMany)||Nn(wn?.morphToMany)||Nn(wn?.morphedByMany)},Kn=jn()??(D.modelToTable[Qt]||D.tableToModel[Qt]?D.modelToTable[Qt]??Qt:Qt),xn=String(Kn);if(!Kn||!jn()&&!D.modelToTable[Qt]&&!D.tableToModel[Qt]){let Nn=Ut(Kt);if(Nn.length>0&&!Nn.includes(Qt)){let kn=` Available relationships: ${Nn.join(", ")}`;throw Error(`[query-builder] Relationship '${Qt}' not found on table '${Kt}'.${kn}`)}}if(e.relations.detectCycles!==!1){let Nn=`${Kt}->${xn}`;if(bt.has(Nn))throw Error(`[query-builder] Circular relationship detected: ${Nn}. This would cause an infinite loop.`);bt.add(Nn)}if(!xn||xn===Kt)return Kt;let hr=wn?.hasOneThrough?.[Qt]||wn?.hasManyThrough?.[Qt];if(hr){let{through:Nn,target:kn}=hr,In=D.modelToTable[Nn]||Nn,On=D.modelToTable[kn]||kn,Pn=D.primaryKeys[Kt]??"id",Bn=D.primaryKeys[In]??"id",Wn=`${Mn(Kt)}_id`,zn=`${Mn(In)}_id`;return Vt(`LEFT JOIN ${In} ON ${In}.${Wn} = ${Kt}.${Pn} LEFT JOIN ${On} ON ${On}.${zn} = ${In}.${Bn}`),zt.add(In),zt.add(On),On}if(Boolean(wn?.belongsToMany?.[Qt])){let Nn=S(D,Kt,Qt,{singularize:Mn,models:D.models}),kn=Nn?.pivotTable??[Mn(Kt),Mn(xn)].sort().join("_"),In=D.primaryKeys[Kt]??"id",On=D.primaryKeys[xn]??"id",Pn=Nn?.fkParent??`${Mn(Kt)}_id`,Bn=Nn?.fkRelated??`${Mn(xn)}_id`;return Vt(`LEFT JOIN ${kn} ON ${kn}.${Pn} = ${Kt}.${In} LEFT JOIN ${xn} ON ${xn}.${On} = ${kn}.${Bn}${Un(xn)}`),zt.add(kn),zt.add(xn),xn}if(Boolean(wn?.morphToMany?.[Qt])){let Nn=Qt,kn=`${Mn(xn)}_${Nn}`,In=D.primaryKeys[Kt]??"id",On=D.primaryKeys[xn]??"id",Pn=`${Nn}_type`,Bn=`${Nn}_id`,Wn=`${Mn(xn)}_id`,zn=nr(D.tableToModel[Kt]||Kt);return Vt(`LEFT JOIN ${kn} ON ${kn}.${Bn} = ${Kt}.${In} AND ${kn}.${Pn} = ${zn} LEFT JOIN ${xn} ON ${xn}.${On} = ${kn}.${Wn}`),zt.add(kn),zt.add(xn),xn}if(Boolean(wn?.morphedByMany?.[Qt])){let Nn=wn.morphedByMany?.[Qt]||Qt,kn=D.modelToTable[Nn]||Nn,In=Mn(Kt),On=`${Mn(kn)}_${In}`,Pn=D.primaryKeys[Kt]??"id",Bn=D.primaryKeys[kn]??"id",Wn=`${In}_type`,zn=`${In}_id`,dr=`${Mn(kn)}_id`,ni=nr(D.tableToModel[kn]||kn);return Vt(`LEFT JOIN ${On} ON ${On}.${dr} = ${Kt}.${Pn} LEFT JOIN ${kn} ON ${kn}.${Bn} = ${On}.${zn} AND ${On}.${Wn} = ${ni}`),zt.add(On),zt.add(kn),kn}if(Boolean(wn?.belongsTo?.[Qt])){let Nn=`${Mn(xn)}_id`,kn=D.primaryKeys[xn]??"id";return Vt(`LEFT JOIN ${xn} ON ${Kt}.${Nn} = ${xn}.${kn}${Un(xn)}`),zt.add(xn),xn}let zs=Boolean(wn?.morphOne?.[Qt]),Xs=Boolean(wn?.morphMany?.[Qt]);if(zs||Xs){let Nn=`${Qt}_type`,kn=`${Qt}_id`,In=D.primaryKeys[Kt]??"id",On=nr(D.tableToModel[Kt]||Kt);return Vt(`LEFT JOIN ${xn} ON ${xn}.${kn} = ${Kt}.${In} AND ${xn}.${Nn} = ${On}`),zt.add(xn),xn}let Zs=`${Mn(Kt)}_id`,ei=D.primaryKeys[Kt]??"id",ti=`${_n(xn)}${Un(xn)}`;return Vt(`LEFT JOIN ${xn} ON ${xn}.${Zs} = ${Kt}.${ei}${ti}`),zt.add(xn),xn};for(let Kt of G){let Qt=Kt.name.trim();if(Kt.callback)Ft.set(Qt,Kt.callback);let bn=Qt.split("."),Rn=je,vn=0;for(let wn of bn){if(!wn||wn.trim().length===0)continue;let _n=wn.trim(),Un=Ft.get(_n);Rn=Yt(Rn,_n,vn,Un)||Rn,vn++}It.add(Qt)}if(Cn.size>0){let Kt=[];for(let[Qt,bn]of Cn.entries()){let Rn=Yn(Qt);if(!Rn)continue;let vn=bn.map((wn)=>`${Rn.pivotTable}.${wn} AS pivot_${wn}`);Kt.push(...vn)}if(Kt.length>0){let Qt=Kt.join(", ");pr(Qt)}}return Dt=null,this},whereHas(U,G){if(!D)return this;let Le=String(Fe),je=D.relations?.[Le];if(!je)throw Error(`[query-builder] No relationships defined for table '${Le}'`);let bt=Object.entries(je).find(([bn,Rn])=>Rn&&typeof Rn==="object"&&(U in Rn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${Le}'`);let[It,Ft]=bt,Ut=Ft[U],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt;if(It==="hasMany"||It==="hasOne"){let bn=D.primaryKeys[Le]??"id";Qt=Nr(Le,Kt,bn,G)}else if(It==="belongsTo"){let bn=D.primaryKeys[Kt]??"id";Qt=kr(Le,Kt,bn,G)}else if(It==="belongsToMany"){let bn=D.primaryKeys[Le]??"id",Rn=D.primaryKeys[Kt]??"id";Qt=Br(Le,Kt,bn,Rn,G,U)}else throw Error(`[query-builder] Unsupported relationship type '${It}' for whereHas`);return $t("WHERE",`EXISTS (${Qt})`),this},whereDoesntHave(U,G){if(!D)return this;let Le=String(Fe),je=D.relations?.[Le];if(!je)throw Error(`[query-builder] No relationships defined for table '${Le}'`);let bt=Object.entries(je).find(([bn,Rn])=>Rn&&typeof Rn==="object"&&(U in Rn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${Le}'`);let[It,Ft]=bt,Ut=Ft[U],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt;if(It==="hasMany"||It==="hasOne"){let bn=D.primaryKeys[Le]??"id";Qt=Nr(Le,Kt,bn,G)}else if(It==="belongsTo"){let bn=D.primaryKeys[Kt]??"id";Qt=kr(Le,Kt,bn,G)}else if(It==="belongsToMany"){let bn=D.primaryKeys[Le]??"id",Rn=D.primaryKeys[Kt]??"id";Qt=Br(Le,Kt,bn,Rn,G,U)}else throw Error(`[query-builder] Unsupported relationship type '${It}' for whereDoesntHave`);return $t("WHERE",`NOT EXISTS (${Qt})`),this},has(U){if(!D)return this;let G=String(Fe),Le=D.relations?.[G];if(!Le)throw Error(`[query-builder] No relationships defined for table '${G}'`);let je=Object.entries(Le).find(([Qt,bn])=>bn&&typeof bn==="object"&&(U in bn));if(!je)throw Error(`[query-builder] Relationship '${U}' not found on table '${G}'`);let[bt,It]=je,Ft=It[U],Ut=typeof Ft==="string"?Ft:Ft?.model||Ft?.target||Ft,Yt=D.modelToTable[Ut]||Ut,Kt;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[G]??"id";Kt=Nr(G,Yt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Yt]??"id";Kt=kr(G,Yt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[G]??"id",bn=D.primaryKeys[Yt]??"id";Kt=Br(G,Yt,Qt,bn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for has`);return $t("WHERE",`EXISTS (${Kt})`),this},doesntHave(U){if(!D)return this;let G=String(Fe),Le=D.relations?.[G];if(!Le)throw Error(`[query-builder] No relationships defined for table '${G}'`);let je=Object.entries(Le).find(([Qt,bn])=>bn&&typeof bn==="object"&&(U in bn));if(!je)throw Error(`[query-builder] Relationship '${U}' not found on table '${G}'`);let[bt,It]=je,Ft=It[U],Ut=typeof Ft==="string"?Ft:Ft?.model||Ft?.target||Ft,Yt=D.modelToTable[Ut]||Ut,Kt;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[G]??"id";Kt=Nr(G,Yt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Yt]??"id";Kt=kr(G,Yt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[G]??"id",bn=D.primaryKeys[Yt]??"id";Kt=Br(G,Yt,Qt,bn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for doesntHave`);return $t("WHERE",`NOT EXISTS (${Kt})`),this},withCount(...U){if(!D||!U||U.length===0)return this;let G=String(Fe);for(let Le of U){let je=D.relations?.[G];if(!je)continue;let bt=Object.entries(je).find(([vn,wn])=>wn&&typeof wn==="object"&&(Le in wn));if(!bt)continue;let[It,Ft]=bt,Ut=Ft[Le],Yt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Kt=D.modelToTable[Yt]||Yt,Qt=D.primaryKeys[G]??"id",bn;if(It==="hasMany"||It==="hasOne")bn=Ys(G,Kt,Qt);else if(It==="belongsToMany")bn=Gs(G,Kt,Qt,Le);else continue;let Rn=`${Le}_count`;pr(`${bn} AS ${Rn}`)}return this},withSum(U,G){return Ar("SUM",U,G),this},withAvg(U,G){return Ar("AVG",U,G),this},withMax(U,G){return Ar("MAX",U,G),this},withMin(U,G){return Ar("MIN",U,G),this},applyPivotColumns(){return ns(),this},withPivot(U,...G){if(!D)return this;let Le=String(Fe),je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${Le}'`);let bt=G&&G.length>0?G:je.hasConfig?je.pivotColumns:[];if(bt.length===0)return this;if(Cn.set(U,bt),je.hasConfig)Fn.add(U);return ns(),this},wherePivot(U,G,Le,je){if(!D)return this;let bt=Yn(U);if(!bt)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(bt.pivotTable,"wherePivot (pivot table)"),Xt(G,"wherePivot (column)"),yr(bt);let It=je===void 0?"=":String(Le),Ft=je===void 0?Le:je,Ut=He.length+1,Yt=`${bt.pivotTable}.${G} ${It} ${t(Ut)}`;if(He.push(Ft),wt("AND",Yt),bt.hasConfig)Fn.add(U);return this},wherePivotIn(U,G,Le){if(!D||!Array.isArray(Le))return this;let je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(je.pivotTable,"wherePivotIn (pivot table)"),Xt(G,"wherePivotIn (column)"),yr(je);let bt=s(Le.length,He.length+1),It=o(`${je.pivotTable}.${G}`,Le,!1,bt);if(He.push(...Le),wt("AND",It),je.hasConfig)Fn.add(U);return this},wherePivotNotIn(U,G,Le){if(!D||!Array.isArray(Le)||Le.length===0)return this;let je=Yn(U);if(!je)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);Xt(je.pivotTable,"wherePivotNotIn (pivot table)"),Xt(G,"wherePivotNotIn (column)"),yr(je);let bt=s(Le.length,He.length+1),It=`${je.pivotTable}.${G} NOT IN (${bt})`;if(He.push(...Le),wt("AND",It),je.hasConfig)Fn.add(U);return this},wherePivotNull(U,G){if(!D)return this;let Le=Yn(U);if(!Le)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(Xt(Le.pivotTable,"wherePivotNull (pivot table)"),Xt(G,"wherePivotNull (column)"),yr(Le),wt("AND",`${Le.pivotTable}.${G} IS NULL`),Le.hasConfig)Fn.add(U);return this},wherePivotNotNull(U,G){if(!D)return this;let Le=Yn(U);if(!Le)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(Xt(Le.pivotTable,"wherePivotNotNull (pivot table)"),Xt(G,"wherePivotNotNull (column)"),yr(Le),wt("AND",`${Le.pivotTable}.${G} IS NOT NULL`),Le.hasConfig)Fn.add(U);return this},where(U,G,Le){if(typeof U==="string"&&G!==void 0){Xt(String(U),"where(column)"),qn(G,"where(operator)");let je=String(G).toLowerCase();if(je==="in"||je==="not in"){let It=Array.isArray(Le)?Le:[Le],Ft=s(It.length,He.length+1),Ut=o(l(String(U)),It,je==="not in",Ft);return He.push(...It),wt("AND",Ut),this}let bt=He.length+1;return He.push(Le),wt("AND",`${l(String(U))} ${String(G)} ${t(bt)}`),this}if(Array.isArray(U)){let[je,bt,It]=U,Ft=String(je);Xt(Ft,"where(column)");let Ut=qn(bt,"where(operator)");if(Ut==="in"||Ut==="not in"){let Yt=Array.isArray(It)?It:[It],Kt=s(Yt.length,He.length+1),Qt=o(l(Ft),Yt,Ut==="not in",Kt);He.push(...Yt),wt("AND",Qt)}else{let Yt=He.length+1;He.push(It),wt("AND",`${l(Ft)} ${Ut} ${t(Yt)}`)}return this}if(U&&typeof U==="object"&&!Xn(U)){let je=U,bt=Object.keys(je),It=[];for(let Ft of bt){Xt(Ft,"where(column)");let Ut=je[Ft];if(Array.isArray(Ut)){let Yt=s(Ut.length,He.length+1);It.push(o(l(Ft),Ut,!1,Yt)),He.push(...Ut)}else{let Yt=He.length+1;It.push(`${l(Ft)} = ${t(Yt)}`),He.push(Ut)}}if(It.length>0)wt("AND",It.length>1?`(${It.join(" AND ")})`:It[0]);return this}if(Xn(U))return wt("AND",U.raw),this;if(typeof U==="function")return Et("AND",U),this;if(U===void 0||U===null)throw TypeError("where() was called with no condition.");if(typeof U==="string")throw TypeError(`where(${JSON.stringify(U)}) is missing an operator and a value. Pass where(column, operator, value), or whereRaw() for a raw fragment.`);throw TypeError(`where() does not understand a condition of type ${typeof U}.`)},whereNull(U){return Xt(String(U),"whereNull(column)"),wt("AND",`${String(U)} IS NULL`),this},whereNotNull(U){return Xt(String(U),"whereNotNull(column)"),wt("AND",`${String(U)} IS NOT NULL`),this},orWhereNull(U){return Xt(String(U),"orWhereNull(column)"),wt("OR",`${String(U)} IS NULL`),this},orWhereNotNull(U){return Xt(String(U),"orWhereNotNull(column)"),wt("OR",`${String(U)} IS NOT NULL`),this},whereBetween(U,G,Le){Xt(String(U),"whereBetween(column)");let je=He.length+1;return He.push(G,Le),wt("AND",`${String(U)} BETWEEN ${t(je)} AND ${t(je+1)}`),this},orWhereBetween(U,G,Le){Xt(String(U),"orWhereBetween(column)");let je=He.length+1;return He.push(G,Le),wt("OR",`${String(U)} BETWEEN ${t(je)} AND ${t(je+1)}`),this},whereExists(U){return wt("AND",`EXISTS (${U.toSQL()})`),this},orWhereExists(U){return wt("OR",`EXISTS (${U.toSQL()})`),this},whereGroup(U){return Et("AND",U),this},orWhereGroup(U){return Et("OR",U),this},__whereState(){return{body:x(St),params:[...He]}},whereJsonContains(U,G){Xt(String(U),"whereJsonContains(column)");let Le=e.dialect,je=He.length+1;if(Le==="postgres"){let It=typeof G==="number"||typeof G==="boolean"?`to_jsonb(${t(je)})`:t(je);if(e.sql?.jsonContainsMode==="function")wt("AND",`jsonb_contains(${U}, ${It})`);else wt("AND",`${U} @> ${It}`);He.push(G)}else if(n(Le))wt("AND",`JSON_CONTAINS(${U}, ${t(je)})`),He.push(JSON.stringify(G));else if(Array.isArray(G)){let bt=G.map((It,Ft)=>`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(je+Ft)})`);wt("AND",`(${bt.join(" AND ")})`);for(let It of G)He.push(It)}else if(G!==null&&typeof G==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else wt("AND",`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(je)})`),He.push(G);return this},whereJsonPath(U,G,Le){if(qn(G,"whereJsonPath(op)"),typeof U!=="string"||U.length===0||U.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof U==="string"?`'${U.slice(0,32)}...'`:typeof U}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(U))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${U}' \u2014 contains characters outside the allowed JSON-path set`);let je=e.dialect,bt=He.length+1;if(je==="postgres")wt("AND",`${U} ${G} ${t(bt)}`);else if(n(je))wt("AND",`JSON_EXTRACT(${U}) ${G} ${t(bt)}`);else wt("AND",`json_extract(${U}) ${G} ${t(bt)}`);return He.push(Le),this},whereLike(U,G,Le=!1){let je=t(He.length+1);return $t("WHERE",`${Le?String(U):`LOWER(${String(U)})`} LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},whereILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("WHERE",`${String(U)} ILIKE ${Le}`);else $t("WHERE",`LOWER(${String(U)}) LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},orWhereLike(U,G,Le=!1){let je=t(He.length+1);return $t("OR",`${Le?String(U):`LOWER(${String(U)})`} LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},orWhereILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("OR",`${String(U)} ILIKE ${Le}`);else $t("OR",`LOWER(${String(U)}) LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},whereNotLike(U,G,Le=!1){let je=t(He.length+1);return $t("WHERE",`${Le?String(U):`LOWER(${String(U)})`} NOT LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},whereNotILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("WHERE",`${String(U)} NOT ILIKE ${Le}`);else $t("WHERE",`LOWER(${String(U)}) NOT LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},orWhereNotLike(U,G,Le=!1){let je=t(He.length+1);return $t("OR",`${Le?String(U):`LOWER(${String(U)})`} NOT LIKE ${Le?je:`LOWER(${je})`}`),He.push(G),Dt=null,this},orWhereNotILike(U,G){let Le=t(He.length+1);if(e.dialect==="postgres")$t("OR",`${String(U)} NOT ILIKE ${Le}`);else $t("OR",`LOWER(${String(U)}) NOT LIKE LOWER(${Le})`);return He.push(G),Dt=null,this},whereAny(U,G,Le){if(U.length===0)return wt("AND",`(${Tt})`),this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`(${bt.join(" OR ")})`),this},whereAll(U,G,Le){if(U.length===0)return this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`(${bt.join(" AND ")})`),this},whereNone(U,G,Le){if(U.length===0)return this;let je=He.length+1,bt=U.map((It,Ft)=>`${It} ${G} ${t(je+Ft)}`);for(let It=0;It<U.length;It++)He.push(Le);return wt("AND",`NOT (${bt.join(" OR ")})`),this},whereNotBetween(U,G,Le){Xt(String(U),"whereNotBetween(column)");let je=He.length+1;return He.push(G,Le),wt("AND",`${U} NOT BETWEEN ${t(je)} AND ${t(je+1)}`),this},whereDate(U,G,Le){Xt(U,"whereDate(column)");let je=Le instanceof Date?Le.toISOString():typeof Le==="string"?Le:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof Le}`)})(),bt=He.length+1;return He.push(je),wt("AND",`${U} ${G} ${t(bt)}`),this},whereRaw(U){return wt("AND",ur(U,"whereRaw(fragment)")),this},orWhereRaw(U){return wt("OR",ur(U,"orWhereRaw(fragment)")),this},whereColumn(U,G,Le){return Xt(U,"whereColumn(left)"),Xt(Le,"whereColumn(right)"),wt("AND",`${U} ${G} ${Le}`),this},orWhereColumn(U,G,Le){return Xt(U,"orWhereColumn(left)"),Xt(Le,"orWhereColumn(right)"),wt("OR",`${U} ${G} ${Le}`),this},whereIn(U,G){if(Xt(String(U),"whereIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!1,Le);He.push(...G),wt("AND",je)}else wt("AND",`${U} IN (${String(G.toSQL())})`);return this},orWhereIn(U,G){if(Xt(String(U),"orWhereIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!1,Le);He.push(...G),wt("OR",je)}else wt("OR",`${U} IN (${String(G.toSQL())})`);return this},whereNotIn(U,G){if(Xt(String(U),"whereNotIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!0,Le);He.push(...G),wt("AND",je)}else wt("AND",`${U} NOT IN (${String(G.toSQL())})`);return this},orWhereNotIn(U,G){if(Xt(String(U),"orWhereNotIn(column)"),Array.isArray(G)){let Le=s(G.length,He.length+1),je=o(U,G,!0,Le);He.push(...G),wt("OR",je)}else wt("OR",`${U} NOT IN (${String(G.toSQL())})`);return this},whereNested(U){let G=U.toSQL?String(U.toSQL()):String(U);return wt("AND",`(${G})`),this},orWhereNested(U){let G=U.toSQL?String(U.toSQL()):String(U);return wt("OR",`(${G})`),this},andWhere(U,G,Le){return Ot(this,"AND","andWhere",U,G,Le)},orWhere(U,G,Le){return Ot(this,"OR","orWhere",U,G,Le)},orderBy(U,G="asc"){let Le=G==="asc"?"ASC":"DESC",je=l(String(U));return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${je} ${Le}`:`${Ne} ORDER BY ${je} ${Le}`,Dt=null,this},orderByDesc(U){return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${U} DESC`:`${Ne} ORDER BY ${U} DESC`,Dt=null,this},inRandomOrder(){let U=e.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${U}`:`${Ne} ORDER BY ${U}`,Dt=null,this},reorder(U,G="asc"){return Ne=Ne.replace(/ORDER BY[\s\S]*$/i,""),Ne+=` ORDER BY ${U} ${G==="asc"?"ASC":"DESC"}`,Dt=null,this},latest(U){let G=U??e.timestamps.defaultOrderColumn;return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G} DESC`:`${Ne} ORDER BY ${G} DESC`,Dt=null,this},oldest(U){let G=U??e.timestamps.defaultOrderColumn;return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G} ASC`:`${Ne} ORDER BY ${G} ASC`,Dt=null,this},limit(U){if(!Number.isFinite(U)||U<0||!Number.isInteger(U))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${U}`);return Ne=An.LIMIT.test(Ne)?Ne.replace(An.LIMIT,` LIMIT ${U}`):`${Ne} LIMIT ${U}`,Dt=null,this},offset(U){if(!Number.isFinite(U)||U<0||!Number.isInteger(U))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${U}`);return Ne=An.OFFSET.test(Ne)?Ne.replace(An.OFFSET,` OFFSET ${U}`):`${Ne} OFFSET ${U}`,Dt=null,this},join(U,G,Le,je){return Xt(U,"join(table)"),Jn(G,"join(onLeft)"),Jn(je,"join(onRight)"),qn(Le,"join(operator)"),Vt(`JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},joinSub(U,G,Le,je,bt){return Xt(G,"joinSub(alias)"),Jn(Le,"joinSub(onLeft)"),Jn(bt,"joinSub(onRight)"),qn(je,"joinSub(operator)"),Vt(`JOIN (${String(U.toSQL())}) AS ${G} ON ${Le} ${je} ${bt}`),zt.add(G),this},innerJoin(U,G,Le,je){return Xt(U,"innerJoin(table)"),Jn(G,"innerJoin(onLeft)"),Jn(je,"innerJoin(onRight)"),qn(Le,"innerJoin(operator)"),Vt(`INNER JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},leftJoin(U,G,Le,je){return Xt(U,"leftJoin(table)"),Jn(G,"leftJoin(onLeft)"),Jn(je,"leftJoin(onRight)"),qn(Le,"leftJoin(operator)"),Vt(`LEFT JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},leftJoinSub(U,G,Le,je,bt){return Xt(G,"leftJoinSub(alias)"),Jn(Le,"leftJoinSub(onLeft)"),Jn(bt,"leftJoinSub(onRight)"),qn(je,"leftJoinSub(operator)"),Vt(`LEFT JOIN (${String(U.toSQL())}) AS ${G} ON ${Le} ${je} ${bt}`),zt.add(G),this},rightJoin(U,G,Le,je){return Xt(U,"rightJoin(table)"),Jn(G,"rightJoin(onLeft)"),Jn(je,"rightJoin(onRight)"),qn(Le,"rightJoin(operator)"),Vt(`RIGHT JOIN ${U} ON ${G} ${Le} ${je}`),zt.add(U),this},crossJoin(U){return Xt(U,"crossJoin(table)"),Vt(`CROSS JOIN ${U}`),zt.add(U),this},crossJoinSub(U,G){return Xt(G,"crossJoinSub(alias)"),Vt(`CROSS JOIN (${String(U.toSQL())}) AS ${G}`),zt.add(G),this},selectAllRelations(){if(!E)return this;let U=String(Fe),G=Object.keys(E[U]?.columns??{}),Le=[];if(G.length>0)Le.push(_e`${_e(U)}.*`);for(let je of zt){let bt=Object.keys(E[je]?.columns??{});for(let It of bt){let Ft=e.aliasing.relationColumnAliasFormat==="camelCase"?`${je}_${It}`.replace(/_([a-z])/g,(Ut,Yt)=>Yt.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${je}.${It}`:`${je}_${It}`;Le.push(_e`${_e(`${je}.${It}`)} AS ${_e(Ft)}`)}}if(Le.length>0){let je=G.length>0?`${U}.*`:"",bt=[];for(let Ut of zt){let Yt=Object.keys(E[Ut]?.columns??{});for(let Kt of Yt){let Qt=e.aliasing.relationColumnAliasFormat==="camelCase"?`${Ut}_${Kt}`.replace(/_([a-z])/g,(bn,Rn)=>Rn.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${Ut}.${Kt}`:`${Ut}_${Kt}`;bt.push(`${Ut}.${Kt} AS ${Qt}`)}}let It=[je,...bt].filter(Boolean).join(", "),Ft=Ne.indexOf(" FROM ");if(Ft!==-1)Ne=`SELECT ${It}${Ne.substring(Ft)}`;else Ne=`SELECT ${It} FROM ${U}`;Dt=null}return this},groupBy(...U){if(U.length)Ne=An.GROUP_BY.test(Ne)?`${Ne}, ${U.map((G)=>l(String(G))).join(", ")}`:`${Ne} GROUP BY ${U.map((G)=>l(String(G))).join(", ")}`,Dt=null;return this},groupByRaw(U){let G=ur(U,"groupByRaw(fragment)");return Ne=An.GROUP_BY.test(Ne)?`${Ne}, ${G}`:`${Ne} GROUP BY ${G}`,Dt=null,this},having(U){let G=qt?"AND":"HAVING";if(Array.isArray(U)){let Le=He.length+1;Ne=`${Ne} ${G} ${U[0]} ${U[1]} ${t(Le)}`,He.push(U[2]),qt=!0,Dt=null}else if(U&&typeof U==="object"&&!("raw"in U)){let Le=Object.keys(U),je=Le.length;if(je){let bt=He.length,It=Array.from({length:je});for(let Ft=0;Ft<je;Ft++){let Ut=Le[Ft];It[Ft]=`${Ut} = ${t(bt+Ft+1)}`,He.push(U[Ut])}Ne=`${Ne} ${G} ${It.join(" AND ")}`,qt=!0,Dt=null}}else if(U&&typeof U.raw<"u")Ne+=` ${G} ${U.raw}`,qt=!0,Dt=null;return this},havingRaw(U){let G=ur(U,"havingRaw(fragment)");return Ne+=` ${qt?"AND":"HAVING"} ${G}`,qt=!0,Dt=null,this},orderByRaw(U){let G=ur(U,"orderByRaw(fragment)");return Ne=An.ORDER_BY.test(Ne)?`${Ne}, ${G}`:`${Ne} ORDER BY ${G}`,Dt=null,this},$call(U){return U(this),this},union(U){return Ht("UNION",U),this},unionAll(U){return Ht("UNION ALL",U),this},intersect(U){return Ht("INTERSECT",U),this},intersectAll(U){return Ht("INTERSECT ALL",U),this},except(U){return Ht("EXCEPT",U),this},exceptAll(U){return Ht("EXCEPT ALL",U),this},forPage(U,G){let Le=Math.max(1,Math.floor(U)),je=Math.max(1,Math.floor(G));return Ne+=` LIMIT ${je} OFFSET ${(Le-1)*je}`,Dt=null,this},toSQL(){let U=wr(Wt());return{sql:U,toString:()=>U,execute:()=>yt().execute(),values:()=>yt().values(),raw:()=>yt().raw()}},async value(U){let G=_e`${yt()} LIMIT 1`,Le=await ht(G,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return je?.[U]},async pluck(U,G){let Le=await ht(yt(),"select",{signal:yn,timeoutMs:_t});if(G){let je={};for(let bt of Le){let It=String(bt?.[G]);if(Object.prototype.hasOwnProperty.call(je,It))throw Error(`[query-builder] pluck(${U}, ${G}): duplicate key '${It}' \u2014 multiple rows share this value, so the resulting map would silently drop data. Use a unique key column or pluck without a key to get an array.`);je[It]=bt?.[U]}return je}return Le.map((je)=>je?.[U])},async exists(){let U=_e`SELECT EXISTS (${yt()}) as e`,G=await ht(U,"select",{signal:yn,timeoutMs:_t}),[Le]=G;return Boolean(Le?.e)},async doesntExist(){return!await this.exists()},async paginate(U,G=1,Le={}){if(typeof U==="object"&&U!==null){let bn=U;G=bn.page??1,Le=bn.tx?{tx:bn.tx}:{},U=bn.perPage??10}if(!Number.isFinite(U)||U<=0||!Number.isInteger(U))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${U}`);if(!Number.isFinite(G)||G<1||!Number.isInteger(G))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${G}`);if(Le.tx){let bn=wr(Wt()),Rn=[...He],vn=await Le.tx.unsafe(`SELECT COUNT(*) as c FROM (${bn}) as sub`,Rn),wn=Number(vn?.[0]?.c??0),_n=Math.max(1,Math.ceil(wn/U)),Un=Math.max(1,Math.min(G,_n)),jn=(Un-1)*U;return{data:await Le.tx.unsafe(`${bn} LIMIT ${U} OFFSET ${jn}`,Rn),meta:{perPage:U,page:Un,total:wn,lastPage:_n}}}let je=_e`SELECT COUNT(*) as c FROM (${yt()}) as sub`,bt=await ht(je,"select",{signal:yn,timeoutMs:_t}),[It]=bt,Ft=Number(It?.c??0),Ut=Math.max(1,Math.ceil(Ft/U)),Yt=Math.max(1,Math.min(G,Ut)),Kt=(Yt-1)*U;return{data:await ht(_e`${yt()} LIMIT ${U} OFFSET ${Kt}`,"select",{signal:yn,timeoutMs:_t}),meta:{perPage:U,page:Yt,total:Ft,lastPage:Ut}}},async simplePaginate(U,G=1){let Le=Math.max(1,G),je=(Le-1)*U,bt=await ht(_e`${yt()} LIMIT ${U+1} OFFSET ${je}`,"select",{signal:yn,timeoutMs:_t}),It=bt.length>U;return{data:It?bt.slice(0,U):bt,meta:{perPage:U,page:Le,hasMore:It}}},async cursorPaginate(U,G,Le="id",je="asc"){if(!Number.isInteger(U)||U<=0)throw TypeError(`[query-builder] cursorPaginate(perPage): expected positive integer, got ${U}`);let bt=(Array.isArray(Le)?Le:[Le]).map(String);for(let Kn of bt)Xt(Kn,"cursorPaginate(column)");let It=je==="asc"?">":"<",Ft=je==="asc"?"ASC":"DESC",Ut=[...He],Yt="";if(G!==void 0&&G!==null)if(Array.isArray(Le)){let Kn=G.map((xn)=>(Ut.push(xn),t(Ut.length)));Yt=`(${bt.join(", ")}) ${It} (${Kn.join(", ")})`}else Ut.push(G),Yt=`${bt[0]} ${It} ${t(Ut.length)}`;let Kt=wr(Yt?Wt({conn:"AND",sql:Yt}):Wt()),Qt=bt.map((Kn)=>`${Kn} ${Ft}`).join(", ");if(oi(Kt))throw TypeError("[query-builder] cursorPaginate() cannot be combined with orderBy() \u2014 it orders by "+`${Qt} itself, and a cursor is only meaningful in that order. Remove the orderBy(), or pass the column and direction to cursorPaginate().`);let bn=Ut.length>0?h.unsafe(`${Kt} ORDER BY ${Qt} LIMIT ${U+1}`,Ut):h.unsafe(`${Kt} ORDER BY ${Qt} LIMIT ${U+1}`),Rn=await ht(bn,"select",{signal:yn,timeoutMs:_t}),vn=Rn.length>U,wn=Rn.slice(0,U),_n=wn[wn.length-1],Un=vn&&_n?Array.isArray(Le)?Le.map((Kn)=>_n[Kn]):_n[Le]:null,jn=wn.length?Array.isArray(Le)?Le.map((Kn)=>wn[0]?.[Kn]):wn[0]?.[Le]:null;return{data:wn,meta:{perPage:U,nextCursor:Un??null,prevCursor:jn}}},async chunk(U,G){let Le=1;while(!0){let{data:je,meta:bt}=await this.paginate(U,Le);if(je.length===0)break;if(await G(je),Le>=bt.lastPage)break;Le+=1}},async chunkById(U,G="id",Le){let je;while(!0){let{data:bt,meta:It}=await this.cursorPaginate(U,je,G,"asc");if(bt.length===0)break;if(Le)await Le(bt);if(je=It.nextCursor,!je)break}},async eachById(U,G="id",Le){await this.chunkById(U,G,async(je)=>{for(let bt of je)await Le?.(bt)})},withTimeout(U){return _t=Math.max(1,Math.floor(U)),this},abort(U){return yn=U,this},withTrashed(){return Sn=!0,En=!1,this},onlyTrashed(){Sn=!0,En=!0;let U=e.softDeletes?.column||"deleted_at",G=(bt,It)=>{let Ft=bt.toUpperCase(),Ut=0;for(let Yt=0;Yt<bt.length;Yt++){let Kt=bt[Yt];if(Kt==="(")Ut++;else if(Kt===")")Ut--;else if(Ut===0&&Ft.substring(Yt,Yt+5)==="WHERE"&&(Yt===0||/\s/.test(bt[Yt-1]??""))&&/\s/.test(bt[Yt+5]??""))return`${bt.substring(0,Yt)}WHERE ${It} AND ${bt.substring(Yt+6)}`}return`${bt} WHERE ${It}`},Le=`${Fe}.${U} IS NOT NULL`;Ne=G(Ne,Le);let je=String(yt());return Dt=_e([G(je,Le)]),this},scope(U,G){let Le=String(Fe),bt=D?.scopes?.[Le]?.[U];if(bt)return bt(this,G);return this},when(U,G,Le){if(U)return G(this);if(Le)return Le(this);return this},tap(U){return U(this),this},dump(){return console.log(String(yt())),this},dd(){throw console.log(String(yt())),Error("Dump and Die")},cache(U=60000){return er=U,$n=!0,this},async explain(){let U=_e`EXPLAIN ${yt()}`;return await ht(U,"select",{signal:yn,timeoutMs:_t})},simple(){return yt().simple()},toText(){return Wt()},async get(){let U=Ke(),G=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||Sr(U));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let Ft=h._prepareStatement;if(Ft){let Ut=Ft(Wt());return tr(He.length>0?Ut.all(...He):Ut.all())}}let Le=Wt();if(Dt=He.length>0?h.unsafe(Le,He):h.unsafe(Le),!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let Ft=yt()._stmt,Ut=yt()._params;if(Ft)return tr(Ut&&Ut.length>0?Ft.all(...Ut):Ft.all());return tr(await yt().execute())}if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn)return tr(await ht(yt(),"select"));let je=yt();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!Sn){let Ft=e.softDeletes.column,Ut=String(Fe);if((E?Boolean(E[Ut]?.columns?.[Ft]):!0)&&!An.DELETED_AT.test(Wt()))$t("WHERE",`${String(Ft)} IS ${En?"NOT ":""}NULL`),je=yt()}let bt=$n?`${String(je)}\x00${JSON.stringify(He)}`:"";if($n){let Ft=Cr.get(bt);if(Ft)return Ft}let It=await ht(je,"select",{signal:yn,timeoutMs:_t});if($n)Cr.set(bt,It,er);return tr(It)},async executeTakeFirst(){let U=await ht(yt(),"select",{signal:yn,timeoutMs:_t});return lr(Array.isArray(U)?U[0]:U)},async executeTakeFirstOrThrow(){let U=await this.executeTakeFirst();if(!U)throw Error("Record not found");return U},async first(){let U=Ke(),G=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||Sr(U));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!G){let bt=h._prepareStatement;if(bt){let It=Wt(),Ft=It.includes(" LIMIT ")?It:`${It} LIMIT 1`,Ut=bt(Ft),Yt=He.length>0?Ut.all(...He):Ut.all();return lr(Yt[0])}}let Le=await ht(_e`${yt()} LIMIT 1`,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return lr(je)},async firstOrFail(){let U=await this.first();if(!U)throw Error("Record not found");return U},async find(U){let G=D?.primaryKeys[String(Fe)]??"id",Le=await ht(_e`${yt()} WHERE ${_e(G)} = ${U} LIMIT 1`,"select",{signal:yn,timeoutMs:_t}),[je]=Le;return je},async findOrFail(U){let G=await this.find(U);if(!G)throw Error("Record not found");return G},async findMany(U){let G=D?.primaryKeys[String(Fe)]??"id";return await ht(_e`${yt()} WHERE ${_e(String(G))} IN ${_e(U)}`,"select",{signal:yn,timeoutMs:_t})},async*lazy(){let U,G=D?.primaryKeys[String(Fe)]??"id";while(!0){let je=await(U==null?_e`${yt()} ORDER BY ${_e(String(G))} ASC LIMIT 100`:_e`${yt()} WHERE ${_e(String(G))} > ${U} ORDER BY ${_e(String(G))} ASC LIMIT 100`).execute();if(je.length===0)break;for(let bt of je)yield bt;if(U=je[je.length-1]?.[G],U==null)break}},async*lazyById(){let U=D?.primaryKeys[String(Fe)]??"id",G;while(!0){let je=await(G==null?_e`${yt()} ORDER BY ${_e(String(U))} ASC LIMIT 100`:_e`${yt()} WHERE ${_e(String(U))} > ${G} ORDER BY ${_e(String(U))} ASC LIMIT 100`).execute();if(je.length===0)break;for(let bt of je)yield bt;if(G=je[je.length-1]?.[U],G==null)break}},pipe(U){return U(this)},async count(){let U=Wt(),G=U.indexOf(" FROM "),Le=/ GROUP BY /i.test(U),je;if(Le)je=`SELECT COUNT(*) as c FROM (${U}) AS _bqb_count_sub`;else if(G!==-1)je=`SELECT COUNT(*) as c${U.substring(G)}`;else je=`SELECT COUNT(*) as c FROM ${Fe}`;let bt=Ke(),It=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||Sr(bt));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!It){let Kt=h._prepareStatement;if(Kt){let Qt=Kt(je),bn=He.length>0?Qt.all(...He):Qt.all();return Number(bn[0]?.c??0)}}let Ft=He.length>0?h.unsafe(je,He):h.unsafe(je),Ut=await ht(Ft,"select",{signal:yn,timeoutMs:_t}),[Yt]=Ut;return Number(Yt?.c??0)},async avg(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT AVG(${U}) as a${G.substring(Le)}`:`SELECT AVG(${U}) as a FROM ${Fe}`,bt=Ke(),It=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||Sr(bt));if(!e.softDeletes?.enabled&&!$n&&!_t&&!yn&&!It){let Kt=h._prepareStatement;if(Kt){let Qt=Kt(je),bn=He.length>0?Qt.all(...He):Qt.all();return Number(bn[0]?.a??0)}}let Ft=He.length>0?h.unsafe(je,He):h.unsafe(je),Ut=await ht(Ft,"select",{signal:yn,timeoutMs:_t}),[Yt]=Ut;return Number(Yt?.a??0)},async sum(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT SUM(${U}) as s${G.substring(Le)}`:`SELECT SUM(${U}) as s FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Number(Ft?.s??0)},async max(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT MAX(${U}) as m${G.substring(Le)}`:`SELECT MAX(${U}) as m FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Ft?.m},async min(U){let G=Wt(),Le=G.indexOf(" FROM "),je=Le!==-1?`SELECT MIN(${U}) as m${G.substring(Le)}`:`SELECT MIN(${U}) as m FROM ${Fe}`,bt=He.length>0?h.unsafe(je,He):h.unsafe(je),It=await ht(bt,"select",{signal:yn,timeoutMs:_t}),[Ft]=It;return Ft?.m},lockForUpdate(){return Ne+=" FOR UPDATE",Dt=null,this},sharedLock(){let U=e.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return Ne+=` ${U}`,Dt=null,this},withCTE(U,G){return Xt(U,"withCTE(name)"),Ne=`WITH ${U} AS (${String(G.toSQL())}) ${Ne}`,Dt=null,this},withRecursive(U,G){return Xt(U,"withRecursive(name)"),Ne=`WITH RECURSIVE ${U} AS (${String(G.toSQL())}) ${Ne}`,Dt=null,this},execute(){return ht(yt(),"select",{signal:yn,timeoutMs:_t})},values(){return yt().values()},toParams(){return[...He]},__rawState(){return{sql:wr(Wt()),params:[...He]}},__hasPredicate(){return St.length>0||Lt},raw(){return yt().raw()},get rows(){return},get row(){return},cancel(){try{yt().cancel()}catch{}}},{get(U,G,Le){let je=Reflect.get(U,G,Le);if(je!==void 0)return je;if(typeof G==="string"&&(G.startsWith("where")||G.startsWith("orWhere")||G.startsWith("andWhere"))){let bt=G.startsWith("orWhere"),It=G.startsWith("andWhere"),Ft=`${String(Fe)}|${G}`,Ut=ve.get(Ft);if(Ut===void 0){let Kt=G.replace(/^(?:or|and)?where/i,"");if(!Kt)ve.set(Ft,""),Ut="";else{let Qt=Kt.charAt(0).toLowerCase()+Kt.slice(1),bn=Kt.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),Rn=E?Object.keys(E[String(Fe)]?.columns??{}):[];Ut=[bn,Qt,Qt.toLowerCase()].find((vn)=>Rn.includes(vn))??bn,ve.set(Ft,Ut)}}if(Ut==="")return()=>Le;let Yt=Ut;return(Kt)=>{if(Array.isArray(Kt)){let Qt=s(Kt.length,He.length+1);$t(bt?"OR":It?"AND":"WHERE",`${Yt} IN (${Qt})`),He.push(...Kt)}else{let Qt=t(He.length+1);$t(bt?"OR":It?"AND":"WHERE",`${Yt} = ${Qt}`),He.push(Kt)}return Le}}return Reflect.get(U,G,Le)}})}return{configure(Fe){return qe(Fe),this},id(Fe){if(!An.IDENTIFIER.test(Fe))throw Error(`[query-builder] Invalid identifier: '${Fe}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return h(String(Fe))},ids(...Fe){for(let Ue of Fe)if(!An.IDENTIFIER.test(Ue))throw Error(`[query-builder] Invalid identifier: '${Ue}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return h(Fe)},select(Fe,...Ue){return Tn(Fe,Ue)},selectFrom(Fe){return Tn(Fe)},selectFromSub(Fe,Ue){function _e(yt){return()=>{throw Error(`[query-builder] selectFromSub(...).${yt}() is not supported. Apply ${yt}() to the underlying subquery BEFORE passing it to selectFromSub, or use the regular selectFrom(...) builder. This previously silently returned without `+"affecting the SQL, producing wrong results \u2014 see stacksjs/stacks#1862 #11.")}}Xt(String(Ue),"selectFromSub(alias)");let Ne=typeof Fe.__rawState==="function"?Fe.__rawState():null,St=Fe.toSQL(),He=Ne?.sql??(typeof St==="string"?St:St?.sql??String(St)),Gt=Ne?.params??(Array.isArray(St?.values)?St.values:[]),Lt=`SELECT * FROM (${He}) AS ${String(Ue)}`,qt=(yt,wt,$t,vt)=>{let Wt=[...yt],Et=(Ht,Vt,zt)=>{Xt(Ht,"selectFromSub where(column)");let _t=qn(Vt,"selectFromSub where(operator)");if(_t==="in"||_t==="not in"){let Sn=Array.isArray(zt)?zt:[zt],En=s(Sn.length,Wt.length+1);return Wt.push(...Sn),`${Ht} ${_t.toUpperCase()} (${En})`}let yn=t(Wt.length+1);return Wt.push(zt),`${Ht} ${_t} ${yn}`},Ot;if(typeof wt==="string"&&$t!==void 0)Ot=Et(wt,$t,vt);else if(Array.isArray(wt)&&wt.length===3)Ot=Et(wt[0],wt[1],wt[2]);else if(wt&&typeof wt==="object"){let Ht=Object.entries(wt).map(([Vt,zt])=>Et(Vt,"=",zt));Ot=Ht.length>1?`(${Ht.join(" AND ")})`:Ht[0]}else return{clause:null,params:yt};return{clause:Ot,params:Wt}};function Dt(yt,wt,$t,vt=""){let Wt=x(wt),Et=Wt?`${yt} WHERE ${Wt}${vt}`:`${yt}${vt}`,Ot=()=>$t.length>0?h.unsafe(Et,$t):h.unsafe(Et),Ht=(_t,yn,Sn,En)=>{let $n=qt($t,yn,Sn,En);return $n.clause===null?Dt(yt,wt,$t,vt):Dt(yt,[...wt,{conn:_t,sql:$n.clause}],$n.params,vt)},Vt=(_t,yn)=>{let Sn=[],En=[...$t],$n=(er)=>(Mn,Yn,lr)=>{let tr=qt(En,Mn,Yn,lr);if(tr.clause!==null)Sn.push({conn:er,sql:tr.clause}),En=tr.params;return Cn},Cn={where:$n("AND"),andWhere:$n("AND"),orWhere:$n("OR")};yn(Cn);let Fn=x(Sn);if(!Fn)throw TypeError("[query-builder] selectFromSub.whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");return Dt(yt,[...wt,{conn:_t,sql:`(${Fn})`}],En,vt)},zt={distinct(){return Dt(yt.replace(/^SELECT\s+/i,"SELECT DISTINCT "),wt,$t,vt)},distinctOn(..._t){let yn=_t.map(String).join(", ");return Dt(yt.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${yn}) `),wt,$t,vt)},selectRaw(_t){let yn=ur(_t,"selectFromSub.selectRaw(fragment)"),Sn=yt.indexOf(" FROM "),En=Sn!==-1?`${yt.slice(0,Sn)}, ${yn}${yt.slice(Sn)}`:`${yt}, ${yn}`;return Dt(En,wt,$t,vt)},$call(_t){return _t(this)??this},where(_t,yn,Sn){return Ht("AND",_t,yn,Sn)},andWhere(_t,yn,Sn){return Ht("AND",_t,yn,Sn)},orWhere(_t,yn,Sn){return Ht("OR",_t,yn,Sn)},whereGroup(_t){return Vt("AND",_t)},orWhereGroup(_t){return Vt("OR",_t)},orderBy(_t,yn="asc"){Xt(String(_t),"selectFromSub.orderBy(column)");let Sn=yn==="asc"?"ASC":"DESC",En=An.ORDER_BY.test(vt)?`${vt}, ${_t} ${Sn}`:`${vt} ORDER BY ${_t} ${Sn}`;return Dt(yt,wt,$t,En)},limit(_t){if(!Number.isInteger(_t)||_t<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${_t}`);let yn=An.LIMIT.test(vt)?vt.replace(An.LIMIT,` LIMIT ${_t}`):`${vt} LIMIT ${_t}`;return Dt(yt,wt,$t,yn)},offset(_t){if(!Number.isInteger(_t)||_t<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${_t}`);let yn=An.OFFSET.test(vt)?vt.replace(An.OFFSET,` OFFSET ${_t}`):`${vt} OFFSET ${_t}`;return Dt(yt,wt,$t,yn)},toSQL(){return jt(Ot(),Et)},async execute(){return ht(Ot(),"select")},async executeTakeFirst(){let _t=await ht(Ot(),"select");return Array.isArray(_t)?_t[0]:_t},async executeTakeFirstOrThrow(){let _t=await ht(Ot(),"select"),yn=Array.isArray(_t)?_t[0]:_t;if(!yn)throw Error("Record not found");return yn},async get(){return ht(Ot(),"select")},async first(){let _t=await ht(Ot(),"select");return Array.isArray(_t)?_t[0]:_t},async firstOrFail(){let _t=await ht(Ot(),"select"),yn=Array.isArray(_t)?_t[0]:_t;if(!yn)throw Error("No rows found");return yn},async count(){let _t=$t.length>0?h.unsafe(`SELECT COUNT(*) as c FROM (${Et}) as sub`,$t):h.unsafe(`SELECT COUNT(*) as c FROM (${Et}) as sub`),yn=await ht(_t,"select");return Number(yn?.[0]?.c??0)},async exists(){let _t=$t.length>0?h.unsafe(`SELECT EXISTS(${Et}) as e`,$t):h.unsafe(`SELECT EXISTS(${Et}) as e`),yn=await ht(_t,"select");return Boolean(yn?.[0]?.e)},async doesntExist(){return!await zt.exists()},values(){return Ot().values()},raw(){return Ot().raw()},cancel(){try{Ot().cancel()}catch{}},whereRaw:_e("whereRaw"),whereColumn:_e("whereColumn"),orWhereColumn:_e("orWhereColumn"),whereIn:_e("whereIn"),orWhereIn:_e("orWhereIn"),whereNotIn:_e("whereNotIn"),orWhereNotIn:_e("orWhereNotIn"),whereLike:_e("whereLike"),whereILike:_e("whereILike"),orWhereLike:_e("orWhereLike"),orWhereILike:_e("orWhereILike"),whereNotLike:_e("whereNotLike"),whereNotILike:_e("whereNotILike"),orWhereNotLike:_e("orWhereNotLike"),orWhereNotILike:_e("orWhereNotILike"),whereAny:_e("whereAny"),whereAll:_e("whereAll"),whereNone:_e("whereNone"),whereNested:_e("whereNested"),orWhereNested:_e("orWhereNested"),whereDate:_e("whereDate"),whereBetween:_e("whereBetween"),whereNotBetween:_e("whereNotBetween"),whereJsonContains:_e("whereJsonContains"),whereJsonPath:_e("whereJsonPath"),whereNull:_e("whereNull"),orWhereNull:_e("orWhereNull"),whereNotNull:_e("whereNotNull"),orWhereNotNull:_e("orWhereNotNull"),whereExists:_e("whereExists"),orWhereExists:_e("orWhereExists"),orWhereBetween:_e("orWhereBetween"),orWhereRaw:_e("orWhereRaw"),whereJsonDoesntContain:_e("whereJsonDoesntContain"),whereJsonContainsKey:_e("whereJsonContainsKey"),whereJsonDoesntContainKey:_e("whereJsonDoesntContainKey"),whereJsonLength:_e("whereJsonLength"),join:_e("join"),joinSub:_e("joinSub"),innerJoin:_e("innerJoin"),leftJoin:_e("leftJoin"),leftJoinSub:_e("leftJoinSub"),rightJoin:_e("rightJoin"),crossJoin:_e("crossJoin"),crossJoinSub:_e("crossJoinSub"),groupBy:_e("groupBy"),groupByRaw:_e("groupByRaw"),having:_e("having"),havingRaw:_e("havingRaw"),addSelect:_e("addSelect"),select:_e("select"),selectAll:_e("selectAll"),orderByDesc:_e("orderByDesc"),inRandomOrder:_e("inRandomOrder"),reorder:_e("reorder"),orderByRaw:_e("orderByRaw"),union:_e("union"),unionAll:_e("unionAll"),forPage:_e("forPage"),selectAllRelations:_e("selectAllRelations"),with:_e("with"),value:_e("value"),pluck:_e("pluck"),cursorPaginate:_e("cursorPaginate"),paginate:_e("paginate"),simplePaginate:_e("simplePaginate"),chunk:_e("chunk"),chunkById:_e("chunkById"),eachById:_e("eachById"),avg:_e("avg"),sum:_e("sum"),max:_e("max"),min:_e("min"),find:_e("find"),findOrFail:_e("findOrFail"),findMany:_e("findMany"),latest:_e("latest"),oldest:_e("oldest"),lazy:_e("lazy"),lazyById:_e("lazyById"),pipe:(_t)=>_t(zt),when:_e("when"),tap:()=>zt,dump:()=>zt,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>Ot().simple(),toText:()=>Et,toParams:()=>[...$t],withTimeout:()=>zt,abort:()=>zt,lockForUpdate:()=>zt,sharedLock:()=>zt,withCTE:()=>zt,withRecursive:()=>zt,cache:()=>zt,clone:()=>zt,withTrashed:()=>zt,onlyTrashed:()=>zt,scope:()=>zt,get rows(){return[]},get row(){return}};return zt}return Dt(Lt,[],Gt)},insertInto(Fe){let Ue,_e="",Ne=[],St=[],He=!1,Gt=()=>qt?[]:{changes:0,lastInsertRowid:0},Lt=()=>{let vt=async()=>{return},Wt=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>Lt(),andWhere:()=>Lt(),orWhere:()=>Lt(),orderBy:()=>Lt(),limit:()=>Lt(),offset:()=>Lt(),toSQL:()=>jt(null,""),execute:async()=>[],get:async()=>[],first:vt,executeTakeFirst:vt,firstOrFail:Wt,executeTakeFirstOrThrow:Wt}},qt=e.dialect==="postgres",Dt=(vt)=>{let Et=vt.flat(2).map(String).filter(Boolean),Ot=Et.length>0&&!Et.includes("*")?Et.map((zt)=>yt(zt)).join(", "):"*",Ht=async()=>{let zt=await ht(h.unsafe(_e,Ne),"insert"),_t=Number(zt?.lastInsertRowid??0),yn=Math.max(1,Number(zt?.affectedRows??1)),Sn=St.filter((Cn)=>Cn!==void 0&&Cn!==null),En=_t>0?h.unsafe(`SELECT ${Ot} FROM ${yt(String(Fe))} WHERE ${yt("id")} >= ? AND ${yt("id")} < ? ORDER BY ${yt("id")} ASC`,[_t,_t+yn]):Sn.length>0?h.unsafe(`SELECT ${Ot} FROM ${yt(String(Fe))} WHERE ${yt("id")} IN (${Sn.map(()=>"?").join(", ")}) ORDER BY ${yt("id")} ASC`,Sn):null;if(!En)return[];let $n=await En.execute();return Array.isArray($n)?$n:[]},Vt=async()=>(await Ht())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>jt(h.unsafe(_e,Ne),_e),execute:Ht,get:Ht,first:Vt,executeTakeFirst:Vt,async firstOrFail(){let zt=await Vt();if(!zt)throw Error("Insert with RETURNING returned no rows");return zt},async executeTakeFirstOrThrow(){let zt=await Vt();if(!zt)throw Error("Insert with RETURNING returned no rows");return zt}}},yt=qt?(vt)=>`"${String(vt).replace(/"/g,'""')}"`:n(e.dialect)?(vt)=>`\`${String(vt).replace(/`/g,"``")}\``:(vt)=>`"${String(vt).replace(/"/g,'""')}"`,wt=qt?"postgres":n(e.dialect)?"mysql":"sqlite",$t=qt?(vt)=>`$${vt+1}`:(vt)=>"?";return{values(vt){let Wt=ke(String(Fe),Array.isArray(vt)?vt:[vt]),Et=Wt.length;if(St=Wt.map((En)=>En?.id),Et===0)return He=!0,Ue=null,_e="",Ne.length=0,this;He=!1;let Ot=Wt[0],Ht=Object.keys(Ot),Vt=Ht.length,zt=Et*Vt;Ne.length=zt;let _t=Et===1&&Vt>0&&typeof Fe==="string",yn=_t?V?.get(Fe):void 0,Sn=yn?.quoteStyle===wt&&yn.columns.length===Vt;if(Sn){for(let En=0;En<Vt;En++)if(yn.columns[En]!==Ht[En]){Sn=!1;break}}if(Sn){_e=yn.sql;for(let En=0;En<Vt;En++)Ne[En]=Ot[Ht[En]]}else if(Et===1)if(!qt){let En=yt(Ht[0]),$n="?";Ne[0]=Ot[Ht[0]];for(let Cn=1;Cn<Vt;Cn++)En+=`,${yt(Ht[Cn])}`,$n+=",?",Ne[Cn]=Ot[Ht[Cn]];_e=`INSERT INTO ${yt(Fe)}(${En})VALUES(${$n})`}else{let En=Ht.map(($n)=>yt($n)).join(",");_e=`INSERT INTO ${yt(Fe)}(${En})VALUES(`;for(let $n=0;$n<Vt;$n++){if($n>0)_e+=",";_e+=$t($n),Ne[$n]=Ot[Ht[$n]]}_e+=")"}else{let En=Ht.map((Cn)=>yt(Cn)).join(",");_e=`INSERT INTO ${yt(Fe)}(${En})VALUES`;let $n=0;for(let Cn=0;Cn<Et;Cn++){let Fn=Wt[Cn];if(Cn===0)_e+="(";else _e+="),(";for(let er=0;er<Vt;er++){if(er>0)_e+=",";_e+=$t($n),Ne[$n++]=Fn[Ht[er]]}}_e+=")"}if(_t&&!Sn&&_e.length<=8192){if(V??=new Map,V.size>=32&&!V.has(Fe)){let En=V.keys().next().value;if(En!==void 0)V.delete(En)}V.set(Fe,{columns:Ht,quoteStyle:wt,sql:_e})}if(!h._prepareStatement)Ue=h.unsafe(_e,Ne);return this},returning(...vt){if(He)return Lt();if(n(e.dialect))return Dt(vt);let Wt=`${_e} RETURNING ${vt.join(", ")}`,Et=h.unsafe(Wt,Ne),Ot=async()=>{let Ht=await ht(Et,"insert");return Array.isArray(Ht)?Ht[0]:Ht};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>jt(Et,Wt),execute:()=>ht(Et,"insert"),get:()=>ht(Et,"insert"),first:Ot,executeTakeFirst:Ot,async firstOrFail(){let Ht=await Ot();if(!Ht)throw Error("Insert with RETURNING returned no rows");return Ht},async executeTakeFirstOrThrow(){let Ht=await Ot();if(!Ht)throw Error("Insert with RETURNING returned no rows");return Ht}}},toSQL(){if(He)return jt(null,"");if(!Ue)Ue=h.unsafe(_e,Ne);return jt(Ue,_e)},execute(){if(He)return Promise.resolve(Gt());let vt=Ke();if(!(vt&&(vt.onQueryStart||vt.onQueryEnd||vt.onQueryError||vt.startSpan||vt.beforeCreate||vt.afterCreate||Sr(vt)))){let Et=h._prepareStatement;if(Et){let Ot=Et(_e);return Ne.length>0?Ot.run(...Ne):Ot.run()}}if(!Ue)Ue=h.unsafe(_e,Ne);return ht(Ue,"insert")},async executeTakeFirst(){if(He)return Gt();if(!Ue)Ue=h.unsafe(_e,Ne);return await ht(Ue,"insert")},async executeTakeFirstOrThrow(){if(He)throw Error("Insert failed");if(!Ue)Ue=h.unsafe(_e,Ne);let vt=await ht(Ue,"insert");if(!vt)throw Error("Insert failed");return vt},returningAll(){if(He)return Lt();let vt=`${_e} RETURNING *`,Wt=h.unsafe(vt,Ne),Et=async()=>{let Ot=await ht(Wt,"insert");return Array.isArray(Ot)?Ot[0]:Ot};return{toSQL:()=>jt(Wt,vt),execute:()=>ht(Wt,"insert"),get:()=>ht(Wt,"insert"),first:Et,executeTakeFirst:Et,async firstOrFail(){let Ot=await Et();if(!Ot)throw Error("Insert with RETURNING returned no rows");return Ot},async executeTakeFirstOrThrow(){let Ot=await Et();if(!Ot)throw Error("Insert with RETURNING returned no rows");return Ot}}}}},updateTable(Fe){let Ue,_e=[],Ne=(Lt)=>{let qt=String(Lt);if(n(e.dialect))return`\`${qt.replace(/`/g,"``")}\``;return`"${qt.replace(/"/g,'""')}"`},St=`UPDATE ${Ne(String(Fe))}`,He=!1,Gt=(Lt)=>{St=`${St} ${He?"AND":"WHERE"} ${Lt}`,He=!0};return{set(Lt){let qt=ke(String(Fe),[Lt])[0],Dt=Object.keys(qt),yt=Dt.length,wt=Array.from({length:yt});for(let $t=0;$t<yt;$t++){let vt=Dt[$t],Wt=qt[vt];if(Xn(Wt))wt[$t]=`${Ne(vt)} = ${Wt.raw}`;else if(Tr(Wt)){let Et=br(Wt,_e.length+1);wt[$t]=`${Ne(vt)} = ${Et.text}`,_e.push(...Et.parameters)}else wt[$t]=`${Ne(vt)} = ${t(_e.length+1)}`,_e.push(Wt)}return St=`${St} SET ${wt.join(", ")}`,Ue=h.unsafe(St,_e),this},where(Lt,qt,Dt){if(qt!==void 0&&(typeof Lt==="string"||Xn(Lt)||Tr(Lt))){let yt=qn(qt,"updateTable.where"),wt;if(typeof Lt==="string")wt=Ne(Lt);else if(Xn(Lt))wt=Lt.raw;else{let vt=br(Lt,_e.length+1);wt=vt.text,_e.push(...vt.parameters)}if(yt.toLowerCase()==="in"||yt.toLowerCase()==="not in"){let vt=Array.isArray(Dt)?Dt:[Dt],Wt=s(vt.length,_e.length+1);return Gt(`${wt} ${yt.toUpperCase()} (${Wt})`),_e.push(...vt),Ue=h.unsafe(St,_e),this}let $t=_e.length+1;return Gt(`${wt} ${yt} ${t($t)}`),_e.push(Dt),Ue=h.unsafe(St,_e),this}if(Array.isArray(Lt)){let[yt,wt,$t]=Lt,vt=qn(wt,"updateTable.where");if(vt.toLowerCase()==="in"||vt.toLowerCase()==="not in"){let Et=Array.isArray($t)?$t:[$t],Ot=s(Et.length,_e.length+1);return Gt(`${Ne(String(yt))} ${vt.toUpperCase()} (${Ot})`),_e.push(...Et),Ue=h.unsafe(St,_e),this}let Wt=_e.length+1;return Gt(`${Ne(String(yt))} ${vt} ${t(Wt)}`),_e.push($t),Ue=h.unsafe(St,_e),this}if(Xn(Lt))return Gt(Lt.raw),Ue=h.unsafe(St,_e),this;if(Tr(Lt)){let yt=br(Lt,_e.length+1);return Gt(yt.text),_e.push(...yt.parameters),Ue=h.unsafe(St,_e),this}if(Lt&&typeof Lt==="object"){let yt=Object.keys(Lt);if(yt.length===0)throw TypeError("[query-builder] updateTable.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if updating every row is intended.");let wt=yt.map(($t)=>Fr(Ne($t),Lt[$t],_e));return Gt(wt.join(" AND ")),Ue=h.unsafe(St,_e),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${Lt===null?"null":typeof Lt}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(Lt){return Gt(`${Ne(String(Lt))} IS NULL`),Ue=h.unsafe(St,_e),this},whereNotNull(Lt){return Gt(`${Ne(String(Lt))} IS NOT NULL`),Ue=h.unsafe(St,_e),this},returning(...Lt){let qt=this,Dt=()=>`${St} RETURNING ${Lt.join(", ")}`,yt=()=>_e.length>0?h.unsafe(Dt(),_e):h.unsafe(Dt()),wt=async()=>{let Ot=/\sWHERE\s/i.test(St),Ht=Ot?St.slice(St.search(/\sWHERE\s/i)+1):"",Vt=_e.slice(_e.length-(Ht.match(/\?|\$\d+/g)?.length??0)),zt=Ne("id"),_t=await(Vt.length>0?h.unsafe(`SELECT ${zt} FROM ${Ne(String(Fe))}${Ot?` ${Ht}`:""}`,Vt):h.unsafe(`SELECT ${zt} FROM ${Ne(String(Fe))}${Ot?` ${Ht}`:""}`)).execute().catch(()=>[]),yn=(Array.isArray(_t)?_t:[]).map(($n)=>$n?.id).filter(($n)=>$n!==void 0&&$n!==null);if(await ht(_e.length>0?h.unsafe(St,_e):h.unsafe(St),"update"),yn.length===0)return[];let Sn=`SELECT ${Lt.join(", ")} FROM ${Ne(String(Fe))} WHERE ${zt} IN (${yn.map(()=>"?").join(", ")})`,En=await h.unsafe(Sn,yn).execute();return Array.isArray(En)?En:[]},$t=()=>n(e.dialect)?wt():ht(yt(),"update"),vt=async()=>{let Ot=await $t();return Array.isArray(Ot)?Ot[0]:Ot},Wt=(Ot)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${Ot}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},Et={where:(...Ot)=>(qt.where(...Ot),Et),andWhere:(...Ot)=>(qt.where(...Ot),Et),whereNull:(...Ot)=>(qt.whereNull(...Ot),Et),whereNotNull:(...Ot)=>(qt.whereNotNull(...Ot),Et),orWhere:Wt("orWhere"),orderBy:Wt("orderBy"),limit:Wt("limit"),offset:Wt("offset"),toSQL:()=>jt(yt(),Dt()),execute:$t,get:$t,first:vt,executeTakeFirst:vt,async firstOrFail(){let Ot=await vt();if(!Ot)throw Error("Update with RETURNING returned no rows");return Ot},async executeTakeFirstOrThrow(){let Ot=await vt();if(!Ot)throw Error("Update with RETURNING returned no rows");return Ot}};return Et},toSQL(){if(!Ue)Ue=_e.length>0?h.unsafe(St,_e):h.unsafe(St);return jt(Ue,St)},async execute(){let Lt=await ht(Ue,"update");return Jt(Lt)},async executeTakeFirst(){return{numUpdatedRows:Jt(await ht(Ue,"update"))}},async executeTakeFirstOrThrow(){let Lt=Jt(await ht(Ue,"update"));if(Lt===0)throw Error("No rows updated");return{numUpdatedRows:Lt}},returningAll(){let Lt=()=>`${St} RETURNING *`,qt=()=>_e.length>0?h.unsafe(Lt(),_e):h.unsafe(Lt());return{toSQL:()=>jt(qt(),Lt()),execute:()=>ht(qt(),"update"),async executeTakeFirst(){let Dt=await ht(qt(),"update");return Array.isArray(Dt)?Dt[0]:Dt},async executeTakeFirstOrThrow(){let Dt=await ht(qt(),"update"),yt=Array.isArray(Dt)?Dt[0]:Dt;if(!yt)throw Error("Update with RETURNING failed");return yt}}}}},deleteFrom(Fe){let Ue=(yt)=>{let wt=String(yt);if(n(e.dialect))return`\`${wt.replace(/`/g,"``")}\``;return`"${wt.replace(/"/g,'""')}"`},Ne=`DELETE FROM ${Ue(String(Fe))}`,St=null,He=[],Gt=null,Lt=!1,qt=(yt)=>{Ne+=` ${Lt?"AND":"WHERE"} ${yt}`,Lt=!0},Dt=()=>{if(St===null)St=He.length>0?h.unsafe(Ne,He):h.unsafe(Ne);return St};return{where(yt,wt,$t){if(Gt=yt,typeof yt==="string"&&wt!==void 0){let vt=qn(wt,"deleteFrom.where");if(vt.toLowerCase()==="in"||vt.toLowerCase()==="not in"){let Et=Array.isArray($t)?$t:[$t],Ot=s(Et.length,He.length+1);return qt(`${Ue(yt)} ${vt.toUpperCase()} (${Ot})`),He.push(...Et),St=null,this}let Wt=He.length+1;return qt(`${Ue(yt)} ${vt} ${t(Wt)}`),He.push($t),St=null,this}if(Array.isArray(yt)){let[vt,Wt,Et]=yt,Ot=qn(Wt,"deleteFrom.where");if(Ot.toLowerCase()==="in"||Ot.toLowerCase()==="not in"){let Vt=Array.isArray(Et)?Et:[Et],zt=s(Vt.length,He.length+1);return qt(`${Ue(String(vt))} ${Ot.toUpperCase()} (${zt})`),He.push(...Vt),St=null,this}let Ht=He.length+1;return qt(`${Ue(String(vt))} ${Ot} ${t(Ht)}`),He.push(Et),St=null,this}if(Xn(yt))return qt(yt.raw),St=null,this;if(Tr(yt)){let vt=br(yt,He.length+1);return qt(vt.text),He.push(...vt.parameters),St=null,this}if(yt&&typeof yt==="object"){let vt=Object.keys(yt);if(vt.length===0)throw TypeError("[query-builder] deleteFrom.where({}): an empty object is not a filter. Pass a condition, or drop the where() call if deleting every row is intended.");let Wt=vt.map((Et)=>Fr(Ue(Et),yt[Et],He));return qt(Wt.join(" AND ")),St=null,this}throw TypeError(`[query-builder] deleteFrom.where(): expected a condition, got ${yt===null?"null":typeof yt}. Refusing to run a DELETE with no WHERE \u2014 drop the where() call if deleting every row is intended.`)},whereNull(yt){return qt(`${Ue(String(yt))} IS NULL`),St=null,this},whereNotNull(yt){return qt(`${Ue(String(yt))} IS NOT NULL`),St=null,this},returning(...yt){let wt=this,$t=()=>`${Ne} RETURNING ${yt.join(", ")}`,vt=()=>He.length>0?h.unsafe($t(),He):h.unsafe($t()),Wt=async()=>{await Ke()?.beforeDelete?.({table:String(Fe),where:Gt});let Vt=n(e.dialect)?await(async()=>{let zt=Ne.slice(Ne.search(/\sFROM\s/i)+1),_t=`SELECT ${yt.join(", ")} ${zt}`,yn=await(He.length>0?h.unsafe(_t,He):h.unsafe(_t)).execute();return await ht(He.length>0?h.unsafe(Ne,He):h.unsafe(Ne),"delete"),Array.isArray(yn)?yn:[]})():await ht(vt(),"delete");try{await Ke()?.afterDelete?.({table:String(Fe),where:Gt,result:Vt})}catch{}return Vt},Et=async()=>{let Vt=await Wt();return Array.isArray(Vt)?Vt[0]:Vt},Ot=(Vt)=>()=>{throw TypeError(`[query-builder] deleteFrom.returning(...).${Vt}() is not supported \u2014 a DELETE cannot be ordered or limited through this builder. Narrow it with where() instead.`)},Ht={where:(...Vt)=>(wt.where(...Vt),Ht),andWhere:(...Vt)=>(wt.where(...Vt),Ht),whereNull:(...Vt)=>(wt.whereNull(...Vt),Ht),whereNotNull:(...Vt)=>(wt.whereNotNull(...Vt),Ht),orWhere:Ot("orWhere"),orderBy:Ot("orderBy"),limit:Ot("limit"),offset:Ot("offset"),toSQL:()=>jt(vt(),$t()),execute:()=>Wt(),get:()=>Wt(),first:Et,executeTakeFirst:Et,async firstOrFail(){let Vt=await Et();if(!Vt)throw Error("Delete with RETURNING returned no rows");return Vt},async executeTakeFirstOrThrow(){let Vt=await Et();if(!Vt)throw Error("Delete with RETURNING returned no rows");return Vt}};return Ht},toSQL(){return jt(Dt(),Ne)},async execute(){try{await Ke()?.beforeDelete?.({table:String(Fe),where:Gt})}catch(wt){throw wt}let yt=Jt(await ht(Dt(),"delete"));try{await Ke()?.afterDelete?.({table:String(Fe),where:Gt,result:yt})}catch{}return yt},async executeTakeFirst(){return{numDeletedRows:Jt(await ht(Dt(),"delete"))}},async executeTakeFirstOrThrow(){let yt=Jt(await ht(Dt(),"delete"));if(yt===0)throw Error("No rows deleted");return{numDeletedRows:yt}},returningAll(){let yt=()=>`${Ne} RETURNING *`,wt=()=>He.length>0?h.unsafe(yt(),He):h.unsafe(yt());return{toSQL:()=>jt(wt(),yt()),execute:()=>ht(wt(),"delete"),async executeTakeFirst(){let $t=await ht(wt(),"delete");return Array.isArray($t)?$t[0]:$t},async executeTakeFirstOrThrow(){let $t=await ht(wt(),"delete"),vt=Array.isArray($t)?$t[0]:$t;if(!vt)throw Error("Delete with RETURNING failed");return vt}}}}},table(Fe){let Ue=this;return{insert(_e){return Ue.insertInto(Fe).values(_e)},update(_e){return Ue.updateTable(Fe).set(_e)},delete(){return Ue.deleteFrom(Fe)},select(..._e){if(_e.length===0)return Ue.selectFrom(Fe);return Ue.select(Fe,..._e)}}},sql:h,raw(Fe,...Ue){return h(Fe,...Ue)},simple(Fe,...Ue){return h(Fe,...Ue).simple()},async advisoryLock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),_e=h`SELECT pg_advisory_lock(${Ue})`;await ht(_e,"raw");return}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,_e=h`SELECT GET_LOCK(${Ue}, -1) AS ok`;await ht(_e,"raw");return}throw Error("[query-builder] advisoryLock() is not supported on SQLite \u2014 use a Postgres or MySQL deployment for distributed locking.")},async tryAdvisoryLock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),_e=h`SELECT pg_try_advisory_lock(${Ue}) as ok`,Ne=await ht(_e,"raw");return Boolean(Ne?.[0]?.ok)}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,_e=h`SELECT GET_LOCK(${Ue}, 0) AS ok`,Ne=await ht(_e,"raw");return Number(Ne?.[0]?.ok)===1}return!1},async advisoryUnlock(Fe){if(e.dialect==="postgres"){let Ue=xe(Fe),_e=h`SELECT pg_advisory_unlock(${Ue}) as ok`,Ne=await ht(_e,"raw");return Boolean(Ne?.[0]?.ok)}if(n(e.dialect)){let Ue=`bqb:${String(Fe)}`,_e=h`SELECT RELEASE_LOCK(${Ue}) AS ok`,Ne=await ht(_e,"raw");return Number(Ne?.[0]?.ok)===1}return!1},unsafe(Fe,Ue){return h.unsafe(Fe,Ue)},deferInsert:h.deferInsert?.bind(h),flushDeferredInserts:h.flushDeferredInserts?.bind(h),file(Fe,Ue){return h.file(Fe,Ue)},async reserve(){let Fe=await r.reserve(),Ue=i({sql:Fe,meta:D,schema:E,hooks:d?.hooks});return Ue.release=()=>Fe.release(),Ue},async close(Fe){await r.close(Fe)},async listen(Fe,Ue){},async unlisten(Fe){},async notify(Fe,Ue){},async copyTo(Fe,Ue){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(Fe,Ue,_e){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let Fe=h`SELECT 1`;return await ht(Fe,"select"),!0}catch{return!1}},async waitForReady(Fe){let Ue=Math.max(1,Fe?.attempts??10),_e=Math.max(10,Fe?.delayMs??100);for(let Ne=0;Ne<Ue;Ne++){if(await this.ping())return;await new Promise((St)=>setTimeout(St,_e))}throw Error("Database not ready after waiting")},async transaction(Fe,Ue){let Ne={...d?.txDefaults,...Ue},St=d?.sql??r,He=d?.inTransaction===!0,Gt=He&&typeof St?.savepoint==="function"?"savepoint":"begin",Lt=async(yt)=>{Ne.logger?.({type:"start",attempt:yt});let wt=Date.now();return await St[Gt](async($t)=>{let vt=i({sql:$t,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});if(Ne?.isolation&&!He){let Ot=Ne.isolation,Ht=Ot==="read committed"?"READ COMMITTED":Ot==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await $t.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Ht}`);else if(n(e.dialect))await $t.unsafe(`SET TRANSACTION ISOLATION LEVEL ${Ht}`);else if(Ot!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${Ot}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(Ne?.readOnly)if(e.dialect==="postgres")await $t.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await $t.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let Wt=await Fe(vt),Et=Date.now()-wt;return Ne.logger?.({type:"commit",attempt:yt,durationMs:Et}),Wt})},qt=Math.max(0,Ne?.retries??0),Dt=0;for(;;)try{let yt=await Lt(Dt+1);return Ne?.afterCommit?.(),yt}catch(yt){let wt=ci(yt)||di(yt,Ne.sqlStates);if(Dt<qt&&wt){Dt++,Ne?.onRetry?.(Dt,yt);let $t=Ti(Dt,Ne.backoff);if($t>0)await fi($t);continue}try{Ne.onRollback?.(yt)}catch{}try{Ne.afterRollback?.()}catch{}throw yt}},async savepoint(Fe){if(d?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let Ue=h;if(!Ue||typeof Ue.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await Ue.savepoint(async(_e)=>{let Ne=i({sql:_e,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});return await Fe(Ne)})},async beginDistributed(Fe,Ue){return await(d?.sql??r).beginDistributed(Fe,async(St)=>{let He=i({sql:St,meta:D,schema:E,hooks:d?.hooks});return await Ue(He)})},async commitDistributed(Fe){await r.commitDistributed(Fe)},async rollbackDistributed(Fe){await r.rollbackDistributed(Fe)},setTransactionDefaults(Fe){d={...d,txDefaults:{...d?.txDefaults,...Fe}}},transactional(Fe,Ue){return(..._e)=>this.transaction((Ne)=>Fe(Ne,..._e),Ue)},async insertOrIgnore(Fe,Ue){let _e=Array.isArray(Ue)?Ue:[Ue];if(!_e.length)return;let{colsSql:Ne,valuesSql:St,params:He}=Or(_e),Gt=Vn(String(Fe)),Lt=n(e.dialect)?`INSERT IGNORE INTO ${Gt} (${Ne}) VALUES ${St}`:`INSERT INTO ${Gt} (${Ne}) VALUES ${St} ON CONFLICT DO NOTHING`;return h.unsafe(Lt,He).execute()},async insertGetId(Fe,Ue,_e="id"){let{colsSql:Ne,valuesSql:St,params:He}=Or([Ue]),Gt=Vn(String(Fe));if(n(e.dialect)){await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St}`,He).execute();let[qt]=await h.unsafe("SELECT LAST_INSERT_ID() as id").execute();return qt?.id}if(e.dialect==="sqlite"){let qt=await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St}`,He).execute();if(qt?.lastInsertRowid!=null)return qt.lastInsertRowid;let[Dt]=await h.unsafe("SELECT last_insert_rowid() as id").execute();return Dt?.id}let[Lt]=await h.unsafe(`INSERT INTO ${Gt} (${Ne}) VALUES ${St} RETURNING ${Vn(String(_e))} as id`,He).execute();return Lt?.id},async updateOrInsert(Fe,Ue,_e){let Ne=Vn(String(Fe)),St=Object.keys(Ue),He=1,Gt=St.map(($t)=>`${Vn($t)} = ${t(He++)}`).join(" AND "),Lt=St.map(($t)=>Ue[$t]);if((await h.unsafe(`SELECT 1 FROM ${Ne} WHERE ${Gt} LIMIT 1`,Lt).execute()).length){let $t=Object.keys(_e),vt=1,Wt=$t.map((Ht)=>`${Vn(Ht)} = ${t(vt++)}`).join(", "),Et=St.map((Ht)=>`${Vn(Ht)} = ${t(vt++)}`).join(" AND "),Ot=[...$t.map((Ht)=>_e[Ht]),...St.map((Ht)=>Ue[Ht])];return await h.unsafe(`UPDATE ${Ne} SET ${Wt} WHERE ${Et}`,Ot).execute(),!0}let{colsSql:Dt,valuesSql:yt,params:wt}=Or([{...Ue,..._e}]);return await h.unsafe(`INSERT INTO ${Ne} (${Dt}) VALUES ${yt}`,wt).execute(),!0},async upsert(Fe,Ue,_e,Ne){let St=_e.map((Wt)=>String(Wt)),He=(Ne??[]).map((Wt)=>String(Wt)),Gt=Ue;if(!Gt.length)return;let{colsSql:Lt,valuesSql:qt,params:Dt}=Or(Gt),yt=Vn(String(Fe)),wt=`INSERT INTO ${yt} (${Lt}) VALUES ${qt}`;if(n(e.dialect)){if(He.length===0)return h.unsafe(`INSERT IGNORE INTO ${yt} (${Lt}) VALUES ${qt}`,Dt).execute();let Wt=He.map((Et)=>`${Vn(Et)} = VALUES(${Vn(Et)})`).join(", ");return h.unsafe(`${wt} ON DUPLICATE KEY UPDATE ${Wt}`,Dt).execute()}let $t=St.map(Vn).join(", ");if(He.length===0)return h.unsafe(`${wt} ON CONFLICT (${$t}) DO NOTHING`,Dt).execute();let vt=He.map((Wt)=>`${Vn(Wt)} = EXCLUDED.${Vn(Wt)}`).join(", ");return h.unsafe(`${wt} ON CONFLICT (${$t}) DO UPDATE SET ${vt}`,Dt).execute()},async save(Fe,Ue){let _e=D?.primaryKeys[String(Fe)]??"id",Ne=Ue[_e];if(Ne!=null)if(await this.selectFrom(Fe).find(Ne)){await this.updateTable(Fe).set(Ue).where({[_e]:Ne}).execute();let He=await this.selectFrom(Fe).find(Ne);if(!He)throw Error("save() failed to retrieve updated row");return He}else return await this.create(Fe,Ue);return await this.create(Fe,Ue)},async remove(Fe,Ue){return await this.deleteFrom(Fe).where({id:Ue}).execute()},async find(Fe,Ue){return await this.selectFrom(Fe).find(Ue)},async findOrFail(Fe,Ue){return await this.selectFrom(Fe).findOrFail(Ue)},async findMany(Fe,Ue){return await this.selectFrom(Fe).findMany(Ue)},async latest(Fe,Ue){return await this.selectFrom(Fe).latest(Ue).first()},async oldest(Fe,Ue){return await this.selectFrom(Fe).oldest(Ue).first()},skip(Fe,Ue){return this.selectFrom(Fe).offset(Ue)},async rawQuery(Fe){let Ue=Date.now();try{Ke()?.onQueryStart?.({sql:Fe,kind:"raw"});let _e=await h.unsafe(Fe);return Ke()?.onQueryEnd?.({sql:Fe,durationMs:Date.now()-Ue,kind:"raw"}),_e}catch(_e){throw Ke()?.onQueryError?.({sql:Fe,error:_e,durationMs:Date.now()-Ue,kind:"raw"}),_e}},async create(Fe,Ue){let _e=D?.primaryKeys[String(Fe)]??"id";try{await Ke()?.beforeCreate?.({table:String(Fe),data:Ue})}catch(Ne){throw Ne}if(e.dialect==="postgres"){let Ne=h`INSERT INTO ${h(String(Fe))} ${h(Ue)} RETURNING ${h(String(_e))} as id`,[St]=await Ne.execute();if(!St?.id)throw console.error(`create() failed to get insert ID for table ${String(Fe)}`),console.error("Inserted values:",Ue),Error(`create() failed to get insert ID for table ${String(Fe)}`);let He=await this.selectFrom(Fe).find(St.id);if(!He)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${St.id}`),console.error("Inserted values:",Ue),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${St.id}`);try{await Ke()?.afterCreate?.({table:String(Fe),data:Ue,result:He})}catch{}return He}else{let Ne=await this.insertGetId(Fe,Ue,_e);if(Ne==null)throw Error(`create() failed to get insert ID for table ${String(Fe)}`);let St=await this.selectFrom(Fe).find(Ne);if(!St)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ne}`),console.error("Inserted values:",Ue),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ne}`);try{await Ke()?.afterCreate?.({table:String(Fe),data:Ue,result:St})}catch{}return St}},async createMany(Fe,Ue){if(!Ue?.length)return;let _e=Ue[0],Ne=Object.keys(_e),St=Ne.length,He=Ue.length,Gt=Array.from({length:He*St}),Lt=n(e.dialect)?(yt)=>`\`${String(yt).replace(/`/g,"``")}\``:(yt)=>`"${String(yt).replace(/"/g,'""')}"`,qt=`INSERT INTO ${Lt(String(Fe))}(${Ne.map(Lt).join(",")})VALUES`,Dt=0;for(let yt=0;yt<He;yt++){if(yt>0)qt+=",";qt+="(";let wt=Ue[yt];for(let $t=0;$t<St;$t++){if($t>0)qt+=",";qt+=t(Dt+1),Gt[Dt++]=wt[Ne[$t]]}qt+=")"}return h.unsafe(qt,Gt).execute()},async insertMany(Fe,Ue){if(!Ue?.length)return;let _e=Ue[0],Ne=Object.keys(_e),St=Ne.length,He=Ue.length,Gt=He*St,Lt=Array(Gt),qt=e.dialect==="postgres",Dt;if(!qt){let $t=Array(St);for(let vt=0;vt<St;vt++)$t[vt]="?";Dt=`(${$t.join(",")})`}else Dt="";let yt=Array(He+2);yt[0]=`INSERT INTO ${Fe}(${Ne.join(",")})VALUES`;let wt=0;if(!qt){for(let $t=0;$t<He;$t++){let vt=Ue[$t];yt[$t+1]=Dt;for(let Wt=0;Wt<St;Wt++)Lt[wt++]=vt[Ne[Wt]]}return h.unsafe(yt[0]+yt.slice(1,He+1).join(","),Lt).execute()}for(let $t=0;$t<He;$t++){let vt=Ue[$t],Wt=Array(St);for(let Et=0;Et<St;Et++)Wt[Et]=`$${wt+1}`,Lt[wt++]=vt[Ne[Et]];yt[$t+1]=`(${Wt.join(",")})`}return h.unsafe(yt[0]+yt.slice(1,He+1).join(","),Lt).execute()},async updateMany(Fe,Ue,_e){let Ne=Object.keys(_e),St=Ne.length;if(St===0)return 0;let He=[],Gt=Array.from({length:St});for(let qt=0;qt<St;qt++)Gt[qt]=`${Ne[qt]}=${t(qt+1)}`,He.push(_e[Ne[qt]]);let Lt=`UPDATE ${Fe} SET ${Gt.join(",")}`;if(Array.isArray(Ue)){let qt=qn(String(Ue[1]),"updateMany");Lt+=` WHERE ${Ue[0]} ${qt} ${t(He.length+1)}`,He.push(Ue[2])}else if(Xn(Ue))Lt+=` WHERE ${Ue.raw}`;else if(Tr(Ue)){let qt=br(Ue,He.length+1);Lt+=` WHERE ${qt.text}`,He.push(...qt.parameters)}else if(Ue&&typeof Ue==="object"&&Object.keys(Ue).length>0){let qt=Object.keys(Ue).map((Dt)=>Fr(Dt,Ue[Dt],He));Lt+=` WHERE ${qt.join(" AND ")}`}else if(Ue&&typeof Ue==="object")throw TypeError("[query-builder] updateMany(): an empty object is not a filter. Pass a condition, or use updateTable(table).set(data).execute() if updating every row is intended.");else throw TypeError(`[query-builder] updateMany(): expected a condition, got ${Ue===null?"null":typeof Ue}. Refusing to run an UPDATE with no WHERE \u2014 use updateTable(table).set(data).execute() if updating every row is intended.`);return h.unsafe(Lt,He).execute()},async deleteMany(Fe,Ue){if(!Array.isArray(Ue)||Ue.length===0)return 0;let _e=D?.primaryKeys[String(Fe)]??"id",Ne=Ue.length;if(e.dialect==="postgres"){let He=Array(Ne);for(let Gt=0;Gt<Ne;Gt++)He[Gt]=`$${Gt+1}`;return h.unsafe(`DELETE FROM ${Fe} WHERE ${_e} IN (${He.join(",")})`,Ue).execute()}let St=Array(Ne);for(let He=0;He<Ne;He++)St[He]="?";return h.unsafe(`DELETE FROM ${Fe} WHERE ${_e} IN (${St.join(",")})`,Ue).execute()},async firstOrCreate(Fe,Ue,_e){let Ne=await this.selectFrom(Fe).where(Ue).first();if(Ne)return Ne;return await this.create(Fe,{...Ue,..._e})},async updateOrCreate(Fe,Ue,_e){let Ne=await this.selectFrom(Fe).where(Ue).first();if(Ne){await this.updateTable(Fe).set(_e).where(Ue).execute();let St=D?.primaryKeys[String(Fe)]??"id",He=Ne[St],Gt=He!=null?await this.selectFrom(Fe).find(He):await this.selectFrom(Fe).where(Ue).first();if(!Gt)throw Error("updateOrCreate() failed to retrieve updated row");return Gt}return await this.create(Fe,{...Ue,..._e})},async count(Fe,Ue){let _e=Ue?h(String(Ue)):h`*`,Ne=h`SELECT COUNT(${_e}) as c FROM ${h(String(Fe))}`,[St]=await Ne.execute();return Number(St?.c??0)},async sum(Fe,Ue){let _e=h`SELECT SUM(${h(String(Ue))}) as s FROM ${h(String(Fe))}`,[Ne]=await _e.execute();return Number(Ne?.s??0)},async avg(Fe,Ue){let _e=h`SELECT AVG(${h(String(Ue))}) as a FROM ${h(String(Fe))}`,[Ne]=await _e.execute();return Number(Ne?.a??0)},async min(Fe,Ue){let _e=h`SELECT MIN(${h(String(Ue))}) as m FROM ${h(String(Fe))}`,[Ne]=await _e.execute();return Ne?.m},async max(Fe,Ue){let _e=h`SELECT MAX(${h(String(Ue))}) as m FROM ${h(String(Fe))}`,[Ne]=await _e.execute();return Ne?.m},getRelationships(Fe){if(!D?.relations)return{};let Ue=D.relations[Fe];if(!Ue)return{};let _e={};for(let[Ne,St]of Object.entries(Ue))if(St&&typeof St==="object"&&Object.keys(St).length>0)_e[Ne]=St;return _e},hasRelationship(Fe,Ue){if(!D?.relations)return!1;let _e=D.relations[Fe];if(!_e)return!1;return Object.values(_e).some((Ne)=>Ne&&typeof Ne==="object"&&(Ue in Ne))},getRelationshipType(Fe,Ue){if(!D?.relations)return null;let _e=D.relations[Fe];if(!_e)return null;for(let[Ne,St]of Object.entries(_e))if(St&&typeof St==="object"&&Ue in St)return Ne;return null},getRelationshipTarget(Fe,Ue){if(!D?.relations)return null;let _e=D.relations[Fe];if(!_e)return null;for(let[Ne,St]of Object.entries(_e))if(St&&typeof St==="object"&&Ue in St){let He=St[Ue];if(typeof He==="string")return D.modelToTable[He]||He;else if(He&&typeof He==="object"){if("model"in He)return D.modelToTable[He.model]||He.model;if("target"in He)return D.modelToTable[He.target]||He.target}}return null}}}function Qe(){Cr.clear()}function Ge(d){Cr.setMaxSize(d)}async function z(){console.log("-- Clearing query cache..."),Qe(),console.log("-- \u2713 Query cache cleared")}async function Y(){console.log("-- Query Cache Information"),console.log(),console.log("The query cache is an LRU (Least Recently Used) cache with TTL support."),console.log(),console.log("Configuration:"),console.log(" - Default max size: 100 entries"),console.log(" - Default TTL: 60 seconds (60000ms)"),console.log(" - Eviction: LRU when cache is full"),console.log(),console.log("Usage:"),console.log(' qb.selectFrom("users").cache().get() // Cache for 60s'),console.log(' qb.selectFrom("users").cache(5000).get() // Cache for 5s'),console.log(),console.log("Configuration:"),console.log(" clearQueryCache() // Clear all cached queries"),console.log(" setQueryCacheMaxSize(500) // Set max cache size"),console.log(),console.log("Commands:"),console.log(" qb cache:clear // Clear the cache"),console.log(" qb cache:config --size 500 // Configure cache size")}async function X(d={}){if(console.log("-- Configuring query cache..."),console.log(),d.size!==void 0){let h=Number(d.size);if(Number.isNaN(h)||h<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");Ge(h),console.log(`-- \u2713 Cache max size set to: ${h}`)}else console.log("-- No configuration changes specified"),console.log("-- Available options:"),console.log("-- --size <n> Set maximum cache size (default: 100)"),console.log(),console.log("-- Example: qb cache:config --size 500")}import Ir from"process";import{createInterface as bi}from"readline";async function N(){console.log("-- Query Builder Interactive Console"),console.log("-- Type .help for available commands"),console.log("-- Type .exit or press Ctrl+C to quit"),console.log();let d=i(),h=bi({input:Ir.stdin,output:Ir.stdout,prompt:"qb> "}),D="",E=!1,V=`
51
51
  Available Commands:
52
52
  .help Show this help message
53
53
  .exit Exit the console
@@ -66,38 +66,38 @@ Tips:
66
66
  - Use 'await' for async operations
67
67
  - Multi-line input: end with \\ to continue on next line
68
68
  - Press Enter on an empty line to execute multi-line input
69
- `,ke=async(Ke)=>{try{let gt=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${Ke})`)(d);if(gt!==void 0)if(Array.isArray(gt))console.log(`-- ${gt.length} row(s) returned`),console.table(gt);else if(typeof gt==="object"&&gt!==null)console.log(gt);else console.log(gt)}catch(Ie){console.error("Error:",Ie.message)}},xe=async(Ke)=>{let Ie=Ke.trim();if(Ie.startsWith(".")){let Ve=Ie.toLowerCase();if(Ve===".exit"||Ve===".quit")console.log("Goodbye!"),h.close(),Ir.exit(0);else if(Ve===".help")console.log(V);else if(Ve===".clear")console.clear();else if(Ve===".tables")try{let gt=await d.unsafe(`
69
+ `,ke=async(Ke)=>{try{let gt=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${Ke})`)(d);if(gt!==void 0)if(Array.isArray(gt))console.log(`-- ${gt.length} row(s) returned`),console.table(gt);else if(typeof gt==="object"&&gt!==null)console.log(gt);else console.log(gt)}catch(ve){console.error("Error:",ve.message)}},xe=async(Ke)=>{let ve=Ke.trim();if(ve.startsWith(".")){let Ve=ve.toLowerCase();if(Ve===".exit"||Ve===".quit")console.log("Goodbye!"),h.close(),Ir.exit(0);else if(Ve===".help")console.log(V);else if(Ve===".clear")console.clear();else if(Ve===".tables")try{let gt=await d.unsafe(`
70
70
  SELECT name FROM sqlite_master
71
71
  WHERE type = 'table'
72
72
  AND name NOT LIKE 'sqlite_%'
73
73
  ORDER BY name
74
- `);if(gt.length>0){console.log("Tables:");for(let pt of gt)console.log(` - ${pt.name}`)}else console.log("No tables found")}catch(gt){console.error("Error listing tables:",gt.message)}else console.log(`Unknown command: ${Ie}`),console.log("Type .help for available commands");return}if(Ie.endsWith("\\")){E=!0,D+=`${Ie.slice(0,-1)}
75
- `;return}if(E){if(Ie==="")await ke(D),D="",E=!1;else D+=`${Ie}
76
- `;return}if(Ie)await ke(Ie)};h.on("line",async(Ke)=>{await xe(Ke),h.prompt()}),h.on("SIGINT",()=>{if(E)console.log(`
74
+ `);if(gt.length>0){console.log("Tables:");for(let pt of gt)console.log(` - ${pt.name}`)}else console.log("No tables found")}catch(gt){console.error("Error listing tables:",gt.message)}else console.log(`Unknown command: ${ve}`),console.log("Type .help for available commands");return}if(ve.endsWith("\\")){E=!0,D+=`${ve.slice(0,-1)}
75
+ `;return}if(E){if(ve==="")await ke(D),D="",E=!1;else D+=`${ve}
76
+ `;return}if(ve)await ke(ve)};h.on("line",async(Ke)=>{await xe(Ke),h.prompt()}),h.on("SIGINT",()=>{if(E)console.log(`
77
77
  -- Multi-line input cancelled`),D="",E=!1,h.prompt();else console.log(`
78
78
  -- Type .exit to quit`),h.prompt()}),h.on("close",()=>{console.log(`
79
- Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSync as Si,readFileSync as wi,writeFileSync as Dr}from"fs";async function ee(d,h={}){let D=h.format||"json",E=h.output||`${d}.${D}`,V=h.limit;if(console.log(`-- Exporting data from table: ${d}`),console.log(`-- Format: ${D}`),console.log(`-- Output: ${E}`),V)console.log(`-- Limit: ${V} rows`);console.log();try{let xe=i().selectFrom(d);if(V)xe=xe.limit(V);let Ke=await xe.execute();if(console.log(`-- Retrieved ${Ke.length} rows`),D==="json")Dr(E,JSON.stringify(Ke,null,2)),console.log(`-- \u2713 Exported to JSON: ${E}`);else if(D==="csv"){if(Ke.length===0){Dr(E,""),console.log(`-- \u2713 Exported to CSV: ${E} (empty)`);return}let Ie=Object.keys(Ke[0]),Ve=[Ie.join(",")];for(let gt of Ke){let pt=Ie.map((xt)=>{let ht=gt[xt];if(ht===null||ht===void 0)return"";let Jt=String(ht);if(Jt.includes(",")||Jt.includes('"')||Jt.includes(`
79
+ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSync as Si,readFileSync as wi,writeFileSync as Dr}from"fs";async function ee(d,h={}){let D=h.format||"json",E=h.output||`${d}.${D}`,V=h.limit;if(console.log(`-- Exporting data from table: ${d}`),console.log(`-- Format: ${D}`),console.log(`-- Output: ${E}`),V)console.log(`-- Limit: ${V} rows`);console.log();try{let xe=i().selectFrom(d);if(V)xe=xe.limit(V);let Ke=await xe.execute();if(console.log(`-- Retrieved ${Ke.length} rows`),D==="json")Dr(E,JSON.stringify(Ke,null,2)),console.log(`-- \u2713 Exported to JSON: ${E}`);else if(D==="csv"){if(Ke.length===0){Dr(E,""),console.log(`-- \u2713 Exported to CSV: ${E} (empty)`);return}let ve=Object.keys(Ke[0]),Ve=[ve.join(",")];for(let gt of Ke){let pt=ve.map((xt)=>{let ht=gt[xt];if(ht===null||ht===void 0)return"";let Jt=String(ht);if(Jt.includes(",")||Jt.includes('"')||Jt.includes(`
80
80
  `))return`"${Jt.replace(/"/g,'""')}"`;return Jt});Ve.push(pt.join(","))}Dr(E,Ve.join(`
81
- `)),console.log(`-- \u2713 Exported to CSV: ${E}`)}else if(D==="sql"){let Ie=[];for(let Ve of Ke){let gt=Object.keys(Ve),pt=gt.map((xt)=>{let ht=Ve[xt];if(ht===null||ht===void 0)return"NULL";if(typeof ht==="number")return String(ht);return`'${String(ht).replace(/'/g,"''")}'`});Ie.push(`INSERT INTO ${d} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}Dr(E,Ie.join(`
81
+ `)),console.log(`-- \u2713 Exported to CSV: ${E}`)}else if(D==="sql"){let ve=[];for(let Ve of Ke){let gt=Object.keys(Ve),pt=gt.map((xt)=>{let ht=Ve[xt];if(ht===null||ht===void 0)return"NULL";if(typeof ht==="number")return String(ht);return`'${String(ht).replace(/'/g,"''")}'`});ve.push(`INSERT INTO ${d} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}Dr(E,ve.join(`
82
82
  `)),console.log(`-- \u2713 Exported to SQL: ${E}`)}}catch(ke){throw console.error(`-- Failed to export data from ${d}:`,ke),ke}}async function te(d,h,D={}){if(!Si(h))throw console.error(`-- File not found: ${h}`),Error(`File not found: ${h}`);let E=D.format||(h.endsWith(".json")?"json":"csv"),V=D.truncate??!1;console.log(`-- Importing data into table: ${d}`),console.log(`-- Format: ${E}`),console.log(`-- File: ${h}`),console.log(`-- Truncate: ${V}`),console.log();try{let ke=i();if(V)await ke.deleteFrom(d).execute(),console.log("-- Table truncated");let xe=wi(h,"utf8"),Ke=[];if(E==="json"){if(Ke=JSON.parse(xe),!Array.isArray(Ke))throw TypeError("JSON file must contain an array of objects")}else if(E==="csv"){let gt=xe.split(`
83
- `).filter((xt)=>xt.trim());if(gt.length<2){console.log("-- No data to import (CSV is empty or has only headers)");return}let pt=gt[0].split(",").map((xt)=>xt.trim());for(let xt=1;xt<gt.length;xt++){let ht=gt[xt].split(",").map((jt)=>jt.trim()),Jt={};for(let jt=0;jt<pt.length;jt++){let Tn=ht[jt];if(Tn.startsWith('"')&&Tn.endsWith('"'))Tn=Tn.slice(1,-1).replace(/""/g,'"');if(Tn==="")Tn=null;else if(!Number.isNaN(Number(Tn)))Tn=Number(Tn);Jt[pt[jt]]=Tn}Ke.push(Jt)}}if(Ke.length===0){console.log("-- No data to import");return}let Ie=100,Ve=0;for(let gt=0;gt<Ke.length;gt+=Ie){let pt=Ke.slice(gt,gt+Ie);await ke.insertInto(d).values(pt).execute(),Ve+=pt.length,console.log(`-- Imported ${Ve}/${Ke.length} rows...`)}console.log(`-- \u2713 Successfully imported ${Ke.length} rows`)}catch(ke){throw console.error(`-- Failed to import data into ${d}:`,ke),ke}}async function ne(d={}){let h=e.dialect||"postgres",D=d.output||`dump-${Date.now()}.sql`,E=d.tables?.split(",").map((V)=>V.trim());if(console.log("-- Dumping database"),console.log(`-- Dialect: ${h}`),console.log(`-- Output: ${D}`),E)console.log(`-- Tables: ${E.join(", ")}`);console.log();try{let V=i(),ke=[];if(h==="sqlite")ke=(await V.unsafe(`
83
+ `).filter((xt)=>xt.trim());if(gt.length<2){console.log("-- No data to import (CSV is empty or has only headers)");return}let pt=gt[0].split(",").map((xt)=>xt.trim());for(let xt=1;xt<gt.length;xt++){let ht=gt[xt].split(",").map((jt)=>jt.trim()),Jt={};for(let jt=0;jt<pt.length;jt++){let Tn=ht[jt];if(Tn.startsWith('"')&&Tn.endsWith('"'))Tn=Tn.slice(1,-1).replace(/""/g,'"');if(Tn==="")Tn=null;else if(!Number.isNaN(Number(Tn)))Tn=Number(Tn);Jt[pt[jt]]=Tn}Ke.push(Jt)}}if(Ke.length===0){console.log("-- No data to import");return}let ve=100,Ve=0;for(let gt=0;gt<Ke.length;gt+=ve){let pt=Ke.slice(gt,gt+ve);await ke.insertInto(d).values(pt).execute(),Ve+=pt.length,console.log(`-- Imported ${Ve}/${Ke.length} rows...`)}console.log(`-- \u2713 Successfully imported ${Ke.length} rows`)}catch(ke){throw console.error(`-- Failed to import data into ${d}:`,ke),ke}}async function ne(d={}){let h=e.dialect||"postgres",D=d.output||`dump-${Date.now()}.sql`,E=d.tables?.split(",").map((V)=>V.trim());if(console.log("-- Dumping database"),console.log(`-- Dialect: ${h}`),console.log(`-- Output: ${D}`),E)console.log(`-- Tables: ${E.join(", ")}`);console.log();try{let V=i(),ke=[];if(h==="sqlite")ke=(await V.unsafe(`
84
84
  SELECT name FROM sqlite_master
85
85
  WHERE type = 'table'
86
86
  AND name NOT LIKE 'sqlite_%'
87
87
  ORDER BY name
88
- `)).map((Ie)=>Ie.name);else if(h==="postgres")ke=(await V.unsafe(`
88
+ `)).map((ve)=>ve.name);else if(h==="postgres")ke=(await V.unsafe(`
89
89
  SELECT table_name
90
90
  FROM information_schema.tables
91
91
  WHERE table_schema = 'public'
92
92
  AND table_type = 'BASE TABLE'
93
93
  ORDER BY table_name
94
- `)).map((Ie)=>Ie.table_name);else if(n(h))ke=(await V.unsafe(`
94
+ `)).map((ve)=>ve.table_name);else if(n(h))ke=(await V.unsafe(`
95
95
  SELECT table_name
96
96
  FROM information_schema.tables
97
97
  WHERE table_schema = DATABASE()
98
98
  AND table_type = 'BASE TABLE'
99
99
  ORDER BY table_name
100
- `)).map((Ie)=>Ie.table_name);if(E)ke=ke.filter((Ke)=>E.includes(Ke));if(ke.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${ke.length} table(s)`);let xe=[];xe.push("-- Database dump"),xe.push(`-- Generated at: ${new Date().toISOString()}`),xe.push(`-- Dialect: ${h}`),xe.push("");for(let Ke of ke){console.log(`-- Dumping table: ${Ke}`);let Ie=await V.selectFrom(Ke).execute();xe.push(`-- Table: ${Ke}`),xe.push(`-- Rows: ${Ie.length}`),xe.push("");for(let Ve of Ie){let gt=Object.keys(Ve),pt=gt.map((xt)=>{let ht=Ve[xt];if(ht===null||ht===void 0)return"NULL";if(typeof ht==="number")return String(ht);return`'${String(ht).replace(/'/g,"''")}'`});xe.push(`INSERT INTO ${Ke} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}xe.push("")}Dr(D,xe.join(`
100
+ `)).map((ve)=>ve.table_name);if(E)ke=ke.filter((Ke)=>E.includes(Ke));if(ke.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${ke.length} table(s)`);let xe=[];xe.push("-- Database dump"),xe.push(`-- Generated at: ${new Date().toISOString()}`),xe.push(`-- Dialect: ${h}`),xe.push("");for(let Ke of ke){console.log(`-- Dumping table: ${Ke}`);let ve=await V.selectFrom(Ke).execute();xe.push(`-- Table: ${Ke}`),xe.push(`-- Rows: ${ve.length}`),xe.push("");for(let Ve of ve){let gt=Object.keys(Ve),pt=gt.map((xt)=>{let ht=Ve[xt];if(ht===null||ht===void 0)return"NULL";if(typeof ht==="number")return String(ht);return`'${String(ht).replace(/'/g,"''")}'`});xe.push(`INSERT INTO ${Ke} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}xe.push("")}Dr(D,xe.join(`
101
101
  `)),console.log(),console.log(`-- \u2713 Database dump saved to: ${D}`)}catch(V){throw console.error("-- Failed to dump database:",V),V}}async function B(){let d=e.dialect||"postgres",h=e.database?.database||"unknown";console.log("-- Database Information"),console.log(`-- Dialect: ${d}`),console.log(`-- Database: ${h}`),console.log();try{let D=i(),E=[],V=[];if(d==="postgres")V=(await D.unsafe(`
102
102
  SELECT table_name
103
103
  FROM information_schema.tables
@@ -116,7 +116,7 @@ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSy
116
116
  WHERE type = 'table'
117
117
  AND name NOT LIKE 'sqlite_%'
118
118
  ORDER BY name
119
- `)).map((Ke)=>Ke.name);for(let xe of V)try{let Ke=await D.unsafe(`SELECT COUNT(*) as count FROM ${xe}`),Ie=Number(Ke[0]?.count||0),Ve=0,gt=0;if(d==="postgres"){let pt=await D.unsafe(`
119
+ `)).map((Ke)=>Ke.name);for(let xe of V)try{let Ke=await D.unsafe(`SELECT COUNT(*) as count FROM ${xe}`),ve=Number(Ke[0]?.count||0),Ve=0,gt=0;if(d==="postgres"){let pt=await D.unsafe(`
120
120
  SELECT COUNT(*) as count
121
121
  FROM information_schema.columns
122
122
  WHERE table_name = $1
@@ -134,7 +134,7 @@ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSy
134
134
  FROM information_schema.statistics
135
135
  WHERE table_name = ?
136
136
  AND table_schema = DATABASE()
137
- `,[xe]);gt=Number(xt[0]?.count||0)}else if(d==="sqlite")Ve=(await D.unsafe(`PRAGMA table_info(${xe})`)).length,gt=(await D.unsafe(`PRAGMA index_list(${xe})`)).length;E.push({name:xe,rowCount:Ie,columns:Ve,indexes:gt})}catch(Ke){console.error(`-- Error getting info for table ${xe}:`,Ke)}let ke=E.reduce((xe,Ke)=>xe+Ke.rowCount,0);if(console.log(`-- Total Tables: ${E.length}`),console.log(`-- Total Rows: ${ke.toLocaleString()}`),console.log(),E.length>0){console.log("Tables:"),console.log();let xe=Math.max(...E.map((Ve)=>Ve.name.length)),Ke=xe+2,Ie="Table".padEnd(Ke)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(Ie),console.log("-".repeat(Ie.length));for(let Ve of E){let gt=Ve.name.padEnd(xe+2),pt=Ve.rowCount.toLocaleString().padStart(12),xt=(Ve.columns||0).toString().padStart(10),ht=(Ve.indexes||0).toString().padStart(10);console.log(`${gt}${pt}${xt}${ht}`)}}else console.log("-- No tables found");return{dialect:d,database:h,tables:E,totalTables:E.length,totalRows:ke}}catch(D){throw console.error("-- Failed to get database info:",D),D}}async function re(){return B()}async function P(d={}){let h=H(d.dialect),D=d.aggressive||!1;if(d.verbose)console.log(`Optimizing ${h} database${D?" (aggressive mode)":""}...`);try{if(h==="postgres"){if(d.tables&&d.tables.length>0)for(let E of d.tables){if(d.verbose)console.log(`Analyzing table: ${E}`);if(D)await r`VACUUM FULL ANALYZE ${r(E)}`;else await r`VACUUM ANALYZE ${r(E)}`}else{if(d.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(D)await r`VACUUM FULL`,await r`ANALYZE`;else await r`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(n(h)){if(d.tables&&d.tables.length>0)for(let E of d.tables){if(d.verbose)console.log(`Optimizing table: ${E}`);await r`OPTIMIZE TABLE ${r(E)}`,await r`ANALYZE TABLE ${r(E)}`}else{let E=Ce(),V=await r`
137
+ `,[xe]);gt=Number(xt[0]?.count||0)}else if(d==="sqlite")Ve=(await D.unsafe(`PRAGMA table_info(${xe})`)).length,gt=(await D.unsafe(`PRAGMA index_list(${xe})`)).length;E.push({name:xe,rowCount:ve,columns:Ve,indexes:gt})}catch(Ke){console.error(`-- Error getting info for table ${xe}:`,Ke)}let ke=E.reduce((xe,Ke)=>xe+Ke.rowCount,0);if(console.log(`-- Total Tables: ${E.length}`),console.log(`-- Total Rows: ${ke.toLocaleString()}`),console.log(),E.length>0){console.log("Tables:"),console.log();let xe=Math.max(...E.map((Ve)=>Ve.name.length)),Ke=xe+2,ve="Table".padEnd(Ke)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(ve),console.log("-".repeat(ve.length));for(let Ve of E){let gt=Ve.name.padEnd(xe+2),pt=Ve.rowCount.toLocaleString().padStart(12),xt=(Ve.columns||0).toString().padStart(10),ht=(Ve.indexes||0).toString().padStart(10);console.log(`${gt}${pt}${xt}${ht}`)}}else console.log("-- No tables found");return{dialect:d,database:h,tables:E,totalTables:E.length,totalRows:ke}}catch(D){throw console.error("-- Failed to get database info:",D),D}}async function re(){return B()}async function P(d={}){let h=H(d.dialect),D=d.aggressive||!1;if(d.verbose)console.log(`Optimizing ${h} database${D?" (aggressive mode)":""}...`);try{if(h==="postgres"){if(d.tables&&d.tables.length>0)for(let E of d.tables){if(d.verbose)console.log(`Analyzing table: ${E}`);if(D)await r`VACUUM FULL ANALYZE ${r(E)}`;else await r`VACUUM ANALYZE ${r(E)}`}else{if(d.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(D)await r`VACUUM FULL`,await r`ANALYZE`;else await r`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(n(h)){if(d.tables&&d.tables.length>0)for(let E of d.tables){if(d.verbose)console.log(`Optimizing table: ${E}`);await r`OPTIMIZE TABLE ${r(E)}`,await r`ANALYZE TABLE ${r(E)}`}else{let E=Ce(),V=await r`
138
138
  SELECT table_name
139
139
  FROM information_schema.tables
140
140
  WHERE table_schema = ${E}
@@ -151,7 +151,7 @@ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSy
151
151
  FROM sqlite_master
152
152
  WHERE type = 'table'
153
153
  AND name NOT LIKE 'sqlite_%'
154
- `).map((V)=>V.name);if(D.length===0){console.log("No tables found to drop.");return}if(d.verbose)console.log(`Found ${D.length} tables: ${D.join(", ")}`);if(h==="postgres")for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)} CASCADE`}else if(n(h)){await r`SET FOREIGN_KEY_CHECKS = 0`;for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)}`}await r`SET FOREIGN_KEY_CHECKS = 1`}else if(h==="sqlite"){await r`PRAGMA foreign_keys = OFF`;for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)}`}await r`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${D.length} tables`)}catch(D){throw console.error("Error wiping database:",D.message),D}}async function ie(d){let E=await(i().raw([d]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(E,null,2)),E}async function se(d,h={}){let D=i(),E=h.params?JSON.parse(h.params):void 0,V=await D.file(d,E);return console.log(JSON.stringify(V)),V}async function _(d,h={}){let D=e.dialect||"postgres",E=h.verbose??!0;if(E)console.log(`-- Inspecting table: ${d}`),console.log(`-- Dialect: ${D}`),console.log();try{let V=i(),ke=[],xe=[],Ke=await V.unsafe(`SELECT COUNT(*) as count FROM ${d}`),Ie=Number(Ke[0]?.count||0);if(D==="postgres"){let Ve=await V.unsafe(`
154
+ `).map((V)=>V.name);if(D.length===0){console.log("No tables found to drop.");return}if(d.verbose)console.log(`Found ${D.length} tables: ${D.join(", ")}`);if(h==="postgres")for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)} CASCADE`}else if(n(h)){await r`SET FOREIGN_KEY_CHECKS = 0`;for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)}`}await r`SET FOREIGN_KEY_CHECKS = 1`}else if(h==="sqlite"){await r`PRAGMA foreign_keys = OFF`;for(let E of D){if(d.verbose)console.log(`Dropping table: ${E}`);await r`DROP TABLE IF EXISTS ${r(E)}`}await r`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${D.length} tables`)}catch(D){throw console.error("Error wiping database:",D.message),D}}async function ie(d){let E=await(i().raw([d]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(E,null,2)),E}async function se(d,h={}){let D=i(),E=h.params?JSON.parse(h.params):void 0,V=await D.file(d,E);return console.log(JSON.stringify(V)),V}async function I(d,h={}){let D=e.dialect||"postgres",E=h.verbose??!0;if(E)console.log(`-- Inspecting table: ${d}`),console.log(`-- Dialect: ${D}`),console.log();try{let V=i(),ke=[],xe=[],Ke=await V.unsafe(`SELECT COUNT(*) as count FROM ${d}`),ve=Number(Ke[0]?.count||0);if(D==="postgres"){let Ve=await V.unsafe(`
155
155
  SELECT
156
156
  c.column_name,
157
157
  c.data_type,
@@ -206,7 +206,7 @@ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSy
206
206
  ORDER BY ORDINAL_POSITION
207
207
  `,[d]);for(let xt of Ve)ke.push({name:xt.column_name,type:xt.data_type,nullable:xt.is_nullable==="YES",default:xt.column_default,isPrimaryKey:xt.column_key==="PRI",isForeignKey:xt.column_key==="MUL"});let gt=await V.unsafe(`
208
208
  SHOW INDEXES FROM ${d}
209
- `),pt=new Map;for(let xt of gt){let ht=xt.Key_name;if(!pt.has(ht))pt.set(ht,{columns:[],unique:xt.Non_unique===0});pt.get(ht).columns.push(xt.Column_name)}for(let[xt,ht]of pt)xe.push({name:xt,columns:ht.columns,unique:ht.unique})}else if(D==="sqlite"){let Ve=await V.unsafe(`PRAGMA table_info(${d})`);for(let pt of Ve)ke.push({name:pt.name,type:pt.type,nullable:pt.notnull===0,default:pt.dflt_value,isPrimaryKey:pt.pk===1});let gt=await V.unsafe(`PRAGMA index_list(${d})`);for(let pt of gt){let xt=await V.unsafe(`PRAGMA index_info(${pt.name})`);xe.push({name:pt.name,columns:xt.map((ht)=>ht.name),unique:pt.unique===1})}}if(E){console.log(`Table: ${d}`),console.log(`Rows: ${Ie.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let Ve=Math.max(...ke.map((Jt)=>Jt.name.length),10),gt=Math.max(...ke.map((Jt)=>Jt.type.length),10),pt=Ve+2,xt=gt+2,ht=`${"Name".padEnd(pt)+"Type".padEnd(xt)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(ht),console.log("-".repeat(ht.length));for(let Jt of ke){let jt=Jt.name.padEnd(pt),Tn=Jt.type.padEnd(xt),Fe=(Jt.nullable?"YES":"NO").padEnd(10),Ue=String(Jt.default||"").padEnd(20),ve=[Jt.isPrimaryKey?"PK":"",Jt.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${jt}${Tn}${Fe}${Ue}${ve}`)}if(console.log(),xe.length>0){console.log("Indexes:"),console.log();for(let Jt of xe){let jt=Jt.unique?" (UNIQUE)":"";console.log(` - ${Jt.name}${jt}: [${Jt.columns.join(", ")}]`)}console.log()}}return{tableName:d,rowCount:Ie,columns:ke,indexes:xe}}catch(V){throw console.error(`-- Failed to inspect table ${d}:`,V),V}}async function ae(d,h={}){return _(d,h)}async function oe(d,h={}){let D=await u({modelsDir:d}),E=$e(D);return console.log(JSON.stringify(E,null,2)),{models:D,schema:E}}function Je(d){let h=d.toLowerCase();if(/^bool|boolean|tinyint\(1\)/.test(h))return"boolean";if(/int|serial|numeric|decimal|double|real|float|money/.test(h))return"number";if(/timestamp|datetime|date|time/.test(h))return"datetime";if(/json/.test(h))return"json";return"string"}function Di(d){if(/ies$/i.test(d))return d.replace(/ies$/i,"y");if(/ses$/i.test(d))return d.replace(/es$/i,"");if(/s$/i.test(d)&&!/ss$/i.test(d))return d.replace(/s$/i,"");return d}function Ei(d){return d.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map((h)=>h.charAt(0).toUpperCase()+h.slice(1)).join("")}function Be(d){return Ei(Di(d))}async function os(d,h){if(h==="postgres")return(await d.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name")).map((V)=>V.table_name);if(n(h))return(await d.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")).map((V)=>V.table_name??V.TABLE_NAME);return(await d.unsafe("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")).map((E)=>E.name)}async function $i(d,h,D){if(h==="sqlite")return(await d.unsafe(`PRAGMA table_info(${D})`)).map((ke)=>({name:ke.name,sqlType:String(ke.type||""),nullable:Number(ke.notnull)===0,isPrimaryKey:Number(ke.pk)>0}));if(h==="postgres")return(await d.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
209
+ `),pt=new Map;for(let xt of gt){let ht=xt.Key_name;if(!pt.has(ht))pt.set(ht,{columns:[],unique:xt.Non_unique===0});pt.get(ht).columns.push(xt.Column_name)}for(let[xt,ht]of pt)xe.push({name:xt,columns:ht.columns,unique:ht.unique})}else if(D==="sqlite"){let Ve=await V.unsafe(`PRAGMA table_info(${d})`);for(let pt of Ve)ke.push({name:pt.name,type:pt.type,nullable:pt.notnull===0,default:pt.dflt_value,isPrimaryKey:pt.pk===1});let gt=await V.unsafe(`PRAGMA index_list(${d})`);for(let pt of gt){let xt=await V.unsafe(`PRAGMA index_info(${pt.name})`);xe.push({name:pt.name,columns:xt.map((ht)=>ht.name),unique:pt.unique===1})}}if(E){console.log(`Table: ${d}`),console.log(`Rows: ${ve.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let Ve=Math.max(...ke.map((Jt)=>Jt.name.length),10),gt=Math.max(...ke.map((Jt)=>Jt.type.length),10),pt=Ve+2,xt=gt+2,ht=`${"Name".padEnd(pt)+"Type".padEnd(xt)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(ht),console.log("-".repeat(ht.length));for(let Jt of ke){let jt=Jt.name.padEnd(pt),Tn=Jt.type.padEnd(xt),Fe=(Jt.nullable?"YES":"NO").padEnd(10),Ue=String(Jt.default||"").padEnd(20),_e=[Jt.isPrimaryKey?"PK":"",Jt.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${jt}${Tn}${Fe}${Ue}${_e}`)}if(console.log(),xe.length>0){console.log("Indexes:"),console.log();for(let Jt of xe){let jt=Jt.unique?" (UNIQUE)":"";console.log(` - ${Jt.name}${jt}: [${Jt.columns.join(", ")}]`)}console.log()}}return{tableName:d,rowCount:ve,columns:ke,indexes:xe}}catch(V){throw console.error(`-- Failed to inspect table ${d}:`,V),V}}async function ae(d,h={}){return I(d,h)}async function oe(d,h={}){let D=await u({modelsDir:d}),E=$e(D);return console.log(JSON.stringify(E,null,2)),{models:D,schema:E}}function Je(d){let h=d.toLowerCase();if(/^bool|boolean|tinyint\(1\)/.test(h))return"boolean";if(/int|serial|numeric|decimal|double|real|float|money/.test(h))return"number";if(/timestamp|datetime|date|time/.test(h))return"datetime";if(/json/.test(h))return"json";return"string"}function Di(d){if(/ies$/i.test(d))return d.replace(/ies$/i,"y");if(/ses$/i.test(d))return d.replace(/es$/i,"");if(/s$/i.test(d)&&!/ss$/i.test(d))return d.replace(/s$/i,"");return d}function Ei(d){return d.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map((h)=>h.charAt(0).toUpperCase()+h.slice(1)).join("")}function Be(d){return Ei(Di(d))}async function os(d,h){if(h==="postgres")return(await d.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name")).map((V)=>V.table_name);if(n(h))return(await d.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")).map((V)=>V.table_name??V.TABLE_NAME);return(await d.unsafe("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")).map((E)=>E.name)}async function $i(d,h,D){if(h==="sqlite")return(await d.unsafe(`PRAGMA table_info(${D})`)).map((ke)=>({name:ke.name,sqlType:String(ke.type||""),nullable:Number(ke.notnull)===0,isPrimaryKey:Number(ke.pk)>0}));if(h==="postgres")return(await d.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
210
210
  (SELECT COUNT(*) FROM information_schema.table_constraints tc
211
211
  JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
212
212
  WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
@@ -224,7 +224,7 @@ Goodbye!`),Ir.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSy
224
224
  ${V}
225
225
  },
226
226
  })
227
- `}async function v(d={}){let h=e.dialect||"postgres",D=i(),E=d.tables?.length?d.tables:await os(D,h),V=[];for(let ke of E){let xe=await $i(D,h,ke);if(!xe.length)continue;V.push({table:ke,modelName:Be(ke),primaryKey:xe.find((Ke)=>Ke.isPrimaryKey)?.name??"id",columns:xe,source:ze(ke,xe)})}return V}function Ur(d,h,D){if(D?.enumValues&&D.enumValues.length>0)return"enum";let E=String(d||"").toLowerCase().trim(),V=E.replace(/\(.*$/,"").replace(/\s+/g," ").trim();if(n(h)&&/^tinyint\(1\)/.test(E))return"boolean";if(/^bool/.test(V))return"boolean";if(V==="int8"||V==="bigint"||V==="bigserial")return"bigint";if(/^(?:int|integer|smallint|mediumint|serial|int2|int4|tinyint)/.test(V))return"integer";if(/^(?:varchar|character varying|nvarchar|nchar|char|character|bpchar)/.test(V)){let ke=E.match(/\((\d+)\)/),xe=ke?Number(ke[1]):void 0;if(n(h))return"string";return xe!==void 0&&xe>255?"text":"string"}if(/text|clob/.test(V))return"text";if(V==="float8"||/^double/.test(V))return"double";if(/^(?:real|float4|float)/.test(V))return"float";if(/^(?:numeric|decimal|money)/.test(V))return"decimal";if(V==="date")return"date";if(V==="timestamptz"||/\bwith time zone\b/.test(E))return"timestamptz";if(/^(?:timestamp|datetime)/.test(V))return"datetime";if(/^time/.test(V))return"string";if(/json/.test(V))return"json";if(/^enum/.test(V))return"enum";return"string"}function Ri(d,h,D){return Ur(String(h||d||""),"mysql",{enumValues:D})}function xi(d){let h=String(d||"").trim().match(/^varchar\((\d+)\)/i);if(!h)return;let D=Number(h[1]);return Number.isSafeInteger(D)&&D>0?D:void 0}function fr(d){let h=String(d??"").toLowerCase().trim();if(h==="cascade"||h==="restrict"||h==="set null")return h;return}async function Ni(d,h){let D=await d.unsafe(`PRAGMA table_info(${JSON.stringify(h)})`),E=await d.unsafe(`PRAGMA index_list(${JSON.stringify(h)})`),V=await d.unsafe(`PRAGMA foreign_key_list(${JSON.stringify(h)})`),ke=await d.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[h]),xe=String(ke?.[0]?.sql??""),Ke=new Map;for(let pt of V)Ke.set(String(pt.from),{table:String(pt.table),column:String(pt.to??"id"),onDelete:fr(pt.on_delete),onUpdate:fr(pt.on_update)});let Ie=[],Ve=new Set;for(let pt of E){let xt=String(pt.origin??""),ht=String(pt.name??"");if(xt==="pk"||ht.startsWith("sqlite_autoindex_"))continue;let jt=(await d.unsafe(`PRAGMA index_info(${JSON.stringify(ht)})`)).map((Fe)=>String(Fe.name)).filter(Boolean);if(jt.length===0)continue;let Tn=Number(pt.unique)===1;if(Tn&&jt.length===1)Ve.add(jt[0]);Ie.push({name:ht,columns:jt,type:Tn?"unique":"index"})}let gt=D.map((pt)=>{let xt=String(pt.name),ht=ki(xe,xt),Jt=Number(pt.pk)>0,jt=pt.dflt_value,Tn=jt!==null&&jt!==void 0;return{name:xt,type:Ur(String(pt.type??""),"sqlite",{enumValues:ht}),isPrimaryKey:Jt,isUnique:Ve.has(xt),isNullable:Jt?!1:Number(pt.notnull)===0,hasDefault:Tn,defaultValue:Tn?Qr(jt):void 0,enumValues:ht,references:Ke.get(xt)}});return{table:h,columns:gt,indexes:Ie}}function ki(d,h){if(!d)return;let D=new RegExp(`(?:"${h}"|\`${h}\`|\\b${h}\\b)\\s+IN\\s*\\(([^)]*)\\)`,"i"),E=d.match(D);if(!E)return;let V=E[1].split(",").map((ke)=>ke.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((ke)=>ke.length>0);return V.length>0?V:void 0}function Qr(d){if(typeof d==="number"||typeof d==="boolean")return d;return String(d)}async function ls(d){let h=await d.unsafe(`SELECT t.typname AS type_name, e.enumlabel AS label
227
+ `}async function v(d={}){let h=e.dialect||"postgres",D=i(),E=d.tables?.length?d.tables:await os(D,h),V=[];for(let ke of E){let xe=await $i(D,h,ke);if(!xe.length)continue;V.push({table:ke,modelName:Be(ke),primaryKey:xe.find((Ke)=>Ke.isPrimaryKey)?.name??"id",columns:xe,source:ze(ke,xe)})}return V}function Ur(d,h,D){if(D?.enumValues&&D.enumValues.length>0)return"enum";let E=String(d||"").toLowerCase().trim(),V=E.replace(/\(.*$/,"").replace(/\s+/g," ").trim();if(n(h)&&/^tinyint\(1\)/.test(E))return"boolean";if(/^bool/.test(V))return"boolean";if(V==="int8"||V==="bigint"||V==="bigserial")return"bigint";if(/^(?:int|integer|smallint|mediumint|serial|int2|int4|tinyint)/.test(V))return"integer";if(/^(?:varchar|character varying|nvarchar|nchar|char|character|bpchar)/.test(V)){let ke=E.match(/\((\d+)\)/),xe=ke?Number(ke[1]):void 0;if(n(h))return"string";return xe!==void 0&&xe>255?"text":"string"}if(/text|clob/.test(V))return"text";if(V==="float8"||/^double/.test(V))return"double";if(/^(?:real|float4|float)/.test(V))return"float";if(/^(?:numeric|decimal|money)/.test(V))return"decimal";if(V==="date")return"date";if(V==="timestamptz"||/\bwith time zone\b/.test(E))return"timestamptz";if(/^(?:timestamp|datetime)/.test(V))return"datetime";if(/^time/.test(V))return"string";if(/json/.test(V))return"json";if(/^enum/.test(V))return"enum";return"string"}function Ri(d,h,D){return Ur(String(h||d||""),"mysql",{enumValues:D})}function xi(d){let h=String(d||"").trim().match(/^varchar\((\d+)\)/i);if(!h)return;let D=Number(h[1]);return Number.isSafeInteger(D)&&D>0?D:void 0}function fr(d){let h=String(d??"").toLowerCase().trim();if(h==="cascade"||h==="restrict"||h==="set null")return h;return}async function Ni(d,h){let D=await d.unsafe(`PRAGMA table_info(${JSON.stringify(h)})`),E=await d.unsafe(`PRAGMA index_list(${JSON.stringify(h)})`),V=await d.unsafe(`PRAGMA foreign_key_list(${JSON.stringify(h)})`),ke=await d.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[h]),xe=String(ke?.[0]?.sql??""),Ke=new Map;for(let pt of V)Ke.set(String(pt.from),{table:String(pt.table),column:String(pt.to??"id"),onDelete:fr(pt.on_delete),onUpdate:fr(pt.on_update)});let ve=[],Ve=new Set;for(let pt of E){let xt=String(pt.origin??""),ht=String(pt.name??"");if(xt==="pk"||ht.startsWith("sqlite_autoindex_"))continue;let jt=(await d.unsafe(`PRAGMA index_info(${JSON.stringify(ht)})`)).map((Fe)=>String(Fe.name)).filter(Boolean);if(jt.length===0)continue;let Tn=Number(pt.unique)===1;if(Tn&&jt.length===1)Ve.add(jt[0]);ve.push({name:ht,columns:jt,type:Tn?"unique":"index"})}let gt=D.map((pt)=>{let xt=String(pt.name),ht=ki(xe,xt),Jt=Number(pt.pk)>0,jt=pt.dflt_value,Tn=jt!==null&&jt!==void 0;return{name:xt,type:Ur(String(pt.type??""),"sqlite",{enumValues:ht}),isPrimaryKey:Jt,isUnique:Ve.has(xt),isNullable:Jt?!1:Number(pt.notnull)===0,hasDefault:Tn,defaultValue:Tn?Qr(jt):void 0,enumValues:ht,references:Ke.get(xt)}});return{table:h,columns:gt,indexes:ve}}function ki(d,h){if(!d)return;let D=new RegExp(`(?:"${h}"|\`${h}\`|\\b${h}\\b)\\s+IN\\s*\\(([^)]*)\\)`,"i"),E=d.match(D);if(!E)return;let V=E[1].split(",").map((ke)=>ke.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((ke)=>ke.length>0);return V.length>0?V:void 0}function Qr(d){if(typeof d==="number"||typeof d==="boolean")return d;return String(d)}async function ls(d){let h=await d.unsafe(`SELECT t.typname AS type_name, e.enumlabel AS label
228
228
  FROM pg_type t
229
229
  JOIN pg_enum e ON e.enumtypid = t.oid
230
230
  JOIN pg_namespace n ON n.oid = t.typnamespace
@@ -249,7 +249,7 @@ ${V}
249
249
  JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
250
250
  JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
251
251
  JOIN information_schema.referential_constraints rc ON rc.constraint_name = tc.constraint_name
252
- WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`,[h]),Ke=new Map,Ie=new Map;for(let xt of xe){let ht=String(xt.constraint_name);Ie.set(ht,(Ie.get(ht)??0)+1)}for(let xt of xe){let ht=String(xt.column_name),Jt=Ke.get(ht),jt=String(xt.constraint_name),Tn=Ie.get(jt)===1?[...new Set([...Jt?.constraintNames??[],jt])]:Jt?.constraintNames;Ke.set(ht,Jt?{...Jt,constraintNames:Tn}:{table:String(xt.ref_table),column:String(xt.ref_column??"id"),onDelete:fr(xt.delete_rule),onUpdate:fr(xt.update_rule),constraintNames:Tn})}let{indexes:Ve,uniqueColumns:gt}=us(h,ke.map((xt)=>({indexName:String(xt.index_name),isUnique:xt.is_unique===!0||xt.is_unique==="t",isPrimary:xt.is_primary===!0||xt.is_primary==="t",column:String(xt.column_name),where:xt.where_clause?String(xt.where_clause):void 0}))),pt=V.map((xt)=>{let ht=String(xt.column_name),Jt=Number(xt.is_pk)>0,jt=xt.column_default==null?null:String(xt.column_default),Tn=jt!=null&&/nextval\(/i.test(jt),Fe=jt!=null&&!Tn;return{name:ht,...Bi(String(xt.data_type??""),xt.udt_name==null?"":String(xt.udt_name),E),isPrimaryKey:Jt,isUnique:gt.has(ht),isNullable:Jt?!1:String(xt.is_nullable).toUpperCase()==="YES",hasDefault:Fe,defaultValue:Fe?Qr(jt):void 0,references:Ke.get(ht)}});return{table:h,columns:pt,indexes:Ve}}async function Oi(d,h){let D=await d.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
252
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`,[h]),Ke=new Map,ve=new Map;for(let xt of xe){let ht=String(xt.constraint_name);ve.set(ht,(ve.get(ht)??0)+1)}for(let xt of xe){let ht=String(xt.column_name),Jt=Ke.get(ht),jt=String(xt.constraint_name),Tn=ve.get(jt)===1?[...new Set([...Jt?.constraintNames??[],jt])]:Jt?.constraintNames;Ke.set(ht,Jt?{...Jt,constraintNames:Tn}:{table:String(xt.ref_table),column:String(xt.ref_column??"id"),onDelete:fr(xt.delete_rule),onUpdate:fr(xt.update_rule),constraintNames:Tn})}let{indexes:Ve,uniqueColumns:gt}=us(h,ke.map((xt)=>({indexName:String(xt.index_name),isUnique:xt.is_unique===!0||xt.is_unique==="t",isPrimary:xt.is_primary===!0||xt.is_primary==="t",column:String(xt.column_name),where:xt.where_clause?String(xt.where_clause):void 0}))),pt=V.map((xt)=>{let ht=String(xt.column_name),Jt=Number(xt.is_pk)>0,jt=xt.column_default==null?null:String(xt.column_default),Tn=jt!=null&&/nextval\(/i.test(jt),Fe=jt!=null&&!Tn;return{name:ht,...Bi(String(xt.data_type??""),xt.udt_name==null?"":String(xt.udt_name),E),isPrimaryKey:Jt,isUnique:gt.has(ht),isNullable:Jt?!1:String(xt.is_nullable).toUpperCase()==="YES",hasDefault:Fe,defaultValue:Fe?Qr(jt):void 0,references:Ke.get(ht)}});return{table:h,columns:pt,indexes:Ve}}async function Oi(d,h){let D=await d.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
253
253
  FROM information_schema.columns
254
254
  WHERE table_name = ? AND table_schema = DATABASE()
255
255
  ORDER BY ordinal_position`,[h]),E=await d.unsafe(`SELECT index_name, non_unique, seq_in_index, column_name
@@ -260,7 +260,7 @@ ${V}
260
260
  FROM information_schema.key_column_usage kcu
261
261
  JOIN information_schema.referential_constraints rc
262
262
  ON rc.constraint_name = kcu.constraint_name AND rc.constraint_schema = kcu.table_schema
263
- WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`,[h]),ke=new Map,xe=new Map;for(let gt of V){let pt=String(gt.constraint_name??gt.CONSTRAINT_NAME);xe.set(pt,(xe.get(pt)??0)+1)}for(let gt of V){let pt=String(gt.column_name??gt.COLUMN_NAME),xt=ke.get(pt),ht=String(gt.constraint_name??gt.CONSTRAINT_NAME),Jt=xe.get(ht)===1?[...new Set([...xt?.constraintNames??[],ht])]:xt?.constraintNames;ke.set(pt,xt?{...xt,constraintNames:Jt}:{table:String(gt.ref_table??gt.REF_TABLE),column:String(gt.ref_column??gt.REF_COLUMN??"id"),onDelete:fr(gt.delete_rule??gt.DELETE_RULE),onUpdate:fr(gt.update_rule??gt.UPDATE_RULE),constraintNames:Jt})}let{indexes:Ke,uniqueColumns:Ie}=us(h,E.map((gt)=>({indexName:String(gt.index_name??gt.INDEX_NAME),isUnique:Number(gt.non_unique??gt.NON_UNIQUE)===0,isPrimary:String(gt.index_name??gt.INDEX_NAME).toUpperCase()==="PRIMARY",column:String(gt.column_name??gt.COLUMN_NAME)}))),Ve=D.map((gt)=>{let pt=String(gt.column_name??gt.COLUMN_NAME),xt=String(gt.column_type??gt.COLUMN_TYPE??""),ht=Mi(xt),jt=String(gt.column_key??gt.COLUMN_KEY??"").toUpperCase()==="PRI",Tn=gt.column_default??gt.COLUMN_DEFAULT,Fe=Tn!=null;return{name:pt,type:Ri(gt.data_type??gt.DATA_TYPE,xt,ht),isPrimaryKey:jt,isUnique:Ie.has(pt),isNullable:jt?!1:String(gt.is_nullable??gt.IS_NULLABLE).toUpperCase()==="YES",hasDefault:Fe,defaultValue:Fe?Qr(Tn):void 0,enumValues:ht,maxLength:xi(xt),references:ke.get(pt)}});return{table:h,columns:Ve,indexes:Ke}}function Mi(d){let h=d.match(/^enum\((.*)\)$/i);if(!h)return;return h[1].split(",").map((D)=>D.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((D)=>D.length>0)}function us(d,h){let D=new Map;for(let ke of h){if(ke.isPrimary)continue;let xe=D.get(ke.indexName)??{isUnique:ke.isUnique,isPrimary:ke.isPrimary,columns:[],where:ke.where};xe.columns.push(ke.column),D.set(ke.indexName,xe)}let E=[],V=new Set;for(let[ke,xe]of D){if(xe.columns.length===0)continue;if(xe.isUnique&&xe.columns.length===1)V.add(xe.columns[0]);E.push({name:ke,columns:xe.columns,type:xe.isUnique?"unique":"index",where:xe.where})}return{indexes:E,uniqueColumns:V}}async function cs(d,h={}){let D=d||e.dialect||"postgres",E=i(),ke=((h.tables?.length)?h.tables:await os(E,D)).filter((Ie)=>Ie!=="migrations"),xe=D==="postgres"?await ls(E):void 0,Ke=[];for(let Ie of ke){let Ve;if(D==="sqlite")Ve=await Ni(E,Ie);else if(D==="postgres")Ve=await Ai(E,Ie,xe);else Ve=await Oi(E,Ie);if(Ve.columns.length>0)Ke.push(Ve)}return{dialect:D,tables:Ke}}import{existsSync as jr,mkdirSync as Ci,writeFileSync as Ii}from"fs";import{dirname as ds,join as Wr}from"path";import fs from"process";function Pi(d){let h=d;while(h!==ds(h)){if(jr(Wr(h,"package.json")))return h;h=ds(h)}return fs.cwd()}async function le(d,h={}){let D=Pi(fs.cwd()),E=h.dir||Wr(D,"app/Models");if(!jr(E))Ci(E,{recursive:!0}),console.log(`-- Created models directory: ${E}`);let V=d.charAt(0).toUpperCase()+d.slice(1),ke=h.table||`${d.toLowerCase()}s`,xe=`${V}.ts`,Ke=Wr(E,xe);if(jr(Ke))throw console.error(`-- Model already exists: ${Ke}`),Error(`Model already exists: ${Ke}`);let Ve=h.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
263
+ WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`,[h]),ke=new Map,xe=new Map;for(let gt of V){let pt=String(gt.constraint_name??gt.CONSTRAINT_NAME);xe.set(pt,(xe.get(pt)??0)+1)}for(let gt of V){let pt=String(gt.column_name??gt.COLUMN_NAME),xt=ke.get(pt),ht=String(gt.constraint_name??gt.CONSTRAINT_NAME),Jt=xe.get(ht)===1?[...new Set([...xt?.constraintNames??[],ht])]:xt?.constraintNames;ke.set(pt,xt?{...xt,constraintNames:Jt}:{table:String(gt.ref_table??gt.REF_TABLE),column:String(gt.ref_column??gt.REF_COLUMN??"id"),onDelete:fr(gt.delete_rule??gt.DELETE_RULE),onUpdate:fr(gt.update_rule??gt.UPDATE_RULE),constraintNames:Jt})}let{indexes:Ke,uniqueColumns:ve}=us(h,E.map((gt)=>({indexName:String(gt.index_name??gt.INDEX_NAME),isUnique:Number(gt.non_unique??gt.NON_UNIQUE)===0,isPrimary:String(gt.index_name??gt.INDEX_NAME).toUpperCase()==="PRIMARY",column:String(gt.column_name??gt.COLUMN_NAME)}))),Ve=D.map((gt)=>{let pt=String(gt.column_name??gt.COLUMN_NAME),xt=String(gt.column_type??gt.COLUMN_TYPE??""),ht=Mi(xt),jt=String(gt.column_key??gt.COLUMN_KEY??"").toUpperCase()==="PRI",Tn=gt.column_default??gt.COLUMN_DEFAULT,Fe=Tn!=null;return{name:pt,type:Ri(gt.data_type??gt.DATA_TYPE,xt,ht),isPrimaryKey:jt,isUnique:ve.has(pt),isNullable:jt?!1:String(gt.is_nullable??gt.IS_NULLABLE).toUpperCase()==="YES",hasDefault:Fe,defaultValue:Fe?Qr(Tn):void 0,enumValues:ht,maxLength:xi(xt),references:ke.get(pt)}});return{table:h,columns:Ve,indexes:Ke}}function Mi(d){let h=d.match(/^enum\((.*)\)$/i);if(!h)return;return h[1].split(",").map((D)=>D.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((D)=>D.length>0)}function us(d,h){let D=new Map;for(let ke of h){if(ke.isPrimary)continue;let xe=D.get(ke.indexName)??{isUnique:ke.isUnique,isPrimary:ke.isPrimary,columns:[],where:ke.where};xe.columns.push(ke.column),D.set(ke.indexName,xe)}let E=[],V=new Set;for(let[ke,xe]of D){if(xe.columns.length===0)continue;if(xe.isUnique&&xe.columns.length===1)V.add(xe.columns[0]);E.push({name:ke,columns:xe.columns,type:xe.isUnique?"unique":"index",where:xe.where})}return{indexes:E,uniqueColumns:V}}async function cs(d,h={}){let D=d||e.dialect||"postgres",E=i(),ke=((h.tables?.length)?h.tables:await os(E,D)).filter((ve)=>ve!=="migrations"),xe=D==="postgres"?await ls(E):void 0,Ke=[];for(let ve of ke){let Ve;if(D==="sqlite")Ve=await Ni(E,ve);else if(D==="postgres")Ve=await Ai(E,ve,xe);else Ve=await Oi(E,ve);if(Ve.columns.length>0)Ke.push(Ve)}return{dialect:D,tables:Ke}}import{existsSync as jr,mkdirSync as Ci,writeFileSync as Ii}from"fs";import{dirname as ds,join as Wr}from"path";import fs from"process";function Pi(d){let h=d;while(h!==ds(h)){if(jr(Wr(h,"package.json")))return h;h=ds(h)}return fs.cwd()}async function le(d,h={}){let D=Pi(fs.cwd()),E=h.dir||Wr(D,"app/Models");if(!jr(E))Ci(E,{recursive:!0}),console.log(`-- Created models directory: ${E}`);let V=d.charAt(0).toUpperCase()+d.slice(1),ke=h.table||`${d.toLowerCase()}s`,xe=`${V}.ts`,Ke=Wr(E,xe);if(jr(Ke))throw console.error(`-- Model already exists: ${Ke}`),Error(`Model already exists: ${Ke}`);let Ve=h.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
264
264
  updated_at: { validation: { rule: v.date() } },`:"",gt=`import { v } from '@stacksjs/ts-validation'
265
265
  import { defineModel } from 'bun-query-builder'
266
266
 
@@ -280,22 +280,22 @@ ${Ve}
280
280
  })
281
281
 
282
282
  export default model
283
- `;Ii(Ke,gt),console.log(`-- \u2713 Created model: ${Ke}`),console.log(`-- Table: ${ke}`)}async function me(d,h={}){return b(d,h)}import{existsSync as ps,readFileSync as Li,unlinkSync as qi}from"fs";import{join as Ki}from"path";import{existsSync as vi}from"fs";import{dirname as ms,isAbsolute as _i,join as ys}from"path";import gs from"process";function Vr(d=gs.cwd()){let h=d;while(h!==ms(h)){if(vi(ys(h,"package.json")))return h;h=ms(h)}return gs.cwd()}function rr(d,h="database/migrations"){let D=h||"database/migrations";return _i(D)?D:ys(d??Vr(),D)}function Fi(d){let h=[],D="",E=null;for(let V=0;V<d.length;V++){let ke=d[V];if(E){if(D+=ke,ke===E)if(d[V+1]===E)D+=d[V+1],V++;else E=null;continue}if(ke==="'"||ke==='"'||ke==="`"){E=ke,D+=ke;continue}if(ke==="-"&&d[V+1]==="-"){let xe=d.indexOf(`
283
+ `;Ii(Ke,gt),console.log(`-- \u2713 Created model: ${Ke}`),console.log(`-- Table: ${ke}`)}async function me(d,h={}){return b(d,h)}import{existsSync as ps,readFileSync as qi,unlinkSync as Li}from"fs";import{join as Ki}from"path";import{existsSync as vi}from"fs";import{dirname as ms,isAbsolute as _i,join as ys}from"path";import gs from"process";function Vr(d=gs.cwd()){let h=d;while(h!==ms(h)){if(vi(ys(h,"package.json")))return h;h=ms(h)}return gs.cwd()}function rr(d,h="database/migrations"){let D=h||"database/migrations";return _i(D)?D:ys(d??Vr(),D)}function Fi(d){let h=[],D="",E=null;for(let V=0;V<d.length;V++){let ke=d[V];if(E){if(D+=ke,ke===E)if(d[V+1]===E)D+=d[V+1],V++;else E=null;continue}if(ke==="'"||ke==='"'||ke==="`"){E=ke,D+=ke;continue}if(ke==="-"&&d[V+1]==="-"){let xe=d.indexOf(`
284
284
  `,V);V=xe===-1?d.length:xe;continue}if(ke==="/"&&d[V+1]==="*"){let xe=d.indexOf("*/",V+2);V=xe===-1?d.length:xe+1;continue}if(ke===";"){if(D.trim())h.push(D.trim());D="";continue}D+=ke}if(D.trim())h.push(D.trim());return h}function Ui(d,h=e.dialect){let D=(ke)=>n(h)?`\`${ke}\``:`"${ke}"`,E=[],V=[];for(let ke of Fi(d)){let xe;if(xe=/^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?/i.exec(ke))E.push(`DROP TABLE IF EXISTS ${D(xe[1])}`);else if(xe=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+CONSTRAINT\s+["`']?(\w+)["`']?([\s\S]*)$/i.exec(ke))if(h==="sqlite")V.push(ke);else if(n(h)&&/\bFOREIGN\s+KEY\b/i.test(xe[3]??""))E.push(`ALTER TABLE ${D(xe[1])} DROP FOREIGN KEY ${D(xe[2])}`);else E.push(`ALTER TABLE ${D(xe[1])} DROP CONSTRAINT ${D(xe[2])}`);else if(xe=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+(?:COLUMN\s+["`']?(\w+)["`']?|["`'](\w+)["`']|(\w+))/i.exec(ke)){let Ke=xe[2]??xe[3]??xe[4];if(xe[4]&&/^(?:PRIMARY|UNIQUE|INDEX|KEY|FOREIGN|CHECK|FULLTEXT|SPATIAL)$/i.test(xe[4]))V.push(ke);else E.push(`ALTER TABLE ${D(xe[1])} DROP COLUMN ${D(Ke)}`)}else if(xe=/^CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?(?:\s+ON\s+["`']?(\w+)["`']?)?/i.exec(ke))E.push(n(h)&&xe[2]?`DROP INDEX ${D(xe[1])} ON ${D(xe[2])}`:`DROP INDEX IF EXISTS ${D(xe[1])}`);else V.push(ke)}return{down:E.reverse(),skipped:V}}async function he(d={}){let h=d.steps||1,D=d.reverseSchema!==!1;console.log("-- Rolling back migrations"),console.log(`-- Steps: ${h}`),console.log();try{let E=i(),V=[];try{V=await E.unsafe(`
285
285
  SELECT migration, executed_at
286
286
  FROM migrations
287
287
  ORDER BY executed_at DESC, migration DESC
288
- `)}catch(Ie){console.log("-- Migrations table not found. Nothing to rollback.",Ie);return}if(V.length===0){console.log("-- No migrations to rollback");return}let ke=V.slice(0,h);console.log(`-- Found ${V.length} executed migrations`),console.log(`-- Rolling back ${ke.length} migration(s):`),console.log();for(let Ie of ke)console.log(` - ${Ie.migration}`);console.log();let xe=rr(void 0,e.migrationDir),Ke=!1;for(let Ie of ke)try{let Ve=Ki(xe,Ie.migration);if(D&&ps(Ve)){let pt=Li(Ve,"utf8"),{down:xt,skipped:ht}=Ui(pt);for(let Jt of xt)await E.unsafe(Jt),console.log(`-- \u21A9 ${Jt}`),Ke=!0;if(ht.length>0)console.log(`-- \u26A0\uFE0F ${ht.length} statement(s) in ${Ie.migration} could not be auto-reversed (data/complex DDL) \u2014 reverse manually.`)}let gt=`DELETE FROM migrations WHERE migration = ${t(1)}`;if(await E.unsafe(gt,[Ie.migration]),console.log(`-- \u2713 Removed migration record: ${Ie.migration}`),d.deleteFiles&&ps(Ve))qi(Ve),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${Ie.migration}`)}catch(Ve){throw console.error(`-- \u2717 Failed to rollback migration ${Ie.migration}:`,Ve),Ve}if(console.log(),D)console.log(Ke?"-- \u2713 Reverse DDL executed for the rolled-back migration(s).":"-- \u26A0\uFE0F No reversible DDL found; only migration records were removed.");else console.log("-- \u26A0\uFE0F reverseSchema disabled: only migration records were removed.")}catch(E){throw console.error("-- Rollback failed:",E),E}}import{existsSync as Qi,readdirSync as ji}from"fs";async function I(){let d=e.dialect||"postgres",h=f(d),D=rr(void 0,e.migrationDir);if(console.log("-- Migration Status"),console.log(`-- Dialect: ${d}`),console.log(`-- SQL directory: ${D}`),console.log(),!Qi(D))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let V=ji(D).filter((ke)=>ke.endsWith(".sql")).sort();if(V.length===0)return console.log("-- No migration files found"),[];try{let ke=i(),xe=[];try{xe=await ke.unsafe(h.getExecutedMigrationsQuery())}catch(pt){console.log("-- Migrations table not found. All migrations are pending.",pt),console.log()}let Ke=new Map(xe.map((pt)=>[pt.migration,pt.executed_at])),Ie=V.map((pt)=>({file:pt,status:Ke.has(pt)?"executed":"pending",executedAt:Ke.get(pt)})),Ve=Ie.filter((pt)=>pt.status==="executed"),gt=Ie.filter((pt)=>pt.status==="pending");if(console.log(`-- Total migrations: ${V.length}`),console.log(`-- Executed: ${Ve.length}`),console.log(`-- Pending: ${gt.length}`),console.log(),Ve.length>0){console.log("\u2713 Executed Migrations:");for(let pt of Ve)console.log(` - ${pt.file} ${pt.executedAt?`(${new Date(pt.executedAt).toLocaleString()})`:""}`);console.log()}if(gt.length>0){console.log("\u25CB Pending Migrations:");for(let pt of gt)console.log(` - ${pt.file}`);console.log()}return Ie}catch(ke){throw console.error("-- Failed to get migration status:",ke),ke}}async function ge(){return I()}import{readdirSync as Wi}from"fs";import{extname as Jr,join as hs}from"path";import Vi from"process";async function L(d,h={}){let D=h.dir||hs(Vi.cwd(),"app/Models");try{let E=Wi(D),V=E.find((gt)=>gt.replace(Jr(gt),"").toLowerCase()===d.toLowerCase());if(!V){console.error(`Model "${d}" not found in ${D}`),console.log(`Available models: ${E.filter((gt)=>[".ts",".js"].includes(Jr(gt))).map((gt)=>gt.replace(Jr(gt),"")).join(", ")}`);return}let xe=await import(hs(D,V)),Ke=xe.default||xe[Object.keys(xe)[0]];if(!Ke||!Ke.name){console.error(`Invalid model file: ${V}`);return}let Ie={name:Ke.name,table:Ke.table||`${Ke.name.toLowerCase()}s`,primaryKey:Ke.primaryKey||"id",attributes:Ke.attributes||{},relations:Ke.relations,scopes:Ke.scopes,indexes:Ke.indexes,timestamps:Ke.timestamps!==!1,softDeletes:Ke.softDeletes===!0},Ve=[];if(Ke.beforeCreate)Ve.push("beforeCreate");if(Ke.afterCreate)Ve.push("afterCreate");if(Ke.beforeUpdate)Ve.push("beforeUpdate");if(Ke.afterUpdate)Ve.push("afterUpdate");if(Ke.beforeDelete)Ve.push("beforeDelete");if(Ke.afterDelete)Ve.push("afterDelete");if(Ve.length>0)Ie.hooks=Ve;if(h.json)return console.log(JSON.stringify(Ie,null,2)),Ie;console.log(`
289
- \uD83D\uDCE6 Model: ${Ie.name}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`Table: ${Ie.table}`),console.log(`Primary Key: ${Ie.primaryKey}`),console.log(`Timestamps: ${Ie.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${Ie.softDeletes?"\u2713":"\u2717"}`),console.log(`
290
- \uD83D\uDCCB Attributes (${Object.keys(Ie.attributes).length}):`);for(let[gt,pt]of Object.entries(Ie.attributes)){let xt=pt.type||"string",ht=pt.required?"(required)":"",Jt=pt.unique?"(unique)":"",jt=pt.default!==void 0?`= ${JSON.stringify(pt.default)}`:"";console.log(` \u2022 ${gt}: ${xt} ${ht} ${Jt} ${jt}`.trim())}if(Ie.relations&&Object.keys(Ie.relations).length>0){console.log(`
291
- \uD83D\uDD17 Relations (${Object.keys(Ie.relations).length}):`);for(let[gt,pt]of Object.entries(Ie.relations)){let xt=pt.type||"unknown",ht=pt.model||pt.table||"unknown";console.log(` \u2022 ${gt}: ${xt} \u2192 ${ht}`)}}if(Ie.scopes&&Object.keys(Ie.scopes).length>0){console.log(`
292
- \uD83D\uDD0D Scopes (${Object.keys(Ie.scopes).length}):`);for(let gt of Object.keys(Ie.scopes))console.log(` \u2022 ${gt}()`)}if(Ie.hooks&&Ie.hooks.length>0){console.log(`
293
- \uD83E\uDE9D Hooks (${Ie.hooks.length}):`);for(let gt of Ie.hooks)console.log(` \u2022 ${gt}`)}if(Ie.indexes&&Ie.indexes.length>0){console.log(`
294
- \uD83D\uDCC7 Indexes (${Ie.indexes.length}):`);for(let gt of Ie.indexes){let pt=Array.isArray(gt.columns)?gt.columns.join(", "):gt.columns,xt=gt.unique?"(unique)":"";console.log(` \u2022 ${gt.name||"unnamed"}: [${pt}] ${xt}`.trim())}}return console.log(),Ie}catch(E){throw console.error(`Error loading model "${d}":`,E.message),E}}async function pe(){let h=await i().ping();return console.log(h?"OK":"NOT READY"),h}import{readdirSync as Ji,readFileSync as Ts,statSync as Hi}from"fs";import{extname as bs,join as Yi}from"path";async function K(d,h={}){let D=[];try{let E=Hi(d),V=[];if(E.isDirectory())V=Ji(d).filter((Ie)=>bs(Ie)===".sql").map((Ie)=>Yi(d,Ie));else if(E.isFile()&&bs(d)===".sql")V=[d];else return console.error("Path must be a .sql file or directory containing .sql files"),D;if(V.length===0)return console.log("No .sql files found"),D;if(h.verbose)console.log(`Analyzing ${V.length} SQL file(s)...
295
- `);for(let Ke of V)try{let Ie=Ts(Ke,"utf8").trim();if(!Ie){if(h.verbose)console.log(`\u2298 ${Ke}: empty file`);continue}if(h.verbose)console.log(`\uD83D\uDCC4 ${Ke}`),console.log(` Query: ${Ie.substring(0,60)}${Ie.length>60?"...":""}`);let Ve=await r`EXPLAIN ${r.unsafe(Ie)}`;if(D.push({file:Ke,query:Ie,plan:Array.isArray(Ve)?Ve:[Ve]}),h.verbose&&!h.json){if(console.log(" Plan:"),Array.isArray(Ve))for(let gt of Ve)if(typeof gt==="string")console.log(` ${gt}`);else if(gt["QUERY PLAN"])console.log(` ${gt["QUERY PLAN"]}`);else if(gt.plan)console.log(` ${JSON.stringify(gt.plan)}`);else console.log(` ${JSON.stringify(gt)}`);console.log()}}catch(Ie){if(D.push({file:Ke,query:Ts(Ke,"utf8").trim(),plan:[],error:Ie.message}),h.verbose)console.log(` \u2717 Error: ${Ie.message}
296
- `)}let ke=D.filter((Ke)=>!Ke.error).length,xe=D.filter((Ke)=>Ke.error).length;if(h.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: ${ke} successful, ${xe} failed`);if(h.json)console.log(JSON.stringify(D,null,2));return D}catch(E){throw console.error("Error explaining queries:",E.message),E}}import{writeFileSync as Gi}from"fs";import{join as zi}from"path";import Xi from"process";async function F(d={}){let h=d.dir||zi(Xi.cwd(),"app/Models"),D=d.format||"mermaid";try{let E=await u({modelsDir:h});if(!E||Object.keys(E).length===0)return console.error("No models found"),"";let V="";if(D==="mermaid")V=Zi(E);else if(D==="dot")V=ea(E);else return console.error(`Unsupported format: ${D}`),"";if(d.output)Gi(d.output,V,"utf8"),console.log(`\u2713 Diagram written to: ${d.output}`);else console.log(V);return V}catch(E){throw console.error("Error generating diagram:",E.message),E}}function Zi(d){let h=["erDiagram"];for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.attributes||{};h.push(` ${V} {`);for(let[xe,Ke]of Object.entries(ke)){let Ie=Ke.type||"string",Ve=E.primaryKey===xe?"PK":"",gt=Ke.unique?"UK":"",pt=[Ve,gt].filter(Boolean).join(","),xt=pt?` "${pt}"`:"";h.push(` ${Ie} ${xe}${xt}`)}h.push(" }")}for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.relations||{};for(let[xe,Ke]of Object.entries(ke)){let{type:Ie,model:Ve}=Ke,gt=d[Ve]?.table||`${Ve?.toLowerCase()}s`||"unknown",pt="";if(Ie==="hasOne")pt="||--||";else if(Ie==="hasMany")pt="||--o{";else if(Ie==="belongsTo")pt="}o--||";else if(Ie==="belongsToMany"||Ie==="manyToMany")pt="}o--o{";else pt="||--||";h.push(` ${V} ${pt} ${gt} : "${xe}"`)}}return h.join(`
297
- `)}function ea(d){let h=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.attributes||{},xe=[];for(let[Ie,Ve]of Object.entries(ke)){let gt=Ve.type||"string",pt=E.primaryKey===Ie?" (PK)":"",xt=Ve.unique?" (UK)":"";xe.push(`${Ie}: ${gt}${pt}${xt}`)}let Ke=`${xe.join("\\l")}\\l`;h.push(` ${V} [label="{${V}|${Ke}}"];`)}h.push("");for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.relations||{};for(let[xe,Ke]of Object.entries(ke)){let{type:Ie,model:Ve}=Ke,gt=d[Ve]?.table||`${Ve?.toLowerCase()}s`||"unknown",pt="";if(Ie==="hasOne")pt="arrowhead=none, arrowtail=normal";else if(Ie==="hasMany")pt="arrowhead=crow, arrowtail=none";else if(Ie==="belongsTo")pt="arrowhead=normal, arrowtail=none";else if(Ie==="belongsToMany"||Ie==="manyToMany")pt="arrowhead=crow, arrowtail=crow";h.push(` ${V} -> ${gt} [label="${xe}", ${pt}];`)}}return h.push("}"),h.join(`
298
- `)}import{existsSync as Pr,mkdirSync as ta,readdirSync as na,writeFileSync as ra}from"fs";import{dirname as Ss,join as ir}from"path";import Er from"process";function vr(d){let h=d;while(h!==Ss(h)){if(Pr(ir(h,"package.json")))return h;h=Ss(h)}return Er.cwd()}async function ws(d){if(!Pr(d))return console.log(`-- Seeders directory not found: ${d}`),[];let D=na(d).sort((V,ke)=>V.localeCompare(ke)).filter((V)=>(V.endsWith(".ts")||V.endsWith(".js"))&&V!=="index.ts"&&V!=="index.js"),E=[];for(let V of D){let ke=ir(d,V);try{let xe=await import(ke),Ke=xe.default||xe[Object.keys(xe)[0]];if(Ke&&typeof Ke==="function"){let Ie=new Ke;if(Ie&&typeof Ie.run==="function")E.push({name:V.replace(/\.(ts|js)$/,""),className:String(Ke.name||""),instance:Ie})}}catch(xe){console.error(`-- Failed to load seeder ${V}:`,xe)}}return E.sort((V,ke)=>V.instance.order-ke.instance.order),E}async function R(d={}){let h=vr(Er.cwd()),D=d.seedersDir||ir(h,"database/seeders"),E=d.verbose??!0;if(E)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${D}`);let V=await ws(D);if(V.length===0){console.log("-- No seeders found");return}if(E)console.log(`-- Found ${V.length} seeder(s)`);let ke=i();for(let{name:xe,instance:Ke}of V)try{if(E)console.log(`-- Seeding: ${xe}`);if(await Ke.run(ke),E)console.log(`-- \u2713 Seeded: ${xe}`)}catch(Ie){throw console.error(`-- \u2717 Failed to seed ${xe}:`,Ie),Ie}if(E)console.log("-- All seeders completed successfully")}async function j(d,h={}){let D=vr(Er.cwd()),E=ir(D,"database/seeders"),V=h.verbose??!0;if(V)console.log(`-- Running seeder: ${d}`);let ke=await ws(E),xe=ke.find((Ie)=>Ie.className===d)??ke.find((Ie)=>Ie.name===d);if(!xe){let Ie=ke.map((Ve)=>Ve.className||Ve.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${d}. Available: ${Ie}`),Error(`Seeder not found: ${d}. Available: ${Ie}`)}let Ke=i();try{if(await xe.instance.run(Ke),V)console.log(`-- \u2713 Seeder completed: ${d}`)}catch(Ie){throw console.error(`-- \u2717 Seeder failed: ${d}`,Ie),Ie}}async function ye(d){let h=vr(Er.cwd()),D=ir(h,"database/seeders");if(!Pr(D))ta(D,{recursive:!0}),console.log(`-- Created seeders directory: ${D}`);let V=`${d.replace(/Seeder$/i,"")}Seeder`,ke=`${V}.ts`,xe=ir(D,ke);if(Pr(xe))throw console.error(`-- Seeder already exists: ${xe}`),Error(`Seeder already exists: ${xe}`);let Ke=`import type { QueryBuilder } from 'bun-query-builder'
288
+ `)}catch(ve){console.log("-- Migrations table not found. Nothing to rollback.",ve);return}if(V.length===0){console.log("-- No migrations to rollback");return}let ke=V.slice(0,h);console.log(`-- Found ${V.length} executed migrations`),console.log(`-- Rolling back ${ke.length} migration(s):`),console.log();for(let ve of ke)console.log(` - ${ve.migration}`);console.log();let xe=rr(void 0,e.migrationDir),Ke=!1;for(let ve of ke)try{let Ve=Ki(xe,ve.migration);if(D&&ps(Ve)){let pt=qi(Ve,"utf8"),{down:xt,skipped:ht}=Ui(pt);for(let Jt of xt)await E.unsafe(Jt),console.log(`-- \u21A9 ${Jt}`),Ke=!0;if(ht.length>0)console.log(`-- \u26A0\uFE0F ${ht.length} statement(s) in ${ve.migration} could not be auto-reversed (data/complex DDL) \u2014 reverse manually.`)}let gt=`DELETE FROM migrations WHERE migration = ${t(1)}`;if(await E.unsafe(gt,[ve.migration]),console.log(`-- \u2713 Removed migration record: ${ve.migration}`),d.deleteFiles&&ps(Ve))Li(Ve),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${ve.migration}`)}catch(Ve){throw console.error(`-- \u2717 Failed to rollback migration ${ve.migration}:`,Ve),Ve}if(console.log(),D)console.log(Ke?"-- \u2713 Reverse DDL executed for the rolled-back migration(s).":"-- \u26A0\uFE0F No reversible DDL found; only migration records were removed.");else console.log("-- \u26A0\uFE0F reverseSchema disabled: only migration records were removed.")}catch(E){throw console.error("-- Rollback failed:",E),E}}import{existsSync as Qi,readdirSync as ji}from"fs";async function _(){let d=e.dialect||"postgres",h=f(d),D=rr(void 0,e.migrationDir);if(console.log("-- Migration Status"),console.log(`-- Dialect: ${d}`),console.log(`-- SQL directory: ${D}`),console.log(),!Qi(D))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let V=ji(D).filter((ke)=>ke.endsWith(".sql")).sort();if(V.length===0)return console.log("-- No migration files found"),[];try{let ke=i(),xe=[];try{xe=await ke.unsafe(h.getExecutedMigrationsQuery())}catch(pt){console.log("-- Migrations table not found. All migrations are pending.",pt),console.log()}let Ke=new Map(xe.map((pt)=>[pt.migration,pt.executed_at])),ve=V.map((pt)=>({file:pt,status:Ke.has(pt)?"executed":"pending",executedAt:Ke.get(pt)})),Ve=ve.filter((pt)=>pt.status==="executed"),gt=ve.filter((pt)=>pt.status==="pending");if(console.log(`-- Total migrations: ${V.length}`),console.log(`-- Executed: ${Ve.length}`),console.log(`-- Pending: ${gt.length}`),console.log(),Ve.length>0){console.log("\u2713 Executed Migrations:");for(let pt of Ve)console.log(` - ${pt.file} ${pt.executedAt?`(${new Date(pt.executedAt).toLocaleString()})`:""}`);console.log()}if(gt.length>0){console.log("\u25CB Pending Migrations:");for(let pt of gt)console.log(` - ${pt.file}`);console.log()}return ve}catch(ke){throw console.error("-- Failed to get migration status:",ke),ke}}async function ge(){return _()}import{readdirSync as Wi}from"fs";import{extname as Jr,join as hs}from"path";import Vi from"process";async function L(d,h={}){let D=h.dir||hs(Vi.cwd(),"app/Models");try{let E=Wi(D),V=E.find((gt)=>gt.replace(Jr(gt),"").toLowerCase()===d.toLowerCase());if(!V){console.error(`Model "${d}" not found in ${D}`),console.log(`Available models: ${E.filter((gt)=>[".ts",".js"].includes(Jr(gt))).map((gt)=>gt.replace(Jr(gt),"")).join(", ")}`);return}let xe=await import(hs(D,V)),Ke=xe.default||xe[Object.keys(xe)[0]];if(!Ke||!Ke.name){console.error(`Invalid model file: ${V}`);return}let ve={name:Ke.name,table:Ke.table||`${Ke.name.toLowerCase()}s`,primaryKey:Ke.primaryKey||"id",attributes:Ke.attributes||{},relations:Ke.relations,scopes:Ke.scopes,indexes:Ke.indexes,timestamps:Ke.timestamps!==!1,softDeletes:Ke.softDeletes===!0},Ve=[];if(Ke.beforeCreate)Ve.push("beforeCreate");if(Ke.afterCreate)Ve.push("afterCreate");if(Ke.beforeUpdate)Ve.push("beforeUpdate");if(Ke.afterUpdate)Ve.push("afterUpdate");if(Ke.beforeDelete)Ve.push("beforeDelete");if(Ke.afterDelete)Ve.push("afterDelete");if(Ve.length>0)ve.hooks=Ve;if(h.json)return console.log(JSON.stringify(ve,null,2)),ve;console.log(`
289
+ \uD83D\uDCE6 Model: ${ve.name}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`Table: ${ve.table}`),console.log(`Primary Key: ${ve.primaryKey}`),console.log(`Timestamps: ${ve.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${ve.softDeletes?"\u2713":"\u2717"}`),console.log(`
290
+ \uD83D\uDCCB Attributes (${Object.keys(ve.attributes).length}):`);for(let[gt,pt]of Object.entries(ve.attributes)){let xt=pt.type||"string",ht=pt.required?"(required)":"",Jt=pt.unique?"(unique)":"",jt=pt.default!==void 0?`= ${JSON.stringify(pt.default)}`:"";console.log(` \u2022 ${gt}: ${xt} ${ht} ${Jt} ${jt}`.trim())}if(ve.relations&&Object.keys(ve.relations).length>0){console.log(`
291
+ \uD83D\uDD17 Relations (${Object.keys(ve.relations).length}):`);for(let[gt,pt]of Object.entries(ve.relations)){let xt=pt.type||"unknown",ht=pt.model||pt.table||"unknown";console.log(` \u2022 ${gt}: ${xt} \u2192 ${ht}`)}}if(ve.scopes&&Object.keys(ve.scopes).length>0){console.log(`
292
+ \uD83D\uDD0D Scopes (${Object.keys(ve.scopes).length}):`);for(let gt of Object.keys(ve.scopes))console.log(` \u2022 ${gt}()`)}if(ve.hooks&&ve.hooks.length>0){console.log(`
293
+ \uD83E\uDE9D Hooks (${ve.hooks.length}):`);for(let gt of ve.hooks)console.log(` \u2022 ${gt}`)}if(ve.indexes&&ve.indexes.length>0){console.log(`
294
+ \uD83D\uDCC7 Indexes (${ve.indexes.length}):`);for(let gt of ve.indexes){let pt=Array.isArray(gt.columns)?gt.columns.join(", "):gt.columns,xt=gt.unique?"(unique)":"";console.log(` \u2022 ${gt.name||"unnamed"}: [${pt}] ${xt}`.trim())}}return console.log(),ve}catch(E){throw console.error(`Error loading model "${d}":`,E.message),E}}async function pe(){let h=await i().ping();return console.log(h?"OK":"NOT READY"),h}import{readdirSync as Ji,readFileSync as Ts,statSync as Hi}from"fs";import{extname as bs,join as Yi}from"path";async function K(d,h={}){let D=[];try{let E=Hi(d),V=[];if(E.isDirectory())V=Ji(d).filter((ve)=>bs(ve)===".sql").map((ve)=>Yi(d,ve));else if(E.isFile()&&bs(d)===".sql")V=[d];else return console.error("Path must be a .sql file or directory containing .sql files"),D;if(V.length===0)return console.log("No .sql files found"),D;if(h.verbose)console.log(`Analyzing ${V.length} SQL file(s)...
295
+ `);for(let Ke of V)try{let ve=Ts(Ke,"utf8").trim();if(!ve){if(h.verbose)console.log(`\u2298 ${Ke}: empty file`);continue}if(h.verbose)console.log(`\uD83D\uDCC4 ${Ke}`),console.log(` Query: ${ve.substring(0,60)}${ve.length>60?"...":""}`);let Ve=await r`EXPLAIN ${r.unsafe(ve)}`;if(D.push({file:Ke,query:ve,plan:Array.isArray(Ve)?Ve:[Ve]}),h.verbose&&!h.json){if(console.log(" Plan:"),Array.isArray(Ve))for(let gt of Ve)if(typeof gt==="string")console.log(` ${gt}`);else if(gt["QUERY PLAN"])console.log(` ${gt["QUERY PLAN"]}`);else if(gt.plan)console.log(` ${JSON.stringify(gt.plan)}`);else console.log(` ${JSON.stringify(gt)}`);console.log()}}catch(ve){if(D.push({file:Ke,query:Ts(Ke,"utf8").trim(),plan:[],error:ve.message}),h.verbose)console.log(` \u2717 Error: ${ve.message}
296
+ `)}let ke=D.filter((Ke)=>!Ke.error).length,xe=D.filter((Ke)=>Ke.error).length;if(h.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: ${ke} successful, ${xe} failed`);if(h.json)console.log(JSON.stringify(D,null,2));return D}catch(E){throw console.error("Error explaining queries:",E.message),E}}import{writeFileSync as Gi}from"fs";import{join as zi}from"path";import Xi from"process";async function F(d={}){let h=d.dir||zi(Xi.cwd(),"app/Models"),D=d.format||"mermaid";try{let E=await u({modelsDir:h});if(!E||Object.keys(E).length===0)return console.error("No models found"),"";let V="";if(D==="mermaid")V=Zi(E);else if(D==="dot")V=ea(E);else return console.error(`Unsupported format: ${D}`),"";if(d.output)Gi(d.output,V,"utf8"),console.log(`\u2713 Diagram written to: ${d.output}`);else console.log(V);return V}catch(E){throw console.error("Error generating diagram:",E.message),E}}function Zi(d){let h=["erDiagram"];for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.attributes||{};h.push(` ${V} {`);for(let[xe,Ke]of Object.entries(ke)){let ve=Ke.type||"string",Ve=E.primaryKey===xe?"PK":"",gt=Ke.unique?"UK":"",pt=[Ve,gt].filter(Boolean).join(","),xt=pt?` "${pt}"`:"";h.push(` ${ve} ${xe}${xt}`)}h.push(" }")}for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.relations||{};for(let[xe,Ke]of Object.entries(ke)){let{type:ve,model:Ve}=Ke,gt=d[Ve]?.table||`${Ve?.toLowerCase()}s`||"unknown",pt="";if(ve==="hasOne")pt="||--||";else if(ve==="hasMany")pt="||--o{";else if(ve==="belongsTo")pt="}o--||";else if(ve==="belongsToMany"||ve==="manyToMany")pt="}o--o{";else pt="||--||";h.push(` ${V} ${pt} ${gt} : "${xe}"`)}}return h.join(`
297
+ `)}function ea(d){let h=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.attributes||{},xe=[];for(let[ve,Ve]of Object.entries(ke)){let gt=Ve.type||"string",pt=E.primaryKey===ve?" (PK)":"",xt=Ve.unique?" (UK)":"";xe.push(`${ve}: ${gt}${pt}${xt}`)}let Ke=`${xe.join("\\l")}\\l`;h.push(` ${V} [label="{${V}|${Ke}}"];`)}h.push("");for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,ke=E.relations||{};for(let[xe,Ke]of Object.entries(ke)){let{type:ve,model:Ve}=Ke,gt=d[Ve]?.table||`${Ve?.toLowerCase()}s`||"unknown",pt="";if(ve==="hasOne")pt="arrowhead=none, arrowtail=normal";else if(ve==="hasMany")pt="arrowhead=crow, arrowtail=none";else if(ve==="belongsTo")pt="arrowhead=normal, arrowtail=none";else if(ve==="belongsToMany"||ve==="manyToMany")pt="arrowhead=crow, arrowtail=crow";h.push(` ${V} -> ${gt} [label="${xe}", ${pt}];`)}}return h.push("}"),h.join(`
298
+ `)}import{existsSync as Pr,mkdirSync as ta,readdirSync as na,writeFileSync as ra}from"fs";import{dirname as Ss,join as ir}from"path";import Er from"process";function vr(d){let h=d;while(h!==Ss(h)){if(Pr(ir(h,"package.json")))return h;h=Ss(h)}return Er.cwd()}async function ws(d){if(!Pr(d))return console.log(`-- Seeders directory not found: ${d}`),[];let D=na(d).sort((V,ke)=>V.localeCompare(ke)).filter((V)=>(V.endsWith(".ts")||V.endsWith(".js"))&&V!=="index.ts"&&V!=="index.js"),E=[];for(let V of D){let ke=ir(d,V);try{let xe=await import(ke),Ke=xe.default||xe[Object.keys(xe)[0]];if(Ke&&typeof Ke==="function"){let ve=new Ke;if(ve&&typeof ve.run==="function")E.push({name:V.replace(/\.(ts|js)$/,""),className:String(Ke.name||""),instance:ve})}}catch(xe){console.error(`-- Failed to load seeder ${V}:`,xe)}}return E.sort((V,ke)=>V.instance.order-ke.instance.order),E}async function R(d={}){let h=vr(Er.cwd()),D=d.seedersDir||ir(h,"database/seeders"),E=d.verbose??!0;if(E)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${D}`);let V=await ws(D);if(V.length===0){console.log("-- No seeders found");return}if(E)console.log(`-- Found ${V.length} seeder(s)`);let ke=i();for(let{name:xe,instance:Ke}of V)try{if(E)console.log(`-- Seeding: ${xe}`);if(await Ke.run(ke),E)console.log(`-- \u2713 Seeded: ${xe}`)}catch(ve){throw console.error(`-- \u2717 Failed to seed ${xe}:`,ve),ve}if(E)console.log("-- All seeders completed successfully")}async function j(d,h={}){let D=vr(Er.cwd()),E=ir(D,"database/seeders"),V=h.verbose??!0;if(V)console.log(`-- Running seeder: ${d}`);let ke=await ws(E),xe=ke.find((ve)=>ve.className===d)??ke.find((ve)=>ve.name===d);if(!xe){let ve=ke.map((Ve)=>Ve.className||Ve.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${d}. Available: ${ve}`),Error(`Seeder not found: ${d}. Available: ${ve}`)}let Ke=i();try{if(await xe.instance.run(Ke),V)console.log(`-- \u2713 Seeder completed: ${d}`)}catch(ve){throw console.error(`-- \u2717 Seeder failed: ${d}`,ve),ve}}async function ye(d){let h=vr(Er.cwd()),D=ir(h,"database/seeders");if(!Pr(D))ta(D,{recursive:!0}),console.log(`-- Created seeders directory: ${D}`);let V=`${d.replace(/Seeder$/i,"")}Seeder`,ke=`${V}.ts`,xe=ir(D,ke);if(Pr(xe))throw console.error(`-- Seeder already exists: ${xe}`),Error(`Seeder already exists: ${xe}`);let Ke=`import type { QueryBuilder } from 'bun-query-builder'
299
299
  import { Seeder } from 'bun-query-builder'
300
300
  import { faker } from '@stacksjs/ts-faker'
301
301
 
@@ -340,7 +340,7 @@ export default class ${V} extends Seeder {
340
340
  return 100
341
341
  }
342
342
  }
343
- `;ra(xe,Ke),console.log(`-- \u2713 Created seeder: ${xe}`)}async function be(d={}){let h=vr(Er.cwd()),D=d.modelsDir||ir(h,"app/Models"),E=d.seedersDir||ir(h,"database/seeders"),V=d.verbose??!0;try{let{resetDatabase:ke,generateMigration:xe,executeMigration:Ke}=await import("./chunk-1fdcm72e.js");if(V)console.log("-- Refreshing database...");if(await ke(D),V)console.log("-- Running migrations...");if(await xe(D,{full:!0}),await Ke(),V)console.log("-- Running seeders...");if(await R({seedersDir:E,verbose:V}),V)console.log("-- \u2713 Database refreshed successfully")}catch(ke){throw console.error("-- \u2717 Database refresh failed:",ke),ke}}function Te(d,h,D={}){let E=u({modelsDir:d}),V=$e(E);if(e.debug)e.debug.captureText=!0;let ke=i({schema:V}),xe=ke.selectFrom(h).limit(Number(D.limit||10)).toText?.()??"";return console.log(xe||"[query]"),{sql:xe,qb:ke,schema:V}}async function we(d,h={}){let D=i(),E=h.params?JSON.parse(h.params):void 0,V=await D.unsafe(d,E);return console.log(JSON.stringify(V)),V}import{existsSync as sa}from"fs";import{dirname as Ds,join as Es}from"path";import $s from"process";function ia(d){let h=d;while(h!==Ds(h)){if(sa(Es(h,"package.json")))return h;h=Ds(h)}return $s.cwd()}async function q(d){if(!d)d=Es(ia($s.cwd()),"app/Models");let h=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${d}`),console.log(`-- Dialect: ${h}`),console.log();let D=[];try{let E=await u({modelsDir:d}),V=W(E,{dialect:h}),ke=i(),xe=[];if(h==="sqlite")xe=(await ke.unsafe(`
343
+ `;ra(xe,Ke),console.log(`-- \u2713 Created seeder: ${xe}`)}async function be(d={}){let h=vr(Er.cwd()),D=d.modelsDir||ir(h,"app/Models"),E=d.seedersDir||ir(h,"database/seeders"),V=d.verbose??!0;try{let{resetDatabase:ke,generateMigration:xe,executeMigration:Ke}=await import("./chunk-adc2hmcg.js");if(V)console.log("-- Refreshing database...");if(await ke(D),V)console.log("-- Running migrations...");if(await xe(D,{full:!0}),await Ke(),V)console.log("-- Running seeders...");if(await R({seedersDir:E,verbose:V}),V)console.log("-- \u2713 Database refreshed successfully")}catch(ke){throw console.error("-- \u2717 Database refresh failed:",ke),ke}}function Te(d,h,D={}){let E=u({modelsDir:d}),V=$e(E);if(e.debug)e.debug.captureText=!0;let ke=i({schema:V}),xe=ke.selectFrom(h).limit(Number(D.limit||10)).toText?.()??"";return console.log(xe||"[query]"),{sql:xe,qb:ke,schema:V}}async function we(d,h={}){let D=i(),E=h.params?JSON.parse(h.params):void 0,V=await D.unsafe(d,E);return console.log(JSON.stringify(V)),V}import{existsSync as sa}from"fs";import{dirname as Ds,join as Es}from"path";import $s from"process";function ia(d){let h=d;while(h!==Ds(h)){if(sa(Es(h,"package.json")))return h;h=Ds(h)}return $s.cwd()}async function q(d){if(!d)d=Es(ia($s.cwd()),"app/Models");let h=e.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${d}`),console.log(`-- Dialect: ${h}`),console.log();let D=[];try{let E=await u({modelsDir:d}),V=W(E,{dialect:h}),ke=i(),xe=[];if(h==="sqlite")xe=(await ke.unsafe(`
344
344
  SELECT name FROM sqlite_master
345
345
  WHERE type = 'table'
346
346
  AND name NOT LIKE 'sqlite_%'
@@ -366,18 +366,18 @@ export default class ${V} extends Seeder {
366
366
  FROM information_schema.columns
367
367
  WHERE table_name = ?
368
368
  AND table_schema = DATABASE()
369
- `,[Ve.table])).map((Jt)=>({name:Jt.column_name,type:Jt.data_type.toLowerCase()}));let pt=gt.map((ht)=>ht.name),xt=Ve.columns.map((ht)=>ht.name);for(let ht of Ve.columns)if(!pt.includes(ht.name))D.push({type:"missing_column",severity:"error",table:Ve.table,column:ht.name,expected:ht.type,message:`Column '${Ve.table}.${ht.name}' defined in model but not found in database`});for(let ht of gt)if(!xt.includes(ht.name))D.push({type:"extra_column",severity:"warning",table:Ve.table,column:ht.name,actual:ht.type,message:`Column '${Ve.table}.${ht.name}' exists in database but not defined in model`});for(let ht of Ve.columns){let Jt=gt.find((jt)=>jt.name===ht.name);if(Jt){let jt=(Ue)=>Ue.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),Tn=jt(ht.type),Fe=jt(Jt.type);if(Tn!==Fe)D.push({type:"type_mismatch",severity:"warning",table:Ve.table,column:ht.name,expected:ht.type,actual:Jt.type,message:`Column '${Ve.table}.${ht.name}' type mismatch: expected '${ht.type}', found '${Jt.type}'`})}}}let Ie=D.filter((Ve)=>Ve.severity==="error").length===0;if(Ie&&D.length===0)console.log("\u2713 Schema is valid - no issues found"),console.log();else{console.log(`-- Found ${D.length} issue(s)`),console.log();let Ve=D.filter((pt)=>pt.severity==="error"),gt=D.filter((pt)=>pt.severity==="warning");if(Ve.length>0){console.log(`\u2717 Errors (${Ve.length}):`);for(let pt of Ve)console.log(` - ${pt.message}`);console.log()}if(gt.length>0){console.log(`\u26A0 Warnings (${gt.length}):`);for(let pt of gt)console.log(` - ${pt.message}`);console.log()}if(!Ie)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:Ie,issues:D}}catch(E){throw console.error("-- Schema validation failed:",E),E}}async function Se(d){return q(d)}async function De(d={}){let h=Number(d.attempts||10),D=Number(d.delay||100),E=i();try{return await E.waitForReady({attempts:h,delayMs:D}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class T{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(d){this.driver=c(d.config),this.client=d.client,this.tableName=d.config.tableName??""}table(d){return this.tableName=d,this}index(d){return this.indexName=d,this}entity(d){return this.entityType=d,this}whereKey(d,h,D){return this.keyConditions.push({attribute:d,operator:h,value:D}),this}wherePartitionKey(d,h){return this.whereKey(d,"=",h)}whereSortKey(d,h){return this.whereKey(d,"=",h)}whereSortKeyBeginsWith(d,h){return this.keyConditions.push({attribute:d,operator:"begins_with",value:h}),this}whereSortKeyBetween(d,h,D){return this.keyConditions.push({attribute:d,operator:"BETWEEN",values:[h,D]}),this}where(d,h,D){return this.filterConditions.push({attribute:d,operator:h,value:D}),this}whereEquals(d,h){return this.where(d,"=",h)}whereLessThan(d,h){return this.where(d,"<",h)}whereLessThanOrEqual(d,h){return this.where(d,"<=",h)}whereGreaterThan(d,h){return this.where(d,">",h)}whereGreaterThanOrEqual(d,h){return this.where(d,">=",h)}whereBetween(d,h,D){return this.filterConditions.push({attribute:d,operator:"BETWEEN",values:[h,D]}),this}whereBeginsWith(d,h){return this.filterConditions.push({attribute:d,operator:"begins_with",value:h}),this}whereContains(d,h){return this.where(d,"contains",h)}whereExists(d){return this.where(d,"attribute_exists")}whereNotExists(d){return this.where(d,"attribute_not_exists")}whereIn(d,h){return this.filterConditions.push({attribute:d,operator:"IN",values:h}),this}select(...d){return this.projectionAttrs.push(...d),this}limit(d){return this.limitValue=d,this}ascending(){return this.scanForward=!0,this}descending(){return this.scanForward=!1,this}consistentRead(d=!0){return this.consistentReadValue=d,this}startFrom(d){return this.startKey=d,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 d=this.buildQueryParams(),h={TableName:d.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(d.indexName)h.IndexName=d.indexName;let D=0;if(d.keyConditions.length>0){let E=[];for(let V of d.keyConditions){let ke=`#key${D}`;if(h.ExpressionAttributeNames[ke]=V.attribute,V.operator==="begins_with"){let xe=`:keyval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`begins_with(${ke}, ${xe})`)}else if(V.operator==="BETWEEN"){let xe=`:keyval${D}a`,Ke=`:keyval${D}b`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Ke]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${ke} BETWEEN ${xe} AND ${Ke}`)}else{let xe=`:keyval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${ke} ${V.operator} ${xe}`)}D++}h.KeyConditionExpression=E.join(" AND ")}if(d.filterConditions&&d.filterConditions.length>0){let E=[];for(let V of d.filterConditions){let ke=`#flt${D}`;if(h.ExpressionAttributeNames[ke]=V.attribute,V.operator==="attribute_exists")E.push(`attribute_exists(${ke})`);else if(V.operator==="attribute_not_exists")E.push(`attribute_not_exists(${ke})`);else if(V.operator==="begins_with"||V.operator==="contains"){let xe=`:fltval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${V.operator}(${ke}, ${xe})`)}else if(V.operator==="BETWEEN"){let xe=`:fltval${D}a`,Ke=`:fltval${D}b`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Ke]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${ke} BETWEEN ${xe} AND ${Ke}`)}else if(V.operator==="IN"){let xe=(V.values??[]).map((Ke,Ie)=>`:fltval${D}_${Ie}`);V.values?.forEach((Ke,Ie)=>{h.ExpressionAttributeValues[`:fltval${D}_${Ie}`]=this.driver.marshall({v:Ke}).v}),E.push(`${ke} IN (${xe.join(", ")})`)}else{let xe=`:fltval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${ke} ${V.operator} ${xe}`)}D++}h.FilterExpression=E.join(" AND ")}if(d.projectionAttributes&&d.projectionAttributes.length>0){let E=[];for(let V of d.projectionAttributes){let ke=`#proj${D}`;h.ExpressionAttributeNames[ke]=V,E.push(ke),D++}h.ProjectionExpression=E.join(", ")}if(d.limit!==void 0)h.Limit=d.limit;if(d.scanIndexForward!==void 0)h.ScanIndexForward=d.scanIndexForward;if(d.exclusiveStartKey)h.ExclusiveStartKey=this.driver.marshall(d.exclusiveStartKey);if(d.consistentRead)h.ConsistentRead=d.consistentRead;if(Object.keys(h.ExpressionAttributeNames).length===0)delete h.ExpressionAttributeNames;if(Object.keys(h.ExpressionAttributeValues).length===0)delete h.ExpressionAttributeValues;return h}toScanRequest(){let d=this.buildScanParams(),h={TableName:d.tableName};if(d.indexName)h.IndexName=d.indexName;if(d.filterConditions&&d.filterConditions.length>0){let{expression:D,expressionAttributeNames:E,expressionAttributeValues:V}=this.driver.buildFilterExpression(d.filterConditions);h.FilterExpression=D,h.ExpressionAttributeNames=E,h.ExpressionAttributeValues=V}if(d.projectionAttributes&&d.projectionAttributes.length>0){let{expression:D,expressionAttributeNames:E}=this.driver.buildProjectionExpression(d.projectionAttributes);h.ProjectionExpression=D,h.ExpressionAttributeNames={...h.ExpressionAttributeNames,...E}}if(d.limit!==void 0)h.Limit=d.limit;if(d.exclusiveStartKey)h.ExclusiveStartKey=this.driver.marshall(d.exclusiveStartKey);if(d.consistentRead)h.ConsistentRead=d.consistentRead;return h}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 d=this.toQueryRequest(),h=await this.client.query(d);return{items:h.Items?.map((D)=>this.driver.unmarshall(D)),count:h.Count,scannedCount:h.ScannedCount,lastEvaluatedKey:h.LastEvaluatedKey?this.driver.unmarshall(h.LastEvaluatedKey):void 0,consumedCapacity:h.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 d=this.toScanRequest(),h=await this.client.scan(d);return{items:h.Items?.map((D)=>this.driver.unmarshall(D)),count:h.Count,scannedCount:h.ScannedCount,lastEvaluatedKey:h.LastEvaluatedKey?this.driver.unmarshall(h.LastEvaluatedKey):void 0,consumedCapacity:h.ConsumedCapacity}}async getAll(){let d=[],h;do{if(h)this.startFrom(h);let D=this.keyConditions.length>0?await this.query():await this.scan();if(D.items)d.push(...D.items);h=D.lastEvaluatedKey}while(h);return d}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 d=this.keyConditions.length>0?this.toQueryRequest():this.toScanRequest();return d.Select="COUNT",(this.keyConditions.length>0?await this.client.query(d):await this.client.scan(d)).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 m{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(d){this.driver=c(d.config),this.client=d.client,this.tableName=d.config.tableName??""}table(d){return this.tableName=d,this}key(d){return this.keyData=d,this}item(d){return this.itemData=d,this}set(d,h){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[d]=h,this}setMany(d){if(!this.updateExpressions.set)this.updateExpressions.set={};return Object.assign(this.updateExpressions.set,d),this}remove(d){if(!this.updateExpressions.remove)this.updateExpressions.remove=[];return this.updateExpressions.remove.push(d),this}add(d,h){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[d]=h,this}deleteFromSet(d,h){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[d]=h,this}condition(d){return this.conditionExpr=d,this}ifNotExists(d="pk"){return this.conditionExpr=`attribute_not_exists(${d})`,this}ifExists(d="pk"){return this.conditionExpr=`attribute_exists(${d})`,this}returnOld(){return this.returnValuesOption="ALL_OLD",this}returnNew(){return this.returnValuesOption="ALL_NEW",this}toPutRequest(){let d={TableName:this.tableName,Item:this.driver.marshall(this.itemData)};if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toUpdateRequest(){let d={TableName:this.tableName,Key:this.driver.marshall(this.keyData)},{expression:h,expressionAttributeNames:D,expressionAttributeValues:E}=this.driver.buildUpdateExpression(this.updateExpressions);if(h)d.UpdateExpression=h,d.ExpressionAttributeNames=D,d.ExpressionAttributeValues=E;if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toDeleteRequest(){let d={TableName:this.tableName,Key:this.driver.marshall(this.keyData)};if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toGetRequest(){return{TableName:this.tableName,Key:this.driver.marshall(this.keyData)}}async put(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toPutRequest(),h=await this.client.putItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toUpdateRequest(),h=await this.client.updateItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toDeleteRequest(),h=await this.client.deleteItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toGetRequest(),h=await this.client.getItem(d);if(h.Item)return this.driver.unmarshall(h.Item);return}}function tn(d){return new T(d)}function nn(d){return new m(d)}function rn(d){let h=c(d.config);return{query:()=>new T(d),item:()=>new m(d),driver:h,registerEntity:(D)=>h.registerEntity(D),buildKey:(D,E)=>h.buildPrimaryKey(D,E)}}class Xe{config;entities=new Map;pkAttribute;skAttribute;typeAttribute;constructor(d){this.config=d,this.pkAttribute=d.pkAttribute??"pk",this.skAttribute=d.skAttribute??"sk",this.typeAttribute=d.typeAttribute??"_type";for(let h of d.entities)this.entities.set(h.name,h)}getEntity(d){return this.entities.get(d)}registerEntity(d){this.entities.set(d.name,d)}buildKey(d,h){let D=this.entities.get(d);if(!D)throw Error(`Entity not found: ${d}`);let E=this.interpolatePattern(D.pkPattern,h),V=this.interpolatePattern(D.skPattern,h);return{pk:E,sk:V}}buildGSIKey(d,h,D){let E=this.entities.get(d);if(!E)throw Error(`Entity not found: ${d}`);let V=E.indexes?.find((Ke)=>Ke.name===h);if(!V)throw Error(`GSI not found: ${h} for entity ${d}`);let ke=this.interpolatePattern(V.pkPattern,D),xe=V.skPattern?this.interpolatePattern(V.skPattern,D):void 0;return{pk:ke,sk:xe}}createItem(d,h){let{pk:D,sk:E}=this.buildKey(d,h),V=this.entities.get(d),ke={[this.pkAttribute]:D,[this.skAttribute]:E,[this.typeAttribute]:d,...h};if(V.indexes)for(let xe of V.indexes){let Ke=this.buildGSIKey(d,xe.name,h),Ie=this.config.indexes?.find((Ve)=>Ve.name===xe.name);if(Ie){if(ke[Ie.pkAttribute]=Ke.pk,Ie.skAttribute&&Ke.sk)ke[Ie.skAttribute]=Ke.sk}}return ke}parseEntityType(d){if(d[this.typeAttribute])return d[this.typeAttribute];let h=d[this.pkAttribute];if(!h)return;for(let[D,E]of this.entities){let V=E.pkPattern.split("${")[0];if(h.startsWith(V))return D}return}parseItem(d){let h=this.parseEntityType(d);if(!h)return;let{[this.pkAttribute]:D,[this.skAttribute]:E,[this.typeAttribute]:V,...ke}=d;return{type:h,data:ke}}getEntityPrefix(d){let h=this.entities.get(d);if(!h)throw Error(`Entity not found: ${d}`);return h.pkPattern.split("${")[0]}generateTableDefinition(){let d=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],h=[];if(this.config.indexes)for(let D of this.config.indexes){if(!d.find((E)=>E.name===D.pkAttribute))d.push({name:D.pkAttribute,type:"S"});if(D.skAttribute&&!d.find((E)=>E.name===D.skAttribute))d.push({name:D.skAttribute,type:"S"});h.push({indexName:D.name,keySchema:{partitionKey:D.pkAttribute,sortKey:D.skAttribute},projection:{type:"ALL"}})}return{tableName:this.config.tableName,keySchema:{partitionKey:this.pkAttribute,sortKey:this.skAttribute},attributeDefinitions:d,globalSecondaryIndexes:h.length>0?h:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(d,h){return d.replace(/\$\{(\w+)\}/g,(D,E)=>{if(!(E in h))throw Error(`Missing value for pattern key: ${E}`);return String(h[E])})}}class Ze{manager;entityName;options;constructor(d,h,D){this.manager=d,this.entityName=h,this.options=D}async create(d){let h=this.manager.createItem(this.entityName,d),D=new m(this.options).table(this.options.config.tableName).item(h).ifNotExists("pk");if(this.options.client)await D.put();return d}async get(d){let{pk:h,sk:D}=this.manager.buildKey(this.entityName,d),E=new m(this.options).table(this.options.config.tableName).key({pk:h,sk:D});if(!this.options.client)throw Error("DynamoDB client not provided");let V=await E.get();if(!V)return;return this.manager.parseItem(V)?.data}async update(d,h){let{pk:D,sk:E}=this.manager.buildKey(this.entityName,d),V=new m(this.options).table(this.options.config.tableName).key({pk:D,sk:E}).setMany(h).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let ke=await V.update();if(!ke)return;return this.manager.parseItem(ke)?.data}async delete(d){let{pk:h,sk:D}=this.manager.buildKey(this.entityName,d),E=new m(this.options).table(this.options.config.tableName).key({pk:h,sk:D});if(!this.options.client)throw Error("DynamoDB client not provided");return await E.delete(),!0}query(){return new et(this.manager,this.entityName,this.options)}async findAll(){let d=this.manager.typeAttribute??"_type",h=new T(this.options).table(this.options.config.tableName).whereEquals(d,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await h.getAll()).map((E)=>this.manager.parseItem(E)).filter((E)=>E!==void 0).map((E)=>E.data)}}class et{manager;entityName;options;builder;pkValue;skConditions=[];constructor(d,h,D){this.manager=d,this.entityName=h,this.options=D,this.builder=new T(D).table(D.config.tableName)}wherePartitionKey(d){let{pk:h}=this.manager.buildKey(this.entityName,d);this.pkValue=h;let D=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(D,h),this}whereSortKey(d){let{sk:h}=this.manager.buildKey(this.entityName,d),D=this.manager.skAttribute??"sk";return this.builder.whereSortKey(D,h),this}whereSortKeyBeginsWith(d){let h=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(h,d),this}useIndex(d,h){let D=this.manager.buildGSIKey(this.entityName,d,h),E=this.manager.config.indexes?.find((V)=>V.name===d);if(!E)throw Error(`GSI configuration not found: ${d}`);return this.builder.index(d),this.builder.wherePartitionKey(E.pkAttribute,D.pk),this}where(d,h,D){return this.builder.where(d,h,D),this}select(...d){return this.builder.select(...d),this}limit(d){return this.builder.limit(d),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((h)=>this.manager.parseItem(h)).filter((h)=>h!==void 0).map((h)=>h.data)}async first(){return this.limit(1),(await this.execute())[0]}}function tt(d){return new Xe(d)}function nt(d,h,D){return new Ze(d,h,D)}var sn={simpleEntity:(d,h="id")=>({name:d,pkPattern:`${d.toUpperCase()}#\${${h}}`,skPattern:"METADATA",keyFields:[h]}),oneToMany:(d,h,D="id",E="id")=>({parent:{name:d,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:"METADATA",keyFields:[D]},child:{name:h,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:`${h.toUpperCase()}#\${${E}}`,keyFields:[D,E]}}),manyToMany:(d,h,D="id",E="relatedId")=>({entity:{name:d,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:"METADATA",keyFields:[D]},relation:{name:h,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:`${h.toUpperCase()}#\${${E}}`,keyFields:[D,E],indexes:[{name:"GSI1",pkPattern:`${d.toUpperCase()}#\${${E}}`,skPattern:`${h.toUpperCase()}#\${${D}}`}]}}),hierarchical:(d,h="rootId",D="path")=>({name:d,pkPattern:`ROOT#\${${h}}`,skPattern:`PATH#\${${D}}`,keyFields:[h,D]})};function rt(d,h){let D={};for(let[E,V]of Object.entries(d))if(V)D[E]=V.replace(/\{([^}]+)\}/g,(ke,xe)=>h[xe]!==void 0?String(h[xe]):`{${xe}}`);return D}async function Rt(d){return{models:new Map}}function an(d){return d}function on(d){return d}function ln(d){return d}function cn(d){return d}class it{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(d){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...d};let h={region:d.region,endpoint:d.endpoint,credentials:d.credentials,tableName:d.tableName};this.driver=c(h);let D={tableName:d.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=tt(D),this.queryBuilderOptions={config:h}}setClient(d){return this.queryBuilderOptions.client=d,this}async discoverModels(){if(!this.config.modelsPath)throw Error("modelsPath must be configured to use discoverModels()");let d=await Rt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),h=[];for(let[,D]of d.models)this.registerParsedModel(D),h.push(D);return h}registerModel(d){let h=this.parseWithTooling(d);return this.registerParsedModel(h)}registerParsedModel(d){this.models.set(d.name,d);let h=this.toSingleTableEntity(d);this.singleTableManager.registerEntity(h);let D=this.toEntityMapping(d);return this.driver.registerEntity(D),d}registerModels(d){return d.map((h)=>this.registerModel(h))}getModel(d){return this.models.get(d)}getAllModels(){return Array.from(this.models.values())}repository(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return nt(this.singleTableManager,d,this.queryBuilderOptions)}query(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return new T(this.queryBuilderOptions).table(this.config.tableName).entity(d)}item(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return new m(this.queryBuilderOptions).table(this.config.tableName)}buildKey(d,h){let D=this.models.get(d);if(!D)throw Error(`Model not found: ${d}`);let E=rt(D.keyPatterns,h);return{pk:E.pk,sk:E.sk}}createItem(d,h){let D=this.models.get(d);if(!D)throw Error(`Model not found: ${d}`);let E=rt(D.keyPatterns,h),{pk:V,sk:ke}=E,xe={[this.config.pkAttribute]:V,[this.config.skAttribute]:ke,[this.config.entityTypeAttribute]:D.name,...h};if(D.hasTimestamps){let Ke=new Date().toISOString();if(!xe.createdAt)xe.createdAt=Ke;xe.updatedAt=Ke}if(D.hasVersioning){if(!xe._v)xe._v=1}return xe}parseItem(d){let h=d[this.config.entityTypeAttribute];if(!h)return;let{[this.config.pkAttribute]:D,[this.config.skAttribute]:E,[this.config.entityTypeAttribute]:V,...ke}=d;return{type:h,data:ke}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(d){let h=this.models.get(d);if(!h)throw Error(`Model not found: ${d}`);return h.accessPatterns}parseWithTooling(d){let h=d.name.toUpperCase(),D=d.primaryKey??"id",E=this.config.keyDelimiter,V=this.parseAttributes(d),ke=this.parseRelationships(d,D),xe={pk:`${h}${E}{${D}}`,sk:`${h}${E}{${D}}`,...this.deriveGSIKeyPatterns(h,D,E,ke)},Ke=this.deriveAccessPatterns(d.name,h,D,ke);return{name:d.name,entityType:h,primaryKey:D,attributes:V,relationships:ke,keyPatterns:xe,accessPatterns:Ke,traits:d.traits??{},hasTimestamps:d.traits?.useTimestamps??!1,hasSoftDeletes:d.traits?.useSoftDeletes??!1,hasUuid:d.traits?.useUuid??!1,hasTtl:d.traits?.useTtl??!1,hasVersioning:d.traits?.useVersioning??!1,original:d}}parseAttributes(d){let h=[];if(h.push({name:d.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),d.attributes)for(let[D,E]of Object.entries(d.attributes))h.push({name:D,fillable:E.fillable??!0,required:E.required??!1,nullable:E.nullable??!0,unique:E.unique??!1,hidden:E.hidden??!1,defaultValue:E.default,cast:E.cast,dynamoDbType:this.inferDynamoDBType(E)});if(d.traits?.useTimestamps)h.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(d.traits?.useSoftDeletes)h.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return h}inferDynamoDBType(d){if(d.cast){let h=d.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(h))return"N";if(["boolean","bool"].includes(h))return"BOOL";if(["array","list"].includes(h))return"L";if(["object","json","map"].includes(h))return"M"}if(d.validation?.rule){let h=String(d.validation.rule);if(h.includes("integer")||h.includes("numeric")||h.includes("number"))return"N";if(h.includes("boolean"))return"BOOL";if(h.includes("array"))return"L";if(h.includes("object"))return"M"}return"S"}parseRelationships(d,h){let D=[];if(d.hasOne)for(let E of d.hasOne)D.push({type:"hasOne",relatedModel:E,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,requiresGsi:!0});if(d.hasMany)for(let E of d.hasMany)D.push({type:"hasMany",relatedModel:E,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,requiresGsi:!1});if(d.belongsTo)for(let E of d.belongsTo)D.push({type:"belongsTo",relatedModel:E,foreignKey:`${E.toLowerCase()}Id`,localKey:h,requiresGsi:!0});if(d.belongsToMany){let E=Array.isArray(d.belongsToMany)?d.belongsToMany:Object.values(d.belongsToMany);for(let V of E){let ke=typeof V==="string"?V:V?.model;if(!ke)continue;let xe=[d.name,ke].sort();D.push({type:"belongsToMany",relatedModel:ke,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,pivotEntity:xe.join(""),requiresGsi:!0})}}return D}deriveGSIKeyPatterns(d,h,D,E){let V={},ke=1;for(let xe of E)if(xe.requiresGsi&&ke<=5)V[`gsi${ke}pk`]=`${xe.relatedModel.toUpperCase()}${D}{${xe.foreignKey}}`,V[`gsi${ke}sk`]=`${d}${D}{${h}}`,xe.gsiIndex=ke,ke++;return V}deriveAccessPatterns(d,h,D,E){let V=[];V.push({name:`Get ${d} by ID`,description:`Retrieve a single ${d} by its primary key`,entityType:h,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${h}#123`,exampleSk:`${h}#123`,efficient:!0}),V.push({name:`List all ${d}s`,description:`Scan all ${d} entities`,entityType:h,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:h,efficient:!1});for(let ke of E){if(ke.type==="hasMany")V.push({name:`Get ${ke.relatedModel}s for ${d}`,description:`Query ${ke.relatedModel}s related to a ${d}`,entityType:h,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${h}#123`,exampleSk:`${ke.relatedModel.toUpperCase()}#`,efficient:!0});if(ke.gsiIndex){let xe=`GSI${ke.gsiIndex}`;V.push({name:`Get ${d}s by ${ke.relatedModel}`,description:`Query ${d}s by their related ${ke.relatedModel}`,entityType:h,operation:"query",index:xe,keyCondition:`gsi${ke.gsiIndex}pk = :pk`,examplePk:`${ke.relatedModel.toUpperCase()}#123`,efficient:!0})}}return V}toSingleTableEntity(d){let h=this.extractKeyFields(d.keyPatterns.pk);return{name:d.name,pkPattern:d.keyPatterns.pk,skPattern:d.keyPatterns.sk,keyFields:h,indexes:this.extractGSIPatterns(d.keyPatterns)}}extractKeyFields(d){let h=d.match(/\{([^}]+)\}/g);if(!h)return[];return h.map((D)=>D.slice(1,-1))}extractGSIPatterns(d){let h=[];for(let D=1;D<=5;D++){let E=`gsi${D}pk`,V=`gsi${D}sk`;if(d[E])h.push({name:`GSI${D}`,pkPattern:d[E],skPattern:d[V]})}return h.length>0?h:void 0}toEntityMapping(d){return{entityType:d.name,pkPattern:d.keyPatterns.pk,skPattern:d.keyPatterns.sk}}buildGSIConfig(){let d=this.config.gsiConfig??{},h=[];if(d.gsi1pk)h.push({name:"GSI1",pkAttribute:d.gsi1pk,skAttribute:d.gsi1sk});if(d.gsi2pk)h.push({name:"GSI2",pkAttribute:d.gsi2pk,skAttribute:d.gsi2sk});if(d.gsi3pk)h.push({name:"GSI3",pkAttribute:d.gsi3pk,skAttribute:d.gsi3sk});return h}}function un(d){return new it(d)}function dn(d){return d.accessPatterns}function fn(d,h="#"){let D=d.name.toUpperCase(),E=d.primaryKey??"id";return{name:d.name,pkPattern:`${D}${h}\${${E}}`,skPattern:`${D}${h}\${${E}}`}}function $e(d){let h={};for(let D of Object.keys(d)){let E=d[D],V=E.definition??E.getDefinition?.()??E,ke=p(V),xe=V.attributes??{},Ke={};for(let Ie of Object.keys(xe))Ke[Ie]=void 0;h[ke]={columns:Ke,primaryKey:V.primaryKey??"id"}}return h}import{readdirSync as aa}from"fs";import{basename as Rs,extname as xs,isAbsolute as oa,join as Ns}from"path";import la from"process";var ua=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function ca(d){let h=xs(d);if(!ua.has(h))return!1;let D=Rs(d,h);if(D.startsWith("_")||D==="index")return!1;return!D.endsWith(".d")}function da(d){if(!d||typeof d!=="object")return!1;let h=d;return typeof h.name==="string"||typeof h.table==="string"}function ks(d){let h=[],D=aa(d,{withFileTypes:!0}).sort((E,V)=>E.name.localeCompare(V.name));for(let E of D){let V=Ns(d,E.name);if(E.isDirectory()){h.push(...ks(V));continue}if(ca(E.name))h.push(V)}return h}async function u(d){let h=d.cwd??la.cwd(),D=oa(d.modelsDir)?d.modelsDir:Ns(h,d.modelsDir),E={};for(let V of ks(D)){let ke=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,xe=await import(`${V}${ke}`),Ke=xe.default??xe,Ie=Ke.definition??Ke.getDefinition?.()??Ke;if(!da(Ie))continue;let Ve=Ie.name??Rs(V,xs(V));E[Ve]={...Ie,name:Ve}}return E}function st(d){let h={},D={},E={},V={},ke={},xe={};for(let Ke of Object.keys(d)){let Ie=d[Ke],Ve=Ie.definition??Ie.getDefinition?.()??Ie,gt=p(Ve);h[Ke]=gt,D[gt]=Ke,E[gt]=Ve.primaryKey??"id";let pt=[];for(let[Tn,Fe]of Object.entries(Ve.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Fe?.type??"")))pt.push(Tn);let xt=Ve.traits??{};if(xt.useTimestamps??xt.timestampable)pt.push("created_at","updated_at");if(pt.length>0)xe[gt]=[...new Set(pt)];let ht=(Tn)=>{if(!Tn)return{};let Fe={};if(Array.isArray(Tn)){for(let Ue of Tn){let ve=Me(Ue);if(ve)Fe[ve.model]=ve.model}return Fe}if(typeof Tn==="object"){for(let[Ue,ve]of Object.entries(Tn)){let Ne=Me(ve);if(Ne)Fe[Ue]=Ne.model}return Fe}return{}},Jt=(Tn)=>{if(!Tn)return{};if(Array.isArray(Tn)){let Fe={};for(let Ue of Tn)if(typeof Ue==="string")Fe[Ue]=Ue;else if(Ue&&typeof Ue==="object"&&typeof Ue.model==="string")Fe[Ue.model]=Ue;return Fe}return Tn},jt=(Tn)=>{if(!Tn)return{};return Tn};if(V[gt]={hasOne:ht(Ve.hasOne),hasMany:ht(Ve.hasMany),belongsTo:ht(Ve.belongsTo),belongsToMany:Jt(Ve.belongsToMany),hasOneThrough:jt(Ve.hasOneThrough),hasManyThrough:jt(Ve.hasManyThrough),morphOne:ht(Ve.morphOne),morphMany:ht(Ve.morphMany),morphTo:Ve.morphTo,morphToMany:ht(Ve.morphToMany),morphedByMany:ht(Ve.morphedByMany)},Ve.scopes&&typeof Ve.scopes==="object"){ke[gt]={};for(let Tn of Object.keys(Ve.scopes)){let Fe=Ve.scopes[Tn];if(typeof Fe==="function")ke[gt][Tn]=Fe}}}return{modelToTable:h,tableToModel:D,primaryKeys:E,relations:V,scopes:ke,models:d,temporalColumns:xe}}import{existsSync as Xr,mkdirSync as fa,readdirSync as ma,readFileSync as ga,writeFileSync as ya}from"fs";import{dirname as Bs,join as _r}from"path";import Is from"process";function qn(d){if(e.verbose)console.log(d)}function ar(d){return d.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Hr(d){return y(e.relations?.singularizeStrategy)(d)}var Rr=0,sr=0,or=0,Lr=!0,qr=[],mr=null;function at(){return[...qr]}function pa(d){let h=d;while(h!==Bs(h)){if(Xr(_r(h,"package.json")))return h;h=Bs(h)}return Is.cwd()}function ha(){let d=pa(Is.cwd()),h=rr(d,e.migrationDir);if(!Xr(h))fa(h,{recursive:!0}),qn(`-- Created SQL directory: ${h}`);return h}var ot="-- qb:generated";function lt(d){return d.trimStart().startsWith(ot)}function ct(d){return d.split(`
369
+ `,[Ve.table])).map((Jt)=>({name:Jt.column_name,type:Jt.data_type.toLowerCase()}));let pt=gt.map((ht)=>ht.name),xt=Ve.columns.map((ht)=>ht.name);for(let ht of Ve.columns)if(!pt.includes(ht.name))D.push({type:"missing_column",severity:"error",table:Ve.table,column:ht.name,expected:ht.type,message:`Column '${Ve.table}.${ht.name}' defined in model but not found in database`});for(let ht of gt)if(!xt.includes(ht.name))D.push({type:"extra_column",severity:"warning",table:Ve.table,column:ht.name,actual:ht.type,message:`Column '${Ve.table}.${ht.name}' exists in database but not defined in model`});for(let ht of Ve.columns){let Jt=gt.find((jt)=>jt.name===ht.name);if(Jt){let jt=(Ue)=>Ue.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),Tn=jt(ht.type),Fe=jt(Jt.type);if(Tn!==Fe)D.push({type:"type_mismatch",severity:"warning",table:Ve.table,column:ht.name,expected:ht.type,actual:Jt.type,message:`Column '${Ve.table}.${ht.name}' type mismatch: expected '${ht.type}', found '${Jt.type}'`})}}}let ve=D.filter((Ve)=>Ve.severity==="error").length===0;if(ve&&D.length===0)console.log("\u2713 Schema is valid - no issues found"),console.log();else{console.log(`-- Found ${D.length} issue(s)`),console.log();let Ve=D.filter((pt)=>pt.severity==="error"),gt=D.filter((pt)=>pt.severity==="warning");if(Ve.length>0){console.log(`\u2717 Errors (${Ve.length}):`);for(let pt of Ve)console.log(` - ${pt.message}`);console.log()}if(gt.length>0){console.log(`\u26A0 Warnings (${gt.length}):`);for(let pt of gt)console.log(` - ${pt.message}`);console.log()}if(!ve)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:ve,issues:D}}catch(E){throw console.error("-- Schema validation failed:",E),E}}async function Se(d){return q(d)}async function De(d={}){let h=Number(d.attempts||10),D=Number(d.delay||100),E=i();try{return await E.waitForReady({attempts:h,delayMs:D}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}class T{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(d){this.driver=c(d.config),this.client=d.client,this.tableName=d.config.tableName??""}table(d){return this.tableName=d,this}index(d){return this.indexName=d,this}entity(d){return this.entityType=d,this}whereKey(d,h,D){return this.keyConditions.push({attribute:d,operator:h,value:D}),this}wherePartitionKey(d,h){return this.whereKey(d,"=",h)}whereSortKey(d,h){return this.whereKey(d,"=",h)}whereSortKeyBeginsWith(d,h){return this.keyConditions.push({attribute:d,operator:"begins_with",value:h}),this}whereSortKeyBetween(d,h,D){return this.keyConditions.push({attribute:d,operator:"BETWEEN",values:[h,D]}),this}where(d,h,D){return this.filterConditions.push({attribute:d,operator:h,value:D}),this}whereEquals(d,h){return this.where(d,"=",h)}whereLessThan(d,h){return this.where(d,"<",h)}whereLessThanOrEqual(d,h){return this.where(d,"<=",h)}whereGreaterThan(d,h){return this.where(d,">",h)}whereGreaterThanOrEqual(d,h){return this.where(d,">=",h)}whereBetween(d,h,D){return this.filterConditions.push({attribute:d,operator:"BETWEEN",values:[h,D]}),this}whereBeginsWith(d,h){return this.filterConditions.push({attribute:d,operator:"begins_with",value:h}),this}whereContains(d,h){return this.where(d,"contains",h)}whereExists(d){return this.where(d,"attribute_exists")}whereNotExists(d){return this.where(d,"attribute_not_exists")}whereIn(d,h){return this.filterConditions.push({attribute:d,operator:"IN",values:h}),this}select(...d){return this.projectionAttrs.push(...d),this}limit(d){return this.limitValue=d,this}ascending(){return this.scanForward=!0,this}descending(){return this.scanForward=!1,this}consistentRead(d=!0){return this.consistentReadValue=d,this}startFrom(d){return this.startKey=d,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 d=this.buildQueryParams(),h={TableName:d.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(d.indexName)h.IndexName=d.indexName;let D=0;if(d.keyConditions.length>0){let E=[];for(let V of d.keyConditions){let ke=`#key${D}`;if(h.ExpressionAttributeNames[ke]=V.attribute,V.operator==="begins_with"){let xe=`:keyval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`begins_with(${ke}, ${xe})`)}else if(V.operator==="BETWEEN"){let xe=`:keyval${D}a`,Ke=`:keyval${D}b`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Ke]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${ke} BETWEEN ${xe} AND ${Ke}`)}else{let xe=`:keyval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${ke} ${V.operator} ${xe}`)}D++}h.KeyConditionExpression=E.join(" AND ")}if(d.filterConditions&&d.filterConditions.length>0){let E=[];for(let V of d.filterConditions){let ke=`#flt${D}`;if(h.ExpressionAttributeNames[ke]=V.attribute,V.operator==="attribute_exists")E.push(`attribute_exists(${ke})`);else if(V.operator==="attribute_not_exists")E.push(`attribute_not_exists(${ke})`);else if(V.operator==="begins_with"||V.operator==="contains"){let xe=`:fltval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${V.operator}(${ke}, ${xe})`)}else if(V.operator==="BETWEEN"){let xe=`:fltval${D}a`,Ke=`:fltval${D}b`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Ke]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${ke} BETWEEN ${xe} AND ${Ke}`)}else if(V.operator==="IN"){let xe=(V.values??[]).map((Ke,ve)=>`:fltval${D}_${ve}`);V.values?.forEach((Ke,ve)=>{h.ExpressionAttributeValues[`:fltval${D}_${ve}`]=this.driver.marshall({v:Ke}).v}),E.push(`${ke} IN (${xe.join(", ")})`)}else{let xe=`:fltval${D}`;h.ExpressionAttributeValues[xe]=this.driver.marshall({v:V.value}).v,E.push(`${ke} ${V.operator} ${xe}`)}D++}h.FilterExpression=E.join(" AND ")}if(d.projectionAttributes&&d.projectionAttributes.length>0){let E=[];for(let V of d.projectionAttributes){let ke=`#proj${D}`;h.ExpressionAttributeNames[ke]=V,E.push(ke),D++}h.ProjectionExpression=E.join(", ")}if(d.limit!==void 0)h.Limit=d.limit;if(d.scanIndexForward!==void 0)h.ScanIndexForward=d.scanIndexForward;if(d.exclusiveStartKey)h.ExclusiveStartKey=this.driver.marshall(d.exclusiveStartKey);if(d.consistentRead)h.ConsistentRead=d.consistentRead;if(Object.keys(h.ExpressionAttributeNames).length===0)delete h.ExpressionAttributeNames;if(Object.keys(h.ExpressionAttributeValues).length===0)delete h.ExpressionAttributeValues;return h}toScanRequest(){let d=this.buildScanParams(),h={TableName:d.tableName};if(d.indexName)h.IndexName=d.indexName;if(d.filterConditions&&d.filterConditions.length>0){let{expression:D,expressionAttributeNames:E,expressionAttributeValues:V}=this.driver.buildFilterExpression(d.filterConditions);h.FilterExpression=D,h.ExpressionAttributeNames=E,h.ExpressionAttributeValues=V}if(d.projectionAttributes&&d.projectionAttributes.length>0){let{expression:D,expressionAttributeNames:E}=this.driver.buildProjectionExpression(d.projectionAttributes);h.ProjectionExpression=D,h.ExpressionAttributeNames={...h.ExpressionAttributeNames,...E}}if(d.limit!==void 0)h.Limit=d.limit;if(d.exclusiveStartKey)h.ExclusiveStartKey=this.driver.marshall(d.exclusiveStartKey);if(d.consistentRead)h.ConsistentRead=d.consistentRead;return h}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 d=this.toQueryRequest(),h=await this.client.query(d);return{items:h.Items?.map((D)=>this.driver.unmarshall(D)),count:h.Count,scannedCount:h.ScannedCount,lastEvaluatedKey:h.LastEvaluatedKey?this.driver.unmarshall(h.LastEvaluatedKey):void 0,consumedCapacity:h.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 d=this.toScanRequest(),h=await this.client.scan(d);return{items:h.Items?.map((D)=>this.driver.unmarshall(D)),count:h.Count,scannedCount:h.ScannedCount,lastEvaluatedKey:h.LastEvaluatedKey?this.driver.unmarshall(h.LastEvaluatedKey):void 0,consumedCapacity:h.ConsumedCapacity}}async getAll(){let d=[],h;do{if(h)this.startFrom(h);let D=this.keyConditions.length>0?await this.query():await this.scan();if(D.items)d.push(...D.items);h=D.lastEvaluatedKey}while(h);return d}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 d=this.keyConditions.length>0?this.toQueryRequest():this.toScanRequest();return d.Select="COUNT",(this.keyConditions.length>0?await this.client.query(d):await this.client.scan(d)).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 m{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(d){this.driver=c(d.config),this.client=d.client,this.tableName=d.config.tableName??""}table(d){return this.tableName=d,this}key(d){return this.keyData=d,this}item(d){return this.itemData=d,this}set(d,h){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[d]=h,this}setMany(d){if(!this.updateExpressions.set)this.updateExpressions.set={};return Object.assign(this.updateExpressions.set,d),this}remove(d){if(!this.updateExpressions.remove)this.updateExpressions.remove=[];return this.updateExpressions.remove.push(d),this}add(d,h){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[d]=h,this}deleteFromSet(d,h){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[d]=h,this}condition(d){return this.conditionExpr=d,this}ifNotExists(d="pk"){return this.conditionExpr=`attribute_not_exists(${d})`,this}ifExists(d="pk"){return this.conditionExpr=`attribute_exists(${d})`,this}returnOld(){return this.returnValuesOption="ALL_OLD",this}returnNew(){return this.returnValuesOption="ALL_NEW",this}toPutRequest(){let d={TableName:this.tableName,Item:this.driver.marshall(this.itemData)};if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toUpdateRequest(){let d={TableName:this.tableName,Key:this.driver.marshall(this.keyData)},{expression:h,expressionAttributeNames:D,expressionAttributeValues:E}=this.driver.buildUpdateExpression(this.updateExpressions);if(h)d.UpdateExpression=h,d.ExpressionAttributeNames=D,d.ExpressionAttributeValues=E;if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toDeleteRequest(){let d={TableName:this.tableName,Key:this.driver.marshall(this.keyData)};if(this.conditionExpr)d.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")d.ReturnValues=this.returnValuesOption;return d}toGetRequest(){return{TableName:this.tableName,Key:this.driver.marshall(this.keyData)}}async put(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toPutRequest(),h=await this.client.putItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toUpdateRequest(),h=await this.client.updateItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toDeleteRequest(),h=await this.client.deleteItem(d);if(h.Attributes)return this.driver.unmarshall(h.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let d=this.toGetRequest(),h=await this.client.getItem(d);if(h.Item)return this.driver.unmarshall(h.Item);return}}function tn(d){return new T(d)}function nn(d){return new m(d)}function rn(d){let h=c(d.config);return{query:()=>new T(d),item:()=>new m(d),driver:h,registerEntity:(D)=>h.registerEntity(D),buildKey:(D,E)=>h.buildPrimaryKey(D,E)}}class Xe{config;entities=new Map;pkAttribute;skAttribute;typeAttribute;constructor(d){this.config=d,this.pkAttribute=d.pkAttribute??"pk",this.skAttribute=d.skAttribute??"sk",this.typeAttribute=d.typeAttribute??"_type";for(let h of d.entities)this.entities.set(h.name,h)}getEntity(d){return this.entities.get(d)}registerEntity(d){this.entities.set(d.name,d)}buildKey(d,h){let D=this.entities.get(d);if(!D)throw Error(`Entity not found: ${d}`);let E=this.interpolatePattern(D.pkPattern,h),V=this.interpolatePattern(D.skPattern,h);return{pk:E,sk:V}}buildGSIKey(d,h,D){let E=this.entities.get(d);if(!E)throw Error(`Entity not found: ${d}`);let V=E.indexes?.find((Ke)=>Ke.name===h);if(!V)throw Error(`GSI not found: ${h} for entity ${d}`);let ke=this.interpolatePattern(V.pkPattern,D),xe=V.skPattern?this.interpolatePattern(V.skPattern,D):void 0;return{pk:ke,sk:xe}}createItem(d,h){let{pk:D,sk:E}=this.buildKey(d,h),V=this.entities.get(d),ke={[this.pkAttribute]:D,[this.skAttribute]:E,[this.typeAttribute]:d,...h};if(V.indexes)for(let xe of V.indexes){let Ke=this.buildGSIKey(d,xe.name,h),ve=this.config.indexes?.find((Ve)=>Ve.name===xe.name);if(ve){if(ke[ve.pkAttribute]=Ke.pk,ve.skAttribute&&Ke.sk)ke[ve.skAttribute]=Ke.sk}}return ke}parseEntityType(d){if(d[this.typeAttribute])return d[this.typeAttribute];let h=d[this.pkAttribute];if(!h)return;for(let[D,E]of this.entities){let V=E.pkPattern.split("${")[0];if(h.startsWith(V))return D}return}parseItem(d){let h=this.parseEntityType(d);if(!h)return;let{[this.pkAttribute]:D,[this.skAttribute]:E,[this.typeAttribute]:V,...ke}=d;return{type:h,data:ke}}getEntityPrefix(d){let h=this.entities.get(d);if(!h)throw Error(`Entity not found: ${d}`);return h.pkPattern.split("${")[0]}generateTableDefinition(){let d=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],h=[];if(this.config.indexes)for(let D of this.config.indexes){if(!d.find((E)=>E.name===D.pkAttribute))d.push({name:D.pkAttribute,type:"S"});if(D.skAttribute&&!d.find((E)=>E.name===D.skAttribute))d.push({name:D.skAttribute,type:"S"});h.push({indexName:D.name,keySchema:{partitionKey:D.pkAttribute,sortKey:D.skAttribute},projection:{type:"ALL"}})}return{tableName:this.config.tableName,keySchema:{partitionKey:this.pkAttribute,sortKey:this.skAttribute},attributeDefinitions:d,globalSecondaryIndexes:h.length>0?h:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(d,h){return d.replace(/\$\{(\w+)\}/g,(D,E)=>{if(!(E in h))throw Error(`Missing value for pattern key: ${E}`);return String(h[E])})}}class Ze{manager;entityName;options;constructor(d,h,D){this.manager=d,this.entityName=h,this.options=D}async create(d){let h=this.manager.createItem(this.entityName,d),D=new m(this.options).table(this.options.config.tableName).item(h).ifNotExists("pk");if(this.options.client)await D.put();return d}async get(d){let{pk:h,sk:D}=this.manager.buildKey(this.entityName,d),E=new m(this.options).table(this.options.config.tableName).key({pk:h,sk:D});if(!this.options.client)throw Error("DynamoDB client not provided");let V=await E.get();if(!V)return;return this.manager.parseItem(V)?.data}async update(d,h){let{pk:D,sk:E}=this.manager.buildKey(this.entityName,d),V=new m(this.options).table(this.options.config.tableName).key({pk:D,sk:E}).setMany(h).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let ke=await V.update();if(!ke)return;return this.manager.parseItem(ke)?.data}async delete(d){let{pk:h,sk:D}=this.manager.buildKey(this.entityName,d),E=new m(this.options).table(this.options.config.tableName).key({pk:h,sk:D});if(!this.options.client)throw Error("DynamoDB client not provided");return await E.delete(),!0}query(){return new et(this.manager,this.entityName,this.options)}async findAll(){let d=this.manager.typeAttribute??"_type",h=new T(this.options).table(this.options.config.tableName).whereEquals(d,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await h.getAll()).map((E)=>this.manager.parseItem(E)).filter((E)=>E!==void 0).map((E)=>E.data)}}class et{manager;entityName;options;builder;pkValue;skConditions=[];constructor(d,h,D){this.manager=d,this.entityName=h,this.options=D,this.builder=new T(D).table(D.config.tableName)}wherePartitionKey(d){let{pk:h}=this.manager.buildKey(this.entityName,d);this.pkValue=h;let D=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(D,h),this}whereSortKey(d){let{sk:h}=this.manager.buildKey(this.entityName,d),D=this.manager.skAttribute??"sk";return this.builder.whereSortKey(D,h),this}whereSortKeyBeginsWith(d){let h=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith(h,d),this}useIndex(d,h){let D=this.manager.buildGSIKey(this.entityName,d,h),E=this.manager.config.indexes?.find((V)=>V.name===d);if(!E)throw Error(`GSI configuration not found: ${d}`);return this.builder.index(d),this.builder.wherePartitionKey(E.pkAttribute,D.pk),this}where(d,h,D){return this.builder.where(d,h,D),this}select(...d){return this.builder.select(...d),this}limit(d){return this.builder.limit(d),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((h)=>this.manager.parseItem(h)).filter((h)=>h!==void 0).map((h)=>h.data)}async first(){return this.limit(1),(await this.execute())[0]}}function tt(d){return new Xe(d)}function nt(d,h,D){return new Ze(d,h,D)}var sn={simpleEntity:(d,h="id")=>({name:d,pkPattern:`${d.toUpperCase()}#\${${h}}`,skPattern:"METADATA",keyFields:[h]}),oneToMany:(d,h,D="id",E="id")=>({parent:{name:d,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:"METADATA",keyFields:[D]},child:{name:h,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:`${h.toUpperCase()}#\${${E}}`,keyFields:[D,E]}}),manyToMany:(d,h,D="id",E="relatedId")=>({entity:{name:d,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:"METADATA",keyFields:[D]},relation:{name:h,pkPattern:`${d.toUpperCase()}#\${${D}}`,skPattern:`${h.toUpperCase()}#\${${E}}`,keyFields:[D,E],indexes:[{name:"GSI1",pkPattern:`${d.toUpperCase()}#\${${E}}`,skPattern:`${h.toUpperCase()}#\${${D}}`}]}}),hierarchical:(d,h="rootId",D="path")=>({name:d,pkPattern:`ROOT#\${${h}}`,skPattern:`PATH#\${${D}}`,keyFields:[h,D]})};function rt(d,h){let D={};for(let[E,V]of Object.entries(d))if(V)D[E]=V.replace(/\{([^}]+)\}/g,(ke,xe)=>h[xe]!==void 0?String(h[xe]):`{${xe}}`);return D}async function Rt(d){return{models:new Map}}function an(d){return d}function on(d){return d}function ln(d){return d}function cn(d){return d}class it{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(d){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...d};let h={region:d.region,endpoint:d.endpoint,credentials:d.credentials,tableName:d.tableName};this.driver=c(h);let D={tableName:d.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=tt(D),this.queryBuilderOptions={config:h}}setClient(d){return this.queryBuilderOptions.client=d,this}async discoverModels(){if(!this.config.modelsPath)throw Error("modelsPath must be configured to use discoverModels()");let d=await Rt({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),h=[];for(let[,D]of d.models)this.registerParsedModel(D),h.push(D);return h}registerModel(d){let h=this.parseWithTooling(d);return this.registerParsedModel(h)}registerParsedModel(d){this.models.set(d.name,d);let h=this.toSingleTableEntity(d);this.singleTableManager.registerEntity(h);let D=this.toEntityMapping(d);return this.driver.registerEntity(D),d}registerModels(d){return d.map((h)=>this.registerModel(h))}getModel(d){return this.models.get(d)}getAllModels(){return Array.from(this.models.values())}repository(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return nt(this.singleTableManager,d,this.queryBuilderOptions)}query(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return new T(this.queryBuilderOptions).table(this.config.tableName).entity(d)}item(d){if(!this.models.get(d))throw Error(`Model not found: ${d}`);return new m(this.queryBuilderOptions).table(this.config.tableName)}buildKey(d,h){let D=this.models.get(d);if(!D)throw Error(`Model not found: ${d}`);let E=rt(D.keyPatterns,h);return{pk:E.pk,sk:E.sk}}createItem(d,h){let D=this.models.get(d);if(!D)throw Error(`Model not found: ${d}`);let E=rt(D.keyPatterns,h),{pk:V,sk:ke}=E,xe={[this.config.pkAttribute]:V,[this.config.skAttribute]:ke,[this.config.entityTypeAttribute]:D.name,...h};if(D.hasTimestamps){let Ke=new Date().toISOString();if(!xe.createdAt)xe.createdAt=Ke;xe.updatedAt=Ke}if(D.hasVersioning){if(!xe._v)xe._v=1}return xe}parseItem(d){let h=d[this.config.entityTypeAttribute];if(!h)return;let{[this.config.pkAttribute]:D,[this.config.skAttribute]:E,[this.config.entityTypeAttribute]:V,...ke}=d;return{type:h,data:ke}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(d){let h=this.models.get(d);if(!h)throw Error(`Model not found: ${d}`);return h.accessPatterns}parseWithTooling(d){let h=d.name.toUpperCase(),D=d.primaryKey??"id",E=this.config.keyDelimiter,V=this.parseAttributes(d),ke=this.parseRelationships(d,D),xe={pk:`${h}${E}{${D}}`,sk:`${h}${E}{${D}}`,...this.deriveGSIKeyPatterns(h,D,E,ke)},Ke=this.deriveAccessPatterns(d.name,h,D,ke);return{name:d.name,entityType:h,primaryKey:D,attributes:V,relationships:ke,keyPatterns:xe,accessPatterns:Ke,traits:d.traits??{},hasTimestamps:d.traits?.useTimestamps??!1,hasSoftDeletes:d.traits?.useSoftDeletes??!1,hasUuid:d.traits?.useUuid??!1,hasTtl:d.traits?.useTtl??!1,hasVersioning:d.traits?.useVersioning??!1,original:d}}parseAttributes(d){let h=[];if(h.push({name:d.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),d.attributes)for(let[D,E]of Object.entries(d.attributes))h.push({name:D,fillable:E.fillable??!0,required:E.required??!1,nullable:E.nullable??!0,unique:E.unique??!1,hidden:E.hidden??!1,defaultValue:E.default,cast:E.cast,dynamoDbType:this.inferDynamoDBType(E)});if(d.traits?.useTimestamps)h.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(d.traits?.useSoftDeletes)h.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return h}inferDynamoDBType(d){if(d.cast){let h=d.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes(h))return"N";if(["boolean","bool"].includes(h))return"BOOL";if(["array","list"].includes(h))return"L";if(["object","json","map"].includes(h))return"M"}if(d.validation?.rule){let h=String(d.validation.rule);if(h.includes("integer")||h.includes("numeric")||h.includes("number"))return"N";if(h.includes("boolean"))return"BOOL";if(h.includes("array"))return"L";if(h.includes("object"))return"M"}return"S"}parseRelationships(d,h){let D=[];if(d.hasOne)for(let E of d.hasOne)D.push({type:"hasOne",relatedModel:E,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,requiresGsi:!0});if(d.hasMany)for(let E of d.hasMany)D.push({type:"hasMany",relatedModel:E,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,requiresGsi:!1});if(d.belongsTo)for(let E of d.belongsTo)D.push({type:"belongsTo",relatedModel:E,foreignKey:`${E.toLowerCase()}Id`,localKey:h,requiresGsi:!0});if(d.belongsToMany){let E=Array.isArray(d.belongsToMany)?d.belongsToMany:Object.values(d.belongsToMany);for(let V of E){let ke=typeof V==="string"?V:V?.model;if(!ke)continue;let xe=[d.name,ke].sort();D.push({type:"belongsToMany",relatedModel:ke,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,pivotEntity:xe.join(""),requiresGsi:!0})}}return D}deriveGSIKeyPatterns(d,h,D,E){let V={},ke=1;for(let xe of E)if(xe.requiresGsi&&ke<=5)V[`gsi${ke}pk`]=`${xe.relatedModel.toUpperCase()}${D}{${xe.foreignKey}}`,V[`gsi${ke}sk`]=`${d}${D}{${h}}`,xe.gsiIndex=ke,ke++;return V}deriveAccessPatterns(d,h,D,E){let V=[];V.push({name:`Get ${d} by ID`,description:`Retrieve a single ${d} by its primary key`,entityType:h,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${h}#123`,exampleSk:`${h}#123`,efficient:!0}),V.push({name:`List all ${d}s`,description:`Scan all ${d} entities`,entityType:h,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:h,efficient:!1});for(let ke of E){if(ke.type==="hasMany")V.push({name:`Get ${ke.relatedModel}s for ${d}`,description:`Query ${ke.relatedModel}s related to a ${d}`,entityType:h,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${h}#123`,exampleSk:`${ke.relatedModel.toUpperCase()}#`,efficient:!0});if(ke.gsiIndex){let xe=`GSI${ke.gsiIndex}`;V.push({name:`Get ${d}s by ${ke.relatedModel}`,description:`Query ${d}s by their related ${ke.relatedModel}`,entityType:h,operation:"query",index:xe,keyCondition:`gsi${ke.gsiIndex}pk = :pk`,examplePk:`${ke.relatedModel.toUpperCase()}#123`,efficient:!0})}}return V}toSingleTableEntity(d){let h=this.extractKeyFields(d.keyPatterns.pk);return{name:d.name,pkPattern:d.keyPatterns.pk,skPattern:d.keyPatterns.sk,keyFields:h,indexes:this.extractGSIPatterns(d.keyPatterns)}}extractKeyFields(d){let h=d.match(/\{([^}]+)\}/g);if(!h)return[];return h.map((D)=>D.slice(1,-1))}extractGSIPatterns(d){let h=[];for(let D=1;D<=5;D++){let E=`gsi${D}pk`,V=`gsi${D}sk`;if(d[E])h.push({name:`GSI${D}`,pkPattern:d[E],skPattern:d[V]})}return h.length>0?h:void 0}toEntityMapping(d){return{entityType:d.name,pkPattern:d.keyPatterns.pk,skPattern:d.keyPatterns.sk}}buildGSIConfig(){let d=this.config.gsiConfig??{},h=[];if(d.gsi1pk)h.push({name:"GSI1",pkAttribute:d.gsi1pk,skAttribute:d.gsi1sk});if(d.gsi2pk)h.push({name:"GSI2",pkAttribute:d.gsi2pk,skAttribute:d.gsi2sk});if(d.gsi3pk)h.push({name:"GSI3",pkAttribute:d.gsi3pk,skAttribute:d.gsi3sk});return h}}function un(d){return new it(d)}function dn(d){return d.accessPatterns}function fn(d,h="#"){let D=d.name.toUpperCase(),E=d.primaryKey??"id";return{name:d.name,pkPattern:`${D}${h}\${${E}}`,skPattern:`${D}${h}\${${E}}`}}function $e(d){let h={};for(let D of Object.keys(d)){let E=d[D],V=E.definition??E.getDefinition?.()??E,ke=p(V),xe=V.attributes??{},Ke={};for(let ve of Object.keys(xe))Ke[ve]=void 0;h[ke]={columns:Ke,primaryKey:V.primaryKey??"id"}}return h}import{readdirSync as aa}from"fs";import{basename as Rs,extname as xs,isAbsolute as oa,join as Ns}from"path";import la from"process";var ua=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function ca(d){let h=xs(d);if(!ua.has(h))return!1;let D=Rs(d,h);if(D.startsWith("_")||D==="index")return!1;return!D.endsWith(".d")}function da(d){if(!d||typeof d!=="object")return!1;let h=d;return typeof h.name==="string"||typeof h.table==="string"}function ks(d){let h=[],D=aa(d,{withFileTypes:!0}).sort((E,V)=>E.name.localeCompare(V.name));for(let E of D){let V=Ns(d,E.name);if(E.isDirectory()){h.push(...ks(V));continue}if(ca(E.name))h.push(V)}return h}async function u(d){let h=d.cwd??la.cwd(),D=oa(d.modelsDir)?d.modelsDir:Ns(h,d.modelsDir),E={};for(let V of ks(D)){let ke=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,xe=await import(`${V}${ke}`),Ke=xe.default??xe,ve=Ke.definition??Ke.getDefinition?.()??Ke;if(!da(ve))continue;let Ve=ve.name??Rs(V,xs(V));E[Ve]={...ve,name:Ve}}return E}function st(d){let h={},D={},E={},V={},ke={},xe={};for(let Ke of Object.keys(d)){let ve=d[Ke],Ve=ve.definition??ve.getDefinition?.()??ve,gt=p(Ve);h[Ke]=gt,D[gt]=Ke,E[gt]=Ve.primaryKey??"id";let pt=[];for(let[Tn,Fe]of Object.entries(Ve.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(Fe?.type??"")))pt.push(Tn);let xt=Ve.traits??{};if(xt.useTimestamps??xt.timestampable)pt.push("created_at","updated_at");if(pt.length>0)xe[gt]=[...new Set(pt)];let ht=(Tn)=>{if(!Tn)return{};let Fe={};if(Array.isArray(Tn)){for(let Ue of Tn){let _e=Me(Ue);if(_e)Fe[_e.model]=_e.model}return Fe}if(typeof Tn==="object"){for(let[Ue,_e]of Object.entries(Tn)){let Ne=Me(_e);if(Ne)Fe[Ue]=Ne.model}return Fe}return{}},Jt=(Tn)=>{if(!Tn)return{};if(Array.isArray(Tn)){let Fe={};for(let Ue of Tn)if(typeof Ue==="string")Fe[Ue]=Ue;else if(Ue&&typeof Ue==="object"&&typeof Ue.model==="string")Fe[Ue.model]=Ue;return Fe}return Tn},jt=(Tn)=>{if(!Tn)return{};return Tn};if(V[gt]={hasOne:ht(Ve.hasOne),hasMany:ht(Ve.hasMany),belongsTo:ht(Ve.belongsTo),belongsToMany:Jt(Ve.belongsToMany),hasOneThrough:jt(Ve.hasOneThrough),hasManyThrough:jt(Ve.hasManyThrough),morphOne:ht(Ve.morphOne),morphMany:ht(Ve.morphMany),morphTo:Ve.morphTo,morphToMany:ht(Ve.morphToMany),morphedByMany:ht(Ve.morphedByMany)},Ve.scopes&&typeof Ve.scopes==="object"){ke[gt]={};for(let Tn of Object.keys(Ve.scopes)){let Fe=Ve.scopes[Tn];if(typeof Fe==="function")ke[gt][Tn]=Fe}}}return{modelToTable:h,tableToModel:D,primaryKeys:E,relations:V,scopes:ke,models:d,temporalColumns:xe}}import{existsSync as Xr,mkdirSync as fa,readdirSync as ma,readFileSync as ga,writeFileSync as ya}from"fs";import{dirname as Bs,join as _r}from"path";import Is from"process";function Ln(d){if(e.verbose)console.log(d)}function ar(d){return d.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Hr(d){return y(e.relations?.singularizeStrategy)(d)}var Rr=0,sr=0,or=0,qr=!0,Lr=[],mr=null;function at(){return[...Lr]}function pa(d){let h=d;while(h!==Bs(h)){if(Xr(_r(h,"package.json")))return h;h=Bs(h)}return Is.cwd()}function ha(){let d=pa(Is.cwd()),h=rr(d,e.migrationDir);if(!Xr(h))fa(h,{recursive:!0}),Ln(`-- Created SQL directory: ${h}`);return h}var ot="-- qb:generated";function lt(d){return d.trimStart().startsWith(ot)}function ct(d){return d.split(`
370
370
  `).filter((h)=>!h.trimStart().startsWith("--")).join(`
371
- `).replace(/\s+/g," ").trim().replace(/;+$/,"")}function Ta(d){let h=new Set,D;try{D=ma(d).filter((E)=>E.endsWith(".sql"))}catch{return h}for(let E of D)try{h.add(ct(ga(_r(d,E),"utf8")))}catch{}return h}function Ps(d,h){if(!d)return!1;let D=ha();if(mr===null)mr=Ta(D);let E=ct(d);if(E.length>0&&mr.has(E))return qn(`-- Migration already in the corpus, not writing it again: ${h}`),!1;Rr++;let V=Lr?String(Rr).padStart(10,"0"):String(Math.floor(Date.now()/1000)+Rr),ke=`${V}-${h}.sql`;if(!Lr){let Ke=Number(V);while(Xr(_r(D,ke)))Ke+=1,V=String(Ke),ke=`${V}-${h}.sql`}let xe=_r(D,ke);return ya(xe,`${ot}
372
- ${d}`),qn(`-- Migration file created: ${ke}`),sr++,qr.push(ke),mr?.add(E),!0}function At(d,h){return d==="integer"&&h==="bigint"||d==="string"&&h==="text"}function As(d){if(d.endsWith("_id"))return"bigint";if(d.endsWith("_at"))return"datetime";if(d.startsWith("is_")||d.startsWith("has_"))return"boolean";return}function Os(d){if(typeof d==="string"||typeof d==="number"||typeof d==="boolean"||typeof d==="bigint"||d instanceof Date)return d;return}function ba(d){if(d&&typeof d==="object"&&"name"in d){let h=d;if(h.name==="enum"||h.getRules&&Array.isArray(h.getRules())){if(h.enumValues&&Array.isArray(h.enumValues))return h.enumValues.map((D)=>String(D));if(h._values&&Array.isArray(h._values))return h._values.map((D)=>String(D));if(h.values&&Array.isArray(h.values))return h.values.map((D)=>String(D))}}if(d&&typeof d==="object"){let h=d,D=h.allowedValues||h.enumValues||h._values||h.values;if(Array.isArray(D)&&D.length>0)return D.map((E)=>String(E))}return}function Gr(d){if(!d?.rules||!Array.isArray(d.rules))return;for(let h of d.rules)if(h?.name==="max"||h?.name==="maxLength"){if(h.params&&typeof h.params.max==="number")return h.params.max;if(Array.isArray(h.args)&&typeof h.args[0]==="number")return h.args[0];if(typeof h.value==="number")return h.value;if(typeof h.expectedValue==="number")return h.expectedValue}return}var zr=767;function Sa(d){if(!d||typeof d!=="object")return;let h=d;if(h.name)switch(String(h.name).toLowerCase()){case"string":{let E=Gr(h);return E&&E>zr?"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(h.type){let D=String(h.type).toLowerCase();if(D==="string"||D==="text")return"string";if(D==="integer"||D==="int")return"integer";if(D==="bigint")return"bigint";if(D==="float")return"float";if(D==="number")return"integer";if(D==="boolean")return"boolean";if(D==="date")return"date";if(D==="datetime")return"datetime";if(D==="timestamptz"||D==="timestamp_tz")return"timestamptz";if(D==="json")return"json"}return}function wa(d){if(typeof d!=="string")return;switch(d.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 W(d,h){let D=st(d),E=[];for(let Ke of Object.keys(d)){let Ie=d[Ke],Ve=p(Ie),gt=Ie.primaryKey??"id",pt=Ie.autoIncrement!==!1,xt=Ie.attributes??{},ht=[],Jt=[];if(!xt[gt])ht.push({name:ar(gt),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let jt=new Map,Tn=M(Ie.belongsTo).length>0,Fe=new Set(Object.keys(xt).map((yt)=>ar(yt))),Ue=new Set;for(let yt of Fe){if(!yt.endsWith("_type"))continue;let wt=`${yt.slice(0,-5)}_id`;if(Fe.has(wt))Ue.add(wt)}for(let yt of M(Ie.belongsTo)){let wt=yt.foreignKey??`${ar(yt.model)}_id`,$t=D.modelToTable[yt.model];if($t)jt.set(wt,{table:$t,onDelete:yt.onDelete})}for(let yt of Object.keys(xt)){let wt=xt[yt],$t=ar(yt),vt=Boolean(wt.validation?.rule?.isRequired),Wt=yt===gt?!1:wt.nullable??!(wt.required??vt),Et,Ot,Ht=yt===gt;if(Et=wa(wt.type)??Sa(wt.validation?.rule),Et==="string"){let _t=Gr(wt.validation?.rule);if(_t&&_t>zr)Et="text"}if(!Et||Et==="enum"){let _t=ba(wt.validation?.rule);if(_t&&_t.length>0)Et="enum",Ot=_t}if(!Et)Et=As($t);if(!Et){let _t=Os(wt.default);if(typeof _t==="string")Et=_t.length>255?"text":"string";else if(typeof _t==="number")Et=Number.isInteger(_t)?"integer":"float";else if(typeof _t==="boolean")Et="boolean";else if(typeof _t==="bigint")Et="bigint";else if(_t instanceof Date)Et="datetime"}if(!Et)Et=Ht?"bigint":"string";let Vt=Et==="string"?Gr(wt.validation?.rule):void 0,zt={name:$t,type:Et,isPrimaryKey:Ht,isUnique:Boolean(wt.unique),isNullable:Wt,hasDefault:typeof wt.default<"u",defaultValue:Os(wt.default),enumValues:Ot,maxLength:typeof Vt==="number"&&Vt>0&&Vt<=zr?Vt:void 0};if($t.endsWith("_id")&&wt.foreignKey!==!1&&!Ue.has($t))if(typeof wt.foreignKey==="object"&&wt.foreignKey!==null){let _t=wt.foreignKey;if(zt.references={table:_t.table,column:_t.column??"id",onDelete:_t.onDelete,onUpdate:_t.onUpdate},_t.nullable!==void 0)zt.isNullable=_t.nullable}else{let _t=jt.get($t),Sn=$t.replace(/_id$/,"").replace(/(^|_)([a-z])/g,($n,Cn,Fn)=>Fn.toUpperCase()),En=_t?.table??(Tn?void 0:D.modelToTable[Sn]);if(En){let $n=D.primaryKeys[En]??"id";zt.references={table:En,column:$n,onDelete:_t?.onDelete}}}ht.push(zt)}let ve=M(Ie.belongsTo);for(let yt of ve){let wt=yt.foreignKey??`${ar(yt.model)}_id`;if(ht.some((Wt)=>Wt.name===wt))continue;let $t=D.modelToTable[yt.model],vt=$t?D.primaryKeys[$t]??"id":void 0;ht.push({name:wt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:$t&&vt&&!Ue.has(wt)?{table:$t,column:vt,onDelete:yt.onDelete}:void 0})}let Ne=Ie.traits;if(Ne?.useTimestamps??Ne?.timestampable??!1){if(!ht.some((yt)=>yt.name==="created_at"))ht.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g});if(!ht.some((yt)=>yt.name==="updated_at"))ht.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ne?.useSoftDeletes??Ne?.softDeletable??!1){if(!ht.some((yt)=>yt.name==="deleted_at"))ht.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ne?.useUuid??!1){if(!ht.some((yt)=>yt.name==="uuid"))ht.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let yt of Ie.indexes??[])Jt.push({name:yt.name,columns:yt.columns.map((wt)=>ar(wt)),type:yt.unique?"unique":"index",where:yt.where});for(let yt of ht)if(yt.isUnique&&!yt.isPrimaryKey)Jt.push({name:`${Ve}_${yt.name}_unique`,columns:[yt.name],type:"unique"});let qt=Array.isArray(Ie.shardKey)?Ie.shardKey.map(ar):void 0,Lt=Array.isArray(Ie.sortKey)?Ie.sortKey.map(ar):void 0,Dt=Ie.tableKind;E.push({table:Ve,columns:ht,indexes:Jt,shardKey:qt,sortKey:Lt,tableKind:Dt})}let V=new Set(E.map((Ke)=>Ke.table));function ke(Ke){if(!V.has(Ke.table))V.add(Ke.table),E.push(Ke)}for(let Ke of Object.keys(d)){let Ie=d[Ke],Ve=Ie?.traits??{},gt=p(Ie),pt=Hr(gt);if(Ve.likeable){let xt=typeof Ve.likeable==="object"?Ve.likeable:{},ht=xt.table||`${gt}_likes`,Jt=xt.foreignKey||`${pt}_id`;ke({table:ht,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:Jt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:gt,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${ht}_user_target_unique`,columns:["user_id",Jt],type:"unique"}]})}if(Ve.taggable)ke({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:g},{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"}]}),ke({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:g},{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(Ve.categorizable)ke({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:g},{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"}]}),ke({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:g},{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 Ke of Object.keys(d)){let Ie=d[Ke],Ve=Ie?.belongsToMany;if(!Ve||typeof Ve!=="object"||Array.isArray(Ve))continue;let gt=p(Ie),pt=Hr(gt);for(let[xt,ht]of Object.entries(Ve)){let Jt=ht;if(!Jt||typeof Jt!=="object")continue;if(Jt.through)continue;let jt=Jt.pivot;if(!jt||!jt.columns&&!jt.timestamps&&!jt.uniques)continue;let Tn=Jt.model,Ue=d[Tn]?.table||`${String(Tn).toLowerCase()}s`,ve=Hr(Ue),Ne=Jt.table||[pt,ve].sort().join("_"),St=Jt.foreignKey||`${pt}_id`,He=Jt.relatedKey||`${ve}_id`,Gt=new Set([St,He,...Object.keys(jt.columns??{})]),qt=new Set;for(let $t of Gt){if(!$t.endsWith("_type"))continue;let vt=`${$t.slice(0,-5)}_id`;if(Gt.has(vt))qt.add(vt)}let Lt=($t,vt)=>qt.has($t)?void 0:{table:vt,column:"id"},Dt=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:St,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Lt(St,gt)},{name:He,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Lt(He,Ue)}];if(jt.columns)for(let[$t,vt]of Object.entries(jt.columns)){let Wt=vt,Et=As($t)??"string";Dt.push({name:$t,type:Et,isPrimaryKey:!1,isUnique:!1,isNullable:Wt?.nullable??!1,hasDefault:Wt?.default!==void 0,defaultValue:Wt?.default})}if(jt.timestamps)Dt.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g}),Dt.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let yt=[],wt=jt.uniques&&jt.uniques.length>0?jt.uniques:[[St,He]];for(let $t=0;$t<wt.length;$t++){let vt=wt[$t];yt.push({name:`${Ne}_${vt.join("_")}_unique${$t>0?`_${$t}`:""}`,columns:[...vt],type:"unique"})}ke({table:Ne,columns:Dt,indexes:yt})}}let xe=new Map(E.map((Ke)=>[Ke.table,Ke]));for(let Ke of E)for(let Ie of Ke.columns){if(!Ie.references)continue;let Ve=xe.get(Ie.references.table)?.columns.find((gt)=>gt.name===Ie.references.column);if(!Ve||Ie.type===Ve.type)continue;Ie.type=Ve.type,Ie.maxLength=Ve.maxLength,Ie.enumValues=Ve.enumValues,Ie.enumTypeName=Ve.enumTypeName}return{dialect:h.dialect,vitessSharded:h.vitessSharded,tables:E}}function Ee(d,h={}){Rr=0,sr=0,or=0,qr=[],mr=null,Lr=!0;let D=h.dryRun?()=>!1:Ps,E=[],V=f(d.dialect,{vitessSharded:d.vitessSharded}),{tables:ke,deferredForeignKeys:xe}=vs(d.tables,d.dialect);for(let[Ie,Ve]of ke.entries()){let gt={...Ve,columns:Ve.columns.map((jt)=>xe.has(gr(Ve.table,jt.name))?{...jt,references:void 0}:jt)},pt=[],xt=new Set;for(let jt of gt.columns)if(jt.type==="enum"&&jt.enumValues&&jt.enumValues.length>0){let Tn=`${gt.table}_${jt.name}_type`;if(jt.enumTypeName=Tn,!xt.has(Tn)){let Fe=V.createEnumType(Tn,jt.enumValues);if(Fe)pt.push(Fe);xt.add(Tn)}}let ht=V.createTable(gt);pt.push(ht);for(let jt of gt.indexes)pt.push(V.createIndex(gt.table,jt,gt.columns));if(Ie===ke.length-1)for(let jt of ke)for(let Tn of jt.columns){if(!Tn.references||!xe.has(gr(jt.table,Tn.name)))continue;let Fe=V.addForeignKey(jt.table,Tn.name,Tn.references.table,Tn.references.column,Tn.references.onDelete,Tn.references.onUpdate);if(Fe)pt.push(Fe)}E.push(...pt);let Jt=pt.join(`
371
+ `).replace(/\s+/g," ").trim().replace(/;+$/,"")}function Ta(d){let h=new Set,D;try{D=ma(d).filter((E)=>E.endsWith(".sql"))}catch{return h}for(let E of D)try{h.add(ct(ga(_r(d,E),"utf8")))}catch{}return h}function Ps(d,h){if(!d)return!1;let D=ha();if(mr===null)mr=Ta(D);let E=ct(d);if(E.length>0&&mr.has(E))return Ln(`-- Migration already in the corpus, not writing it again: ${h}`),!1;Rr++;let V=qr?String(Rr).padStart(10,"0"):String(Math.floor(Date.now()/1000)+Rr),ke=`${V}-${h}.sql`;if(!qr){let Ke=Number(V);while(Xr(_r(D,ke)))Ke+=1,V=String(Ke),ke=`${V}-${h}.sql`}let xe=_r(D,ke);return ya(xe,`${ot}
372
+ ${d}`),Ln(`-- Migration file created: ${ke}`),sr++,Lr.push(ke),mr?.add(E),!0}function At(d,h){return d==="integer"&&h==="bigint"||d==="string"&&h==="text"}function As(d){if(d.endsWith("_id"))return"bigint";if(d.endsWith("_at"))return"datetime";if(d.startsWith("is_")||d.startsWith("has_"))return"boolean";return}function Os(d){if(typeof d==="string"||typeof d==="number"||typeof d==="boolean"||typeof d==="bigint"||d instanceof Date)return d;return}function ba(d){if(d&&typeof d==="object"&&"name"in d){let h=d;if(h.name==="enum"||h.getRules&&Array.isArray(h.getRules())){if(h.enumValues&&Array.isArray(h.enumValues))return h.enumValues.map((D)=>String(D));if(h._values&&Array.isArray(h._values))return h._values.map((D)=>String(D));if(h.values&&Array.isArray(h.values))return h.values.map((D)=>String(D))}}if(d&&typeof d==="object"){let h=d,D=h.allowedValues||h.enumValues||h._values||h.values;if(Array.isArray(D)&&D.length>0)return D.map((E)=>String(E))}return}function Gr(d){if(!d?.rules||!Array.isArray(d.rules))return;for(let h of d.rules)if(h?.name==="max"||h?.name==="maxLength"){if(h.params&&typeof h.params.max==="number")return h.params.max;if(Array.isArray(h.args)&&typeof h.args[0]==="number")return h.args[0];if(typeof h.value==="number")return h.value;if(typeof h.expectedValue==="number")return h.expectedValue}return}var zr=767;function Sa(d){if(!d||typeof d!=="object")return;let h=d;if(h.name)switch(String(h.name).toLowerCase()){case"string":{let E=Gr(h);return E&&E>zr?"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(h.type){let D=String(h.type).toLowerCase();if(D==="string"||D==="text")return"string";if(D==="integer"||D==="int")return"integer";if(D==="bigint")return"bigint";if(D==="float")return"float";if(D==="number")return"integer";if(D==="boolean")return"boolean";if(D==="date")return"date";if(D==="datetime")return"datetime";if(D==="timestamptz"||D==="timestamp_tz")return"timestamptz";if(D==="json")return"json"}return}function wa(d){if(typeof d!=="string")return;switch(d.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 W(d,h){let D=st(d),E=[];for(let Ke of Object.keys(d)){let ve=d[Ke],Ve=p(ve),gt=ve.primaryKey??"id",pt=ve.autoIncrement!==!1,xt=ve.attributes??{},ht=[],Jt=[];if(!xt[gt])ht.push({name:ar(gt),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let jt=new Map,Tn=M(ve.belongsTo).length>0,Fe=new Set(Object.keys(xt).map((yt)=>ar(yt))),Ue=new Set;for(let yt of Fe){if(!yt.endsWith("_type"))continue;let wt=`${yt.slice(0,-5)}_id`;if(Fe.has(wt))Ue.add(wt)}for(let yt of M(ve.belongsTo)){let wt=yt.foreignKey??`${ar(yt.model)}_id`,$t=D.modelToTable[yt.model];if($t)jt.set(wt,{table:$t,onDelete:yt.onDelete})}for(let yt of Object.keys(xt)){let wt=xt[yt],$t=ar(yt),vt=Boolean(wt.validation?.rule?.isRequired),Wt=yt===gt?!1:wt.nullable??!(wt.required??vt),Et,Ot,Ht=yt===gt;if(Et=wa(wt.type)??Sa(wt.validation?.rule),Et==="string"){let _t=Gr(wt.validation?.rule);if(_t&&_t>zr)Et="text"}if(!Et||Et==="enum"){let _t=ba(wt.validation?.rule);if(_t&&_t.length>0)Et="enum",Ot=_t}if(!Et)Et=As($t);if(!Et){let _t=Os(wt.default);if(typeof _t==="string")Et=_t.length>255?"text":"string";else if(typeof _t==="number")Et=Number.isInteger(_t)?"integer":"float";else if(typeof _t==="boolean")Et="boolean";else if(typeof _t==="bigint")Et="bigint";else if(_t instanceof Date)Et="datetime"}if(!Et)Et=Ht?"bigint":"string";let Vt=Et==="string"?Gr(wt.validation?.rule):void 0,zt={name:$t,type:Et,isPrimaryKey:Ht,isUnique:Boolean(wt.unique),isNullable:Wt,hasDefault:typeof wt.default<"u",defaultValue:Os(wt.default),enumValues:Ot,maxLength:typeof Vt==="number"&&Vt>0&&Vt<=zr?Vt:void 0};if($t.endsWith("_id")&&wt.foreignKey!==!1&&!Ue.has($t))if(typeof wt.foreignKey==="object"&&wt.foreignKey!==null){let _t=wt.foreignKey;if(zt.references={table:_t.table,column:_t.column??"id",onDelete:_t.onDelete,onUpdate:_t.onUpdate},_t.nullable!==void 0)zt.isNullable=_t.nullable}else{let _t=jt.get($t),Sn=$t.replace(/_id$/,"").replace(/(^|_)([a-z])/g,($n,Cn,Fn)=>Fn.toUpperCase()),En=_t?.table??(Tn?void 0:D.modelToTable[Sn]);if(En){let $n=D.primaryKeys[En]??"id";zt.references={table:En,column:$n,onDelete:_t?.onDelete}}}ht.push(zt)}let _e=M(ve.belongsTo);for(let yt of _e){let wt=yt.foreignKey??`${ar(yt.model)}_id`;if(ht.some((Wt)=>Wt.name===wt))continue;let $t=D.modelToTable[yt.model],vt=$t?D.primaryKeys[$t]??"id":void 0;ht.push({name:wt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:$t&&vt&&!Ue.has(wt)?{table:$t,column:vt,onDelete:yt.onDelete}:void 0})}let Ne=ve.traits;if(Ne?.useTimestamps??Ne?.timestampable??!1){if(!ht.some((yt)=>yt.name==="created_at"))ht.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g});if(!ht.some((yt)=>yt.name==="updated_at"))ht.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ne?.useSoftDeletes??Ne?.softDeletable??!1){if(!ht.some((yt)=>yt.name==="deleted_at"))ht.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Ne?.useUuid??!1){if(!ht.some((yt)=>yt.name==="uuid"))ht.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let yt of ve.indexes??[])Jt.push({name:yt.name,columns:yt.columns.map((wt)=>ar(wt)),type:yt.unique?"unique":"index",where:yt.where});for(let yt of ht)if(yt.isUnique&&!yt.isPrimaryKey)Jt.push({name:`${Ve}_${yt.name}_unique`,columns:[yt.name],type:"unique"});let Lt=Array.isArray(ve.shardKey)?ve.shardKey.map(ar):void 0,qt=Array.isArray(ve.sortKey)?ve.sortKey.map(ar):void 0,Dt=ve.tableKind;E.push({table:Ve,columns:ht,indexes:Jt,shardKey:Lt,sortKey:qt,tableKind:Dt})}let V=new Set(E.map((Ke)=>Ke.table));function ke(Ke){if(!V.has(Ke.table))V.add(Ke.table),E.push(Ke)}for(let Ke of Object.keys(d)){let ve=d[Ke],Ve=ve?.traits??{},gt=p(ve),pt=Hr(gt);if(Ve.likeable){let xt=typeof Ve.likeable==="object"?Ve.likeable:{},ht=xt.table||`${gt}_likes`,Jt=xt.foreignKey||`${pt}_id`;ke({table:ht,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:Jt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:gt,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${ht}_user_target_unique`,columns:["user_id",Jt],type:"unique"}]})}if(Ve.taggable)ke({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:g},{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"}]}),ke({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:g},{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(Ve.categorizable)ke({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:g},{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"}]}),ke({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:g},{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 Ke of Object.keys(d)){let ve=d[Ke],Ve=ve?.belongsToMany;if(!Ve||typeof Ve!=="object"||Array.isArray(Ve))continue;let gt=p(ve),pt=Hr(gt);for(let[xt,ht]of Object.entries(Ve)){let Jt=ht;if(!Jt||typeof Jt!=="object")continue;if(Jt.through)continue;let jt=Jt.pivot;if(!jt||!jt.columns&&!jt.timestamps&&!jt.uniques)continue;let Tn=Jt.model,Ue=d[Tn]?.table||`${String(Tn).toLowerCase()}s`,_e=Hr(Ue),Ne=Jt.table||[pt,_e].sort().join("_"),St=Jt.foreignKey||`${pt}_id`,He=Jt.relatedKey||`${_e}_id`,Gt=new Set([St,He,...Object.keys(jt.columns??{})]),Lt=new Set;for(let $t of Gt){if(!$t.endsWith("_type"))continue;let vt=`${$t.slice(0,-5)}_id`;if(Gt.has(vt))Lt.add(vt)}let qt=($t,vt)=>Lt.has($t)?void 0:{table:vt,column:"id"},Dt=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:St,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:qt(St,gt)},{name:He,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:qt(He,Ue)}];if(jt.columns)for(let[$t,vt]of Object.entries(jt.columns)){let Wt=vt,Et=As($t)??"string";Dt.push({name:$t,type:Et,isPrimaryKey:!1,isUnique:!1,isNullable:Wt?.nullable??!1,hasDefault:Wt?.default!==void 0,defaultValue:Wt?.default})}if(jt.timestamps)Dt.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g}),Dt.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let yt=[],wt=jt.uniques&&jt.uniques.length>0?jt.uniques:[[St,He]];for(let $t=0;$t<wt.length;$t++){let vt=wt[$t];yt.push({name:`${Ne}_${vt.join("_")}_unique${$t>0?`_${$t}`:""}`,columns:[...vt],type:"unique"})}ke({table:Ne,columns:Dt,indexes:yt})}}let xe=new Map(E.map((Ke)=>[Ke.table,Ke]));for(let Ke of E)for(let ve of Ke.columns){if(!ve.references)continue;let Ve=xe.get(ve.references.table)?.columns.find((gt)=>gt.name===ve.references.column);if(!Ve||ve.type===Ve.type)continue;ve.type=Ve.type,ve.maxLength=Ve.maxLength,ve.enumValues=Ve.enumValues,ve.enumTypeName=Ve.enumTypeName}return{dialect:h.dialect,vitessSharded:h.vitessSharded,tables:E}}function Ee(d,h={}){Rr=0,sr=0,or=0,Lr=[],mr=null,qr=!0;let D=h.dryRun?()=>!1:Ps,E=[],V=f(d.dialect,{vitessSharded:d.vitessSharded}),{tables:ke,deferredForeignKeys:xe}=vs(d.tables,d.dialect);for(let[ve,Ve]of ke.entries()){let gt={...Ve,columns:Ve.columns.map((jt)=>xe.has(gr(Ve.table,jt.name))?{...jt,references:void 0}:jt)},pt=[],xt=new Set;for(let jt of gt.columns)if(jt.type==="enum"&&jt.enumValues&&jt.enumValues.length>0){let Tn=`${gt.table}_${jt.name}_type`;if(jt.enumTypeName=Tn,!xt.has(Tn)){let Fe=V.createEnumType(Tn,jt.enumValues);if(Fe)pt.push(Fe);xt.add(Tn)}}let ht=V.createTable(gt);pt.push(ht);for(let jt of gt.indexes)pt.push(V.createIndex(gt.table,jt,gt.columns));if(ve===ke.length-1)for(let jt of ke)for(let Tn of jt.columns){if(!Tn.references||!xe.has(gr(jt.table,Tn.name)))continue;let Fe=V.addForeignKey(jt.table,Tn.name,Tn.references.table,Tn.references.column,Tn.references.onDelete,Tn.references.onUpdate);if(Fe)pt.push(Fe)}E.push(...pt);let Jt=pt.join(`
373
373
 
374
- `);D(Jt,`create-${gt.table}-table`)}if(sr+or===0)qn("-- Nothing to migrate");else{let Ie=[];if(sr>0)Ie.push(`${sr} created`);if(or>0)Ie.push(`${or} updated`);qn(`-- Migration files: ${Ie.join(", ")}`)}return E}function gr(d,h){return`${d}\x00${h}`}function vs(d,h){if(h==="sqlite"||d.length<2)return{tables:d,deferredForeignKeys:new Set};let D=new Map(d.map((Ie)=>[Ie.table,Ie])),E=new Map;for(let Ie of d)E.set(Ie.table,new Set(Ie.columns.map((Ve)=>Ve.references?.table).filter((Ve)=>Boolean(Ve&&Ve!==Ie.table&&D.has(Ve)))));let V=[],ke=new Set;while(V.length<d.length){let Ie=d.find((Ve)=>!ke.has(Ve.table)&&[...E.get(Ve.table)??[]].every((gt)=>ke.has(gt)));if(!Ie)break;V.push(Ie),ke.add(Ie.table)}let xe=new Set(d.filter((Ie)=>!ke.has(Ie.table)).map((Ie)=>Ie.table)),Ke=new Set;for(let Ie of d){if(!xe.has(Ie.table))continue;for(let Ve of Ie.columns)if(Ve.references&&xe.has(Ve.references.table)&&Ve.references.table!==Ie.table)Ke.add(gr(Ie.table,Ve.name))}return V.push(...d.filter((Ie)=>xe.has(Ie.table))),{tables:V,deferredForeignKeys:Ke}}function mn(d){return Ee(d).join(`
374
+ `);D(Jt,`create-${gt.table}-table`)}if(sr+or===0)Ln("-- Nothing to migrate");else{let ve=[];if(sr>0)ve.push(`${sr} created`);if(or>0)ve.push(`${or} updated`);Ln(`-- Migration files: ${ve.join(", ")}`)}return E}function gr(d,h){return`${d}\x00${h}`}function vs(d,h){if(h==="sqlite"||d.length<2)return{tables:d,deferredForeignKeys:new Set};let D=new Map(d.map((ve)=>[ve.table,ve])),E=new Map;for(let ve of d)E.set(ve.table,new Set(ve.columns.map((Ve)=>Ve.references?.table).filter((Ve)=>Boolean(Ve&&Ve!==ve.table&&D.has(Ve)))));let V=[],ke=new Set;while(V.length<d.length){let ve=d.find((Ve)=>!ke.has(Ve.table)&&[...E.get(Ve.table)??[]].every((gt)=>ke.has(gt)));if(!ve)break;V.push(ve),ke.add(ve.table)}let xe=new Set(d.filter((ve)=>!ke.has(ve.table)).map((ve)=>ve.table)),Ke=new Set;for(let ve of d){if(!xe.has(ve.table))continue;for(let Ve of ve.columns)if(Ve.references&&xe.has(Ve.references.table)&&Ve.references.table!==ve.table)Ke.add(gr(ve.table,Ve.name))}return V.push(...d.filter((ve)=>xe.has(ve.table))),{tables:V,deferredForeignKeys:Ke}}function mn(d){return Ee(d).join(`
375
375
  `)}function hn(d,h){return Mt(d,h).join(`
376
- `)}function ut(d){let h=ri("crypto");function D(V){if(V==null||typeof V!=="object"||V instanceof Date)return V;if(Array.isArray(V))return V.map((xe)=>D(xe));let ke={};for(let xe of Object.keys(V).sort())ke[xe]=D(V[xe]);return ke}let E=JSON.stringify(D(d));return h.createHash("sha256").update(E).digest("hex")}function Ms(d){let h={};for(let D of d)h[D.table]=D;return h}function $r(d){let h={};for(let D of d)h[D.name]=D;return h}function Pe(d,h){if(h==="sqlite"){if(d.name.endsWith("_id")&&A(d.type))return"INTEGER";switch(d.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(h==="mysql"||h==="vitess"||h==="singlestore")switch(d.type){case"string":return`VARCHAR(${d.maxLength??255})`;case"text":return"TEXT";case"boolean":return"TINYINT(1)";case"integer":return"INTEGER";case"bigint":return"BIGINT";case"float":return"REAL";case"double":return"DOUBLE";case"decimal":return"DECIMAL";case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return d.type}return d.type}var g="UTC_TIMESTAMP";function Oe(d,h){if(!d.hasDefault||d.defaultValue===void 0)return;let D=d.defaultValue;if(D instanceof Date)return D.toISOString();if(typeof D==="boolean")return D?"1":"0";if(typeof D==="bigint"||typeof D==="number")return String(D);let E=String(D).trim();if(E=E.replace(/::[\w ]+$/i,"").trim(),E.startsWith("'")&&E.endsWith("'")||E.startsWith('"')&&E.endsWith('"'))E=E.slice(1,-1);let V=E.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(V.replace(/\s+/g," ")))return g;if(h==="sqlite"&&V==="CURRENT_TIMESTAMP")return g;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(V))return V==="NOW()"?"CURRENT_TIMESTAMP":V;if(d.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(E))return"1";if(/^(?:0|f|false|no)$/i.test(E))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(E))return String(Number(E));return E}function Da(d,h,D){if(Pe(d,D)!==Pe(h,D))return!0;if(d.isNullable!==h.isNullable)return!0;if(d.hasDefault!==h.hasDefault)return!0;if(Oe(d,D)!==Oe(h,D))return!0;if(d.isUnique!==h.isUnique)return!0;if(d.type==="enum"&&h.type==="enum"){let E=(d.enumValues||[]).slice().sort().join(","),V=(h.enumValues||[]).slice().sort().join(",");if(E!==V)return!0}return!1}function Cs(d,h){return JSON.stringify([Pe(d,h),d.isPrimaryKey,d.isUnique,d.isNullable,d.hasDefault,Oe(d,h)??null,(d.enumValues??[]).slice().sort(),d.references?[d.references.table,d.references.column,d.references.onDelete??null,d.references.onUpdate??null]:null])}function Ea(d,h,D){let E=Object.keys(d).filter((gt)=>!h[gt]),V=Object.keys(h).filter((gt)=>!d[gt]),ke=new Map,xe=new Map;for(let gt of E){let pt=Cs(d[gt],D),xt=ke.get(pt)??[];xt.push(gt),ke.set(pt,xt)}for(let gt of V){let pt=Cs(h[gt],D),xt=xe.get(pt)??[];xt.push(gt),xe.set(pt,xt)}let Ke=[],Ie=new Set,Ve=new Set;for(let[gt,pt]of ke){let xt=xe.get(gt);if(pt.length===1&&xt&&xt.length===1)Ke.push({from:pt[0],to:xt[0]}),Ie.add(pt[0]),Ve.add(xt[0])}return{renames:Ke,removed:E.filter((gt)=>!Ie.has(gt)),added:V.filter((gt)=>!Ve.has(gt))}}function $a(d,h){let D=d.columns.find((E)=>E.name===h);if(D&&(D.isPrimaryKey||D.isUnique||D.references))return!0;return d.indexes.some((E)=>E.columns.includes(h))}function Ra(d,h){if(Boolean(d)!==Boolean(h))return!0;if(!d||!h)return!1;if((d.constraintNames?.length??0)>1)return!0;let D=(E)=>(E??"no action").toLowerCase();return d.table!==h.table||d.column!==h.column||D(d.onDelete)!==D(h.onDelete)||D(d.onUpdate)!==D(h.onUpdate)}function _s(d,h){return`${d.type}:${Hn(h,d.name)}:${d.columns.join(",")}`}function Yr(d,h){let D={};for(let E of d)D[_s(E,h)]=E;return D}function _e(d,h,D={}){if(!d||d.dialect!==h.dialect){let Ue=Ee(h,{dryRun:D.dryRun}),ve=h.tables.map((Ne)=>({kind:"create_table",table:Ne.table,destructive:!1,sql:""}));return{statements:Ue,operations:ve}}let E=D.applyRenames!==!1,V=D.preserveUnknownColumns===!0,ke=D.dryRun?()=>!1:Ps;Rr=0,sr=0,or=0,qr=[],mr=null,Lr=!1;let xe=[],Ke=[],Ie=f(h.dialect,{vitessSharded:h.vitessSharded}),Ve=h.dialect,gt=Ms(d.tables),pt=Ms(h.tables);for(let Ue of Object.keys(gt))if(!pt[Ue]){let ve=Ie.dropTable(Ue);xe.push(ve),Ke.push({kind:"drop_table",table:Ue,destructive:!0,sql:ve}),ke(ve,`drop-${Ue}-table`),qn(`-- Detected dropped table: ${Ue}`)}let xt=Object.keys(pt).filter((Ue)=>!gt[Ue]).map((Ue)=>pt[Ue]),{tables:ht,deferredForeignKeys:Jt}=vs(xt,Ve);for(let[Ue,ve]of ht.entries()){let Ne={...ve,columns:ve.columns.map((Lt)=>Jt.has(gr(ve.table,Lt.name))?{...Lt,references:void 0}:Lt)},St=[],He=new Set;for(let Lt of Ne.columns)if(Lt.type==="enum"&&Lt.enumValues&&Lt.enumValues.length>0){let Dt=`${Ne.table}_${Lt.name}_type`;if(Lt.enumTypeName=Dt,!He.has(Dt)){let yt=Ie.createEnumType(Dt,Lt.enumValues);if(yt)St.push(yt);He.add(Dt)}}let Gt=Ie.createTable(Ne);St.push(Gt);for(let Lt of Ne.indexes){let Dt=Ie.createIndex(Ne.table,Lt,Ne.columns);St.push(Dt),Ke.push({kind:"create_index",table:Ne.table,column:Lt.name,destructive:!1,sql:Dt})}for(let Lt of ve.columns)if(Lt.references&&!Jt.has(gr(ve.table,Lt.name)))Ke.push({kind:"add_foreign_key",table:ve.table,column:Lt.name,destructive:!1,sql:Gt});if(Ue===ht.length-1)for(let Lt of ht)for(let Dt of Lt.columns){if(!Dt.references||!Jt.has(gr(Lt.table,Dt.name)))continue;let yt=Ie.addForeignKey(Lt.table,Dt.name,Dt.references.table,Dt.references.column,Dt.references.onDelete,Dt.references.onUpdate);if(!yt)continue;St.push(yt),Ke.push({kind:"add_foreign_key",table:Lt.table,column:Dt.name,destructive:!1,sql:yt})}xe.push(...St),Ke.push({kind:"create_table",table:Ne.table,destructive:!1,sql:Gt});let qt=St.join(`
376
+ `)}function ut(d){let h=ri("crypto");function D(V){if(V==null||typeof V!=="object"||V instanceof Date)return V;if(Array.isArray(V))return V.map((xe)=>D(xe));let ke={};for(let xe of Object.keys(V).sort())ke[xe]=D(V[xe]);return ke}let E=JSON.stringify(D(d));return h.createHash("sha256").update(E).digest("hex")}function Ms(d){let h={};for(let D of d)h[D.table]=D;return h}function $r(d){let h={};for(let D of d)h[D.name]=D;return h}function Pe(d,h){if(h==="sqlite"){if(d.name.endsWith("_id")&&A(d.type))return"INTEGER";switch(d.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(h==="mysql"||h==="vitess"||h==="singlestore")switch(d.type){case"string":return`VARCHAR(${d.maxLength??255})`;case"text":return"TEXT";case"boolean":return"TINYINT(1)";case"integer":return"INTEGER";case"bigint":return"BIGINT";case"float":return"REAL";case"double":return"DOUBLE";case"decimal":return"DECIMAL";case"date":return"DATE";case"datetime":case"timestamptz":return"DATETIME";case"json":return"JSON";case"enum":return"ENUM";default:return d.type}return d.type}var g="UTC_TIMESTAMP";function Oe(d,h){if(!d.hasDefault||d.defaultValue===void 0)return;let D=d.defaultValue;if(D instanceof Date)return D.toISOString();if(typeof D==="boolean")return D?"1":"0";if(typeof D==="bigint"||typeof D==="number")return String(D);let E=String(D).trim();if(E=E.replace(/::[\w ]+$/i,"").trim(),E.startsWith("'")&&E.endsWith("'")||E.startsWith('"')&&E.endsWith('"'))E=E.slice(1,-1);let V=E.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(V.replace(/\s+/g," ")))return g;if(h==="sqlite"&&V==="CURRENT_TIMESTAMP")return g;if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(V))return V==="NOW()"?"CURRENT_TIMESTAMP":V;if(d.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(E))return"1";if(/^(?:0|f|false|no)$/i.test(E))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(E))return String(Number(E));return E}function Da(d,h,D){if(Pe(d,D)!==Pe(h,D))return!0;if(d.isNullable!==h.isNullable)return!0;if(d.hasDefault!==h.hasDefault)return!0;if(Oe(d,D)!==Oe(h,D))return!0;if(d.isUnique!==h.isUnique)return!0;if(d.type==="enum"&&h.type==="enum"){let E=(d.enumValues||[]).slice().sort().join(","),V=(h.enumValues||[]).slice().sort().join(",");if(E!==V)return!0}return!1}function Cs(d,h){return JSON.stringify([Pe(d,h),d.isPrimaryKey,d.isUnique,d.isNullable,d.hasDefault,Oe(d,h)??null,(d.enumValues??[]).slice().sort(),d.references?[d.references.table,d.references.column,d.references.onDelete??null,d.references.onUpdate??null]:null])}function Ea(d,h,D){let E=Object.keys(d).filter((gt)=>!h[gt]),V=Object.keys(h).filter((gt)=>!d[gt]),ke=new Map,xe=new Map;for(let gt of E){let pt=Cs(d[gt],D),xt=ke.get(pt)??[];xt.push(gt),ke.set(pt,xt)}for(let gt of V){let pt=Cs(h[gt],D),xt=xe.get(pt)??[];xt.push(gt),xe.set(pt,xt)}let Ke=[],ve=new Set,Ve=new Set;for(let[gt,pt]of ke){let xt=xe.get(gt);if(pt.length===1&&xt&&xt.length===1)Ke.push({from:pt[0],to:xt[0]}),ve.add(pt[0]),Ve.add(xt[0])}return{renames:Ke,removed:E.filter((gt)=>!ve.has(gt)),added:V.filter((gt)=>!Ve.has(gt))}}function $a(d,h){let D=d.columns.find((E)=>E.name===h);if(D&&(D.isPrimaryKey||D.isUnique||D.references))return!0;return d.indexes.some((E)=>E.columns.includes(h))}function Ra(d,h){if(Boolean(d)!==Boolean(h))return!0;if(!d||!h)return!1;if((d.constraintNames?.length??0)>1)return!0;let D=(E)=>(E??"no action").toLowerCase();return d.table!==h.table||d.column!==h.column||D(d.onDelete)!==D(h.onDelete)||D(d.onUpdate)!==D(h.onUpdate)}function _s(d,h){return`${d.type}:${Hn(h,d.name)}:${d.columns.join(",")}`}function Yr(d,h){let D={};for(let E of d)D[_s(E,h)]=E;return D}function Ie(d,h,D={}){if(!d||d.dialect!==h.dialect){let Ue=Ee(h,{dryRun:D.dryRun}),_e=h.tables.map((Ne)=>({kind:"create_table",table:Ne.table,destructive:!1,sql:""}));return{statements:Ue,operations:_e}}let E=D.applyRenames!==!1,V=D.preserveUnknownColumns===!0,ke=D.dryRun?()=>!1:Ps;Rr=0,sr=0,or=0,Lr=[],mr=null,qr=!1;let xe=[],Ke=[],ve=f(h.dialect,{vitessSharded:h.vitessSharded}),Ve=h.dialect,gt=Ms(d.tables),pt=Ms(h.tables);for(let Ue of Object.keys(gt))if(!pt[Ue]){let _e=ve.dropTable(Ue);xe.push(_e),Ke.push({kind:"drop_table",table:Ue,destructive:!0,sql:_e}),ke(_e,`drop-${Ue}-table`),Ln(`-- Detected dropped table: ${Ue}`)}let xt=Object.keys(pt).filter((Ue)=>!gt[Ue]).map((Ue)=>pt[Ue]),{tables:ht,deferredForeignKeys:Jt}=vs(xt,Ve);for(let[Ue,_e]of ht.entries()){let Ne={..._e,columns:_e.columns.map((qt)=>Jt.has(gr(_e.table,qt.name))?{...qt,references:void 0}:qt)},St=[],He=new Set;for(let qt of Ne.columns)if(qt.type==="enum"&&qt.enumValues&&qt.enumValues.length>0){let Dt=`${Ne.table}_${qt.name}_type`;if(qt.enumTypeName=Dt,!He.has(Dt)){let yt=ve.createEnumType(Dt,qt.enumValues);if(yt)St.push(yt);He.add(Dt)}}let Gt=ve.createTable(Ne);St.push(Gt);for(let qt of Ne.indexes){let Dt=ve.createIndex(Ne.table,qt,Ne.columns);St.push(Dt),Ke.push({kind:"create_index",table:Ne.table,column:qt.name,destructive:!1,sql:Dt})}for(let qt of _e.columns)if(qt.references&&!Jt.has(gr(_e.table,qt.name)))Ke.push({kind:"add_foreign_key",table:_e.table,column:qt.name,destructive:!1,sql:Gt});if(Ue===ht.length-1)for(let qt of ht)for(let Dt of qt.columns){if(!Dt.references||!Jt.has(gr(qt.table,Dt.name)))continue;let yt=ve.addForeignKey(qt.table,Dt.name,Dt.references.table,Dt.references.column,Dt.references.onDelete,Dt.references.onUpdate);if(!yt)continue;St.push(yt),Ke.push({kind:"add_foreign_key",table:qt.table,column:Dt.name,destructive:!1,sql:yt})}xe.push(...St),Ke.push({kind:"create_table",table:Ne.table,destructive:!1,sql:Gt});let Lt=St.join(`
377
377
 
378
- `);ke(qt,`create-${Ne.table}-table`)}let jt=new Set;for(let Ue of Object.keys(pt)){let ve=gt[Ue],Ne=pt[Ue];if(!ve)continue;let St=$r(ve.columns),He=$r(Ne.columns);for(let Gt of Object.keys(He)){let qt=He[Gt];if(qt.type!=="enum"||!qt.enumValues||qt.enumValues.length===0)continue;let Lt=`${Ne.table}_${qt.name}_type`;if(qt.enumTypeName=Lt,St[Gt])continue;if(!jt.has(Lt)){let Dt=Ie.createEnumType(Lt,qt.enumValues);if(Dt)xe.push(Dt),Ke.push({kind:"create_enum",table:Ne.table,column:qt.name,destructive:!1,sql:Dt}),ke(Dt,`create-${Lt}-enum`);jt.add(Lt)}}}for(let Ue of Object.keys(pt)){let ve=gt[Ue],Ne=pt[Ue];if(!ve)continue;let St=$r(ve.columns),He=Yr(ve.indexes,ve.table),Gt=$r(Ne.columns),qt=Yr(Ne.indexes,Ne.table),Lt=[],Dt=Object.keys(St).filter((Et)=>!Gt[Et]),yt=Object.keys(Gt).filter((Et)=>!St[Et]);if(E&&!V){let Et=Ea(St,Gt,Ve);Lt=Et.renames,Dt=Et.removed,yt=Et.added}if(V){let Et=Dt.map((Ht)=>St[Ht]),Ot=ve.indexes.filter((Ht)=>!qt[_s(Ht,ve.table)]);if(Et.length>0||Ot.length>0){if(Et.length>0)qn(`-- Keeping ${Et.length} column(s) on "${Ne.table}" no model declares: ${Dt.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(Ot.length>0)qn(`-- Keeping ${Ot.length} index(es) on "${Ne.table}" no model declares: ${Ot.map((Ht)=>Ht.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);Ne={...Ne,columns:[...Ne.columns,...Et],indexes:[...Ne.indexes,...Ot]},Gt=$r(Ne.columns),qt=Yr(Ne.indexes,Ne.table)}Dt=[]}let wt=Object.keys(Gt).filter((Et)=>St[Et]&&Da(St[Et],Gt[Et],Ve)),$t=Object.keys(Gt).filter((Et)=>St[Et]&&Ra(St[Et].references,Gt[Et].references));if(Ve==="sqlite"){if(wt.length>0||$t.length>0||Dt.some((Ot)=>$a(ve,Ot))){let Ot={},Ht=new Map(Lt.map((Sn)=>[Sn.to,Sn.from]));for(let Sn of Ne.columns)if(St[Sn.name])Ot[Sn.name]=Sn.name;else if(Ht.has(Sn.name))Ot[Sn.name]=Ht.get(Sn.name);let Vt=`_qb_tmp_${Ne.table}`,zt=0;while((gt[Vt]||pt[Vt])&&zt<100)zt+=1,Vt=`_qb_tmp_${Ne.table}_${zt}`;let _t=Ie.rebuildTable({target:Ne,tempName:Vt,columnSource:Ot});xe.push(_t);let yn=wt.some((Sn)=>St[Sn].type!==Gt[Sn].type);Ke.push({kind:"rebuild_table",table:Ne.table,destructive:Dt.length>0||yn,sql:_t});for(let Sn of Lt)Ke.push({kind:"rename_column",table:Ne.table,from:Sn.from,to:Sn.to,destructive:!1,confidence:"high",sql:_t});for(let Sn of Dt)Ke.push({kind:"drop_column",table:Ne.table,column:Sn,destructive:!0,sql:_t});qn(`-- Detected SQLite table rebuild required: ${Ne.table}`),ke(_t,`alter-${Ne.table}-table`);continue}}let vt=[],Wt=!1;for(let Et of Object.keys(He))if(!qt[Et]){let Ot=He[Et],Ht=Ie.dropIndex(Ne.table,Ot.name);vt.push(Ht),xe.push(Ht),Ke.push({kind:"drop_index",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),qn(`-- Detected dropped index: ${Ot.name} from ${Ne.table}`),Wt=!0}for(let Et of Lt){let Ot=Ie.renameColumn(Ne.table,Et.from,Et.to);vt.push(Ot),xe.push(Ot),Ke.push({kind:"rename_column",table:Ne.table,from:Et.from,to:Et.to,destructive:!1,confidence:"high",sql:Ot}),qn(`-- Detected renamed column: ${Ne.table}.${Et.from} -> ${Et.to}`),Wt=!0}for(let Et of Dt){let Ot=Ie.dropColumn(Ne.table,Et);vt.push(Ot),xe.push(Ot),Ke.push({kind:"drop_column",table:Ne.table,column:Et,destructive:!0,sql:Ot}),qn(`-- Detected dropped column: ${Ne.table}.${Et}`),Wt=!0}for(let Et of wt){let Ot=St[Et],Ht=Gt[Et],Vt=Ie.modifyColumn(Ne.table,Ht);vt.push(Vt),xe.push(Vt),Ke.push({kind:"modify_column",table:Ne.table,column:Et,destructive:Ot.type!==Ht.type&&!At(Ot.type,Ht.type),sql:Vt}),qn(`-- Detected column change: ${Ne.table}.${Et} (${Ot.type} -> ${Ht.type})`),Wt=!0}for(let Et of $t){let Ot=Gt[Et];if(!Ot.references)continue;let Ht=Ie.addForeignKey(Ne.table,Ot.name,Ot.references.table,Ot.references.column,Ot.references.onDelete,Ot.references.onUpdate,St[Et].references?.constraintNames);if(!Ht)continue;vt.push(Ht),xe.push(Ht),Ke.push({kind:"add_foreign_key",table:Ne.table,column:Et,destructive:!1,sql:Ht}),qn(`-- Detected foreign-key change: ${Ne.table}.${Et} -> ${Ot.references.table}(${Ot.references.column})`),Wt=!0}for(let Et of yt){let Ot=Gt[Et],Ht=Ie.addColumn(Ne.table,Ot);if(vt.push(Ht),xe.push(Ht),Ke.push({kind:"add_column",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),qn(`-- Detected new column: ${Ne.table}.${Ot.name}`),Wt=!0,Ot.references){let Vt=Ie.addForeignKey(Ne.table,Ot.name,Ot.references.table,Ot.references.column,Ot.references.onDelete,Ot.references.onUpdate);if(Vt)vt.push(Vt),xe.push(Vt),Ke.push({kind:"add_foreign_key",table:Ne.table,column:Ot.name,destructive:!1,sql:Vt})}}for(let Et of Object.keys(qt))if(!He[Et]){let Ot=qt[Et],Ht=Ie.createIndex(Ne.table,Ot,Ne.columns);vt.push(Ht),xe.push(Ht),Ke.push({kind:"create_index",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),qn(`-- Detected new index: ${Ot.name} in ${Ne.table}`),Wt=!0}if(Wt){let Et=vt.join(`
378
+ `);ke(Lt,`create-${Ne.table}-table`)}let jt=new Set;for(let Ue of Object.keys(pt)){let _e=gt[Ue],Ne=pt[Ue];if(!_e)continue;let St=$r(_e.columns),He=$r(Ne.columns);for(let Gt of Object.keys(He)){let Lt=He[Gt];if(Lt.type!=="enum"||!Lt.enumValues||Lt.enumValues.length===0)continue;let qt=`${Ne.table}_${Lt.name}_type`;if(Lt.enumTypeName=qt,St[Gt])continue;if(!jt.has(qt)){let Dt=ve.createEnumType(qt,Lt.enumValues);if(Dt)xe.push(Dt),Ke.push({kind:"create_enum",table:Ne.table,column:Lt.name,destructive:!1,sql:Dt}),ke(Dt,`create-${qt}-enum`);jt.add(qt)}}}for(let Ue of Object.keys(pt)){let _e=gt[Ue],Ne=pt[Ue];if(!_e)continue;let St=$r(_e.columns),He=Yr(_e.indexes,_e.table),Gt=$r(Ne.columns),Lt=Yr(Ne.indexes,Ne.table),qt=[],Dt=Object.keys(St).filter((Et)=>!Gt[Et]),yt=Object.keys(Gt).filter((Et)=>!St[Et]);if(E&&!V){let Et=Ea(St,Gt,Ve);qt=Et.renames,Dt=Et.removed,yt=Et.added}if(V){let Et=Dt.map((Ht)=>St[Ht]),Ot=_e.indexes.filter((Ht)=>!Lt[_s(Ht,_e.table)]);if(Et.length>0||Ot.length>0){if(Et.length>0)Ln(`-- Keeping ${Et.length} column(s) on "${Ne.table}" no model declares: ${Dt.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(Ot.length>0)Ln(`-- Keeping ${Ot.length} index(es) on "${Ne.table}" no model declares: ${Ot.map((Ht)=>Ht.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);Ne={...Ne,columns:[...Ne.columns,...Et],indexes:[...Ne.indexes,...Ot]},Gt=$r(Ne.columns),Lt=Yr(Ne.indexes,Ne.table)}Dt=[]}let wt=Object.keys(Gt).filter((Et)=>St[Et]&&Da(St[Et],Gt[Et],Ve)),$t=Object.keys(Gt).filter((Et)=>St[Et]&&Ra(St[Et].references,Gt[Et].references));if(Ve==="sqlite"){if(wt.length>0||$t.length>0||Dt.some((Ot)=>$a(_e,Ot))){let Ot={},Ht=new Map(qt.map((Sn)=>[Sn.to,Sn.from]));for(let Sn of Ne.columns)if(St[Sn.name])Ot[Sn.name]=Sn.name;else if(Ht.has(Sn.name))Ot[Sn.name]=Ht.get(Sn.name);let Vt=`_qb_tmp_${Ne.table}`,zt=0;while((gt[Vt]||pt[Vt])&&zt<100)zt+=1,Vt=`_qb_tmp_${Ne.table}_${zt}`;let _t=ve.rebuildTable({target:Ne,tempName:Vt,columnSource:Ot});xe.push(_t);let yn=wt.some((Sn)=>St[Sn].type!==Gt[Sn].type);Ke.push({kind:"rebuild_table",table:Ne.table,destructive:Dt.length>0||yn,sql:_t});for(let Sn of qt)Ke.push({kind:"rename_column",table:Ne.table,from:Sn.from,to:Sn.to,destructive:!1,confidence:"high",sql:_t});for(let Sn of Dt)Ke.push({kind:"drop_column",table:Ne.table,column:Sn,destructive:!0,sql:_t});Ln(`-- Detected SQLite table rebuild required: ${Ne.table}`),ke(_t,`alter-${Ne.table}-table`);continue}}let vt=[],Wt=!1;for(let Et of Object.keys(He))if(!Lt[Et]){let Ot=He[Et],Ht=ve.dropIndex(Ne.table,Ot.name);vt.push(Ht),xe.push(Ht),Ke.push({kind:"drop_index",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),Ln(`-- Detected dropped index: ${Ot.name} from ${Ne.table}`),Wt=!0}for(let Et of qt){let Ot=ve.renameColumn(Ne.table,Et.from,Et.to);vt.push(Ot),xe.push(Ot),Ke.push({kind:"rename_column",table:Ne.table,from:Et.from,to:Et.to,destructive:!1,confidence:"high",sql:Ot}),Ln(`-- Detected renamed column: ${Ne.table}.${Et.from} -> ${Et.to}`),Wt=!0}for(let Et of Dt){let Ot=ve.dropColumn(Ne.table,Et);vt.push(Ot),xe.push(Ot),Ke.push({kind:"drop_column",table:Ne.table,column:Et,destructive:!0,sql:Ot}),Ln(`-- Detected dropped column: ${Ne.table}.${Et}`),Wt=!0}for(let Et of wt){let Ot=St[Et],Ht=Gt[Et],Vt=ve.modifyColumn(Ne.table,Ht);vt.push(Vt),xe.push(Vt),Ke.push({kind:"modify_column",table:Ne.table,column:Et,destructive:Ot.type!==Ht.type&&!At(Ot.type,Ht.type),sql:Vt}),Ln(`-- Detected column change: ${Ne.table}.${Et} (${Ot.type} -> ${Ht.type})`),Wt=!0}for(let Et of $t){let Ot=Gt[Et];if(!Ot.references)continue;let Ht=ve.addForeignKey(Ne.table,Ot.name,Ot.references.table,Ot.references.column,Ot.references.onDelete,Ot.references.onUpdate,St[Et].references?.constraintNames);if(!Ht)continue;vt.push(Ht),xe.push(Ht),Ke.push({kind:"add_foreign_key",table:Ne.table,column:Et,destructive:!1,sql:Ht}),Ln(`-- Detected foreign-key change: ${Ne.table}.${Et} -> ${Ot.references.table}(${Ot.references.column})`),Wt=!0}for(let Et of yt){let Ot=Gt[Et],Ht=ve.addColumn(Ne.table,Ot);if(vt.push(Ht),xe.push(Ht),Ke.push({kind:"add_column",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),Ln(`-- Detected new column: ${Ne.table}.${Ot.name}`),Wt=!0,Ot.references){let Vt=ve.addForeignKey(Ne.table,Ot.name,Ot.references.table,Ot.references.column,Ot.references.onDelete,Ot.references.onUpdate);if(Vt)vt.push(Vt),xe.push(Vt),Ke.push({kind:"add_foreign_key",table:Ne.table,column:Ot.name,destructive:!1,sql:Vt})}}for(let Et of Object.keys(Lt))if(!He[Et]){let Ot=Lt[Et],Ht=ve.createIndex(Ne.table,Ot,Ne.columns);vt.push(Ht),xe.push(Ht),Ke.push({kind:"create_index",table:Ne.table,column:Ot.name,destructive:!1,sql:Ht}),Ln(`-- Detected new index: ${Ot.name} in ${Ne.table}`),Wt=!0}if(Wt){let Et=vt.join(`
379
379
 
380
- `);ke(Et,`alter-${Ne.table}-table`)}}if(sr+or===0)qn("-- Nothing to migrate");else{let Ue=[];if(sr>0)Ue.push(`${sr} created`);if(or>0)Ue.push(`${or} updated`);qn(`-- Migration files: ${Ue.join(", ")}`)}return{statements:xe.length===0?["-- No changes detected"]:xe,operations:Ke}}function Mt(d,h,D={}){return _e(d,h,D).statements}function gn(d){return d}class Nt{get order(){return 100}get description(){return}}function pn(d){return d}function dt(d){switch(d){case"text":return"text";case"string":case"enum":return"varchar";case"integer":case"bigint":return"integer";case"float":case"double":case"decimal":return"fractional";case"boolean":return"boolean";case"date":case"datetime":case"timestamptz":return"date";case"json":return"json";default:return"other"}}function ft(d){let h=String(d??"").toLowerCase().trim();if(/^(?:bool|boolean|bit)\b/.test(h)||h==="tinyint(1)")return"boolean";if(/^(?:json|jsonb)\b/.test(h))return"json";if(/^(?:bytea|blob|binary|varbinary)\b/.test(h))return"binary";if(/^(?:date|time|timestamp|datetime)\b/.test(h))return"date";if(/(?:^|\b)(?:varchar|character varying|nvarchar|char)\b/.test(h))return"varchar";if(/^(?:text|longtext|mediumtext|tinytext|clob|citext)\b/.test(h))return"text";if(/^(?:decimal|numeric|real|double|money)\b/.test(h)||/^float\d*\b/.test(h))return"fractional";if(/^(?:integer|bigint|smallint|tinyint|serial|bigserial|smallserial|mediumint)\b/.test(h)||/^int\d*\b/.test(h))return"integer";return"other"}function mt(d,h,D){if(d===h)return!0;if(D==="sqlite"){if(d==="boolean"&&h==="integer")return!0;if((d==="date"||d==="json")&&h==="text")return!0}if(n(D)&&d==="boolean"&&h==="integer")return!0;if(d==="varchar"&&h==="text")return!0;if(d==="integer"&&h==="fractional")return!0;if(d==="other"||h==="other")return!0;return!1}async function Bt(d,h={}){let D=h.dialect??e.dialect,E=d.tables.map((Ve)=>Ve.table),V=await v({tables:E}),ke=new Map(V.map((Ve)=>[Ve.table.toLowerCase(),Ve])),xe=[],Ke=[],Ie=[];for(let Ve of d.tables){let gt=ke.get(Ve.table.toLowerCase());if(!gt){xe.push(Ve.table);continue}let pt=new Map(gt.columns.map((xt)=>[xt.name.toLowerCase(),xt]));for(let xt of Ve.columns){let ht=pt.get(xt.name.toLowerCase()),Jt=dt(xt.type);if(!ht){Ke.push({table:Ve.table,column:xt.name,expected:Jt});continue}let jt=ft(ht.sqlType);if(!mt(Jt,jt,D))Ie.push({table:Ve.table,column:xt.name,expected:Jt,actual:jt,actualSqlType:ht.sqlType})}}return{missingTables:xe,missingColumns:Ke,typeMismatches:Ie,clean:xe.length===0&&Ke.length===0&&Ie.length===0}}function Pt(d){if(d.clean)return"";let h=[];if(d.missingTables.length>0)h.push(` Missing tables: ${d.missingTables.join(", ")}`);for(let V of d.missingColumns.slice(0,10))h.push(` \u2022 ${V.table}.${V.column} is missing (models declare ${V.expected})`);for(let V of d.typeMismatches.slice(0,10))h.push(` \u2022 ${V.table}.${V.column} is ${V.actualSqlType}, models declare ${V.expected}`);let D=Math.min(d.missingColumns.length,10)+Math.min(d.typeMismatches.length,10),E=d.missingColumns.length+d.typeMismatches.length;if(E>D)h.push(` + ${E-D} more`);return["The live schema does not match the models.",...h,"","Migrations will NOT fix this on their own: the runner only applies files that have","not run yet, and a corrected `CREATE TABLE IF NOT EXISTS` is a no-op against a table","that already exists. Regenerate and apply the difference, or rebuild the schema."].join(`
381
- `)}async function Ba(d,h,D){if(D.length===0)return;let E=Js(cr());try{await Hs(d,h);for(let V of D)await Kr(d,V,h),Dn(`-- \u2713 Recorded applied migration: ${V}`)}catch(V){Dn(`-- Could not record applied migrations (the schema change itself succeeded): ${V instanceof Error?V.message:String(V)}`)}}function js(d){try{return lt(xr(d,"utf8"))}catch{return!1}}function Aa(d){let h=d instanceof Error?d.message:String(d);return/duplicate column name/i.test(h)||/duplicate key name/i.test(h)||/duplicate foreign key constraint name/i.test(h)||/\balready exists\b/i.test(h)}function Dn(d){if(e.verbose)console.log(d)}function Ws(d){return Qn(d,e.snapshotDir||".qb")}function ts(d,h){return Qn(Ws(d),`model-snapshot.${h}.json`)}function Oa(d,h){let D=ts(d,h);if(!Zn(D))return;try{let E=xr(D,"utf8"),V=JSON.parse(E);if(V?.plan&&Array.isArray(V.plan.tables)&&V.plan.dialect)return V.plan;if(Array.isArray(V?.tables)&&V?.dialect)return V;Dn("-- Invalid snapshot format, treating as no previous state");return}catch(E){Dn(`-- Could not load snapshot, treating as no previous state: ${E instanceof Error?E.message:String(E)}`);return}}function Vs(d,h,D){let E=ts(d,h),V=Ws(d),ke=ut(D);if(Zn(E))try{let Ke=JSON.parse(xr(E,"utf8"));if(Ke?.hash===ke&&Ke?.dialect===h&&Ke?.plan){Dn("-- Model snapshot unchanged");return}}catch{}if(!Zn(V))Ks(V,{recursive:!0}),Dn(`-- Created snapshot directory: ${V}`);let xe={plan:D,hash:ke,dialect:h,updatedAt:new Date().toISOString()};Qs(E,JSON.stringify(xe,null,2)),Dn(`-- Model snapshot saved to ${E}`)}function Ye(d,h={}){let D=h.dialect??d.dialect;Vs(h.workspaceRoot??cr(),D,d)}function cr(){return Vr()}function Js(d){let h=rr(d,e.migrationDir);if(!Zn(h))Ks(h,{recursive:!0}),Dn(`-- Created SQL directory: ${h}`);return h}async function b(d,h={}){if(await Q(),!d)d=Qn(es.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=cr(),V=await u({modelsDir:d}),ke=W(V,{dialect:D,vitessSharded:h.vitessSharded}),xe,Ke=!1;if(!h.full)if(xe=Oa(E,D),xe)Dn("-- Comparing with stored model snapshot");else{let ht=Qn(d,`.qb-migrations.${D}.json`),Jt=String(h.state||ht);if(Zn(Jt))try{let jt=xr(Jt,"utf8"),Tn=JSON.parse(jt);if(xe=Tn?.plan&&Tn.plan.tables?Tn.plan:Tn?.tables?Tn:void 0,xe)Dn("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!xe||h.fromDb)try{let jt=await cs(D),Tn=new Set(ke.tables.map((Ue)=>Ue.table)),Fe=jt.tables.filter((Ue)=>Tn.has(Ue.table));if(Fe.length>0)xe={dialect:jt.dialect,tables:Fe},Ke=!0,Dn(`-- No snapshot; reconciling against live database (${Fe.length} matching table${Fe.length===1?"":"s"})`)}catch(jt){Dn(`-- Could not introspect live database, treating as no previous state: ${jt instanceof Error?jt.message:String(jt)}`)}if(!xe)Dn("-- No previous snapshot found, generating full migration")}else Dn("-- Full migration requested, ignoring any previous state");let Ie=h.full?{statements:Ee(ke,{dryRun:h.dryRun}),operations:ke.tables.map((ht)=>({kind:"create_table",table:ht.table,destructive:!1,sql:""}))}:_e(xe,ke,{applyRenames:h.applyRenames,dryRun:h.dryRun,preserveUnknownColumns:Ke}),{statements:Ve,operations:gt}=Ie,pt=Ve.join(`
382
- `),xt=Ve.some((ht)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(ht));if(h.apply){let ht=xa(Qn(Na(),"qb-migrate-")),Jt=Qn(ht,"migration.sql");try{if(xt){Qs(Jt,pt);let jt=i();await jt.file(Jt),Dn("-- Migration applied"),await Ba(jt,D,at())}else Dn("-- No changes; nothing to apply")}catch(jt){throw console.error("-- Migration failed:",jt),jt}finally{Us(ht,{recursive:!0,force:!0})}}if(!h.dryRun)Vs(E,D,ke);return{sql:pt,sqlStatements:Ve,hasChanges:xt,plan:ke,operations:gt}}function Ma(d,h){if(d===void 0)return[Js(h)];let D=Array.isArray(d)?d:[d];if(D.length===0)throw Error("executeMigration was given an empty list of directories. Pass at least one directory, or omit the argument to use the configured migrationDir.");return D.map((E)=>ka(E)?E:Qn(h,E))}function Ca(d){let h=new Map;for(let D of d){if(!Zn(D))throw Error(`Migration directory not found: ${D}`);for(let E of Fs(D).filter((V)=>V.endsWith(".sql"))){let V=h.get(E);if(V!==void 0)throw Error(`Duplicate migration file name across directories: "${E}" appears in both ${V} and ${Qn(D,E)}. Migrations are recorded by file name, so names must be unique across every directory in a run.`);h.set(E,Qn(D,E))}}return[...h].map(([D,E])=>({name:D,path:E})).sort((D,E)=>D.name<E.name?-1:D.name>E.name?1:0)}var Ls="bun-query-builder:migrate",Ia=/\bCONCURRENTLY\b|^\s*VACUUM\b|^\s*BEGIN\s*(?:;|TRANSACTION\b)|^\s*PRAGMA\s+foreign_keys\b/im;function qs(d){return d==="postgres"||d==="sqlite"}async function Pa(d,h){if(d==="sqlite")return await h();let D=i(),E;try{E=await D.reserve()}catch{return await h()}let V=!1;try{return await E.advisoryLock(Ls),V=!0,await h()}finally{try{if(V)await E.advisoryUnlock(Ls)}finally{E.release?.()}}}async function k(d){await Q();let h=cr(),D=e.dialect||"postgres",E=Ca(Ma(d,h));if(E.length===0)return Dn("-- No migration files found to execute"),!0;Dn(`-- Found ${E.length} script files to execute`);try{let V=i();return await Pa(D,async()=>{await Hs(V,D);let ke=await qa(V,D),xe=E.filter((Ke)=>!ke.includes(Ke.name));if(xe.length===0)return Dn("-- No pending migrations to execute"),!0;Dn(`-- Executing ${xe.length} migration${xe.length===1?"":"s"}`);for(let{name:Ke,path:Ie}of xe){Dn(`-- Executing: ${Ke}`);try{if(qs(D)&&!Ia.test(xr(Ie,"utf-8")))await V.transaction(async(gt)=>{await gt.file(Ie),await Kr(gt,Ke,D)});else if(await V.file(Ie),await Kr(V,Ke,D),!qs(D))Dn(`-- (${D} commits DDL implicitly, so ${Ke} was not applied atomically)`);else Dn(`-- (${Ke} contains a statement that cannot run in a transaction, so it was not applied atomically)`);Dn(`-- \u2713 Migration ${Ke} executed and recorded`)}catch(Ve){if(js(Ie)&&Aa(Ve)){await Kr(V,Ke,D),Dn(`-- \u2713 Migration ${Ke} was already applied; recorded it (${Ve instanceof Error?Ve.message:String(Ve)})`);continue}throw console.error(`-- \u2717 Migration ${Ke} failed:`,Ve),Ve}}return Dn("-- All migrations executed successfully"),!0})}catch(V){throw console.error("-- Migration execution failed:",V),V}return!0}async function C(d,h={}){if(await Q(),!d)d=Qn(es.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=f(D),V=cr(),ke=async(xe)=>{let Ke=E.dropTable(xe);await We(async(Ie)=>{if(D==="sqlite")await Ie.unsafe("PRAGMA foreign_keys = OFF").execute();if(D==="mysql"||D==="vitess")await Ie.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{await Ie.unsafe(Ke).execute()}finally{if(D==="sqlite")await Ie.unsafe("PRAGMA foreign_keys = ON").execute();if(D==="mysql"||D==="vitess")await Ie.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}})};try{try{await ke("migrations"),Dn("-- Dropped migrations table")}catch(Ie){console.error(Ie)}let xe=[],Ke=[];try{let Ie=await u({modelsDir:d}),Ve=W(Ie,{dialect:D});xe=Ve.tables.map((pt)=>pt.table);let gt=new Set;for(let pt of Ve.tables)for(let xt of pt.columns)if(xt.type==="enum"&&xt.enumValues&&xt.enumValues.length>0){let ht=`${pt.table}_${xt.name}_type`;gt.add(ht)}Ke=Array.from(gt)}catch(Ie){console.error(Ie),xe=[],Ke=[]}if(xe.length===0)Dn("-- No tables found to drop");else{Dn(`-- Dropping ${xe.length} tables: ${xe.join(", ")}`);for(let Ie of xe.reverse())try{await ke(Ie),Dn(`-- Dropped table: ${Ie}`)}catch(Ve){console.error(Ve),Dn(`-- Table ${Ie} may not exist, skipping drop`)}}if(Ke.length>0){Dn(`-- Dropping ${Ke.length} enum types: ${Ke.join(", ")}`);for(let Ie of Ke)try{let Ve=E.dropEnumType(Ie);if(Ve)await We(async(gt)=>{await gt.unsafe(Ve).execute(),Dn(`-- Dropped enum type: ${Ie}`)})}catch(Ve){console.error(Ve),Dn(`-- Enum type ${Ie} may not exist, skipping drop`)}}else Dn("-- No enum types found to drop");if(xe.length>0&&!h.preserveMigrationState)try{await va(d,V,h)}catch(Ie){console.error(Ie),Dn("-- Could not clean up migration files")}else if(xe.length===0)Dn("-- No models directory found; keeping committed migration files in place");else Dn("-- Preserving migration files and model snapshot for fresh replay");if(!h.preserveMigrationState)try{await La(V)}catch(Ie){console.error(Ie),Dn("-- Could not clear generated directory")}return Dn("-- Database reset completed successfully"),!0}catch(xe){return console.error("-- Database reset failed:",xe),!1}}async function va(d,h,D={}){if(!d)d=Qn(es.cwd(),"app/Models");if(!h)h=cr();let E=String(D.dialect||e.dialect||"postgres"),V=ts(h,E);if(Zn(V))Zr(V),Dn(`-- Removed model snapshot file: ${V}`);let ke=Qn(d,`.qb-migrations.${E}.json`),xe=String(D.state||ke);if(Zn(xe))Zr(xe),Dn(`-- Removed legacy migration state file: ${xe}`);_a(rr(h,e.migrationDir))}function _a(d){if(!Zn(d))return;let h=0,D=[];for(let E of Fs(d).filter((V)=>V.endsWith(".sql"))){if(!js(Qn(d,E))){D.push(E);continue}Zr(Qn(d,E)),Dn(`-- Removed generated migration file: ${E}`),h+=1}if(Dn(`-- Cleaned up ${h} generated migration file${h===1?"":"s"} from migrations directory`),D.length>0)Dn(`-- Kept ${D.length} hand-written migration${D.length===1?"":"s"}: ${D.slice(0,5).join(", ")}${D.length>5?`, +${D.length-5} more`:""}`)}async function La(d){if(!d)d=cr();let h=Qn(d,"generated");if(Zn(h))try{Us(h,{recursive:!0,force:!0}),Dn("-- Cleared generated directory")}catch(D){console.error("-- Failed to clear generated directory:",D)}}async function Hs(d,h){let E=f(h).createMigrationsTable();try{await d.unsafe(E).execute(),Dn("-- Migrations table ready")}catch(V){throw console.error("-- Failed to create migrations table:",V),V}}async function qa(d,h){let D=f(h);try{return(await d.unsafe(D.getExecutedMigrationsQuery()).execute()).map((V)=>V.migration)}catch(E){return console.error("-- Failed to get executed migrations:",E),[]}}async function Kr(d,h,D){let E=f(D);try{Dn(`-- Recording migration: ${h}`),await d.unsafe(E.recordMigrationQuery(),[h]).execute(),Dn(`-- Successfully recorded migration: ${h}`)}catch(V){throw console.error(`-- Failed to record migration ${h}:`,V),V}}
383
- export{J,S,Zt,en,l,kt,Ct,i,Qe,Ge,z,Y,X,N,Z,ee,te,ne,B,re,P,O,ie,se,_,ae,oe,Je,Be,ze,v,le,a,ce,ue,de,fe,f,Ye,b,k,C,me,he,I,ge,L,pe,K,F,R,j,ye,be,Te,we,q,Se,De,T,m,tn,nn,rn,Xe,Ze,et,tt,nt,sn,rt,Rt,an,on,ln,cn,it,un,dn,fn,$e,u,st,at,ot,lt,ct,At,W,Ee,mn,hn,ut,Pe,g,Oe,_e,Mt,gn,Nt,pn,dt,ft,mt,Bt,Pt};
380
+ `);ke(Et,`alter-${Ne.table}-table`)}}if(sr+or===0)Ln("-- Nothing to migrate");else{let Ue=[];if(sr>0)Ue.push(`${sr} created`);if(or>0)Ue.push(`${or} updated`);Ln(`-- Migration files: ${Ue.join(", ")}`)}return{statements:xe.length===0?["-- No changes detected"]:xe,operations:Ke}}function Mt(d,h,D={}){return Ie(d,h,D).statements}function gn(d){return d}class Nt{get order(){return 100}get description(){return}}function pn(d){return d}function dt(d){switch(d){case"text":return"text";case"string":case"enum":return"varchar";case"integer":case"bigint":return"integer";case"float":case"double":case"decimal":return"fractional";case"boolean":return"boolean";case"date":case"datetime":case"timestamptz":return"date";case"json":return"json";default:return"other"}}function ft(d){let h=String(d??"").toLowerCase().trim();if(/^(?:bool|boolean|bit)\b/.test(h)||h==="tinyint(1)")return"boolean";if(/^(?:json|jsonb)\b/.test(h))return"json";if(/^(?:bytea|blob|binary|varbinary)\b/.test(h))return"binary";if(/^(?:date|time|timestamp|datetime)\b/.test(h))return"date";if(/(?:^|\b)(?:varchar|character varying|nvarchar|char)\b/.test(h))return"varchar";if(/^(?:text|longtext|mediumtext|tinytext|clob|citext)\b/.test(h))return"text";if(/^(?:decimal|numeric|real|double|money)\b/.test(h)||/^float\d*\b/.test(h))return"fractional";if(/^(?:integer|bigint|smallint|tinyint|serial|bigserial|smallserial|mediumint)\b/.test(h)||/^int\d*\b/.test(h))return"integer";return"other"}function mt(d,h,D){if(d===h)return!0;if(D==="sqlite"){if(d==="boolean"&&h==="integer")return!0;if((d==="date"||d==="json")&&h==="text")return!0}if(n(D)&&d==="boolean"&&h==="integer")return!0;if(d==="varchar"&&h==="text")return!0;if(d==="integer"&&h==="fractional")return!0;if(d==="other"||h==="other")return!0;return!1}async function Bt(d,h={}){let D=h.dialect??e.dialect,E=d.tables.map((Ve)=>Ve.table),V=await v({tables:E}),ke=new Map(V.map((Ve)=>[Ve.table.toLowerCase(),Ve])),xe=[],Ke=[],ve=[];for(let Ve of d.tables){let gt=ke.get(Ve.table.toLowerCase());if(!gt){xe.push(Ve.table);continue}let pt=new Map(gt.columns.map((xt)=>[xt.name.toLowerCase(),xt]));for(let xt of Ve.columns){let ht=pt.get(xt.name.toLowerCase()),Jt=dt(xt.type);if(!ht){Ke.push({table:Ve.table,column:xt.name,expected:Jt});continue}let jt=ft(ht.sqlType);if(!mt(Jt,jt,D))ve.push({table:Ve.table,column:xt.name,expected:Jt,actual:jt,actualSqlType:ht.sqlType})}}return{missingTables:xe,missingColumns:Ke,typeMismatches:ve,clean:xe.length===0&&Ke.length===0&&ve.length===0}}function Pt(d){if(d.clean)return"";let h=[];if(d.missingTables.length>0)h.push(` Missing tables: ${d.missingTables.join(", ")}`);for(let V of d.missingColumns.slice(0,10))h.push(` \u2022 ${V.table}.${V.column} is missing (models declare ${V.expected})`);for(let V of d.typeMismatches.slice(0,10))h.push(` \u2022 ${V.table}.${V.column} is ${V.actualSqlType}, models declare ${V.expected}`);let D=Math.min(d.missingColumns.length,10)+Math.min(d.typeMismatches.length,10),E=d.missingColumns.length+d.typeMismatches.length;if(E>D)h.push(` + ${E-D} more`);return["The live schema does not match the models.",...h,"","Migrations will NOT fix this on their own: the runner only applies files that have","not run yet, and a corrected `CREATE TABLE IF NOT EXISTS` is a no-op against a table","that already exists. Regenerate and apply the difference, or rebuild the schema."].join(`
381
+ `)}async function Ba(d,h,D){if(D.length===0)return;let E=Js(cr());try{await Hs(d,h);for(let V of D)await Kr(d,V,h),Dn(`-- \u2713 Recorded applied migration: ${V}`)}catch(V){Dn(`-- Could not record applied migrations (the schema change itself succeeded): ${V instanceof Error?V.message:String(V)}`)}}function js(d){try{return lt(xr(d,"utf8"))}catch{return!1}}function Aa(d){let h=d instanceof Error?d.message:String(d);return/duplicate column name/i.test(h)||/duplicate key name/i.test(h)||/duplicate foreign key constraint name/i.test(h)||/\balready exists\b/i.test(h)}function Dn(d){if(e.verbose)console.log(d)}function Ws(d){return Qn(d,e.snapshotDir||".qb")}function ts(d,h){return Qn(Ws(d),`model-snapshot.${h}.json`)}function Oa(d,h){let D=ts(d,h);if(!Zn(D))return;try{let E=xr(D,"utf8"),V=JSON.parse(E);if(V?.plan&&Array.isArray(V.plan.tables)&&V.plan.dialect)return V.plan;if(Array.isArray(V?.tables)&&V?.dialect)return V;Dn("-- Invalid snapshot format, treating as no previous state");return}catch(E){Dn(`-- Could not load snapshot, treating as no previous state: ${E instanceof Error?E.message:String(E)}`);return}}function Vs(d,h,D){let E=ts(d,h),V=Ws(d),ke=ut(D);if(Zn(E))try{let Ke=JSON.parse(xr(E,"utf8"));if(Ke?.hash===ke&&Ke?.dialect===h&&Ke?.plan){Dn("-- Model snapshot unchanged");return}}catch{}if(!Zn(V))Ks(V,{recursive:!0}),Dn(`-- Created snapshot directory: ${V}`);let xe={plan:D,hash:ke,dialect:h,updatedAt:new Date().toISOString()};Qs(E,JSON.stringify(xe,null,2)),Dn(`-- Model snapshot saved to ${E}`)}function Ye(d,h={}){let D=h.dialect??d.dialect;Vs(h.workspaceRoot??cr(),D,d)}function cr(){return Vr()}function Js(d){let h=rr(d,e.migrationDir);if(!Zn(h))Ks(h,{recursive:!0}),Dn(`-- Created SQL directory: ${h}`);return h}async function b(d,h={}){if(await Q(),!d)d=Qn(es.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=cr(),V=await u({modelsDir:d}),ke=W(V,{dialect:D,vitessSharded:h.vitessSharded}),xe,Ke=!1;if(!h.full)if(xe=Oa(E,D),xe)Dn("-- Comparing with stored model snapshot");else{let ht=Qn(d,`.qb-migrations.${D}.json`),Jt=String(h.state||ht);if(Zn(Jt))try{let jt=xr(Jt,"utf8"),Tn=JSON.parse(jt);if(xe=Tn?.plan&&Tn.plan.tables?Tn.plan:Tn?.tables?Tn:void 0,xe)Dn("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!xe||h.fromDb)try{let jt=await cs(D),Tn=new Set(ke.tables.map((Ue)=>Ue.table)),Fe=jt.tables.filter((Ue)=>Tn.has(Ue.table));if(Fe.length>0)xe={dialect:jt.dialect,tables:Fe},Ke=!0,Dn(`-- No snapshot; reconciling against live database (${Fe.length} matching table${Fe.length===1?"":"s"})`)}catch(jt){Dn(`-- Could not introspect live database, treating as no previous state: ${jt instanceof Error?jt.message:String(jt)}`)}if(!xe)Dn("-- No previous snapshot found, generating full migration")}else Dn("-- Full migration requested, ignoring any previous state");let ve=h.full?{statements:Ee(ke,{dryRun:h.dryRun}),operations:ke.tables.map((ht)=>({kind:"create_table",table:ht.table,destructive:!1,sql:""}))}:Ie(xe,ke,{applyRenames:h.applyRenames,dryRun:h.dryRun,preserveUnknownColumns:Ke}),{statements:Ve,operations:gt}=ve,pt=Ve.join(`
382
+ `),xt=Ve.some((ht)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(ht));if(h.apply){let ht=xa(Qn(Na(),"qb-migrate-")),Jt=Qn(ht,"migration.sql");try{if(xt){Qs(Jt,pt);let jt=i();await jt.file(Jt),Dn("-- Migration applied"),await Ba(jt,D,at())}else Dn("-- No changes; nothing to apply")}catch(jt){throw console.error("-- Migration failed:",jt),jt}finally{Us(ht,{recursive:!0,force:!0})}}if(!h.dryRun)Vs(E,D,ke);return{sql:pt,sqlStatements:Ve,hasChanges:xt,plan:ke,operations:gt}}function Ma(d,h){if(d===void 0)return[Js(h)];let D=Array.isArray(d)?d:[d];if(D.length===0)throw Error("executeMigration was given an empty list of directories. Pass at least one directory, or omit the argument to use the configured migrationDir.");return D.map((E)=>ka(E)?E:Qn(h,E))}function Ca(d){let h=new Map;for(let D of d){if(!Zn(D))throw Error(`Migration directory not found: ${D}`);for(let E of Fs(D).filter((V)=>V.endsWith(".sql"))){let V=h.get(E);if(V!==void 0)throw Error(`Duplicate migration file name across directories: "${E}" appears in both ${V} and ${Qn(D,E)}. Migrations are recorded by file name, so names must be unique across every directory in a run.`);h.set(E,Qn(D,E))}}return[...h].map(([D,E])=>({name:D,path:E})).sort((D,E)=>D.name<E.name?-1:D.name>E.name?1:0)}var qs="bun-query-builder:migrate",Ia=/\bCONCURRENTLY\b|^\s*VACUUM\b|^\s*BEGIN\s*(?:;|TRANSACTION\b)|^\s*PRAGMA\s+foreign_keys\b/im;function Ls(d){return d==="postgres"||d==="sqlite"}async function Pa(d,h){if(d==="sqlite")return await h();let D=i(),E;try{E=await D.reserve()}catch{return await h()}let V=!1;try{return await E.advisoryLock(qs),V=!0,await h()}finally{try{if(V)await E.advisoryUnlock(qs)}finally{E.release?.()}}}async function k(d){await Q();let h=cr(),D=e.dialect||"postgres",E=Ca(Ma(d,h));if(E.length===0)return Dn("-- No migration files found to execute"),!0;Dn(`-- Found ${E.length} script files to execute`);try{let V=i();return await Pa(D,async()=>{await Hs(V,D);let ke=await La(V,D),xe=E.filter((Ke)=>!ke.includes(Ke.name));if(xe.length===0)return Dn("-- No pending migrations to execute"),!0;Dn(`-- Executing ${xe.length} migration${xe.length===1?"":"s"}`);for(let{name:Ke,path:ve}of xe){Dn(`-- Executing: ${Ke}`);try{if(Ls(D)&&!Ia.test(xr(ve,"utf-8")))await V.transaction(async(gt)=>{await gt.file(ve),await Kr(gt,Ke,D)});else if(await V.file(ve),await Kr(V,Ke,D),!Ls(D))Dn(`-- (${D} commits DDL implicitly, so ${Ke} was not applied atomically)`);else Dn(`-- (${Ke} contains a statement that cannot run in a transaction, so it was not applied atomically)`);Dn(`-- \u2713 Migration ${Ke} executed and recorded`)}catch(Ve){if(js(ve)&&Aa(Ve)){await Kr(V,Ke,D),Dn(`-- \u2713 Migration ${Ke} was already applied; recorded it (${Ve instanceof Error?Ve.message:String(Ve)})`);continue}throw console.error(`-- \u2717 Migration ${Ke} failed:`,Ve),Ve}}return Dn("-- All migrations executed successfully"),!0})}catch(V){throw console.error("-- Migration execution failed:",V),V}return!0}async function C(d,h={}){if(await Q(),!d)d=Qn(es.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=f(D),V=cr(),ke=async(xe)=>{let Ke=E.dropTable(xe);await We(async(ve)=>{if(D==="sqlite")await ve.unsafe("PRAGMA foreign_keys = OFF").execute();if(D==="mysql"||D==="vitess")await ve.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{await ve.unsafe(Ke).execute()}finally{if(D==="sqlite")await ve.unsafe("PRAGMA foreign_keys = ON").execute();if(D==="mysql"||D==="vitess")await ve.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}})};try{try{await ke("migrations"),Dn("-- Dropped migrations table")}catch(ve){console.error(ve)}let xe=[],Ke=[];try{let ve=await u({modelsDir:d}),Ve=W(ve,{dialect:D});xe=Ve.tables.map((pt)=>pt.table);let gt=new Set;for(let pt of Ve.tables)for(let xt of pt.columns)if(xt.type==="enum"&&xt.enumValues&&xt.enumValues.length>0){let ht=`${pt.table}_${xt.name}_type`;gt.add(ht)}Ke=Array.from(gt)}catch(ve){console.error(ve),xe=[],Ke=[]}if(xe.length===0)Dn("-- No tables found to drop");else{Dn(`-- Dropping ${xe.length} tables: ${xe.join(", ")}`);for(let ve of xe.reverse())try{await ke(ve),Dn(`-- Dropped table: ${ve}`)}catch(Ve){console.error(Ve),Dn(`-- Table ${ve} may not exist, skipping drop`)}}if(Ke.length>0){Dn(`-- Dropping ${Ke.length} enum types: ${Ke.join(", ")}`);for(let ve of Ke)try{let Ve=E.dropEnumType(ve);if(Ve)await We(async(gt)=>{await gt.unsafe(Ve).execute(),Dn(`-- Dropped enum type: ${ve}`)})}catch(Ve){console.error(Ve),Dn(`-- Enum type ${ve} may not exist, skipping drop`)}}else Dn("-- No enum types found to drop");if(xe.length>0&&!h.preserveMigrationState)try{await va(d,V,h)}catch(ve){console.error(ve),Dn("-- Could not clean up migration files")}else if(xe.length===0)Dn("-- No models directory found; keeping committed migration files in place");else Dn("-- Preserving migration files and model snapshot for fresh replay");if(!h.preserveMigrationState)try{await qa(V)}catch(ve){console.error(ve),Dn("-- Could not clear generated directory")}return Dn("-- Database reset completed successfully"),!0}catch(xe){return console.error("-- Database reset failed:",xe),!1}}async function va(d,h,D={}){if(!d)d=Qn(es.cwd(),"app/Models");if(!h)h=cr();let E=String(D.dialect||e.dialect||"postgres"),V=ts(h,E);if(Zn(V))Zr(V),Dn(`-- Removed model snapshot file: ${V}`);let ke=Qn(d,`.qb-migrations.${E}.json`),xe=String(D.state||ke);if(Zn(xe))Zr(xe),Dn(`-- Removed legacy migration state file: ${xe}`);_a(rr(h,e.migrationDir))}function _a(d){if(!Zn(d))return;let h=0,D=[];for(let E of Fs(d).filter((V)=>V.endsWith(".sql"))){if(!js(Qn(d,E))){D.push(E);continue}Zr(Qn(d,E)),Dn(`-- Removed generated migration file: ${E}`),h+=1}if(Dn(`-- Cleaned up ${h} generated migration file${h===1?"":"s"} from migrations directory`),D.length>0)Dn(`-- Kept ${D.length} hand-written migration${D.length===1?"":"s"}: ${D.slice(0,5).join(", ")}${D.length>5?`, +${D.length-5} more`:""}`)}async function qa(d){if(!d)d=cr();let h=Qn(d,"generated");if(Zn(h))try{Us(h,{recursive:!0,force:!0}),Dn("-- Cleared generated directory")}catch(D){console.error("-- Failed to clear generated directory:",D)}}async function Hs(d,h){let E=f(h).createMigrationsTable();try{await d.unsafe(E).execute(),Dn("-- Migrations table ready")}catch(V){throw console.error("-- Failed to create migrations table:",V),V}}async function La(d,h){let D=f(h);try{return(await d.unsafe(D.getExecutedMigrationsQuery()).execute()).map((V)=>V.migration)}catch(E){return console.error("-- Failed to get executed migrations:",E),[]}}async function Kr(d,h,D){let E=f(D);try{Dn(`-- Recording migration: ${h}`),await d.unsafe(E.recordMigrationQuery(),[h]).execute(),Dn(`-- Successfully recorded migration: ${h}`)}catch(V){throw console.error(`-- Failed to record migration ${h}:`,V),V}}
383
+ export{J,S,Zt,en,l,kt,Ct,i,Qe,Ge,z,Y,X,N,Z,ee,te,ne,B,re,P,O,ie,se,I,ae,oe,Je,Be,ze,v,le,a,ce,ue,de,fe,f,Ye,b,k,C,me,he,_,ge,L,pe,K,F,R,j,ye,be,Te,we,q,Se,De,T,m,tn,nn,rn,Xe,Ze,et,tt,nt,sn,rt,Rt,an,on,ln,cn,it,un,dn,fn,$e,u,st,at,ot,lt,ct,At,W,Ee,mn,hn,ut,Pe,g,Oe,Ie,Mt,gn,Nt,pn,dt,ft,mt,Bt,Pt};