bun-query-builder 0.2.70 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +13 -13
- package/dist/{chunk-0x1f6w08.js → chunk-3xpe6b57.js} +4 -4
- package/dist/{chunk-baj1dqgh.js → chunk-4cs1xx1d.js} +2 -2
- package/dist/chunk-c7m701dd.js +3 -0
- package/dist/chunk-cxpaxq2p.js +3 -0
- package/dist/chunk-hgsjz3vz.js +2 -0
- package/dist/chunk-hjgcemhy.js +67 -0
- package/dist/chunk-vn93p5q6.js +2 -0
- package/dist/chunk-vw9ss7z8.js +383 -0
- package/dist/orm.d.ts +4 -1
- package/dist/runtime.d.ts +19 -0
- package/dist/src/browser.js +1 -1
- package/dist/src/dynamodb/index.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/runtime.js +2 -0
- package/package.json +5 -1
- package/dist/chunk-a8q2z6rv.js +0 -383
- package/dist/chunk-f0ka4910.js +0 -2
- package/dist/chunk-n6g1zfr3.js +0 -2
- package/dist/chunk-ndnqqp78.js +0 -67
package/dist/chunk-a8q2z6rv.js
DELETED
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{n,e,H,t,s,Q,We,Ce,w,Ue,r,p,y,wt,x,o,Re,Ae,A,Me,Ne,M}from"./chunk-ndnqqp78.js";import{c}from"./chunk-0x1f6w08.js";var mi=import.meta.require;import{existsSync as rr,mkdirSync as Ys,mkdtempSync as Ka,readdirSync as Gs,readFileSync as Or,rmSync as zs,unlinkSync as is,writeFileSync as Xs}from"fs";import{tmpdir as Fa}from"os";import{isAbsolute as Ua,join as Jn}from"path";import as from"process";function fi(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 gi(d,h=63){if(d.length<=h)return d;let D=`_${fi(d)}`;return d.slice(0,h-D.length)+D}function zn(d,h){let D=`${d}_`,E=h.startsWith(D)?h:`${D}${h}`;return gi(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
|
-
${h.join(`,
|
|
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((G)=>{let ke=D?.find((je)=>je.name===G),Qe=ke?this.keyPartWidth(ke):{bytes:0,indexableWhole:!0},Be=!Qe.indexableWhole;return{name:G,prefixed:Be,bytes:Be?a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER:Qe.bytes,narrowable:!Qe.indexableWhole||Qe.bytes>a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}}),V=()=>E.reduce((G,ke)=>G+ke.bytes,0);while(V()>a.MAX_KEY_BYTES){let G=E.filter((ke)=>ke.narrowable&&!ke.prefixed).sort((ke,Qe)=>Qe.bytes-ke.bytes)[0];if(!G)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.`);G.prefixed=!0,G.bytes=a.KEY_PREFIX_CHARACTERS*a.BYTES_PER_CHARACTER}return E.map((G)=>G.prefixed?`${this.quoteIdentifier(G.name)}(${a.KEY_PREFIX_CHARACTERS})`:this.quoteIdentifier(G.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=zn(d,h.name),G=this.keyParts(d,h,D).join(", ");return`CREATE ${E}INDEX ${this.quoteIdentifier(V)} ON ${this.quoteIdentifier(d)} (${G});`}addForeignKey(d,h,D,E,V,G,ke=[]){let Qe=`${d}_${h}_fk`,Be=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Qe)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)Be+=` ON DELETE ${V.toUpperCase()}`;if(G)Be+=` ON UPDATE ${G.toUpperCase()}`;let je=[...new Set(ke)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP FOREIGN KEY ${this.quoteIdentifier(gt)};`).join(`
|
|
6
|
-
`);return je?`${je}
|
|
7
|
-
${Be};`:`${Be};`}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 G=this.getAutoIncrementClause(h);if(G)E.push(G);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=zn(d,h);return`DROP INDEX ${this.quoteIdentifier(D)} ON ${this.quoteIdentifier(d)};`}dropEnumType(d){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
|
|
8
|
-
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
9
|
-
migration VARCHAR(255) NOT NULL UNIQUE,
|
|
10
|
-
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
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
|
-
`);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
|
|
13
|
-
${h}
|
|
14
|
-
);`}createIndex(d,h){let D=h.type==="unique"?"UNIQUE ":"",E=zn(d,h.name),V=h.columns.map((ke)=>this.quoteIdentifier(ke)).join(", "),G=h.where?` WHERE ${h.where}`:"";return`CREATE ${D}INDEX IF NOT EXISTS ${this.quoteIdentifier(E)} ON ${this.quoteIdentifier(d)} (${V})${G};`}addForeignKey(d,h,D,E,V,G,ke=[]){let Qe=`${d}_${h}_fk`,Be=`ALTER TABLE ${this.quoteIdentifier(d)} ADD CONSTRAINT ${this.quoteIdentifier(Qe)} FOREIGN KEY (${this.quoteIdentifier(h)}) REFERENCES ${this.quoteIdentifier(D)}(${this.quoteIdentifier(E)})`;if(V)Be+=` ON DELETE ${V.toUpperCase()}`;if(G)Be+=` ON UPDATE ${G.toUpperCase()}`;let je=[...new Set(ke)].map((gt)=>`ALTER TABLE ${this.quoteIdentifier(d)} DROP CONSTRAINT ${this.quoteIdentifier(gt)};`).join(`
|
|
15
|
-
`);return je?`${je}
|
|
16
|
-
${Be};`:`${Be};`}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),G=[`ALTER TABLE ${E} ALTER COLUMN ${V} DROP DEFAULT;`,`ALTER TABLE ${E} ALTER COLUMN ${V} TYPE ${D} USING ${V}::${D};`];if(!h.isPrimaryKey)G.push(`ALTER TABLE ${E} ALTER COLUMN ${V} ${h.isNullable?"DROP NOT NULL":"SET NOT NULL"};`);let ke=this.getDefaultValue(h);if(ke)G.push(`ALTER TABLE ${E} ALTER COLUMN ${V} SET ${ke};`);return G.join(`
|
|
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=zn(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
|
-
id SERIAL PRIMARY KEY,
|
|
19
|
-
migration VARCHAR(255) NOT NULL UNIQUE,
|
|
20
|
-
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
21
|
-
)`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES ($1)"}jsonExtract(d,h){return`(${d}::jsonb ->> ${h})`}dateBucket(d,h,D=0){let E=D===0?`${d}::timestamp`:`(${d}::timestamp ${D>=0?"+":"-"} interval '${Math.abs(D)} hours')`,V=h==="week"?`date_trunc('week', ${E})`:E;switch(h){case"hour":return`to_char(${V}, 'YYYY-MM-DD"T"HH24:00:00.000"Z"')`;case"month":return`to_char(${V}, 'YYYY-MM-01"T"00:00:00.000"Z"')`;case"year":return`to_char(${V}, 'YYYY-01-01"T"00:00:00.000"Z"')`;case"week":case"day":default:return`to_char(${V}, 'YYYY-MM-DD"T"00:00:00.000"Z"')`}}booleanLiteral(d){return d?"TRUE":"FALSE"}renderColumn(d){let h=d.isPrimaryKey?this.getPrimaryKeyType(d):this.getColumnType(d),D=[this.quoteIdentifier(d.name),h];if(d.isPrimaryKey)D.push("PRIMARY KEY");if(!d.isNullable&&!d.isPrimaryKey)D.push("not null");let E=this.getDefaultValue(d);if(E)D.push(E);if(d.references){let V=`REFERENCES ${this.quoteIdentifier(d.references.table)}(${this.quoteIdentifier(d.references.column)})`;if(d.references.onDelete)V+=` ON DELETE ${d.references.onDelete.toUpperCase()}`;if(d.references.onUpdate)V+=` ON UPDATE ${d.references.onUpdate.toUpperCase()}`;D.push(V)}return D.join(" ")}}class ue extends a{createTable(d){let h=d.columns.map((G)=>this.renderColumn(G)).join(`,
|
|
22
|
-
`),D=[];if(d.tableKind!=="reference"){let G=d.shardKey?.length?d.shardKey:d.columns.filter((ke)=>ke.isPrimaryKey).map((ke)=>ke.name);if(G&&G.length>0)D.push(`SHARD KEY (${G.map((ke)=>this.quoteIdentifier(ke)).join(", ")})`)}if(d.tableKind!=="rowstore"&&d.tableKind!=="reference"){let G=d.sortKey?.length?d.sortKey:void 0;D.push(`SORT KEY (${(G??[]).map((ke)=>this.quoteIdentifier(ke)).join(", ")})`)}let E=[h,...D].join(`,
|
|
23
|
-
`);return`CREATE${this.tableKindSuffix(d.tableKind)} TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
|
|
24
|
-
${E}
|
|
25
|
-
);`}tableKindSuffix(d){switch(d){case"rowstore":return" ROWSTORE";case"reference":return" REFERENCE";default:return""}}addForeignKey(){return""}createIndex(d,h,D){if(h.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on SingleStore. Index '${h.name}' on table '${d}' uses WHERE clause: ${h.where}`);return super.createIndex(d,h,D)}}class de extends a{sharded;constructor(d=!0){super();this.sharded=d}getAutoIncrementClause(d){return this.sharded?"":super.getAutoIncrementClause(d)}renderColumn(d){if(!this.sharded||!d.references)return super.renderColumn(d);let{references:h,...D}=d;return super.renderColumn(D)}foreignKeyClauses(d){return this.sharded?[]:super.foreignKeyClauses(d)}createTable(d){return super.createTable(d)}addForeignKey(...d){return this.sharded?"":super.addForeignKey(...d)}createMigrationsTable(){if(!this.sharded)return super.createMigrationsTable();return`CREATE TABLE IF NOT EXISTS migrations (
|
|
26
|
-
migration VARCHAR(255) NOT NULL PRIMARY KEY,
|
|
27
|
-
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
28
|
-
)`}}class fe{quoteIdentifier(d){return`"${d.replace(/"/g,'""')}"`}getColumnType(d){if(d.name.endsWith("_id")&&A(d.type))return"INTEGER";if(d.type==="enum"){if(d.enumValues&&d.enumValues.length>0){let h=d.enumValues.map((D)=>`'${D.replace(/'/g,"''")}'`).join(", ");return`TEXT CHECK (${this.quoteIdentifier(d.name)} IN (${h}))`}return"TEXT"}return Me(d.type)}getPrimaryKeyType(d){return this.getColumnType(d)}getAutoIncrementClause(d){if(d.isPrimaryKey&&(d.type==="integer"||d.type==="bigint"))return"AUTOINCREMENT";return""}getDefaultValue(d){if(!d.hasDefault||d.defaultValue===void 0)return"";let h=d.defaultValue;if(typeof h==="string"){if(h.toUpperCase()==="UTC_TIMESTAMP")return"default CURRENT_TIMESTAMP";if(["CURRENT_TIMESTAMP","CURRENT_DATE","CURRENT_TIME","NOW()","NULL","TRUE","FALSE"].includes(h.toUpperCase()))return`default ${h.toUpperCase()}`;return`default '${h.replace(/'/g,"''")}'`}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""}createTable(d){let h=d.columns.map((D)=>this.renderColumn(D)).join(`,
|
|
29
|
-
`);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(d.table)} (
|
|
30
|
-
${h}
|
|
31
|
-
);`}createIndex(d,h){let D=h.type==="unique"?"UNIQUE ":"",E=zn(d,h.name),V=h.columns.map((ke)=>this.quoteIdentifier(ke)).join(", "),G=h.where?` WHERE ${h.where}`:"";return`CREATE ${D}INDEX IF NOT EXISTS ${this.quoteIdentifier(E)} ON ${this.quoteIdentifier(d)} (${V})${G};`}addForeignKey(d,h,D,E,V,G){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 E.push(...this.referencesClause(h)),`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=(je)=>this.quoteIdentifier(je),G=h.columns.map((je)=>this.renderColumn(je)).join(`,
|
|
32
|
-
`),ke=`CREATE TABLE ${V(D)} (
|
|
33
|
-
${G}
|
|
34
|
-
);`,Qe=h.columns.map((je)=>je.name).filter((je)=>E[je]!==void 0),Be=["PRAGMA foreign_keys=OFF;","BEGIN;",ke];if(Qe.length>0){let je=Qe.map(V).join(", "),gt=Qe.map((pt)=>V(E[pt])).join(", ");Be.push(`INSERT INTO ${V(D)} (${je}) SELECT ${gt} FROM ${V(h.table)};`)}Be.push(`DROP TABLE ${V(h.table)};`),Be.push(`ALTER TABLE ${V(D)} RENAME TO ${V(h.table)};`);for(let je of h.indexes)Be.push(this.createIndex(h.table,je));return Be.push("PRAGMA foreign_key_check;"),Be.push("COMMIT;"),Be.push("PRAGMA foreign_keys=ON;"),Be.join(`
|
|
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=zn(d,h);return`DROP INDEX IF EXISTS ${this.quoteIdentifier(D)};`}dropEnumType(d){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
|
|
36
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
37
|
-
migration TEXT NOT NULL UNIQUE,
|
|
38
|
-
executed_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
39
|
-
)`}getExecutedMigrationsQuery(){return"SELECT migration, executed_at FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES (?)"}jsonExtract(d,h){return`json_extract(${d}, '$.' || ${h})`}dateBucket(d,h,D=0){let E=D===0?d:`datetime(${d}, '${D>=0?"+":"-"}${Math.abs(D)} hours')`;switch(h){case"hour":return`strftime('%Y-%m-%dT%H:00:00.000Z', ${E})`;case"week":return`strftime('%Y-%m-%dT00:00:00.000Z', ${E}, '-6 days', 'weekday 1')`;case"month":return`strftime('%Y-%m-01T00:00:00.000Z', ${E})`;case"year":return`strftime('%Y-01-01T00:00:00.000Z', ${E})`;case"day":default:return`strftime('%Y-%m-%dT00:00:00.000Z', ${E})`}}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.push(...this.referencesClause(d)),D.join(" ")}referencesClause(d){if(!d.references)return[];let h=[`REFERENCES ${this.quoteIdentifier(d.references.table)}(${this.quoteIdentifier(d.references.column)})`];if(d.references.onDelete)h.push(`ON DELETE ${d.references.onDelete.toUpperCase()}`);if(d.references.onUpdate)h.push(`ON UPDATE ${d.references.onUpdate.toUpperCase()}`);return h}}function f(d,h={}){switch(d){case"postgres":return new ce;case"mysql":return new a;case"singlestore":return new ue;case"vitess":return new de(h.vitessSharded??e.vitess?.sharded??!0);case"sqlite":return new fe;default:throw Error(`Unsupported dialect: ${d}`)}}async function J(d={}){let h=d.iterations||1000,D=d.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${h}`),console.log(`-- Operations: ${D.join(", ")}`),console.log();let E=i();console.log("-- Setting up test table...");try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await r.unsafe(`
|
|
40
|
-
CREATE TABLE bench_users (
|
|
41
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42
|
-
name TEXT NOT NULL,
|
|
43
|
-
email TEXT NOT NULL,
|
|
44
|
-
active INTEGER DEFAULT 1,
|
|
45
|
-
created_at TEXT
|
|
46
|
-
)
|
|
47
|
-
`).execute();for(let ke=0;ke<100;ke++)await r.unsafe(`
|
|
48
|
-
INSERT INTO bench_users (name, email, created_at)
|
|
49
|
-
VALUES (?, ?, ?)
|
|
50
|
-
`,[`User ${ke}`,`user${ke}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(ke){throw console.error("-- Failed to setup test table:",ke),ke}let V=[];if(D.includes("select")){let ke=[];for(let Qe=0;Qe<h;Qe++){let Be=performance.now();await E.selectFrom("bench_users").where({active:1}).limit(10).execute(),ke.push(performance.now()-Be)}V.push({operation:"SELECT with WHERE + LIMIT",avgTime:ke.reduce((Qe,Be)=>Qe+Be,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}if(D.includes("select")){let ke=[];for(let Qe=0;Qe<h;Qe++){let Be=performance.now();await E.selectFrom("bench_users").where({id:1}).first(),ke.push(performance.now()-Be)}V.push({operation:"SELECT by ID (first)",avgTime:ke.reduce((Qe,Be)=>Qe+Be,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}if(D.includes("count")){let ke=[];for(let Qe=0;Qe<h;Qe++){let Be=performance.now();await E.selectFrom("bench_users").count(),ke.push(performance.now()-Be)}V.push({operation:"COUNT",avgTime:ke.reduce((Qe,Be)=>Qe+Be,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}if(D.includes("insert")){let ke=[];for(let Qe=0;Qe<h;Qe++){let Be=performance.now();await E.insertInto("bench_users").values({name:`Bench User ${Qe}`,email:`bench${Qe}@example.com`,created_at:new Date().toISOString()}).execute(),ke.push(performance.now()-Be)}V.push({operation:"INSERT",avgTime:ke.reduce((Qe,Be)=>Qe+Be,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}if(D.includes("update")){let ke=[];for(let Qe=0;Qe<h;Qe++){let Be=performance.now();await E.updateTable("bench_users").set({active:0}).where({id:1}).execute(),ke.push(performance.now()-Be)}V.push({operation:"UPDATE by ID",avgTime:ke.reduce((Qe,Be)=>Qe+Be,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}if(D.includes("delete")){let ke=[],Qe=[];for(let Be=0;Be<h;Be++){let je=await E.insertInto("bench_users").values({name:"To Delete",email:`delete${Be}@example.com`,created_at:new Date().toISOString()}).execute();Qe.push(je)}for(let Be=0;Be<h;Be++){let je=performance.now();await E.deleteFrom("bench_users").where({id:Qe[Be]}).execute(),ke.push(performance.now()-je)}V.push({operation:"DELETE by ID",avgTime:ke.reduce((Be,je)=>Be+je,0)/ke.length,minTime:Math.min(...ke),maxTime:Math.max(...ke),iterations:h})}console.log("-- Benchmark Results"),console.log();let G=Math.max(...V.map((ke)=>ke.operation.length));console.log("Operation".padEnd(G+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(G+2+12+12+12+12));for(let ke of V){let Qe=ke.operation.padEnd(G+2),Be=ke.avgTime.toFixed(3).padStart(12),je=ke.minTime.toFixed(3).padStart(12),gt=ke.maxTime.toFixed(3).padStart(12),pt=(1000/ke.avgTime).toFixed(0).padStart(12);console.log(`${Qe}${Be}${je}${gt}${pt}`)}console.log();try{await r.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(ke){console.error("-- Warning: Failed to cleanup test table:",ke)}}import{Buffer as us}from"buffer";import{serialize as pi}from"v8";function yi(d){return y(e.relations?.singularizeStrategy)(d)}function S(d,h,D,E={}){let V=E.singularize??yi,ke=d.relations?.[h]?.belongsToMany?.[D];if(ke==null)return null;let Qe=typeof ke==="object",Be=Qe?ke:null,je=Qe?Be.model:ke,gt=d.modelToTable[je]||je,pt,$t;if(Be?.table)pt=Be.table;else if(Be?.through){if($t=Be.through,pt=d.modelToTable[Be.through],!pt)throw Error(`[query-builder] belongsToMany relation '${D}' on '${h}' references unknown through model '${Be.through}'. Make sure '${Be.through}' is registered via defineModels({...}).`)}else{let Dn=V(h),Fe=V(gt);pt=[Dn,Fe].sort().join("_")}let Ct=Be?.foreignKey??`${V(h)}_id`,Yt=Be?.relatedKey??`${V(gt)}_id`,Et={};if(Be?.pivot?.columns)Object.assign(Et,Be.pivot.columns);if($t&&E.models){let Dn=E.models[$t],Fe=Dn?.definition??Dn?.getDefinition?.()??Dn,Le=Fe?.attributes??{};for(let[qe,Ke]of Object.entries(Le)){if(qe===Ct||qe===Yt||qe===(Fe?.primaryKey??"id"))continue;Et[qe]={default:Ke?.default,nullable:Ke?.nullable,validation:Ke?.validation}}}let Zt=Boolean(Be?.pivot?.timestamps),En=Object.keys(Et);return{pivotTable:pt,fkParent:Ct,fkRelated:Yt,pivotColumns:En,pivotColumnDefs:Et,pivotModelName:$t,timestamps:Zt,relatedModelName:je,relatedTable:gt,hasConfig:Qe}}function*tn(d,h={}){let D=d.relations;if(!D)return;for(let[E,V]of Object.entries(D)){let G=V?.belongsToMany;if(!G)continue;for(let ke of Object.keys(G)){let Qe=S(d,E,ke,h);if(Qe)yield{parentTable:E,relationKey:ke,resolved:Qe}}}}function nr(d){return typeof d==="object"&&d!==null&&"raw"in d&&typeof d.raw==="string"}function Jr(d,h,D){if(Array.isArray(h)){let V=s(h.length,D.length+1),G=o(d,h,!1,V);return D.push(...h),G}let E=`${d} = ${t(D.length+1)}`;return D.push(h),E}function dr(d){return typeof d==="object"&&d!==null&&"sql"in d&&typeof d.sql==="string"&&(!("parameters"in d)||Array.isArray(d.parameters))}function hi(d,h){let[D,...E]=h;if(E.length>0||D!==void 0&&!Array.isArray(D))throw TypeError("[query-builder] db.raw(sql, bindings): pass the bindings as one array, db.raw('a = ? AND b = ?', [a, b]).");let V={sql:d,parameters:[...D??[]]};return Object.defineProperty(V,"then",{enumerable:!1,value:(G,ke)=>{let Qe=TypeError("[query-builder] db.raw(sql, bindings) builds a fragment for set() or where(), not a query. Run SQL with db.unsafe(sql, params).");if(typeof ke==="function")return ke(Qe);throw Qe}}),V}function $r(d){return d instanceof Promise&&typeof d.execute==="function"&&typeof d.cancel==="function"}function Rr(d){throw TypeError(`[query-builder] ${d}: a Bun \`sql\`...\`\` query cannot be used as a fragment, because its SQL text is not readable. Bind values with db.raw('name = ?', [value]) or { sql, parameters }, or use the exported \`raw\` tagged template.`)}function mr(d,h){let D=d.parameters??(Array.isArray(d.values)?d.values:[]);if(e.dialect!=="postgres"||D.length===0)return{text:d.sql,parameters:D};let E=0,{text:V}=Re(d.sql,()=>E<D.length?t(h+E++):void 0);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 gs(d,h){if(h.length===2){let[D,E]=h;if(Array.isArray(E)&&typeof D==="number"&&E[D]===d)return!1;if(E instanceof Set&&D===d&&E.has(d))return!1;if(E instanceof Map&&E.get(D)===d)return!1}return h.some((D)=>D!==void 0&&!(Array.isArray(D)&&D.length===0))}function nn(d,...h){if(typeof d==="string"){if(!(h.length===1&&Number.isInteger(h[0])&&h[0]>=0&&!d.includes("?"))&&gs(d,h))throw TypeError("[query-builder] raw(string) takes no values, so the argument(s) after the string would be dropped. Use raw as a tagged template instead, which interpolates each value as an escaped literal.");return{raw:d}}let D=d[0];for(let E=0;E<h.length;E++)D+=ir(h[E])+d[E+1];return{raw:D}}function jn(d){return n(e.dialect)?`\`${d.replace(/`/g,"``")}\``:`"${d.replace(/"/g,'""')}"`}function _r(d,h=1){let D=Object.keys(d[0]??{}),E=[],V=h,G=d.map((ke)=>`(${D.map((Be)=>(E.push(ke[Be]),t(V++))).join(", ")})`);return{colsSql:D.map(jn).join(", "),valuesSql:G.join(", "),params:E,nextIndex:V}}function xr(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,G]=D,ke=V?`\`${E}\`.\`${V}\``:`\`${E}\``;return G?`${ke} AS \`${G}\``:ke}function Rt(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 cs(d){if(typeof d==="string")return l(d);if(nr(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 Ti(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 Cn={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},ds=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function zt(d,h){if(!Cn.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 Fn(d,h){if(typeof d!=="string")throw TypeError(`[query-builder] ${h}: operator must be a string, got ${typeof d}`);let D=d.toLowerCase();if(!ds.has(D))throw TypeError(`[query-builder] ${h}: refusing to use '${d}' as a SQL operator \u2014 not in the allowed set (${[...ds].join(", ")})`);return d}function Gn(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 fr(d,h,D=[]){let E=typeof d==="object"&&d!==null?d.parameters??d.values:void 0;if(gs(d,D)||Array.isArray(E)&&E.length>0){let V=h.startsWith("whereRaw(")?", or use where(). Model.query().whereRaw(sql, ...bindings) is the builder that binds `?` values.":h.startsWith("orWhereRaw(")?", or use orWhere(). Model.query().orWhereRaw(sql, ...bindings) is the builder that binds `?` values.":".";throw TypeError(`[query-builder] ${h}: this method takes a single fragment and no bindings, so the argument(s) after it would be dropped. Interpolate values with the exported \`raw\` tagged template, which inlines them as escaped literals${V}`)}if(typeof d==="string")return bi(h),d;if(d===null||d===void 0)throw TypeError(`[query-builder] ${h}: fragment must be a SqlFragment, got ${d}`);if(nr(d))return d.raw;if(typeof d==="object"){let V=d;if(typeof V.raw==="string")return V.raw;if(typeof V.raw==="function"){let ke=V.raw();if(typeof ke==="string")return ke}if(typeof V.sql==="string")return V.sql;let G=String(d);if(G!=="[object Object]"&&G!=="[object Promise]")return G}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 ms=new Set;function bi(d){if(ms.has(d))return;ms.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 At(d,h=e.dialect){return n(h)?d.replace(/\\/g,"\\\\").replace(/'/g,"''"):d.replace(/'/g,"''")}function ir(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`'${At(d)}'`;if(d instanceof Date)return`'${d.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof d}`)}function Si(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,G])=>`${V} ${G==="desc"?"DESC":"ASC"}`).join(", ")}`);return E.length?`OVER (${E.join(" ")})`:"OVER ()"}class ys{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[G,ke]of this.cache)if(E>ke.expiresAt){if(this.cache.delete(G),V=!0,this.cache.size<this.maxSize)break}if(!V){let G=this.cache.keys().next().value;if(G!==void 0)this.cache.delete(G)}}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 Lr=new ys,fs=new WeakMap,wi=0;function Di(d,h,D){let E=fs.get(d);if(E===void 0)E=++wi,fs.set(d,E);let V=D.map((G)=>ArrayBuffer.isView(G)?["view",us.isBuffer(G)?"Buffer":Object.prototype.toString.call(G),us.from(G.buffer,G.byteOffset,G.byteLength).toString("base64")]:["value",pi(G).toString("base64")]);return`${E}\x00${h}\x00${JSON.stringify(V)}`}function Ei(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 $i(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 Ri(d){return new Promise((h)=>setTimeout(h,d))}var qr=new Map,xi=500,ki=[{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}],Ni=[{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}],Bi=[{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 pr(d){let h=qr.get(d);if(h!==void 0)return h;let D=Ai(d);if(qr.size>=xi)qr.clear();return qr.set(d,D),D}function Ai(d){let h=Ae(d,ki);if(h.length<=1)return d;let D=d.slice(0,h[0].start).trimEnd(),E={};for(let ke=0;ke<h.length;ke++){let Qe=h[ke].start,Be=ke+1<h.length?h[ke+1].start:d.length,je=d.slice(Qe,Be).trim();if(!E[h[ke].key])E[h[ke].key]=[];E[h[ke].key].push(je)}let G=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((ke)=>E[ke]).map((ke)=>E[ke].join(" ")).join(" ");return G?`${D} ${G}`:D}function Oi(d,h){let D=Math.max(1,h?.baseMs??50),E=Math.max(1,h?.factor??2),V=Math.max(D,h?.maxMs??2000),G=Math.min(V,D*E**Math.max(0,d-1));if(h?.jitter)G=Math.min(V,G*(0.9+Math.random()*0.2));return Math.floor(G)}function i(d){let h=d?.sql??w(),D=d?.meta,E=d?.schema,V;function G(Fe,Le){let qe=h.unsafe(Fe,Le);if(typeof qe.sql!=="string")V??=new WeakMap,V.set(qe,{sql:Fe,params:Le?.slice()});return qe}let ke,Qe=(Fe,Le)=>{let qe=D?.temporalColumns?.[Fe];if(!qe||qe.length===0||!n(e.dialect))return Le;return Le.map((Ke)=>{let Dt=null;for(let He of qe){if(!(He in Ke))continue;let Jt=Rt(Ke[He]);if(Jt!==Ke[He])Dt=Dt??{...Ke},Dt[He]=Jt}return Dt??Ke})};function Be(Fe){if(typeof Fe==="number")return Fe;let Le=String(Fe),qe=7;for(let Ke=0;Ke<Le.length;Ke++)qe=qe*31+Le.charCodeAt(Ke)|0;return Math.abs(qe)}function je(){if(!d?.hooks)return e.hooks;return{...e.hooks,...d.hooks}}let gt=new Map;function pt(Fe){if(Array.isArray(Fe)){let[He,Jt,It]=Fe;zt(He,"where(column)");let vt=String(He);switch(Jt){case"in":if(Array.isArray(It)){let xt=s(It.length);return G(`${vt} IN (${xt})`,It)}return G(`${vt} IN (${t(1)})`,[It]);case"not in":if(Array.isArray(It)){let xt=s(It.length);return G(`${vt} NOT IN (${xt})`,It)}return G(`${vt} NOT IN (${t(1)})`,[It]);case"like":return G(`${vt} LIKE ${t(1)}`,[It]);case"is":case"is not":{if(It!==null&&It!==void 0)throw TypeError(`[query-builder] where(..., '${Jt}', ?): operator '${Jt}' only accepts NULL/undefined as value, got ${typeof It} (${String(It)})`);return G(`${vt} IS ${Jt==="is not"?"NOT ":""}NULL`)}case"!=":return G(`${vt} <> ${t(1)}`,[It]);case"<":case">":case"<=":case">=":case"=":return G(`${vt} ${Jt} ${t(1)}`,[It]);default:throw TypeError(`[query-builder] where(..., '${String(Jt)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in Fe)return Fe.raw;let Le=Object.keys(Fe);if(Le.length===0)return G("");let qe=[],Ke=[],Dt=1;for(let He of Le){zt(He,"where(object key)");let Jt=Fe[He];if(Array.isArray(Jt)){let It=s(Jt.length,Dt);qe.push(`${He} IN (${It})`),Ke.push(...Jt),Dt+=Jt.length}else qe.push(`${He} = ${t(Dt++)}`),Ke.push(Jt)}return G(qe.join(" AND "),Ke)}function $t(Fe,Le,qe){if(!qe)return Le;let Ke=pt(qe);return h`${Le} WHERE ${Ke}`}function Ct(Fe){let Le=V?.get(Fe);if(Le)return Le.sql;let qe=e.debug?.captureText;if(e.debug)e.debug.captureText=!0;let Ke=String(Fe);if(e.debug)e.debug.captureText=qe;return Ke}function Yt(Fe){let Le=V?.get(Fe);if(Le)return Le.params;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 Et(Fe,Le,qe){let Ke=je(),Dt=Ke?.slowQueryThresholdMs,He=Dt!=null&&Dt>=0,Jt=Boolean(Ke?.onSlowQuery||He),It=Ke&&(Ke.onQueryStart||Ke.onQueryEnd||Ke.onQueryError||Ke.startSpan||Jt),vt=qe?.timeoutMs&&qe.timeoutMs>0||qe?.signal;if(!It&&!vt)return Fe.execute();let xt=Ct(Fe),Tt=Yt(Fe),Vt=Date.now(),St;try{if(Ke?.onQueryStart?.({sql:xt,params:Tt,kind:Le}),Ke?.startSpan)St=Ke.startSpan({sql:xt,params:Tt,kind:Le})}catch{}let yt=!1,qt=(jt,Tn,Kt=Boolean(jt))=>{if(yt)return;yt=!0;let Xt=Date.now()-Vt;try{if(Kt)Ke?.onQueryError?.({sql:xt,params:Tt,error:jt,durationMs:Xt,kind:Le});else if(Ke?.onQueryEnd?.({sql:xt,params:Tt,durationMs:Xt,rowCount:Tn,kind:Le}),He&&Xt>=Dt)if(Ke?.onSlowQuery)Ke.onSlowQuery({sql:xt,params:Tt,durationMs:Xt,kind:Le});else console.warn(`[query-builder] slow query (${Xt}ms >= ${Dt}ms): ${xt}`)}catch{}try{St?.end(jt)}catch{}};if(typeof Fe.executeSync==="function"){let jt,Tn,Kt=!1;try{jt=Fe.executeSync()}catch(wn){Tn=wn,Kt=!0}if(qe?.signal?.aborted){try{Fe.cancel?.()}catch{}Tn=Object.assign(Error("Query aborted"),{code:"EBQBABORT"}),Kt=!0}if(Kt)return qt(Tn,void 0,!0),Promise.reject(Tn);let Xt=Array.isArray(jt)?jt.length:typeof jt==="number"?jt:void 0;return qt(void 0,Xt),Promise.resolve(jt)}let Lt=Fe.execute(),Ht=[Lt],en;if(qe?.timeoutMs&&qe.timeoutMs>0){let jt=new Promise((Tn,Kt)=>{en=setTimeout(()=>{try{Fe.cancel?.()}catch{}let Xt=Error(`Query timed out after ${qe.timeoutMs}ms`);Xt.code="EBQBTIMEOUT",Kt(Xt)},qe.timeoutMs)});Ht.push(jt)}if(qe?.signal){if(qe.signal.aborted){try{Fe.cancel?.()}catch{}let Tn=Error("Query aborted");return Tn.code="EBQBABORT",qt(Tn),Promise.reject(Tn)}let jt=()=>{try{Fe.cancel?.()}catch{}};qe.signal.addEventListener("abort",jt,{once:!0}),Lt.finally(()=>{qe.signal?.removeEventListener("abort",jt)})}return Promise.race(Ht).then((jt)=>{clearTimeout(en);let Tn=Array.isArray(jt)?jt.length:typeof jt==="number"?jt:void 0;return qt(void 0,Tn),jt}).catch((jt)=>{throw clearTimeout(en),qt(jt),jt})}function Zt(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 Le=Fe;for(let qe of["changes","affectedRows","count","rowCount","numAffectedRows","numUpdatedRows","numDeletedRows","numInsertedOrUpdatedRows"])if(Le[qe]!==void 0&&Le[qe]!==null)return Zt(Le[qe]);if(Array.isArray(Fe))return Fe.reduce((qe,Ke)=>qe+Zt(Ke),0);return 0}function En(Fe,Le){let qe=Le??Ct(Fe);return{sql:qe,toString:()=>qe,execute:()=>Fe.execute(),values:()=>Fe.values(),raw:()=>Fe.raw()}}function Dn(Fe,Le){let qe=h,Ke=Le&&Le.length>0?`SELECT ${Le.join(", ")} FROM ${String(Fe)}`:`SELECT * FROM ${String(Fe)}`,Dt=[],He=[],Jt=!1,It=!1,vt=!1,xt=null,Tt=()=>{if(xt===null){let U=pr(Lt());xt=He.length>0?G(U,He):G(U)}return xt},Vt=(U="",xe="",ve=[])=>G(`${U}${pr(Lt())}${xe}`,[...He,...ve]),St=(U,xe)=>{Dt.push({conn:U,sql:xe}),xt=null},yt=(U,xe)=>{St(U==="OR"?"OR":"AND",xe)},qt=(U)=>{let xe=Ae(U,Ni,1);return xe.length>0?xe[0].start:-1},Lt=(U)=>{let xe=x(U?[...Dt,U]:Dt);if(!xe)return Ke;if(Jt)return`${Ke} ${It?"AND":"WHERE"} ${xe}`;let ve=qt(Ke);return ve>=0?`${Ke.slice(0,ve)}WHERE ${xe} ${Ke.slice(ve)}`:`${Ke} WHERE ${xe}`},Ht=(U,xe)=>{let ve=Dn(Fe);xe(ve);let Ve=ve.__whereState?.();if(!Ve||!Ve.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,kt=bt>0&&e.dialect==="postgres"?Ve.body.replace(/\$(\d+)/g,(Wt,Ut)=>`$${Number(Ut)+bt}`):Ve.body;He.push(...Ve.params),St(U,`(${kt})`)},en=(U,xe,ve,Ve,bt,kt)=>{if(typeof Ve==="string"&&bt!==void 0){zt(String(Ve),`${ve}(column)`),Fn(bt,`${ve}(operator)`);let Wt=He.length+1;return He.push(kt),St(xe,`${String(Ve)} ${String(bt)} ${t(Wt)}`),U}if(Array.isArray(Ve)){let[Wt,Ut,Gt]=Ve,Ft=String(Wt);zt(Ft,`${ve}(column)`);let Qt=Fn(Ut,`${ve}(operator)`);if(Qt==="in"||Qt==="not in"){let Sn=Array.isArray(Gt)?Gt:[Gt],kn=s(Sn.length,He.length+1),Ln=o(l(Ft),Sn,Qt==="not in",kn);He.push(...Sn),St(xe,Ln)}else{let Sn=He.length+1;He.push(Gt),St(xe,`${Ft} ${Qt} ${t(Sn)}`)}return U}if(typeof Ve==="function")return Ht(xe,Ve),U;if($r(Ve))Rr(`${ve}(expr)`);if(dr(Ve)){let Wt=mr(Ve,He.length+1);return He.push(...Wt.parameters),St(xe,Wt.text),U}if(Ve&&typeof Ve==="object"&&!("raw"in Ve)){let Wt=[];for(let Ut of Object.keys(Ve)){zt(Ut,`${ve}(column)`);let Gt=Ve[Ut];if(Array.isArray(Gt)){let Ft=s(Gt.length,He.length+1);Wt.push(o(l(Ut),Gt,!1,Ft)),He.push(...Gt)}else{let Ft=He.length+1;Wt.push(`${Ut} = ${t(Ft)}`),He.push(Gt)}}if(Wt.length>0)St(xe,Wt.length>1?`(${Wt.join(" AND ")})`:Wt[0]);return U}if(Ve&&typeof Ve.raw<"u")return St(xe,Ve.raw),U;return U},jt=(U,xe)=>{if(Dt.length>0)Ke=Lt(),Dt.length=0;Jt=!0;let ve=xe.__rawState?.();if(ve){let Ve=He.length,bt=e.dialect==="postgres"?ve.sql.replace(/\$(\d+)/g,(kt,Wt)=>`$${Number(Wt)+Ve}`):ve.sql;Ke+=` ${U} ${bt}`,He.push(...ve.params),It=xe.__hasPredicate?.()??Cn.WHERE.test(bt)}else{let Ve=String(xe.toSQL());Ke+=` ${U} ${Ve}`,It=xe.__hasPredicate?.()??Cn.WHERE.test(Ve)}xt=null},Tn=(U)=>{let xe=Ae(Ke,Bi,1),ve=xe.length>0?xe[0].start:-1;Ke=ve>=0?`${Ke.slice(0,ve)}${U} ${Ke.slice(ve)}`:`${Ke} ${U}`,xt=null},Kt=new Set,Xt,wn,xn=!1,On=!1,In=!1,Xn=new Map,Wn=new Set,Mr=60000,Pn=(U)=>y(e.relations.singularizeStrategy)(U),Zn=(U)=>{if(!D)return null;return S(D,String(Fe),U,{singularize:Pn,models:D.models})},sr=(U)=>{if(!U||typeof U!=="object"||Wn.size===0)return U;let xe;for(let ve of Object.keys(U))if(ve.startsWith("pivot_")){if(!xe)xe={};xe[ve.slice(6)]=U[ve],delete U[ve]}if(xe)U.pivot=xe;return U},Sr=(U)=>{if(Wn.size===0||!U)return U;if(Array.isArray(U))for(let xe=0;xe<U.length;xe++)sr(U[xe]);else sr(U);return U},wr=(U)=>{if(!D)return;if(Kt.has(U.pivotTable))return;let xe=String(Fe),ve=D.primaryKeys[xe]??"id";zt(U.pivotTable,"wherePivot auto-join (pivot table)"),zt(U.fkParent,"wherePivot auto-join (parent FK)"),zt(xe,"wherePivot auto-join (parent table)"),zt(ve,"wherePivot auto-join (parent PK)"),xt=qe`${Tt()} LEFT JOIN ${qe(U.pivotTable)} ON ${qe(`${U.pivotTable}.${U.fkParent}`)} = ${qe(`${xe}.${ve}`)}`,Ke=`${Ke} LEFT JOIN ${U.pivotTable} ON ${U.pivotTable}.${U.fkParent} = ${xe}.${ve}`,Kt.add(U.pivotTable)},Dr=(U)=>{if(Cn.SELECT_STAR.test(Ke))Ke=Ke.replace(Cn.SELECT_STAR,`SELECT *, ${U}`);else if(Cn.SELECT.test(Ke))Ke=Ke.replace(Cn.SELECT_FROM,`SELECT $1, ${U} FROM`);let xe=String(Tt());if(Cn.SELECT_STAR.test(xe)){let ve=xe.replace(Cn.SELECT_STAR,`SELECT *, ${U}`);xt=G(ve)}else if(Cn.SELECT.test(xe)){if(Cn.SELECT_FROM.exec(xe)){let Ve=xe.replace(Cn.SELECT_FROM,`SELECT $1, ${U} FROM`);xt=G(Ve)}}},er=(U,xe,ve,Ve)=>{Dr(`${U} ${Si(ve,Ve)} AS ${xe}`)},Cr=(U,xe,ve,Ve)=>{zt(U,"relationship subquery (parent table)"),zt(xe,"relationship subquery (target table)"),zt(ve,"relationship subquery (primary key)");let bt=`${U.endsWith("s")?U.slice(0,-1):U}_id`;zt(bt,"relationship subquery (foreign key)");let kt=`SELECT 1 FROM ${xe} WHERE ${xe}.${bt} = ${U}.${ve}`;if(Ve){let Ut=Ve({where:(Gt,Ft,Qt)=>(zt(Gt,"relationship subquery condition"),`${xe}.${Gt} ${Fn(Ft,"whereHas callback")} ${ir(Qt)}`)});if(Ut)kt+=` AND ${Ut}`}return kt},Ir=(U,xe,ve,Ve)=>{zt(U,"relationship subquery (parent table)"),zt(xe,"relationship subquery (target table)"),zt(ve,"relationship subquery (primary key)");let bt=`${xe.endsWith("s")?xe.slice(0,-1):xe}_id`;zt(bt,"relationship subquery (foreign key)");let kt=`SELECT 1 FROM ${xe} WHERE ${xe}.${ve} = ${U}.${bt}`;if(Ve){let Ut=Ve({where:(Gt,Ft,Qt)=>(zt(Gt,"relationship subquery condition"),`${xe}.${Gt} ${Fn(Ft,"whereHas callback")} ${ir(Qt)}`)});if(Ut)kt+=` AND ${Ut}`}return kt},vr=(U,xe,ve,Ve,bt,kt)=>{zt(U,"relationship subquery (parent table)"),zt(xe,"relationship subquery (target table)"),zt(ve,"relationship subquery (primary key)"),zt(Ve,"relationship subquery (target primary key)");let Wt=kt&&D?S(D,U,kt,{singularize:Pn,models:D.models}):null,Ut=Pn(U),Gt=Pn(xe),Ft=Wt?.pivotTable??[Ut,Gt].sort().join("_"),Qt=Wt?.fkParent??`${Ut}_id`,Sn=Wt?.fkRelated??`${Gt}_id`;zt(Ft,"relationship subquery (pivot table)"),zt(Qt,"relationship subquery (foreign key A)"),zt(Sn,"relationship subquery (foreign key B)");let kn=`SELECT 1 FROM ${Ft} JOIN ${xe} ON ${xe}.${Ve} = ${Ft}.${Sn} WHERE ${Ft}.${Qt} = ${U}.${ve}`;if(bt){let $n=bt({where:(Kn,Vn,Hn)=>(zt(Kn,"relationship subquery condition"),`${xe}.${Kn} ${Fn(Vn,"whereHas callback")} ${ir(Hn)}`)});if($n)kn+=` AND ${$n}`}return kn},si=(U,xe,ve)=>{zt(U,"withCount (parent table)"),zt(xe,"withCount (target table)"),zt(ve,"withCount (primary key)");let Ve=`${U.endsWith("s")?U.slice(0,-1):U}_id`;return zt(Ve,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${xe} WHERE ${xe}.${Ve} = ${U}.${ve})`},ii=(U,xe,ve,Ve)=>{zt(U,"withCount (parent table)"),zt(xe,"withCount (target table)"),zt(ve,"withCount (primary key)");let bt=Ve&&D?S(D,U,Ve,{singularize:Pn,models:D.models}):null,kt=Pn(U),Wt=Pn(xe),Ut=bt?.pivotTable??[kt,Wt].sort().join("_"),Gt=bt?.fkParent??`${kt}_id`;return zt(Ut,"withCount (pivot table)"),zt(Gt,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${Ut} WHERE ${Ut}.${Gt} = ${U}.${ve})`},Pr=(U,xe,ve)=>{if(!D)return;zt(ve,`with${U[0]}${U.slice(1).toLowerCase()} (column)`);let Ve=String(Fe),bt=D.relations?.[Ve];if(!bt)return;let kt=Object.entries(bt).find(([$n,Kn])=>Kn&&typeof Kn==="object"&&(xe in Kn));if(!kt)return;let[Wt,Ut]=kt,Gt=Ut[xe],Ft=typeof Gt==="string"?Gt:Gt?.model||Gt?.target||Gt,Qt=D.modelToTable[Ft]||Ft,Sn=D.primaryKeys[Ve]??"id";zt(Qt,`with${U} (target table)`);let kn=`${U}(${Qt}.${ve})`,Ln;if(Wt==="hasMany"||Wt==="hasOne"){let $n=`${Ve.endsWith("s")?Ve.slice(0,-1):Ve}_id`;zt($n,`with${U} (foreign key)`),Ln=`(SELECT ${kn} FROM ${Qt} WHERE ${Qt}.${$n} = ${Ve}.${Sn})`}else if(Wt==="belongsToMany"){let $n=D?S(D,Ve,xe,{singularize:Pn,models:D.models}):null,Kn=Pn(Ve),Vn=Pn(Qt),Hn=$n?.pivotTable??[Kn,Vn].sort().join("_"),Qn=$n?.fkParent??`${Kn}_id`,Nn=$n?.fkRelated??`${Vn}_id`,Er=D.primaryKeys[Qt]??"id";zt(Hn,`with${U} (pivot table)`),zt(Qn,`with${U} (foreign key)`),zt(Nn,`with${U} (related key)`),Ln=`(SELECT ${kn} FROM ${Hn} JOIN ${Qt} ON ${Qt}.${Er} = ${Hn}.${Nn} WHERE ${Hn}.${Qn} = ${Ve}.${Sn})`}else return;Dr(`${Ln} AS ${xe}_${U.toLowerCase()}_${ve}`)},ls=()=>{if(Xn.size===0)return;let U=[];for(let[xe,ve]of Xn.entries()){let Ve=Zn(xe);if(!Ve)continue;for(let kt of ve)zt(kt,"withPivot");let bt=ve.map((kt)=>`${Ve.pivotTable}.${kt} AS pivot_${kt}`);U.push(...bt)}if(U.length>0){let xe=U.join(", ");Dr(xe)}};return new Proxy({distinct(){return Ke=Ke.replace(/^SELECT\s+/i,"SELECT DISTINCT "),xt=null,this},distinctOn(...U){let xe=U.map(String).join(", ");return Ke=Ke.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${xe}) `),xt=null,this},selectRaw(U,...xe){let ve=fr(U,"selectRaw(fragment)",xe),Ve=Ke.indexOf(" FROM ");if(Ve!==-1)Ke=`${Ke.substring(0,Ve)}, ${ve}${Ke.substring(Ve)}`;else Ke+=`, ${ve}`;return xt=null,this},rowNumber(U="row_number",xe,ve){let Ve=[];if(xe){let Ut=Array.isArray(xe)?xe:[xe];Ve.push(`PARTITION BY ${Ut.join(", ")}`)}if(ve&&ve.length)Ve.push(`ORDER BY ${ve.map(([Ut,Gt])=>`${Ut} ${Gt==="desc"?"DESC":"ASC"}`).join(", ")}`);let kt=`ROW_NUMBER() ${Ve.length?`OVER (${Ve.join(" ")})`:"OVER ()"} AS ${U}`,Wt=Ke.indexOf(" FROM ");if(Wt!==-1)Ke=`${Ke.substring(0,Wt)}, ${kt}${Ke.substring(Wt)}`;else Ke+=`, ${kt}`;return xt=null,this},denseRank(U="dense_rank",xe,ve){let Ve=Array.isArray(xe)?xe:xe?[xe]:[],bt=[];if(Ve.length)bt.push(`PARTITION BY ${Ve.join(", ")}`);if(ve&&ve.length)bt.push(`ORDER BY ${ve.map(([Gt,Ft])=>`${Gt} ${Ft==="desc"?"DESC":"ASC"}`).join(", ")}`);let Wt=`DENSE_RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ke.indexOf(" FROM ");if(Ut!==-1)Ke=`${Ke.substring(0,Ut)}, ${Wt}${Ke.substring(Ut)}`;else Ke+=`, ${Wt}`;return xt=null,this},rank(U="rank",xe,ve){let Ve=Array.isArray(xe)?xe:xe?[xe]:[],bt=[];if(Ve.length)bt.push(`PARTITION BY ${Ve.join(", ")}`);if(ve&&ve.length)bt.push(`ORDER BY ${ve.map(([Gt,Ft])=>`${Gt} ${Ft==="desc"?"DESC":"ASC"}`).join(", ")}`);let Wt=`RANK() ${bt.length?`OVER (${bt.join(" ")})`:"OVER ()"} AS ${U}`,Ut=Ke.indexOf(" FROM ");if(Ut!==-1)Ke=`${Ke.substring(0,Ut)}, ${Wt}${Ke.substring(Ut)}`;else Ke+=`, ${Wt}`;return xt=null,this},over(U,xe,ve={}){return er(U,xe,ve.partitionBy,ve.orderBy),this},lag(U,xe={}){let ve=[U,String(xe.offset??1)];if(xe.defaultValue!==void 0)ve.push(String(xe.defaultValue));return er(`LAG(${ve.join(", ")})`,xe.alias??`${U}_lag`,xe.partitionBy,xe.orderBy),this},lead(U,xe={}){let ve=[U,String(xe.offset??1)];if(xe.defaultValue!==void 0)ve.push(String(xe.defaultValue));return er(`LEAD(${ve.join(", ")})`,xe.alias??`${U}_lead`,xe.partitionBy,xe.orderBy),this},sumOver(U,xe={}){return er(`SUM(${U})`,xe.alias??`${U}_sum`,xe.partitionBy,xe.orderBy),this},avgOver(U,xe={}){return er(`AVG(${U})`,xe.alias??`${U}_avg`,xe.partitionBy,xe.orderBy),this},countOver(U="*",xe={}){return er(`COUNT(${U})`,xe.alias??"count_over",xe.partitionBy,xe.orderBy),this},minOver(U,xe={}){return er(`MIN(${U})`,xe.alias??`${U}_min`,xe.partitionBy,xe.orderBy),this},maxOver(U,xe={}){return er(`MAX(${U})`,xe.alias??`${U}_max`,xe.partitionBy,xe.orderBy),this},firstValue(U,xe={}){return er(`FIRST_VALUE(${U})`,xe.alias??`${U}_first`,xe.partitionBy,xe.orderBy),this},lastValue(U,xe={}){return er(`LAST_VALUE(${U})`,xe.alias??`${U}_last`,xe.partitionBy,xe.orderBy),this},selectAll(){return this},select(U){if(!U)return this;let xe=Array.isArray(U)?U:[U];if(xe.length===0)return this;let ve=xe.map(cs),Ve=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(Ke),bt=Ve?Ve[1]:"",kt=Ke.indexOf(" FROM ");if(kt!==-1)Ke=`SELECT ${bt}${ve.join(", ")}${Ke.substring(kt)}`;else Ke=`SELECT ${bt}${ve.join(", ")} FROM ${Fe}`;return xt=null,this},addSelect(...U){if(!U.length)return this;let xe=U.map(cs),ve=Ke.indexOf(" FROM ");if(ve!==-1)Ke=`${Ke.substring(0,ve)}, ${xe.join(", ")}${Ke.substring(ve)}`;else Ke+=`, ${xe.join(", ")}`;return xt=null,this},with(...U){if(!D||!U||U.length===0)return this;let xe=[];for(let Ft of U){if(!Ft)continue;if(typeof Ft==="string")xe.push({name:Ft});else if(typeof Ft==="object"&&!Array.isArray(Ft))for(let[Qt,Sn]of Object.entries(Ft))if(typeof Sn==="function")xe.push({name:Qt,callback:Sn});else xe.push({name:Qt})}if(xe.length===0)return this;let ve=e.relations.maxEagerLoad??50;if(xe.length>ve)throw Error(`[query-builder] Too many relationships to eager load (${xe.length}). Maximum allowed: ${ve}`);let Ve=String(Fe),bt=new Set,kt=new Set,Wt=new Map,Ut=(Ft)=>{let Qt=D.relations?.[Ft];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||{})]},Gt=(Ft,Qt,Sn=0,kn)=>{let Ln=e.relations.maxDepth??10;if(Sn>=Ln)throw Error(`[query-builder] Maximum relationship depth (${Ln}) exceeded at '${Qt}'. Consider using separate queries or increasing maxDepth.`);let $n=D.relations?.[Ft];if(!$n)return Ft;let Kn=(Bn)=>{if(e.softDeletes?.enabled&&e.softDeletes?.defaultFilter){let An=e.softDeletes.column||"deleted_at";return` AND ${Bn}.${An} IS NULL`}return""},Vn=(Bn)=>{if(!kn)return"";let An=[],_n=(Mn,Yn,tr)=>{zt(String(Mn),"with() constraint column");let yr=Fn(Yn,"with() constraint operator");An.push(`${Bn}.${String(Mn)} ${yr} ${ir(tr)}`)},vn=(Mn)=>()=>{throw Error(`[query-builder] with('${Qt}', ...): ${Mn} 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.)`)},qn={where:(Mn,Yn,tr)=>{if(Array.isArray(Mn))_n(Mn[0],Mn[1],Mn[2]);else if(Mn&&typeof Mn==="object")for(let yr of Object.keys(Mn))_n(yr,"=",Mn[yr]);else if(Yn!==void 0&&tr!==void 0)_n(Mn,Yn,tr);else if(Yn!==void 0)_n(Mn,"=",Yn);return qn},whereIn:(Mn,Yn)=>(zt(String(Mn),"with() constraint column"),An.push(`${Bn}.${String(Mn)} IN (${Yn.map(ir).join(", ")})`),qn),whereNull:(Mn)=>(zt(String(Mn),"with() constraint column"),An.push(`${Bn}.${String(Mn)} IS NULL`),qn),whereNotNull:(Mn)=>(zt(String(Mn),"with() constraint column"),An.push(`${Bn}.${String(Mn)} IS NOT NULL`),qn),orderBy:vn("orderBy()"),limit:vn("limit()"),offset:vn("offset()"),take:vn("take()")};return kn(qn),An.length?` AND ${An.join(" AND ")}`:""},Hn=()=>{let Bn=(vn)=>{let qn=vn?.[Qt];return qn?D.modelToTable[qn]:void 0},An=(vn)=>{let qn=vn?.[Qt],Mn=typeof qn==="string"?qn:qn?.model;return Mn?D.modelToTable[Mn]:void 0},_n=(vn)=>{let qn=vn?.[Qt];return qn?.target?D.modelToTable[qn.target]:void 0};return Bn($n?.hasOne)||Bn($n?.hasMany)||Bn($n?.belongsTo)||An($n?.belongsToMany)||_n($n?.hasOneThrough)||_n($n?.hasManyThrough)||Bn($n?.morphOne)||Bn($n?.morphMany)||Bn($n?.morphToMany)||Bn($n?.morphedByMany)},Qn=Hn()??(D.modelToTable[Qt]||D.tableToModel[Qt]?D.modelToTable[Qt]??Qt:Qt),Nn=String(Qn);if(!Qn||!Hn()&&!D.modelToTable[Qt]&&!D.tableToModel[Qt]){let Bn=Ut(Ft);if(Bn.length>0&&!Bn.includes(Qt)){let An=` Available relationships: ${Bn.join(", ")}`;throw Error(`[query-builder] Relationship '${Qt}' not found on table '${Ft}'.${An}`)}}if(e.relations.detectCycles!==!1){let Bn=`${Ft}->${Nn}`;if(bt.has(Bn))throw Error(`[query-builder] Circular relationship detected: ${Bn}. This would cause an infinite loop.`);bt.add(Bn)}if(!Nn||Nn===Ft)return Ft;let Er=$n?.hasOneThrough?.[Qt]||$n?.hasManyThrough?.[Qt];if(Er){let{through:Bn,target:An}=Er,_n=D.modelToTable[Bn]||Bn,vn=D.modelToTable[An]||An,qn=D.primaryKeys[Ft]??"id",Mn=D.primaryKeys[_n]??"id",Yn=`${Pn(Ft)}_id`,tr=`${Pn(_n)}_id`;return Tn(`LEFT JOIN ${_n} ON ${_n}.${Yn} = ${Ft}.${qn} LEFT JOIN ${vn} ON ${vn}.${tr} = ${_n}.${Mn}`),Kt.add(_n),Kt.add(vn),vn}if(Boolean($n?.belongsToMany?.[Qt])){let Bn=S(D,Ft,Qt,{singularize:Pn,models:D.models}),An=Bn?.pivotTable??[Pn(Ft),Pn(Nn)].sort().join("_"),_n=D.primaryKeys[Ft]??"id",vn=D.primaryKeys[Nn]??"id",qn=Bn?.fkParent??`${Pn(Ft)}_id`,Mn=Bn?.fkRelated??`${Pn(Nn)}_id`;return Tn(`LEFT JOIN ${An} ON ${An}.${qn} = ${Ft}.${_n} LEFT JOIN ${Nn} ON ${Nn}.${vn} = ${An}.${Mn}${Vn(Nn)}`),Kt.add(An),Kt.add(Nn),Nn}if(Boolean($n?.morphToMany?.[Qt])){let Bn=Qt,An=`${Pn(Nn)}_${Bn}`,_n=D.primaryKeys[Ft]??"id",vn=D.primaryKeys[Nn]??"id",qn=`${Bn}_type`,Mn=`${Bn}_id`,Yn=`${Pn(Nn)}_id`,tr=ir(D.tableToModel[Ft]||Ft);return Tn(`LEFT JOIN ${An} ON ${An}.${Mn} = ${Ft}.${_n} AND ${An}.${qn} = ${tr} LEFT JOIN ${Nn} ON ${Nn}.${vn} = ${An}.${Yn}`),Kt.add(An),Kt.add(Nn),Nn}if(Boolean($n?.morphedByMany?.[Qt])){let Bn=$n.morphedByMany?.[Qt]||Qt,An=D.modelToTable[Bn]||Bn,_n=Pn(Ft),vn=`${Pn(An)}_${_n}`,qn=D.primaryKeys[Ft]??"id",Mn=D.primaryKeys[An]??"id",Yn=`${_n}_type`,tr=`${_n}_id`,yr=`${Pn(An)}_id`,di=ir(D.tableToModel[An]||An);return Tn(`LEFT JOIN ${vn} ON ${vn}.${yr} = ${Ft}.${qn} LEFT JOIN ${An} ON ${An}.${Mn} = ${vn}.${tr} AND ${vn}.${Yn} = ${di}`),Kt.add(vn),Kt.add(An),An}if(Boolean($n?.belongsTo?.[Qt])){let Bn=`${Pn(Nn)}_id`,An=D.primaryKeys[Nn]??"id";return Tn(`LEFT JOIN ${Nn} ON ${Ft}.${Bn} = ${Nn}.${An}${Vn(Nn)}`),Kt.add(Nn),Nn}let ai=Boolean($n?.morphOne?.[Qt]),oi=Boolean($n?.morphMany?.[Qt]);if(ai||oi){let Bn=`${Qt}_type`,An=`${Qt}_id`,_n=D.primaryKeys[Ft]??"id",vn=ir(D.tableToModel[Ft]||Ft);return Tn(`LEFT JOIN ${Nn} ON ${Nn}.${An} = ${Ft}.${_n} AND ${Nn}.${Bn} = ${vn}`),Kt.add(Nn),Nn}let li=`${Pn(Ft)}_id`,ui=D.primaryKeys[Ft]??"id",ci=`${Kn(Nn)}${Vn(Nn)}`;return Tn(`LEFT JOIN ${Nn} ON ${Nn}.${li} = ${Ft}.${ui}${ci}`),Kt.add(Nn),Nn};for(let Ft of xe){let Qt=Ft.name.trim();if(Ft.callback)Wt.set(Qt,Ft.callback);let Sn=Qt.split("."),kn=Ve,Ln=0;for(let $n of Sn){if(!$n||$n.trim().length===0)continue;let Kn=$n.trim(),Vn=Wt.get(Kn);kn=Gt(kn,Kn,Ln,Vn)||kn,Ln++}kt.add(Qt)}if(Xn.size>0){let Ft=[];for(let[Qt,Sn]of Xn.entries()){let kn=Zn(Qt);if(!kn)continue;let Ln=Sn.map(($n)=>`${kn.pivotTable}.${$n} AS pivot_${$n}`);Ft.push(...Ln)}if(Ft.length>0){let Qt=Ft.join(", ");Dr(Qt)}}return xt=null,this},whereHas(U,xe){if(!D)return this;let ve=String(Fe),Ve=D.relations?.[ve];if(!Ve)throw Error(`[query-builder] No relationships defined for table '${ve}'`);let bt=Object.entries(Ve).find(([Sn,kn])=>kn&&typeof kn==="object"&&(U in kn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${ve}'`);let[kt,Wt]=bt,Ut=Wt[U],Gt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Ft=D.modelToTable[Gt]||Gt,Qt;if(kt==="hasMany"||kt==="hasOne"){let Sn=D.primaryKeys[ve]??"id";Qt=Cr(ve,Ft,Sn,xe)}else if(kt==="belongsTo"){let Sn=D.primaryKeys[Ft]??"id";Qt=Ir(ve,Ft,Sn,xe)}else if(kt==="belongsToMany"){let Sn=D.primaryKeys[ve]??"id",kn=D.primaryKeys[Ft]??"id";Qt=vr(ve,Ft,Sn,kn,xe,U)}else throw Error(`[query-builder] Unsupported relationship type '${kt}' for whereHas`);return yt("WHERE",`EXISTS (${Qt})`),this},whereDoesntHave(U,xe){if(!D)return this;let ve=String(Fe),Ve=D.relations?.[ve];if(!Ve)throw Error(`[query-builder] No relationships defined for table '${ve}'`);let bt=Object.entries(Ve).find(([Sn,kn])=>kn&&typeof kn==="object"&&(U in kn));if(!bt)throw Error(`[query-builder] Relationship '${U}' not found on table '${ve}'`);let[kt,Wt]=bt,Ut=Wt[U],Gt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Ft=D.modelToTable[Gt]||Gt,Qt;if(kt==="hasMany"||kt==="hasOne"){let Sn=D.primaryKeys[ve]??"id";Qt=Cr(ve,Ft,Sn,xe)}else if(kt==="belongsTo"){let Sn=D.primaryKeys[Ft]??"id";Qt=Ir(ve,Ft,Sn,xe)}else if(kt==="belongsToMany"){let Sn=D.primaryKeys[ve]??"id",kn=D.primaryKeys[Ft]??"id";Qt=vr(ve,Ft,Sn,kn,xe,U)}else throw Error(`[query-builder] Unsupported relationship type '${kt}' for whereDoesntHave`);return yt("WHERE",`NOT EXISTS (${Qt})`),this},has(U){if(!D)return this;let xe=String(Fe),ve=D.relations?.[xe];if(!ve)throw Error(`[query-builder] No relationships defined for table '${xe}'`);let Ve=Object.entries(ve).find(([Qt,Sn])=>Sn&&typeof Sn==="object"&&(U in Sn));if(!Ve)throw Error(`[query-builder] Relationship '${U}' not found on table '${xe}'`);let[bt,kt]=Ve,Wt=kt[U],Ut=typeof Wt==="string"?Wt:Wt?.model||Wt?.target||Wt,Gt=D.modelToTable[Ut]||Ut,Ft;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[xe]??"id";Ft=Cr(xe,Gt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Gt]??"id";Ft=Ir(xe,Gt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[xe]??"id",Sn=D.primaryKeys[Gt]??"id";Ft=vr(xe,Gt,Qt,Sn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for has`);return yt("WHERE",`EXISTS (${Ft})`),this},doesntHave(U){if(!D)return this;let xe=String(Fe),ve=D.relations?.[xe];if(!ve)throw Error(`[query-builder] No relationships defined for table '${xe}'`);let Ve=Object.entries(ve).find(([Qt,Sn])=>Sn&&typeof Sn==="object"&&(U in Sn));if(!Ve)throw Error(`[query-builder] Relationship '${U}' not found on table '${xe}'`);let[bt,kt]=Ve,Wt=kt[U],Ut=typeof Wt==="string"?Wt:Wt?.model||Wt?.target||Wt,Gt=D.modelToTable[Ut]||Ut,Ft;if(bt==="hasMany"||bt==="hasOne"){let Qt=D.primaryKeys[xe]??"id";Ft=Cr(xe,Gt,Qt)}else if(bt==="belongsTo"){let Qt=D.primaryKeys[Gt]??"id";Ft=Ir(xe,Gt,Qt)}else if(bt==="belongsToMany"){let Qt=D.primaryKeys[xe]??"id",Sn=D.primaryKeys[Gt]??"id";Ft=vr(xe,Gt,Qt,Sn,void 0,U)}else throw Error(`[query-builder] Unsupported relationship type '${bt}' for doesntHave`);return yt("WHERE",`NOT EXISTS (${Ft})`),this},withCount(...U){if(!D||!U||U.length===0)return this;let xe=String(Fe);for(let ve of U){let Ve=D.relations?.[xe];if(!Ve)continue;let bt=Object.entries(Ve).find(([Ln,$n])=>$n&&typeof $n==="object"&&(ve in $n));if(!bt)continue;let[kt,Wt]=bt,Ut=Wt[ve],Gt=typeof Ut==="string"?Ut:Ut?.model||Ut?.target||Ut,Ft=D.modelToTable[Gt]||Gt,Qt=D.primaryKeys[xe]??"id",Sn;if(kt==="hasMany"||kt==="hasOne")Sn=si(xe,Ft,Qt);else if(kt==="belongsToMany")Sn=ii(xe,Ft,Qt,ve);else continue;let kn=`${ve}_count`;Dr(`${Sn} AS ${kn}`)}return this},withSum(U,xe){return Pr("SUM",U,xe),this},withAvg(U,xe){return Pr("AVG",U,xe),this},withMax(U,xe){return Pr("MAX",U,xe),this},withMin(U,xe){return Pr("MIN",U,xe),this},applyPivotColumns(){return ls(),this},withPivot(U,...xe){if(!D)return this;let ve=String(Fe),Ve=Zn(U);if(!Ve)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${ve}'`);let bt=xe&&xe.length>0?xe:Ve.hasConfig?Ve.pivotColumns:[];if(bt.length===0)return this;if(Xn.set(U,bt),Ve.hasConfig)Wn.add(U);return ls(),this},wherePivot(U,xe,ve,Ve){if(!D)return this;let bt=Zn(U);if(!bt)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);zt(bt.pivotTable,"wherePivot (pivot table)"),zt(xe,"wherePivot (column)"),wr(bt);let kt=Ve===void 0?"=":String(ve),Wt=Ve===void 0?ve:Ve,Ut=He.length+1,Gt=`${bt.pivotTable}.${xe} ${kt} ${t(Ut)}`;if(He.push(Wt),St("AND",Gt),bt.hasConfig)Wn.add(U);return this},wherePivotIn(U,xe,ve){if(!D||!Array.isArray(ve))return this;let Ve=Zn(U);if(!Ve)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);zt(Ve.pivotTable,"wherePivotIn (pivot table)"),zt(xe,"wherePivotIn (column)"),wr(Ve);let bt=s(ve.length,He.length+1),kt=o(`${Ve.pivotTable}.${xe}`,ve,!1,bt);if(He.push(...ve),St("AND",kt),Ve.hasConfig)Wn.add(U);return this},wherePivotNotIn(U,xe,ve){if(!D||!Array.isArray(ve)||ve.length===0)return this;let Ve=Zn(U);if(!Ve)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);zt(Ve.pivotTable,"wherePivotNotIn (pivot table)"),zt(xe,"wherePivotNotIn (column)"),wr(Ve);let bt=s(ve.length,He.length+1),kt=`${Ve.pivotTable}.${xe} NOT IN (${bt})`;if(He.push(...ve),St("AND",kt),Ve.hasConfig)Wn.add(U);return this},wherePivotNull(U,xe){if(!D)return this;let ve=Zn(U);if(!ve)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(zt(ve.pivotTable,"wherePivotNull (pivot table)"),zt(xe,"wherePivotNull (column)"),wr(ve),St("AND",`${ve.pivotTable}.${xe} IS NULL`),ve.hasConfig)Wn.add(U);return this},wherePivotNotNull(U,xe){if(!D)return this;let ve=Zn(U);if(!ve)throw Error(`[query-builder] Relationship '${U}' is not a belongsToMany relationship on table '${String(Fe)}'`);if(zt(ve.pivotTable,"wherePivotNotNull (pivot table)"),zt(xe,"wherePivotNotNull (column)"),wr(ve),St("AND",`${ve.pivotTable}.${xe} IS NOT NULL`),ve.hasConfig)Wn.add(U);return this},where(U,xe,ve){if(typeof U==="string"&&xe!==void 0){zt(String(U),"where(column)"),Fn(xe,"where(operator)");let Ve=String(xe).toLowerCase();if(Ve==="in"||Ve==="not in"){let kt=Array.isArray(ve)?ve:[ve],Wt=s(kt.length,He.length+1),Ut=o(l(String(U)),kt,Ve==="not in",Wt);return He.push(...kt),St("AND",Ut),this}let bt=He.length+1;return He.push(ve),St("AND",`${l(String(U))} ${String(xe)} ${t(bt)}`),this}if(Array.isArray(U)){let[Ve,bt,kt]=U,Wt=String(Ve);zt(Wt,"where(column)");let Ut=Fn(bt,"where(operator)");if(Ut==="in"||Ut==="not in"){let Gt=Array.isArray(kt)?kt:[kt],Ft=s(Gt.length,He.length+1),Qt=o(l(Wt),Gt,Ut==="not in",Ft);He.push(...Gt),St("AND",Qt)}else{let Gt=He.length+1;He.push(kt),St("AND",`${l(Wt)} ${Ut} ${t(Gt)}`)}return this}if($r(U))Rr("where(expr)");if(dr(U)){let Ve=mr(U,He.length+1);return He.push(...Ve.parameters),St("AND",Ve.text),this}if(U&&typeof U==="object"&&!nr(U)){let Ve=U,bt=Object.keys(Ve),kt=[];for(let Wt of bt){zt(Wt,"where(column)");let Ut=Ve[Wt];if(Array.isArray(Ut)){let Gt=s(Ut.length,He.length+1);kt.push(o(l(Wt),Ut,!1,Gt)),He.push(...Ut)}else{let Gt=He.length+1;kt.push(`${l(Wt)} = ${t(Gt)}`),He.push(Ut)}}if(kt.length>0)St("AND",kt.length>1?`(${kt.join(" AND ")})`:kt[0]);return this}if(nr(U))return St("AND",U.raw),this;if(typeof U==="function")return Ht("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 zt(String(U),"whereNull(column)"),St("AND",`${String(U)} IS NULL`),this},whereNotNull(U){return zt(String(U),"whereNotNull(column)"),St("AND",`${String(U)} IS NOT NULL`),this},orWhereNull(U){return zt(String(U),"orWhereNull(column)"),St("OR",`${String(U)} IS NULL`),this},orWhereNotNull(U){return zt(String(U),"orWhereNotNull(column)"),St("OR",`${String(U)} IS NOT NULL`),this},whereBetween(U,xe,ve){zt(String(U),"whereBetween(column)");let Ve=He.length+1;return He.push(xe,ve),St("AND",`${String(U)} BETWEEN ${t(Ve)} AND ${t(Ve+1)}`),this},orWhereBetween(U,xe,ve){zt(String(U),"orWhereBetween(column)");let Ve=He.length+1;return He.push(xe,ve),St("OR",`${String(U)} BETWEEN ${t(Ve)} AND ${t(Ve+1)}`),this},whereExists(U){return St("AND",`EXISTS (${U.toSQL()})`),this},orWhereExists(U){return St("OR",`EXISTS (${U.toSQL()})`),this},whereGroup(U){return Ht("AND",U),this},orWhereGroup(U){return Ht("OR",U),this},__whereState(){return{body:x(Dt),params:[...He]}},whereJsonContains(U,xe){zt(String(U),"whereJsonContains(column)");let ve=e.dialect,Ve=He.length+1;if(ve==="postgres"){let kt=typeof xe==="number"||typeof xe==="boolean"?`to_jsonb(${t(Ve)})`:t(Ve);if(e.sql?.jsonContainsMode==="function")St("AND",`jsonb_contains(${U}, ${kt})`);else St("AND",`${U} @> ${kt}`);He.push(xe)}else if(n(ve))St("AND",`JSON_CONTAINS(${U}, ${t(Ve)})`),He.push(JSON.stringify(xe));else if(Array.isArray(xe)){let bt=xe.map((kt,Wt)=>`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(Ve+Wt)})`);St("AND",`(${bt.join(" AND ")})`);for(let kt of xe)He.push(kt)}else if(xe!==null&&typeof xe==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else St("AND",`EXISTS (SELECT 1 FROM json_each(${U}) WHERE json_each.value = ${t(Ve)})`),He.push(xe);return this},whereJsonPath(U,xe,ve){if(Fn(xe,"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 Ve=e.dialect,bt=He.length+1;if(Ve==="postgres")St("AND",`${U} ${xe} ${t(bt)}`);else if(n(Ve))St("AND",`JSON_EXTRACT(${U}) ${xe} ${t(bt)}`);else St("AND",`json_extract(${U}) ${xe} ${t(bt)}`);return He.push(ve),this},whereLike(U,xe,ve=!1){let Ve=t(He.length+1);return yt("WHERE",`${ve?String(U):`LOWER(${String(U)})`} LIKE ${ve?Ve:`LOWER(${Ve})`}`),He.push(xe),xt=null,this},whereILike(U,xe){let ve=t(He.length+1);if(e.dialect==="postgres")yt("WHERE",`${String(U)} ILIKE ${ve}`);else yt("WHERE",`LOWER(${String(U)}) LIKE LOWER(${ve})`);return He.push(xe),xt=null,this},orWhereLike(U,xe,ve=!1){let Ve=t(He.length+1);return yt("OR",`${ve?String(U):`LOWER(${String(U)})`} LIKE ${ve?Ve:`LOWER(${Ve})`}`),He.push(xe),xt=null,this},orWhereILike(U,xe){let ve=t(He.length+1);if(e.dialect==="postgres")yt("OR",`${String(U)} ILIKE ${ve}`);else yt("OR",`LOWER(${String(U)}) LIKE LOWER(${ve})`);return He.push(xe),xt=null,this},whereNotLike(U,xe,ve=!1){let Ve=t(He.length+1);return yt("WHERE",`${ve?String(U):`LOWER(${String(U)})`} NOT LIKE ${ve?Ve:`LOWER(${Ve})`}`),He.push(xe),xt=null,this},whereNotILike(U,xe){let ve=t(He.length+1);if(e.dialect==="postgres")yt("WHERE",`${String(U)} NOT ILIKE ${ve}`);else yt("WHERE",`LOWER(${String(U)}) NOT LIKE LOWER(${ve})`);return He.push(xe),xt=null,this},orWhereNotLike(U,xe,ve=!1){let Ve=t(He.length+1);return yt("OR",`${ve?String(U):`LOWER(${String(U)})`} NOT LIKE ${ve?Ve:`LOWER(${Ve})`}`),He.push(xe),xt=null,this},orWhereNotILike(U,xe){let ve=t(He.length+1);if(e.dialect==="postgres")yt("OR",`${String(U)} NOT ILIKE ${ve}`);else yt("OR",`LOWER(${String(U)}) NOT LIKE LOWER(${ve})`);return He.push(xe),xt=null,this},whereAny(U,xe,ve){if(U.length===0)return St("AND",`(${wt})`),this;let Ve=He.length+1,bt=U.map((kt,Wt)=>`${kt} ${xe} ${t(Ve+Wt)}`);for(let kt=0;kt<U.length;kt++)He.push(ve);return St("AND",`(${bt.join(" OR ")})`),this},whereAll(U,xe,ve){if(U.length===0)return this;let Ve=He.length+1,bt=U.map((kt,Wt)=>`${kt} ${xe} ${t(Ve+Wt)}`);for(let kt=0;kt<U.length;kt++)He.push(ve);return St("AND",`(${bt.join(" AND ")})`),this},whereNone(U,xe,ve){if(U.length===0)return this;let Ve=He.length+1,bt=U.map((kt,Wt)=>`${kt} ${xe} ${t(Ve+Wt)}`);for(let kt=0;kt<U.length;kt++)He.push(ve);return St("AND",`NOT (${bt.join(" OR ")})`),this},whereNotBetween(U,xe,ve){zt(String(U),"whereNotBetween(column)");let Ve=He.length+1;return He.push(xe,ve),St("AND",`${U} NOT BETWEEN ${t(Ve)} AND ${t(Ve+1)}`),this},whereDate(U,xe,ve){zt(U,"whereDate(column)");let Ve=ve instanceof Date?ve.toISOString():typeof ve==="string"?ve:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof ve}`)})(),bt=He.length+1;return He.push(Ve),St("AND",`${U} ${xe} ${t(bt)}`),this},whereRaw(U,...xe){return St("AND",fr(U,"whereRaw(fragment)",xe)),this},orWhereRaw(U,...xe){return St("OR",fr(U,"orWhereRaw(fragment)",xe)),this},whereColumn(U,xe,ve){return zt(U,"whereColumn(left)"),zt(ve,"whereColumn(right)"),St("AND",`${U} ${xe} ${ve}`),this},orWhereColumn(U,xe,ve){return zt(U,"orWhereColumn(left)"),zt(ve,"orWhereColumn(right)"),St("OR",`${U} ${xe} ${ve}`),this},whereIn(U,xe){if(zt(String(U),"whereIn(column)"),Array.isArray(xe)){let ve=s(xe.length,He.length+1),Ve=o(U,xe,!1,ve);He.push(...xe),St("AND",Ve)}else St("AND",`${U} IN (${String(xe.toSQL())})`);return this},orWhereIn(U,xe){if(zt(String(U),"orWhereIn(column)"),Array.isArray(xe)){let ve=s(xe.length,He.length+1),Ve=o(U,xe,!1,ve);He.push(...xe),St("OR",Ve)}else St("OR",`${U} IN (${String(xe.toSQL())})`);return this},whereNotIn(U,xe){if(zt(String(U),"whereNotIn(column)"),Array.isArray(xe)){let ve=s(xe.length,He.length+1),Ve=o(U,xe,!0,ve);He.push(...xe),St("AND",Ve)}else St("AND",`${U} NOT IN (${String(xe.toSQL())})`);return this},orWhereNotIn(U,xe){if(zt(String(U),"orWhereNotIn(column)"),Array.isArray(xe)){let ve=s(xe.length,He.length+1),Ve=o(U,xe,!0,ve);He.push(...xe),St("OR",Ve)}else St("OR",`${U} NOT IN (${String(xe.toSQL())})`);return this},whereNested(U){let xe=U.toSQL?String(U.toSQL()):String(U);return St("AND",`(${xe})`),this},orWhereNested(U){let xe=U.toSQL?String(U.toSQL()):String(U);return St("OR",`(${xe})`),this},andWhere(U,xe,ve){return en(this,"AND","andWhere",U,xe,ve)},orWhere(U,xe,ve){return en(this,"OR","orWhere",U,xe,ve)},orderBy(U,xe="asc"){let ve=xe==="asc"?"ASC":"DESC",Ve=l(String(U));return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${Ve} ${ve}`:`${Ke} ORDER BY ${Ve} ${ve}`,xt=null,this},orderByDesc(U){return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${U} DESC`:`${Ke} ORDER BY ${U} DESC`,xt=null,this},inRandomOrder(){let U=e.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${U}`:`${Ke} ORDER BY ${U}`,xt=null,this},reorder(U,xe="asc"){return Ke=Ke.replace(/ORDER BY[\s\S]*$/i,""),Ke+=` ORDER BY ${U} ${xe==="asc"?"ASC":"DESC"}`,xt=null,this},latest(U){let xe=U??e.timestamps.defaultOrderColumn;return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${xe} DESC`:`${Ke} ORDER BY ${xe} DESC`,xt=null,this},oldest(U){let xe=U??e.timestamps.defaultOrderColumn;return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${xe} ASC`:`${Ke} ORDER BY ${xe} ASC`,xt=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 Ke=Cn.LIMIT.test(Ke)?Ke.replace(Cn.LIMIT,` LIMIT ${U}`):`${Ke} LIMIT ${U}`,xt=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 Ke=Cn.OFFSET.test(Ke)?Ke.replace(Cn.OFFSET,` OFFSET ${U}`):`${Ke} OFFSET ${U}`,xt=null,this},join(U,xe,ve,Ve){return zt(U,"join(table)"),Gn(xe,"join(onLeft)"),Gn(Ve,"join(onRight)"),Fn(ve,"join(operator)"),Tn(`JOIN ${U} ON ${xe} ${ve} ${Ve}`),Kt.add(U),this},joinSub(U,xe,ve,Ve,bt){return zt(xe,"joinSub(alias)"),Gn(ve,"joinSub(onLeft)"),Gn(bt,"joinSub(onRight)"),Fn(Ve,"joinSub(operator)"),Tn(`JOIN (${String(U.toSQL())}) AS ${xe} ON ${ve} ${Ve} ${bt}`),Kt.add(xe),this},innerJoin(U,xe,ve,Ve){return zt(U,"innerJoin(table)"),Gn(xe,"innerJoin(onLeft)"),Gn(Ve,"innerJoin(onRight)"),Fn(ve,"innerJoin(operator)"),Tn(`INNER JOIN ${U} ON ${xe} ${ve} ${Ve}`),Kt.add(U),this},leftJoin(U,xe,ve,Ve){return zt(U,"leftJoin(table)"),Gn(xe,"leftJoin(onLeft)"),Gn(Ve,"leftJoin(onRight)"),Fn(ve,"leftJoin(operator)"),Tn(`LEFT JOIN ${U} ON ${xe} ${ve} ${Ve}`),Kt.add(U),this},leftJoinSub(U,xe,ve,Ve,bt){return zt(xe,"leftJoinSub(alias)"),Gn(ve,"leftJoinSub(onLeft)"),Gn(bt,"leftJoinSub(onRight)"),Fn(Ve,"leftJoinSub(operator)"),Tn(`LEFT JOIN (${String(U.toSQL())}) AS ${xe} ON ${ve} ${Ve} ${bt}`),Kt.add(xe),this},rightJoin(U,xe,ve,Ve){return zt(U,"rightJoin(table)"),Gn(xe,"rightJoin(onLeft)"),Gn(Ve,"rightJoin(onRight)"),Fn(ve,"rightJoin(operator)"),Tn(`RIGHT JOIN ${U} ON ${xe} ${ve} ${Ve}`),Kt.add(U),this},crossJoin(U){return zt(U,"crossJoin(table)"),Tn(`CROSS JOIN ${U}`),Kt.add(U),this},crossJoinSub(U,xe){return zt(xe,"crossJoinSub(alias)"),Tn(`CROSS JOIN (${String(U.toSQL())}) AS ${xe}`),Kt.add(xe),this},selectAllRelations(){if(!E)return this;let U=String(Fe),xe=Object.keys(E[U]?.columns??{}),ve=[];if(xe.length>0)ve.push(qe`${qe(U)}.*`);for(let Ve of Kt){let bt=Object.keys(E[Ve]?.columns??{});for(let kt of bt){let Wt=e.aliasing.relationColumnAliasFormat==="camelCase"?`${Ve}_${kt}`.replace(/_([a-z])/g,(Ut,Gt)=>Gt.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${Ve}.${kt}`:`${Ve}_${kt}`;ve.push(qe`${qe(`${Ve}.${kt}`)} AS ${qe(Wt)}`)}}if(ve.length>0){let Ve=xe.length>0?`${U}.*`:"",bt=[];for(let Ut of Kt){let Gt=Object.keys(E[Ut]?.columns??{});for(let Ft of Gt){let Qt=e.aliasing.relationColumnAliasFormat==="camelCase"?`${Ut}_${Ft}`.replace(/_([a-z])/g,(Sn,kn)=>kn.toUpperCase()):e.aliasing.relationColumnAliasFormat==="table.dot.column"?`${Ut}.${Ft}`:`${Ut}_${Ft}`;bt.push(`${Ut}.${Ft} AS ${Qt}`)}}let kt=[Ve,...bt].filter(Boolean).join(", "),Wt=Ke.indexOf(" FROM ");if(Wt!==-1)Ke=`SELECT ${kt}${Ke.substring(Wt)}`;else Ke=`SELECT ${kt} FROM ${U}`;xt=null}return this},groupBy(...U){if(U.length)Ke=Cn.GROUP_BY.test(Ke)?`${Ke}, ${U.map((xe)=>l(String(xe))).join(", ")}`:`${Ke} GROUP BY ${U.map((xe)=>l(String(xe))).join(", ")}`,xt=null;return this},groupByRaw(U,...xe){let ve=fr(U,"groupByRaw(fragment)",xe);return Ke=Cn.GROUP_BY.test(Ke)?`${Ke}, ${ve}`:`${Ke} GROUP BY ${ve}`,xt=null,this},having(U){let xe=vt?"AND":"HAVING";if(Array.isArray(U)){let ve=He.length+1;Ke=`${Ke} ${xe} ${U[0]} ${U[1]} ${t(ve)}`,He.push(U[2]),vt=!0,xt=null}else if(U&&typeof U==="object"&&!("raw"in U)){let ve=Object.keys(U),Ve=ve.length;if(Ve){let bt=He.length,kt=Array.from({length:Ve});for(let Wt=0;Wt<Ve;Wt++){let Ut=ve[Wt];kt[Wt]=`${Ut} = ${t(bt+Wt+1)}`,He.push(U[Ut])}Ke=`${Ke} ${xe} ${kt.join(" AND ")}`,vt=!0,xt=null}}else if(U&&typeof U.raw<"u")Ke+=` ${xe} ${U.raw}`,vt=!0,xt=null;return this},havingRaw(U,...xe){let ve=fr(U,"havingRaw(fragment)",xe);return Ke+=` ${vt?"AND":"HAVING"} ${ve}`,vt=!0,xt=null,this},orderByRaw(U,...xe){let ve=fr(U,"orderByRaw(fragment)",xe);return Ke=Cn.ORDER_BY.test(Ke)?`${Ke}, ${ve}`:`${Ke} ORDER BY ${ve}`,xt=null,this},$call(U){return U(this),this},union(U){return jt("UNION",U),this},unionAll(U){return jt("UNION ALL",U),this},intersect(U){return jt("INTERSECT",U),this},intersectAll(U){return jt("INTERSECT ALL",U),this},except(U){return jt("EXCEPT",U),this},exceptAll(U){return jt("EXCEPT ALL",U),this},forPage(U,xe){let ve=Math.max(1,Math.floor(U)),Ve=Math.max(1,Math.floor(xe));return Ke+=` LIMIT ${Ve} OFFSET ${(ve-1)*Ve}`,xt=null,this},toSQL(){let U=pr(Lt());return{sql:U,toString:()=>U,execute:()=>Tt().execute(),values:()=>Tt().values(),raw:()=>Tt().raw()}},async value(U){let xe=Vt(""," LIMIT 1"),ve=await Et(xe,"select",{signal:wn,timeoutMs:Xt}),[Ve]=ve;return Ve?.[U]},async pluck(U,xe){let ve=await Et(Tt(),"select",{signal:wn,timeoutMs:Xt});if(xe){let Ve={};for(let bt of ve){let kt=String(bt?.[xe]);if(Object.prototype.hasOwnProperty.call(Ve,kt))throw Error(`[query-builder] pluck(${U}, ${xe}): duplicate key '${kt}' \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.`);Ve[kt]=bt?.[U]}return Ve}return ve.map((Ve)=>Ve?.[U])},async exists(){let U=Vt("SELECT EXISTS (",") as e"),xe=await Et(U,"select",{signal:wn,timeoutMs:Xt}),[ve]=xe;return Boolean(ve?.e)},async doesntExist(){return!await this.exists()},async paginate(U,xe=1,ve={}){if(typeof U==="object"&&U!==null){let Sn=U;xe=Sn.page??1,ve=Sn.tx?{tx:Sn.tx}:{},U=Sn.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(xe)||xe<1||!Number.isInteger(xe))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${xe}`);if(ve.tx){let Sn=pr(Lt()),kn=[...He],Ln=await ve.tx.unsafe(`SELECT COUNT(*) as c FROM (${Sn}) as sub`,kn),$n=Number(Ln?.[0]?.c??0),Kn=Math.max(1,Math.ceil($n/U)),Vn=Math.max(1,Math.min(xe,Kn)),Hn=(Vn-1)*U;return{data:await ve.tx.unsafe(`${Sn} LIMIT ${U} OFFSET ${Hn}`,kn),meta:{perPage:U,page:Vn,total:$n,lastPage:Kn}}}let Ve=Vt("SELECT COUNT(*) as c FROM (",") as sub"),bt=await Et(Ve,"select",{signal:wn,timeoutMs:Xt}),[kt]=bt,Wt=Number(kt?.c??0),Ut=Math.max(1,Math.ceil(Wt/U)),Gt=Math.max(1,Math.min(xe,Ut)),Ft=(Gt-1)*U;return{data:await Et(Vt("",` LIMIT ${t(He.length+1)} OFFSET ${t(He.length+2)}`,[U,Ft]),"select",{signal:wn,timeoutMs:Xt}),meta:{perPage:U,page:Gt,total:Wt,lastPage:Ut}}},async simplePaginate(U,xe=1){let ve=Math.max(1,xe),Ve=(ve-1)*U,bt=await Et(Vt("",` LIMIT ${t(He.length+1)} OFFSET ${t(He.length+2)}`,[U+1,Ve]),"select",{signal:wn,timeoutMs:Xt}),kt=bt.length>U;return{data:kt?bt.slice(0,U):bt,meta:{perPage:U,page:ve,hasMore:kt}}},async cursorPaginate(U,xe,ve="id",Ve="asc"){if(!Number.isInteger(U)||U<=0)throw TypeError(`[query-builder] cursorPaginate(perPage): expected positive integer, got ${U}`);let bt=(Array.isArray(ve)?ve:[ve]).map(String);for(let Qn of bt)zt(Qn,"cursorPaginate(column)");let kt=Ve==="asc"?">":"<",Wt=Ve==="asc"?"ASC":"DESC",Ut=[...He],Gt="";if(xe!==void 0&&xe!==null)if(Array.isArray(ve)){let Qn=xe.map((Nn)=>(Ut.push(Nn),t(Ut.length)));Gt=`(${bt.join(", ")}) ${kt} (${Qn.join(", ")})`}else Ut.push(xe),Gt=`${bt[0]} ${kt} ${t(Ut.length)}`;let Ft=pr(Gt?Lt({conn:"AND",sql:Gt}):Lt()),Qt=bt.map((Qn)=>`${Qn} ${Wt}`).join(", ");if(Ti(Ft))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 Sn=Ut.length>0?G(`${Ft} ORDER BY ${Qt} LIMIT ${U+1}`,Ut):G(`${Ft} ORDER BY ${Qt} LIMIT ${U+1}`),kn=await Et(Sn,"select",{signal:wn,timeoutMs:Xt}),Ln=kn.length>U,$n=kn.slice(0,U),Kn=$n[$n.length-1],Vn=Ln&&Kn?Array.isArray(ve)?ve.map((Qn)=>Kn[Qn]):Kn[ve]:null,Hn=$n.length?Array.isArray(ve)?ve.map((Qn)=>$n[0]?.[Qn]):$n[0]?.[ve]:null;return{data:$n,meta:{perPage:U,nextCursor:Vn??null,prevCursor:Hn}}},async chunk(U,xe){let ve=1;while(!0){let{data:Ve,meta:bt}=await this.paginate(U,ve);if(Ve.length===0)break;if(await xe(Ve),ve>=bt.lastPage)break;ve+=1}},async chunkById(U,xe="id",ve){let Ve;while(!0){let{data:bt,meta:kt}=await this.cursorPaginate(U,Ve,xe,"asc");if(bt.length===0)break;if(ve)await ve(bt);if(Ve=kt.nextCursor,!Ve)break}},async eachById(U,xe="id",ve){await this.chunkById(U,xe,async(Ve)=>{for(let bt of Ve)await ve?.(bt)})},withTimeout(U){return Xt=Math.max(1,Math.floor(U)),this},abort(U){return wn=U,this},withTrashed(){return xn=!0,On=!1,this},onlyTrashed(){xn=!0,On=!0;let U=e.softDeletes?.column||"deleted_at";return St("AND",`${Fe}.${U} IS NOT NULL`),this},scope(U,xe){let ve=String(Fe),bt=D?.scopes?.[ve]?.[U];if(bt)return bt(this,xe);return this},when(U,xe,ve){if(U)return xe(this);if(ve)return ve(this);return this},tap(U){return U(this),this},dump(){return console.log(String(Tt())),this},dd(){throw console.log(String(Tt())),Error("Dump and Die")},cache(U=60000){return Mr=U,In=!0,this},async explain(){let U=Vt("EXPLAIN ");return await Et(U,"select",{signal:wn,timeoutMs:Xt})},simple(){return Tt().simple()},toText(){return Lt()},async get(){let U=je(),xe=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||xr(U));if(!e.softDeletes?.enabled&&!In&&!Xt&&!wn&&!xe){let Ut=h._prepareStatement;if(Ut){let Gt=Ut(Lt());return Sr(He.length>0?Gt.all(...He):Gt.all())}}let ve=Lt();if(xt=He.length>0?G(ve,He):G(ve),!e.softDeletes?.enabled&&!In&&!Xt&&!wn&&!xe){let Ut=Tt()._stmt,Gt=Tt()._params;if(Ut)return Sr(Gt&&Gt.length>0?Ut.all(...Gt):Ut.all());return Sr(await Tt().execute())}if(!e.softDeletes?.enabled&&!In&&!Xt&&!wn)return Sr(await Et(Tt(),"select"));let Ve=Tt();if(e.softDeletes?.enabled&&e.softDeletes.defaultFilter&&!xn){let Ut=e.softDeletes.column,Gt=String(Fe);if((E?Boolean(E[Gt]?.columns?.[Ut]):!0)&&!Cn.DELETED_AT.test(Lt()))yt("WHERE",`${String(Ut)} IS ${On?"NOT ":""}NULL`),Ve=Tt()}let bt=In&&!d?.inTransaction,kt=bt?Di(h,Lt(),He):"";if(bt){let Ut=Lr.get(kt);if(Ut)return Ut}let Wt=await Et(Ve,"select",{signal:wn,timeoutMs:Xt});if(bt)Lr.set(kt,Wt,Mr);return Sr(Wt)},async executeTakeFirst(){let U=await Et(Tt(),"select",{signal:wn,timeoutMs:Xt});return sr(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=je(),xe=U&&(U.onQueryStart||U.onQueryEnd||U.onQueryError||U.startSpan||xr(U));if(!e.softDeletes?.enabled&&!In&&!Xt&&!wn&&!xe){let bt=h._prepareStatement;if(bt){let kt=Lt(),Wt=kt.includes(" LIMIT ")?kt:`${kt} LIMIT 1`,Ut=bt(Wt),Gt=He.length>0?Ut.all(...He):Ut.all();return sr(Gt[0])}}let ve=await Et(Vt(""," LIMIT 1"),"select",{signal:wn,timeoutMs:Xt}),[Ve]=ve;return sr(Ve)},async firstOrFail(){let U=await this.first();if(!U)throw Error("Record not found");return U},async find(U){let xe=D?.primaryKeys[String(Fe)]??"id",ve=await Et(Vt("",` WHERE ${jn(xe)} = ${t(He.length+1)} LIMIT 1`,[U]),"select",{signal:wn,timeoutMs:Xt}),[Ve]=ve;return Ve},async findOrFail(U){let xe=await this.find(U);if(!xe)throw Error("Record not found");return xe},async findMany(U){let xe=D?.primaryKeys[String(Fe)]??"id";return await Et(Vt("",` WHERE ${o(jn(String(xe)),U,!1,s(U.length,He.length+1))}`,U),"select",{signal:wn,timeoutMs:Xt})},async*lazy(){let U,xe=D?.primaryKeys[String(Fe)]??"id";while(!0){let Ve=await(U==null?qe`${Tt()} ORDER BY ${qe(String(xe))} ASC LIMIT 100`:qe`${Tt()} WHERE ${qe(String(xe))} > ${U} ORDER BY ${qe(String(xe))} ASC LIMIT 100`).execute();if(Ve.length===0)break;for(let bt of Ve)yield bt;if(U=Ve[Ve.length-1]?.[xe],U==null)break}},async*lazyById(){let U=D?.primaryKeys[String(Fe)]??"id",xe;while(!0){let Ve=await(xe==null?qe`${Tt()} ORDER BY ${qe(String(U))} ASC LIMIT 100`:qe`${Tt()} WHERE ${qe(String(U))} > ${xe} ORDER BY ${qe(String(U))} ASC LIMIT 100`).execute();if(Ve.length===0)break;for(let bt of Ve)yield bt;if(xe=Ve[Ve.length-1]?.[U],xe==null)break}},pipe(U){return U(this)},async count(){let U=Lt(),xe=U.indexOf(" FROM "),ve=/ GROUP BY /i.test(U),Ve;if(ve)Ve=`SELECT COUNT(*) as c FROM (${U}) AS _bqb_count_sub`;else if(xe!==-1)Ve=`SELECT COUNT(*) as c${U.substring(xe)}`;else Ve=`SELECT COUNT(*) as c FROM ${Fe}`;let bt=je(),kt=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||xr(bt));if(!e.softDeletes?.enabled&&!In&&!Xt&&!wn&&!kt){let Ft=h._prepareStatement;if(Ft){let Qt=Ft(Ve),Sn=He.length>0?Qt.all(...He):Qt.all();return Number(Sn[0]?.c??0)}}let Wt=He.length>0?G(Ve,He):G(Ve),Ut=await Et(Wt,"select",{signal:wn,timeoutMs:Xt}),[Gt]=Ut;return Number(Gt?.c??0)},async avg(U){let xe=Lt(),ve=xe.indexOf(" FROM "),Ve=ve!==-1?`SELECT AVG(${U}) as a${xe.substring(ve)}`:`SELECT AVG(${U}) as a FROM ${Fe}`,bt=je(),kt=bt&&(bt.onQueryStart||bt.onQueryEnd||bt.onQueryError||bt.startSpan||xr(bt));if(!e.softDeletes?.enabled&&!In&&!Xt&&!wn&&!kt){let Ft=h._prepareStatement;if(Ft){let Qt=Ft(Ve),Sn=He.length>0?Qt.all(...He):Qt.all();return Number(Sn[0]?.a??0)}}let Wt=He.length>0?G(Ve,He):G(Ve),Ut=await Et(Wt,"select",{signal:wn,timeoutMs:Xt}),[Gt]=Ut;return Number(Gt?.a??0)},async sum(U){let xe=Lt(),ve=xe.indexOf(" FROM "),Ve=ve!==-1?`SELECT SUM(${U}) as s${xe.substring(ve)}`:`SELECT SUM(${U}) as s FROM ${Fe}`,bt=He.length>0?G(Ve,He):G(Ve),kt=await Et(bt,"select",{signal:wn,timeoutMs:Xt}),[Wt]=kt;return Number(Wt?.s??0)},async max(U){let xe=Lt(),ve=xe.indexOf(" FROM "),Ve=ve!==-1?`SELECT MAX(${U}) as m${xe.substring(ve)}`:`SELECT MAX(${U}) as m FROM ${Fe}`,bt=He.length>0?G(Ve,He):G(Ve),kt=await Et(bt,"select",{signal:wn,timeoutMs:Xt}),[Wt]=kt;return Wt?.m},async min(U){let xe=Lt(),ve=xe.indexOf(" FROM "),Ve=ve!==-1?`SELECT MIN(${U}) as m${xe.substring(ve)}`:`SELECT MIN(${U}) as m FROM ${Fe}`,bt=He.length>0?G(Ve,He):G(Ve),kt=await Et(bt,"select",{signal:wn,timeoutMs:Xt}),[Wt]=kt;return Wt?.m},lockForUpdate(){return Ke+=" FOR UPDATE",xt=null,this},sharedLock(){let U=e.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return Ke+=` ${U}`,xt=null,this},withCTE(U,xe){return zt(U,"withCTE(name)"),Ke=`WITH ${U} AS (${String(xe.toSQL())}) ${Ke}`,xt=null,this},withRecursive(U,xe){return zt(U,"withRecursive(name)"),Ke=`WITH RECURSIVE ${U} AS (${String(xe.toSQL())}) ${Ke}`,xt=null,this},execute(){return Et(Tt(),"select",{signal:wn,timeoutMs:Xt})},values(){return Tt().values()},toParams(){return[...He]},__rawState(){return{sql:pr(Lt()),params:[...He]}},__hasPredicate(){return Dt.length>0||It},raw(){return Tt().raw()},get rows(){return},get row(){return},cancel(){try{Tt().cancel()}catch{}}},{get(U,xe,ve){let Ve=Reflect.get(U,xe,ve);if(Ve!==void 0)return Ve;if(typeof xe==="string"&&(xe.startsWith("where")||xe.startsWith("orWhere")||xe.startsWith("andWhere"))){let bt=xe.startsWith("orWhere"),kt=xe.startsWith("andWhere"),Wt=`${String(Fe)}|${xe}`,Ut=gt.get(Wt);if(Ut===void 0){let Ft=xe.replace(/^(?:or|and)?where/i,"");if(!Ft)gt.set(Wt,""),Ut="";else{let Qt=Ft.charAt(0).toLowerCase()+Ft.slice(1),Sn=Ft.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),kn=E?Object.keys(E[String(Fe)]?.columns??{}):[];Ut=[Sn,Qt,Qt.toLowerCase()].find((Ln)=>kn.includes(Ln))??Sn,gt.set(Wt,Ut)}}if(Ut==="")return()=>ve;let Gt=Ut;return(Ft)=>{if(Array.isArray(Ft)){let Qt=s(Ft.length,He.length+1);yt(bt?"OR":kt?"AND":"WHERE",`${Gt} IN (${Qt})`),He.push(...Ft)}else{let Qt=t(He.length+1);yt(bt?"OR":kt?"AND":"WHERE",`${Gt} = ${Qt}`),He.push(Ft)}return ve}}return Reflect.get(U,xe,ve)}})}return{configure(Fe){return We(Fe),this},id(Fe){if(!Cn.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 Le of Fe)if(!Cn.IDENTIFIER.test(Le))throw Error(`[query-builder] Invalid identifier: '${Le}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return h(Fe)},select(Fe,...Le){return Dn(Fe,Le)},selectFrom(Fe){return Dn(Fe)},selectFromSub(Fe,Le){function qe(Tt){return()=>{throw Error(`[query-builder] selectFromSub(...).${Tt}() is not supported. Apply ${Tt}() 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.")}}zt(String(Le),"selectFromSub(alias)");let Ke=typeof Fe.__rawState==="function"?Fe.__rawState():null,Dt=Fe.toSQL(),He=Ke?.sql??(typeof Dt==="string"?Dt:Dt?.sql??String(Dt)),Jt=Ke?.params??(Array.isArray(Dt?.values)?Dt.values:[]),It=`SELECT * FROM (${He}) AS ${String(Le)}`,vt=(Tt,Vt,St,yt)=>{let qt=[...Tt],Lt=(en,jt,Tn)=>{zt(en,"selectFromSub where(column)");let Kt=Fn(jt,"selectFromSub where(operator)");if(Kt==="in"||Kt==="not in"){let wn=Array.isArray(Tn)?Tn:[Tn],xn=s(wn.length,qt.length+1);return qt.push(...wn),`${en} ${Kt.toUpperCase()} (${xn})`}let Xt=t(qt.length+1);return qt.push(Tn),`${en} ${Kt} ${Xt}`},Ht;if(typeof Vt==="string"&&St!==void 0)Ht=Lt(Vt,St,yt);else if(Array.isArray(Vt)&&Vt.length===3)Ht=Lt(Vt[0],Vt[1],Vt[2]);else if(Vt&&typeof Vt==="object"){let en=Object.entries(Vt).map(([jt,Tn])=>Lt(jt,"=",Tn));Ht=en.length>1?`(${en.join(" AND ")})`:en[0]}else return{clause:null,params:Tt};return{clause:Ht,params:qt}};function xt(Tt,Vt,St,yt=""){let qt=x(Vt),Lt=qt?`${Tt} WHERE ${qt}${yt}`:`${Tt}${yt}`,Ht=()=>St.length>0?G(Lt,St):G(Lt),en=(Kt,Xt,wn,xn)=>{let On=vt(St,Xt,wn,xn);return On.clause===null?xt(Tt,Vt,St,yt):xt(Tt,[...Vt,{conn:Kt,sql:On.clause}],On.params,yt)},jt=(Kt,Xt)=>{let wn=[],xn=[...St],On=(Wn)=>(Mr,Pn,Zn)=>{let sr=vt(xn,Mr,Pn,Zn);if(sr.clause!==null)wn.push({conn:Wn,sql:sr.clause}),xn=sr.params;return In},In={where:On("AND"),andWhere:On("AND"),orWhere:On("OR")};Xt(In);let Xn=x(wn);if(!Xn)throw TypeError("[query-builder] selectFromSub.whereGroup(callback): the callback added no conditions. Add at least one where()/orWhere() to the builder it receives.");return xt(Tt,[...Vt,{conn:Kt,sql:`(${Xn})`}],xn,yt)},Tn={distinct(){return xt(Tt.replace(/^SELECT\s+/i,"SELECT DISTINCT "),Vt,St,yt)},distinctOn(...Kt){let Xt=Kt.map(String).join(", ");return xt(Tt.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${Xt}) `),Vt,St,yt)},selectRaw(Kt,...Xt){let wn=fr(Kt,"selectFromSub.selectRaw(fragment)",Xt),xn=Tt.indexOf(" FROM "),On=xn!==-1?`${Tt.slice(0,xn)}, ${wn}${Tt.slice(xn)}`:`${Tt}, ${wn}`;return xt(On,Vt,St,yt)},$call(Kt){return Kt(this)??this},where(Kt,Xt,wn){return en("AND",Kt,Xt,wn)},andWhere(Kt,Xt,wn){return en("AND",Kt,Xt,wn)},orWhere(Kt,Xt,wn){return en("OR",Kt,Xt,wn)},whereGroup(Kt){return jt("AND",Kt)},orWhereGroup(Kt){return jt("OR",Kt)},orderBy(Kt,Xt="asc"){zt(String(Kt),"selectFromSub.orderBy(column)");let wn=Xt==="asc"?"ASC":"DESC",xn=Cn.ORDER_BY.test(yt)?`${yt}, ${Kt} ${wn}`:`${yt} ORDER BY ${Kt} ${wn}`;return xt(Tt,Vt,St,xn)},limit(Kt){if(!Number.isInteger(Kt)||Kt<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${Kt}`);let Xt=Cn.LIMIT.test(yt)?yt.replace(Cn.LIMIT,` LIMIT ${Kt}`):`${yt} LIMIT ${Kt}`;return xt(Tt,Vt,St,Xt)},offset(Kt){if(!Number.isInteger(Kt)||Kt<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${Kt}`);let Xt=Cn.OFFSET.test(yt)?yt.replace(Cn.OFFSET,` OFFSET ${Kt}`):`${yt} OFFSET ${Kt}`;return xt(Tt,Vt,St,Xt)},toSQL(){return En(Ht(),Lt)},async execute(){return Et(Ht(),"select")},async executeTakeFirst(){let Kt=await Et(Ht(),"select");return Array.isArray(Kt)?Kt[0]:Kt},async executeTakeFirstOrThrow(){let Kt=await Et(Ht(),"select"),Xt=Array.isArray(Kt)?Kt[0]:Kt;if(!Xt)throw Error("Record not found");return Xt},async get(){return Et(Ht(),"select")},async first(){let Kt=await Et(Ht(),"select");return Array.isArray(Kt)?Kt[0]:Kt},async firstOrFail(){let Kt=await Et(Ht(),"select"),Xt=Array.isArray(Kt)?Kt[0]:Kt;if(!Xt)throw Error("No rows found");return Xt},async count(){let Kt=St.length>0?G(`SELECT COUNT(*) as c FROM (${Lt}) as sub`,St):G(`SELECT COUNT(*) as c FROM (${Lt}) as sub`),Xt=await Et(Kt,"select");return Number(Xt?.[0]?.c??0)},async exists(){let Kt=St.length>0?G(`SELECT EXISTS(${Lt}) as e`,St):G(`SELECT EXISTS(${Lt}) as e`),Xt=await Et(Kt,"select");return Boolean(Xt?.[0]?.e)},async doesntExist(){return!await Tn.exists()},values(){return Ht().values()},raw(){return Ht().raw()},cancel(){try{Ht().cancel()}catch{}},whereRaw:qe("whereRaw"),whereColumn:qe("whereColumn"),orWhereColumn:qe("orWhereColumn"),whereIn:qe("whereIn"),orWhereIn:qe("orWhereIn"),whereNotIn:qe("whereNotIn"),orWhereNotIn:qe("orWhereNotIn"),whereLike:qe("whereLike"),whereILike:qe("whereILike"),orWhereLike:qe("orWhereLike"),orWhereILike:qe("orWhereILike"),whereNotLike:qe("whereNotLike"),whereNotILike:qe("whereNotILike"),orWhereNotLike:qe("orWhereNotLike"),orWhereNotILike:qe("orWhereNotILike"),whereAny:qe("whereAny"),whereAll:qe("whereAll"),whereNone:qe("whereNone"),whereNested:qe("whereNested"),orWhereNested:qe("orWhereNested"),whereDate:qe("whereDate"),whereBetween:qe("whereBetween"),whereNotBetween:qe("whereNotBetween"),whereJsonContains:qe("whereJsonContains"),whereJsonPath:qe("whereJsonPath"),whereNull:qe("whereNull"),orWhereNull:qe("orWhereNull"),whereNotNull:qe("whereNotNull"),orWhereNotNull:qe("orWhereNotNull"),whereExists:qe("whereExists"),orWhereExists:qe("orWhereExists"),orWhereBetween:qe("orWhereBetween"),orWhereRaw:qe("orWhereRaw"),whereJsonDoesntContain:qe("whereJsonDoesntContain"),whereJsonContainsKey:qe("whereJsonContainsKey"),whereJsonDoesntContainKey:qe("whereJsonDoesntContainKey"),whereJsonLength:qe("whereJsonLength"),join:qe("join"),joinSub:qe("joinSub"),innerJoin:qe("innerJoin"),leftJoin:qe("leftJoin"),leftJoinSub:qe("leftJoinSub"),rightJoin:qe("rightJoin"),crossJoin:qe("crossJoin"),crossJoinSub:qe("crossJoinSub"),groupBy:qe("groupBy"),groupByRaw:qe("groupByRaw"),having:qe("having"),havingRaw:qe("havingRaw"),addSelect:qe("addSelect"),select:qe("select"),selectAll:qe("selectAll"),orderByDesc:qe("orderByDesc"),inRandomOrder:qe("inRandomOrder"),reorder:qe("reorder"),orderByRaw:qe("orderByRaw"),union:qe("union"),unionAll:qe("unionAll"),forPage:qe("forPage"),selectAllRelations:qe("selectAllRelations"),with:qe("with"),value:qe("value"),pluck:qe("pluck"),cursorPaginate:qe("cursorPaginate"),paginate:qe("paginate"),simplePaginate:qe("simplePaginate"),chunk:qe("chunk"),chunkById:qe("chunkById"),eachById:qe("eachById"),avg:qe("avg"),sum:qe("sum"),max:qe("max"),min:qe("min"),find:qe("find"),findOrFail:qe("findOrFail"),findMany:qe("findMany"),latest:qe("latest"),oldest:qe("oldest"),lazy:qe("lazy"),lazyById:qe("lazyById"),pipe:(Kt)=>Kt(Tn),when:qe("when"),tap:()=>Tn,dump:()=>Tn,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>Ht().simple(),toText:()=>Lt,toParams:()=>[...St],withTimeout:()=>Tn,abort:()=>Tn,lockForUpdate:()=>Tn,sharedLock:()=>Tn,withCTE:()=>Tn,withRecursive:()=>Tn,cache:()=>Tn,clone:()=>Tn,withTrashed:()=>Tn,onlyTrashed:()=>Tn,scope:()=>Tn,get rows(){return[]},get row(){return}};return Tn}return xt(It,[],Jt)},insertInto(Fe){let Le,qe="",Ke=[],Dt=[],He=!1,Jt=()=>vt?[]:{changes:0,lastInsertRowid:0},It=()=>{let yt=async()=>{return},qt=async()=>{throw Error("Insert with RETURNING returned no rows")};return{where:()=>It(),andWhere:()=>It(),orWhere:()=>It(),orderBy:()=>It(),limit:()=>It(),offset:()=>It(),toSQL:()=>En(null,""),execute:async()=>[],get:async()=>[],first:yt,executeTakeFirst:yt,firstOrFail:qt,executeTakeFirstOrThrow:qt}},vt=e.dialect==="postgres",xt=(yt)=>{let Lt=yt.flat(2).map(String).filter(Boolean),Ht=Lt.length>0&&!Lt.includes("*")?Lt.map((Tn)=>Tt(Tn)).join(", "):"*",en=async()=>{let Tn=await Et(G(qe,Ke),"insert"),Kt=Number(Tn?.lastInsertRowid??0),Xt=Math.max(1,Number(Tn?.affectedRows??1)),wn=Dt.filter((In)=>In!==void 0&&In!==null),xn=Kt>0?G(`SELECT ${Ht} FROM ${Tt(String(Fe))} WHERE ${Tt("id")} >= ? AND ${Tt("id")} < ? ORDER BY ${Tt("id")} ASC`,[Kt,Kt+Xt]):wn.length>0?G(`SELECT ${Ht} FROM ${Tt(String(Fe))} WHERE ${Tt("id")} IN (${wn.map(()=>"?").join(", ")}) ORDER BY ${Tt("id")} ASC`,wn):null;if(!xn)return[];let On=await xn.execute();return Array.isArray(On)?On:[]},jt=async()=>(await en())[0];return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>En(G(qe,Ke),qe),execute:en,get:en,first:jt,executeTakeFirst:jt,async firstOrFail(){let Tn=await jt();if(!Tn)throw Error("Insert with RETURNING returned no rows");return Tn},async executeTakeFirstOrThrow(){let Tn=await jt();if(!Tn)throw Error("Insert with RETURNING returned no rows");return Tn}}},Tt=vt?(yt)=>`"${String(yt).replace(/"/g,'""')}"`:n(e.dialect)?(yt)=>`\`${String(yt).replace(/`/g,"``")}\``:(yt)=>`"${String(yt).replace(/"/g,'""')}"`,Vt=vt?"postgres":n(e.dialect)?"mysql":"sqlite",St=vt?(yt)=>`$${yt+1}`:(yt)=>"?";return{values(yt){let qt=Qe(String(Fe),Array.isArray(yt)?yt:[yt]),Lt=qt.length;if(Dt=qt.map((xn)=>xn?.id),Lt===0)return He=!0,Le=null,qe="",Ke.length=0,this;He=!1;let Ht=qt[0],en=Object.keys(Ht),jt=en.length,Tn=Lt*jt;Ke.length=Tn;let Kt=Lt===1&&jt>0&&typeof Fe==="string",Xt=Kt?ke?.get(Fe):void 0,wn=Xt?.quoteStyle===Vt&&Xt.columns.length===jt;if(wn){for(let xn=0;xn<jt;xn++)if(Xt.columns[xn]!==en[xn]){wn=!1;break}}if(wn){qe=Xt.sql;for(let xn=0;xn<jt;xn++)Ke[xn]=Ht[en[xn]]}else if(Lt===1)if(!vt){let xn=Tt(en[0]),On="?";Ke[0]=Ht[en[0]];for(let In=1;In<jt;In++)xn+=`,${Tt(en[In])}`,On+=",?",Ke[In]=Ht[en[In]];qe=`INSERT INTO ${Tt(Fe)}(${xn})VALUES(${On})`}else{let xn=en.map((On)=>Tt(On)).join(",");qe=`INSERT INTO ${Tt(Fe)}(${xn})VALUES(`;for(let On=0;On<jt;On++){if(On>0)qe+=",";qe+=St(On),Ke[On]=Ht[en[On]]}qe+=")"}else{let xn=en.map((In)=>Tt(In)).join(",");qe=`INSERT INTO ${Tt(Fe)}(${xn})VALUES`;let On=0;for(let In=0;In<Lt;In++){let Xn=qt[In];if(In===0)qe+="(";else qe+="),(";for(let Wn=0;Wn<jt;Wn++){if(Wn>0)qe+=",";qe+=St(On),Ke[On++]=Xn[en[Wn]]}}qe+=")"}if(Kt&&!wn&&qe.length<=8192){if(ke??=new Map,ke.size>=32&&!ke.has(Fe)){let xn=ke.keys().next().value;if(xn!==void 0)ke.delete(xn)}ke.set(Fe,{columns:en,quoteStyle:Vt,sql:qe})}if(!h._prepareStatement)Le=G(qe,Ke);return this},returning(...yt){if(He)return It();if(n(e.dialect))return xt(yt);let qt=`${qe} RETURNING ${yt.join(", ")}`,Lt=G(qt,Ke),Ht=async()=>{let en=await Et(Lt,"insert");return Array.isArray(en)?en[0]:en};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>En(Lt,qt),execute:()=>Et(Lt,"insert"),get:()=>Et(Lt,"insert"),first:Ht,executeTakeFirst:Ht,async firstOrFail(){let en=await Ht();if(!en)throw Error("Insert with RETURNING returned no rows");return en},async executeTakeFirstOrThrow(){let en=await Ht();if(!en)throw Error("Insert with RETURNING returned no rows");return en}}},toSQL(){if(He)return En(null,"");if(!Le)Le=G(qe,Ke);return En(Le,qe)},execute(){if(He)return Promise.resolve(Jt());let yt=je();if(!(yt&&(yt.onQueryStart||yt.onQueryEnd||yt.onQueryError||yt.startSpan||yt.beforeCreate||yt.afterCreate||xr(yt)))){let Lt=h._prepareStatement;if(Lt){let Ht=Lt(qe);return Ke.length>0?Ht.run(...Ke):Ht.run()}}if(!Le)Le=G(qe,Ke);return Et(Le,"insert")},async executeTakeFirst(){if(He)return Jt();if(!Le)Le=G(qe,Ke);return await Et(Le,"insert")},async executeTakeFirstOrThrow(){if(He)throw Error("Insert failed");if(!Le)Le=G(qe,Ke);let yt=await Et(Le,"insert");if(!yt)throw Error("Insert failed");return yt},returningAll(){return this.returning("*")}}},updateTable(Fe){let Le,qe=[],Ke=(It)=>{let vt=String(It);if(n(e.dialect))return`\`${vt.replace(/`/g,"``")}\``;return`"${vt.replace(/"/g,'""')}"`},Dt=`UPDATE ${Ke(String(Fe))}`,He=!1,Jt=(It)=>{Dt=`${Dt} ${He?"AND":"WHERE"} ${It}`,He=!0};return{set(It){let vt=Qe(String(Fe),[It])[0],xt=Object.keys(vt),Tt=xt.length,Vt=Array.from({length:Tt});for(let St=0;St<Tt;St++){let yt=xt[St],qt=vt[yt];if($r(qt))Rr(`set(${yt})`);if(nr(qt))Vt[St]=`${Ke(yt)} = ${qt.raw}`;else if(dr(qt)){let Lt=mr(qt,qe.length+1);Vt[St]=`${Ke(yt)} = ${Lt.text}`,qe.push(...Lt.parameters)}else Vt[St]=`${Ke(yt)} = ${t(qe.length+1)}`,qe.push(qt)}return Dt=`${Dt} SET ${Vt.join(", ")}`,Le=G(Dt,qe),this},where(It,vt,xt){if(vt!==void 0&&(typeof It==="string"||nr(It)||dr(It))){let Tt=Fn(vt,"updateTable.where"),Vt;if(typeof It==="string")Vt=Ke(It);else if(nr(It))Vt=It.raw;else{let yt=mr(It,qe.length+1);Vt=yt.text,qe.push(...yt.parameters)}if(Tt.toLowerCase()==="in"||Tt.toLowerCase()==="not in"){let yt=Array.isArray(xt)?xt:[xt],qt=s(yt.length,qe.length+1);return Jt(`${Vt} ${Tt.toUpperCase()} (${qt})`),qe.push(...yt),Le=G(Dt,qe),this}let St=qe.length+1;return Jt(`${Vt} ${Tt} ${t(St)}`),qe.push(xt),Le=G(Dt,qe),this}if(Array.isArray(It)){let[Tt,Vt,St]=It,yt=Fn(Vt,"updateTable.where");if(yt.toLowerCase()==="in"||yt.toLowerCase()==="not in"){let Lt=Array.isArray(St)?St:[St],Ht=s(Lt.length,qe.length+1);return Jt(`${Ke(String(Tt))} ${yt.toUpperCase()} (${Ht})`),qe.push(...Lt),Le=G(Dt,qe),this}let qt=qe.length+1;return Jt(`${Ke(String(Tt))} ${yt} ${t(qt)}`),qe.push(St),Le=G(Dt,qe),this}if($r(It))Rr("updateTable.where(expr)");if(nr(It))return Jt(It.raw),Le=G(Dt,qe),this;if(dr(It)){let Tt=mr(It,qe.length+1);return Jt(Tt.text),qe.push(...Tt.parameters),Le=G(Dt,qe),this}if(It&&typeof It==="object"){let Tt=Object.keys(It);if(Tt.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 Vt=Tt.map((St)=>Jr(Ke(St),It[St],qe));return Jt(Vt.join(" AND ")),Le=G(Dt,qe),this}throw TypeError(`[query-builder] updateTable.where(): expected a condition, got ${It===null?"null":typeof It}. Refusing to run an UPDATE with no WHERE \u2014 drop the where() call if updating every row is intended.`)},whereNull(It){return Jt(`${Ke(String(It))} IS NULL`),Le=G(Dt,qe),this},whereNotNull(It){return Jt(`${Ke(String(It))} IS NOT NULL`),Le=G(Dt,qe),this},returning(...It){let vt=this,xt=()=>`${Dt} RETURNING ${It.join(", ")}`,Tt=()=>qe.length>0?G(xt(),qe):G(xt()),Vt=async()=>{let Ht=/\sWHERE\s/i.test(Dt),en=Ht?Dt.slice(Dt.search(/\sWHERE\s/i)+1):"",jt=qe.slice(qe.length-(en.match(/\?|\$\d+/g)?.length??0)),Tn=Ke("id"),Kt=await(jt.length>0?G(`SELECT ${Tn} FROM ${Ke(String(Fe))}${Ht?` ${en}`:""}`,jt):G(`SELECT ${Tn} FROM ${Ke(String(Fe))}${Ht?` ${en}`:""}`)).execute().catch(()=>[]),Xt=(Array.isArray(Kt)?Kt:[]).map((On)=>On?.id).filter((On)=>On!==void 0&&On!==null);if(await Et(qe.length>0?G(Dt,qe):G(Dt),"update"),Xt.length===0)return[];let wn=`SELECT ${It.join(", ")} FROM ${Ke(String(Fe))} WHERE ${Tn} IN (${Xt.map(()=>"?").join(", ")})`,xn=await G(wn,Xt).execute();return Array.isArray(xn)?xn:[]},St=()=>n(e.dialect)?Vt():Et(Tt(),"update"),yt=async()=>{let Ht=await St();return Array.isArray(Ht)?Ht[0]:Ht},qt=(Ht)=>()=>{throw TypeError(`[query-builder] updateTable.returning(...).${Ht}() is not supported \u2014 an UPDATE cannot be ordered or limited through this builder. Apply the filter with where() instead.`)},Lt={where:(...Ht)=>(vt.where(...Ht),Lt),andWhere:(...Ht)=>(vt.where(...Ht),Lt),whereNull:(...Ht)=>(vt.whereNull(...Ht),Lt),whereNotNull:(...Ht)=>(vt.whereNotNull(...Ht),Lt),orWhere:qt("orWhere"),orderBy:qt("orderBy"),limit:qt("limit"),offset:qt("offset"),toSQL:()=>En(Tt(),xt()),execute:St,get:St,first:yt,executeTakeFirst:yt,async firstOrFail(){let Ht=await yt();if(!Ht)throw Error("Update with RETURNING returned no rows");return Ht},async executeTakeFirstOrThrow(){let Ht=await yt();if(!Ht)throw Error("Update with RETURNING returned no rows");return Ht}};return Lt},toSQL(){if(!Le)Le=qe.length>0?G(Dt,qe):G(Dt);return En(Le,Dt)},async execute(){let It=await Et(Le,"update");return Zt(It)},async executeTakeFirst(){return{numUpdatedRows:Zt(await Et(Le,"update"))}},async executeTakeFirstOrThrow(){let It=Zt(await Et(Le,"update"));if(It===0)throw Error("No rows updated");return{numUpdatedRows:It}},returningAll(){return this.returning("*")}}},deleteFrom(Fe){let Le=(Tt)=>{let Vt=String(Tt);if(n(e.dialect))return`\`${Vt.replace(/`/g,"``")}\``;return`"${Vt.replace(/"/g,'""')}"`},Ke=`DELETE FROM ${Le(String(Fe))}`,Dt=null,He=[],Jt=null,It=!1,vt=(Tt)=>{Ke+=` ${It?"AND":"WHERE"} ${Tt}`,It=!0},xt=()=>{if(Dt===null)Dt=He.length>0?G(Ke,He):G(Ke);return Dt};return{where(Tt,Vt,St){if(Jt=Tt,typeof Tt==="string"&&Vt!==void 0){let yt=Fn(Vt,"deleteFrom.where");if(yt.toLowerCase()==="in"||yt.toLowerCase()==="not in"){let Lt=Array.isArray(St)?St:[St],Ht=s(Lt.length,He.length+1);return vt(`${Le(Tt)} ${yt.toUpperCase()} (${Ht})`),He.push(...Lt),Dt=null,this}let qt=He.length+1;return vt(`${Le(Tt)} ${yt} ${t(qt)}`),He.push(St),Dt=null,this}if(Array.isArray(Tt)){let[yt,qt,Lt]=Tt,Ht=Fn(qt,"deleteFrom.where");if(Ht.toLowerCase()==="in"||Ht.toLowerCase()==="not in"){let jt=Array.isArray(Lt)?Lt:[Lt],Tn=s(jt.length,He.length+1);return vt(`${Le(String(yt))} ${Ht.toUpperCase()} (${Tn})`),He.push(...jt),Dt=null,this}let en=He.length+1;return vt(`${Le(String(yt))} ${Ht} ${t(en)}`),He.push(Lt),Dt=null,this}if($r(Tt))Rr("deleteFrom.where(expr)");if(nr(Tt))return vt(Tt.raw),Dt=null,this;if(dr(Tt)){let yt=mr(Tt,He.length+1);return vt(yt.text),He.push(...yt.parameters),Dt=null,this}if(Tt&&typeof Tt==="object"){let yt=Object.keys(Tt);if(yt.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 qt=yt.map((Lt)=>Jr(Le(Lt),Tt[Lt],He));return vt(qt.join(" AND ")),Dt=null,this}throw TypeError(`[query-builder] deleteFrom.where(): expected a condition, got ${Tt===null?"null":typeof Tt}. Refusing to run a DELETE with no WHERE \u2014 drop the where() call if deleting every row is intended.`)},whereNull(Tt){return vt(`${Le(String(Tt))} IS NULL`),Dt=null,this},whereNotNull(Tt){return vt(`${Le(String(Tt))} IS NOT NULL`),Dt=null,this},returning(...Tt){let Vt=this,St=()=>`${Ke} RETURNING ${Tt.join(", ")}`,yt=()=>He.length>0?G(St(),He):G(St()),qt=async()=>{await je()?.beforeDelete?.({table:String(Fe),where:Jt});let jt=n(e.dialect)?await(async()=>{let Tn=Ke.slice(Ke.search(/\sFROM\s/i)+1),Kt=`SELECT ${Tt.join(", ")} ${Tn}`,Xt=await(He.length>0?G(Kt,He):G(Kt)).execute();return await Et(He.length>0?G(Ke,He):G(Ke),"delete"),Array.isArray(Xt)?Xt:[]})():await Et(yt(),"delete");try{await je()?.afterDelete?.({table:String(Fe),where:Jt,result:jt})}catch{}return jt},Lt=async()=>{let jt=await qt();return Array.isArray(jt)?jt[0]:jt},Ht=(jt)=>()=>{throw TypeError(`[query-builder] deleteFrom.returning(...).${jt}() is not supported \u2014 a DELETE cannot be ordered or limited through this builder. Narrow it with where() instead.`)},en={where:(...jt)=>(Vt.where(...jt),en),andWhere:(...jt)=>(Vt.where(...jt),en),whereNull:(...jt)=>(Vt.whereNull(...jt),en),whereNotNull:(...jt)=>(Vt.whereNotNull(...jt),en),orWhere:Ht("orWhere"),orderBy:Ht("orderBy"),limit:Ht("limit"),offset:Ht("offset"),toSQL:()=>En(yt(),St()),execute:()=>qt(),get:()=>qt(),first:Lt,executeTakeFirst:Lt,async firstOrFail(){let jt=await Lt();if(!jt)throw Error("Delete with RETURNING returned no rows");return jt},async executeTakeFirstOrThrow(){let jt=await Lt();if(!jt)throw Error("Delete with RETURNING returned no rows");return jt}};return en},toSQL(){return En(xt(),Ke)},async execute(){try{await je()?.beforeDelete?.({table:String(Fe),where:Jt})}catch(Vt){throw Vt}let Tt=Zt(await Et(xt(),"delete"));try{await je()?.afterDelete?.({table:String(Fe),where:Jt,result:Tt})}catch{}return Tt},async executeTakeFirst(){return{numDeletedRows:Zt(await Et(xt(),"delete"))}},async executeTakeFirstOrThrow(){let Tt=Zt(await Et(xt(),"delete"));if(Tt===0)throw Error("No rows deleted");return{numDeletedRows:Tt}},returningAll(){return this.returning("*")}}},table(Fe){let Le=this;return{insert(qe){return Le.insertInto(Fe).values(qe)},update(qe){return Le.updateTable(Fe).set(qe)},delete(){return Le.deleteFrom(Fe)},select(...qe){if(qe.length===0)return Le.selectFrom(Fe);return Le.select(Fe,...qe)}}},sql:h,raw(Fe,...Le){if(typeof Fe==="string")return hi(Fe,Le);return h(Fe,...Le)},simple(Fe,...Le){return h(Fe,...Le).simple()},async advisoryLock(Fe){if(e.dialect==="postgres"){let Le=Be(Fe),qe=G("SELECT pg_advisory_lock($1)",[Le]);await Et(qe,"raw");return}if(n(e.dialect)){let Le=`bqb:${String(Fe)}`,qe=G("SELECT GET_LOCK(?, -1) AS ok",[Le]);await Et(qe,"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 Le=Be(Fe),qe=G("SELECT pg_try_advisory_lock($1) as ok",[Le]),Ke=await Et(qe,"raw");return Boolean(Ke?.[0]?.ok)}if(n(e.dialect)){let Le=`bqb:${String(Fe)}`,qe=G("SELECT GET_LOCK(?, 0) AS ok",[Le]),Ke=await Et(qe,"raw");return Number(Ke?.[0]?.ok)===1}return!1},async advisoryUnlock(Fe){if(e.dialect==="postgres"){let Le=Be(Fe),qe=G("SELECT pg_advisory_unlock($1) as ok",[Le]),Ke=await Et(qe,"raw");return Boolean(Ke?.[0]?.ok)}if(n(e.dialect)){let Le=`bqb:${String(Fe)}`,qe=G("SELECT RELEASE_LOCK(?) AS ok",[Le]),Ke=await Et(qe,"raw");return Number(Ke?.[0]?.ok)===1}return!1},unsafe(Fe,Le){return h.unsafe(Fe,Le)},deferInsert:h.deferInsert?.bind(h),flushDeferredInserts:h.flushDeferredInserts?.bind(h),file(Fe,Le){return h.file(Fe,Le)},async reserve(){let Fe=await r.reserve(),Le=i({sql:Fe,meta:D,schema:E,hooks:d?.hooks});return Le.release=()=>Fe.release(),Le},async close(Fe){await r.close(Fe)},async listen(Fe,Le){},async unlisten(Fe){},async notify(Fe,Le){},async copyTo(Fe,Le){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(Fe,Le,qe){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let Fe=G("SELECT 1");return await Et(Fe,"select"),!0}catch{return!1}},async waitForReady(Fe){let Le=Math.max(1,Fe?.attempts??10),qe=Math.max(10,Fe?.delayMs??100);for(let Ke=0;Ke<Le;Ke++){if(await this.ping())return;await new Promise((Dt)=>setTimeout(Dt,qe))}throw Error("Database not ready after waiting")},async transaction(Fe,Le){let Ke={...d?.txDefaults,...Le},Dt=d?.sql??r,He=d?.inTransaction===!0,Jt=He&&typeof Dt?.savepoint==="function"?"savepoint":"begin",It=async(Vt)=>{Ke.logger?.({type:"start",attempt:Vt});let St=Date.now();return await Dt[Jt](async(yt)=>{let qt=i({sql:yt,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});if(Ke?.isolation&&!He){let en=Ke.isolation,jt=en==="read committed"?"READ COMMITTED":en==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(e.dialect==="postgres")await yt.unsafe(`SET TRANSACTION ISOLATION LEVEL ${jt}`);else if(n(e.dialect))await yt.unsafe(`SET TRANSACTION ISOLATION LEVEL ${jt}`);else if(en!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${en}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(Ke?.readOnly)if(e.dialect==="postgres")await yt.unsafe("SET TRANSACTION READ ONLY");else if(n(e.dialect))await yt.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let Lt=await Fe(qt),Ht=Date.now()-St;return Ke.logger?.({type:"commit",attempt:Vt,durationMs:Ht}),Lt})},vt=Math.max(0,Ke?.retries??0),xt=0,Tt;for(;;)try{Tt=await It(xt+1);break}catch(Vt){let St=Ei(Vt)||$i(Vt,Ke.sqlStates);if(xt<vt&&St){xt++,Ke?.onRetry?.(xt,Vt);let yt=Oi(xt,Ke.backoff);if(yt>0)await Ri(yt);continue}try{Ke.onRollback?.(Vt)}catch{}try{Ke.afterRollback?.()}catch{}throw Vt}return await Ke.afterCommit?.(),Tt},async savepoint(Fe){if(d?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let Le=h;if(!Le||typeof Le.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await Le.savepoint(async(qe)=>{let Ke=i({sql:qe,meta:D,schema:E,hooks:d?.hooks,inTransaction:!0});return await Fe(Ke)})},async beginDistributed(Fe,Le){return await(d?.sql??r).beginDistributed(Fe,async(Dt)=>{let He=i({sql:Dt,meta:D,schema:E,hooks:d?.hooks});return await Le(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,Le){return(...qe)=>this.transaction((Ke)=>Fe(Ke,...qe),Le)},async insertOrIgnore(Fe,Le){let qe=Array.isArray(Le)?Le:[Le];if(!qe.length)return;let{colsSql:Ke,valuesSql:Dt,params:He}=_r(qe),Jt=jn(String(Fe)),It=n(e.dialect)?`INSERT IGNORE INTO ${Jt} (${Ke}) VALUES ${Dt}`:`INSERT INTO ${Jt} (${Ke}) VALUES ${Dt} ON CONFLICT DO NOTHING`;return G(It,He).execute()},async insertGetId(Fe,Le,qe="id"){let{colsSql:Ke,valuesSql:Dt,params:He}=_r([Le]),Jt=jn(String(Fe));if(n(e.dialect)){await G(`INSERT INTO ${Jt} (${Ke}) VALUES ${Dt}`,He).execute();let[vt]=await G("SELECT LAST_INSERT_ID() as id").execute();return vt?.id}if(e.dialect==="sqlite"){let vt=await G(`INSERT INTO ${Jt} (${Ke}) VALUES ${Dt}`,He).execute();if(vt?.lastInsertRowid!=null)return vt.lastInsertRowid;let[xt]=await G("SELECT last_insert_rowid() as id").execute();return xt?.id}let[It]=await G(`INSERT INTO ${Jt} (${Ke}) VALUES ${Dt} RETURNING ${jn(String(qe))} as id`,He).execute();return It?.id},async updateOrInsert(Fe,Le,qe){let Ke=jn(String(Fe)),Dt=Object.keys(Le),He=1,Jt=Dt.map((St)=>`${jn(St)} = ${t(He++)}`).join(" AND "),It=Dt.map((St)=>Le[St]);if((await G(`SELECT 1 FROM ${Ke} WHERE ${Jt} LIMIT 1`,It).execute()).length){let St=Object.keys(qe),yt=1,qt=St.map((en)=>`${jn(en)} = ${t(yt++)}`).join(", "),Lt=Dt.map((en)=>`${jn(en)} = ${t(yt++)}`).join(" AND "),Ht=[...St.map((en)=>qe[en]),...Dt.map((en)=>Le[en])];return await G(`UPDATE ${Ke} SET ${qt} WHERE ${Lt}`,Ht).execute(),!0}let{colsSql:xt,valuesSql:Tt,params:Vt}=_r([{...Le,...qe}]);return await G(`INSERT INTO ${Ke} (${xt}) VALUES ${Tt}`,Vt).execute(),!0},async upsert(Fe,Le,qe,Ke){let Dt=qe.map((qt)=>String(qt)),He=(Ke??[]).map((qt)=>String(qt)),Jt=Le;if(!Jt.length)return;let{colsSql:It,valuesSql:vt,params:xt}=_r(Jt),Tt=jn(String(Fe)),Vt=`INSERT INTO ${Tt} (${It}) VALUES ${vt}`;if(n(e.dialect)){if(He.length===0)return G(`INSERT IGNORE INTO ${Tt} (${It}) VALUES ${vt}`,xt).execute();let qt=He.map((Lt)=>`${jn(Lt)} = VALUES(${jn(Lt)})`).join(", ");return G(`${Vt} ON DUPLICATE KEY UPDATE ${qt}`,xt).execute()}let St=Dt.map(jn).join(", ");if(He.length===0)return G(`${Vt} ON CONFLICT (${St}) DO NOTHING`,xt).execute();let yt=He.map((qt)=>`${jn(qt)} = EXCLUDED.${jn(qt)}`).join(", ");return G(`${Vt} ON CONFLICT (${St}) DO UPDATE SET ${yt}`,xt).execute()},async save(Fe,Le){let qe=D?.primaryKeys[String(Fe)]??"id",Ke=Le[qe];if(Ke!=null)if(await this.selectFrom(Fe).find(Ke)){await this.updateTable(Fe).set(Le).where({[qe]:Ke}).execute();let He=await this.selectFrom(Fe).find(Ke);if(!He)throw Error("save() failed to retrieve updated row");return He}else return await this.create(Fe,Le);return await this.create(Fe,Le)},async remove(Fe,Le){return await this.deleteFrom(Fe).where({id:Le}).execute()},async find(Fe,Le){return await this.selectFrom(Fe).find(Le)},async findOrFail(Fe,Le){return await this.selectFrom(Fe).findOrFail(Le)},async findMany(Fe,Le){return await this.selectFrom(Fe).findMany(Le)},async latest(Fe,Le){return await this.selectFrom(Fe).latest(Le).first()},async oldest(Fe,Le){return await this.selectFrom(Fe).oldest(Le).first()},skip(Fe,Le){return this.selectFrom(Fe).offset(Le)},async rawQuery(Fe){let Le=Date.now();try{je()?.onQueryStart?.({sql:Fe,kind:"raw"});let qe=await h.unsafe(Fe);return je()?.onQueryEnd?.({sql:Fe,durationMs:Date.now()-Le,kind:"raw"}),qe}catch(qe){throw je()?.onQueryError?.({sql:Fe,error:qe,durationMs:Date.now()-Le,kind:"raw"}),qe}},async create(Fe,Le){let qe=D?.primaryKeys[String(Fe)]??"id";try{await je()?.beforeCreate?.({table:String(Fe),data:Le})}catch(Ke){throw Ke}if(e.dialect==="postgres"){let Ke=h`INSERT INTO ${h(String(Fe))} ${h(Le)} RETURNING ${h(String(qe))} as id`,[Dt]=await Ke.execute();if(!Dt?.id)throw console.error(`create() failed to get insert ID for table ${String(Fe)}`),console.error("Inserted values:",Le),Error(`create() failed to get insert ID for table ${String(Fe)}`);let He=await this.selectFrom(Fe).find(Dt.id);if(!He)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Dt.id}`),console.error("Inserted values:",Le),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Dt.id}`);try{await je()?.afterCreate?.({table:String(Fe),data:Le,result:He})}catch{}return He}else{let Ke=await this.insertGetId(Fe,Le,qe);if(Ke==null)throw Error(`create() failed to get insert ID for table ${String(Fe)}`);let Dt=await this.selectFrom(Fe).find(Ke);if(!Dt)throw console.error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ke}`),console.error("Inserted values:",Le),Error(`create() failed to retrieve inserted row for table ${String(Fe)} with id ${Ke}`);try{await je()?.afterCreate?.({table:String(Fe),data:Le,result:Dt})}catch{}return Dt}},async createMany(Fe,Le){if(!Le?.length)return;let qe=Le[0],Ke=Object.keys(qe),Dt=Ke.length,He=Le.length,Jt=Array.from({length:He*Dt}),It=n(e.dialect)?(Tt)=>`\`${String(Tt).replace(/`/g,"``")}\``:(Tt)=>`"${String(Tt).replace(/"/g,'""')}"`,vt=`INSERT INTO ${It(String(Fe))}(${Ke.map(It).join(",")})VALUES`,xt=0;for(let Tt=0;Tt<He;Tt++){if(Tt>0)vt+=",";vt+="(";let Vt=Le[Tt];for(let St=0;St<Dt;St++){if(St>0)vt+=",";vt+=t(xt+1),Jt[xt++]=Vt[Ke[St]]}vt+=")"}return G(vt,Jt).execute()},async insertMany(Fe,Le){if(!Le?.length)return;let qe=Le[0],Ke=Object.keys(qe),Dt=Ke.length,He=Le.length,Jt=He*Dt,It=Array(Jt),vt=e.dialect==="postgres",xt;if(!vt){let St=Array(Dt);for(let yt=0;yt<Dt;yt++)St[yt]="?";xt=`(${St.join(",")})`}else xt="";let Tt=Array(He+2);Tt[0]=`INSERT INTO ${Fe}(${Ke.join(",")})VALUES`;let Vt=0;if(!vt){for(let St=0;St<He;St++){let yt=Le[St];Tt[St+1]=xt;for(let qt=0;qt<Dt;qt++)It[Vt++]=yt[Ke[qt]]}return G(Tt[0]+Tt.slice(1,He+1).join(","),It).execute()}for(let St=0;St<He;St++){let yt=Le[St],qt=Array(Dt);for(let Lt=0;Lt<Dt;Lt++)qt[Lt]=`$${Vt+1}`,It[Vt++]=yt[Ke[Lt]];Tt[St+1]=`(${qt.join(",")})`}return G(Tt[0]+Tt.slice(1,He+1).join(","),It).execute()},async updateMany(Fe,Le,qe){let Ke=Object.keys(qe),Dt=Ke.length;if(Dt===0)return 0;let He=[],Jt=Array.from({length:Dt});for(let vt=0;vt<Dt;vt++)Jt[vt]=`${Ke[vt]}=${t(vt+1)}`,He.push(qe[Ke[vt]]);let It=`UPDATE ${Fe} SET ${Jt.join(",")}`;if(Array.isArray(Le)){let vt=Fn(String(Le[1]),"updateMany");It+=` WHERE ${Le[0]} ${vt} ${t(He.length+1)}`,He.push(Le[2])}else if(nr(Le))It+=` WHERE ${Le.raw}`;else if(dr(Le)){let vt=mr(Le,He.length+1);It+=` WHERE ${vt.text}`,He.push(...vt.parameters)}else if(Le&&typeof Le==="object"&&Object.keys(Le).length>0){let vt=Object.keys(Le).map((xt)=>Jr(xt,Le[xt],He));It+=` WHERE ${vt.join(" AND ")}`}else if(Le&&typeof Le==="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 ${Le===null?"null":typeof Le}. Refusing to run an UPDATE with no WHERE \u2014 use updateTable(table).set(data).execute() if updating every row is intended.`);return G(It,He).execute()},async deleteMany(Fe,Le){if(!Array.isArray(Le)||Le.length===0)return 0;let qe=D?.primaryKeys[String(Fe)]??"id",Ke=Le.length;if(e.dialect==="postgres"){let He=Array(Ke);for(let Jt=0;Jt<Ke;Jt++)He[Jt]=`$${Jt+1}`;return G(`DELETE FROM ${Fe} WHERE ${qe} IN (${He.join(",")})`,Le).execute()}let Dt=Array(Ke);for(let He=0;He<Ke;He++)Dt[He]="?";return G(`DELETE FROM ${Fe} WHERE ${qe} IN (${Dt.join(",")})`,Le).execute()},async firstOrCreate(Fe,Le,qe){let Ke=await this.selectFrom(Fe).where(Le).first();if(Ke)return Ke;return await this.create(Fe,{...Le,...qe})},async updateOrCreate(Fe,Le,qe){let Ke=await this.selectFrom(Fe).where(Le).first();if(Ke){await this.updateTable(Fe).set(qe).where(Le).execute();let Dt=D?.primaryKeys[String(Fe)]??"id",He=Ke[Dt],Jt=He!=null?await this.selectFrom(Fe).find(He):await this.selectFrom(Fe).where(Le).first();if(!Jt)throw Error("updateOrCreate() failed to retrieve updated row");return Jt}return await this.create(Fe,{...Le,...qe})},async count(Fe,Le){let qe=Le?h(String(Le)):h`*`,Ke=h`SELECT COUNT(${qe}) as c FROM ${h(String(Fe))}`,[Dt]=await Ke.execute();return Number(Dt?.c??0)},async sum(Fe,Le){let qe=h`SELECT SUM(${h(String(Le))}) as s FROM ${h(String(Fe))}`,[Ke]=await qe.execute();return Number(Ke?.s??0)},async avg(Fe,Le){let qe=h`SELECT AVG(${h(String(Le))}) as a FROM ${h(String(Fe))}`,[Ke]=await qe.execute();return Number(Ke?.a??0)},async min(Fe,Le){let qe=h`SELECT MIN(${h(String(Le))}) as m FROM ${h(String(Fe))}`,[Ke]=await qe.execute();return Ke?.m},async max(Fe,Le){let qe=h`SELECT MAX(${h(String(Le))}) as m FROM ${h(String(Fe))}`,[Ke]=await qe.execute();return Ke?.m},getRelationships(Fe){if(!D?.relations)return{};let Le=D.relations[Fe];if(!Le)return{};let qe={};for(let[Ke,Dt]of Object.entries(Le))if(Dt&&typeof Dt==="object"&&Object.keys(Dt).length>0)qe[Ke]=Dt;return qe},hasRelationship(Fe,Le){if(!D?.relations)return!1;let qe=D.relations[Fe];if(!qe)return!1;return Object.values(qe).some((Ke)=>Ke&&typeof Ke==="object"&&(Le in Ke))},getRelationshipType(Fe,Le){if(!D?.relations)return null;let qe=D.relations[Fe];if(!qe)return null;for(let[Ke,Dt]of Object.entries(qe))if(Dt&&typeof Dt==="object"&&Le in Dt)return Ke;return null},getRelationshipTarget(Fe,Le){if(!D?.relations)return null;let qe=D.relations[Fe];if(!qe)return null;for(let[Ke,Dt]of Object.entries(qe))if(Dt&&typeof Dt==="object"&&Le in Dt){let He=Dt[Le];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 Ge(){Lr.clear()}function Je(d){Lr.setMaxSize(d)}async function z(){console.log("-- Clearing query cache..."),Ge(),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");Je(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 Kr from"process";import{createInterface as Mi}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=Mi({input:Kr.stdin,output:Kr.stdout,prompt:"qb> "}),D="",E=!1,V=`
|
|
51
|
-
Available Commands:
|
|
52
|
-
.help Show this help message
|
|
53
|
-
.exit Exit the console
|
|
54
|
-
.tables List all tables
|
|
55
|
-
.clear Clear the screen
|
|
56
|
-
|
|
57
|
-
Query Examples:
|
|
58
|
-
qb.selectFrom('users').where({ active: true }).limit(10).execute()
|
|
59
|
-
qb.selectFrom('users').count()
|
|
60
|
-
qb.insertInto('users').values({ name: 'John' }).execute()
|
|
61
|
-
qb.selectFrom('users').where('id', '=', 1).first()
|
|
62
|
-
qb.unsafe("SELECT * FROM users WHERE id = $1", [1]).execute()
|
|
63
|
-
|
|
64
|
-
Tips:
|
|
65
|
-
- Use 'qb' to access the query builder
|
|
66
|
-
- Use 'await' for async operations
|
|
67
|
-
- Multi-line input: end with \\ to continue on next line
|
|
68
|
-
- Press Enter on an empty line to execute multi-line input
|
|
69
|
-
`,G=async(Qe)=>{try{let gt=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${Qe})`)(d);if(gt!==void 0)if(Array.isArray(gt))console.log(`-- ${gt.length} row(s) returned`),console.table(gt);else if(typeof gt==="object"&>!==null)console.log(gt);else console.log(gt)}catch(Be){console.error("Error:",Be.message)}},ke=async(Qe)=>{let Be=Qe.trim();if(Be.startsWith(".")){let je=Be.toLowerCase();if(je===".exit"||je===".quit")console.log("Goodbye!"),h.close(),Kr.exit(0);else if(je===".help")console.log(V);else if(je===".clear")console.clear();else if(je===".tables")try{let gt=await d.unsafe(`
|
|
70
|
-
SELECT name FROM sqlite_master
|
|
71
|
-
WHERE type = 'table'
|
|
72
|
-
AND name NOT LIKE 'sqlite_%'
|
|
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: ${Be}`),console.log("Type .help for available commands");return}if(Be.endsWith("\\")){E=!0,D+=`${Be.slice(0,-1)}
|
|
75
|
-
`;return}if(E){if(Be==="")await G(D),D="",E=!1;else D+=`${Be}
|
|
76
|
-
`;return}if(Be)await G(Be)};h.on("line",async(Qe)=>{await ke(Qe),h.prompt()}),h.on("SIGINT",()=>{if(E)console.log(`
|
|
77
|
-
-- Multi-line input cancelled`),D="",E=!1,h.prompt();else console.log(`
|
|
78
|
-
-- Type .exit to quit`),h.prompt()}),h.on("close",()=>{console.log(`
|
|
79
|
-
Goodbye!`),Kr.exit(0)}),h.prompt()}async function Z(){return N()}import{existsSync as Ci,readFileSync as Ii,writeFileSync as kr}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 ke=i().selectFrom(d);if(V)ke=ke.limit(V);let Qe=await ke.execute();if(console.log(`-- Retrieved ${Qe.length} rows`),D==="json")kr(E,JSON.stringify(Qe,null,2)),console.log(`-- \u2713 Exported to JSON: ${E}`);else if(D==="csv"){if(Qe.length===0){kr(E,""),console.log(`-- \u2713 Exported to CSV: ${E} (empty)`);return}let Be=Object.keys(Qe[0]),je=[Be.join(",")];for(let gt of Qe){let pt=Be.map(($t)=>{let Ct=gt[$t];if(Ct===null||Ct===void 0)return"";let Yt=String(Ct);if(Yt.includes(",")||Yt.includes('"')||Yt.includes(`
|
|
80
|
-
`))return`"${Yt.replace(/"/g,'""')}"`;return Yt});je.push(pt.join(","))}kr(E,je.join(`
|
|
81
|
-
`)),console.log(`-- \u2713 Exported to CSV: ${E}`)}else if(D==="sql"){let Be=[];for(let je of Qe){let gt=Object.keys(je),pt=gt.map(($t)=>{let Ct=je[$t];if(Ct===null||Ct===void 0)return"NULL";if(typeof Ct==="number")return String(Ct);return`'${String(Ct).replace(/'/g,"''")}'`});Be.push(`INSERT INTO ${d} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}kr(E,Be.join(`
|
|
82
|
-
`)),console.log(`-- \u2713 Exported to SQL: ${E}`)}}catch(G){throw console.error(`-- Failed to export data from ${d}:`,G),G}}async function te(d,h,D={}){if(!Ci(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 G=i();if(V)await G.deleteFrom(d).execute(),console.log("-- Table truncated");let ke=Ii(h,"utf8"),Qe=[];if(E==="json"){if(Qe=JSON.parse(ke),!Array.isArray(Qe))throw TypeError("JSON file must contain an array of objects")}else if(E==="csv"){let gt=ke.split(`
|
|
83
|
-
`).filter(($t)=>$t.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(($t)=>$t.trim());for(let $t=1;$t<gt.length;$t++){let Ct=gt[$t].split(",").map((Et)=>Et.trim()),Yt={};for(let Et=0;Et<pt.length;Et++){let Zt=Ct[Et];if(Zt.startsWith('"')&&Zt.endsWith('"'))Zt=Zt.slice(1,-1).replace(/""/g,'"');if(Zt==="")Zt=null;else if(!Number.isNaN(Number(Zt)))Zt=Number(Zt);Yt[pt[Et]]=Zt}Qe.push(Yt)}}if(Qe.length===0){console.log("-- No data to import");return}let Be=100,je=0;for(let gt=0;gt<Qe.length;gt+=Be){let pt=Qe.slice(gt,gt+Be);await G.insertInto(d).values(pt).execute(),je+=pt.length,console.log(`-- Imported ${je}/${Qe.length} rows...`)}console.log(`-- \u2713 Successfully imported ${Qe.length} rows`)}catch(G){throw console.error(`-- Failed to import data into ${d}:`,G),G}}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(),G=[];if(h==="sqlite")G=(await V.unsafe(`
|
|
84
|
-
SELECT name FROM sqlite_master
|
|
85
|
-
WHERE type = 'table'
|
|
86
|
-
AND name NOT LIKE 'sqlite_%'
|
|
87
|
-
ORDER BY name
|
|
88
|
-
`)).map((Be)=>Be.name);else if(h==="postgres")G=(await V.unsafe(`
|
|
89
|
-
SELECT table_name
|
|
90
|
-
FROM information_schema.tables
|
|
91
|
-
WHERE table_schema = 'public'
|
|
92
|
-
AND table_type = 'BASE TABLE'
|
|
93
|
-
ORDER BY table_name
|
|
94
|
-
`)).map((Be)=>Be.table_name);else if(n(h))G=(await V.unsafe(`
|
|
95
|
-
SELECT table_name
|
|
96
|
-
FROM information_schema.tables
|
|
97
|
-
WHERE table_schema = DATABASE()
|
|
98
|
-
AND table_type = 'BASE TABLE'
|
|
99
|
-
ORDER BY table_name
|
|
100
|
-
`)).map((Be)=>Be.table_name);if(E)G=G.filter((Qe)=>E.includes(Qe));if(G.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${G.length} table(s)`);let ke=[];ke.push("-- Database dump"),ke.push(`-- Generated at: ${new Date().toISOString()}`),ke.push(`-- Dialect: ${h}`),ke.push("");for(let Qe of G){console.log(`-- Dumping table: ${Qe}`);let Be=await V.selectFrom(Qe).execute();ke.push(`-- Table: ${Qe}`),ke.push(`-- Rows: ${Be.length}`),ke.push("");for(let je of Be){let gt=Object.keys(je),pt=gt.map(($t)=>{let Ct=je[$t];if(Ct===null||Ct===void 0)return"NULL";if(typeof Ct==="number")return String(Ct);return`'${String(Ct).replace(/'/g,"''")}'`});ke.push(`INSERT INTO ${Qe} (${gt.join(", ")}) VALUES (${pt.join(", ")});`)}ke.push("")}kr(D,ke.join(`
|
|
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
|
-
SELECT table_name
|
|
103
|
-
FROM information_schema.tables
|
|
104
|
-
WHERE table_schema = 'public'
|
|
105
|
-
AND table_type = 'BASE TABLE'
|
|
106
|
-
ORDER BY table_name
|
|
107
|
-
`)).map((Qe)=>Qe.table_name);else if(n(d))V=(await D.unsafe(`
|
|
108
|
-
SELECT table_name
|
|
109
|
-
FROM information_schema.tables
|
|
110
|
-
WHERE table_schema = DATABASE()
|
|
111
|
-
AND table_type = 'BASE TABLE'
|
|
112
|
-
ORDER BY table_name
|
|
113
|
-
`)).map((Qe)=>Qe.table_name);else if(d==="sqlite")V=(await D.unsafe(`
|
|
114
|
-
SELECT name
|
|
115
|
-
FROM sqlite_master
|
|
116
|
-
WHERE type = 'table'
|
|
117
|
-
AND name NOT LIKE 'sqlite_%'
|
|
118
|
-
ORDER BY name
|
|
119
|
-
`)).map((Qe)=>Qe.name);for(let ke of V)try{let Qe=await D.unsafe(`SELECT COUNT(*) as count FROM ${ke}`),Be=Number(Qe[0]?.count||0),je=0,gt=0;if(d==="postgres"){let pt=await D.unsafe(`
|
|
120
|
-
SELECT COUNT(*) as count
|
|
121
|
-
FROM information_schema.columns
|
|
122
|
-
WHERE table_name = $1
|
|
123
|
-
`,[ke]);je=Number(pt[0]?.count||0);let $t=await D.unsafe(`
|
|
124
|
-
SELECT COUNT(*) as count
|
|
125
|
-
FROM pg_indexes
|
|
126
|
-
WHERE tablename = $1
|
|
127
|
-
`,[ke]);gt=Number($t[0]?.count||0)}else if(n(d)){let pt=await D.unsafe(`
|
|
128
|
-
SELECT COUNT(*) as count
|
|
129
|
-
FROM information_schema.columns
|
|
130
|
-
WHERE table_name = ?
|
|
131
|
-
AND table_schema = DATABASE()
|
|
132
|
-
`,[ke]);je=Number(pt[0]?.count||0);let $t=await D.unsafe(`
|
|
133
|
-
SELECT COUNT(*) as count
|
|
134
|
-
FROM information_schema.statistics
|
|
135
|
-
WHERE table_name = ?
|
|
136
|
-
AND table_schema = DATABASE()
|
|
137
|
-
`,[ke]);gt=Number($t[0]?.count||0)}else if(d==="sqlite")je=(await D.unsafe(`PRAGMA table_info(${ke})`)).length,gt=(await D.unsafe(`PRAGMA index_list(${ke})`)).length;E.push({name:ke,rowCount:Be,columns:je,indexes:gt})}catch(Qe){console.error(`-- Error getting info for table ${ke}:`,Qe)}let G=E.reduce((ke,Qe)=>ke+Qe.rowCount,0);if(console.log(`-- Total Tables: ${E.length}`),console.log(`-- Total Rows: ${G.toLocaleString()}`),console.log(),E.length>0){console.log("Tables:"),console.log();let ke=Math.max(...E.map((je)=>je.name.length)),Qe=ke+2,Be="Table".padEnd(Qe)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(Be),console.log("-".repeat(Be.length));for(let je of E){let gt=je.name.padEnd(ke+2),pt=je.rowCount.toLocaleString().padStart(12),$t=(je.columns||0).toString().padStart(10),Ct=(je.indexes||0).toString().padStart(10);console.log(`${gt}${pt}${$t}${Ct}`)}}else console.log("-- No tables found");return{dialect:d,database:h,tables:E,totalTables:E.length,totalRows:G}}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
|
-
SELECT table_name
|
|
139
|
-
FROM information_schema.tables
|
|
140
|
-
WHERE table_schema = ${E}
|
|
141
|
-
`;for(let G of V){let ke=G.table_name||G.TABLE_NAME;if(d.verbose)console.log(`Optimizing table: ${ke}`);await r`OPTIMIZE TABLE ${r(ke)}`,await r`ANALYZE TABLE ${r(ke)}`}}console.log("\u2713 MySQL optimization complete")}else if(h==="sqlite"){if(d.verbose)console.log("Running VACUUM on SQLite database...");if(await r`VACUUM`,d.tables&&d.tables.length>0)for(let E of d.tables){if(d.verbose)console.log(`Analyzing table: ${E}`);await r`ANALYZE ${r(E)}`}else await r`ANALYZE`;if(D){if(d.verbose)console.log("Running aggressive SQLite optimizations...");await r`PRAGMA optimize`,await r`PRAGMA wal_checkpoint(TRUNCATE)`}console.log("\u2713 SQLite optimization complete")}else console.error(`Unsupported dialect: ${h}`)}catch(E){throw console.error("Error optimizing database:",E.message),E}}async function O(d={}){let h=H(d.dialect);if(d.verbose)console.log(`Wiping all tables from ${h} database...`);try{let D=[];if(h==="postgres")D=(await r`
|
|
142
|
-
SELECT tablename
|
|
143
|
-
FROM pg_tables
|
|
144
|
-
WHERE schemaname = 'public'
|
|
145
|
-
`).map((V)=>V.tablename);else if(n(h)){let E=Ce();D=(await r`
|
|
146
|
-
SELECT table_name
|
|
147
|
-
FROM information_schema.tables
|
|
148
|
-
WHERE table_schema = ${E}
|
|
149
|
-
`).map((G)=>G.table_name||G.TABLE_NAME)}else if(h==="sqlite")D=(await r`
|
|
150
|
-
SELECT name
|
|
151
|
-
FROM sqlite_master
|
|
152
|
-
WHERE type = 'table'
|
|
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(),G=[],ke=[],Qe=await V.unsafe(`SELECT COUNT(*) as count FROM ${d}`),Be=Number(Qe[0]?.count||0);if(D==="postgres"){let je=await V.unsafe(`
|
|
155
|
-
SELECT
|
|
156
|
-
c.column_name,
|
|
157
|
-
c.data_type,
|
|
158
|
-
c.is_nullable,
|
|
159
|
-
c.column_default,
|
|
160
|
-
CASE
|
|
161
|
-
WHEN pk.column_name IS NOT NULL THEN true
|
|
162
|
-
ELSE false
|
|
163
|
-
END as is_primary_key,
|
|
164
|
-
CASE
|
|
165
|
-
WHEN fk.column_name IS NOT NULL THEN true
|
|
166
|
-
ELSE false
|
|
167
|
-
END as is_foreign_key
|
|
168
|
-
FROM information_schema.columns c
|
|
169
|
-
LEFT JOIN (
|
|
170
|
-
SELECT ku.column_name
|
|
171
|
-
FROM information_schema.table_constraints tc
|
|
172
|
-
JOIN information_schema.key_column_usage ku
|
|
173
|
-
ON tc.constraint_name = ku.constraint_name
|
|
174
|
-
WHERE tc.constraint_type = 'PRIMARY KEY'
|
|
175
|
-
AND tc.table_name = $1
|
|
176
|
-
) pk ON c.column_name = pk.column_name
|
|
177
|
-
LEFT JOIN (
|
|
178
|
-
SELECT ku.column_name
|
|
179
|
-
FROM information_schema.table_constraints tc
|
|
180
|
-
JOIN information_schema.key_column_usage ku
|
|
181
|
-
ON tc.constraint_name = ku.constraint_name
|
|
182
|
-
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
183
|
-
AND tc.table_name = $1
|
|
184
|
-
) fk ON c.column_name = fk.column_name
|
|
185
|
-
WHERE c.table_name = $1
|
|
186
|
-
ORDER BY c.ordinal_position
|
|
187
|
-
`,[d]);for(let pt of je)G.push({name:pt.column_name,type:pt.data_type,nullable:pt.is_nullable==="YES",default:pt.column_default,isPrimaryKey:pt.is_primary_key,isForeignKey:pt.is_foreign_key});let gt=await V.unsafe(`
|
|
188
|
-
SELECT
|
|
189
|
-
i.indexname as name,
|
|
190
|
-
i.indexdef,
|
|
191
|
-
ix.indisunique as is_unique
|
|
192
|
-
FROM pg_indexes i
|
|
193
|
-
JOIN pg_class c ON c.relname = i.indexname
|
|
194
|
-
JOIN pg_index ix ON ix.indexrelid = c.oid
|
|
195
|
-
WHERE i.tablename = $1
|
|
196
|
-
`,[d]);for(let pt of gt){let $t=pt.indexdef?.match(/\(([^)]+)\)/),Yt=($t?$t[1]:"").split(",").map((Et)=>Et.trim());ke.push({name:pt.name,columns:Yt,unique:pt.is_unique})}}else if(n(D)){let je=await V.unsafe(`
|
|
197
|
-
SELECT
|
|
198
|
-
COLUMN_NAME as column_name,
|
|
199
|
-
DATA_TYPE as data_type,
|
|
200
|
-
IS_NULLABLE as is_nullable,
|
|
201
|
-
COLUMN_DEFAULT as column_default,
|
|
202
|
-
COLUMN_KEY as column_key
|
|
203
|
-
FROM information_schema.COLUMNS
|
|
204
|
-
WHERE TABLE_NAME = ?
|
|
205
|
-
AND TABLE_SCHEMA = DATABASE()
|
|
206
|
-
ORDER BY ORDINAL_POSITION
|
|
207
|
-
`,[d]);for(let $t of je)G.push({name:$t.column_name,type:$t.data_type,nullable:$t.is_nullable==="YES",default:$t.column_default,isPrimaryKey:$t.column_key==="PRI",isForeignKey:$t.column_key==="MUL"});let gt=await V.unsafe(`
|
|
208
|
-
SHOW INDEXES FROM ${d}
|
|
209
|
-
`),pt=new Map;for(let $t of gt){let Ct=$t.Key_name;if(!pt.has(Ct))pt.set(Ct,{columns:[],unique:$t.Non_unique===0});pt.get(Ct).columns.push($t.Column_name)}for(let[$t,Ct]of pt)ke.push({name:$t,columns:Ct.columns,unique:Ct.unique})}else if(D==="sqlite"){let je=await V.unsafe(`PRAGMA table_info(${d})`);for(let pt of je)G.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 $t=await V.unsafe(`PRAGMA index_info(${pt.name})`);ke.push({name:pt.name,columns:$t.map((Ct)=>Ct.name),unique:pt.unique===1})}}if(E){console.log(`Table: ${d}`),console.log(`Rows: ${Be.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let je=Math.max(...G.map((Yt)=>Yt.name.length),10),gt=Math.max(...G.map((Yt)=>Yt.type.length),10),pt=je+2,$t=gt+2,Ct=`${"Name".padEnd(pt)+"Type".padEnd($t)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(Ct),console.log("-".repeat(Ct.length));for(let Yt of G){let Et=Yt.name.padEnd(pt),Zt=Yt.type.padEnd($t),En=(Yt.nullable?"YES":"NO").padEnd(10),Dn=String(Yt.default||"").padEnd(20),Fe=[Yt.isPrimaryKey?"PK":"",Yt.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${Et}${Zt}${En}${Dn}${Fe}`)}if(console.log(),ke.length>0){console.log("Indexes:"),console.log();for(let Yt of ke){let Et=Yt.unique?" (UNIQUE)":"";console.log(` - ${Yt.name}${Et}: [${Yt.columns.join(", ")}]`)}console.log()}}return{tableName:d,rowCount:Be,columns:G,indexes:ke}}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 ze(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 vi(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 Pi(d){return d.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map((h)=>h.charAt(0).toUpperCase()+h.slice(1)).join("")}function Pe(d){return Pi(vi(d))}async function ps(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((G)=>({name:G.name,sqlType:String(G.type||""),nullable:Number(G.notnull)===0,isPrimaryKey:Number(G.pk)>0}));if(h==="postgres")return(await d.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
|
|
210
|
-
(SELECT COUNT(*) FROM information_schema.table_constraints tc
|
|
211
|
-
JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
|
|
212
|
-
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
|
|
213
|
-
FROM information_schema.columns c
|
|
214
|
-
WHERE c.table_name = $1 AND c.table_schema = 'public'
|
|
215
|
-
ORDER BY c.ordinal_position`,[D])).map((G)=>({name:G.column_name,sqlType:String(G.data_type||""),nullable:String(G.is_nullable).toUpperCase()==="YES",isPrimaryKey:Number(G.is_pk)>0}));return(await d.unsafe(`SELECT column_name, data_type, is_nullable, column_key
|
|
216
|
-
FROM information_schema.columns
|
|
217
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
218
|
-
ORDER BY ordinal_position`,[D])).map((V)=>({name:V.column_name??V.COLUMN_NAME,sqlType:String(V.data_type??V.DATA_TYPE??""),nullable:String(V.is_nullable??V.IS_NULLABLE).toUpperCase()==="YES",isPrimaryKey:String(V.column_key??V.COLUMN_KEY).toUpperCase()==="PRI"}))}function Ye(d,h){let D=Pe(d),E=h.find((G)=>G.isPrimaryKey)?.name??"id",V=h.map((G)=>{let ke=[`type: '${ze(G.sqlType)}'`];if(!G.nullable&&!G.isPrimaryKey)ke.push("required: true");return` ${G.name}: { ${ke.join(", ")} },`}).join(`
|
|
219
|
-
`);return`export const ${D} = defineModel({
|
|
220
|
-
name: '${D}',
|
|
221
|
-
table: '${d}',
|
|
222
|
-
primaryKey: '${E}',
|
|
223
|
-
attributes: {
|
|
224
|
-
${V}
|
|
225
|
-
},
|
|
226
|
-
})
|
|
227
|
-
`}async function v(d={}){let h=e.dialect||"postgres",D=i(),E=d.tables?.length?d.tables:await ps(D,h),V=[];for(let G of E){let ke=await _i(D,h,G);if(!ke.length)continue;V.push({table:G,modelName:Pe(G),primaryKey:ke.find((Qe)=>Qe.isPrimaryKey)?.name??"id",columns:ke,source:Ye(G,ke)})}return V}function Hr(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 G=E.match(/\((\d+)\)/),ke=G?Number(G[1]):void 0;if(n(h))return"string";return ke!==void 0&&ke>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 qi(d,h,D){return Hr(String(h||d||""),"mysql",{enumValues:D})}function Li(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 hr(d){let h=String(d??"").toLowerCase().trim();if(h==="cascade"||h==="restrict"||h==="set null")return h;return}async function Ki(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)})`),G=await d.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[h]),ke=String(G?.[0]?.sql??""),Qe=new Map;for(let pt of V)Qe.set(String(pt.from),{table:String(pt.table),column:String(pt.to??"id"),onDelete:hr(pt.on_delete),onUpdate:hr(pt.on_update)});let Be=[],je=new Set;for(let pt of E){let $t=String(pt.origin??""),Ct=String(pt.name??"");if($t==="pk"||Ct.startsWith("sqlite_autoindex_"))continue;let Et=(await d.unsafe(`PRAGMA index_info(${JSON.stringify(Ct)})`)).map((En)=>String(En.name)).filter(Boolean);if(Et.length===0)continue;let Zt=Number(pt.unique)===1;if(Zt&&Et.length===1)je.add(Et[0]);Be.push({name:Ct,columns:Et,type:Zt?"unique":"index"})}let gt=D.map((pt)=>{let $t=String(pt.name),Ct=Fi(ke,$t),Yt=Number(pt.pk)>0,Et=pt.dflt_value,Zt=Et!==null&&Et!==void 0;return{name:$t,type:Hr(String(pt.type??""),"sqlite",{enumValues:Ct}),isPrimaryKey:Yt,isUnique:je.has($t),isNullable:Yt?!1:Number(pt.notnull)===0,hasDefault:Zt,defaultValue:Zt?Yr(Et):void 0,enumValues:Ct,references:Qe.get($t)}});return{table:h,columns:gt,indexes:Be}}function Fi(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((G)=>G.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((G)=>G.length>0);return V.length>0?V:void 0}function Yr(d){if(typeof d==="number"||typeof d==="boolean")return d;return String(d)}async function hs(d){let h=await d.unsafe(`SELECT t.typname AS type_name, e.enumlabel AS label
|
|
228
|
-
FROM pg_type t
|
|
229
|
-
JOIN pg_enum e ON e.enumtypid = t.oid
|
|
230
|
-
JOIN pg_namespace n ON n.oid = t.typnamespace
|
|
231
|
-
WHERE n.nspname = 'public'
|
|
232
|
-
ORDER BY t.typname, e.enumsortorder`),D=new Map;for(let E of h){let V=String(E.type_name),G=D.get(V);if(G)G.push(String(E.label));else D.set(V,[String(E.label)])}return D}function Ui(d,h,D){let E=D.get(h),V=Hr(String(d||h||""),"postgres",{enumValues:E});return E?{type:V,enumValues:E,enumTypeName:h}:{type:V}}async function Qi(d,h,D){let E=D??await hs(d),V=await d.unsafe(`SELECT c.column_name, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length,
|
|
233
|
-
(SELECT COUNT(*) FROM information_schema.table_constraints tc
|
|
234
|
-
JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
|
|
235
|
-
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
|
|
236
|
-
FROM information_schema.columns c
|
|
237
|
-
WHERE c.table_name = $1 AND c.table_schema = 'public'
|
|
238
|
-
ORDER BY c.ordinal_position`,[h]),G=await d.unsafe(`SELECT i.relname AS index_name, ix.indisunique AS is_unique, ix.indisprimary AS is_primary,
|
|
239
|
-
a.attname AS column_name, array_position(ix.indkey, a.attnum) AS ord,
|
|
240
|
-
pg_get_expr(ix.indpred, ix.indrelid) AS where_clause
|
|
241
|
-
FROM pg_class t
|
|
242
|
-
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
243
|
-
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
244
|
-
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
245
|
-
WHERE t.relname = $1 AND t.relkind = 'r'
|
|
246
|
-
ORDER BY i.relname, ord`,[h]),ke=await d.unsafe(`SELECT kcu.column_name, ccu.table_name AS ref_table, ccu.column_name AS ref_column,
|
|
247
|
-
tc.constraint_name, rc.delete_rule, rc.update_rule
|
|
248
|
-
FROM information_schema.table_constraints tc
|
|
249
|
-
JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
|
|
250
|
-
JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
|
|
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]),Qe=new Map,Be=new Map;for(let $t of ke){let Ct=String($t.constraint_name);Be.set(Ct,(Be.get(Ct)??0)+1)}for(let $t of ke){let Ct=String($t.column_name),Yt=Qe.get(Ct),Et=String($t.constraint_name),Zt=Be.get(Et)===1?[...new Set([...Yt?.constraintNames??[],Et])]:Yt?.constraintNames;Qe.set(Ct,Yt?{...Yt,constraintNames:Zt}:{table:String($t.ref_table),column:String($t.ref_column??"id"),onDelete:hr($t.delete_rule),onUpdate:hr($t.update_rule),constraintNames:Zt})}let{indexes:je,uniqueColumns:gt}=Ts(h,G.map(($t)=>({indexName:String($t.index_name),isUnique:$t.is_unique===!0||$t.is_unique==="t",isPrimary:$t.is_primary===!0||$t.is_primary==="t",column:String($t.column_name),where:$t.where_clause?String($t.where_clause):void 0}))),pt=V.map(($t)=>{let Ct=String($t.column_name),Yt=Number($t.is_pk)>0,Et=$t.column_default==null?null:String($t.column_default),Zt=Et!=null&&/nextval\(/i.test(Et),En=Et!=null&&!Zt;return{name:Ct,...Ui(String($t.data_type??""),$t.udt_name==null?"":String($t.udt_name),E),isPrimaryKey:Yt,isUnique:gt.has(Ct),isNullable:Yt?!1:String($t.is_nullable).toUpperCase()==="YES",hasDefault:En,defaultValue:En?Yr(Et):void 0,references:Qe.get(Ct)}});return{table:h,columns:pt,indexes:je}}async function ji(d,h){let D=await d.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
|
|
253
|
-
FROM information_schema.columns
|
|
254
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
255
|
-
ORDER BY ordinal_position`,[h]),E=await d.unsafe(`SELECT index_name, non_unique, seq_in_index, column_name
|
|
256
|
-
FROM information_schema.statistics
|
|
257
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
258
|
-
ORDER BY index_name, seq_in_index`,[h]),V=await d.unsafe(`SELECT kcu.column_name, kcu.referenced_table_name AS ref_table, kcu.referenced_column_name AS ref_column,
|
|
259
|
-
kcu.constraint_name, rc.delete_rule, rc.update_rule
|
|
260
|
-
FROM information_schema.key_column_usage kcu
|
|
261
|
-
JOIN information_schema.referential_constraints rc
|
|
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]),G=new Map,ke=new Map;for(let gt of V){let pt=String(gt.constraint_name??gt.CONSTRAINT_NAME);ke.set(pt,(ke.get(pt)??0)+1)}for(let gt of V){let pt=String(gt.column_name??gt.COLUMN_NAME),$t=G.get(pt),Ct=String(gt.constraint_name??gt.CONSTRAINT_NAME),Yt=ke.get(Ct)===1?[...new Set([...$t?.constraintNames??[],Ct])]:$t?.constraintNames;G.set(pt,$t?{...$t,constraintNames:Yt}:{table:String(gt.ref_table??gt.REF_TABLE),column:String(gt.ref_column??gt.REF_COLUMN??"id"),onDelete:hr(gt.delete_rule??gt.DELETE_RULE),onUpdate:hr(gt.update_rule??gt.UPDATE_RULE),constraintNames:Yt})}let{indexes:Qe,uniqueColumns:Be}=Ts(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)}))),je=D.map((gt)=>{let pt=String(gt.column_name??gt.COLUMN_NAME),$t=String(gt.column_type??gt.COLUMN_TYPE??""),Ct=Wi($t),Et=String(gt.column_key??gt.COLUMN_KEY??"").toUpperCase()==="PRI",Zt=gt.column_default??gt.COLUMN_DEFAULT,En=Zt!=null;return{name:pt,type:qi(gt.data_type??gt.DATA_TYPE,$t,Ct),isPrimaryKey:Et,isUnique:Be.has(pt),isNullable:Et?!1:String(gt.is_nullable??gt.IS_NULLABLE).toUpperCase()==="YES",hasDefault:En,defaultValue:En?Yr(Zt):void 0,enumValues:Ct,maxLength:Li($t),references:G.get(pt)}});return{table:h,columns:je,indexes:Qe}}function Wi(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 Ts(d,h){let D=new Map;for(let G of h){if(G.isPrimary)continue;let ke=D.get(G.indexName)??{isUnique:G.isUnique,isPrimary:G.isPrimary,columns:[],where:G.where};ke.columns.push(G.column),D.set(G.indexName,ke)}let E=[],V=new Set;for(let[G,ke]of D){if(ke.columns.length===0)continue;if(ke.isUnique&&ke.columns.length===1)V.add(ke.columns[0]);E.push({name:G,columns:ke.columns,type:ke.isUnique?"unique":"index",where:ke.where})}return{indexes:E,uniqueColumns:V}}async function bs(d,h={}){let D=d||e.dialect||"postgres",E=i(),G=((h.tables?.length)?h.tables:await ps(E,D)).filter((Be)=>Be!=="migrations"),ke=D==="postgres"?await hs(E):void 0,Qe=[];for(let Be of G){let je;if(D==="sqlite")je=await Ki(E,Be);else if(D==="postgres")je=await Qi(E,Be,ke);else je=await ji(E,Be);if(je.columns.length>0)Qe.push(je)}return{dialect:D,tables:Qe}}import{existsSync as Gr,mkdirSync as Vi,writeFileSync as Ji}from"fs";import{dirname as Ss,join as zr}from"path";import ws from"process";function Hi(d){let h=d;while(h!==Ss(h)){if(Gr(zr(h,"package.json")))return h;h=Ss(h)}return ws.cwd()}async function le(d,h={}){let D=Hi(ws.cwd()),E=h.dir||zr(D,"app/Models");if(!Gr(E))Vi(E,{recursive:!0}),console.log(`-- Created models directory: ${E}`);let V=d.charAt(0).toUpperCase()+d.slice(1),G=h.table||`${d.toLowerCase()}s`,ke=`${V}.ts`,Qe=zr(E,ke);if(Gr(Qe))throw console.error(`-- Model already exists: ${Qe}`),Error(`Model already exists: ${Qe}`);let je=h.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
|
|
264
|
-
updated_at: { validation: { rule: v.date() } },`:"",gt=`import { v } from '@stacksjs/ts-validation'
|
|
265
|
-
import { defineModel } from 'bun-query-builder'
|
|
266
|
-
|
|
267
|
-
const model = defineModel({
|
|
268
|
-
name: '${V}',
|
|
269
|
-
table: '${G}',
|
|
270
|
-
primaryKey: 'id',
|
|
271
|
-
attributes: {
|
|
272
|
-
id: { validation: { rule: v.integer() } },
|
|
273
|
-
${je}
|
|
274
|
-
// Add your model attributes here
|
|
275
|
-
// Example:
|
|
276
|
-
// name: { validation: { rule: v.string() } },
|
|
277
|
-
// email: { unique: true, validation: { rule: v.string().email() } },
|
|
278
|
-
// age: { default: 0, validation: { rule: v.number().min(0) } },
|
|
279
|
-
},
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
export default model
|
|
283
|
-
`;Ji(Qe,gt),console.log(`-- \u2713 Created model: ${Qe}`),console.log(`-- Table: ${G}`)}async function me(d,h={}){return b(d,h)}import{existsSync as Rs,readFileSync as zi,unlinkSync as Xi}from"fs";import{join as Zi}from"path";import{existsSync as Yi}from"fs";import{dirname as Ds,isAbsolute as Gi,join as $s}from"path";import Es from"process";function Xr(d=Es.cwd()){let h=d;while(h!==Ds(h)){if(Yi($s(h,"package.json")))return h;h=Ds(h)}return Es.cwd()}function ar(d,h="database/migrations"){let D=h||"database/migrations";return Gi(D)?D:$s(d??Xr(),D)}function ea(d){let h=[],D="",E=null;for(let V=0;V<d.length;V++){let G=d[V];if(E){if(D+=G,G===E)if(d[V+1]===E)D+=d[V+1],V++;else E=null;continue}if(G==="'"||G==='"'||G==="`"){E=G,D+=G;continue}if(G==="-"&&d[V+1]==="-"){let ke=d.indexOf(`
|
|
284
|
-
`,V);V=ke===-1?d.length:ke;continue}if(G==="/"&&d[V+1]==="*"){let ke=d.indexOf("*/",V+2);V=ke===-1?d.length:ke+1;continue}if(G===";"){if(D.trim())h.push(D.trim());D="";continue}D+=G}if(D.trim())h.push(D.trim());return h}function ta(d,h=e.dialect){let D=(G)=>n(h)?`\`${G}\``:`"${G}"`,E=[],V=[];for(let G of ea(d)){let ke;if(ke=/^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?/i.exec(G))E.push(`DROP TABLE IF EXISTS ${D(ke[1])}`);else if(ke=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+CONSTRAINT\s+["`']?(\w+)["`']?([\s\S]*)$/i.exec(G))if(h==="sqlite")V.push(G);else if(n(h)&&/\bFOREIGN\s+KEY\b/i.test(ke[3]??""))E.push(`ALTER TABLE ${D(ke[1])} DROP FOREIGN KEY ${D(ke[2])}`);else E.push(`ALTER TABLE ${D(ke[1])} DROP CONSTRAINT ${D(ke[2])}`);else if(ke=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+(?:COLUMN\s+["`']?(\w+)["`']?|["`'](\w+)["`']|(\w+))/i.exec(G)){let Qe=ke[2]??ke[3]??ke[4];if(ke[4]&&/^(?:PRIMARY|UNIQUE|INDEX|KEY|FOREIGN|CHECK|FULLTEXT|SPATIAL)$/i.test(ke[4]))V.push(G);else E.push(`ALTER TABLE ${D(ke[1])} DROP COLUMN ${D(Qe)}`)}else if(ke=/^CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?(?:\s+ON\s+["`']?(\w+)["`']?)?/i.exec(G))E.push(n(h)&&ke[2]?`DROP INDEX ${D(ke[1])} ON ${D(ke[2])}`:`DROP INDEX IF EXISTS ${D(ke[1])}`);else V.push(G)}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
|
-
SELECT migration, executed_at
|
|
286
|
-
FROM migrations
|
|
287
|
-
ORDER BY executed_at DESC, migration DESC
|
|
288
|
-
`)}catch(Be){console.log("-- Migrations table not found. Nothing to rollback.",Be);return}if(V.length===0){console.log("-- No migrations to rollback");return}let G=V.slice(0,h);console.log(`-- Found ${V.length} executed migrations`),console.log(`-- Rolling back ${G.length} migration(s):`),console.log();for(let Be of G)console.log(` - ${Be.migration}`);console.log();let ke=ar(void 0,e.migrationDir),Qe=!1;for(let Be of G)try{let je=Zi(ke,Be.migration);if(D&&Rs(je)){let pt=zi(je,"utf8"),{down:$t,skipped:Ct}=ta(pt);for(let Yt of $t)await E.unsafe(Yt),console.log(`-- \u21A9 ${Yt}`),Qe=!0;if(Ct.length>0)console.log(`-- \u26A0\uFE0F ${Ct.length} statement(s) in ${Be.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,[Be.migration]),console.log(`-- \u2713 Removed migration record: ${Be.migration}`),d.deleteFiles&&Rs(je))Xi(je),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${Be.migration}`)}catch(je){throw console.error(`-- \u2717 Failed to rollback migration ${Be.migration}:`,je),je}if(console.log(),D)console.log(Qe?"-- \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 na,readdirSync as ra}from"fs";async function I(){let d=e.dialect||"postgres",h=f(d),D=ar(void 0,e.migrationDir);if(console.log("-- Migration Status"),console.log(`-- Dialect: ${d}`),console.log(`-- SQL directory: ${D}`),console.log(),!na(D))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let V=ra(D).filter((G)=>G.endsWith(".sql")).sort();if(V.length===0)return console.log("-- No migration files found"),[];try{let G=i(),ke=[];try{ke=await G.unsafe(h.getExecutedMigrationsQuery())}catch(pt){console.log("-- Migrations table not found. All migrations are pending.",pt),console.log()}let Qe=new Map(ke.map((pt)=>[pt.migration,pt.executed_at])),Be=V.map((pt)=>({file:pt,status:Qe.has(pt)?"executed":"pending",executedAt:Qe.get(pt)})),je=Be.filter((pt)=>pt.status==="executed"),gt=Be.filter((pt)=>pt.status==="pending");if(console.log(`-- Total migrations: ${V.length}`),console.log(`-- Executed: ${je.length}`),console.log(`-- Pending: ${gt.length}`),console.log(),je.length>0){console.log("\u2713 Executed Migrations:");for(let pt of je)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 Be}catch(G){throw console.error("-- Failed to get migration status:",G),G}}async function ge(){return I()}import{readdirSync as sa}from"fs";import{extname as Zr,join as xs}from"path";import ia from"process";async function L(d,h={}){let D=h.dir||xs(ia.cwd(),"app/Models");try{let E=sa(D),V=E.find((gt)=>gt.replace(Zr(gt),"").toLowerCase()===d.toLowerCase());if(!V){console.error(`Model "${d}" not found in ${D}`),console.log(`Available models: ${E.filter((gt)=>[".ts",".js"].includes(Zr(gt))).map((gt)=>gt.replace(Zr(gt),"")).join(", ")}`);return}let ke=await import(xs(D,V)),Qe=ke.default||ke[Object.keys(ke)[0]];if(!Qe||!Qe.name){console.error(`Invalid model file: ${V}`);return}let Be={name:Qe.name,table:Qe.table||`${Qe.name.toLowerCase()}s`,primaryKey:Qe.primaryKey||"id",attributes:Qe.attributes||{},relations:Qe.relations,scopes:Qe.scopes,indexes:Qe.indexes,timestamps:Qe.timestamps!==!1,softDeletes:Qe.softDeletes===!0},je=[];if(Qe.beforeCreate)je.push("beforeCreate");if(Qe.afterCreate)je.push("afterCreate");if(Qe.beforeUpdate)je.push("beforeUpdate");if(Qe.afterUpdate)je.push("afterUpdate");if(Qe.beforeDelete)je.push("beforeDelete");if(Qe.afterDelete)je.push("afterDelete");if(je.length>0)Be.hooks=je;if(h.json)return console.log(JSON.stringify(Be,null,2)),Be;console.log(`
|
|
289
|
-
\uD83D\uDCE6 Model: ${Be.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: ${Be.table}`),console.log(`Primary Key: ${Be.primaryKey}`),console.log(`Timestamps: ${Be.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${Be.softDeletes?"\u2713":"\u2717"}`),console.log(`
|
|
290
|
-
\uD83D\uDCCB Attributes (${Object.keys(Be.attributes).length}):`);for(let[gt,pt]of Object.entries(Be.attributes)){let $t=pt.type||"string",Ct=pt.required?"(required)":"",Yt=pt.unique?"(unique)":"",Et=pt.default!==void 0?`= ${JSON.stringify(pt.default)}`:"";console.log(` \u2022 ${gt}: ${$t} ${Ct} ${Yt} ${Et}`.trim())}if(Be.relations&&Object.keys(Be.relations).length>0){console.log(`
|
|
291
|
-
\uD83D\uDD17 Relations (${Object.keys(Be.relations).length}):`);for(let[gt,pt]of Object.entries(Be.relations)){let $t=pt.type||"unknown",Ct=pt.model||pt.table||"unknown";console.log(` \u2022 ${gt}: ${$t} \u2192 ${Ct}`)}}if(Be.scopes&&Object.keys(Be.scopes).length>0){console.log(`
|
|
292
|
-
\uD83D\uDD0D Scopes (${Object.keys(Be.scopes).length}):`);for(let gt of Object.keys(Be.scopes))console.log(` \u2022 ${gt}()`)}if(Be.hooks&&Be.hooks.length>0){console.log(`
|
|
293
|
-
\uD83E\uDE9D Hooks (${Be.hooks.length}):`);for(let gt of Be.hooks)console.log(` \u2022 ${gt}`)}if(Be.indexes&&Be.indexes.length>0){console.log(`
|
|
294
|
-
\uD83D\uDCC7 Indexes (${Be.indexes.length}):`);for(let gt of Be.indexes){let pt=Array.isArray(gt.columns)?gt.columns.join(", "):gt.columns,$t=gt.unique?"(unique)":"";console.log(` \u2022 ${gt.name||"unnamed"}: [${pt}] ${$t}`.trim())}}return console.log(),Be}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 aa,readFileSync as ks,statSync as oa}from"fs";import{extname as Ns,join as la}from"path";async function K(d,h={}){let D=[];try{let E=oa(d),V=[];if(E.isDirectory())V=aa(d).filter((Be)=>Ns(Be)===".sql").map((Be)=>la(d,Be));else if(E.isFile()&&Ns(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 Qe of V)try{let Be=ks(Qe,"utf8").trim();if(!Be){if(h.verbose)console.log(`\u2298 ${Qe}: empty file`);continue}if(h.verbose)console.log(`\uD83D\uDCC4 ${Qe}`),console.log(` Query: ${Be.substring(0,60)}${Be.length>60?"...":""}`);let je=await r`EXPLAIN ${r.unsafe(Be)}`;if(D.push({file:Qe,query:Be,plan:Array.isArray(je)?je:[je]}),h.verbose&&!h.json){if(console.log(" Plan:"),Array.isArray(je))for(let gt of je)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(Be){if(D.push({file:Qe,query:ks(Qe,"utf8").trim(),plan:[],error:Be.message}),h.verbose)console.log(` \u2717 Error: ${Be.message}
|
|
296
|
-
`)}let G=D.filter((Qe)=>!Qe.error).length,ke=D.filter((Qe)=>Qe.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: ${G} successful, ${ke} 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 ua}from"fs";import{join as ca}from"path";import da from"process";async function F(d={}){let h=d.dir||ca(da.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=ma(E);else if(D==="dot")V=fa(E);else return console.error(`Unsupported format: ${D}`),"";if(d.output)ua(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 ma(d){let h=["erDiagram"];for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,G=E.attributes||{};h.push(` ${V} {`);for(let[ke,Qe]of Object.entries(G)){let Be=Qe.type||"string",je=E.primaryKey===ke?"PK":"",gt=Qe.unique?"UK":"",pt=[je,gt].filter(Boolean).join(","),$t=pt?` "${pt}"`:"";h.push(` ${Be} ${ke}${$t}`)}h.push(" }")}for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,G=E.relations||{};for(let[ke,Qe]of Object.entries(G)){let{type:Be,model:je}=Qe,gt=d[je]?.table||`${je?.toLowerCase()}s`||"unknown",pt="";if(Be==="hasOne")pt="||--||";else if(Be==="hasMany")pt="||--o{";else if(Be==="belongsTo")pt="}o--||";else if(Be==="belongsToMany"||Be==="manyToMany")pt="}o--o{";else pt="||--||";h.push(` ${V} ${pt} ${gt} : "${ke}"`)}}return h.join(`
|
|
297
|
-
`)}function fa(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`,G=E.attributes||{},ke=[];for(let[Be,je]of Object.entries(G)){let gt=je.type||"string",pt=E.primaryKey===Be?" (PK)":"",$t=je.unique?" (UK)":"";ke.push(`${Be}: ${gt}${pt}${$t}`)}let Qe=`${ke.join("\\l")}\\l`;h.push(` ${V} [label="{${V}|${Qe}}"];`)}h.push("");for(let[D,E]of Object.entries(d)){let V=E.table||`${D.toLowerCase()}s`,G=E.relations||{};for(let[ke,Qe]of Object.entries(G)){let{type:Be,model:je}=Qe,gt=d[je]?.table||`${je?.toLowerCase()}s`||"unknown",pt="";if(Be==="hasOne")pt="arrowhead=none, arrowtail=normal";else if(Be==="hasMany")pt="arrowhead=crow, arrowtail=none";else if(Be==="belongsTo")pt="arrowhead=normal, arrowtail=none";else if(Be==="belongsToMany"||Be==="manyToMany")pt="arrowhead=crow, arrowtail=crow";h.push(` ${V} -> ${gt} [label="${ke}", ${pt}];`)}}return h.push("}"),h.join(`
|
|
298
|
-
`)}import{existsSync as Fr,mkdirSync as ga,readdirSync as ya,writeFileSync as pa}from"fs";import{dirname as Bs,join as lr}from"path";import Nr from"process";function Ur(d){let h=d;while(h!==Bs(h)){if(Fr(lr(h,"package.json")))return h;h=Bs(h)}return Nr.cwd()}async function As(d){if(!Fr(d))return console.log(`-- Seeders directory not found: ${d}`),[];let D=ya(d).sort((V,G)=>V.localeCompare(G)).filter((V)=>(V.endsWith(".ts")||V.endsWith(".js"))&&V!=="index.ts"&&V!=="index.js"),E=[];for(let V of D){let G=lr(d,V);try{let ke=await import(G),Qe=ke.default||ke[Object.keys(ke)[0]];if(Qe&&typeof Qe==="function"){let Be=new Qe;if(Be&&typeof Be.run==="function")E.push({name:V.replace(/\.(ts|js)$/,""),className:String(Qe.name||""),instance:Be})}}catch(ke){console.error(`-- Failed to load seeder ${V}:`,ke)}}return E.sort((V,G)=>V.instance.order-G.instance.order),E}async function R(d={}){let h=Ur(Nr.cwd()),D=d.seedersDir||lr(h,"database/seeders"),E=d.verbose??!0;if(E)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${D}`);let V=await As(D);if(V.length===0){console.log("-- No seeders found");return}if(E)console.log(`-- Found ${V.length} seeder(s)`);let G=i();for(let{name:ke,instance:Qe}of V)try{if(E)console.log(`-- Seeding: ${ke}`);if(await Qe.run(G),E)console.log(`-- \u2713 Seeded: ${ke}`)}catch(Be){throw console.error(`-- \u2717 Failed to seed ${ke}:`,Be),Be}if(E)console.log("-- All seeders completed successfully")}async function j(d,h={}){let D=Ur(Nr.cwd()),E=lr(D,"database/seeders"),V=h.verbose??!0;if(V)console.log(`-- Running seeder: ${d}`);let G=await As(E),ke=G.find((Be)=>Be.className===d)??G.find((Be)=>Be.name===d);if(!ke){let Be=G.map((je)=>je.className||je.name).join(", ")||"none";throw console.error(`-- Seeder not found: ${d}. Available: ${Be}`),Error(`Seeder not found: ${d}. Available: ${Be}`)}let Qe=i();try{if(await ke.instance.run(Qe),V)console.log(`-- \u2713 Seeder completed: ${d}`)}catch(Be){throw console.error(`-- \u2717 Seeder failed: ${d}`,Be),Be}}async function ye(d){let h=Ur(Nr.cwd()),D=lr(h,"database/seeders");if(!Fr(D))ga(D,{recursive:!0}),console.log(`-- Created seeders directory: ${D}`);let V=`${d.replace(/Seeder$/i,"")}Seeder`,G=`${V}.ts`,ke=lr(D,G);if(Fr(ke))throw console.error(`-- Seeder already exists: ${ke}`),Error(`Seeder already exists: ${ke}`);let Qe=`import type { QueryBuilder } from 'bun-query-builder'
|
|
299
|
-
import { Seeder } from 'bun-query-builder'
|
|
300
|
-
import { faker } from '@stacksjs/ts-faker'
|
|
301
|
-
|
|
302
|
-
export default class ${V} extends Seeder {
|
|
303
|
-
/**
|
|
304
|
-
* Run the database seeds.
|
|
305
|
-
*/
|
|
306
|
-
async run(qb: QueryBuilder): Promise<void> {
|
|
307
|
-
console.log('Seeding: ${V}')
|
|
308
|
-
|
|
309
|
-
// Example: Create 10 records with faker
|
|
310
|
-
const records = Array.from({ length: 10 }, () => ({
|
|
311
|
-
name: faker.person.fullName(),
|
|
312
|
-
email: faker.internet.email().toLowerCase(),
|
|
313
|
-
age: faker.number.int({ min: 18, max: 80 }),
|
|
314
|
-
created_at: faker.date.past(),
|
|
315
|
-
updated_at: new Date(),
|
|
316
|
-
}))
|
|
317
|
-
|
|
318
|
-
// Option 1: Kysely-style API
|
|
319
|
-
await qb.insertInto('table_name').values(records).execute()
|
|
320
|
-
|
|
321
|
-
// Option 2: Laravel-style API (equivalent)
|
|
322
|
-
// await qb.table('table_name').insert(records).execute()
|
|
323
|
-
|
|
324
|
-
console.log(\`\u2713 Seeded \${records.length} records\`)
|
|
325
|
-
|
|
326
|
-
// For large datasets, use batch inserts:
|
|
327
|
-
// const batchSize = 100
|
|
328
|
-
// for (let i = 0; i < records.length; i += batchSize) {
|
|
329
|
-
// const batch = records.slice(i, i + batchSize)
|
|
330
|
-
// await qb.insertInto('table_name').values(batch).execute()
|
|
331
|
-
// // Or: await qb.table('table_name').insert(batch).execute()
|
|
332
|
-
// }
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Specify the order in which this seeder should run.
|
|
337
|
-
* Lower numbers run first. Default is 100.
|
|
338
|
-
*/
|
|
339
|
-
get order(): number {
|
|
340
|
-
return 100
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
`;pa(ke,Qe),console.log(`-- \u2713 Created seeder: ${ke}`)}async function be(d={}){let h=Ur(Nr.cwd()),D=d.modelsDir||lr(h,"app/Models"),E=d.seedersDir||lr(h,"database/seeders"),V=d.verbose??!0;try{let{resetDatabase:G,generateMigration:ke,executeMigration:Qe}=await import("./chunk-n6g1zfr3.js");if(V)console.log("-- Refreshing database...");if(await G(D),V)console.log("-- Running migrations...");if(await ke(D,{full:!0}),await Qe(),V)console.log("-- Running seeders...");if(await R({seedersDir:E,verbose:V}),V)console.log("-- \u2713 Database refreshed successfully")}catch(G){throw console.error("-- \u2717 Database refresh failed:",G),G}}function Te(d,h,D={}){let E=u({modelsDir:d}),V=$e(E);if(e.debug)e.debug.captureText=!0;let G=i({schema:V}),ke=G.selectFrom(h).limit(Number(D.limit||10)).toText?.()??"";return console.log(ke||"[query]"),{sql:ke,qb:G,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 ha}from"fs";import{dirname as Os,join as Ms}from"path";import Cs from"process";function Ta(d){let h=d;while(h!==Os(h)){if(ha(Ms(h,"package.json")))return h;h=Os(h)}return Cs.cwd()}async function q(d){if(!d)d=Ms(Ta(Cs.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}),G=i(),ke=[];if(h==="sqlite")ke=(await G.unsafe(`
|
|
344
|
-
SELECT name FROM sqlite_master
|
|
345
|
-
WHERE type = 'table'
|
|
346
|
-
AND name NOT LIKE 'sqlite_%'
|
|
347
|
-
AND name != 'migrations'
|
|
348
|
-
`)).map((gt)=>gt.name);else if(h==="postgres")ke=(await G.unsafe(`
|
|
349
|
-
SELECT table_name
|
|
350
|
-
FROM information_schema.tables
|
|
351
|
-
WHERE table_schema = 'public'
|
|
352
|
-
AND table_type = 'BASE TABLE'
|
|
353
|
-
AND table_name != 'migrations'
|
|
354
|
-
`)).map((gt)=>gt.table_name);else if(n(h))ke=(await G.unsafe(`
|
|
355
|
-
SELECT table_name
|
|
356
|
-
FROM information_schema.tables
|
|
357
|
-
WHERE table_schema = DATABASE()
|
|
358
|
-
AND table_type = 'BASE TABLE'
|
|
359
|
-
AND table_name != 'migrations'
|
|
360
|
-
`)).map((gt)=>gt.table_name);let Qe=V.tables.map((je)=>je.table);for(let je of Qe)if(!ke.includes(je))D.push({type:"missing_table",severity:"error",table:je,message:`Table '${je}' defined in models but not found in database`});for(let je of ke)if(!Qe.includes(je))D.push({type:"extra_table",severity:"warning",table:je,message:`Table '${je}' exists in database but not defined in models`});for(let je of V.tables){if(!ke.includes(je.table))continue;let gt=[];if(h==="sqlite")gt=(await G.unsafe(`PRAGMA table_info(${je.table})`)).map((Yt)=>({name:Yt.name,type:Yt.type.toLowerCase()}));else if(h==="postgres")gt=(await G.unsafe(`
|
|
361
|
-
SELECT column_name, data_type
|
|
362
|
-
FROM information_schema.columns
|
|
363
|
-
WHERE table_name = $1
|
|
364
|
-
`,[je.table])).map((Yt)=>({name:Yt.column_name,type:Yt.data_type.toLowerCase()}));else if(n(h))gt=(await G.unsafe(`
|
|
365
|
-
SELECT column_name, data_type
|
|
366
|
-
FROM information_schema.columns
|
|
367
|
-
WHERE table_name = ?
|
|
368
|
-
AND table_schema = DATABASE()
|
|
369
|
-
`,[je.table])).map((Yt)=>({name:Yt.column_name,type:Yt.data_type.toLowerCase()}));let pt=gt.map((Ct)=>Ct.name),$t=je.columns.map((Ct)=>Ct.name);for(let Ct of je.columns)if(!pt.includes(Ct.name))D.push({type:"missing_column",severity:"error",table:je.table,column:Ct.name,expected:Ct.type,message:`Column '${je.table}.${Ct.name}' defined in model but not found in database`});for(let Ct of gt)if(!$t.includes(Ct.name))D.push({type:"extra_column",severity:"warning",table:je.table,column:Ct.name,actual:Ct.type,message:`Column '${je.table}.${Ct.name}' exists in database but not defined in model`});for(let Ct of je.columns){let Yt=gt.find((Et)=>Et.name===Ct.name);if(Yt){let Et=(Dn)=>Dn.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim(),Zt=Et(Ct.type),En=Et(Yt.type);if(Zt!==En)D.push({type:"type_mismatch",severity:"warning",table:je.table,column:Ct.name,expected:Ct.type,actual:Yt.type,message:`Column '${je.table}.${Ct.name}' type mismatch: expected '${Ct.type}', found '${Yt.type}'`})}}}let Be=D.filter((je)=>je.severity==="error").length===0;if(Be&&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 je=D.filter((pt)=>pt.severity==="error"),gt=D.filter((pt)=>pt.severity==="warning");if(je.length>0){console.log(`\u2717 Errors (${je.length}):`);for(let pt of je)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(!Be)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:Be,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 G=`#key${D}`;if(h.ExpressionAttributeNames[G]=V.attribute,V.operator==="begins_with"){let ke=`:keyval${D}`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.value}).v,E.push(`begins_with(${G}, ${ke})`)}else if(V.operator==="BETWEEN"){let ke=`:keyval${D}a`,Qe=`:keyval${D}b`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Qe]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${G} BETWEEN ${ke} AND ${Qe}`)}else{let ke=`:keyval${D}`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.value}).v,E.push(`${G} ${V.operator} ${ke}`)}D++}h.KeyConditionExpression=E.join(" AND ")}if(d.filterConditions&&d.filterConditions.length>0){let E=[];for(let V of d.filterConditions){let G=`#flt${D}`;if(h.ExpressionAttributeNames[G]=V.attribute,V.operator==="attribute_exists")E.push(`attribute_exists(${G})`);else if(V.operator==="attribute_not_exists")E.push(`attribute_not_exists(${G})`);else if(V.operator==="begins_with"||V.operator==="contains"){let ke=`:fltval${D}`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.value}).v,E.push(`${V.operator}(${G}, ${ke})`)}else if(V.operator==="BETWEEN"){let ke=`:fltval${D}a`,Qe=`:fltval${D}b`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.values?.[0]}).v,h.ExpressionAttributeValues[Qe]=this.driver.marshall({v:V.values?.[1]}).v,E.push(`${G} BETWEEN ${ke} AND ${Qe}`)}else if(V.operator==="IN"){let ke=(V.values??[]).map((Qe,Be)=>`:fltval${D}_${Be}`);V.values?.forEach((Qe,Be)=>{h.ExpressionAttributeValues[`:fltval${D}_${Be}`]=this.driver.marshall({v:Qe}).v}),E.push(`${G} IN (${ke.join(", ")})`)}else{let ke=`:fltval${D}`;h.ExpressionAttributeValues[ke]=this.driver.marshall({v:V.value}).v,E.push(`${G} ${V.operator} ${ke}`)}D++}h.FilterExpression=E.join(" AND ")}if(d.projectionAttributes&&d.projectionAttributes.length>0){let E=[];for(let V of d.projectionAttributes){let G=`#proj${D}`;h.ExpressionAttributeNames[G]=V,E.push(G),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 rn(d){return new T(d)}function sn(d){return new m(d)}function an(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 Ze{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((Qe)=>Qe.name===h);if(!V)throw Error(`GSI not found: ${h} for entity ${d}`);let G=this.interpolatePattern(V.pkPattern,D),ke=V.skPattern?this.interpolatePattern(V.skPattern,D):void 0;return{pk:G,sk:ke}}createItem(d,h){let{pk:D,sk:E}=this.buildKey(d,h),V=this.entities.get(d),G={[this.pkAttribute]:D,[this.skAttribute]:E,[this.typeAttribute]:d,...h};if(V.indexes)for(let ke of V.indexes){let Qe=this.buildGSIKey(d,ke.name,h),Be=this.config.indexes?.find((je)=>je.name===ke.name);if(Be){if(G[Be.pkAttribute]=Qe.pk,Be.skAttribute&&Qe.sk)G[Be.skAttribute]=Qe.sk}}return G}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,...G}=d;return{type:h,data:G}}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 et{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 G=await V.update();if(!G)return;return this.manager.parseItem(G)?.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 tt(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 tt{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 nt(d){return new Ze(d)}function rt(d,h,D){return new et(d,h,D)}var on={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 it(d,h){let D={};for(let[E,V]of Object.entries(d))if(V)D[E]=V.replace(/\{([^}]+)\}/g,(G,ke)=>h[ke]!==void 0?String(h[ke]):`{${ke}}`);return D}async function Mt(d){return{models:new Map}}function ln(d){return d}function cn(d){return d}function un(d){return d}function dn(d){return d}class st{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=nt(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 Mt({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 rt(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=it(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=it(D.keyPatterns,h),{pk:V,sk:G}=E,ke={[this.config.pkAttribute]:V,[this.config.skAttribute]:G,[this.config.entityTypeAttribute]:D.name,...h};if(D.hasTimestamps){let Qe=new Date().toISOString();if(!ke.createdAt)ke.createdAt=Qe;ke.updatedAt=Qe}if(D.hasVersioning){if(!ke._v)ke._v=1}return ke}parseItem(d){let h=d[this.config.entityTypeAttribute];if(!h)return;let{[this.config.pkAttribute]:D,[this.config.skAttribute]:E,[this.config.entityTypeAttribute]:V,...G}=d;return{type:h,data:G}}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),G=this.parseRelationships(d,D),ke={pk:`${h}${E}{${D}}`,sk:`${h}${E}{${D}}`,...this.deriveGSIKeyPatterns(h,D,E,G)},Qe=this.deriveAccessPatterns(d.name,h,D,G);return{name:d.name,entityType:h,primaryKey:D,attributes:V,relationships:G,keyPatterns:ke,accessPatterns:Qe,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 G=typeof V==="string"?V:V?.model;if(!G)continue;let ke=[d.name,G].sort();D.push({type:"belongsToMany",relatedModel:G,foreignKey:`${d.name.toLowerCase()}Id`,localKey:h,pivotEntity:ke.join(""),requiresGsi:!0})}}return D}deriveGSIKeyPatterns(d,h,D,E){let V={},G=1;for(let ke of E)if(ke.requiresGsi&&G<=5)V[`gsi${G}pk`]=`${ke.relatedModel.toUpperCase()}${D}{${ke.foreignKey}}`,V[`gsi${G}sk`]=`${d}${D}{${h}}`,ke.gsiIndex=G,G++;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 G of E){if(G.type==="hasMany")V.push({name:`Get ${G.relatedModel}s for ${d}`,description:`Query ${G.relatedModel}s related to a ${d}`,entityType:h,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${h}#123`,exampleSk:`${G.relatedModel.toUpperCase()}#`,efficient:!0});if(G.gsiIndex){let ke=`GSI${G.gsiIndex}`;V.push({name:`Get ${d}s by ${G.relatedModel}`,description:`Query ${d}s by their related ${G.relatedModel}`,entityType:h,operation:"query",index:ke,keyCondition:`gsi${G.gsiIndex}pk = :pk`,examplePk:`${G.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 fn(d){return new st(d)}function mn(d){return d.accessPatterns}function hn(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,G=p(V),ke=V.attributes??{},Qe={};for(let Be of Object.keys(ke))Qe[Be]=void 0;h[G]={columns:Qe,primaryKey:V.primaryKey??"id"}}return h}import{readdirSync as ba}from"fs";import{basename as Is,extname as vs,isAbsolute as Sa,join as Ps}from"path";import wa from"process";var Da=new Set([".ts",".mts",".cts",".js",".mjs",".cjs"]);function Ea(d){let h=vs(d);if(!Da.has(h))return!1;let D=Is(d,h);if(D.startsWith("_")||D==="index")return!1;return!D.endsWith(".d")}function $a(d){if(!d||typeof d!=="object")return!1;let h=d;return typeof h.name==="string"||typeof h.table==="string"}function _s(d){let h=[],D=ba(d,{withFileTypes:!0}).sort((E,V)=>E.name.localeCompare(V.name));for(let E of D){let V=Ps(d,E.name);if(E.isDirectory()){h.push(..._s(V));continue}if(Ea(E.name))h.push(V)}return h}async function u(d){let h=d.cwd??wa.cwd(),D=Sa(d.modelsDir)?d.modelsDir:Ps(h,d.modelsDir),E={};for(let V of _s(D)){let G=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,ke=await import(`${V}${G}`),Qe=ke.default??ke,Be=Qe.definition??Qe.getDefinition?.()??Qe;if(!$a(Be))continue;let je=Be.name??Is(V,vs(V));E[je]={...Be,name:je}}return E}function at(d){let h={},D={},E={},V={},G={},ke={};for(let Qe of Object.keys(d)){let Be=d[Qe],je=Be.definition??Be.getDefinition?.()??Be,gt=p(je);h[Qe]=gt,D[gt]=Qe,E[gt]=je.primaryKey??"id";let pt=[];for(let[Zt,En]of Object.entries(je.attributes??{}))if(/^(?:datetime|timestamp|timestamptz|date)$/i.test(String(En?.type??"")))pt.push(Zt);let $t=je.traits??{};if($t.useTimestamps??$t.timestampable)pt.push("created_at","updated_at");if(pt.length>0)ke[gt]=[...new Set(pt)];let Ct=(Zt)=>{if(!Zt)return{};let En={};if(Array.isArray(Zt)){for(let Dn of Zt){let Fe=Ne(Dn);if(Fe)En[Fe.model]=Fe.model}return En}if(typeof Zt==="object"){for(let[Dn,Fe]of Object.entries(Zt)){let Le=Ne(Fe);if(Le)En[Dn]=Le.model}return En}return{}},Yt=(Zt)=>{if(!Zt)return{};if(Array.isArray(Zt)){let En={};for(let Dn of Zt)if(typeof Dn==="string")En[Dn]=Dn;else if(Dn&&typeof Dn==="object"&&typeof Dn.model==="string")En[Dn.model]=Dn;return En}return Zt},Et=(Zt)=>{if(!Zt)return{};return Zt};if(V[gt]={hasOne:Ct(je.hasOne),hasMany:Ct(je.hasMany),belongsTo:Ct(je.belongsTo),belongsToMany:Yt(je.belongsToMany),hasOneThrough:Et(je.hasOneThrough),hasManyThrough:Et(je.hasManyThrough),morphOne:Ct(je.morphOne),morphMany:Ct(je.morphMany),morphTo:je.morphTo,morphToMany:Ct(je.morphToMany),morphedByMany:Ct(je.morphedByMany)},je.scopes&&typeof je.scopes==="object"){G[gt]={};for(let Zt of Object.keys(je.scopes)){let En=je.scopes[Zt];if(typeof En==="function")G[gt][Zt]=En}}}return{modelToTable:h,tableToModel:D,primaryKeys:E,relations:V,scopes:G,models:d,temporalColumns:ke}}import{existsSync as ss,mkdirSync as Ra,readdirSync as xa,readFileSync as ka,writeFileSync as Na}from"fs";import{dirname as qs,join as Qr}from"path";import Qs from"process";function Un(d){if(e.verbose)console.log(d)}function ur(d){return d.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function es(d){return y(e.relations?.singularizeStrategy)(d)}var Ar=0,or=0,cr=0,jr=!0,Wr=[],Tr=null;function ot(){return[...Wr]}function Ba(d){let h=d;while(h!==qs(h)){if(ss(Qr(h,"package.json")))return h;h=qs(h)}return Qs.cwd()}function Aa(){let d=Ba(Qs.cwd()),h=ar(d,e.migrationDir);if(!ss(h))Ra(h,{recursive:!0}),Un(`-- Created SQL directory: ${h}`);return h}var lt="-- qb:generated";function ct(d){return d.trimStart().startsWith(lt)}function ut(d){return d.split(`
|
|
370
|
-
`).filter((h)=>!h.trimStart().startsWith("--")).join(`
|
|
371
|
-
`).replace(/\s+/g," ").trim().replace(/;+$/,"")}function Oa(d){let h=new Set,D;try{D=xa(d).filter((E)=>E.endsWith(".sql"))}catch{return h}for(let E of D)try{h.add(ut(ka(Qr(d,E),"utf8")))}catch{}return h}function js(d,h){if(!d)return!1;let D=Aa();if(Tr===null)Tr=Oa(D);let E=ut(d);if(E.length>0&&Tr.has(E))return Un(`-- Migration already in the corpus, not writing it again: ${h}`),!1;Ar++;let V=jr?String(Ar).padStart(10,"0"):String(Math.floor(Date.now()/1000)+Ar),G=`${V}-${h}.sql`;if(!jr){let Qe=Number(V);while(ss(Qr(D,G)))Qe+=1,V=String(Qe),G=`${V}-${h}.sql`}let ke=Qr(D,G);return Na(ke,`${lt}
|
|
372
|
-
${d}`),Un(`-- Migration file created: ${G}`),or++,Wr.push(G),Tr?.add(E),!0}function Nt(d,h){return d==="integer"&&h==="bigint"||d==="string"&&h==="text"}function Ls(d){if(d.endsWith("_id"))return"bigint";if(d.endsWith("_at"))return"datetime";if(d.startsWith("is_")||d.startsWith("has_"))return"boolean";return}function Ks(d){if(typeof d==="string"||typeof d==="number"||typeof d==="boolean"||typeof d==="bigint"||d instanceof Date)return d;return}function Ma(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 ns(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 rs=767;function Ca(d){if(!d||typeof d!=="object")return;let h=d;if(h.name)switch(String(h.name).toLowerCase()){case"string":{let E=ns(h);return E&&E>rs?"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 Ia(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=at(d),E=[];for(let Qe of Object.keys(d)){let Be=d[Qe],je=p(Be),gt=Be.primaryKey??"id",pt=Be.autoIncrement!==!1,$t=Be.attributes??{},Ct=[],Yt=[];if(!$t[gt])Ct.push({name:ur(gt),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});let Et=new Map,Zt=M(Be.belongsTo).length>0,En=new Set(Object.keys($t).map((vt)=>ur(vt))),Dn=new Set;for(let vt of En){if(!vt.endsWith("_type"))continue;let xt=`${vt.slice(0,-5)}_id`;if(En.has(xt))Dn.add(xt)}for(let vt of M(Be.belongsTo)){let xt=vt.foreignKey??`${ur(vt.model)}_id`,Tt=D.modelToTable[vt.model];if(Tt)Et.set(xt,{table:Tt,onDelete:vt.onDelete})}for(let vt of Object.keys($t)){let xt=$t[vt],Tt=ur(vt),Vt=Boolean(xt.validation?.rule?.isRequired),St=vt===gt?!1:xt.nullable??!(xt.required??Vt),yt,qt,Lt=vt===gt;if(yt=Ia(xt.type)??Ca(xt.validation?.rule),yt==="string"){let jt=ns(xt.validation?.rule);if(jt&&jt>rs)yt="text"}if(!yt||yt==="enum"){let jt=Ma(xt.validation?.rule);if(jt&&jt.length>0)yt="enum",qt=jt}if(!yt)yt=Ls(Tt);if(!yt){let jt=Ks(xt.default);if(typeof jt==="string")yt=jt.length>255?"text":"string";else if(typeof jt==="number")yt=Number.isInteger(jt)?"integer":"float";else if(typeof jt==="boolean")yt="boolean";else if(typeof jt==="bigint")yt="bigint";else if(jt instanceof Date)yt="datetime"}if(!yt)yt=Lt?"bigint":"string";let Ht=yt==="string"?ns(xt.validation?.rule):void 0,en={name:Tt,type:yt,isPrimaryKey:Lt,isUnique:Boolean(xt.unique),isNullable:St,hasDefault:typeof xt.default<"u",defaultValue:Ks(xt.default),enumValues:qt,maxLength:typeof Ht==="number"&&Ht>0&&Ht<=rs?Ht:void 0};if(Tt.endsWith("_id")&&xt.foreignKey!==!1&&!Dn.has(Tt))if(typeof xt.foreignKey==="object"&&xt.foreignKey!==null){let jt=xt.foreignKey;if(en.references={table:jt.table,column:jt.column??"id",onDelete:jt.onDelete,onUpdate:jt.onUpdate},jt.nullable!==void 0)en.isNullable=jt.nullable}else{let jt=Et.get(Tt),Kt=Tt.replace(/_id$/,"").replace(/(^|_)([a-z])/g,(wn,xn,On)=>On.toUpperCase()),Xt=jt?.table??(Zt?void 0:D.modelToTable[Kt]);if(Xt){let wn=D.primaryKeys[Xt]??"id";en.references={table:Xt,column:wn,onDelete:jt?.onDelete}}}Ct.push(en)}let Fe=M(Be.belongsTo);for(let vt of Fe){let xt=vt.foreignKey??`${ur(vt.model)}_id`;if(Ct.some((St)=>St.name===xt))continue;let Tt=D.modelToTable[vt.model],Vt=Tt?D.primaryKeys[Tt]??"id":void 0;Ct.push({name:xt,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:Tt&&Vt&&!Dn.has(xt)?{table:Tt,column:Vt,onDelete:vt.onDelete}:void 0})}let Le=Be.traits;if(Le?.useTimestamps??Le?.timestampable??!1){if(!Ct.some((vt)=>vt.name==="created_at"))Ct.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g});if(!Ct.some((vt)=>vt.name==="updated_at"))Ct.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Le?.useSoftDeletes??Le?.softDeletable??!1){if(!Ct.some((vt)=>vt.name==="deleted_at"))Ct.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(Le?.useUuid??!1){if(!Ct.some((vt)=>vt.name==="uuid"))Ct.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let vt of Be.indexes??[])Yt.push({name:vt.name,columns:vt.columns.map((xt)=>ur(xt)),type:vt.unique?"unique":"index",where:vt.where});for(let vt of Ct)if(vt.isUnique&&!vt.isPrimaryKey)Yt.push({name:`${je}_${vt.name}_unique`,columns:[vt.name],type:"unique"});let He=Array.isArray(Be.shardKey)?Be.shardKey.map(ur):void 0,Jt=Array.isArray(Be.sortKey)?Be.sortKey.map(ur):void 0,It=Be.tableKind;E.push({table:je,columns:Ct,indexes:Yt,shardKey:He,sortKey:Jt,tableKind:It})}let V=new Set(E.map((Qe)=>Qe.table));function G(Qe){if(!V.has(Qe.table))V.add(Qe.table),E.push(Qe)}for(let Qe of Object.keys(d)){let Be=d[Qe],je=Be?.traits??{},gt=p(Be),pt=es(gt);if(je.likeable){let $t=typeof je.likeable==="object"?je.likeable:{},Ct=$t.table||`${gt}_likes`,Yt=$t.foreignKey||`${pt}_id`;G({table:Ct,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:Yt,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:`${Ct}_user_target_unique`,columns:["user_id",Yt],type:"unique"}]})}if(je.taggable)G({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"}]}),G({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(je.categorizable)G({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"}]}),G({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 Qe of Object.keys(d)){let Be=d[Qe],je=Be?.belongsToMany;if(!je||typeof je!=="object"||Array.isArray(je))continue;let gt=p(Be),pt=es(gt);for(let[$t,Ct]of Object.entries(je)){let Yt=Ct;if(!Yt||typeof Yt!=="object")continue;if(Yt.through)continue;let Et=Yt.pivot;if(!Et||!Et.columns&&!Et.timestamps&&!Et.uniques)continue;let Zt=Yt.model,Dn=d[Zt]?.table||`${String(Zt).toLowerCase()}s`,Fe=es(Dn),Le=Yt.table||[pt,Fe].sort().join("_"),qe=Yt.foreignKey||`${pt}_id`,Ke=Yt.relatedKey||`${Fe}_id`,Dt=new Set([qe,Ke,...Object.keys(Et.columns??{})]),He=new Set;for(let Tt of Dt){if(!Tt.endsWith("_type"))continue;let Vt=`${Tt.slice(0,-5)}_id`;if(Dt.has(Vt))He.add(Vt)}let Jt=(Tt,Vt)=>He.has(Tt)?void 0:{table:Vt,column:"id"},It=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:qe,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Jt(qe,gt)},{name:Ke,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:Jt(Ke,Dn)}];if(Et.columns)for(let[Tt,Vt]of Object.entries(Et.columns)){let St=Vt,yt=Ls(Tt)??"string";It.push({name:Tt,type:yt,isPrimaryKey:!1,isUnique:!1,isNullable:St?.nullable??!1,hasDefault:St?.default!==void 0,defaultValue:St?.default})}if(Et.timestamps)It.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:g}),It.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let vt=[],xt=Et.uniques&&Et.uniques.length>0?Et.uniques:[[qe,Ke]];for(let Tt=0;Tt<xt.length;Tt++){let Vt=xt[Tt];vt.push({name:`${Le}_${Vt.join("_")}_unique${Tt>0?`_${Tt}`:""}`,columns:[...Vt],type:"unique"})}G({table:Le,columns:It,indexes:vt})}}let ke=new Map(E.map((Qe)=>[Qe.table,Qe]));for(let Qe of E)for(let Be of Qe.columns){if(!Be.references)continue;let je=ke.get(Be.references.table)?.columns.find((gt)=>gt.name===Be.references.column);if(!je||Be.type===je.type)continue;Be.type=je.type,Be.maxLength=je.maxLength,Be.enumValues=je.enumValues,Be.enumTypeName=je.enumTypeName}return{dialect:h.dialect,vitessSharded:h.vitessSharded,tables:E}}function Ee(d,h={}){Ar=0,or=0,cr=0,Wr=[],Tr=null,jr=!0;let D=h.dryRun?()=>!1:js,E=[],V=f(d.dialect,{vitessSharded:d.vitessSharded}),{tables:G,deferredForeignKeys:ke}=Ws(d.tables,d.dialect);for(let[Be,je]of G.entries()){let gt={...je,columns:je.columns.map((Et)=>ke.has(br(je.table,Et.name))?{...Et,references:void 0}:Et)},pt=[],$t=new Set;for(let Et of gt.columns)if(Et.type==="enum"&&Et.enumValues&&Et.enumValues.length>0){let Zt=`${gt.table}_${Et.name}_type`;if(Et.enumTypeName=Zt,!$t.has(Zt)){let En=V.createEnumType(Zt,Et.enumValues);if(En)pt.push(En);$t.add(Zt)}}let Ct=V.createTable(gt);pt.push(Ct);for(let Et of gt.indexes)pt.push(V.createIndex(gt.table,Et,gt.columns));if(Be===G.length-1)for(let Et of G)for(let Zt of Et.columns){if(!Zt.references||!ke.has(br(Et.table,Zt.name)))continue;let En=V.addForeignKey(Et.table,Zt.name,Zt.references.table,Zt.references.column,Zt.references.onDelete,Zt.references.onUpdate);if(En)pt.push(En)}E.push(...pt);let Yt=pt.join(`
|
|
373
|
-
|
|
374
|
-
`);D(Yt,`create-${gt.table}-table`)}if(or+cr===0)Un("-- Nothing to migrate");else{let Be=[];if(or>0)Be.push(`${or} created`);if(cr>0)Be.push(`${cr} updated`);Un(`-- Migration files: ${Be.join(", ")}`)}return E}function br(d,h){return`${d}\x00${h}`}function Ws(d,h){if(h==="sqlite"||d.length<2)return{tables:d,deferredForeignKeys:new Set};let D=new Map(d.map((Be)=>[Be.table,Be])),E=new Map;for(let Be of d)E.set(Be.table,new Set(Be.columns.map((je)=>je.references?.table).filter((je)=>Boolean(je&&je!==Be.table&&D.has(je)))));let V=[],G=new Set;while(V.length<d.length){let Be=d.find((je)=>!G.has(je.table)&&[...E.get(je.table)??[]].every((gt)=>G.has(gt)));if(!Be)break;V.push(Be),G.add(Be.table)}let ke=new Set(d.filter((Be)=>!G.has(Be.table)).map((Be)=>Be.table)),Qe=new Set;for(let Be of d){if(!ke.has(Be.table))continue;for(let je of Be.columns)if(je.references&&ke.has(je.references.table)&&je.references.table!==Be.table)Qe.add(br(Be.table,je.name))}return V.push(...d.filter((Be)=>ke.has(Be.table))),{tables:V,deferredForeignKeys:Qe}}function gn(d){return Ee(d).join(`
|
|
375
|
-
`)}function pn(d,h){return Bt(d,h).join(`
|
|
376
|
-
`)}function dt(d){let h=mi("crypto");function D(V){if(V==null||typeof V!=="object"||V instanceof Date)return V;if(Array.isArray(V))return V.map((ke)=>D(ke));let G={};for(let ke of Object.keys(V).sort())G[ke]=D(V[ke]);return G}let E=JSON.stringify(D(d));return h.createHash("sha256").update(E).digest("hex")}function Fs(d){let h={};for(let D of d)h[D.table]=D;return h}function Br(d){let h={};for(let D of d)h[D.name]=D;return h}function Oe(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 _e(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 va(d,h,D){if(Oe(d,D)!==Oe(h,D))return!0;if(d.isNullable!==h.isNullable)return!0;if(d.hasDefault!==h.hasDefault)return!0;if(_e(d,D)!==_e(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 Us(d,h){return JSON.stringify([Oe(d,h),d.isPrimaryKey,d.isUnique,d.isNullable,d.hasDefault,_e(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 Pa(d,h,D){let E=Object.keys(d).filter((gt)=>!h[gt]),V=Object.keys(h).filter((gt)=>!d[gt]),G=new Map,ke=new Map;for(let gt of E){let pt=Us(d[gt],D),$t=G.get(pt)??[];$t.push(gt),G.set(pt,$t)}for(let gt of V){let pt=Us(h[gt],D),$t=ke.get(pt)??[];$t.push(gt),ke.set(pt,$t)}let Qe=[],Be=new Set,je=new Set;for(let[gt,pt]of G){let $t=ke.get(gt);if(pt.length===1&&$t&&$t.length===1)Qe.push({from:pt[0],to:$t[0]}),Be.add(pt[0]),je.add($t[0])}return{renames:Qe,removed:E.filter((gt)=>!Be.has(gt)),added:V.filter((gt)=>!je.has(gt))}}function _a(d){if(!d?.references||!d.hasDefault)return!1;let h=d.defaultValue;return h!==void 0&&h!==null&&String(h).toUpperCase()!=="NULL"}function qa(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 La(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 Vs(d,h){return`${d.type}:${zn(h,d.name)}:${d.columns.join(",")}`}function ts(d,h){let D={};for(let E of d)D[Vs(E,h)]=E;return D}function Ie(d,h,D={}){if(!d||d.dialect!==h.dialect){let Dn=Ee(h,{dryRun:D.dryRun}),Fe=h.tables.map((Le)=>({kind:"create_table",table:Le.table,destructive:!1,sql:""}));return{statements:Dn,operations:Fe}}let E=D.applyRenames!==!1,V=D.preserveUnknownColumns===!0,G=D.dryRun?()=>!1:js;Ar=0,or=0,cr=0,Wr=[],Tr=null,jr=!1;let ke=[],Qe=[],Be=f(h.dialect,{vitessSharded:h.vitessSharded}),je=h.dialect,gt=Fs(d.tables),pt=Fs(h.tables);for(let Dn of Object.keys(gt))if(!pt[Dn]){let Fe=Be.dropTable(Dn);ke.push(Fe),Qe.push({kind:"drop_table",table:Dn,destructive:!0,sql:Fe}),G(Fe,`drop-${Dn}-table`),Un(`-- Detected dropped table: ${Dn}`)}let $t=Object.keys(pt).filter((Dn)=>!gt[Dn]).map((Dn)=>pt[Dn]),{tables:Ct,deferredForeignKeys:Yt}=Ws($t,je);for(let[Dn,Fe]of Ct.entries()){let Le={...Fe,columns:Fe.columns.map((Jt)=>Yt.has(br(Fe.table,Jt.name))?{...Jt,references:void 0}:Jt)},qe=[],Ke=new Set;for(let Jt of Le.columns)if(Jt.type==="enum"&&Jt.enumValues&&Jt.enumValues.length>0){let It=`${Le.table}_${Jt.name}_type`;if(Jt.enumTypeName=It,!Ke.has(It)){let vt=Be.createEnumType(It,Jt.enumValues);if(vt)qe.push(vt);Ke.add(It)}}let Dt=Be.createTable(Le);qe.push(Dt);for(let Jt of Le.indexes){let It=Be.createIndex(Le.table,Jt,Le.columns);qe.push(It),Qe.push({kind:"create_index",table:Le.table,column:Jt.name,destructive:!1,sql:It})}for(let Jt of Fe.columns)if(Jt.references&&!Yt.has(br(Fe.table,Jt.name)))Qe.push({kind:"add_foreign_key",table:Fe.table,column:Jt.name,destructive:!1,sql:Dt});if(Dn===Ct.length-1)for(let Jt of Ct)for(let It of Jt.columns){if(!It.references||!Yt.has(br(Jt.table,It.name)))continue;let vt=Be.addForeignKey(Jt.table,It.name,It.references.table,It.references.column,It.references.onDelete,It.references.onUpdate);if(!vt)continue;qe.push(vt),Qe.push({kind:"add_foreign_key",table:Jt.table,column:It.name,destructive:!1,sql:vt})}ke.push(...qe),Qe.push({kind:"create_table",table:Le.table,destructive:!1,sql:Dt});let He=qe.join(`
|
|
377
|
-
|
|
378
|
-
`);G(He,`create-${Le.table}-table`)}let Et=new Set;for(let Dn of Object.keys(pt)){let Fe=gt[Dn],Le=pt[Dn];if(!Fe)continue;let qe=Br(Fe.columns),Ke=Br(Le.columns);for(let Dt of Object.keys(Ke)){let He=Ke[Dt];if(He.type!=="enum"||!He.enumValues||He.enumValues.length===0)continue;let Jt=`${Le.table}_${He.name}_type`;if(He.enumTypeName=Jt,qe[Dt])continue;if(!Et.has(Jt)){let It=Be.createEnumType(Jt,He.enumValues);if(It)ke.push(It),Qe.push({kind:"create_enum",table:Le.table,column:He.name,destructive:!1,sql:It}),G(It,`create-${Jt}-enum`);Et.add(Jt)}}}for(let Dn of Object.keys(pt)){let Fe=gt[Dn],Le=pt[Dn];if(!Fe)continue;let qe=Br(Fe.columns),Ke=ts(Fe.indexes,Fe.table),Dt=Br(Le.columns),He=ts(Le.indexes,Le.table),Jt=[],It=Object.keys(qe).filter((yt)=>!Dt[yt]),vt=Object.keys(Dt).filter((yt)=>!qe[yt]);if(E&&!V){let yt=Pa(qe,Dt,je);Jt=yt.renames,It=yt.removed,vt=yt.added}if(V){let yt=It.map((Lt)=>qe[Lt]),qt=Fe.indexes.filter((Lt)=>!He[Vs(Lt,Fe.table)]);if(yt.length>0||qt.length>0){if(yt.length>0)Un(`-- Keeping ${yt.length} column(s) on "${Le.table}" no model declares: ${It.join(", ")} \u2014 reconciled from the database, where an undeclared column is out of scope rather than removed`);if(qt.length>0)Un(`-- Keeping ${qt.length} index(es) on "${Le.table}" no model declares: ${qt.map((Lt)=>Lt.name).join(", ")} \u2014 reconciled from the database, where an undeclared index is out of scope rather than removed`);Le={...Le,columns:[...Le.columns,...yt],indexes:[...Le.indexes,...qt]},Dt=Br(Le.columns),He=ts(Le.indexes,Le.table)}It=[]}let xt=Object.keys(Dt).filter((yt)=>qe[yt]&&va(qe[yt],Dt[yt],je)),Tt=Object.keys(Dt).filter((yt)=>qe[yt]&&La(qe[yt].references,Dt[yt].references));if(je==="sqlite"){if(xt.length>0||Tt.length>0||It.some((qt)=>qa(Fe,qt))||vt.some((qt)=>_a(Dt[qt]))){let qt={},Lt=new Map(Jt.map((Kt)=>[Kt.to,Kt.from]));for(let Kt of Le.columns)if(qe[Kt.name])qt[Kt.name]=Kt.name;else if(Lt.has(Kt.name))qt[Kt.name]=Lt.get(Kt.name);let Ht=`_qb_tmp_${Le.table}`,en=0;while((gt[Ht]||pt[Ht])&&en<100)en+=1,Ht=`_qb_tmp_${Le.table}_${en}`;let jt=Be.rebuildTable({target:Le,tempName:Ht,columnSource:qt});ke.push(jt);let Tn=xt.some((Kt)=>qe[Kt].type!==Dt[Kt].type);Qe.push({kind:"rebuild_table",table:Le.table,destructive:It.length>0||Tn,sql:jt});for(let Kt of Jt)Qe.push({kind:"rename_column",table:Le.table,from:Kt.from,to:Kt.to,destructive:!1,confidence:"high",sql:jt});for(let Kt of It)Qe.push({kind:"drop_column",table:Le.table,column:Kt,destructive:!0,sql:jt});Un(`-- Detected SQLite table rebuild required: ${Le.table}`),G(jt,`alter-${Le.table}-table`);continue}}let Vt=[],St=!1;for(let yt of Object.keys(Ke))if(!He[yt]){let qt=Ke[yt],Lt=Be.dropIndex(Le.table,qt.name);Vt.push(Lt),ke.push(Lt),Qe.push({kind:"drop_index",table:Le.table,column:qt.name,destructive:!1,sql:Lt}),Un(`-- Detected dropped index: ${qt.name} from ${Le.table}`),St=!0}for(let yt of Jt){let qt=Be.renameColumn(Le.table,yt.from,yt.to);Vt.push(qt),ke.push(qt),Qe.push({kind:"rename_column",table:Le.table,from:yt.from,to:yt.to,destructive:!1,confidence:"high",sql:qt}),Un(`-- Detected renamed column: ${Le.table}.${yt.from} -> ${yt.to}`),St=!0}for(let yt of It){let qt=Be.dropColumn(Le.table,yt);Vt.push(qt),ke.push(qt),Qe.push({kind:"drop_column",table:Le.table,column:yt,destructive:!0,sql:qt}),Un(`-- Detected dropped column: ${Le.table}.${yt}`),St=!0}for(let yt of xt){let qt=qe[yt],Lt=Dt[yt],Ht=Be.modifyColumn(Le.table,Lt);Vt.push(Ht),ke.push(Ht),Qe.push({kind:"modify_column",table:Le.table,column:yt,destructive:qt.type!==Lt.type&&!Nt(qt.type,Lt.type),sql:Ht}),Un(`-- Detected column change: ${Le.table}.${yt} (${qt.type} -> ${Lt.type})`),St=!0}for(let yt of Tt){let qt=Dt[yt];if(!qt.references)continue;let Lt=Be.addForeignKey(Le.table,qt.name,qt.references.table,qt.references.column,qt.references.onDelete,qt.references.onUpdate,qe[yt].references?.constraintNames);if(!Lt)continue;Vt.push(Lt),ke.push(Lt),Qe.push({kind:"add_foreign_key",table:Le.table,column:yt,destructive:!1,sql:Lt}),Un(`-- Detected foreign-key change: ${Le.table}.${yt} -> ${qt.references.table}(${qt.references.column})`),St=!0}for(let yt of vt){let qt=Dt[yt],Lt=Be.addColumn(Le.table,qt);if(Vt.push(Lt),ke.push(Lt),Qe.push({kind:"add_column",table:Le.table,column:qt.name,destructive:!1,sql:Lt}),Un(`-- Detected new column: ${Le.table}.${qt.name}`),St=!0,qt.references){let Ht=Be.addForeignKey(Le.table,qt.name,qt.references.table,qt.references.column,qt.references.onDelete,qt.references.onUpdate);if(Ht)Vt.push(Ht),ke.push(Ht),Qe.push({kind:"add_foreign_key",table:Le.table,column:qt.name,destructive:!1,sql:Ht})}}for(let yt of Object.keys(He))if(!Ke[yt]){let qt=He[yt],Lt=Be.createIndex(Le.table,qt,Le.columns);Vt.push(Lt),ke.push(Lt),Qe.push({kind:"create_index",table:Le.table,column:qt.name,destructive:!1,sql:Lt}),Un(`-- Detected new index: ${qt.name} in ${Le.table}`),St=!0}if(St){let yt=Vt.join(`
|
|
379
|
-
|
|
380
|
-
`);G(yt,`alter-${Le.table}-table`)}}if(or+cr===0)Un("-- Nothing to migrate");else{let Dn=[];if(or>0)Dn.push(`${or} created`);if(cr>0)Dn.push(`${cr} updated`);Un(`-- Migration files: ${Dn.join(", ")}`)}return{statements:ke.length===0?["-- No changes detected"]:ke,operations:Qe}}function Bt(d,h,D={}){return Ie(d,h,D).statements}function yn(d){return d}class Pt{get order(){return 100}get description(){return}}function bn(d){return d}function ft(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 mt(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 ht(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 Ot(d,h={}){let D=h.dialect??e.dialect,E=d.tables.map((je)=>je.table),V=await v({tables:E}),G=new Map(V.map((je)=>[je.table.toLowerCase(),je])),ke=[],Qe=[],Be=[];for(let je of d.tables){let gt=G.get(je.table.toLowerCase());if(!gt){ke.push(je.table);continue}let pt=new Map(gt.columns.map(($t)=>[$t.name.toLowerCase(),$t]));for(let $t of je.columns){let Ct=pt.get($t.name.toLowerCase()),Yt=ft($t.type);if(!Ct){Qe.push({table:je.table,column:$t.name,expected:Yt});continue}let Et=mt(Ct.sqlType);if(!ht(Yt,Et,D))Be.push({table:je.table,column:$t.name,expected:Yt,actual:Et,actualSqlType:Ct.sqlType})}}return{missingTables:ke,missingColumns:Qe,typeMismatches:Be,clean:ke.length===0&&Qe.length===0&&Be.length===0}}function _t(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 Qa(d,h,D){if(D.length===0)return;let E=ni(gr());try{await ri(d,h);for(let V of D)await Vr(d,V,h),Rn(`-- \u2713 Recorded applied migration: ${V}`)}catch(V){Rn(`-- Could not record applied migrations (the schema change itself succeeded): ${V instanceof Error?V.message:String(V)}`)}}function Zs(d){try{return ct(Or(d,"utf8"))}catch{return!1}}function ja(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 Rn(d){if(e.verbose)console.log(d)}function ei(d){return Jn(d,e.snapshotDir||".qb")}function os(d,h){return Jn(ei(d),`model-snapshot.${h}.json`)}function Wa(d,h){let D=os(d,h);if(!rr(D))return;try{let E=Or(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;Rn("-- Invalid snapshot format, treating as no previous state");return}catch(E){Rn(`-- Could not load snapshot, treating as no previous state: ${E instanceof Error?E.message:String(E)}`);return}}function ti(d,h,D){let E=os(d,h),V=ei(d),G=dt(D);if(rr(E))try{let Qe=JSON.parse(Or(E,"utf8"));if(Qe?.hash===G&&Qe?.dialect===h&&Qe?.plan){Rn("-- Model snapshot unchanged");return}}catch{}if(!rr(V))Ys(V,{recursive:!0}),Rn(`-- Created snapshot directory: ${V}`);let ke={plan:D,hash:G,dialect:h,updatedAt:new Date().toISOString()};Xs(E,JSON.stringify(ke,null,2)),Rn(`-- Model snapshot saved to ${E}`)}function Xe(d,h={}){let D=h.dialect??d.dialect;ti(h.workspaceRoot??gr(),D,d)}function gr(){return Xr()}function ni(d){let h=ar(d,e.migrationDir);if(!rr(h))Ys(h,{recursive:!0}),Rn(`-- Created SQL directory: ${h}`);return h}async function b(d,h={}){if(await Q(),!d)d=Jn(as.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=gr(),V=await u({modelsDir:d}),G=W(V,{dialect:D,vitessSharded:h.vitessSharded}),ke,Qe=!1;if(!h.full)if(ke=Wa(E,D),ke)Rn("-- Comparing with stored model snapshot");else{let Ct=Jn(d,`.qb-migrations.${D}.json`),Yt=String(h.state||Ct);if(rr(Yt))try{let Et=Or(Yt,"utf8"),Zt=JSON.parse(Et);if(ke=Zt?.plan&&Zt.plan.tables?Zt.plan:Zt?.tables?Zt:void 0,ke)Rn("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!ke||h.fromDb)try{let Et=await bs(D),Zt=new Set(G.tables.map((Dn)=>Dn.table)),En=Et.tables.filter((Dn)=>Zt.has(Dn.table));if(En.length>0)ke={dialect:Et.dialect,tables:En},Qe=!0,Rn(`-- No snapshot; reconciling against live database (${En.length} matching table${En.length===1?"":"s"})`)}catch(Et){Rn(`-- Could not introspect live database, treating as no previous state: ${Et instanceof Error?Et.message:String(Et)}`)}if(!ke)Rn("-- No previous snapshot found, generating full migration")}else Rn("-- Full migration requested, ignoring any previous state");let Be=h.full?{statements:Ee(G,{dryRun:h.dryRun}),operations:G.tables.map((Ct)=>({kind:"create_table",table:Ct.table,destructive:!1,sql:""}))}:Ie(ke,G,{applyRenames:h.applyRenames,dryRun:h.dryRun,preserveUnknownColumns:Qe}),{statements:je,operations:gt}=Be,pt=je.join(`
|
|
382
|
-
`),$t=je.some((Ct)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(Ct));if(h.apply){let Ct=Ka(Jn(Fa(),"qb-migrate-")),Yt=Jn(Ct,"migration.sql");try{if($t){Xs(Yt,pt);let Et=i();await Et.file(Yt),Rn("-- Migration applied"),await Qa(Et,D,ot())}else Rn("-- No changes; nothing to apply")}catch(Et){throw console.error("-- Migration failed:",Et),Et}finally{zs(Ct,{recursive:!0,force:!0})}}if(!h.dryRun)ti(E,D,G);return{sql:pt,sqlStatements:je,hasChanges:$t,plan:G,operations:gt}}function Va(d,h){if(d===void 0)return[ni(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)=>Ua(E)?E:Jn(h,E))}function Ja(d){let h=new Map;for(let D of d){if(!rr(D))throw Error(`Migration directory not found: ${D}`);for(let E of Gs(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 ${Jn(D,E)}. Migrations are recorded by file name, so names must be unique across every directory in a run.`);h.set(E,Jn(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 Js="bun-query-builder:migrate",Ha=/\bCONCURRENTLY\b|^\s*VACUUM\b|^\s*BEGIN\s*(?:;|TRANSACTION\b)|^\s*PRAGMA\s+foreign_keys\b/im;function Hs(d){return d==="postgres"||d==="sqlite"}async function Ya(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(Js),V=!0,await h()}finally{try{if(V)await E.advisoryUnlock(Js)}finally{E.release?.()}}}async function k(d){await Q();let h=gr(),D=e.dialect||"postgres",E=Ja(Va(d,h));if(E.length===0)return Rn("-- No migration files found to execute"),!0;Rn(`-- Found ${E.length} script files to execute`);try{let V=i();return await Ya(D,async()=>{await ri(V,D);let G=await Za(V,D),ke=E.filter((Qe)=>!G.includes(Qe.name));if(ke.length===0)return Rn("-- No pending migrations to execute"),!0;Rn(`-- Executing ${ke.length} migration${ke.length===1?"":"s"}`);for(let{name:Qe,path:Be}of ke){Rn(`-- Executing: ${Qe}`);try{if(Hs(D)&&!Ha.test(Or(Be,"utf-8")))await V.transaction(async(gt)=>{await gt.file(Be),await Vr(gt,Qe,D)});else if(await V.file(Be),await Vr(V,Qe,D),!Hs(D))Rn(`-- (${D} commits DDL implicitly, so ${Qe} was not applied atomically)`);else Rn(`-- (${Qe} contains a statement that cannot run in a transaction, so it was not applied atomically)`);Rn(`-- \u2713 Migration ${Qe} executed and recorded`)}catch(je){if(Zs(Be)&&ja(je)){await Vr(V,Qe,D),Rn(`-- \u2713 Migration ${Qe} was already applied; recorded it (${je instanceof Error?je.message:String(je)})`);continue}throw console.error(`-- \u2717 Migration ${Qe} failed:`,je),je}}return Rn("-- 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=Jn(as.cwd(),"app/Models");let D=h.dialect||e.dialect||"postgres",E=f(D),V=gr(),G=async(ke)=>{let Qe=E.dropTable(ke);await Ue(async(Be)=>{if(D==="sqlite")await Be.unsafe("PRAGMA foreign_keys = OFF").execute();if(D==="mysql"||D==="vitess")await Be.unsafe("SET FOREIGN_KEY_CHECKS = 0").execute();try{await Be.unsafe(Qe).execute()}finally{if(D==="sqlite")await Be.unsafe("PRAGMA foreign_keys = ON").execute();if(D==="mysql"||D==="vitess")await Be.unsafe("SET FOREIGN_KEY_CHECKS = 1").execute()}})};try{try{await G("migrations"),Rn("-- Dropped migrations table")}catch(Be){console.error(Be)}let ke=[],Qe=[];try{let Be=await u({modelsDir:d}),je=W(Be,{dialect:D});ke=je.tables.map((pt)=>pt.table);let gt=new Set;for(let pt of je.tables)for(let $t of pt.columns)if($t.type==="enum"&&$t.enumValues&&$t.enumValues.length>0){let Ct=`${pt.table}_${$t.name}_type`;gt.add(Ct)}Qe=Array.from(gt)}catch(Be){console.error(Be),ke=[],Qe=[]}if(ke.length===0)Rn("-- No tables found to drop");else{Rn(`-- Dropping ${ke.length} tables: ${ke.join(", ")}`);for(let Be of ke.reverse())try{await G(Be),Rn(`-- Dropped table: ${Be}`)}catch(je){console.error(je),Rn(`-- Table ${Be} may not exist, skipping drop`)}}if(Qe.length>0){Rn(`-- Dropping ${Qe.length} enum types: ${Qe.join(", ")}`);for(let Be of Qe)try{let je=E.dropEnumType(Be);if(je)await Ue(async(gt)=>{await gt.unsafe(je).execute(),Rn(`-- Dropped enum type: ${Be}`)})}catch(je){console.error(je),Rn(`-- Enum type ${Be} may not exist, skipping drop`)}}else Rn("-- No enum types found to drop");if(ke.length>0&&!h.preserveMigrationState)try{await Ga(d,V,h)}catch(Be){console.error(Be),Rn("-- Could not clean up migration files")}else if(ke.length===0)Rn("-- No models directory found; keeping committed migration files in place");else Rn("-- Preserving migration files and model snapshot for fresh replay");if(!h.preserveMigrationState)try{await Xa(V)}catch(Be){console.error(Be),Rn("-- Could not clear generated directory")}return Rn("-- Database reset completed successfully"),!0}catch(ke){return console.error("-- Database reset failed:",ke),!1}}async function Ga(d,h,D={}){if(!d)d=Jn(as.cwd(),"app/Models");if(!h)h=gr();let E=String(D.dialect||e.dialect||"postgres"),V=os(h,E);if(rr(V))is(V),Rn(`-- Removed model snapshot file: ${V}`);let G=Jn(d,`.qb-migrations.${E}.json`),ke=String(D.state||G);if(rr(ke))is(ke),Rn(`-- Removed legacy migration state file: ${ke}`);za(ar(h,e.migrationDir))}function za(d){if(!rr(d))return;let h=0,D=[];for(let E of Gs(d).filter((V)=>V.endsWith(".sql"))){if(!Zs(Jn(d,E))){D.push(E);continue}is(Jn(d,E)),Rn(`-- Removed generated migration file: ${E}`),h+=1}if(Rn(`-- Cleaned up ${h} generated migration file${h===1?"":"s"} from migrations directory`),D.length>0)Rn(`-- Kept ${D.length} hand-written migration${D.length===1?"":"s"}: ${D.slice(0,5).join(", ")}${D.length>5?`, +${D.length-5} more`:""}`)}async function Xa(d){if(!d)d=gr();let h=Jn(d,"generated");if(rr(h))try{zs(h,{recursive:!0,force:!0}),Rn("-- Cleared generated directory")}catch(D){console.error("-- Failed to clear generated directory:",D)}}async function ri(d,h){let E=f(h).createMigrationsTable();try{await d.unsafe(E).execute(),Rn("-- Migrations table ready")}catch(V){throw console.error("-- Failed to create migrations table:",V),V}}async function Za(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 Vr(d,h,D){let E=f(D);try{Rn(`-- Recording migration: ${h}`),await d.unsafe(E.recordMigrationQuery(),[h]).execute(),Rn(`-- Successfully recorded migration: ${h}`)}catch(V){throw console.error(`-- Failed to record migration ${h}:`,V),V}}
|
|
383
|
-
export{J,S,tn,nn,l,Rt,At,i,Ge,Je,z,Y,X,N,Z,ee,te,ne,B,re,P,O,ie,se,_,ae,oe,ze,Pe,Ye,v,le,a,ce,ue,de,fe,f,Xe,b,k,C,me,he,I,ge,L,pe,K,F,R,j,ye,be,Te,we,q,Se,De,T,m,rn,sn,an,Ze,et,tt,nt,rt,on,it,Mt,ln,cn,un,dn,st,fn,mn,hn,$e,u,at,ot,lt,ct,ut,Nt,W,Ee,gn,pn,dt,Oe,g,_e,Ie,Bt,yn,Pt,bn,ft,mt,ht,Ot,_t};
|