hysteria-orm 10.0.0 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var commander=require('commander'),z=require('fs'),_e=require('path'),os=require('fs/promises'),sqlHighlight=require('sql-highlight'),module$1=require('module'),url=require('url'),bundleRequire=require('bundle-require'),sqlFormatter=require('sql-formatter'),ae=require('crypto'),we=require('dayjs'),Fl=require('dayjs/plugin/customParseFormat.js'),Vl=require('dayjs/plugin/timezone.js'),jl=require('dayjs/plugin/utc.js');require('reflect-metadata');var rd=require('pluralize'),stream=require('stream'),Gn=require('perf_hooks');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var z__default=/*#__PURE__*/_interopDefault(z);var _e__default=/*#__PURE__*/_interopDefault(_e);var os__default=/*#__PURE__*/_interopDefault(os);var ae__default=/*#__PURE__*/_interopDefault(ae);var we__default=/*#__PURE__*/_interopDefault(we);var Fl__default=/*#__PURE__*/_interopDefault(Fl);var Vl__default=/*#__PURE__*/_interopDefault(Vl);var jl__default=/*#__PURE__*/_interopDefault(jl);var rd__default=/*#__PURE__*/_interopDefault(rd);var Gn__namespace=/*#__PURE__*/_interopNamespace(Gn);var f=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}};var X=class{constructor(t){this.options=t;}static async createDriver(t){throw new f("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var Q=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var et=class i extends X{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(e){let r=await import('mongodb').catch(()=>{throw new Q("mongodb")});if(!r)throw new Q("mongodb");return new i(r,e)}};var tt=class i extends X{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(e){let r=await import('mysql2/promise').catch(()=>{throw new Q("mysql2")});if(!r)throw new Q("mysql");return new i(r.default,e)}};var rt=class i extends X{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(e){let r=await import('pg').catch(()=>{throw new Q("pg")});if(!r)throw new Q("pg");return new i(r.default,e)}};var ot=class i extends X{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(e){let r=await import('sqlite3').catch(()=>{throw new Q("sqlite3")});if(!r)throw new Q("sqlite3");return new i(r.default,e)}};var nt=class{static async getDriver(t,e){switch(t){case "mysql":case "mariadb":return tt.createDriver(e);case "postgres":case "cockroachdb":return rt.createDriver(e);case "sqlite":return ot.createDriver(e);case "mongo":return et.createDriver(e);default:throw new f(`DriverFactory::getDriver Driver ${t} not found, il likely not installed, try running npm install ${t}`,"DRIVER_NOT_FOUND")}}};var wl=async i=>(await nt.getDriver(i)).client,Ne=async(i,t)=>{let e=await wl(i);switch(i){case "mariadb":case "mysql":let r=t;return e.createPool({host:r.host,port:r.port,user:r.username,password:r.password,database:r.database,...r?.driverOptions});case "postgres":case "cockroachdb":let s=t,a=e;return new a.Pool({host:s.host,port:s.port,user:s.username,password:s.password,database:s.database,...s?.driverOptions});case "sqlite":let d=e,m=t?.database;return new d.Database(m,d.OPEN_READWRITE|d.OPEN_CREATE,u=>{if(u)throw new f("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});default:throw new f("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var xe={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function ql(){let i=new Date,t=e=>e.toString().padStart(2,"0");return `${i.getFullYear()}-${t(i.getMonth()+1)}-${t(i.getDate())} ${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}`}function nr(i,t){let e=ql(),r=i.toUpperCase();return i==="error"?`${xe.error}[${r}] ${e}
2
+ 'use strict';var commander=require('commander'),Z=require('fs'),_e=require('path'),os=require('fs/promises'),sqlHighlight=require('sql-highlight'),module$1=require('module'),url=require('url'),bundleRequire=require('bundle-require'),sqlFormatter=require('sql-formatter'),ae=require('crypto'),we=require('dayjs'),Fl=require('dayjs/plugin/customParseFormat.js'),Vl=require('dayjs/plugin/timezone.js'),jl=require('dayjs/plugin/utc.js');require('reflect-metadata');var rd=require('pluralize'),stream=require('stream'),Gn=require('perf_hooks');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Z__default=/*#__PURE__*/_interopDefault(Z);var _e__default=/*#__PURE__*/_interopDefault(_e);var os__default=/*#__PURE__*/_interopDefault(os);var ae__default=/*#__PURE__*/_interopDefault(ae);var we__default=/*#__PURE__*/_interopDefault(we);var Fl__default=/*#__PURE__*/_interopDefault(Fl);var Vl__default=/*#__PURE__*/_interopDefault(Vl);var jl__default=/*#__PURE__*/_interopDefault(jl);var rd__default=/*#__PURE__*/_interopDefault(rd);var Gn__namespace=/*#__PURE__*/_interopNamespace(Gn);var f=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}};var ee=class{constructor(t){this.options=t;}static async createDriver(t){throw new f("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var K=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var et=class i extends ee{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(e){let r=await import('mongodb').catch(()=>{throw new K("mongodb")});if(!r)throw new K("mongodb");return new i(r,e)}};var tt=class i extends ee{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(e){let r=await import('mysql2/promise').catch(()=>{throw new K("mysql2")});if(!r)throw new K("mysql");return new i(r.default,e)}};var rt=class i extends ee{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(e){let r=await import('pg').catch(()=>{throw new K("pg")});if(!r)throw new K("pg");return new i(r.default,e)}};var ot=class i extends ee{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(e){let r=await import('sqlite3').catch(()=>{throw new K("sqlite3")});if(!r)throw new K("sqlite3");return new i(r.default,e)}};var nt=class{static async getDriver(t,e){switch(t){case "mysql":case "mariadb":return tt.createDriver(e);case "postgres":case "cockroachdb":return rt.createDriver(e);case "sqlite":return ot.createDriver(e);case "mongo":return et.createDriver(e);default:throw new f(`DriverFactory::getDriver Driver ${t} not found, il likely not installed, try running npm install ${t}`,"DRIVER_NOT_FOUND")}}};var wl=async i=>(await nt.getDriver(i)).client,Ne=async(i,t)=>{let e=await wl(i);switch(i){case "mariadb":case "mysql":let r=t;return e.createPool({host:r.host,port:r.port,user:r.username,password:r.password,database:r.database,...r?.driverOptions});case "postgres":case "cockroachdb":let s=t,a=e;return new a.Pool({host:s.host,port:s.port,user:s.username,password:s.password,database:s.database,...s?.driverOptions});case "sqlite":let d=e,m=t?.database;return new d.Database(m,d.OPEN_READWRITE|d.OPEN_CREATE,u=>{if(u)throw new f("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});default:throw new f("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var xe={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function ql(){let i=new Date,t=e=>e.toString().padStart(2,"0");return `${i.getFullYear()}-${t(i.getMonth()+1)}-${t(i.getDate())} ${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}`}function nr(i,t){let e=ql(),r=i.toUpperCase();return i==="error"?`${xe.error}[${r}] ${e}
3
3
  ${t}${xe.reset}
4
4
  `:i==="warn"?`${xe.warn}[${r}] ${e}
5
5
  ${t}${xe.reset}
@@ -106,9 +106,9 @@ export default class extends Migration {
106
106
  id INTEGER PRIMARY KEY AUTOINCREMENT,
107
107
  name TEXT NOT NULL,
108
108
  timestamp TEXT NOT NULL DEFAULT '${new Date().toISOString()}'
109
- );`}},K=new sr;async function ir(i,t=true,e){let r=i.getDbType(),o=i.database;if(r||(b.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(b.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),b.info("Dropping all tables for database type: "+r),r==="sqlite"){await i.closeConnection(),await os__default.default.rm(o,{recursive:true,force:true}),b.info("Sqlite database dropped successfully"),await os__default.default.writeFile(o,""),b.info("Sqlite database recreated successfully");let m=i.getConnectionDetails();i.sqlPool=await Ne(i.getDbType(),m),t&&(await i.closeConnection(),b.info("All tables dropped successfully"),t&&process.exit(0));return}let n=K.getAllTablesTemplate(r,o),s=await i.rawQuery(n),a=K.parseGetAllTables(r,o,s),l=K.dropAllTablesTemplate(r,a),d=null;e&&(d=await i.startTransaction(),i=d.sql);try{(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),await i.rawQuery(l),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),e&&await d?.commit();}catch(m){e&&await d?.rollback(),b.error(m),process.exit(1);}finally{t&&await i.closeConnection();}b.info("All tables dropped successfully"),t&&process.exit(0);}var M={DB_TYPE:process.env.DB_TYPE,DB_HOST:process.env.DB_HOST,DB_PORT:process.env.DB_PORT,DB_USER:process.env.DB_USER,DB_PASSWORD:process.env.DB_PASSWORD,DB_DATABASE:process.env.DB_DATABASE,DB_LOGS:process.env.DB_LOGS==="true",MIGRATION_PATH:process.env.MIGRATION_PATH||"database/migrations",REDIS_HOST:process.env.REDIS_HOST,REDIS_PORT:process.env.REDIS_PORT,REDIS_USERNAME:process.env.REDIS_USERNAME,REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_DATABASE:process.env.REDIS_DATABASE,MONGO_URL:process.env.MONGO_URL,MONGO_LOGS:process.env.MONGO_LOGS==="true"},Rl=()=>{try{z__default.default.readFileSync(".env","utf8").split(`
110
- `).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":M.DB_TYPE||(M.DB_TYPE=s);break;case "DB_HOST":M.DB_HOST||(M.DB_HOST=s);break;case "DB_PORT":M.DB_PORT||(M.DB_PORT=s);break;case "DB_USER":M.DB_USER||(M.DB_USER=s);break;case "DB_PASSWORD":M.DB_PASSWORD||(M.DB_PASSWORD=s);break;case "DB_DATABASE":M.DB_DATABASE||(M.DB_DATABASE=s);break;case "MIGRATION_PATH":M.MIGRATION_PATH||(M.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":M.REDIS_HOST||(M.REDIS_HOST=s);break;case "REDIS_PORT":M.REDIS_PORT||(M.REDIS_PORT=s);break;case "REDIS_USERNAME":M.REDIS_USERNAME||(M.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":M.REDIS_PASSWORD||(M.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":M.REDIS_DATABASE||(M.REDIS_DATABASE=s);break;case "MONGO_URL":M.MONGO_URL||(M.MONGO_URL=s);break}});}catch{}finally{return M}},A=Rl();var xl=()=>{let i=A.MIGRATION_PATH,t=_e__default.default.resolve(process.cwd(),i);return z__default.default.existsSync(t)||z__default.default.mkdirSync(t,{recursive:true}),t},ss=(i,t=false,e="basic",r="table")=>{let o=xl(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=_e__default.default.join(o,s),l;switch(e){case "alter":l=K.alterMigrationTemplate(t,r);break;case "create":l=K.createMigrationTemplate(t,r);break;default:l=K.basicMigrationTemplate(t);break}z__default.default.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function pe(i,t){let e=_e__default.default.isAbsolute(i)?i:_e__default.default.resolve(process.cwd(),i),{mod:r}=await bundleRequire.bundleRequire({filepath:e,format:"esm",preserveTemporaryFile:false,esbuildOptions:{keepNames:true,sourcemap:true},tsconfig:t??"./tsconfig.json",external:["ioredis","mongodb","pg","mysql2","sqlite3","bundle-require","esbuild","sql-formatter","sql-highlight","reflect-metadata","pluralize","dayjs","async-mutex","commander"]});return r}var Il=async(i,t)=>{if(i.endsWith(".ts"))return await import('typescript').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `typeScript` installed in your project. Please install it with `npm install typescript --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('esbuild').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `esbuild` installed in your project. Please install it with `npm install esbuild --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('bundle-require').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `bundle-require` installed in your project. Please install it with `npm install bundle-require --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),pe(i,t);try{return import(url.pathToFileURL(i).href)}catch{let o=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));try{let n=o(i);return {default:n.default||n,...n}}catch{throw new f(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function st(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(K.migrationTableTemplateMysql()),(await e.query(K.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(K.migrationTableTemplatePg()),(await o.query(K.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ls(K.migrationTableTemplateSQLite(),[],t),await ls(K.selectAllFromMigrationsTemplate(),[],t)||[];default:throw new f("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function it(i,t,e){let r=$l(t),o=[];for(let n of r){let s=await El(n,t,e),a=new s(i||A.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function vl(i,t){let e=await Il(i,t);if(!e.default)throw new f("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}async function El(i,t=A.MIGRATION_PATH||"database/migrations",e){t=_e.join(t,i);let r=_e__default.default.resolve(process.cwd(),t),o=await vl(r,e);if(!o)throw new f("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function $l(i){let t=process.cwd(),e=_e__default.default.resolve(i||A.MIGRATION_PATH||"database/migrations"),r=_e__default.default.resolve(t,e);try{let o=z__default.default.readdirSync(r).filter(n=>{let s=_e__default.default.extname(n),a=_e__default.default.join(r,n);return z__default.default.statSync(a).isFile()&&(s===".ts"||s===".js")});if(o.length)return o;throw new f("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}catch{throw new f("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}}async function ls(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function Ke(i,t,e,r,o){let n=i.getDbType(),s=null;b.info("Running migrations for database type: "+n);try{let a=await st(n,i.getPool()),d=(await it(n,e,r)).filter(c=>!a.map(u=>u.name).includes(c.migrationName));if(!d.length){b.info("No pending migrations.");return}if(t){let c=d.findIndex(T=>T.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let u=d.slice(0,c+1);o&&(s=await i.startTransaction(),i=s.sql),await new ye(i).upMigrations(u),o&&await s?.commit(),b.info("Migrations ran successfully");return}let m=new ye(i);o&&(s=await i.startTransaction(),i=s.sql),await m.upMigrations(d),o&&await s?.commit();}catch(a){throw o&&await s?.rollback(),a}b.info("Migrations ran successfully");}var at=class{constructor(t){switch(this.type=t?.type||A.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;default:throw new f(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
111
- Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}}handleCockroachdbSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||A.MONGO_URL,this.logs=t?.logs||A.MONGO_LOGS||false;}};var Bl=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},Ql=i=>i.openApi?.required??false,Kl=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=Bl(r));return e},kl=i=>{let t=i.getColumns(),e=[];for(let r of t)Ql(r)&&e.push(r.columnName);return e||[]},Ll=i=>{let t=Kl(i),e=kl(i);return {type:"object",properties:t,required:e.length?e:[]}};var ds=i=>i.map(t=>({...Ll(t),modelName:t.name}));var lt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";default:return "sql"}},us=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},cs=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,us(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,us(t[r]));}return e},ke=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):false:false,dt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:lt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var lr=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},ps=new lr;var dr=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},ys=new dr;var mr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},fs=new mr;var ur=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?"":" not null";a+=l;}if(e.options.dropDefault)a+=" drop default";else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}return e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},hs=new ur;function Ul(i){return typeof i!="string"||!i?i:i.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function Wl(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function D(i,t){return t==="preserve"?i:t==="snake"?Ul(i):t==="camel"?Wl(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}we__default.default.extend(jl__default.default);we__default.default.extend(Vl__default.default);we__default.default.extend(Fl__default.default);var mt=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=we__default.default(i);if(e==="LOCAL"){let n=r.local();switch(t){case "ISO":return n.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return n.format("YYYY-MM-DD");case "TIME_ONLY":return n.format("HH:mm:ss");default:return n.unix().toString()}}let o=r.utc();switch(t){case "ISO":return o.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return o.format("YYYY-MM-DD");case "TIME_ONLY":return o.format("HH:mm:ss");default:return o.unix().toString()}},gs=(i,t,e="UTC")=>{if(i===null)return null;if(i instanceof Date){if(isNaN(i.getTime()))throw new f("DateUtils::parseDate","INVALID_DATE_OBJECT");return i}try{let r=t?we__default.default(i,t):we__default.default(i);if(!r.isValid())throw new f("DateUtils::parseDate","INVALID_DATE_STRING");return e==="UTC"?r.utc().toDate():r.local().toDate()}catch{throw new f("DateUtils::parseDate","FAILED_TO_PARSE_DATE")}},ut=(i=new Date)=>we__default.default(i).utc().format("YYYY-MM-DD HH:mm:ss");var Ts=(i,t)=>{try{let e=ae__default.default.createHash("sha256").update(i).digest(),r=ae__default.default.randomBytes(16),o=ae__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");return n+=o.final("hex"),`${r.toString("hex")}:${n}`}catch(e){throw new f("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},bs=(i,t)=>{try{let e=ae__default.default.createHash("sha256").update(i).digest(),[r,o]=t.split(":"),n=ae__default.default.createDecipheriv("aes-256-cbc",e,Buffer.from(r,"hex")),s=n.update(o,"hex","utf8");return s+=n.final("utf8"),s}catch(e){throw new f("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Ss=(i,t)=>{try{let e=ae__default.default.randomBytes(32),r=ae__default.default.randomBytes(16),o=ae__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=ae.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new f("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Ns=(i,t)=>{try{let[e,r,o]=t.split(":"),n=ae.privateDecrypt(i,Buffer.from(r,"hex")),s=ae__default.default.createDecipheriv("aes-256-cbc",n,Buffer.from(e,"hex")),a=s.update(o,"hex","utf8");return a+=s.final("utf8"),a}catch(e){throw new f("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var pr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",cr=pr.length,zl=10,Gl=16,Zl=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%cr;e=pr.charAt(o)+e,i=(i-o)/cr;}return e},Xl=i=>{let t=ae.randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=pr.charAt(o%cr);}return e},ws=()=>{let i=Math.floor(Date.now()/1e3),t=Zl(i,zl),e=Xl(Gl);return t+e};function yr(i){return i.replace(/^[`"]|[`"]$/g,"")}function fr(i,t,e){if(!i.includes(".")){let n=yr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=yr(r),o=yr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function N(i){return typeof i=="function"?i():i}var I=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=I(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=I(o,t);}return e};var Pe=class{};Pe.modelCaseConvention="camel",Pe.databaseCaseConvention="snake";var ed=async(i,t,e,r,o=[],n=[],s=false)=>{let a={},l=e.filter(m=>m.hidden).map(m=>m.columnName),d=new Map(e.map(m=>[m.databaseName,m]));return await Promise.all(Object.keys(i).map(async m=>{let c=i[m],u=d.get(m)?.columnName??D(m,t.modelCaseConvention);if(u==="$annotations"&&!s){td(i,m,a,t,n);return}if(!r.has(u)||l.includes(u)||o.length&&!o.includes(u))return;if(c===null){a[u]=null;return}let p=r.get(u);if(p&&p.serialize){a[u]=await p.serialize(c);return}a[u]=c;})),o.forEach(m=>{a[m]||(a[m]=null);}),a},td=(i,t,e,r,o=[])=>{if(!Object.keys(i[t]).length)return;let n=Object.keys(i[t]).reduce((s,a)=>(o.includes(a)&&(s[D(a,r.modelCaseConvention)]=i[t][a]),s),{});Object.keys(n).length&&(e[t]=n);},ee=async(i,t,e=[],r=[],o=false)=>{if(!i.length)return null;let n=t.getColumns(),s=new Map(n.map(l=>[l.columnName,l]));e=e.map(l=>{if(!l.toLowerCase().includes("as"))return l.includes(".")&&(l=l.split(".").pop()),s.get(l)?.columnName??D(l,t.modelCaseConvention)}).filter(l=>l!=="*"&&l);let a=await Promise.all(i.map(async l=>await ed(l,t,n,s,e,r,o)));return a.length===1?a[0]:a};var Ms=["postgres","cockroachdb"];function qs(i){let t=i.name,e=D(t,"snake");return rd__default.default(e)}function Cs(){return {}}var Le=class Le extends Pe{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:qs(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Ds(this)}constructor(){super();}static async all(t={}){return await this.dispatchModelManager(t).find({ignoreHooks:t.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static query(t){return this.dispatchModelManager(t).query()}static async first(t){return this.dispatchModelManager(t).query().one({ignoreHooks:t?.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async find(t,e){return await this.dispatchModelManager(e).find(t)}static async findOneOrFail(t,e){return await this.dispatchModelManager(e).findOneOrFail(t)}static async findOne(t,e){return await this.dispatchModelManager(e).findOne(t)}static async findBy(t,e,r={}){return await this.dispatchModelManager(r).find({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneBy(t,e,r={}){return await this.dispatchModelManager(r).findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneByPrimaryKey(t,e={}){return await this.dispatchModelManager(e).findOneByPrimaryKey(t)}static async refresh(t,e={}){let r=this,o=r.dispatchModelManager(e),n=r.primaryKey,s=t[n],a=await o.findOneByPrimaryKey(s);return a||null}static async insert(t,e={}){return this.dispatchModelManager(e).insert(t,{ignoreHooks:e.ignoreHooks,returning:e.returning})}static async insertMany(t,e={}){return t.length?this.dispatchModelManager(e).insertMany(t,{ignoreHooks:e.ignoreHooks,returning:e.returning}):[]}static async sync(t,e,r,o,n={}){if(Array.isArray(r)||(r=[r]),!r.length)return;let s=this,l=yt(s).find(T=>T.columnName===t);if(!l)throw new f(`${s.name}::sync`,"RELATION_NOT_FOUND");if(l.type!=="manyToMany")throw new f(`${s.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let d=D(l.leftForeignKey,n.caseConvention||s.databaseCaseConvention),m=D(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),c=r.map((T,h)=>({[d]:e[s.primaryKey],[m]:T[l.model.primaryKey],...o?o(T,h):{}}));class u extends Le{static get table(){return l.throughModel}}u.databaseCaseConvention="preserve",u.modelCaseConvention="preserve",await u.dispatchModelManager(n).insertMany(c);}static async updateRecord(t,e,r={}){try{let o=this,n=o.dispatchModelManager(r);return e&&o.combineProps(t,e),await n.updateRecord(t)}catch(o){throw o instanceof f&&o.message==="MODEL_HAS_NO_PRIMARY_KEY"?new f(`${this.name}::updateRecord`,"MODEL_HAS_NO_PRIMARY_KEY"):o}}static async firstOrInsert(t,e,r={}){r.fullResponse||(r.fullResponse=false);let n=this.dispatchModelManager(r),s=await n.findOne({where:t});if(s)return r.fullResponse?{isNew:false,model:s}:s;let a=await n.insert(e);return r.fullResponse?{isNew:true,model:a}:a}static async upsert(t,e,r={updateOnConflict:true}){let o=this,n=o.dispatchModelManager(r),s=await n.findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:t});return s?(e[o.primaryKey]=s[o.primaryKey],r.updateOnConflict?await n.updateRecord(e,{returning:r.returning}):s):await n.insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning??["*"]})}static async upsertMany(t,e,r={updateOnConflict:true}){if(!e.length)return [];let o=this,n=o.dispatchModelManager(r);if(!e.every(c=>{let u=new Set(Object.keys(c));return t.every(p=>u.has(p))}))throw new f("Model::upsertMany","CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA");let s=Object.keys(e[0]),a=await n.upsertMany(t,s,e,{ignoreHooks:r.ignoreHooks,returning:r.returning,updateOnConflict:r.updateOnConflict||true}),l=o.sqlInstance.getDbType();if(Ms.includes(l))return await ee(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let m=new Map;return t.forEach(c=>{e.forEach(u=>{m.set(c,[...m.get(c)||[],u[c]]);});}),d.where(c=>{t.forEach(u=>{c.orWhereIn(u,m.get(u)||[]);});}),d.many({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async deleteRecord(t,e){return this.dispatchModelManager(e).deleteRecord(t)}static async softDelete(t,e,r){let o=this,{column:n=o.softDeleteColumn,value:s=o.softDeleteValue}=e||{};return t[n]=s,await o.dispatchModelManager({trx:r?.trx,connection:r?.connection}).updateRecord(t),typeof s=="string"?(t[n]=new Date(s),t):(t[n]=s,t)}static async truncate(t={}){return this.dispatchModelManager(t).query().truncate()}static async getTableInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getTableInfo(t.table)}static async getIndexInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getIndexInfo(t.table)}static async getTableSchema(){let t=this;return t.establishConnection(),t.sqlInstance.getTableSchema(t.table)}static combineProps(t,e){for(let r in e)Object.assign(t,{[r]:e[r]});}static getColumns(){return pt(this)}static getRelations(){return Ps(this)}static getIndexes(){return Os(this)}static getUniques(){return Is(this)}static column(t,...e){v(...e)(this.prototype,t);}static hasOne(t,...e){Rs(...e)(this.prototype,t);}static hasMany(t,...e){xs(...e)(this.prototype,t);}static belongsTo(t,...e){_s(...e)(this.prototype,t);}static manyToMany(t,...e){As(...e)(this.prototype,t);}static establishConnection(){let t=fe.getInstance();if(!t)throw new f("sqlInstance not initialized, did you defined it in SqlDataSource.connect static method?","CONNECTION_NOT_ESTABLISHED");this.sqlInstance=t;}static dispatchModelManager(t){if(t?.connection)return t.connection.getModelManager(this);if(t?.trx)return t.trx.sql.getModelManager(this);let e=this;return e.establishConnection(),e.sqlInstance.getModelManager(e)}};Le.softDeleteColumn="deletedAt",Le.softDeleteValue=ut();var ct=Le;var te=class{constructor(t,e){this.model=ct;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var ft=class extends te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var ht=class extends te{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var gt=class extends te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Tt=class extends te{constructor(e,r,o){super(e,r);this.type="manyToMany";this.primaryModel=o.primaryModel,this.relatedModel=e.table,this.throughModel=o.throughModel,this.leftForeignKey=o.leftForeignKey,this.rightForeignKey=o.rightForeignKey;}};var bt=Symbol("columns"),St=Symbol("primaryKey"),j=Symbol("relations"),vs=Symbol("indexes"),Es=Symbol("uniques"),he=i=>`${rd__default.default.singular(i)}_id`,hr=(i,t)=>`idx_${i}_${t}`,H=(i,t)=>`uq_${i}_${t}`,$=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,ge=(i,t)=>`pk_${i}_${t}`;function v(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(Reflect.getMetadata(St,e))throw new f("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");Reflect.defineMetadata(St,r,e);}let n=i.databaseName??D(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,hidden:i.hidden,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??ge(o.table,r),autoUpdate:i.autoUpdate,databaseName:n,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,constraints:{nullable:i.nullable,default:i.default}},a=Reflect.getMetadata(bt,e)||[];a.push(s),Reflect.defineMetadata(bt,a,e);}}v.primary=sd;v.date=pd;v.boolean=cd;v.json=yd;v.uuid=ld;v.ulid=dd;v.integer=ad;v.float=id;v.encryption={symmetric:md,asymmetric:ud};function sd(i={}){return v({...i,primaryKey:true})}function id(i={}){return v({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseFloat(t)}})}function ad(i={}){return v({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)}})}function ld(i={}){return v({type:"uuid",...i,prepare:t=>t||ae__default.default.randomUUID()})}function dd(i={}){return v({type:"ulid",...i,prepare:t=>t||ws()})}function md(i){return v({...i,prepare:t=>t&&Ts(i.key,t),serialize:t=>t&&bs(i.key,t)})}function ud(i){return v({...i,prepare:t=>t&&Ss(i.publicKey,t),serialize:t=>t&&Ns(i.privateKey,t)})}function cd(i={}){return v({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function pd(i={}){let{format:t="ISO",timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i;return v({type:"datetime",...n,autoUpdate:r,prepare:s=>s?r?mt(new Date,t,e):typeof s=="string"?s:mt(s,t,e):o?mt(new Date,t,e):null,serialize:s=>{if(s!==void 0)return s===null?null:gs(s,t,e)}})}function yd(i={}){return v({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function pt(i){try{return Reflect.getMetadata(bt,i.prototype)||[]}catch{return []}}function _s(i,t,e){return (r,o)=>{let n=()=>he(i().table),s=()=>{let d=r.constructor.table,m=t||n();return $(d,m,i().table)},a={type:"belongsTo",columnName:o,model:i,foreignKey:t?String(t):n,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=Reflect.getMetadata(j,r)||[];l.push(a),Reflect.defineMetadata(j,l,r);}}function Rs(i,t){return (e,r)=>{let o=()=>he(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=Reflect.getMetadata(j,e)||[];s.push(n),Reflect.defineMetadata(j,s,e);}}function xs(i,t){return (e,r)=>{let o=()=>he(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=Reflect.getMetadata(j,e)||[];s.push(n),Reflect.defineMetadata(j,s,e);}}function As(i,t,e,r){return (o,n)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",d=typeof t=="string"?t:()=>t().table,m=o.constructor.table,c=()=>he(m),u=()=>he(i().table),p=()=>$(N(d),s?String(s):c()),T={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:m,throughModel:d,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):u,wasModelProvided:l}},h=Reflect.getMetadata(j,o)||[];h.push(T),Reflect.defineMetadata(j,h,o);}}function Ps(i){return Reflect.getMetadata(j,i.prototype)||[]}function yt(i){return (Reflect.getMetadata(j,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=N(s),l=o();switch(r){case "belongsTo":return new ft(l,n,a);case "hasOne":return new gt(l,n,a);case "hasMany":return new ht(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new f("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Tt(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:N(e.manyToManyOptions.throughModel),leftForeignKey:N(e.manyToManyOptions.leftForeignKey),rightForeignKey:N(e.manyToManyOptions.rightForeignKey)});default:throw new f("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Ds(i){return Reflect.getMetadata(St,i.prototype)}function Os(i){return Reflect.getMetadata(vs,i.prototype)||[]}function Is(i){return Reflect.getMetadata(Es,i.prototype)||[]}var y=class{constructor(t){this.model=t;let e=pt(t);this.modelColumnsMap=new Map(e.map(r=>[r.columnName,r]));}formatStringColumn(t,e){if(e==="*")return "*";if(e.includes(".")){let[n,s]=e.split(".");if(s==="*")switch(t){case "mysql":case "mariadb":return `\`${n}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${n}".*`;default:throw new Error(`Unsupported database type: ${t}`)}let a=this.modelColumnsMap.get(s)?.databaseName??D(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${n}"."${a}"`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??D(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;default:throw new Error(`Unsupported database type: ${t}`)}}formatStringTable(t,e){switch(t){case "mysql":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;default:return e}}prepareColumns(t,e,r="insert"){if(!t.length)return {columns:t,values:e};let o=[],n=[];for(let s=0;s<t.length;s++){let a=t[s],l=e[s];a==="*"||a==="$annotations"||(o.push(a),n.push(l));}for(let s=0;s<o.length;s++){let a=o[s],l=n[s],d=this.modelColumnsMap.get(a),m=l;d&&(r==="insert"&&d.prepare?m=d.prepare(l):r==="update"&&(m=d.prepare?.(l)??l)),n[s]=m;}for(let s of this.modelColumnsMap.keys())if(!o.includes(s)){let a=this.modelColumnsMap.get(s);if(!a||r==="insert"&&s===this.model.primaryKey&&!a.prepare)continue;(r==="insert"||a.autoUpdate)&&(o.push(s),n.push(a.prepare?.(void 0)??void 0));}return {columns:o,values:n}}};var gr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"mysql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:T}=n.parse([u]);if(u.file==="add_column")s.push(p);else if(u.file==="add_constraint"||u.folder==="constraint"){let h=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(h),x=/^\s*add\s+constraint\b/i.test(p);if(w&&!x){let O=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${h} ${O}`;}else {let O=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(O);}}else u.file==="set_default"||u.file==="drop_default"||u.file==="set_not_null"||u.file,s.push(p);a.push(...T);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},$s=new gr;var Tr=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Bs=new Tr;var br=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Qs=new br;var Sr=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Ks=new Sr;var Nr=class{toSql(t){return {sql:"",bindings:[]}}},ks=new Nr;var wr=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Ls=new wr;var Mr=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Us=new Mr;var qr=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Ws=new qr;var Cr=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Fs=new Cr;var _r=class{toSql(t){return {sql:"",bindings:[]}}},Vs=new _r;var Rr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")return {sql:`${o} ${n}`,bindings:[]};if(n==="integer"||n==="int"){let s="int";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} mediumint`,bindings:[]};if(n==="bigint"){let s="bigint";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="float")return {sql:`${o} float`,bindings:[]};if(n==="double")return {sql:`${o} double`,bindings:[]};if(n==="real")return {sql:`${o} double`,bindings:[]};if(n==="decimal"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}else if(n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`.trimEnd(),bindings:[]}}else if(n==="datetime"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime${s}`.trimEnd(),bindings:[]}}else if(n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${s}`.trimEnd(),bindings:[]}}else {if(n==="year")return {sql:`${o} year`,bindings:[]};if(n==="boolean")return {sql:`${o} boolean`,bindings:[]};if(n==="varbinary"){let s=e.length??255;return {sql:`${o} varbinary(${s})`,bindings:[]}}else if(n==="binary"){let s=e.length??255;return {sql:`${o} binary(${s})`,bindings:[]}}else {if(n==="bytea"||n==="blob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} json`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} enum(${s})`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}}}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},js=new Rr;var xr=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Hs=new xr;var Ar=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",N(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${o})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns.map(s=>r.formatStringColumn("mysql",N(s))).join(", "),n=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o==="NULL"?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:o===null?{sql:"default null",bindings:[]}:(typeof o=="string"&&(o=`'${o}'`),{sql:`default ${o}`,bindings:[]})}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(d=>r.formatStringColumn("mysql",N(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",N(d))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Ys=new Ar;var Pr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let T=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${T} ${h}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(T),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Js=new Pr;var Dr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("mysql",e.table),bindings:[]}}},zs=new Dr;var Or=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gs=new Or;var Ir=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Zs=new Ir;var vr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Xs=new vr;var Er=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},ei=new Er;var $r=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},ti=new $r;var g=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Br=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof g)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},ri=new Br;var Qr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},oi=new Qr;var Kr=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},ni=new Kr;var kr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("mysql",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],d=[];for(let c of e.records){let u=s.map(T=>c[T]);l.push(...u);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},si=new kr;var Lr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mysql",o),a=r.formatStringColumn("mysql",n);return {sql:`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},ii=new Lr;var Ur=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ai=new Ur;var fd={for_update:"for update",for_share:"lock in share mode"},Wr=class{toSql(t){let e=t,r=fd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},li=new Wr;var Fr=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},di=new Fr;var Vr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);return e.mode==="ignore"?{sql:"ON DUPLICATE KEY IGNORE",bindings:[]}:{sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},mi=new Vr;var jr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},ui=new jr;var Hr=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ci=new Hr;var Yr=class{toSql(t){return {sql:`SELECT
109
+ );`}},k=new sr;async function ir(i,t=true,e){let r=i.getDbType(),o=i.database;if(r||(b.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(b.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),b.info("Dropping all tables for database type: "+r),r==="sqlite"){await i.closeConnection(),await os__default.default.rm(o,{recursive:true,force:true}),b.info("Sqlite database dropped successfully"),await os__default.default.writeFile(o,""),b.info("Sqlite database recreated successfully");let m=i.getConnectionDetails();i.sqlPool=await Ne(i.getDbType(),m),t&&(await i.closeConnection(),b.info("All tables dropped successfully"),t&&process.exit(0));return}let n=k.getAllTablesTemplate(r,o),s=await i.rawQuery(n),a=k.parseGetAllTables(r,o,s),l=k.dropAllTablesTemplate(r,a),d=null;e&&(d=await i.startTransaction(),i=d.sql);try{(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),await i.rawQuery(l),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),e&&await d?.commit();}catch(m){e&&await d?.rollback(),b.error(m),process.exit(1);}finally{t&&await i.closeConnection();}b.info("All tables dropped successfully"),t&&process.exit(0);}var M={DB_TYPE:process.env.DB_TYPE,DB_HOST:process.env.DB_HOST,DB_PORT:process.env.DB_PORT,DB_USER:process.env.DB_USER,DB_PASSWORD:process.env.DB_PASSWORD,DB_DATABASE:process.env.DB_DATABASE,DB_LOGS:process.env.DB_LOGS==="true",MIGRATION_PATH:process.env.MIGRATION_PATH||"database/migrations",REDIS_HOST:process.env.REDIS_HOST,REDIS_PORT:process.env.REDIS_PORT,REDIS_USERNAME:process.env.REDIS_USERNAME,REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_DATABASE:process.env.REDIS_DATABASE,MONGO_URL:process.env.MONGO_URL,MONGO_LOGS:process.env.MONGO_LOGS==="true"},Rl=()=>{try{Z__default.default.readFileSync(".env","utf8").split(`
110
+ `).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":M.DB_TYPE||(M.DB_TYPE=s);break;case "DB_HOST":M.DB_HOST||(M.DB_HOST=s);break;case "DB_PORT":M.DB_PORT||(M.DB_PORT=s);break;case "DB_USER":M.DB_USER||(M.DB_USER=s);break;case "DB_PASSWORD":M.DB_PASSWORD||(M.DB_PASSWORD=s);break;case "DB_DATABASE":M.DB_DATABASE||(M.DB_DATABASE=s);break;case "MIGRATION_PATH":M.MIGRATION_PATH||(M.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":M.REDIS_HOST||(M.REDIS_HOST=s);break;case "REDIS_PORT":M.REDIS_PORT||(M.REDIS_PORT=s);break;case "REDIS_USERNAME":M.REDIS_USERNAME||(M.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":M.REDIS_PASSWORD||(M.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":M.REDIS_DATABASE||(M.REDIS_DATABASE=s);break;case "MONGO_URL":M.MONGO_URL||(M.MONGO_URL=s);break}});}catch{}finally{return M}},A=Rl();var xl=()=>{let i=A.MIGRATION_PATH,t=_e__default.default.resolve(process.cwd(),i);return Z__default.default.existsSync(t)||Z__default.default.mkdirSync(t,{recursive:true}),t},ss=(i,t=false,e="basic",r="table")=>{let o=xl(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=_e__default.default.join(o,s),l;switch(e){case "alter":l=k.alterMigrationTemplate(t,r);break;case "create":l=k.createMigrationTemplate(t,r);break;default:l=k.basicMigrationTemplate(t);break}Z__default.default.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function pe(i,t){let e=_e__default.default.isAbsolute(i)?i:_e__default.default.resolve(process.cwd(),i),{mod:r}=await bundleRequire.bundleRequire({filepath:e,format:"esm",preserveTemporaryFile:false,esbuildOptions:{keepNames:true,sourcemap:true},tsconfig:t??"./tsconfig.json",external:["ioredis","mongodb","pg","mysql2","sqlite3","bundle-require","esbuild","sql-formatter","sql-highlight","reflect-metadata","pluralize","dayjs","async-mutex","commander"]});return r}var Il=async(i,t)=>{if(i.endsWith(".ts"))return await import('typescript').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `typeScript` installed in your project. Please install it with `npm install typescript --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('esbuild').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `esbuild` installed in your project. Please install it with `npm install esbuild --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('bundle-require').catch(()=>{throw new f("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `bundle-require` installed in your project. Please install it with `npm install bundle-require --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),pe(i,t);try{return import(url.pathToFileURL(i).href)}catch{let o=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));try{let n=o(i);return {default:n.default||n,...n}}catch{throw new f(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function st(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(k.migrationTableTemplateMysql()),(await e.query(k.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(k.migrationTableTemplatePg()),(await o.query(k.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ls(k.migrationTableTemplateSQLite(),[],t),await ls(k.selectAllFromMigrationsTemplate(),[],t)||[];default:throw new f("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function it(i,t,e){let r=El(t),o=[];for(let n of r){let s=await $l(n,t,e),a=new s(i||A.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function vl(i,t){let e=await Il(i,t);if(!e.default)throw new f("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}async function $l(i,t=A.MIGRATION_PATH||"database/migrations",e){t=_e.join(t,i);let r=_e__default.default.resolve(process.cwd(),t),o=await vl(r,e);if(!o)throw new f("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function El(i){let t=process.cwd(),e=_e__default.default.resolve(i||A.MIGRATION_PATH||"database/migrations"),r=_e__default.default.resolve(t,e);try{let o=Z__default.default.readdirSync(r).filter(n=>{let s=_e__default.default.extname(n),a=_e__default.default.join(r,n);return Z__default.default.statSync(a).isFile()&&(s===".ts"||s===".js")});if(o.length)return o;throw new f("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}catch{throw new f("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}}async function ls(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function Ke(i,t,e,r,o){let n=i.getDbType(),s=null;b.info("Running migrations for database type: "+n);try{let a=await st(n,i.getPool()),d=(await it(n,e,r)).filter(c=>!a.map(u=>u.name).includes(c.migrationName));if(!d.length){b.info("No pending migrations.");return}if(t){let c=d.findIndex(g=>g.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let u=d.slice(0,c+1);o&&(s=await i.startTransaction(),i=s.sql),await new ye(i).upMigrations(u),o&&await s?.commit(),b.info("Migrations ran successfully");return}let m=new ye(i);o&&(s=await i.startTransaction(),i=s.sql),await m.upMigrations(d),o&&await s?.commit();}catch(a){throw o&&await s?.rollback(),a}b.info("Migrations ran successfully");}var at=class{constructor(t){switch(this.type=t?.type||A.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;default:throw new f(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
111
+ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}}handleCockroachdbSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||A.DB_HOST,this.port=+t?.port||+A.DB_PORT,this.username=t?.username||A.DB_USER,this.password=t?.password||A.DB_PASSWORD,this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||A.DB_DATABASE,this.logs=t?.logs||A.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||A.MONGO_URL,this.logs=t?.logs||A.MONGO_LOGS||false;}};var Bl=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},Ql=i=>i.openApi?.required??false,Kl=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=Bl(r));return e},kl=i=>{let t=i.getColumns(),e=[];for(let r of t)Ql(r)&&e.push(r.columnName);return e||[]},Ll=i=>{let t=Kl(i),e=kl(i);return {type:"object",properties:t,required:e.length?e:[]}};var ds=i=>i.map(t=>({...Ll(t),modelName:t.name}));var lt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";default:return "sql"}},us=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},cs=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,us(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,us(t[r]));}return e},ke=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):false:false,dt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:lt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var lr=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},ps=new lr;var dr=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},ys=new dr;var mr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},fs=new mr;var ur=class{toSql(t){let e=t,r=new S(this.model,"mysql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?"":" not null";a+=l;}if(e.options.dropDefault)a+=" drop default";else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}return e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},hs=new ur;function Ul(i){return typeof i!="string"||!i?i:i.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function Wl(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function O(i,t){return t==="preserve"?i:t==="snake"?Ul(i):t==="camel"?Wl(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}we__default.default.extend(jl__default.default);we__default.default.extend(Vl__default.default);we__default.default.extend(Fl__default.default);var mt=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=we__default.default(i);if(e==="LOCAL"){let n=r.local();switch(t){case "ISO":return n.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return n.format("YYYY-MM-DD");case "TIME_ONLY":return n.format("HH:mm:ss");default:return n.unix().toString()}}let o=r.utc();switch(t){case "ISO":return o.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return o.format("YYYY-MM-DD");case "TIME_ONLY":return o.format("HH:mm:ss");default:return o.unix().toString()}},gs=(i,t,e="UTC")=>{if(i===null)return null;if(i instanceof Date){if(isNaN(i.getTime()))throw new f("DateUtils::parseDate","INVALID_DATE_OBJECT");return i}try{let r=t?we__default.default(i,t):we__default.default(i);if(!r.isValid())throw new f("DateUtils::parseDate","INVALID_DATE_STRING");return e==="UTC"?r.utc().toDate():r.local().toDate()}catch{throw new f("DateUtils::parseDate","FAILED_TO_PARSE_DATE")}},ut=(i=new Date)=>we__default.default(i).utc().format("YYYY-MM-DD HH:mm:ss");var Ts=(i,t)=>{try{let e=ae__default.default.createHash("sha256").update(i).digest(),r=ae__default.default.randomBytes(16),o=ae__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");return n+=o.final("hex"),`${r.toString("hex")}:${n}`}catch(e){throw new f("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},bs=(i,t)=>{try{let e=ae__default.default.createHash("sha256").update(i).digest(),[r,o]=t.split(":"),n=ae__default.default.createDecipheriv("aes-256-cbc",e,Buffer.from(r,"hex")),s=n.update(o,"hex","utf8");return s+=n.final("utf8"),s}catch(e){throw new f("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Ss=(i,t)=>{try{let e=ae__default.default.randomBytes(32),r=ae__default.default.randomBytes(16),o=ae__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=ae.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new f("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Ns=(i,t)=>{try{let[e,r,o]=t.split(":"),n=ae.privateDecrypt(i,Buffer.from(r,"hex")),s=ae__default.default.createDecipheriv("aes-256-cbc",n,Buffer.from(e,"hex")),a=s.update(o,"hex","utf8");return a+=s.final("utf8"),a}catch(e){throw new f("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var pr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",cr=pr.length,zl=10,Gl=16,Zl=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%cr;e=pr.charAt(o)+e,i=(i-o)/cr;}return e},Xl=i=>{let t=ae.randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=pr.charAt(o%cr);}return e},ws=()=>{let i=Math.floor(Date.now()/1e3),t=Zl(i,zl),e=Xl(Gl);return t+e};function yr(i){return i.replace(/^[`"]|[`"]$/g,"")}function fr(i,t,e){if(!i.includes(".")){let n=yr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=yr(r),o=yr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function N(i){return typeof i=="function"?i():i}var I=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=I(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=I(o,t);}return e};var Pe=class{};Pe.modelCaseConvention="camel",Pe.databaseCaseConvention="snake";var ed=async(i,t,e,r,o=[],n=[],s=false)=>{let a={},l=e.filter(m=>m.hidden).map(m=>m.columnName),d=new Map(e.map(m=>[m.databaseName,m]));return await Promise.all(Object.keys(i).map(async m=>{let c=i[m],u=d.get(m)?.columnName??O(m,t.modelCaseConvention);if(u==="$annotations"&&!s){td(i,m,a,t,n);return}if(!r.has(u)||l.includes(u)||o.length&&!o.includes(u))return;if(c===null){a[u]=null;return}let p=r.get(u);if(p&&p.serialize){a[u]=await p.serialize(c);return}a[u]=c;})),o.forEach(m=>{a[m]||(a[m]=null);}),a},td=(i,t,e,r,o=[])=>{if(!Object.keys(i[t]).length)return;let n=Object.keys(i[t]).reduce((s,a)=>(o.includes(a)&&(s[O(a,r.modelCaseConvention)]=i[t][a]),s),{});Object.keys(n).length&&(e[t]=n);},te=async(i,t,e=[],r=[],o=false)=>{if(!i.length)return null;let n=t.getColumns(),s=new Map(n.map(l=>[l.columnName,l]));e=e.map(l=>{if(!l.toLowerCase().includes("as"))return l.includes(".")&&(l=l.split(".").pop()),s.get(l)?.columnName??O(l,t.modelCaseConvention)}).filter(l=>l!=="*"&&l);let a=await Promise.all(i.map(async l=>await ed(l,t,n,s,e,r,o)));return a.length===1?a[0]:a};var Ms=["postgres","cockroachdb"];function qs(i){let t=i.name,e=O(t,"snake");return rd__default.default(e)}function Cs(){return {}}var Le=class Le extends Pe{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:qs(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Ds(this)}constructor(){super();}static async all(t={}){return await this.dispatchModelManager(t).find({ignoreHooks:t.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static query(t){return this.dispatchModelManager(t).query()}static async first(t){return this.dispatchModelManager(t).query().one({ignoreHooks:t?.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async find(t,e){return await this.dispatchModelManager(e).find(t)}static async findOneOrFail(t,e){return await this.dispatchModelManager(e).findOneOrFail(t)}static async findOne(t,e){return await this.dispatchModelManager(e).findOne(t)}static async findBy(t,e,r={}){return await this.dispatchModelManager(r).find({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneBy(t,e,r={}){return await this.dispatchModelManager(r).findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneByPrimaryKey(t,e={}){return await this.dispatchModelManager(e).findOneByPrimaryKey(t)}static async refresh(t,e={}){let r=this,o=r.dispatchModelManager(e),n=r.primaryKey,s=t[n],a=await o.findOneByPrimaryKey(s);return a||null}static async insert(t,e={}){return this.dispatchModelManager(e).insert(t,{ignoreHooks:e.ignoreHooks,returning:e.returning})}static async insertMany(t,e={}){return t.length?this.dispatchModelManager(e).insertMany(t,{ignoreHooks:e.ignoreHooks,returning:e.returning}):[]}static async sync(t,e,r,o,n={}){if(Array.isArray(r)||(r=[r]),!r.length)return;let s=this,l=yt(s).find(g=>g.columnName===t);if(!l)throw new f(`${s.name}::sync`,"RELATION_NOT_FOUND");if(l.type!=="manyToMany")throw new f(`${s.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let d=O(l.leftForeignKey,n.caseConvention||s.databaseCaseConvention),m=O(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),c=r.map((g,h)=>({[d]:e[s.primaryKey],[m]:g[l.model.primaryKey],...o?o(g,h):{}}));class u extends Le{static get table(){return l.throughModel}}u.databaseCaseConvention="preserve",u.modelCaseConvention="preserve",await u.dispatchModelManager(n).insertMany(c);}static async updateRecord(t,e,r={}){try{let o=this,n=o.dispatchModelManager(r);return e&&o.combineProps(t,e),await n.updateRecord(t)}catch(o){throw o instanceof f&&o.message==="MODEL_HAS_NO_PRIMARY_KEY"?new f(`${this.name}::updateRecord`,"MODEL_HAS_NO_PRIMARY_KEY"):o}}static async firstOrInsert(t,e,r={}){r.fullResponse||(r.fullResponse=false);let n=this.dispatchModelManager(r),s=await n.findOne({where:t});if(s)return r.fullResponse?{isNew:false,model:s}:s;let a=await n.insert(e);return r.fullResponse?{isNew:true,model:a}:a}static async upsert(t,e,r={updateOnConflict:true}){let o=this,n=o.dispatchModelManager(r),s=await n.findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:t});return s?(e[o.primaryKey]=s[o.primaryKey],r.updateOnConflict?await n.updateRecord(e,{returning:r.returning}):s):await n.insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning??["*"]})}static async upsertMany(t,e,r={updateOnConflict:true}){if(!e.length)return [];let o=this,n=o.dispatchModelManager(r);if(!e.every(c=>{let u=new Set(Object.keys(c));return t.every(p=>u.has(p))}))throw new f("Model::upsertMany","CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA");let s=Object.keys(e[0]),a=await n.upsertMany(t,s,e,{ignoreHooks:r.ignoreHooks,returning:r.returning,updateOnConflict:r.updateOnConflict||true}),l=o.sqlInstance.getDbType();if(Ms.includes(l))return await te(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let m=new Map;return t.forEach(c=>{e.forEach(u=>{m.set(c,[...m.get(c)||[],u[c]]);});}),d.where(c=>{t.forEach(u=>{c.orWhereIn(u,m.get(u)||[]);});}),d.many({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async deleteRecord(t,e){return this.dispatchModelManager(e).deleteRecord(t)}static async softDelete(t,e,r){let o=this,{column:n=o.softDeleteColumn,value:s=o.softDeleteValue}=e||{};return t[n]=s,await o.dispatchModelManager({trx:r?.trx,connection:r?.connection}).updateRecord(t),typeof s=="string"?(t[n]=new Date(s),t):(t[n]=s,t)}static async truncate(t={}){return this.dispatchModelManager(t).query().truncate()}static async getTableInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getTableInfo(t.table)}static async getIndexInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getIndexInfo(t.table)}static async getTableSchema(){let t=this;return t.establishConnection(),t.sqlInstance.getTableSchema(t.table)}static combineProps(t,e){for(let r in e)Object.assign(t,{[r]:e[r]});}static getColumns(){return pt(this)}static getRelations(){return Ps(this)}static getIndexes(){return Os(this)}static getUniques(){return Is(this)}static column(t,...e){v(...e)(this.prototype,t);}static hasOne(t,...e){Rs(...e)(this.prototype,t);}static hasMany(t,...e){xs(...e)(this.prototype,t);}static belongsTo(t,...e){_s(...e)(this.prototype,t);}static manyToMany(t,...e){As(...e)(this.prototype,t);}static establishConnection(){let t=fe.getInstance();if(!t)throw new f("sqlInstance not initialized, did you defined it in SqlDataSource.connect static method?","CONNECTION_NOT_ESTABLISHED");this.sqlInstance=t;}static dispatchModelManager(t){if(t?.connection)return t.connection.getModelManager(this);if(t?.trx)return t.trx.sql.getModelManager(this);let e=this;return e.establishConnection(),e.sqlInstance.getModelManager(e)}};Le.softDeleteColumn="deletedAt",Le.softDeleteValue=ut();var ct=Le;var re=class{constructor(t,e){this.model=ct;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var ft=class extends re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var ht=class extends re{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var gt=class extends re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Tt=class extends re{constructor(e,r,o){super(e,r);this.type="manyToMany";this.primaryModel=o.primaryModel,this.relatedModel=e.table,this.throughModel=o.throughModel,this.leftForeignKey=o.leftForeignKey,this.rightForeignKey=o.rightForeignKey;}};var bt=Symbol("columns"),St=Symbol("primaryKey"),Y=Symbol("relations"),vs=Symbol("indexes"),$s=Symbol("uniques"),he=i=>`${rd__default.default.singular(i)}_id`,hr=(i,t)=>`idx_${i}_${t}`,J=(i,t)=>`uq_${i}_${t}`,E=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,ge=(i,t)=>`pk_${i}_${t}`;function v(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(Reflect.getMetadata(St,e))throw new f("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");Reflect.defineMetadata(St,r,e);}let n=i.databaseName??O(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,hidden:i.hidden,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??ge(o.table,r),autoUpdate:i.autoUpdate,databaseName:n,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,constraints:{nullable:i.nullable,default:i.default}},a=Reflect.getMetadata(bt,e)||[];a.push(s),Reflect.defineMetadata(bt,a,e);}}v.primary=sd;v.date=pd;v.boolean=cd;v.json=yd;v.uuid=ld;v.ulid=dd;v.integer=ad;v.float=id;v.encryption={symmetric:md,asymmetric:ud};function sd(i={}){return v({...i,primaryKey:true})}function id(i={}){return v({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseFloat(t)}})}function ad(i={}){return v({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)}})}function ld(i={}){return v({type:"uuid",...i,prepare:t=>t||ae__default.default.randomUUID()})}function dd(i={}){return v({type:"ulid",...i,prepare:t=>t||ws()})}function md(i){return v({...i,prepare:t=>t&&Ts(i.key,t),serialize:t=>t&&bs(i.key,t)})}function ud(i){return v({...i,prepare:t=>t&&Ss(i.publicKey,t),serialize:t=>t&&Ns(i.privateKey,t)})}function cd(i={}){return v({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function pd(i={}){let{format:t="ISO",timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i;return v({type:"datetime",...n,autoUpdate:r,prepare:s=>s?r?mt(new Date,t,e):typeof s=="string"?s:mt(s,t,e):o?mt(new Date,t,e):null,serialize:s=>{if(s!==void 0)return s===null?null:gs(s,t,e)}})}function yd(i={}){return v({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function pt(i){try{return Reflect.getMetadata(bt,i.prototype)||[]}catch{return []}}function _s(i,t,e){return (r,o)=>{let n=()=>he(i().table),s=()=>{let d=r.constructor.table,m=t||n();return E(d,m,i().table)},a={type:"belongsTo",columnName:o,model:i,foreignKey:t?String(t):n,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=Reflect.getMetadata(Y,r)||[];l.push(a),Reflect.defineMetadata(Y,l,r);}}function Rs(i,t){return (e,r)=>{let o=()=>he(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=Reflect.getMetadata(Y,e)||[];s.push(n),Reflect.defineMetadata(Y,s,e);}}function xs(i,t){return (e,r)=>{let o=()=>he(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=Reflect.getMetadata(Y,e)||[];s.push(n),Reflect.defineMetadata(Y,s,e);}}function As(i,t,e,r){return (o,n)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",d=typeof t=="string"?t:()=>t().table,m=o.constructor.table,c=()=>he(m),u=()=>he(i().table),p=()=>E(N(d),s?String(s):c()),g={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:m,throughModel:d,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):u,wasModelProvided:l}},h=Reflect.getMetadata(Y,o)||[];h.push(g),Reflect.defineMetadata(Y,h,o);}}function Ps(i){return Reflect.getMetadata(Y,i.prototype)||[]}function yt(i){return (Reflect.getMetadata(Y,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=N(s),l=o();switch(r){case "belongsTo":return new ft(l,n,a);case "hasOne":return new gt(l,n,a);case "hasMany":return new ht(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new f("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Tt(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:N(e.manyToManyOptions.throughModel),leftForeignKey:N(e.manyToManyOptions.leftForeignKey),rightForeignKey:N(e.manyToManyOptions.rightForeignKey)});default:throw new f("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Ds(i){return Reflect.getMetadata(St,i.prototype)}function Os(i){return Reflect.getMetadata(vs,i.prototype)||[]}function Is(i){return Reflect.getMetadata($s,i.prototype)||[]}var y=class{constructor(t){this.model=t;let e=pt(t);this.modelColumnsMap=new Map(e.map(r=>[r.columnName,r]));}formatStringColumn(t,e){if(e==="*")return "*";if(e.includes(".")){let[n,s]=e.split(".");if(s==="*")switch(t){case "mysql":case "mariadb":return `\`${n}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${n}".*`;default:throw new Error(`Unsupported database type: ${t}`)}let a=this.modelColumnsMap.get(s)?.databaseName??O(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${n}"."${a}"`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??O(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;default:throw new Error(`Unsupported database type: ${t}`)}}formatStringTable(t,e){switch(t){case "mysql":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;default:return e}}prepareColumns(t,e,r="insert"){if(!t.length)return {columns:t,values:e};let o=[],n=[];for(let s=0;s<t.length;s++){let a=t[s],l=e[s];a==="*"||a==="$annotations"||(o.push(a),n.push(l));}for(let s=0;s<o.length;s++){let a=o[s],l=n[s],d=this.modelColumnsMap.get(a),m=l;d&&(r==="insert"&&d.prepare?m=d.prepare(l):r==="update"&&(m=d.prepare?.(l)??l)),n[s]=m;}for(let s of this.modelColumnsMap.keys())if(!o.includes(s)){let a=this.modelColumnsMap.get(s);if(!a||r==="insert"&&s===this.model.primaryKey&&!a.prepare)continue;(r==="insert"||a.autoUpdate)&&(o.push(s),n.push(a.prepare?.(void 0)??void 0));}return {columns:o,values:n}}};var gr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"mysql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:g}=n.parse([u]);if(u.file==="add_column")s.push(p);else if(u.file==="add_constraint"||u.folder==="constraint"){let h=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(h),_=/^\s*add\s+constraint\b/i.test(p);if(w&&!_){let D=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${h} ${D}`;}else {let D=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(D);}}else u.file==="set_default"||u.file==="drop_default"||u.file==="set_not_null"||u.file,s.push(p);a.push(...g);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},Es=new gr;var Tr=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Bs=new Tr;var br=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Qs=new br;var Sr=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Ks=new Sr;var Nr=class{toSql(t){return {sql:"",bindings:[]}}},ks=new Nr;var wr=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Ls=new wr;var Mr=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Us=new Mr;var qr=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Ws=new qr;var Cr=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Fs=new Cr;var _r=class{toSql(t){return {sql:"",bindings:[]}}},Vs=new _r;var Rr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")return {sql:`${o} ${n}`,bindings:[]};if(n==="integer"||n==="int"){let s="int";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} mediumint`,bindings:[]};if(n==="bigint"){let s="bigint";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="float")return {sql:`${o} float`,bindings:[]};if(n==="double")return {sql:`${o} double`,bindings:[]};if(n==="real")return {sql:`${o} double`,bindings:[]};if(n==="decimal"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}else if(n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`.trimEnd(),bindings:[]}}else if(n==="datetime"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime${s}`.trimEnd(),bindings:[]}}else if(n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${s}`.trimEnd(),bindings:[]}}else {if(n==="year")return {sql:`${o} year`,bindings:[]};if(n==="boolean")return {sql:`${o} boolean`,bindings:[]};if(n==="varbinary"){let s=e.length??255;return {sql:`${o} varbinary(${s})`,bindings:[]}}else if(n==="binary"){let s=e.length??255;return {sql:`${o} binary(${s})`,bindings:[]}}else {if(n==="bytea"||n==="blob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} json`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} enum(${s})`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}}}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},js=new Rr;var xr=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Hs=new xr;var Ar=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",N(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${o})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns.map(s=>r.formatStringColumn("mysql",N(s))).join(", "),n=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o==="NULL"?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:o===null?{sql:"default null",bindings:[]}:(typeof o=="string"&&(o=`'${o}'`),{sql:`default ${o}`,bindings:[]})}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(d=>r.formatStringColumn("mysql",N(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",N(d))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Ys=new Ar;var Pr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${g} ${h}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(g),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Js=new Pr;var Dr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("mysql",e.table),bindings:[]}}},zs=new Dr;var Or=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gs=new Or;var Ir=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Zs=new Ir;var vr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Xs=new vr;var $r=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},ei=new $r;var Er=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},ti=new Er;var T=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Br=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof T)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},ri=new Br;var Qr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},oi=new Qr;var Kr=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},ni=new Kr;var kr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("mysql",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],d=[];for(let c of e.records){let u=s.map(g=>c[g]);l.push(...u);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},si=new kr;var Lr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mysql",o),a=r.formatStringColumn("mysql",n);return {sql:`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},ii=new Lr;var Ur=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ai=new Ur;var fd={for_update:"for update",for_share:"lock in share mode"},Wr=class{toSql(t){let e=t,r=fd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},li=new Wr;var Fr=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},di=new Fr;var Vr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);return e.mode==="ignore"?{sql:"ON DUPLICATE KEY IGNORE",bindings:[]}:{sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},mi=new Vr;var jr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},ui=new jr;var Hr=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ci=new Hr;var Yr=class{toSql(t){return {sql:`SELECT
112
112
  k.CONSTRAINT_NAME AS name,
113
113
  k.COLUMN_NAME AS column_name,
114
114
  k.REFERENCED_TABLE_NAME AS referenced_table,
@@ -124,7 +124,7 @@ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]
124
124
  COLUMN_NAME AS column_name
125
125
  FROM information_schema.KEY_COLUMN_USAGE k
126
126
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
127
- ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},fi=new zr;var Gr=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},hi=new Gr;var Zr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"mysql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"mysql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},gi=new Zr;var Xr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("mysql",e.table),bindings:[]}}},Ti=new Xr;var eo=class{toSql(t){let e=t,r=new S(this.model,"mysql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},bi=new eo;var re=class extends g{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var to=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("mysql",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof re?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} SET ${s}`,bindings:n}}},Si=new to;var ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},Ni=new ro;var oo=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new S(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},wi=new oo;var no=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${n} = CAST(? AS JSON)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Mi=new no;var so=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"mysql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},qi=new so;var io=class{toSql(t){let e=t,r=new S(this.model,"mysql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},Ci=new io;var ao=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},_i=new ao;var lo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Ri=new lo;var mo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},xi=new mo;var uo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Ai=new uo;var co=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);s.push(u.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},Pi=new co;var po=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Di=new po;var yo=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Oi=new yo;var fo=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Ii=new fo;var ho=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},vi=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},Ei=new go;var To=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},$i=new To;var bo=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Bi=new bo;var So=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Qi=new So;var No=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Ki=new No;var wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} uuid`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigserial`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} smallint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} double precision`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with time zone":" without time zone",a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${a}${s}`.trimEnd(),bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} boolean`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} bytea`,bindings:[]};if(n==="json")return {sql:`${o} json`,bindings:[]};if(n==="jsonb")return {sql:`${o} jsonb`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} text check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}else if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},ki=new wo;var Mo=class{toSql(t){return {sql:"",bindings:[]}}},Li=new Mo;var qo=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("postgres",N(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("postgres",N(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o==="NULL"?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:o===null?{sql:"default null",bindings:[]}:(typeof o=="string"&&(o=`'${o}'`),{sql:`default ${o}`,bindings:[]})}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("postgres",N(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("postgres",N(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Ui=new qo;var Co=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let T=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${T} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(T),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Wi=new Co;var _o=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("postgres",e.table),bindings:[]}}},Fi=new _o;var Ro=class{toSql(t){return {sql:"",bindings:[]}}},Vi=new Ro;var xo=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},ji=new xo;var Ao=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Hi=new Ao;var Po=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Yi=new Po;var Do=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Ji=new Do;var Oo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof g)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},zi=new Oo;var Io=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Gi=new Io;var vo=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Zi=new vo;var Eo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("postgres",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(u=>r.formatStringColumn("postgres",u)).join(", "),l=[],d=[],m=e.currParamIndex;for(let u of e.records){let p=s.map(h=>u[h]);l.push(...p);let T=s.map((h,w)=>{let x=p[w];return `$${m++}${this.formatTypeCast(x)}`}).join(", ");d.push(`(${T})`);}let c=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let u=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");c+=` returning ${u}`;}else c+=" returning *";return {sql:c,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Xi=new Eo;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("postgres",o),a=r.formatStringColumn("postgres",n);return {sql:`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},ea=new $o;var Bo=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},ta=new Bo;var hd={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Qo=class{toSql(t){let e=t,r=hd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" no wait"),{sql:r,bindings:[]}}},ra=new Qo;var Ko=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},oa=new Ko;var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("postgres",a)).join(", ");if(e.mode==="ignore")return {sql:`on conflict (${o}) do nothing`,bindings:[]};let n=e.columnsToUpdate.map(a=>`${r.formatStringColumn("postgres",a)} = excluded.${r.formatStringColumn("postgres",a)}`).join(", "),s=`on conflict (${o}) do update set ${n}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}else s+=" returning *";return {sql:s,bindings:[]}}},na=new ko;var Lo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},sa=new Lo;var Uo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ia=new Uo;var Wo=class{toSql(t){return {sql:`SELECT
127
+ ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},fi=new zr;var Gr=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},hi=new Gr;var Zr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"mysql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"mysql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},gi=new Zr;var Xr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("mysql",e.table),bindings:[]}}},Ti=new Xr;var eo=class{toSql(t){let e=t,r=new S(this.model,"mysql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},bi=new eo;var oe=class extends T{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var to=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("mysql",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof oe?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} SET ${s}`,bindings:n}}},Si=new to;var ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},Ni=new ro;var oo=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new S(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},wi=new oo;var no=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${n} = CAST(? AS JSON)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Mi=new no;var so=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"mysql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},qi=new so;var io=class{toSql(t){let e=t,r=new S(this.model,"mysql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},Ci=new io;var ao=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},_i=new ao;var lo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Ri=new lo;var mo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},xi=new mo;var uo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Ai=new uo;var co=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);s.push(u.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},Pi=new co;var po=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Di=new po;var yo=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Oi=new yo;var fo=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Ii=new fo;var ho=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},vi=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},$i=new go;var To=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Ei=new To;var bo=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Bi=new bo;var So=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Qi=new So;var No=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Ki=new No;var wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} uuid`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigserial`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} smallint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} double precision`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with time zone":" without time zone",a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${a}${s}`.trimEnd(),bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} boolean`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} bytea`,bindings:[]};if(n==="json")return {sql:`${o} json`,bindings:[]};if(n==="jsonb")return {sql:`${o} jsonb`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} text check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}else if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},ki=new wo;var Mo=class{toSql(t){return {sql:"",bindings:[]}}},Li=new Mo;var qo=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("postgres",N(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("postgres",N(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o==="NULL"?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:o===null?{sql:"default null",bindings:[]}:(typeof o=="string"&&(o=`'${o}'`),{sql:`default ${o}`,bindings:[]})}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("postgres",N(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("postgres",N(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Ui=new qo;var Co=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${g} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(g),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Wi=new Co;var _o=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("postgres",e.table),bindings:[]}}},Fi=new _o;var Ro=class{toSql(t){return {sql:"",bindings:[]}}},Vi=new Ro;var xo=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},ji=new xo;var Ao=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Hi=new Ao;var Po=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Yi=new Po;var Do=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Ji=new Do;var Oo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof T)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},zi=new Oo;var Io=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Gi=new Io;var vo=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Zi=new vo;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("postgres",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(u=>r.formatStringColumn("postgres",u)).join(", "),l=[],d=[],m=e.currParamIndex;for(let u of e.records){let p=s.map(h=>u[h]);l.push(...p);let g=s.map((h,w)=>{let _=p[w];return `$${m++}${this.formatTypeCast(_)}`}).join(", ");d.push(`(${g})`);}let c=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let u=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");c+=` returning ${u}`;}else c+=" returning *";return {sql:c,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Xi=new $o;var Eo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("postgres",o),a=r.formatStringColumn("postgres",n);return {sql:`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},ea=new Eo;var Bo=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},ta=new Bo;var hd={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Qo=class{toSql(t){let e=t,r=hd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},ra=new Qo;var Ko=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},oa=new Ko;var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("postgres",a)).join(", ");if(e.mode==="ignore")return {sql:`on conflict (${o}) do nothing`,bindings:[]};let n=e.columnsToUpdate.map(a=>`${r.formatStringColumn("postgres",a)} = excluded.${r.formatStringColumn("postgres",a)}`).join(", "),s=`on conflict (${o}) do update set ${n}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}else s+=" returning *";return {sql:s,bindings:[]}}},na=new ko;var Lo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},sa=new Lo;var Uo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ia=new Uo;var Wo=class{toSql(t){return {sql:`SELECT
128
128
  tc.constraint_name as name,
129
129
  kcu.column_name as column_name,
130
130
  ccu.table_name as referenced_table,
@@ -175,12 +175,12 @@ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]
175
175
  FROM information_schema.columns
176
176
  WHERE table_schema = current_schema()
177
177
  AND table_name = '${t.table}'
178
- ORDER BY ordinal_position`,bindings:[]}}},ma=new jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"postgres").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"postgres").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},ua=new Ho;var Yo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("postgres",e.table),bindings:[]}}},ca=new Yo;var Jo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},pa=new Jo;var zo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("postgres",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((l,d)=>{let m=e.currParamIndex+d-n,c=e.values[d];return c instanceof re?(n++,`${r.formatStringColumn("postgres",l)} = ${c.rawValue}`):(s.push(c),`${r.formatStringColumn("postgres",l)} = $${m}${this.formatTypeCast(c)}`)}).join(", ");return {sql:`${o} SET ${a}`,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},ya=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;o=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},fa=new Go;var Zo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new S(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ha=new Zo;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":o=`${s} = $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "not contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},ga=new Xo;var en=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"postgres"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Ta=new en;var tn=class{toSql(t){let e=t,r=new S(this.model,"postgres"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${n.sql})`,bindings:n.bindings}}},ba=new tn;var rn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Sa=new rn;var on=class{toSql(t){return {sql:"",bindings:[]}}},Na=new on;var nn=class{toSql(t){return {sql:"",bindings:[]}}},wa=new nn;var sn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"sqlite"),s=[],a=[],l=false;for(let u of e.children){let{sql:p,bindings:T}=n.parse([u]);if(!(!p||!p.trim())){if(u.file==="add_column")s.push(p),l=true;else if(u.file==="add_constraint"&&l){let h=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${h} ${w}`);}else {if(u.file==="set_not_null"||u.file==="drop_not_null")continue;if(u.file==="set_default"||u.file==="drop_default")continue;s.push(p),l=false;}a.push(...T);}}let d=s.join(", "),m=e.ifExists?"if exists ":"";return d.trim()?{sql:`${m}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},Ma=new sn;var an=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qa=new an;var ln=class{toSql(t){return {sql:"",bindings:[]}}},Ca=new ln;var dn=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},_a=new dn;var mn=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Ra=new mn;var un=class{toSql(t){return {sql:"",bindings:[]}}},xa=new un;var cn=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Aa=new cn;var pn=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Pa=new pn;var yn=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Da=new yn;var fn=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Oa=new fn;var hn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"||n==="varchar")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n.includes("text"))return {sql:`${o} text`,bindings:[]};if(n==="integer"||n==="bigint"||n==="int")return {sql:`${o} integer`,bindings:[]};if(n==="tinyint")return {sql:`${o} integer`,bindings:[]};if(n==="smallint")return {sql:`${o} integer`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="double")return {sql:`${o} real`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}return n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"?{sql:`${o} text`,bindings:[]}:n==="boolean"?{sql:`${o} integer`,bindings:[]}:n==="json"||n==="jsonb"?{sql:`${o} text`,bindings:[]}:n==="enum"?{sql:`${o} text`,bindings:[]}:n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob"?{sql:`${o} blob`,bindings:[]}:n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]}:{sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Ia=new hn;var gn=class{toSql(t){return {sql:"",bindings:[]}}},va=new gn;var Tn=class{toSql(t){let e=t,r=new y(this.model),o=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let n=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return n&&(s==="integer"||s==="bigint")?{sql:`${o}primary key autoincrement`,bindings:[]}:{sql:`${o}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let n=e.columns.map(s=>r.formatStringColumn("sqlite",N(s))).join(", ");return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n==="NULL"?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:n===null?{sql:"default null",bindings:[]}:(typeof n=="string"&&(n=`'${n}'`),{sql:`default ${n}`,bindings:[]})}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",N(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",N(d))).join(", "),l=`${o}foreign key (${n}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Ea=new Tn;var bn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"sqlite"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let T=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)||/primary key/i.test(h)){let w=`${T} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(T),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},$a=new bn;var Sn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("sqlite",e.table),bindings:[]}}},Ba=new Sn;var Nn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Qa=new Nn;var wn=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Ka=new wn;var Mn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},ka=new Mn;var qn=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},La=new qn;var Cn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Ua=new Cn;var _n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof g)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Wa=new _n;var Rn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Fa=new Rn;var xn=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Va=new xn;var An=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("sqlite",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],d=[];for(let c of e.records){let u=s.map(T=>c[T]);l.push(...u);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},ja=new An;var Pn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("sqlite",o),a=r.formatStringColumn("sqlite",n);return {sql:`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},Ha=new Pn;var Dn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Ya=new Dn;var On=class{toSql(t){return {sql:"",bindings:[]}}},Ja=new On;var In=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},za=new In;var vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},Ga=new vn;var En=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Za=new En;var $n=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xa=new $n;var Bn=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},el=new Bn;var Qn=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},tl=new Qn;var Kn=class{toSql(t){return {sql:`SELECT
178
+ ORDER BY ordinal_position`,bindings:[]}}},ma=new jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"postgres").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"postgres").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},ua=new Ho;var Yo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("postgres",e.table),bindings:[]}}},ca=new Yo;var Jo=class{toSql(t){let e=t,r=new S(this.model,"postgres"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},pa=new Jo;var zo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("postgres",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((l,d)=>{let m=e.currParamIndex+d-n,c=e.values[d];return c instanceof oe?(n++,`${r.formatStringColumn("postgres",l)} = ${c.rawValue}`):(s.push(c),`${r.formatStringColumn("postgres",l)} = $${m}${this.formatTypeCast(c)}`)}).join(", ");return {sql:`${o} SET ${a}`,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},ya=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;o=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},fa=new Go;var Zo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new S(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ha=new Zo;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":o=`${s} = $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "not contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},ga=new Xo;var en=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"postgres"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Ta=new en;var tn=class{toSql(t){let e=t,r=new S(this.model,"postgres"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${n.sql})`,bindings:n.bindings}}},ba=new tn;var rn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Sa=new rn;var on=class{toSql(t){return {sql:"",bindings:[]}}},Na=new on;var nn=class{toSql(t){return {sql:"",bindings:[]}}},wa=new nn;var sn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new S(this.model,"sqlite"),s=[],a=[],l=false;for(let u of e.children){let{sql:p,bindings:g}=n.parse([u]);if(!(!p||!p.trim())){if(u.file==="add_column")s.push(p),l=true;else if(u.file==="add_constraint"&&l){let h=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${h} ${w}`);}else {if(u.file==="set_not_null"||u.file==="drop_not_null")continue;if(u.file==="set_default"||u.file==="drop_default")continue;s.push(p),l=false;}a.push(...g);}}let d=s.join(", "),m=e.ifExists?"if exists ":"";return d.trim()?{sql:`${m}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},Ma=new sn;var an=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qa=new an;var ln=class{toSql(t){return {sql:"",bindings:[]}}},Ca=new ln;var dn=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},_a=new dn;var mn=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Ra=new mn;var un=class{toSql(t){return {sql:"",bindings:[]}}},xa=new un;var cn=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Aa=new cn;var pn=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Pa=new pn;var yn=class{toSql(t){let e=t,r=e.defaultValue;return r==="NULL"?r="null":r==="TRUE"||r==="FALSE"?r=r.toLowerCase():typeof r=="string"&&r!=="null"&&r!=="true"&&r!=="false"&&(r=`'${r}'`),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Da=new yn;var fn=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Oa=new fn;var hn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",N(e.column)),n=e.dataType.toLowerCase();if(n==="char"||n==="varchar")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n.includes("text"))return {sql:`${o} text`,bindings:[]};if(n==="integer"||n==="bigint"||n==="int")return {sql:`${o} integer`,bindings:[]};if(n==="tinyint")return {sql:`${o} integer`,bindings:[]};if(n==="smallint")return {sql:`${o} integer`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="double")return {sql:`${o} real`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}return n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"?{sql:`${o} text`,bindings:[]}:n==="boolean"?{sql:`${o} integer`,bindings:[]}:n==="json"||n==="jsonb"?{sql:`${o} text`,bindings:[]}:n==="enum"?{sql:`${o} text`,bindings:[]}:n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob"?{sql:`${o} blob`,bindings:[]}:n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]}:{sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Ia=new hn;var gn=class{toSql(t){return {sql:"",bindings:[]}}},va=new gn;var Tn=class{toSql(t){let e=t,r=new y(this.model),o=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let n=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return n&&(s==="integer"||s==="bigint")?{sql:`${o}primary key autoincrement`,bindings:[]}:{sql:`${o}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let n=e.columns.map(s=>r.formatStringColumn("sqlite",N(s))).join(", ");return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n==="NULL"?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:n===null?{sql:"default null",bindings:[]}:(typeof n=="string"&&(n=`'${n}'`),{sql:`default ${n}`,bindings:[]})}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",N(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",N(d))).join(", "),l=`${o}foreign key (${n}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},$a=new Tn;var bn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new S(this.model,"sqlite"),s=[],a=[];for(let c of e.children){let{sql:u,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",h=u;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)||/primary key/i.test(h)){let w=`${g} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(g),s.push(h),a.push(...p);continue}s.push(u),a.push(...p);}for(let c of e.namedConstraints){let{sql:u,bindings:p}=n.parse([c]);s.push(u),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Ea=new bn;var Sn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:{sql:new y(this.model).formatStringTable("sqlite",e.table),bindings:[]}}},Ba=new Sn;var Nn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Qa=new Nn;var wn=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Ka=new wn;var Mn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},ka=new Mn;var qn=class{toSql(t){let e=t;if(typeof e.table=="string")return e.alias&&e.alias.length>0?{sql:`${new y(this.model).formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:e.table,bindings:[]};let r=Array.isArray(e.table)?e.table:[e.table],n=new S(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},La=new qn;var Cn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Ua=new Cn;var _n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof T)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Wa=new _n;var Rn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Fa=new Rn;var xn=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Va=new xn;var An=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=r.formatStringTable("sqlite",e.table);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],d=[];for(let c of e.records){let u=s.map(g=>c[g]);l.push(...u);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},ja=new An;var Pn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("sqlite",o),a=r.formatStringColumn("sqlite",n);return {sql:`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},Ha=new Pn;var Dn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Ya=new Dn;var On=class{toSql(t){return {sql:"",bindings:[]}}},Ja=new On;var In=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},za=new In;var vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},Ga=new vn;var $n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Za=new $n;var En=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xa=new En;var Bn=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},el=new Bn;var Qn=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},tl=new Qn;var Kn=class{toSql(t){return {sql:`SELECT
179
179
  'PRIMARY' as name,
180
180
  name as column_name
181
181
  FROM pragma_table_info('${t.table}')
182
182
  WHERE pk > 0
183
- ORDER BY pk`,bindings:[]}}},rl=new Kn;var kn=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},ol=new kn;var Ln=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"sqlite").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"sqlite").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},nl=new Ln;var Un=class{toSql(t){let e=t;if(e.isRawValue)return e.keyword="",{sql:e.table,bindings:[]};let r=new y(this.model).formatStringTable("sqlite",e.table);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},sl=new Un;var Wn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},il=new Wn;var Fn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("sqlite",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof re?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} SET ${s}`,bindings:n}}},al=new Fn;var Vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},ll=new Vn;var jn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new S(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},dl=new jn;var Hn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},ml=new Hn;var Yn=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"sqlite"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ul=new Yn;var Jn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},cl=new Jn;var pl={mysql:{alter_table:{add_column:ps,add_constraint:ys,add_primary_key:fs,alter_column_type:hs,alter_table:$s,drop_column:Bs,drop_constraint:Qs,drop_default:Ks,drop_not_null:ks,drop_primary_key:Ls,rename_column:Us,rename_table:Ws,set_default:Fs,set_not_null:Vs},case_when:{},column:{column_type:js},constraint:{after:Hs,constraint:Ys},create_table:{create_table:Js},delete:{delete:zs},distinct:{distinct:Gs,distinct_on:Zs},drop_table:{drop_table:Xs},from:{from:ei},group_by:{group_by:ti},having:{having:ri},index_op:{create_index:oi,drop_index:ni},insert:{insert:si},join:{join:ii},limit:{limit:ai},lock:{lock:li},offset:{offset:di},on_duplicate:{on_duplicate:mi},order_by:{order_by:ui},raw:{raw:ci},schema:{foreign_key_info:pi,index_info:yi,primary_key_info:fi,table_info:hi},select:{select:gi},truncate:{truncate:Ti},union:{union:bi},update:{update:Si},where:{where:Ni,where_group:wi,where_json:Mi,where_subquery:qi},with:{with:Ci}},postgres:{alter_table:{add_column:_i,add_constraint:Ri,add_primary_key:xi,alter_column_type:Ai,alter_table:Pi,drop_column:Di,drop_constraint:Oi,drop_default:Ii,drop_not_null:vi,drop_primary_key:Ei,rename_column:$i,rename_table:Bi,set_default:Qi,set_not_null:Ki},case_when:{},column:{column_type:ki},constraint:{after:Li,constraint:Ui},create_table:{create_table:Wi},delete:{delete:Fi},distinct:{distinct:Vi,distinct_on:ji},drop_table:{drop_table:Hi},from:{from:Yi},group_by:{group_by:Ji},having:{having:zi},index_op:{create_index:Gi,drop_index:Zi},insert:{insert:Xi},join:{join:ea},limit:{limit:ta},lock:{lock:ra},offset:{offset:oa},on_duplicate:{on_duplicate:na},order_by:{order_by:sa},raw:{raw:ia},schema:{foreign_key_info:aa,index_info:la,primary_key_info:da,table_info:ma},select:{select:ua},truncate:{truncate:ca},union:{union:pa},update:{update:ya},where:{where:fa,where_group:ha,where_json:ga,where_subquery:Ta},with:{with:ba}},sqlite:{alter_table:{add_column:Sa,add_constraint:Na,alter_column_type:wa,alter_table:Ma,drop_column:qa,drop_constraint:Ca,drop_default:_a,drop_not_null:Ra,drop_primary_key:xa,rename_column:Aa,rename_table:Pa,set_default:Da,set_not_null:Oa},case_when:{},column:{column_type:Ia},constraint:{after:va,constraint:Ea},create_table:{create_table:$a},delete:{delete:Ba},distinct:{distinct:Qa,distinct_on:Ka},drop_table:{drop_table:ka},from:{from:La},group_by:{group_by:Ua},having:{having:Wa},index_op:{create_index:Fa,drop_index:Va},insert:{insert:ja},join:{join:Ha},limit:{limit:Ya},lock:{lock:Ja},offset:{offset:za},on_duplicate:{on_duplicate:Ga},order_by:{order_by:Za},raw:{raw:Xa},schema:{foreign_key_info:el,index_info:tl,primary_key_info:rl,table_info:ol},select:{select:nl},truncate:{truncate:sl},union:{union:il},update:{update:al},where:{where:ll,where_group:dl,where_json:ml,where_subquery:ul},with:{with:cl}}};var S=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let o=t.filter(d=>d!==null),n=[],s=[],a=null;for(let d=0;d<o.length;d++){let m=o[d];m.currParamIndex=e+s.length;let c=pl[this.mapCommonDbType(this.dbType)][m.folder][m.file];if(!c)throw new Error(`Interpreter not found for ${this.dbType} ${m.keyword}`);c.model=this.model;let u=c.toSql(m);if(!u.sql||!u.sql.trim().length)continue;let p=o[d+1],h=!p||p.keyword!==m.keyword?"":p.chainsWith;if(m.folder==="lock"||m.folder==="on_duplicate"||m.folder==="schema"){n.push(`${u.sql}${h}`),s.push(...u.bindings),a=m.keyword;continue}if(a!==m.keyword||m.canKeywordBeSeenMultipleTimes){if(r)n.push(`${u.sql}${h}`);else {let w=m.keyword;if(m.folder==="with"){let x=d,O=false;for(;x<o.length&&o[x].keyword===m.keyword;){let G=o[x];if(G.folder==="with"&&G.clause==="recursive"){O=true;break}x++;}O&&(w=`${w} recursive`);}n.push(`${w} ${u.sql}${h}`);}a=m.keyword;}else n.push(`${u.sql}${h}`);s.push(...u.bindings);}return {sql:n.join(" "),bindings:s}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}};var Nt=class extends g{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var wt=class extends g{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Mt=class extends g{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var qt=class extends g{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Ct=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var oe=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var De=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var _t=class extends g{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=o;}};var de=class extends g{constructor(e,r=[],o=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=o;}};var Rt=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ne=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Ue=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var xt=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Oe=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var At=class extends g{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Pt=class extends g{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var We=class extends g{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Dt=class extends g{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var E=class extends g{constructor(e,r={},o=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=o;}};var Ot=class extends g{constructor(e,r=[],o=[],n=false){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=o,this.ifNotExists=n;}};var It=class extends g{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var vt=class extends g{constructor(e,r,o,n=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=o,this.unique=n;}};var Et=class extends g{constructor(e,r,o){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=o??false;}};var Ie=class extends g{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.table=e;}};var R=class extends g{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=o.length,this.precision=o.precision,this.scale=o.scale,this.enumValues=o.enumValues,this.withTimezone=o.withTimezone,this.autoIncrement=o.autoIncrement,this.isRawValue=o.isRawValue??false;}};var Fe=class extends g{constructor(e,r=false,o=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=o;}};var Me=class extends g{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var ve=class extends g{constructor(e,r,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=o,this.clause=e;}};var Te=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var $t=class extends g{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Bt=class extends Te{constructor(t,e,r,o,n=[],s="create_table"){super(e),this.columnNode=r,this.tableName=o,this.namedConstraints=n,this.context=s,this.sqlType=t;}primaryKey(t){let e=ge(this.tableName,N(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new E("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new E("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??$(this.tableName??"",N(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new E("foreign_key",{columns:[N(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new E("foreign_key",{columns:[N(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}notNullable(){return this.nodes.push(new E("not_null",{columns:[N(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new E("null",{columns:[N(this.columnNode.column)]})),this}default(t){let e;return t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new E("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new E("unique",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??H(this.tableName??"",N(this.columnNode.column))})),this):(this.namedConstraints.push(new E("unique",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName||H(this.tableName??"",N(this.columnNode.column))})),this)}after(t){return this.nodes.push(new $t(t)),this}handleSqliteAutoIncrement(t){return this.nodes.push(new E("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var qe=class extends Te{constructor(e,r,o,n){super(r);this.context="create_table";this.tableName=o,this.namedConstraints=[],this.context=n??"create_table",this.sqlType=e;}build(e){return this.nodes.push(e),new Bt(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}char(e,r=1){let o=new R(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new R(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new R(e,r);return this.build(o)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new R(e,"uuid");return this.build(r)}ulid(e){let r=new R(e,"ulid");return this.build(r)}integer(e,r=255){let o=new R(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new R(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new R(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new R(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new R(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new R(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new R(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new R(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new R(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new R(e,"numeric",{precision:r,scale:o});return this.build(n)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let o=new R(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new R(e,"time",{precision:r});return this.build(o)}year(e){let r=new R(e,"year");return this.build(r)}datetime(e,r){let o=new R(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}timestamp(e,r){let o=new R(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}boolean(e){let r=new R(e,"boolean");return this.build(r)}binary(e){let r=new R(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new R(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new R(e,"blob");return this.build(r)}tinyblob(e){let r=new R(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new R(e,"mediumblob");return this.build(r)}longblob(e){let r=new R(e,"longblob");return this.build(r)}json(e){let r=new R(e,"json");return this.build(r)}jsonb(e){let r=new R(e,"jsonb");return this.build(r)}enum(e,r){let o=new R(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new R(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new R(e,"",{isRawValue:true});return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Qt=class extends Te{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}addColumn(t){let e=[],r=new qe(this.sqlType,e,this.table),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(n),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=o.getNodes().filter(c=>{let u=c;return u.constraintType==="not_null"||u.constraintType==="null"||u.constraintType==="default"}),d=new Ct(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(c=>{let u=c;return u.constraintType==="unique"||u.constraintType==="foreign_key"||u.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new oe(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(u=>u.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=N(s.column),l=o.getNodes().find(u=>u.constraintType==="null"),m=o.getNodes().find(u=>u.constraintType==="not_null")||l,c=o.getNodes().find(u=>u.constraintType==="default");this.nodes.push(new _t(N(a),s,{})),m&&(m.constraintType==="not_null"?this.nodes.push(new Dt(N(a))):m.constraintType==="null"&&this.nodes.push(new xt(N(a)))),c&&(c.defaultValue===void 0||c.defaultValue===null?this.nodes.push(new Ue(N(a))):this.nodes.push(new We(N(a),c.defaultValue))),o.getNodes().forEach(u=>{let p=u;switch(p.constraintType){case "primary_key":this.addPrimaryKey(N(a));break;case "unique":this.unique(N(a),{constraintName:p.constraintName});break;case "foreign_key":this.addForeignKey(N(a),p.references?.table??"",N(p.references?.columns?.[0]??""),{constraintName:p.constraintName,onDelete:p.onDelete,onUpdate:p.onUpdate});break}});}dropColumn(t){this.nodes.push(new Rt(t));}renameColumn(t,e){this.nodes.push(new At(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ue(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new De([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new oe(new E(...t)));}addForeignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new oe(new E("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??$(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new oe(new E("unique",{columns:[t],constraintName:e?.constraintName??H(this.table,t)})));}setDefault(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new We(t,e));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=$(this.table,t,e);this.nodes.push(new ne(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new f("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??H(this.table,t);this.nodes.push(new ne(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ne(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new f("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Oe(t));}};var me=class{constructor(t){if(this.sqlType=t||A.DB_TYPE,!this.sqlType)throw new f("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawQuery(t){this.queryStatements.push(t);}runFile(t){if(!z__default.default.existsSync(t))throw new f("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=_e__default.default.basename(t),r=_e__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new f("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=z__default.default.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of n)this.rawQuery(s);}createTable(t,e,r){let o=new qe(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new S({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a=new Ot(t,n,o.getNamedConstraints(),r?.ifNotExists),l=s.parse([a]).sql,d=l.startsWith("create table")?l:`create table ${l}`;this.rawQuery(d);}alterTable(t,e){let r=[],o=new Qt(t,r,this.sqlType);if(e(o),!r.length)return;let n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let l=new de(t,s),d=n.parse([l]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),s=[];};for(let l of r)l.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(l);a();}dropTable(t,e=false){let r=new It(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new de(t,[new Pt(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new Ie(t),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r){Array.isArray(e)||(e=[e]);let o=r.constraintName||hr(t,e.join("_")),n=new vt(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new Et(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new De(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addUnique(t,e,r){let o=Array.isArray(e)?e:[e],n=r?.constraintName??H(t,o.join("_")),s=new E("unique",{columns:o,constraintName:n}),a=new de(t,[new oe(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=$(t,e,r),n=new ne(o),s=new de(t,[n]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let o=Array.isArray(e)?H(t,e.join("_")):H(t,e),n=r?.constraintName??o,s=new ne(n),a=new de(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Oe,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new E(...e),o=new de(t,[new oe(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ne(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAstInstance(t){return new S({table:t.table,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType)}};var Kt=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.registeredModels);}buildDropDependencies(t){let e=new Map,r=new Map,o=new Map;for(let n of t.relationsToDrop||[]){let s=`${n.table}.${n.relation.name}`,a=[];if(n.relation.referencedTable&&a.push(`table.${n.relation.referencedTable}`),n.relation.referencedColumns)for(let l of n.relation.referencedColumns)a.push(`column.${n.relation.referencedTable}.${l}`);e.set(s,a);}for(let n of t.tablesToDrop||[]){let s=`table.${n.table}`,a=[];for(let l of this.models){let d=l.getRelations();for(let m of d)m.type==="belongsTo"&&m.model().table===n.table&&a.push(`fk.${l.table}.${m.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(d=>d.table===n.table);if(l){let d=l.getColumns().find(m=>m.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let m=l.getRelations();for(let c of m)c.columnName===d.columnName&&a.push(`fk.${n.table}.${c.constraintName}`);}}o.set(s,a);}return {foreignKeys:e,tables:r,constraints:o}}topologicalSortReverse(t,e){let r=new Set,o=new Set,n=[],s=a=>{if(o.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;o.add(a);let l=e(a);for(let d of l)s(d);o.delete(a),r.add(a),n.push(a);};for(let a of t.keys())r.has(a)||s(a);return n}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],o=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of o){let[a,l]=s.split("."),d=t.relationsToDrop?.find(m=>m.table===a&&m.relation.name===l);d&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:d,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(d)});}let n=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let d of l)d.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):d.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of n){let a=s.replace("table.",""),l=t.tablesToDrop?.find(d=>d.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let o=[],n=this.models.find(s=>s.table===r.table);if(n){let s=n.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&o.push(`PRIMARY KEY on ${r.table}`);let a=n.getRelations();for(let l of a)l.columnName===s.columnName&&o.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,o);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.models.find(n=>n.table===r.table);o&&o.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){return this.sql.getDbType()==="sqlite"?[]:t.relation.name?this.sql.alterTable(t.table,e=>{e.dropConstraint(t.relation.name);}):[]}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,e=>{e.dropPrimaryKey();})}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);})}generateDropColumnSql(t){return this.sql.alterTable(t.table,e=>{e.dropColumn(t.column);})}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var kt=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.registeredModels),this.dropResolver=new Kt(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,o=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),n=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...o].filter(l=>n.has(l)));return e.filter(l=>{let d=r(l);return d?!(s.has(d)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let o=this.sql.createTable(r.table,n=>{for(let s of r.columns){if(Array.isArray(s.type)){n.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,n,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}});e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[o]});}for(let r of t.columnsToAdd){let o=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:o});}return e}generateConstraintCreationOperations(t){let e=[];for(let o of t.uniquesToDrop||[]){let n=this.sql.alterTable(o.table,s=>{s.dropConstraint(o.name);});e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:n});}let r=new Set((t.uniquesToDrop||[]).map(o=>o.name));for(let o of t.indexesToDrop){if(r.has(o.index))continue;let n=new me(this.sql.getDbType());n.dropIndex(o.index,o.table);let s=n.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[s]});}for(let o of t.primaryKeysToAdd){let a=this.models.find(d=>d.table===o.table)?.getColumns().find(d=>d.columnName===o.columns[0])?.primaryKeyConstraintName||ge(o.table,o.columns[0]),l=this.sql.alterTable(o.table,d=>{let m=a||ge(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:m});});e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:a,data:o,dependencies:[`table.${o.table}`],sqlStatements:l});}for(let o of t.relationsToAdd){if(o.relation.type==="manyToMany")continue;let n=this.generateAddRelationViaAlter(o),s=this.computeFkConstraintName(o);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:s,data:o,dependencies:this.getForeignKeyDependencies(o),sqlStatements:n});}for(let o of t.uniquesToAdd||[]){let n=this.models.find(l=>l.table===o.table),s=(o.columns||[]).map(l=>n?.getColumns().find(m=>m.columnName===l)?.databaseName||l),a=this.sql.alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});});e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name||"mandatory",data:o,dependencies:[`table.${o.table}`],sqlStatements:a});}for(let o of t.indexesToAdd){let n=this.generateCreateIndexSql(o);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[n]});}return e}computeFkConstraintName(t){let e=N(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=N(t.relation.manyToManyOptions.throughModel));let n=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=n.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=n.find(l=>l.columnName===s)?.databaseName||s,$(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:o});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let o=t.relation.model();e.push(`table.${o.table}`);let n=o.primaryKey||"id",s=o.getColumns().find(a=>a.columnName===n);s&&e.push(`column.${o.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let o=N(t.relation.manyToManyOptions.throughModel);e.push(`table.${o}`);}e.push(`table.${t.table}`);let r=this.models.find(o=>o.table===t.table);if(r){let o=r.getColumns().find(n=>n.columnName===t.relation.columnName||n.databaseName===t.relation.columnName);o&&e.push(`column.${t.table}.${o.databaseName}`);}return e}executeBuilderMethod(t,e,r,o,n=true){let s=e[r.type](...o);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||ge(t,r.columnName)}),r.constraints?.default!==void 0&&s.default(r.constraints.default),r.constraints?.nullable===false?s.notNullable():r.constraints?.nullable===true&&s.nullable()),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,r=>{r.addColumn(o=>{let n=this.executeBuilderMethod(t.table,o,t.column,e,false);return t.column.constraints?.default!==void 0&&n.default(t.column.constraints.default),t.column.constraints?.nullable===false?n.notNullable():t.column.constraints?.nullable===true&&n.nullable(),n});})}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,o=>{o.alterColumn(n=>{let s=this.executeBuilderMethod(t.table,n,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0&&s.default(t.modelColumn.constraints.default),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.nullable(),s});})}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),o=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),n=new me(this.sql.getDbType());return n.createIndex(t.table,o,{constraintName:t.index}),n.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=N(t.relation.manyToManyOptions.throughModel),r=N(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let o=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,n=N(r);if(t.relation.type==="belongsTo"){let u=t.relation.model(),p=u.primaryKey,h=u.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=u?.databaseCaseConvention||"preserve";n=D(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let u=t.relation.model();if(typeof n=="string"&&n){let p=u.getColumns(),T=p.find(h=>h.columnName===n);if(T)n=T.databaseName;else {let h=u.primaryKey||"id",w=p.find(x=>x.columnName===h);if(w)n=w.databaseName;else {let x=u?.databaseCaseConvention||"preserve";n=D(n||h,x);}}}else {let p=u.primaryKey||"id",h=u.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=u?.databaseCaseConvention||"preserve";n=D(p,w);}}}let s=this.models.find(u=>u.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(u=>u.columnName===l);if(d)l=d.databaseName;else {let u=s?.databaseCaseConvention||"preserve";l=D(l,u);}if(t.relation.type==="belongsTo"){let u=a.find(p=>p.columnName===t.relation.foreignKey);if(u)l=u.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=D(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let u=t.relation.manyToManyOptions.leftForeignKey,p=N(u),T=a.find(h=>h.columnName===p);if(T)l=T.databaseName;else {let h=s?.databaseCaseConvention||"preserve";l=D(p,h);}}let m=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.alterTable(t.table,u=>{let p=o||$(t.table,l,e);u.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:m,onUpdate:c});})}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};function bd(i){return i.replace(/\s+/g," ").trim()}function Sd(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function be(i,t){let e=bd(t.toLowerCase()),r=Sd(e);switch(i){case "sqlite":{let o=[{test:n=>n.includes("int"),normalized:"integer"},{test:n=>n.includes("char"),normalized:"varchar"},{test:n=>n.includes("text"),normalized:"text"},{test:n=>n.includes("clob"),normalized:"text"},{test:n=>n.includes("date"),normalized:"text"},{test:n=>n.includes("time"),normalized:"text"},{test:n=>n.includes("timestamp"),normalized:"text"},{test:n=>n.includes("datetime"),normalized:"text"},{test:n=>n.includes("blob"),normalized:"blob"},{test:n=>n.includes("real")||n.includes("floa")||n.includes("doub"),normalized:"real"},{test:n=>n.includes("numeric"),normalized:"numeric"},{test:n=>n.includes("bool"),normalized:"integer"},{test:n=>n.includes("uuid"),normalized:"varchar"},{test:n=>n.includes("ulid"),normalized:"varchar"},{test:n=>n.includes("jsonb"),normalized:"text"},{test:n=>n.includes("json"),normalized:"text"}];for(let n of o)if(n.test(r))return n.normalized;return r}case "mysql":case "mariadb":{if(r.endsWith("text")||r==="text")return "text";switch(r){case "int":case "integer":return "integer";case "tinyint":return "tinyint";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":return "bigint";case "float":return "float";case "double":case "double precision":return "double";case "real":return "double";case "decimal":case "numeric":return "numeric";case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "uuid":return "varchar";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "timestamp":return "timestamp";case "time":return "time";case "year":return "year";case "jsonb":return "json";case "json":return "json";case "enum":return "enum";case "binary":return "binary";case "varbinary":return "varbinary";case "tinyblob":return "tinyblob";case "mediumblob":return "mediumblob";case "longblob":return "longblob";case "blob":return "blob";case "boolean":case "bool":return "boolean";default:return r}}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "character varying":return "varchar";case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":return "integer";case "mediumint":return "integer";case "bigint":case "int8":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}default:return r}}var Ee=class i{constructor(t){this.emptyStatements=[/alter table ".*"$/];this.sql=t,this.models=Object.values(this.sql.registeredModels),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let o=await e.sql.getTableSchema(r.table),n={columns:r.getColumns().filter(d=>d?.type!==void 0&&d?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let m of n.indexes)o.indexes.map(c=>c.name).includes(m.name)||e.data.indexesToAdd.push({table:r.table,index:m.name});let d=r.getUniques?.()||[];for(let m of d)e.data.uniquesToAdd.push({table:r.table,name:m.name||"mandatory",columns:m.columns});for(let m of n.relations){if(m.type!=="belongsTo")continue;let c=N(m.constraintName);o.foreignKeys.find(p=>p.name===c)||e.data.relationsToAdd.push({table:r.table,relation:m,onDelete:m.onDelete,onUpdate:m.onUpdate});}return}for(let d of n.columns)o.columns.some(c=>c.name===d.databaseName||c.name===d.columnName)||e.data.columnsToAdd.push({table:r.table,column:d});for(let d of o.columns)n.columns.some(c=>c.databaseName===d.name||c.columnName===d.name)||e.data.columnsToDrop.push({table:r.table,column:d.name});for(let d of n.indexes)o.indexes.map(m=>m.name).includes(d.name)||e.data.indexesToAdd.push({table:r.table,index:d.name});let s=r.getUniques?.()||[];for(let d of s)o.indexes.some(c=>c.name===d.name&&c.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:d.name||"mandatory",columns:d.columns});for(let d of o.indexes)d.isUnique||n.indexes.map(c=>c.name).includes(d.name)||e.data.indexesToDrop.push({table:r.table,index:d.name});for(let d of o.indexes){if(!d.isUnique)continue;(r.getUniques?.()||[]).map(c=>c.name).includes(d.name)||e.data.uniquesToDrop.push({table:r.table,name:d.name});}for(let d of n.columns){let m=o.columns.find(p=>p.name===d.databaseName||p.name===d.columnName);if(!m)continue;let c=!e.areColumnsEqual(m,d,o.indexes),u=e.getDefaultChange({table:r.table,dbColumns:m,modelColumn:d});(c||u)&&e.data.columnsToModify.push({table:r.table,dbColumns:m,modelColumn:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;if(d.type==="manyToMany"&&d.manyToManyOptions){let u=N(d.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:u,relation:{type:"belongsTo",model:()=>r,columnName:N(d.manyToManyOptions.leftForeignKey),foreignKey:d.manyToManyOptions.leftForeignKey,constraintName:d.constraintName?N(d.constraintName):$(u,N(d.manyToManyOptions.leftForeignKey||he(r.table)),r.table),onDelete:d.onDelete,onUpdate:d.onUpdate},onDelete:d.onDelete,onUpdate:d.onUpdate});continue}let m=N(d.constraintName);if(m&&o.foreignKeys.some(u=>u.name===m))continue;o.foreignKeys.find(u=>e.relationMatchesDbRelation(r,d,u))||e.data.relationsToAdd.push({table:r.table,relation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let a=new Set(n.relations.filter(d=>d.type==="belongsTo").map(d=>{let m=N(d.foreignKey)||d.columnName,u=r.getColumns().find(p=>p.columnName===m)?.databaseName||m;return N(d.constraintName)||$(r.table,u,d.model().table)}));for(let d of o.foreignKeys){if(d.name&&a.has(d.name))continue;n.relations.find(c=>c.type!=="belongsTo"&&c.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,c,d))||e.data.relationsToDrop.push({table:r.table,relation:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;let m=o.foreignKeys.find(c=>e.relationMatchesDbRelation(r,d,c));m&&!e.areRelationsEqual(m,d)&&e.data.relationsToModify.push({table:r.table,dbRelation:m,modelRelation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let l=r.primaryKey;if(l&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[l]}),o.primaryKey&&!l&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),l&&o.primaryKey){let d=r.getColumns().find(m=>m.columnName===l);d&&!e.arePrimaryKeysEqual(o.primaryKey,d)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:l});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat()}getSqlStatementsByPhase(){let t=new kt(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),o={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let n of r)o[n.phase].push(...n.sqlStatements);return o}areColumnsEqual(t,e,r=[]){let o=t.name===e.databaseName,n=this.sql.getDbType(),s=be(n,t.dataType),a=typeof e.type=="string"?be(n,e.type):void 0;a&&o&&(o=s===a),e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let l=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;o=o&&d===m;}return o}areRelationsEqual(t,e){let r=N(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),m=d.primaryKey||"id",c=d.getColumns().find(T=>T.columnName===m),u=d.table,p=c?.databaseName||m;o=o&&t.referencedTable===u&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=N(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===d;}let n=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&o&&(o=n===a),l&&o&&(o=s===l),o}relationMatchesDbRelation(t,e,r){let o,n=e;if(n&&n.model){if(typeof n.model=="function"&&n.model.table)o=n.model;else if(typeof n.model=="function")try{let h=n.model();h&&h.table&&(o=h);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?N(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=N(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),m=(n.type||"belongsTo")==="belongsTo"?N(n.foreignKey):n.columnName,c=l.find(h=>h.columnName===m);c&&(m=c.databaseName);let u=o.primaryKey||"id",T=o.getColumns().find(h=>h.columnName===u)?.databaseName||u;return r.columns.length===1&&r.columns[0]===m&&r.referencedColumns.length===1&&r.referencedColumns[0]===T}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&n}getDefaultChange(t){let e=this.sql.getDbType(),r=be(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?be(e,t.modelColumn.type):void 0;if(o&&r!==o||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||typeof t.modelColumn.type=="string"&&(o==="timestamp"||o==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let n=t.modelColumn.constraints?.default!==void 0,s=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(n&&!s)return "set";if(!n&&s)return "drop";if(n&&s){let a=String(t.dbColumns.defaultValue),l=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,a),m=this.normalizeDefaultValue(e,o||r,l);return d!==m?"set":false}return false}normalizeDefaultValue(t,e,r){let o=String(r).trim();if(!o)return o;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=o.match(/^'(.*)'$/s);if(s&&(o=s[1]),o==="{}"||o==="")return "{}";let a=JSON.parse(o);return JSON.stringify(a)}catch{}o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^true$/i.test(o)?"true":/^false$/i.test(o)?"false":/^null$/i.test(o)?"null":(o)}if(t==="mysql"||t==="mariadb"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o)?"current_timestamp":o}if(t==="sqlite"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),o.toLowerCase()}return o}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let o of r){if(o.type!=="manyToMany"||!o.manyToManyOptions||o.manyToManyOptions.wasModelProvided)continue;let n=N(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(P=>P.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",m=s.getColumns().find(P=>P.columnName===l),c=a.getColumns().find(P=>P.columnName===d);if(!m||!c)continue;let u=N(o.manyToManyOptions.leftForeignKey)||l,p=N(o.manyToManyOptions.rightForeignKey)||d,T=await this.sql.getTableSchema(n);if(!T.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(m,u),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:u,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let h=this.clonePkAsColumn(m,u),w=this.clonePkAsColumn(c,p),x=T.columns.find(P=>P.name===u),O=T.columns.find(P=>P.name===p),G=x?this.areColumnsEqual(x,h,T.indexes):false,se=O?this.areColumnsEqual(O,w,T.indexes):false;for(let P of T.foreignKeys){let ie=P.referencedTable===s.table,or=P.referencedTable===a.table;if(!ie&&!or)continue;let Nl=ie?u:p,Be=P.columns[0];Be&&Be!==Nl&&(this.data.relationsToDrop.push({table:n,relation:P}),Be!==u&&Be!==p&&this.data.columnsToDrop.push({table:n,column:Be}));}let L={};G||(L[h.databaseName]=h),se||(L[w.databaseName]=L[w.databaseName]||w);for(let P of Object.keys(L))this.data.columnsToAdd.push({table:n,column:L[P]});let Z=this.buildBelongsToRelation(n,()=>s,u,l,void 0,o.onDelete,o.onUpdate),q=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),Re=T.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===u),Xe=T.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!Re){let P=T.foreignKeys.find(ie=>ie.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:n,relation:P}),this.data.relationsToAdd.push(Z);}if(!Xe){let P=T.foreignKeys.find(ie=>ie.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:n,relation:P}),this.data.relationsToAdd.push(q);}}}}async removeFkChurnByName(){let t=new Set;for(let o of this.data.relationsToAdd)t.add(o.table);for(let o of this.data.relationsToDrop)t.add(o.table);let e=new Map;for(let o of t){let n=await this.sql.getTableSchema(o),s=new Set((n.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(o,s);}let r=new Map;for(let o of this.models){let n=o.getRelations(),s=new Set;for(let a of n){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,m=o.getColumns().find(u=>u.columnName===l)?.databaseName||l,c=N(a.constraintName)||$(o.table,m,a.model().table);s.add(c);}r.set(o.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async o=>{let n=await this.sql.getTableSchema(o.table),s=this.models.find(h=>h.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(w=>w.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let d=o.table,m=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let h=o.relation.model();d=h.table;let w=h.primaryKey||"id";m=h.getColumns().find(O=>O.columnName===w)?.databaseName||w;}let c=new Set([l,o.relation.columnName].filter(Boolean)),u=n.foreignKeys.some(h=>{if(h.columns.length!==1||h.referencedColumns.length!==1)return false;let w=c.has(h.columns[0]),x=h.referencedTable===d,O=h.referencedColumns[0]===m;return w&&x&&O}),p=N(o.relation.constraintName)||$(o.table,l,d),T=e.get(o.table)||new Set;if(u||p&&T.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let h=N(o.relation.manyToManyOptions.throughModel),w=N(o.relation.manyToManyOptions.leftForeignKey),x=N(o.relation.manyToManyOptions.rightForeignKey),O=o.table===h&&o.relation.columnName===w&&o.relation.model().table===s?.table,G=o.table===h&&o.relation.columnName===x&&o.relation.model().table!==s?.table,se=await this.sql.getTableSchema(h),L=se.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===w&&q.referencedTable===(s?.table||"")),Z=se.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===x&&q.referencedTable===o.relation.model().table);if(O&&L||G&&Z)return null}return o})).then(o=>o.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async o=>{let n=this.models.find(d=>d.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(d=>{if(d.type!=="belongsTo")return false;let c=a.find(w=>w.columnName===d.foreignKey)?.databaseName||d.foreignKey,u=d.model(),p=u.primaryKey||"id",h=u.getColumns().find(w=>w.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===c&&o.relation.referencedTable===u.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===h})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){return {columnName:e,databaseName:e,isPrimary:false,type:t.type,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,o,n,s,a){let l=n?N(n):$(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var $e=class extends g{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.table=e;}};var Y=class extends g{constructor(e,r=[],o,n=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.table=e,this.records=r,this.returning=o,this.disableReturning=n;}};var Ve=class extends g{constructor(e,r,o,n="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=o,this.mode=n,this.returning=s;}};var ue=class extends g{constructor(e,r=[],o=[],n=false){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.table=e,this.columns=r,this.values=o;}};var _=class extends g{constructor(e,r,o=false,n,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=o,this.operator=n,this.value=s;}};var je=class extends g{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var U=class extends _{constructor(e,r,o=false,n,s,a=false){super(e,r,o,"=",s,a);this.file="where_json";this.jsonOperator=n,this.value=s;}};var ce=class extends g{constructor(e,r,o,n="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=o,this.chainsWith=` ${n}`;}};var Lt=class extends stream.Readable{constructor(t,e,r=[],o){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=o;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(o,n)=>{if(o){r=true,this.emit("error",o);return}t++;let s=false,a,l={write:d=>{s=true,a=d;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(d=>{r=true,this.emit("error",d);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},o=>{if(o){r=true,this.emit("error",o);return}e=true,t===0&&!r&&this.push(null);});}},gl=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool("sqlite");if(o)return new Promise((d,m)=>{n.run(i,t,function(c){c&&m(c),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,m)=>{n.all(i,t,(c,u)=>{c&&m(c),(!u||!u.length)&&d([]),d(u);});});let s=r?.typeofModel;if(!s)return new Promise((d,m)=>{n.run(i,t,function(c){c?m(new Error(c.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((c,u)=>{n.run(i,t,function(p){if(p)return u(p);let T=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){c(T);return}let h=T?.[a]||this.lastID;if(!h)return u(new f("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let w=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(w,[h],(x,O)=>{if(x)return u(x);c(O);});});});if(!Array.isArray(r.models))throw new f("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models,m=[];return new Promise(async(c,u)=>{try{let p=d.map(async T=>{let h=new y(s),{columns:w,values:x}=h.prepareColumns(Object.keys(T),Object.values(T),"insert"),O=Object.fromEntries(w.map((Z,q)=>[Z,x[q]])),G=new S(s,e.getDbType()),{sql:se,bindings:L}=G.parse([new Y(s.table,[O])]);return new Promise((Z,q)=>{n.run(se,L,function(Re){if(Re)return q(Re);let Xe=T[a]||this.lastID;if(!a){Z(T);return}if(!Xe)return q(new f("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let P=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(P,[Xe],(ie,or)=>{if(ie)return q(ie);Z(or);});});})});m=await Promise.all(p),c(m);}catch(p){u(p);}})}return new Promise((d,m)=>{n.run(i,t,function(c){c?m(new Error(c.message)):d(this.changes);});})};var B=async(i,t,e,r="raw",o)=>{let n=e.type;switch(o?.shouldNotLog||ts(i,e.logs,t),n){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool("mysql"),[a]=await zn(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="affectedRows"?a.affectedRows:a;case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool("postgres"),d=await zn(()=>l.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="raw"?d.rows:d.rowCount;case "sqlite":let m=await zn(()=>gl(i,t,e,{typeofModel:o?.sqlLiteOptions?.typeofModel,mode:o?.sqlLiteOptions?.mode||"fetch",models:o?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="raw"?Array.isArray(m)?m:[m]:m;default:throw new f("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${n}`)}},Ut=async(i,t,e,r={},o)=>{let n=e.type;switch(n){case "mariadb":case "mysql":{let s=e.getPool("mysql"),a=e.sqlConnection??await s.getConnection(),l=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),m=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),c=0,u=false,p=false,T=()=>{try{a.release();}catch{}};return m.on("data",h=>{if(o.onData){c++,Promise.resolve(o.onData(l,h)).then(()=>{c--,u&&c===0&&!p&&(T(),l.end());}).catch(w=>{p=true,T(),l.destroy(w);});return}l.write(h);}),m.on("end",()=>{u=true,c===0&&!p&&(T(),l.end());}),m.on("error",h=>{p=true,T(),l.destroy(h);}),l.on("close",()=>{T();}),l}case "cockroachdb":case "postgres":{let s=e.sqlConnection??await e.getPool("postgres").connect(),a=await import('pg-query-stream').catch(()=>{throw new Q("pg-query-stream")}),l=new stream.PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=new a.default(i,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),m=s.query(d),c=0,u=false,p=false,T=h=>{try{s.release(h);}catch{}};return m.on("data",h=>{if(o.onData){c++,Promise.resolve(o.onData(l,h)).then(()=>{c--,u&&c===0&&!p&&(T(),l.end());}).catch(w=>{p=true,T(w),l.destroy(w);});return}l.write(h);}),m.on("end",()=>{u=true,c===0&&!p&&(T(),l.end());}),m.on("error",h=>{p=true,T(h),l.destroy(h);}),l}case "sqlite":{let s=e.sqlConnection??e.getPool("sqlite");return new Lt(s,i,t,{onData:o.onData})}default:throw new f("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function zn(i,t={maxRetries:0,delay:0},e=false){let r=0,o=t.maxRetries||0,n=t.delay||0;async function s(){try{return i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<o)return r++,rs(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var W=async(i,t="millis",e=3)=>{let r=Gn__namespace.performance.now(),o=await i(),n=Gn__namespace.performance.now()-r;return t==="millis"?[n.toFixed(e),o]:[(n/1e3).toFixed(e),o]};var k=class extends g{constructor(e,r,o,n){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=o,this.isRawValue=n??false;}};var He=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=yt(t),this.modelRelationsMap=new Map(this.modelRelations.map(o=>[o.columnName,o]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new f("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Wt(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}function bl(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var V=class extends g{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var Ce=class extends g{constructor(e,r,o=false,n,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=o,this.operator=n,this.value=s;}};var Ft=class extends g{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Vt=class extends g{constructor(e){super("distinct on");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct_on";this.columns=e;}};var F=class extends g{constructor(e,r,o,n="inner",s,a=false){super(`${n} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=o,this.on=s;}};var Ye=class extends g{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var jt=class extends g{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Ht=class extends g{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Je=class extends g{constructor(e,r="asc",o=false){super("order by",o);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var Yt=class{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs;let r=this.model?.getColumns;this.modelColumns=typeof r=="function"?r.call(this.model):[],this.modelColumnsMap=new Map(this.modelColumns.map(o=>[o.columnName,o]));}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Ye(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ye(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Je(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Je(t,"asc",true)),this}limit(t){return typeof t!="number"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new jt(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Ht(t),this}};var Jt=class extends Yt{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new F(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new F(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new F(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new F(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new F(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new F(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,n,s),this}join(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new F(typeof t=="string"?t:t.table,e,n,"inner",{operator:s||"="})),this}leftJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new F(typeof t=="string"?t:t.table,e,n,"left",{operator:s||"="})),this}rightJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new F(typeof t=="string"?t:t.table,e,n,"right",{operator:s||"="})),this}fullJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new F(typeof t=="string"?t:t.table,e,n,"full",{operator:s||"="})),this}};var zt=class extends Jt{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.modelAnnotatedColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNodes=[],this.selectNodes=[];}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],e.map(o=>D(o,this.model.databaseCaseConvention)).forEach(o=>{this.selectNodes.push(new k(o));}),this}selectRaw(e){return this.selectNodes.push(new k(e,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNodes=[],this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes.push(new k(s,a,n)),this.modelAnnotatedColumns.push(a),this}from(e){return this.fromNode=new V(e),this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new Ft,this}distinctOn(...e){return this.distinctOnNodes.push(new Vt(e)),this}};var Gt=class extends zt{constructor(e,r,o=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=o;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,o){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&o===void 0?this.andWhereSubQuery(e,"in",r):r instanceof C&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function")?this.andWhereSubQuery(e,r,o):this.andWhere(e,r,o)}andWhere(e,r,o){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new _(e,"and",false,n,s)),this}orWhere(e,r,o){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof C&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new _(e,"or",false,n,s)),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new _(e,"and",true,n,s)),this}andWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new _(e,"and",true,n,s)),this}orWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new _(e,"or",true,n,s)),this}whereBetween(e,r,o){return this.andWhereBetween(e,r,o)}andWhereBetween(e,r,o){return this.whereNodes.push(new _(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new _(e,"or",false,"between",[r,o])),this}whereNotBetween(e,r,o){return this.andWhereNotBetween(e,r,o)}andWhereNotBetween(e,r,o){return this.whereNodes.push(new _(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new _(e,"or",true,"between",[r,o])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new _(e,"and",false,"in",r)),this):(this.whereNodes.push(new _("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new _(e,"or",false,"in",r)),this):(this.whereNodes.push(new _("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new _(e,"and",true,"in",r)),this):(this.whereNodes.push(new _("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new _(e,"or",true,"in",r)),this):(this.whereNodes.push(new _("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new _(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new _(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new _(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new _(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new _(e,"and",false,o?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new _(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new _(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new _(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new _(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new _(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new _(e,"or",false,"=",r,true)),this}having(e,r,o){return this.andHaving(e,r,o)}andHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new Ce(e,"and",false,n,s)),this}orHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new Ce(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ce(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ce(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof C)return e;let r=new C(this.model,this.sqlDataSource);return e(r),r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ce(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ce(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new C(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new je(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new C(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new je(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Zt=class extends Gt{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"or",false,"raw",e)),this}};var C=class i extends Zt{constructor(e,r=fe.getInstance()){super(e,r);this.isNestedCondition=false;this.mustRemoveAnnotations=false;this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new S(this.model,this.dbType),this.interpreterUtils=new y(this.model);}get fromTable(){this.fromNode||(this.fromNode=new V(this.model.table));let{sql:e}=this.astParser.parse([this.fromNode]);return e.replace(/^FROM /i,"")}async exists(){return !!await this.one()}async existsWithPerformance(e="millis"){let[r,o]=await W(this.exists.bind(this),e);return {data:o,time:Number(r)}}async many(){let{sql:e,bindings:r}=this.unWrap();return B(e,r,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}})}async pluck(e){return (await this.many()).map(o=>o[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async first(){return this.one()}async oneOrFail(){let e=await this.one();if(!e)throw new f("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async firstOrFail(){return this.oneOrFail()}async stream(e={},r){let{sql:o,bindings:n}=this.unWrap(),s=await Ut(o,n,this.sqlDataSource,e,{onData:(a,l)=>{a.write(l);}});return await r?.(s),s}async*chunk(e){let r=0;for(;;){let o=await this.limit(e).offset(r).many();if(!o.length)break;r+=o.length,yield o;}}async paginateWithCursor(e,r,o){let n=this.clone();this.orderByNodes.length||this.orderBy(r.discriminator,r.orderBy||"asc"),o&&this.where(o.key,r.operator||">",o.value),this.limit(e);let s=await this.many(),a=await n.getCount(),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:bl(e,a),data:s},{key:r.discriminator,value:d}]}selectSubQuery(e,r){if(typeof e=="function"){let o=new i(this.model,this.sqlDataSource);return e(o),this.selectNodes.push(new k(o.extractQueryNodes(),r)),this}return this.selectNodes.push(new k(e.extractQueryNodes(),r)),this}lockForUpdate(e={}){return this.lockQueryNodes.push(new Fe("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Fe("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Me(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Me(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Me(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Me(o,true)),this}async increment(e,r=1){let{sql:o,bindings:n}=this.astParser.parse([new ue(`${this.fromTable} set ${e} = ${e} + ${r}`,[],[],true),...this.whereNodes,...this.joinNodes]);return B(o,n,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async decrement(e,r=1){let{sql:o,bindings:n}=this.astParser.parse([new ue(`${this.fromTable} set ${e} = ${e} - ${r}`,[],[],true),...this.whereNodes,...this.joinNodes]);return B(o,n,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async getCount(e="*"){this.clearForFunctions(),this.annotate("count",e,"total");let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.annotate("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.annotate("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.annotate("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.annotate("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&b.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=await this.clone().getCount("*"),s=await this.limit(r).offset((e-1)*r).many();return {paginationMetadata:Wt(e,r,n),data:s}}from(e,r){if(typeof e=="function"){if(!r)throw new f("QueryBuilder::from","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource);e(o);let n=o.extractQueryNodes();return this.fromNode=new V(n,r),this}return this.fromNode=new V(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("normal",e,n)),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("recursive",e,n)),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new f("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("materialized",e,n)),this}async insert(e,r){let{columns:o,values:n}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),s=Object.fromEntries(o.map((m,c)=>[m,n[c]])),{sql:a,bindings:l}=this.astParser.parse([new Y(this.fromTable,[s],r),...this.joinNodes]),d=await B(a,l,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});return Array.isArray(d)&&d.length?d[0]:d}async insertMany(e,r){if(!e.length)return [];let o=e.map(a=>{let{columns:l,values:d}=this.interpreterUtils.prepareColumns(Object.keys(a),Object.values(a),"insert");return Object.fromEntries(l.map((m,c)=>[m,d[c]]))}),{sql:n,bindings:s}=this.astParser.parse([new Y(this.fromTable,o,r),...this.joinNodes]);return B(n,s,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:o}})}async update(e){let r=Object.keys(e),o=Object.values(e),{columns:n,values:s}=this.interpreterUtils.prepareColumns(r,o,"update"),{sql:a,bindings:l}=this.astParser.parse([new ue(this.fromTable,n,s),...this.whereNodes,...this.joinNodes]);return B(a,l,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async truncate(){let e=new Ie(this.fromTable),{sql:r,bindings:o}=this.astParser.parse([e]);await B(r,o,this.sqlDataSource,"raw");}async delete(){let e=new $e(this.fromTable),{sql:r,bindings:o}=this.astParser.parse([e,...this.whereNodes,...this.joinNodes]);return B(r,o,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async softDelete(e={}){let{column:r="deletedAt",value:o=ut()}=e||{},{columns:n,values:s}=this.interpreterUtils.prepareColumns([r],[o],"update"),{sql:a,bindings:l}=this.astParser.parse([new ue(this.fromTable,n,s),...this.whereNodes,...this.joinNodes]);return B(a,l,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}toQuery(e=this.dbType||"mysql"){let{sql:r,bindings:o}=this.unWrap(e);return cs(r,o)}unWrap(e=this.dbType){this.selectNodes.length||(this.selectNodes=[new k("*")]);let{sql:r,bindings:o}=this.astParser.parse(this.extractQueryNodes()),n=dt(this.sqlDataSource,r);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...o||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=I(this.modelSelectedColumns),e.modelAnnotatedColumns=I(this.modelAnnotatedColumns),e.distinctNode=I(this.distinctNode),e.distinctOnNodes=I(this.distinctOnNodes),e.selectNodes=I(this.selectNodes),e.withQuery=I(this.withQuery),e.joinNodes=I(this.joinNodes),e.whereNodes=I(this.whereNodes),e.groupByNodes=I(this.groupByNodes),e.havingNodes=I(this.havingNodes),e.orderByNodes=I(this.orderByNodes),e.lockQueryNodes=I(this.lockQueryNodes),e.unionNodes=I(this.unionNodes),e.withNodes=I(this.withNodes),e.fromNode=I(this.fromNode),e.limitNode=I(this.limitNode),e.offsetNode=I(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e.mustRemoveAnnotations=this.mustRemoveAnnotations,e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.fromNode||(this.fromNode=new V(this.fromTable)),this.selectNodes.length||(this.selectNodes=[new k("*")]),[...this.withNodes,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}async manyWithPerformance(e="millis"){let[r,o]=await W(this.many.bind(this),e);return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await W(this.one.bind(this),e);return {data:o,time:Number(r)}}async firstWithPerformance(e="millis"){return this.oneWithPerformance(e)}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await W(this.paginate.bind(this,e,r),o);return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n);return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await W(this.oneOrFail.bind(this),e);return {data:o,time:Number(r)}}};var Xt=class i extends C{constructor(e,r){super(e,r);this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this)};this.sqlModelManagerUtils=new He(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=new Map,this.modelColumnsDatabaseNames=new Map,this.model.getColumns().forEach(n=>{this.modelColumnsMap.set(n.databaseName,n),this.modelColumnsDatabaseNames.set(n.databaseName,n.columnName);});}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){return r.connection?new i(e,r.connection):r.trx?new i(e,r.trx.sql):new i(e,e.sqlInstance)}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async first(e){return this.one(e)}async oneOrFail(e){let r=await this.one(e);if(!r)throw new f(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async firstOrFail(e){return this.oneOrFail(e)}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a,this.model));if(!o.length)return [];let n=await ee(o,this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);if(!n)return [];let s=Array.isArray(n)?n:[n];return e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.(s),this.relationQueryBuilders.length&&await this.processRelationsRecursively(s),s}async*chunk(e,r={}){let o=0;for(;;){let n=await this.limit(e).offset(o).many(r);if(!n.length)break;yield n,o+=n.length;}}async stream(e={},r){!e.ignoreHooks?.includes("beforeFetch")&&this.model.beforeFetch?.(this);let{sql:o,bindings:n}=this.unWrap(),s=await Ut(o,n,this.sqlDataSource,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l,this.model),m=await ee([d],this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);m&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([m]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([m]),a.write(m));}});return await r?.(s),s}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new f(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}async manyWithPerformance(e={},r="millis"){let[o,n]=await W(this.many.bind(this,e),r);return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await W(this.one.bind(this,e),r);return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await W(this.oneOrFail.bind(this,e),r);return {data:n,time:Number(o)}}async firstOrFailWithPerformance(e={},r="millis"){return this.oneOrFailWithPerformance(e,r)}async firstWithPerformance(e={},r="millis"){return this.oneWithPerformance(e,r)}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await W(this.paginate.bind(this,e,r,{ignoreHooks:s}),n);return {data:{paginationMetadata:l.paginationMetadata,data:l.data},time:Number(a)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n);return {data:a,time:Number(s)}}async update(e,r={}){return r.ignoreBeforeUpdateHook&&this.model.beforeUpdate?.(this),super.update(e)}async softDelete(e={}){let{ignoreBeforeDeleteHook:r=false}=e||{};return !r&&this.model.beforeDelete?.(this),super.softDelete(e)}async delete(e={}){return e.ignoreBeforeDeleteHook&&this.model.beforeDelete?.(this),super.delete()}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("count",e,"total");let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("max",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("min",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("avg",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("sum",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async paginate(e,r,o={ignoreHooks:false}){let n=this.selectNodes,s=await this.getCount("*",{ignoreHooks:o.ignoreHooks});this.selectNodes=n;let a=await this.limit(r).offset((e-1)*r).many({ignoreHooks:o.ignoreHooks?["beforeFetch","afterFetch"]:[]});return {paginationMetadata:Wt(e,r,s),data:a}}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],this.selectNodes=this.selectNodes.concat(e.map(r=>new k(r))),this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes=this.selectNodes.concat(new k(s,a,n)),this.modelAnnotatedColumns.push(a),this}removeAnnotations(){return this.mustRemoveAnnotations=true,this.modelAnnotatedColumns=[],this}load(e,r){let o=this.sqlModelManagerUtils.getRelationFromModel(e),n=new i(o.model,this.sqlDataSource);return n.relation=o,r?.(n),this.relationQueryBuilders.push(n),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,o){return this.andHavingRelated(e,r,o)}andHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereExists(m),this}orHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereExists(m),this}notHavingRelated(e,r,o){return this.andNotHavingRelated(e,r,o)}andNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereNotExists(m),this}orNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereNotExists(m),this}clone(){let e=super.clone();return e.relationQueryBuilders=I(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let o=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,o);}));}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(u=>{let p=u[e.foreignKey];p&&n.set(String(p),u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=null;return}let T=n.get(String(p));u[e.columnName]=T||null;});break;case "belongsTo":let s=new Map;o.forEach(u=>{if(!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=u[e.model.primaryKey];p&&s.set(String(p),u);}),r.forEach(u=>{let p=u[e.foreignKey];if(!p){u[e.columnName]=null;return}let T=s.get(String(p));u[e.columnName]=T||null;});break;case "hasMany":if(!this.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(u=>{let p=u[e.foreignKey];if(!p)return;let T=String(p);a.has(T)||a.set(T,[]),a.get(T).push(u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=[];return}let T=a.get(String(p))||[];u[e.columnName]=T;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,m=l.leftForeignKey,c=this.modelColumnsMap.get(m)||this.modelColumnsDatabaseNames.get(m)||D(m,this.model.modelCaseConvention);o.forEach(u=>{let p=u.$annotations||{},T=p[c];if(T==null)return;let h=String(T);d.has(h)||d.set(h,[]),this.modelAnnotatedColumns.includes(c)||(delete p[c],Object.keys(p).length||delete u.$annotations),d.get(h).push(u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=[];return}let T=d.get(String(p))||[];u[e.columnName]=T;});break;default:throw new f(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,o){return this.getRelatedModelsQueryForRelation(e,r,o).many()}getRelatedModelsQueryForRelation(e,r,o){let n=this.getFilterValuesFromModelsForRelation(r,o);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);let l=ae__default.default.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,m=e.orderByNodes.map(q=>q.isRawValue?q.column:`${this.interpreterUtils.formatStringColumn(this.dbType,q.column)} ${q.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(d,q=>q.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${m}) as rn_${l}`).whereIn(r.foreignKey,n));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let u=e.modelSelectedColumns.map(q=>fr(q,d,e.model.table));return c.select(...u).from(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new f(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let T=e.limitNode?.limit,h=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(q=>q.includes(".")?q:`${r.model.table}.${q}`):[`${r.model.table}.*`];if(!T&&!h)return e.select(...w).annotate(`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n);let x=ae__default.default.randomBytes(6).toString("hex"),O=`${r.model.table}_cte_${x}`,G=e.orderByNodes.map(q=>{if(q.isRawValue)return q.column;let Re=q.column.includes(".")?q.column:`${r.model.table}.${q.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Re)} ${q.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let se=`${ae__default.default.randomBytes(6).toString("hex")}_left_foreign_key`,L=e.with(O,q=>q.select(...w).annotate(`${p.throughModel}.${p.leftForeignKey}`,se).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${G}) as rn_${x}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));T&&L.whereRaw(`rn_${x} <= ${T+(h||0)}`),h&&L.whereRaw(`rn_${x} > ${h}`);let Z=w.map(q=>fr(q,O,e.model.table));return L.select(...Z).annotate(`${O}.${se}`,p.leftForeignKey).from(O);default:throw new f(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);case "belongsTo":return r.map(o=>o[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new f(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new f(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let d=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),m=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let d=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new f(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===d.throughModel&&p.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let c=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new f(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e,r){let o={},n={};return Object.entries(e).forEach(([s,a])=>{if(s==="$annotations"||this.modelColumnsDatabaseNames.get(s)){o[s]=a;return}n[D(s,r.modelCaseConvention)]=a;}),o.$annotations=n,o}};var ze=class{constructor(t,e){this.model=t,this.modelInstance=Cs(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new S(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&Object.entries(t.where).forEach(([r,o])=>{if(Array.isArray(o)){e.whereIn(r,o);return}e.where(r,o);}),t.orderBy&&Object.entries(t.orderBy).forEach(([r,o])=>{e.orderBy(r,o);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many({ignoreHooks:t.ignoreHooks||[]})}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset});if(e===null)throw t.customError?t.customError:new f(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new f(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}async insert(t,e={}){!e.ignoreHooks&&await this.model.beforeInsert?.(t);let{columns:r,values:o}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),n={};r.forEach((c,u)=>{let p=o[u];n[c]=p,t[c]??(t[c]=p);});let{sql:s,bindings:a}=this.astParser.parse([new Y(this.model.table,[n],e.returning)]),l=await B(s,a,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(l,[t],"one",e.returning);let d=l[0];return d?(this.model.afterFetch?.([d]),await ee([d],this.model)):t}async insertMany(t,e={}){let r=[];for(let d of t){!e.ignoreHooks&&this.model.beforeInsert?.(d);let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),u={};m.forEach((p,T)=>{let h=c[T];u[p]=h,d[p]??(d[p]=h);}),r.push(u);}let{sql:o,bindings:n}=this.astParser.parse([new Y(this.model.table,r,e.returning)]),s=await B(o,n,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(s,t,"many",e.returning)||[];let a=s;return a.length?(this.model.afterFetch?.(a),await ee(a,this.model)||[]):[]}async upsertMany(t,e,r,o={updateOnConflict:true}){let n=[];await Promise.all(r.map(d=>{!o.ignoreHooks&&this.model.beforeInsert?.(d);let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),u=Object.fromEntries(m.map((p,T)=>[p,c[T]]));n.push(u);}));let{sql:s,bindings:a}=this.astParser.parse([new Y(this.model.table,n,void 0,true),new Ve(this.model.table,t,e,(o.updateOnConflict,"update"),o.returning)]);return await B(s,a,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}})}async updateRecord(t,e){let{columns:r,values:o}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"update"),{primaryKey:n}=this.model;if(!n)throw new f(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");r=r.filter(d=>d!==n),o=o.filter(d=>d!==t[n]);let{sql:s,bindings:a}=this.astParser.parse([new ue(this.model.table,r,o),new _(n,"and",false,"=",t[n])]);await B(s,a,this.sqlDataSource,"raw");let l=await this.findOneByPrimaryKey(t[this.model.primaryKey],e?.returning??void 0);if(!l)throw new f(this.model.name+"::updateRecord","ROW_NOT_FOUND");return l}async deleteRecord(t){if(!this.model.primaryKey)throw new f(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new _(this.model.primaryKey,"and",false,"=",t[this.model.primaryKey]),{sql:r,bindings:o}=this.astParser.parse([new $e(this.model.table),e]);await B(r,o,this.sqlDataSource,"raw");}query(){return new Xt(this.model,this.sqlDataSource)}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await ee([a],this.model):null}return await ee(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(m=>m[this.model.primaryKey]),l=a.map(m=>`'${m}'`).join(","),d=await this.query().select(...o??"*").whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?d.length?d[0]:null:d}let n=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...o||"*").whereIn(this.model.primaryKey,n).many();return r==="one"?s.length?s[0]:null:s}};var Ge=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ae__default.default.randomBytes(16).toString("hex"),this.isolationLevel=e,this.isNested=r,this.nestingDepth=o;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.startTransaction(),t)try{await t(e),await e.commit();}catch(r){throw await e.rollback(),r}return e}async startTransaction(){let t=this.getIsolationLevelQuery();if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return;case "sqlite":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return}}switch(this.sql.type){case "mysql":case "mariadb":t&&await this.sql.rawQuery(t),await this.sql.sqlConnection.beginTransaction(),this.isActive=true;break;case "postgres":case "cockroachdb":await this.sql.rawQuery("BEGIN TRANSACTION"),t&&await this.sql.rawQuery(t),this.isActive=true;break;case "sqlite":t&&await this.sql.rawQuery(t),await this.sql.rawQuery("BEGIN TRANSACTION"),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=!1;return}switch(this.sql.type){case "mysql":case "mariadb":await this.sql.sqlConnection.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new f("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mysql":case "mariadb":await this.sql.sqlConnection.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;default:throw new f("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;default:throw new f("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){b.error(t);}await this.sql.closeConnection(),this.sql.sqlConnection=null,this.connectionReleased=true;}}getIsolationLevelQuery(){if(!this.isolationLevel)return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new f("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new f("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var J=class J extends at{constructor(e){super(e);this.globalTransaction=null;this.models={};this.ownsPool=false;this.sqlConnection=null;this.sqlType=this.type,this.inputDetails=e||{connectionPolicies:{retry:{maxRetries:0,delay:0}},queryFormatOptions:{language:lt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"}},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:lt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"};}static async connect(e,r){typeof e=="function"&&(r=e,e=void 0);let o=new J(e);if(e?.models){let n=o.sanitizeModelKeys(e?.models||{});Object.assign(o,n);}return o.models=e?.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:o.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1"),J.instance=o,await r?.(o),o}static async connectToSecondarySource(e,r){typeof e=="function"&&(r=e,e=void 0);let o=new J(e);if(e?.models){let n=o.sanitizeModelKeys(e.models);Object.assign(o,n);}return o.models=e?.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:o.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1"),J.instance=o,await r?.(o),o}static async useConnection(e,r){let o=new J(e);if(e.models){let n=o.sanitizeModelKeys(e.models);Object.assign(o,n);}o.models=e.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:e.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1");try{await r(o).then(async()=>{o.isConnected&&await o.closeConnection();});}catch(n){throw o.isConnected&&await o.closeConnection(),n}}static getInstance(){if(!J.instance)throw new f("SqlDataSource::getInstance","CONNECTION_NOT_ESTABLISHED");return J.instance}static query(e){let r=this.getInstance(),o=r.isInGlobalTransaction&&r.globalTransaction?.isActive?r.globalTransaction.sql:r;return new C({modelCaseConvention:"preserve",databaseCaseConvention:"preserve",table:e},o)}static createTable(...e){return this.getInstance().createTable(...e)}static alterTable(...e){return this.getInstance().alterTable(...e)}static async startGlobalTransaction(e){return this.getInstance().startGlobalTransaction(e)}static async commitGlobalTransaction(){await this.getInstance().commitGlobalTransaction();}static async rollbackGlobalTransaction(){await this.getInstance().rollbackGlobalTransaction();}static async startTransaction(e,r){return this.getInstance().startTransaction(e,r)}static async transaction(e,r){let o=typeof e=="function"?r:e;return this.getInstance().startTransaction(e,o)}static async getTableSchema(e){return this.getInstance().getTableSchema(e)}static async closeConnection(){if(!this.instance){b.warn("Connection already closed");return}await this.instance.closeConnection(),this.instance=null;}static async disconnect(){return this.closeConnection()}static async rawQuery(e,r=[]){let o=this.getInstance();return (o.isInGlobalTransaction&&o.globalTransaction?.isActive?o.globalTransaction.sql:o).rawQuery(e,r)}static rawStatement(e){return this.getInstance().rawStatement(e)}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async clone(e){let r=new J(this.inputDetails);if(r.sqlType==="sqlite"||!!e?.shouldRecreatePool){if(r.sqlPool=await Ne(r.sqlType,{type:r.sqlType,host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,connectionPolicies:r.inputDetails.connectionPolicies,queryFormatOptions:r.inputDetails.queryFormatOptions,driverOptions:r.inputDetails.driverOptions,logs:r.logs,models:r.models}),r.ownsPool=true,Object.keys(this.models).length){let n=r.sanitizeModelKeys(this.models);Object.assign(r,n);}return r}if(r.sqlPool=this.sqlPool,r.ownsPool=false,Object.keys(this.models).length){let n=r.sanitizeModelKeys(this.models);Object.assign(r,n);}return r}getDbType(){return this.type}query(e){let r=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;return new C({modelCaseConvention:"preserve",databaseCaseConvention:"preserve",table:e},r)}alterTable(...e){let r=new me(this.getDbType());return r.alterTable(...e),r.queryStatements}createTable(...e){let r=new me(this.getDbType());return r.createTable(...e),r.queryStatements[0]||""}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new Ge(r,e?.isolationLevel),await this.globalTransaction.startTransaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new f("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){b.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async startTransaction(e,r){let o=typeof e=="function"?r:e,n=await this.clone();n.sqlConnection=await n.getConnection();let s=new Ge(n,o?.isolationLevel);if(await s.startTransaction(),typeof e=="function")try{await e(s),await s.commit({throwErrorOnInactiveTransaction:!1});return}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}async transaction(e,r){return this.startTransaction(e,r)}getModelManager(e){if(!this.isConnected)throw new f("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new ze(e,this.globalTransaction.sql):new ze(e,this)}getPool(e=this.sqlType){if(!this.sqlPool)throw new f("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(e=this.sqlType){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new f("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");switch(this.sqlType){case "mysql":case "mariadb":return await this.sqlPool.getConnection();case "postgres":case "cockroachdb":return await this.sqlPool.connect();case "sqlite":return this.sqlPool;default:throw new f("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async closeConnection(){if(!this.isConnected){b.warn("Connection already closed or not established");return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{b.warn("SqlDataSource::closeConnection - Error while rolling back global transaction");}switch(b.warn("Closing connection"),this.type){case "mysql":case "mariadb":await this.sqlPool.end();break;case "postgres":case "cockroachdb":await this.sqlPool.end();break;case "sqlite":await new Promise((e,r)=>{this.sqlPool.close(o=>{o&&r(o),e();});});break;default:throw new f("SqlDataSource::closeConnection",`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}this.sqlPool=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions}}async disconnect(){return this.closeConnection()}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){b.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Ee.makeDiff(this)).getSqlStatements();if(!o.length){b.info("No new changes detected between database schema and models metadata");return}if(b.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);b.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),b.info(`Synced schema with ${o.length} SQL statements`);}async rawQuery(e,r=[]){if(!this.isConnected)throw new f("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");let o=dt(this,e);return B(o,r,this,"raw")}rawStatement(e){return new re(e)}async getTableSchema(e){let[r,o,n,s]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e)]);return {columns:r,indexes:o,foreignKeys:n,primaryKey:s}}getModelOpenApiSchema(){return ds(Object.values(this.models))}async getTableInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(a){if(ke(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=be(s,l);return {name:a.name,dataType:d,isNullable:a.notnull===0,defaultValue:a.dflt_value??null,withTimezone:null}}):n.map(a=>{let l=String(a.column_name||a.COLUMN_NAME||a.name||""),d=String(a.data_type||a.DATA_TYPE||a.type||"").toLowerCase(),m=be(s,d),c=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,u=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,T=a.char_length!=null?Number(a.char_length):null,h=a.numeric_precision!=null?Number(a.numeric_precision):null,w=a.numeric_scale!=null?Number(a.numeric_scale):null,x=a.timezone!=null?!!a.timezone:typeof a.datetime_precision=="number"?/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase()):/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase());return {name:l,dataType:m,isNullable:u,defaultValue:p,length:T,precision:h,scale:w,withTimezone:x}})}async getIndexInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wt(e)]).sql,n=this.getDbType(),s=[];try{s=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let m=d.Key_name,c=d.Non_unique===0,u=l.get(m)||{name:m,columns:[],isUnique:c};u.columns.push(d.Column_name),l.set(m,u);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let m=d.index_name,c=!!d.is_unique,u=l.get(m)||{name:m,columns:[],isUnique:c};u.columns.push(d.column_name),l.set(m,u);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,m=!!l.unique,u=(await this.rawQuery(`PRAGMA index_info(${d})`)).map(p=>p.name);a.push({name:d,columns:u,isUnique:m});}return a}async getForeignKeyInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let m=Number(d.id),c=l.get(m)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};c.columns.push(String(d.from)),c.referencedColumns.push(String(d.to)),l.set(m,c);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),m=d||`${l.referenced_table}_${l.column_name}`,c=a.get(m)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(m,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return;throw l}if(!n.length)return;let s=n.map(l=>String(l.column_name));return {name:n[0].name||void 0,columns:s}}async testConnectionQuery(e){await B(e,[],this,"raw",{shouldNotLog:true});}sanitizeModelKeys(e){let r=Object.getOwnPropertyNames(this),o=Object.getOwnPropertyNames(this.constructor),n=[...r,...o];if(Object.keys(e).some(s=>n.includes(s)))throw new f("SqlDataSource::sanitizeModelKeys","DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS",new Error(`Duplicate model keys while instantiating models inside the connection: ${Object.keys(e).filter(s=>n.includes(s)).map(s=>`"${s}"`).join(", ")}`));return e}static get isInGlobalTransaction(){return !!this.instance?.globalTransaction}get isInGlobalTransaction(){return !!this.globalTransaction}get registeredModels(){return this.models}};J.instance=null;var fe=J;var ye=class{constructor(t){this.sql=t||fe.getInstance();}async upMigrations(t){for(let e of t){b.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){b.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.query("migrations").insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.query("migrations").where("name",t.migrationName).delete();}};async function Ze(i,t,e,r,o){let n=i.getDbType(),s=null;b.info("Rolling back migrations for database type: "+n);try{let a=await st(n,i.getPool()),l=await it(n,e,r),d=a.map(u=>u.name),m=l.filter(u=>d.includes(u.migrationName));if(m.length===0){b.info("No pending migrations.");return}if(t){let u=m.findIndex(h=>h.migrationName===t);if(u===-1){b.error(`Rollback until migration not found: ${t}`);return}let p=m.slice(u);o&&(s=await i.startTransaction(),i=s.sql),await new ye(i).downMigrations(p),o&&await s?.commit(),b.info("Migrations rolled back successfully");return}let c=new ye(i);o&&(s=await i.startTransaction(),i=s.sql),await c.downMigrations(m),o&&await s?.commit();}catch(a){throw o&&await s?.rollback(),a}b.info("Migrations rolled back successfully");}var er=class{static async generate(t){return `import { Migration } from "hysteria-orm";
183
+ ORDER BY pk`,bindings:[]}}},rl=new Kn;var kn=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},ol=new kn;var Ln=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new S(this.model,"sqlite").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new S(this.model,"sqlite").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new S(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},nl=new Ln;var Un=class{toSql(t){let e=t;if(e.isRawValue)return e.keyword="",{sql:e.table,bindings:[]};let r=new y(this.model).formatStringTable("sqlite",e.table);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},sl=new Un;var Wn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},il=new Wn;var Fn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:e.values};let r=new y(this.model),o=r.formatStringTable("sqlite",e.table);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof oe?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} SET ${s}`,bindings:n}}},al=new Fn;var Vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},ll=new Vn;var jn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new S(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},dl=new jn;var Hn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},ml=new Hn;var Yn=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new S(this.model,"sqlite"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new S(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ul=new Yn;var Jn=class{toSql(t){let e=t,r=new S(this.model,"sqlite"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},cl=new Jn;var pl={mysql:{alter_table:{add_column:ps,add_constraint:ys,add_primary_key:fs,alter_column_type:hs,alter_table:Es,drop_column:Bs,drop_constraint:Qs,drop_default:Ks,drop_not_null:ks,drop_primary_key:Ls,rename_column:Us,rename_table:Ws,set_default:Fs,set_not_null:Vs},case_when:{},column:{column_type:js},constraint:{after:Hs,constraint:Ys},create_table:{create_table:Js},delete:{delete:zs},distinct:{distinct:Gs,distinct_on:Zs},drop_table:{drop_table:Xs},from:{from:ei},group_by:{group_by:ti},having:{having:ri},index_op:{create_index:oi,drop_index:ni},insert:{insert:si},join:{join:ii},limit:{limit:ai},lock:{lock:li},offset:{offset:di},on_duplicate:{on_duplicate:mi},order_by:{order_by:ui},raw:{raw:ci},schema:{foreign_key_info:pi,index_info:yi,primary_key_info:fi,table_info:hi},select:{select:gi},truncate:{truncate:Ti},union:{union:bi},update:{update:Si},where:{where:Ni,where_group:wi,where_json:Mi,where_subquery:qi},with:{with:Ci}},postgres:{alter_table:{add_column:_i,add_constraint:Ri,add_primary_key:xi,alter_column_type:Ai,alter_table:Pi,drop_column:Di,drop_constraint:Oi,drop_default:Ii,drop_not_null:vi,drop_primary_key:$i,rename_column:Ei,rename_table:Bi,set_default:Qi,set_not_null:Ki},case_when:{},column:{column_type:ki},constraint:{after:Li,constraint:Ui},create_table:{create_table:Wi},delete:{delete:Fi},distinct:{distinct:Vi,distinct_on:ji},drop_table:{drop_table:Hi},from:{from:Yi},group_by:{group_by:Ji},having:{having:zi},index_op:{create_index:Gi,drop_index:Zi},insert:{insert:Xi},join:{join:ea},limit:{limit:ta},lock:{lock:ra},offset:{offset:oa},on_duplicate:{on_duplicate:na},order_by:{order_by:sa},raw:{raw:ia},schema:{foreign_key_info:aa,index_info:la,primary_key_info:da,table_info:ma},select:{select:ua},truncate:{truncate:ca},union:{union:pa},update:{update:ya},where:{where:fa,where_group:ha,where_json:ga,where_subquery:Ta},with:{with:ba}},sqlite:{alter_table:{add_column:Sa,add_constraint:Na,alter_column_type:wa,alter_table:Ma,drop_column:qa,drop_constraint:Ca,drop_default:_a,drop_not_null:Ra,drop_primary_key:xa,rename_column:Aa,rename_table:Pa,set_default:Da,set_not_null:Oa},case_when:{},column:{column_type:Ia},constraint:{after:va,constraint:$a},create_table:{create_table:Ea},delete:{delete:Ba},distinct:{distinct:Qa,distinct_on:Ka},drop_table:{drop_table:ka},from:{from:La},group_by:{group_by:Ua},having:{having:Wa},index_op:{create_index:Fa,drop_index:Va},insert:{insert:ja},join:{join:Ha},limit:{limit:Ya},lock:{lock:Ja},offset:{offset:za},on_duplicate:{on_duplicate:Ga},order_by:{order_by:Za},raw:{raw:Xa},schema:{foreign_key_info:el,index_info:tl,primary_key_info:rl,table_info:ol},select:{select:nl},truncate:{truncate:sl},union:{union:il},update:{update:al},where:{where:ll,where_group:dl,where_json:ml,where_subquery:ul},with:{with:cl}}};var S=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let o=t.find(c=>!!c&&c.folder==="distinctOn"),n=!o&&t.find(c=>!!c&&c.folder==="distinct"),s=t.filter(c=>c!==null&&c.folder!=="distinct"&&c.folder!=="distinctOn"),a=[],l=[],d=null;for(let c=0;c<s.length;c++){let u=s[c];u.currParamIndex=e+l.length;let p=pl[this.mapCommonDbType(this.dbType)][u.folder][u.file];if(!p)throw new Error(`Interpreter not found for ${this.dbType} ${u.keyword}`);p.model=this.model;let g=p.toSql(u);if(!g.sql||!g.sql.trim().length)continue;let h=s[c+1],_=!h||h.keyword!==u.keyword?"":h.chainsWith;if(u.folder==="lock"||u.folder==="on_duplicate"||u.folder==="schema"){a.push(`${g.sql}${_}`),l.push(...g.bindings),d=u.keyword;continue}if(d!==u.keyword||u.canKeywordBeSeenMultipleTimes){if(r)a.push(`${g.sql}${_}`);else {let D=u.keyword;if(u.folder==="with"){let L=c,j=false;for(;L<s.length&&s[L].keyword===u.keyword;){let Q=s[L];if(Q.folder==="with"&&Q.clause==="recursive"){j=true;break}L++;}j&&(D=`${D} recursive`);}if(D==="select")if(o){let L=Array.isArray(o.columns)?o.columns.join(", "):"";a.push(`select distinct on (${L}) ${g.sql}${_}`);}else n?a.push(`select distinct ${g.sql}${_}`):a.push(`select ${g.sql}${_}`);else a.push(`${D} ${g.sql}${_}`);}d=u.keyword;}else a.push(`${g.sql}${_}`);l.push(...g.bindings);}return {sql:a.join(" "),bindings:l}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}};var Nt=class extends T{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var wt=class extends T{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Mt=class extends T{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var qt=class extends T{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Ct=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var ne=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var De=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var _t=class extends T{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=o;}};var de=class extends T{constructor(e,r=[],o=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=o;}};var Rt=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var se=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Ue=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var xt=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Oe=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var At=class extends T{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Pt=class extends T{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var We=class extends T{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Dt=class extends T{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var $=class extends T{constructor(e,r={},o=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=o;}};var Ot=class extends T{constructor(e,r=[],o=[],n=false){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=o,this.ifNotExists=n;}};var It=class extends T{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var vt=class extends T{constructor(e,r,o,n=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=o,this.unique=n;}};var $t=class extends T{constructor(e,r,o){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=o??false;}};var Ie=class extends T{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.table=e;}};var x=class extends T{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=o.length,this.precision=o.precision,this.scale=o.scale,this.enumValues=o.enumValues,this.withTimezone=o.withTimezone,this.autoIncrement=o.autoIncrement,this.isRawValue=o.isRawValue??false;}};var Fe=class extends T{constructor(e,r=false,o=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=o;}};var Me=class extends T{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var ve=class extends T{constructor(e,r,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=o,this.clause=e;}};var Te=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Et=class extends T{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Bt=class extends Te{constructor(t,e,r,o,n=[],s="create_table"){super(e),this.columnNode=r,this.tableName=o,this.namedConstraints=n,this.context=s,this.sqlType=t;}primaryKey(t){let e=ge(this.tableName,N(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new $("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new $("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??E(this.tableName??"",N(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new $("foreign_key",{columns:[N(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new $("foreign_key",{columns:[N(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}notNullable(){return this.nodes.push(new $("not_null",{columns:[N(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new $("null",{columns:[N(this.columnNode.column)]})),this}default(t){let e;return t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new $("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new $("unique",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName??J(this.tableName??"",N(this.columnNode.column))})),this):(this.namedConstraints.push(new $("unique",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName||J(this.tableName??"",N(this.columnNode.column))})),this)}after(t){return this.nodes.push(new Et(t)),this}handleSqliteAutoIncrement(t){return this.nodes.push(new $("primary_key",{columns:[N(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var qe=class extends Te{constructor(e,r,o,n){super(r);this.context="create_table";this.tableName=o,this.namedConstraints=[],this.context=n??"create_table",this.sqlType=e;}build(e){return this.nodes.push(e),new Bt(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}char(e,r=1){let o=new x(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new x(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new x(e,r);return this.build(o)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new x(e,"uuid");return this.build(r)}ulid(e){let r=new x(e,"ulid");return this.build(r)}integer(e,r=255){let o=new x(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new x(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new x(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new x(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new x(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new x(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new x(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new x(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new x(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new x(e,"numeric",{precision:r,scale:o});return this.build(n)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let o=new x(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new x(e,"time",{precision:r});return this.build(o)}year(e){let r=new x(e,"year");return this.build(r)}datetime(e,r){let o=new x(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}timestamp(e,r){let o=new x(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}boolean(e){let r=new x(e,"boolean");return this.build(r)}binary(e){let r=new x(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new x(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new x(e,"blob");return this.build(r)}tinyblob(e){let r=new x(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new x(e,"mediumblob");return this.build(r)}longblob(e){let r=new x(e,"longblob");return this.build(r)}json(e){let r=new x(e,"json");return this.build(r)}jsonb(e){let r=new x(e,"jsonb");return this.build(r)}enum(e,r){let o=new x(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new x(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new x(e,"",{isRawValue:true});return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Qt=class extends Te{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}addColumn(t){let e=[],r=new qe(this.sqlType,e,this.table),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(n),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=o.getNodes().filter(c=>{let u=c;return u.constraintType==="not_null"||u.constraintType==="null"||u.constraintType==="default"}),d=new Ct(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(c=>{let u=c;return u.constraintType==="unique"||u.constraintType==="foreign_key"||u.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new ne(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(u=>u.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=N(s.column),l=o.getNodes().find(u=>u.constraintType==="null"),m=o.getNodes().find(u=>u.constraintType==="not_null")||l,c=o.getNodes().find(u=>u.constraintType==="default");this.nodes.push(new _t(N(a),s,{})),m&&(m.constraintType==="not_null"?this.nodes.push(new Dt(N(a))):m.constraintType==="null"&&this.nodes.push(new xt(N(a)))),c&&(c.defaultValue===void 0||c.defaultValue===null?this.nodes.push(new Ue(N(a))):this.nodes.push(new We(N(a),c.defaultValue))),o.getNodes().forEach(u=>{let p=u;switch(p.constraintType){case "primary_key":this.addPrimaryKey(N(a));break;case "unique":this.unique(N(a),{constraintName:p.constraintName});break;case "foreign_key":this.addForeignKey(N(a),p.references?.table??"",N(p.references?.columns?.[0]??""),{constraintName:p.constraintName,onDelete:p.onDelete,onUpdate:p.onUpdate});break}});}dropColumn(t){this.nodes.push(new Rt(t));}renameColumn(t,e){this.nodes.push(new At(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ue(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new De([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ne(new $(...t)));}addForeignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ne(new $("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??E(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ne(new $("unique",{columns:[t],constraintName:e?.constraintName??J(this.table,t)})));}setDefault(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new We(t,e));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=E(this.table,t,e);this.nodes.push(new se(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new f("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??J(this.table,t);this.nodes.push(new se(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new se(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new f("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Oe(t));}};var me=class{constructor(t){if(this.sqlType=t||A.DB_TYPE,!this.sqlType)throw new f("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawQuery(t){this.queryStatements.push(t);}runFile(t){if(!Z__default.default.existsSync(t))throw new f("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=_e__default.default.basename(t),r=_e__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new f("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=Z__default.default.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of n)this.rawQuery(s);}createTable(t,e,r){let o=new qe(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new S({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a=new Ot(t,n,o.getNamedConstraints(),r?.ifNotExists),l=s.parse([a]).sql,d=l.startsWith("create table")?l:`create table ${l}`;this.rawQuery(d);}alterTable(t,e){let r=[],o=new Qt(t,r,this.sqlType);if(e(o),!r.length)return;let n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let l=new de(t,s),d=n.parse([l]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),s=[];};for(let l of r)l.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(l);a();}dropTable(t,e=false){let r=new It(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new de(t,[new Pt(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new Ie(t),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r){Array.isArray(e)||(e=[e]);let o=r.constraintName||hr(t,e.join("_")),n=new vt(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new $t(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new De(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addUnique(t,e,r){let o=Array.isArray(e)?e:[e],n=r?.constraintName??J(t,o.join("_")),s=new $("unique",{columns:o,constraintName:n}),a=new de(t,[new ne(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=E(t,e,r),n=new se(o),s=new de(t,[n]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let o=Array.isArray(e)?J(t,e.join("_")):J(t,e),n=r?.constraintName??o,s=new se(n),a=new de(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Oe,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new $(...e),o=new de(t,[new ne(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new se(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAstInstance(t){return new S({table:t.table,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType)}};var Kt=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.registeredModels);}buildDropDependencies(t){let e=new Map,r=new Map,o=new Map;for(let n of t.relationsToDrop||[]){let s=`${n.table}.${n.relation.name}`,a=[];if(n.relation.referencedTable&&a.push(`table.${n.relation.referencedTable}`),n.relation.referencedColumns)for(let l of n.relation.referencedColumns)a.push(`column.${n.relation.referencedTable}.${l}`);e.set(s,a);}for(let n of t.tablesToDrop||[]){let s=`table.${n.table}`,a=[];for(let l of this.models){let d=l.getRelations();for(let m of d)m.type==="belongsTo"&&m.model().table===n.table&&a.push(`fk.${l.table}.${m.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(d=>d.table===n.table);if(l){let d=l.getColumns().find(m=>m.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let m=l.getRelations();for(let c of m)c.columnName===d.columnName&&a.push(`fk.${n.table}.${c.constraintName}`);}}o.set(s,a);}return {foreignKeys:e,tables:r,constraints:o}}topologicalSortReverse(t,e){let r=new Set,o=new Set,n=[],s=a=>{if(o.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;o.add(a);let l=e(a);for(let d of l)s(d);o.delete(a),r.add(a),n.push(a);};for(let a of t.keys())r.has(a)||s(a);return n}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],o=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of o){let[a,l]=s.split("."),d=t.relationsToDrop?.find(m=>m.table===a&&m.relation.name===l);d&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:d,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(d)});}let n=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let d of l)d.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):d.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of n){let a=s.replace("table.",""),l=t.tablesToDrop?.find(d=>d.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let o=[],n=this.models.find(s=>s.table===r.table);if(n){let s=n.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&o.push(`PRIMARY KEY on ${r.table}`);let a=n.getRelations();for(let l of a)l.columnName===s.columnName&&o.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,o);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.models.find(n=>n.table===r.table);o&&o.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){return this.sql.getDbType()==="sqlite"?[]:t.relation.name?this.sql.alterTable(t.table,e=>{e.dropConstraint(t.relation.name);}):[]}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,e=>{e.dropPrimaryKey();})}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);})}generateDropColumnSql(t){return this.sql.alterTable(t.table,e=>{e.dropColumn(t.column);})}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var kt=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.registeredModels),this.dropResolver=new Kt(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,o=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),n=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...o].filter(l=>n.has(l)));return e.filter(l=>{let d=r(l);return d?!(s.has(d)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let o=this.sql.createTable(r.table,n=>{for(let s of r.columns){if(Array.isArray(s.type)){n.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,n,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}});e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[o]});}for(let r of t.columnsToAdd){let o=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:o});}return e}generateConstraintCreationOperations(t){let e=[];for(let o of t.uniquesToDrop||[]){let n=this.sql.alterTable(o.table,s=>{s.dropConstraint(o.name);});e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:n});}let r=new Set((t.uniquesToDrop||[]).map(o=>o.name));for(let o of t.indexesToDrop){if(r.has(o.index))continue;let n=new me(this.sql.getDbType());n.dropIndex(o.index,o.table);let s=n.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[s]});}for(let o of t.primaryKeysToAdd){let a=this.models.find(d=>d.table===o.table)?.getColumns().find(d=>d.columnName===o.columns[0])?.primaryKeyConstraintName||ge(o.table,o.columns[0]),l=this.sql.alterTable(o.table,d=>{let m=a||ge(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:m});});e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:a,data:o,dependencies:[`table.${o.table}`],sqlStatements:l});}for(let o of t.relationsToAdd){if(o.relation.type==="manyToMany")continue;let n=this.generateAddRelationViaAlter(o),s=this.computeFkConstraintName(o);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:s,data:o,dependencies:this.getForeignKeyDependencies(o),sqlStatements:n});}for(let o of t.uniquesToAdd||[]){let n=this.models.find(l=>l.table===o.table),s=(o.columns||[]).map(l=>n?.getColumns().find(m=>m.columnName===l)?.databaseName||l),a=this.sql.alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});});e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name||"mandatory",data:o,dependencies:[`table.${o.table}`],sqlStatements:a});}for(let o of t.indexesToAdd){let n=this.generateCreateIndexSql(o);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[n]});}return e}computeFkConstraintName(t){let e=N(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=N(t.relation.manyToManyOptions.throughModel));let n=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=n.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=n.find(l=>l.columnName===s)?.databaseName||s,E(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:o});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let o=t.relation.model();e.push(`table.${o.table}`);let n=o.primaryKey||"id",s=o.getColumns().find(a=>a.columnName===n);s&&e.push(`column.${o.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let o=N(t.relation.manyToManyOptions.throughModel);e.push(`table.${o}`);}e.push(`table.${t.table}`);let r=this.models.find(o=>o.table===t.table);if(r){let o=r.getColumns().find(n=>n.columnName===t.relation.columnName||n.databaseName===t.relation.columnName);o&&e.push(`column.${t.table}.${o.databaseName}`);}return e}executeBuilderMethod(t,e,r,o,n=true){let s=e[r.type](...o);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||ge(t,r.columnName)}),r.constraints?.default!==void 0&&s.default(r.constraints.default),r.constraints?.nullable===false?s.notNullable():r.constraints?.nullable===true&&s.nullable()),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,r=>{r.addColumn(o=>{let n=this.executeBuilderMethod(t.table,o,t.column,e,false);return t.column.constraints?.default!==void 0&&n.default(t.column.constraints.default),t.column.constraints?.nullable===false?n.notNullable():t.column.constraints?.nullable===true&&n.nullable(),n});})}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,o=>{o.alterColumn(n=>{let s=this.executeBuilderMethod(t.table,n,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0&&s.default(t.modelColumn.constraints.default),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.nullable(),s});})}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),o=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),n=new me(this.sql.getDbType());return n.createIndex(t.table,o,{constraintName:t.index}),n.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=N(t.relation.manyToManyOptions.throughModel),r=N(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let o=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,n=N(r);if(t.relation.type==="belongsTo"){let u=t.relation.model(),p=u.primaryKey,h=u.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=u?.databaseCaseConvention||"preserve";n=O(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let u=t.relation.model();if(typeof n=="string"&&n){let p=u.getColumns(),g=p.find(h=>h.columnName===n);if(g)n=g.databaseName;else {let h=u.primaryKey||"id",w=p.find(_=>_.columnName===h);if(w)n=w.databaseName;else {let _=u?.databaseCaseConvention||"preserve";n=O(n||h,_);}}}else {let p=u.primaryKey||"id",h=u.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=u?.databaseCaseConvention||"preserve";n=O(p,w);}}}let s=this.models.find(u=>u.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(u=>u.columnName===l);if(d)l=d.databaseName;else {let u=s?.databaseCaseConvention||"preserve";l=O(l,u);}if(t.relation.type==="belongsTo"){let u=a.find(p=>p.columnName===t.relation.foreignKey);if(u)l=u.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=O(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let u=t.relation.manyToManyOptions.leftForeignKey,p=N(u),g=a.find(h=>h.columnName===p);if(g)l=g.databaseName;else {let h=s?.databaseCaseConvention||"preserve";l=O(p,h);}}let m=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.alterTable(t.table,u=>{let p=o||E(t.table,l,e);u.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:m,onUpdate:c});})}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};function bd(i){return i.replace(/\s+/g," ").trim()}function Sd(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function be(i,t){let e=bd(t.toLowerCase()),r=Sd(e);switch(i){case "sqlite":{let o=[{test:n=>n.includes("int"),normalized:"integer"},{test:n=>n.includes("char"),normalized:"varchar"},{test:n=>n.includes("text"),normalized:"text"},{test:n=>n.includes("clob"),normalized:"text"},{test:n=>n.includes("date"),normalized:"text"},{test:n=>n.includes("time"),normalized:"text"},{test:n=>n.includes("timestamp"),normalized:"text"},{test:n=>n.includes("datetime"),normalized:"text"},{test:n=>n.includes("blob"),normalized:"blob"},{test:n=>n.includes("real")||n.includes("floa")||n.includes("doub"),normalized:"real"},{test:n=>n.includes("numeric"),normalized:"numeric"},{test:n=>n.includes("bool"),normalized:"integer"},{test:n=>n.includes("uuid"),normalized:"varchar"},{test:n=>n.includes("ulid"),normalized:"varchar"},{test:n=>n.includes("jsonb"),normalized:"text"},{test:n=>n.includes("json"),normalized:"text"}];for(let n of o)if(n.test(r))return n.normalized;return r}case "mysql":case "mariadb":{if(r.endsWith("text")||r==="text")return "text";switch(r){case "int":case "integer":return "integer";case "tinyint":return "tinyint";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":return "bigint";case "float":return "float";case "double":case "double precision":return "double";case "real":return "double";case "decimal":case "numeric":return "numeric";case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "uuid":return "varchar";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "timestamp":return "timestamp";case "time":return "time";case "year":return "year";case "jsonb":return "json";case "json":return "json";case "enum":return "enum";case "binary":return "binary";case "varbinary":return "varbinary";case "tinyblob":return "tinyblob";case "mediumblob":return "mediumblob";case "longblob":return "longblob";case "blob":return "blob";case "boolean":case "bool":return "boolean";default:return r}}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "character varying":return "varchar";case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":return "integer";case "mediumint":return "integer";case "bigint":case "int8":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}default:return r}}var $e=class i{constructor(t){this.emptyStatements=[/alter table ".*"$/];this.sql=t,this.models=Object.values(this.sql.registeredModels),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let o=await e.sql.getTableSchema(r.table),n={columns:r.getColumns().filter(d=>d?.type!==void 0&&d?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let m of n.indexes)o.indexes.map(c=>c.name).includes(m.name)||e.data.indexesToAdd.push({table:r.table,index:m.name});let d=r.getUniques?.()||[];for(let m of d)e.data.uniquesToAdd.push({table:r.table,name:m.name||"mandatory",columns:m.columns});for(let m of n.relations){if(m.type!=="belongsTo")continue;let c=N(m.constraintName);o.foreignKeys.find(p=>p.name===c)||e.data.relationsToAdd.push({table:r.table,relation:m,onDelete:m.onDelete,onUpdate:m.onUpdate});}return}for(let d of n.columns)o.columns.some(c=>c.name===d.databaseName||c.name===d.columnName)||e.data.columnsToAdd.push({table:r.table,column:d});for(let d of o.columns)n.columns.some(c=>c.databaseName===d.name||c.columnName===d.name)||e.data.columnsToDrop.push({table:r.table,column:d.name});for(let d of n.indexes)o.indexes.map(m=>m.name).includes(d.name)||e.data.indexesToAdd.push({table:r.table,index:d.name});let s=r.getUniques?.()||[];for(let d of s)o.indexes.some(c=>c.name===d.name&&c.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:d.name||"mandatory",columns:d.columns});for(let d of o.indexes)d.isUnique||n.indexes.map(c=>c.name).includes(d.name)||e.data.indexesToDrop.push({table:r.table,index:d.name});for(let d of o.indexes){if(!d.isUnique)continue;(r.getUniques?.()||[]).map(c=>c.name).includes(d.name)||e.data.uniquesToDrop.push({table:r.table,name:d.name});}for(let d of n.columns){let m=o.columns.find(p=>p.name===d.databaseName||p.name===d.columnName);if(!m)continue;let c=!e.areColumnsEqual(m,d,o.indexes),u=e.getDefaultChange({table:r.table,dbColumns:m,modelColumn:d});(c||u)&&e.data.columnsToModify.push({table:r.table,dbColumns:m,modelColumn:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;if(d.type==="manyToMany"&&d.manyToManyOptions){let u=N(d.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:u,relation:{type:"belongsTo",model:()=>r,columnName:N(d.manyToManyOptions.leftForeignKey),foreignKey:d.manyToManyOptions.leftForeignKey,constraintName:d.constraintName?N(d.constraintName):E(u,N(d.manyToManyOptions.leftForeignKey||he(r.table)),r.table),onDelete:d.onDelete,onUpdate:d.onUpdate},onDelete:d.onDelete,onUpdate:d.onUpdate});continue}let m=N(d.constraintName);if(m&&o.foreignKeys.some(u=>u.name===m))continue;o.foreignKeys.find(u=>e.relationMatchesDbRelation(r,d,u))||e.data.relationsToAdd.push({table:r.table,relation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let a=new Set(n.relations.filter(d=>d.type==="belongsTo").map(d=>{let m=N(d.foreignKey)||d.columnName,u=r.getColumns().find(p=>p.columnName===m)?.databaseName||m;return N(d.constraintName)||E(r.table,u,d.model().table)}));for(let d of o.foreignKeys){if(d.name&&a.has(d.name))continue;n.relations.find(c=>c.type!=="belongsTo"&&c.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,c,d))||e.data.relationsToDrop.push({table:r.table,relation:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;let m=o.foreignKeys.find(c=>e.relationMatchesDbRelation(r,d,c));m&&!e.areRelationsEqual(m,d)&&e.data.relationsToModify.push({table:r.table,dbRelation:m,modelRelation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let l=r.primaryKey;if(l&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[l]}),o.primaryKey&&!l&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),l&&o.primaryKey){let d=r.getColumns().find(m=>m.columnName===l);d&&!e.arePrimaryKeysEqual(o.primaryKey,d)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:l});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat()}getSqlStatementsByPhase(){let t=new kt(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),o={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let n of r)o[n.phase].push(...n.sqlStatements);return o}areColumnsEqual(t,e,r=[]){let o=t.name===e.databaseName,n=this.sql.getDbType(),s=be(n,t.dataType),a=typeof e.type=="string"?be(n,e.type):void 0;a&&o&&(o=s===a),e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let l=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;o=o&&d===m;}return o}areRelationsEqual(t,e){let r=N(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),m=d.primaryKey||"id",c=d.getColumns().find(g=>g.columnName===m),u=d.table,p=c?.databaseName||m;o=o&&t.referencedTable===u&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=N(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===d;}let n=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&o&&(o=n===a),l&&o&&(o=s===l),o}relationMatchesDbRelation(t,e,r){let o,n=e;if(n&&n.model){if(typeof n.model=="function"&&n.model.table)o=n.model;else if(typeof n.model=="function")try{let h=n.model();h&&h.table&&(o=h);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?N(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=N(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),m=(n.type||"belongsTo")==="belongsTo"?N(n.foreignKey):n.columnName,c=l.find(h=>h.columnName===m);c&&(m=c.databaseName);let u=o.primaryKey||"id",g=o.getColumns().find(h=>h.columnName===u)?.databaseName||u;return r.columns.length===1&&r.columns[0]===m&&r.referencedColumns.length===1&&r.referencedColumns[0]===g}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&n}getDefaultChange(t){let e=this.sql.getDbType(),r=be(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?be(e,t.modelColumn.type):void 0;if(o&&r!==o||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||typeof t.modelColumn.type=="string"&&(o==="timestamp"||o==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let n=t.modelColumn.constraints?.default!==void 0,s=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(n&&!s)return "set";if(!n&&s)return "drop";if(n&&s){let a=String(t.dbColumns.defaultValue),l=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,a),m=this.normalizeDefaultValue(e,o||r,l);return d!==m?"set":false}return false}normalizeDefaultValue(t,e,r){let o=String(r).trim();if(!o)return o;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=o.match(/^'(.*)'$/s);if(s&&(o=s[1]),o==="{}"||o==="")return "{}";let a=JSON.parse(o);return JSON.stringify(a)}catch{}o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^true$/i.test(o)?"true":/^false$/i.test(o)?"false":/^null$/i.test(o)?"null":(o)}if(t==="mysql"||t==="mariadb"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o)?"current_timestamp":o}if(t==="sqlite"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),o.toLowerCase()}return o}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let o of r){if(o.type!=="manyToMany"||!o.manyToManyOptions||o.manyToManyOptions.wasModelProvided)continue;let n=N(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(P=>P.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",m=s.getColumns().find(P=>P.columnName===l),c=a.getColumns().find(P=>P.columnName===d);if(!m||!c)continue;let u=N(o.manyToManyOptions.leftForeignKey)||l,p=N(o.manyToManyOptions.rightForeignKey)||d,g=await this.sql.getTableSchema(n);if(!g.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(m,u),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:u,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let h=this.clonePkAsColumn(m,u),w=this.clonePkAsColumn(c,p),_=g.columns.find(P=>P.name===u),D=g.columns.find(P=>P.name===p),L=_?this.areColumnsEqual(_,h,g.indexes):false,j=D?this.areColumnsEqual(D,w,g.indexes):false;for(let P of g.foreignKeys){let ie=P.referencedTable===s.table,or=P.referencedTable===a.table;if(!ie&&!or)continue;let Nl=ie?u:p,Be=P.columns[0];Be&&Be!==Nl&&(this.data.relationsToDrop.push({table:n,relation:P}),Be!==u&&Be!==p&&this.data.columnsToDrop.push({table:n,column:Be}));}let Q={};L||(Q[h.databaseName]=h),j||(Q[w.databaseName]=Q[w.databaseName]||w);for(let P of Object.keys(Q))this.data.columnsToAdd.push({table:n,column:Q[P]});let X=this.buildBelongsToRelation(n,()=>s,u,l,void 0,o.onDelete,o.onUpdate),q=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),Re=g.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===u),Xe=g.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!Re){let P=g.foreignKeys.find(ie=>ie.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:n,relation:P}),this.data.relationsToAdd.push(X);}if(!Xe){let P=g.foreignKeys.find(ie=>ie.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:n,relation:P}),this.data.relationsToAdd.push(q);}}}}async removeFkChurnByName(){let t=new Set;for(let o of this.data.relationsToAdd)t.add(o.table);for(let o of this.data.relationsToDrop)t.add(o.table);let e=new Map;for(let o of t){let n=await this.sql.getTableSchema(o),s=new Set((n.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(o,s);}let r=new Map;for(let o of this.models){let n=o.getRelations(),s=new Set;for(let a of n){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,m=o.getColumns().find(u=>u.columnName===l)?.databaseName||l,c=N(a.constraintName)||E(o.table,m,a.model().table);s.add(c);}r.set(o.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async o=>{let n=await this.sql.getTableSchema(o.table),s=this.models.find(h=>h.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(w=>w.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let d=o.table,m=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let h=o.relation.model();d=h.table;let w=h.primaryKey||"id";m=h.getColumns().find(D=>D.columnName===w)?.databaseName||w;}let c=new Set([l,o.relation.columnName].filter(Boolean)),u=n.foreignKeys.some(h=>{if(h.columns.length!==1||h.referencedColumns.length!==1)return false;let w=c.has(h.columns[0]),_=h.referencedTable===d,D=h.referencedColumns[0]===m;return w&&_&&D}),p=N(o.relation.constraintName)||E(o.table,l,d),g=e.get(o.table)||new Set;if(u||p&&g.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let h=N(o.relation.manyToManyOptions.throughModel),w=N(o.relation.manyToManyOptions.leftForeignKey),_=N(o.relation.manyToManyOptions.rightForeignKey),D=o.table===h&&o.relation.columnName===w&&o.relation.model().table===s?.table,L=o.table===h&&o.relation.columnName===_&&o.relation.model().table!==s?.table,j=await this.sql.getTableSchema(h),Q=j.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===w&&q.referencedTable===(s?.table||"")),X=j.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===_&&q.referencedTable===o.relation.model().table);if(D&&Q||L&&X)return null}return o})).then(o=>o.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async o=>{let n=this.models.find(d=>d.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(d=>{if(d.type!=="belongsTo")return false;let c=a.find(w=>w.columnName===d.foreignKey)?.databaseName||d.foreignKey,u=d.model(),p=u.primaryKey||"id",h=u.getColumns().find(w=>w.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===c&&o.relation.referencedTable===u.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===h})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){return {columnName:e,databaseName:e,isPrimary:false,type:t.type,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,o,n,s,a){let l=n?N(n):E(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var Ee=class extends T{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.table=e;}};var z=class extends T{constructor(e,r=[],o,n=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.table=e,this.records=r,this.returning=o,this.disableReturning=n;}};var Ve=class extends T{constructor(e,r,o,n="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=o,this.mode=n,this.returning=s;}};var ue=class extends T{constructor(e,r=[],o=[],n=false){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.table=e,this.columns=r,this.values=o;}};var R=class extends T{constructor(e,r,o=false,n,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=o,this.operator=n,this.value=s;}};var je=class extends T{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var W=class extends R{constructor(e,r,o=false,n,s,a=false){super(e,r,o,"=",s,a);this.file="where_json";this.jsonOperator=n,this.value=s;}};var ce=class extends T{constructor(e,r,o,n="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=o,this.chainsWith=` ${n}`;}};var Lt=class extends stream.Readable{constructor(t,e,r=[],o){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=o;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(o,n)=>{if(o){r=true,this.emit("error",o);return}t++;let s=false,a,l={write:d=>{s=true,a=d;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(d=>{r=true,this.emit("error",d);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},o=>{if(o){r=true,this.emit("error",o);return}e=true,t===0&&!r&&this.push(null);});}},gl=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool("sqlite");if(o)return new Promise((d,m)=>{n.run(i,t,function(c){c&&m(c),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,m)=>{n.all(i,t,(c,u)=>{c&&m(c),(!u||!u.length)&&d([]),d(u);});});let s=r?.typeofModel;if(!s)return new Promise((d,m)=>{n.run(i,t,function(c){c?m(new Error(c.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((c,u)=>{n.run(i,t,function(p){if(p)return u(p);let g=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){c(g);return}let h=g?.[a]||this.lastID;if(!h)return u(new f("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let w=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(w,[h],(_,D)=>{if(_)return u(_);c(D);});});});if(!Array.isArray(r.models))throw new f("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models,m=[];return new Promise(async(c,u)=>{try{let p=d.map(async g=>{let h=new y(s),{columns:w,values:_}=h.prepareColumns(Object.keys(g),Object.values(g),"insert"),D=Object.fromEntries(w.map((X,q)=>[X,_[q]])),L=new S(s,e.getDbType()),{sql:j,bindings:Q}=L.parse([new z(s.table,[D])]);return new Promise((X,q)=>{n.run(j,Q,function(Re){if(Re)return q(Re);let Xe=g[a]||this.lastID;if(!a){X(g);return}if(!Xe)return q(new f("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let P=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(P,[Xe],(ie,or)=>{if(ie)return q(ie);X(or);});});})});m=await Promise.all(p),c(m);}catch(p){u(p);}})}return new Promise((d,m)=>{n.run(i,t,function(c){c?m(new Error(c.message)):d(this.changes);});})};var B=async(i,t,e,r="raw",o)=>{let n=e.type;switch(o?.shouldNotLog||ts(i,e.logs,t),n){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool("mysql"),[a]=await zn(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="affectedRows"?a.affectedRows:a;case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool("postgres"),d=await zn(()=>l.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="raw"?d.rows:d.rowCount;case "sqlite":let m=await zn(()=>gl(i,t,e,{typeofModel:o?.sqlLiteOptions?.typeofModel,mode:o?.sqlLiteOptions?.mode||"fetch",models:o?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return r==="raw"?Array.isArray(m)?m:[m]:m;default:throw new f("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${n}`)}},Ut=async(i,t,e,r={},o)=>{let n=e.type;switch(n){case "mariadb":case "mysql":{let s=e.getPool("mysql"),a=e.sqlConnection??await s.getConnection(),l=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),m=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),c=0,u=false,p=false,g=()=>{try{a.release();}catch{}};return m.on("data",h=>{if(o.onData){c++,Promise.resolve(o.onData(l,h)).then(()=>{c--,u&&c===0&&!p&&(g(),l.end());}).catch(w=>{p=true,g(),l.destroy(w);});return}l.write(h);}),m.on("end",()=>{u=true,c===0&&!p&&(g(),l.end());}),m.on("error",h=>{p=true,g(),l.destroy(h);}),l.on("close",()=>{g();}),l}case "cockroachdb":case "postgres":{let s=e.sqlConnection??await e.getPool("postgres").connect(),a=await import('pg-query-stream').catch(()=>{throw new K("pg-query-stream")}),l=new stream.PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=new a.default(i,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),m=s.query(d),c=0,u=false,p=false,g=h=>{try{s.release(h);}catch{}};return m.on("data",h=>{if(o.onData){c++,Promise.resolve(o.onData(l,h)).then(()=>{c--,u&&c===0&&!p&&(g(),l.end());}).catch(w=>{p=true,g(w),l.destroy(w);});return}l.write(h);}),m.on("end",()=>{u=true,c===0&&!p&&(g(),l.end());}),m.on("error",h=>{p=true,g(h),l.destroy(h);}),l}case "sqlite":{let s=e.sqlConnection??e.getPool("sqlite");return new Lt(s,i,t,{onData:o.onData})}default:throw new f("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function zn(i,t={maxRetries:0,delay:0},e=false){let r=0,o=t.maxRetries||0,n=t.delay||0;async function s(){try{return i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<o)return r++,rs(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var F=async(i,t="millis",e=3)=>{let r=Gn__namespace.performance.now(),o=await i(),n=Gn__namespace.performance.now()-r;return t==="millis"?[n.toFixed(e),o]:[(n/1e3).toFixed(e),o]};var U=class extends T{constructor(e,r,o,n){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=o,this.isRawValue=n??false;}};var He=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=yt(t),this.modelRelationsMap=new Map(this.modelRelations.map(o=>[o.columnName,o]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new f("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Wt(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}function bl(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var H=class extends T{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var Ce=class extends T{constructor(e,r,o=false,n,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=o,this.operator=n,this.value=s;}};var Ft=class extends T{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Vt=class extends T{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var V=class extends T{constructor(e,r,o,n="inner",s,a=false){super(`${n} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=o,this.on=s;}};var Ye=class extends T{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var jt=class extends T{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Ht=class extends T{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Je=class extends T{constructor(e,r="asc",o=false){super("order by",o);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var Yt=class{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs;let r=this.model?.getColumns;this.modelColumns=typeof r=="function"?r.call(this.model):[],this.modelColumnsMap=new Map(this.modelColumns.map(o=>[o.columnName,o]));}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Ye(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ye(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Je(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Je(t,"asc",true)),this}limit(t){return typeof t!="number"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new jt(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Ht(t),this}};var Jt=class extends Yt{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new V(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new V(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new V(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new V(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new V(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new V(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,n,s),this}join(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new V(typeof t=="string"?t:t.table,e,n,"inner",{operator:s||"="})),this}leftJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new V(typeof t=="string"?t:t.table,e,n,"left",{operator:s||"="})),this}rightJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new V(typeof t=="string"?t:t.table,e,n,"right",{operator:s||"="})),this}fullJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new V(typeof t=="string"?t:t.table,e,n,"full",{operator:s||"="})),this}};var zt=class extends Jt{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.modelAnnotatedColumns=[];this.dbType=r.getDbType(),this.fromNode=new H(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],e.map(o=>O(o,this.model.databaseCaseConvention)).forEach(o=>{this.selectNodes.push(new U(o));}),this}selectRaw(e){return this.selectNodes.push(new U(e,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new H(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes.push(new U(s,a,n)),this.modelAnnotatedColumns.push(a),this}from(e){return this.fromNode=new H(e),this}table(e){return this.fromNode=new H(e),this}distinct(){return this.distinctNode=new Ft,this}distinctOn(...e){return this.distinctOnNode=new Vt(e),this}};var Gt=class extends zt{constructor(e,r,o=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=o;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,o){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&o===void 0?this.andWhereSubQuery(e,"in",r):r instanceof C&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function")?this.andWhereSubQuery(e,r,o):this.andWhere(e,r,o)}andWhere(e,r,o){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new R(e,"and",false,n,s)),this}orWhere(e,r,o){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof C&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new R(e,"or",false,n,s)),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new R(e,"and",true,n,s)),this}andWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new R(e,"and",true,n,s)),this}orWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof C&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof C||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof C)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new R(e,"or",true,n,s)),this}whereBetween(e,r,o){return this.andWhereBetween(e,r,o)}andWhereBetween(e,r,o){return this.whereNodes.push(new R(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new R(e,"or",false,"between",[r,o])),this}whereNotBetween(e,r,o){return this.andWhereNotBetween(e,r,o)}andWhereNotBetween(e,r,o){return this.whereNodes.push(new R(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new R(e,"or",true,"between",[r,o])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new R(e,"and",false,"in",r)),this):(this.whereNodes.push(new R("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new R(e,"or",false,"in",r)),this):(this.whereNodes.push(new R("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new R(e,"and",true,"in",r)),this):(this.whereNodes.push(new R("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new R(e,"or",true,"in",r)),this):(this.whereNodes.push(new R("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new R(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new R(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new R(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new R(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new R(e,"and",false,o?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new R(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new R(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new R(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new R(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof C?e:new C(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new R(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new R(e,"or",false,"=",r,true)),this}having(e,r,o){return this.andHaving(e,r,o)}andHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new Ce(e,"and",false,n,s)),this}orHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new Ce(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ce(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ce(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof C)return e;let r=new C(this.model,this.sqlDataSource);return e(r),r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ce(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ce(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new C(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new je(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new C(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new je(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Zt=class extends Gt{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new W(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new W(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new W(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new W(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new W(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new W(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new W(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new W(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new W(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new W(t,"or",false,"raw",e)),this}};var C=class i extends Zt{constructor(e,r=fe.getInstance()){super(e,r);this.isNestedCondition=false;this.mustRemoveAnnotations=false;this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new S(this.model,this.dbType),this.interpreterUtils=new y(this.model);}get fromTable(){this.fromNode||(this.fromNode=new H(this.model.table));let{sql:e}=this.astParser.parse([this.fromNode]);return e.replace(/^FROM /i,"")}async exists(){return !!await this.one()}async existsWithPerformance(e="millis"){let[r,o]=await F(this.exists.bind(this),e);return {data:o,time:Number(r)}}async many(){let{sql:e,bindings:r}=this.unWrap();return B(e,r,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}})}async pluck(e){return (await this.many()).map(o=>o[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async first(){return this.one()}async oneOrFail(){let e=await this.one();if(!e)throw new f("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async firstOrFail(){return this.oneOrFail()}async stream(e={},r){let{sql:o,bindings:n}=this.unWrap(),s=await Ut(o,n,this.sqlDataSource,e,{onData:(a,l)=>{a.write(l);}});return await r?.(s),s}async*chunk(e){let r=0;for(;;){let o=await this.limit(e).offset(r).many();if(!o.length)break;r+=o.length,yield o;}}async paginateWithCursor(e,r,o){let n=this.clone();this.orderByNodes.length||this.orderBy(r.discriminator,r.orderBy||"asc"),o&&this.where(o.key,r.operator||">",o.value),this.limit(e);let s=await this.many(),a=await n.getCount(),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:bl(e,a),data:s},{key:r.discriminator,value:d}]}selectSubQuery(e,r){if(typeof e=="function"){let o=new i(this.model,this.sqlDataSource);return e(o),this.selectNodes.push(new U(o.extractQueryNodes(),r)),this}return this.selectNodes.push(new U(e.extractQueryNodes(),r)),this}lockForUpdate(e={}){return this.lockQueryNodes.push(new Fe("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Fe("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Me(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Me(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Me(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Me(o,true)),this}async increment(e,r=1){let{sql:o,bindings:n}=this.astParser.parse([new ue(`${this.fromTable} set ${e} = ${e} + ${r}`,[],[],true),...this.whereNodes,...this.joinNodes]);return B(o,n,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async decrement(e,r=1){let{sql:o,bindings:n}=this.astParser.parse([new ue(`${this.fromTable} set ${e} = ${e} - ${r}`,[],[],true),...this.whereNodes,...this.joinNodes]);return B(o,n,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async getCount(e="*"){this.clearForFunctions(),this.annotate("count",e,"total");let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.annotate("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.annotate("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.annotate("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.annotate("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&b.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=await this.clone().getCount("*"),s=await this.limit(r).offset((e-1)*r).many();return {paginationMetadata:Wt(e,r,n),data:s}}from(e,r){if(typeof e=="function"){if(!r)throw new f("QueryBuilder::from","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource);e(o);let n=o.extractQueryNodes();return this.fromNode=new H(n,r),this}return this.fromNode=new H(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("normal",e,n)),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("recursive",e,n)),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new f("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new ve("materialized",e,n)),this}async insert(e,r){let{columns:o,values:n}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),s=Object.fromEntries(o.map((m,c)=>[m,n[c]])),{sql:a,bindings:l}=this.astParser.parse([new z(this.fromTable,[s],r),...this.joinNodes]),d=await B(a,l,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});return Array.isArray(d)&&d.length?d[0]:d}async insertMany(e,r){if(!e.length)return [];let o=e.map(a=>{let{columns:l,values:d}=this.interpreterUtils.prepareColumns(Object.keys(a),Object.values(a),"insert");return Object.fromEntries(l.map((m,c)=>[m,d[c]]))}),{sql:n,bindings:s}=this.astParser.parse([new z(this.fromTable,o,r),...this.joinNodes]);return B(n,s,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:o}})}async update(e){let r=Object.keys(e),o=Object.values(e),{columns:n,values:s}=this.interpreterUtils.prepareColumns(r,o,"update"),{sql:a,bindings:l}=this.astParser.parse([new ue(this.fromTable,n,s),...this.whereNodes,...this.joinNodes]);return B(a,l,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async truncate(){let e=new Ie(this.fromTable),{sql:r,bindings:o}=this.astParser.parse([e]);await B(r,o,this.sqlDataSource,"raw");}async delete(){let e=new Ee(this.fromTable),{sql:r,bindings:o}=this.astParser.parse([e,...this.whereNodes,...this.joinNodes]);return B(r,o,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async softDelete(e={}){let{column:r="deletedAt",value:o=ut()}=e||{},{columns:n,values:s}=this.interpreterUtils.prepareColumns([r],[o],"update"),{sql:a,bindings:l}=this.astParser.parse([new ue(this.fromTable,n,s),...this.whereNodes,...this.joinNodes]);return B(a,l,this.sqlDataSource,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}toQuery(e=this.dbType||"mysql"){let{sql:r,bindings:o}=this.unWrap(e);return cs(r,o)}unWrap(e=this.dbType){this.selectNodes.length||(this.selectNodes=[new U("*")]);let{sql:r,bindings:o}=this.astParser.parse(this.extractQueryNodes()),n=dt(this.sqlDataSource,r);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...o||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=I(this.modelSelectedColumns),e.modelAnnotatedColumns=I(this.modelAnnotatedColumns),e.distinctNode=I(this.distinctNode),e.distinctOnNode=I(this.distinctOnNode),e.selectNodes=I(this.selectNodes),e.withQuery=I(this.withQuery),e.joinNodes=I(this.joinNodes),e.whereNodes=I(this.whereNodes),e.groupByNodes=I(this.groupByNodes),e.havingNodes=I(this.havingNodes),e.orderByNodes=I(this.orderByNodes),e.lockQueryNodes=I(this.lockQueryNodes),e.unionNodes=I(this.unionNodes),e.withNodes=I(this.withNodes),e.fromNode=I(this.fromNode),e.limitNode=I(this.limitNode),e.offsetNode=I(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e.mustRemoveAnnotations=this.mustRemoveAnnotations,e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.fromNode||(this.fromNode=new H(this.fromTable)),this.selectNodes.length||(this.selectNodes=[new U("*")]),[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}async manyWithPerformance(e="millis"){let[r,o]=await F(this.many.bind(this),e);return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await F(this.one.bind(this),e);return {data:o,time:Number(r)}}async firstWithPerformance(e="millis"){return this.oneWithPerformance(e)}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await F(this.paginate.bind(this,e,r),o);return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await F(this.paginateWithCursor.bind(this,e,r,o),n);return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await F(this.oneOrFail.bind(this),e);return {data:o,time:Number(r)}}};var Xt=class i extends C{constructor(e,r){super(e,r);this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this)};this.sqlModelManagerUtils=new He(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=new Map,this.modelColumnsDatabaseNames=new Map,this.model.getColumns().forEach(n=>{this.modelColumnsMap.set(n.databaseName,n),this.modelColumnsDatabaseNames.set(n.databaseName,n.columnName);});}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){return r.connection?new i(e,r.connection):r.trx?new i(e,r.trx.sql):new i(e,e.sqlInstance)}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async first(e){return this.one(e)}async oneOrFail(e){let r=await this.one(e);if(!r)throw new f(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async firstOrFail(e){return this.oneOrFail(e)}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a,this.model));if(!o.length)return [];let n=await te(o,this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);if(!n)return [];let s=Array.isArray(n)?n:[n];return e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.(s),this.relationQueryBuilders.length&&await this.processRelationsRecursively(s),s}async*chunk(e,r={}){let o=0;for(;;){let n=await this.limit(e).offset(o).many(r);if(!n.length)break;yield n,o+=n.length;}}async stream(e={},r){!e.ignoreHooks?.includes("beforeFetch")&&this.model.beforeFetch?.(this);let{sql:o,bindings:n}=this.unWrap(),s=await Ut(o,n,this.sqlDataSource,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l,this.model),m=await te([d],this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);m&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([m]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([m]),a.write(m));}});return await r?.(s),s}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new f(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}async manyWithPerformance(e={},r="millis"){let[o,n]=await F(this.many.bind(this,e),r);return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await F(this.one.bind(this,e),r);return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await F(this.oneOrFail.bind(this,e),r);return {data:n,time:Number(o)}}async firstOrFailWithPerformance(e={},r="millis"){return this.oneOrFailWithPerformance(e,r)}async firstWithPerformance(e={},r="millis"){return this.oneWithPerformance(e,r)}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await F(this.paginate.bind(this,e,r,{ignoreHooks:s}),n);return {data:{paginationMetadata:l.paginationMetadata,data:l.data},time:Number(a)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await F(this.paginateWithCursor.bind(this,e,r,o),n);return {data:a,time:Number(s)}}async update(e,r={}){return r.ignoreBeforeUpdateHook&&this.model.beforeUpdate?.(this),super.update(e)}async softDelete(e={}){let{ignoreBeforeDeleteHook:r=false}=e||{};return !r&&this.model.beforeDelete?.(this),super.softDelete(e)}async delete(e={}){return e.ignoreBeforeDeleteHook&&this.model.beforeDelete?.(this),super.delete()}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("count",e,"total");let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("max",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("min",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("avg",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("sum",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async paginate(e,r,o={ignoreHooks:false}){let n=this.selectNodes,s=await this.getCount("*",{ignoreHooks:o.ignoreHooks});this.selectNodes=n;let a=await this.limit(r).offset((e-1)*r).many({ignoreHooks:o.ignoreHooks?["beforeFetch","afterFetch"]:[]});return {paginationMetadata:Wt(e,r,s),data:a}}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],this.selectNodes=this.selectNodes.concat(e.map(r=>new U(r))),this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes=this.selectNodes.concat(new U(s,a,n)),this.modelAnnotatedColumns.push(a),this}removeAnnotations(){return this.mustRemoveAnnotations=true,this.modelAnnotatedColumns=[],this}load(e,r){let o=this.sqlModelManagerUtils.getRelationFromModel(e),n=new i(o.model,this.sqlDataSource);return n.relation=o,r?.(n),this.relationQueryBuilders.push(n),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,o){return this.andHavingRelated(e,r,o)}andHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereExists(m),this}orHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereExists(m),this}notHavingRelated(e,r,o){return this.andNotHavingRelated(e,r,o)}andNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereNotExists(m),this}orNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereNotExists(m),this}clone(){let e=super.clone();return e.relationQueryBuilders=I(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let o=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,o);}));}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(u=>{let p=u[e.foreignKey];p&&n.set(String(p),u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=null;return}let g=n.get(String(p));u[e.columnName]=g||null;});break;case "belongsTo":let s=new Map;o.forEach(u=>{if(!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=u[e.model.primaryKey];p&&s.set(String(p),u);}),r.forEach(u=>{let p=u[e.foreignKey];if(!p){u[e.columnName]=null;return}let g=s.get(String(p));u[e.columnName]=g||null;});break;case "hasMany":if(!this.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(u=>{let p=u[e.foreignKey];if(!p)return;let g=String(p);a.has(g)||a.set(g,[]),a.get(g).push(u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=[];return}let g=a.get(String(p))||[];u[e.columnName]=g;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,m=l.leftForeignKey,c=this.modelColumnsMap.get(m)||this.modelColumnsDatabaseNames.get(m)||O(m,this.model.modelCaseConvention);o.forEach(u=>{let p=u.$annotations||{},g=p[c];if(g==null)return;let h=String(g);d.has(h)||d.set(h,[]),this.modelAnnotatedColumns.includes(c)||(delete p[c],Object.keys(p).length||delete u.$annotations),d.get(h).push(u);}),r.forEach(u=>{let p=u[this.model.primaryKey];if(!p){u[e.columnName]=[];return}let g=d.get(String(p))||[];u[e.columnName]=g;});break;default:throw new f(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,o){return this.getRelatedModelsQueryForRelation(e,r,o).many()}getRelatedModelsQueryForRelation(e,r,o){let n=this.getFilterValuesFromModelsForRelation(r,o);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);let l=ae__default.default.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,m=e.orderByNodes.map(q=>q.isRawValue?q.column:`${this.interpreterUtils.formatStringColumn(this.dbType,q.column)} ${q.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(d,q=>q.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${m}) as rn_${l}`).whereIn(r.foreignKey,n));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let u=e.modelSelectedColumns.map(q=>fr(q,d,e.model.table));return c.select(...u).from(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new f(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let g=e.limitNode?.limit,h=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(q=>q.includes(".")?q:`${r.model.table}.${q}`):[`${r.model.table}.*`];if(!g&&!h)return e.select(...w).annotate(`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n);let _=ae__default.default.randomBytes(6).toString("hex"),D=`${r.model.table}_cte_${_}`,L=e.orderByNodes.map(q=>{if(q.isRawValue)return q.column;let Re=q.column.includes(".")?q.column:`${r.model.table}.${q.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Re)} ${q.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let j=`${ae__default.default.randomBytes(6).toString("hex")}_left_foreign_key`,Q=e.with(D,q=>q.select(...w).annotate(`${p.throughModel}.${p.leftForeignKey}`,j).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${L}) as rn_${_}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));g&&Q.whereRaw(`rn_${_} <= ${g+(h||0)}`),h&&Q.whereRaw(`rn_${_} > ${h}`);let X=w.map(q=>fr(q,D,e.model.table));return Q.select(...X).annotate(`${D}.${j}`,p.leftForeignKey).from(D);default:throw new f(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);case "belongsTo":return r.map(o=>o[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new f(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new f(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let d=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),m=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let d=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new f(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===d.throughModel&&p.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let c=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new f(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e,r){let o={},n={};return Object.entries(e).forEach(([s,a])=>{if(s==="$annotations"||this.modelColumnsDatabaseNames.get(s)){o[s]=a;return}n[O(s,r.modelCaseConvention)]=a;}),o.$annotations=n,o}};var ze=class{constructor(t,e){this.model=t,this.modelInstance=Cs(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new S(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&Object.entries(t.where).forEach(([r,o])=>{if(Array.isArray(o)){e.whereIn(r,o);return}e.where(r,o);}),t.orderBy&&Object.entries(t.orderBy).forEach(([r,o])=>{e.orderBy(r,o);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many({ignoreHooks:t.ignoreHooks||[]})}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset});if(e===null)throw t.customError?t.customError:new f(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new f(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}async insert(t,e={}){!e.ignoreHooks&&await this.model.beforeInsert?.(t);let{columns:r,values:o}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),n={};r.forEach((c,u)=>{let p=o[u];n[c]=p,t[c]??(t[c]=p);});let{sql:s,bindings:a}=this.astParser.parse([new z(this.model.table,[n],e.returning)]),l=await B(s,a,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(l,[t],"one",e.returning);let d=l[0];return d?(this.model.afterFetch?.([d]),await te([d],this.model)):t}async insertMany(t,e={}){let r=[];for(let d of t){!e.ignoreHooks&&this.model.beforeInsert?.(d);let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),u={};m.forEach((p,g)=>{let h=c[g];u[p]=h,d[p]??(d[p]=h);}),r.push(u);}let{sql:o,bindings:n}=this.astParser.parse([new z(this.model.table,r,e.returning)]),s=await B(o,n,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(s,t,"many",e.returning)||[];let a=s;return a.length?(this.model.afterFetch?.(a),await te(a,this.model)||[]):[]}async upsertMany(t,e,r,o={updateOnConflict:true}){let n=[];await Promise.all(r.map(d=>{!o.ignoreHooks&&this.model.beforeInsert?.(d);let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),u=Object.fromEntries(m.map((p,g)=>[p,c[g]]));n.push(u);}));let{sql:s,bindings:a}=this.astParser.parse([new z(this.model.table,n,void 0,true),new Ve(this.model.table,t,e,(o.updateOnConflict,"update"),o.returning)]);return await B(s,a,this.sqlDataSource,"raw",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}})}async updateRecord(t,e){let{columns:r,values:o}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"update"),{primaryKey:n}=this.model;if(!n)throw new f(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");r=r.filter(d=>d!==n),o=o.filter(d=>d!==t[n]);let{sql:s,bindings:a}=this.astParser.parse([new ue(this.model.table,r,o),new R(n,"and",false,"=",t[n])]);await B(s,a,this.sqlDataSource,"raw");let l=await this.findOneByPrimaryKey(t[this.model.primaryKey],e?.returning??void 0);if(!l)throw new f(this.model.name+"::updateRecord","ROW_NOT_FOUND");return l}async deleteRecord(t){if(!this.model.primaryKey)throw new f(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new R(this.model.primaryKey,"and",false,"=",t[this.model.primaryKey]),{sql:r,bindings:o}=this.astParser.parse([new Ee(this.model.table),e]);await B(r,o,this.sqlDataSource,"raw");}query(){return new Xt(this.model,this.sqlDataSource)}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await te([a],this.model):null}return await te(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(m=>m[this.model.primaryKey]),l=a.map(m=>`'${m}'`).join(","),d=await this.query().select(...o??"*").whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?d.length?d[0]:null:d}let n=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...o||"*").whereIn(this.model.primaryKey,n).many();return r==="one"?s.length?s[0]:null:s}};var Ge=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ae__default.default.randomBytes(16).toString("hex"),this.isolationLevel=e,this.isNested=r,this.nestingDepth=o;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.startTransaction(),t)try{await t(e),await e.commit();}catch(r){throw await e.rollback(),r}return e}async startTransaction(){let t=this.getIsolationLevelQuery();if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return;case "sqlite":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return}}switch(this.sql.type){case "mysql":case "mariadb":t&&await this.sql.rawQuery(t),await this.sql.sqlConnection.beginTransaction(),this.isActive=true;break;case "postgres":case "cockroachdb":await this.sql.rawQuery("BEGIN TRANSACTION"),t&&await this.sql.rawQuery(t),this.isActive=true;break;case "sqlite":t&&await this.sql.rawQuery(t),await this.sql.rawQuery("BEGIN TRANSACTION"),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=!1;return}switch(this.sql.type){case "mysql":case "mariadb":await this.sql.sqlConnection.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new f("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mysql":case "mariadb":await this.sql.sqlConnection.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;default:throw new f("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;default:throw new f("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){b.error(t);}await this.sql.closeConnection(),this.sql.sqlConnection=null,this.connectionReleased=true;}}getIsolationLevelQuery(){if(!this.isolationLevel)return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new f("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new f("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var G=class G extends at{constructor(e){super(e);this.globalTransaction=null;this.models={};this.ownsPool=false;this.sqlConnection=null;this.sqlType=this.type,this.inputDetails=e||{connectionPolicies:{retry:{maxRetries:0,delay:0}},queryFormatOptions:{language:lt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"}},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:lt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"};}static async connect(e,r){typeof e=="function"&&(r=e,e=void 0);let o=new G(e);if(e?.models){let n=o.sanitizeModelKeys(e?.models||{});Object.assign(o,n);}return o.models=e?.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:o.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1"),G.instance=o,await r?.(o),o}static async connectToSecondarySource(e,r){typeof e=="function"&&(r=e,e=void 0);let o=new G(e);if(e?.models){let n=o.sanitizeModelKeys(e.models);Object.assign(o,n);}return o.models=e?.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:o.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1"),G.instance=o,await r?.(o),o}static async useConnection(e,r){let o=new G(e);if(e.models){let n=o.sanitizeModelKeys(e.models);Object.assign(o,n);}o.models=e.models||{},o.sqlPool=await Ne(o.sqlType,{type:o.sqlType,host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,connectionPolicies:o.inputDetails.connectionPolicies,queryFormatOptions:o.inputDetails.queryFormatOptions,driverOptions:o.inputDetails.driverOptions,logs:o.logs,models:e.models}),o.ownsPool=true,await o.testConnectionQuery("SELECT 1");try{await r(o).then(async()=>{o.isConnected&&await o.closeConnection();});}catch(n){throw o.isConnected&&await o.closeConnection(),n}}static getInstance(){if(!G.instance)throw new f("SqlDataSource::getInstance","CONNECTION_NOT_ESTABLISHED");return G.instance}static query(e){let r=this.getInstance(),o=r.isInGlobalTransaction&&r.globalTransaction?.isActive?r.globalTransaction.sql:r;return new C({modelCaseConvention:"preserve",databaseCaseConvention:"preserve",table:e},o)}static createTable(...e){return this.getInstance().createTable(...e)}static alterTable(...e){return this.getInstance().alterTable(...e)}static async startGlobalTransaction(e){return this.getInstance().startGlobalTransaction(e)}static async commitGlobalTransaction(){await this.getInstance().commitGlobalTransaction();}static async rollbackGlobalTransaction(){await this.getInstance().rollbackGlobalTransaction();}static async startTransaction(e,r){return this.getInstance().startTransaction(e,r)}static async transaction(e,r){let o=typeof e=="function"?r:e;return this.getInstance().startTransaction(e,o)}static async getTableSchema(e){return this.getInstance().getTableSchema(e)}static async closeConnection(){if(!this.instance){b.warn("Connection already closed");return}await this.instance.closeConnection(),this.instance=null;}static async disconnect(){return this.closeConnection()}static async rawQuery(e,r=[]){let o=this.getInstance();return (o.isInGlobalTransaction&&o.globalTransaction?.isActive?o.globalTransaction.sql:o).rawQuery(e,r)}static rawStatement(e){return this.getInstance().rawStatement(e)}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async clone(e){let r=new G(this.inputDetails);if(r.sqlType==="sqlite"||!!e?.shouldRecreatePool){if(r.sqlPool=await Ne(r.sqlType,{type:r.sqlType,host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,connectionPolicies:r.inputDetails.connectionPolicies,queryFormatOptions:r.inputDetails.queryFormatOptions,driverOptions:r.inputDetails.driverOptions,logs:r.logs,models:r.models}),r.ownsPool=true,Object.keys(this.models).length){let n=r.sanitizeModelKeys(this.models);Object.assign(r,n);}return r}if(r.sqlPool=this.sqlPool,r.ownsPool=false,Object.keys(this.models).length){let n=r.sanitizeModelKeys(this.models);Object.assign(r,n);}return r}getDbType(){return this.type}query(e){let r=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;return new C({modelCaseConvention:"preserve",databaseCaseConvention:"preserve",table:e},r)}alterTable(...e){let r=new me(this.getDbType());return r.alterTable(...e),r.queryStatements}createTable(...e){let r=new me(this.getDbType());return r.createTable(...e),r.queryStatements[0]||""}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new Ge(r,e?.isolationLevel),await this.globalTransaction.startTransaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new f("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){b.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async startTransaction(e,r){let o=typeof e=="function"?r:e,n=await this.clone();n.sqlConnection=await n.getConnection();let s=new Ge(n,o?.isolationLevel);if(await s.startTransaction(),typeof e=="function")try{await e(s),await s.commit({throwErrorOnInactiveTransaction:!1});return}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}async transaction(e,r){return this.startTransaction(e,r)}getModelManager(e){if(!this.isConnected)throw new f("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new ze(e,this.globalTransaction.sql):new ze(e,this)}getPool(e=this.sqlType){if(!this.sqlPool)throw new f("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(e=this.sqlType){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new f("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");switch(this.sqlType){case "mysql":case "mariadb":return await this.sqlPool.getConnection();case "postgres":case "cockroachdb":return await this.sqlPool.connect();case "sqlite":return this.sqlPool;default:throw new f("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async closeConnection(){if(!this.isConnected){b.warn("Connection already closed or not established");return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{b.warn("SqlDataSource::closeConnection - Error while rolling back global transaction");}switch(b.warn("Closing connection"),this.type){case "mysql":case "mariadb":await this.sqlPool.end();break;case "postgres":case "cockroachdb":await this.sqlPool.end();break;case "sqlite":await new Promise((e,r)=>{this.sqlPool.close(o=>{o&&r(o),e();});});break;default:throw new f("SqlDataSource::closeConnection",`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}this.sqlPool=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions}}async disconnect(){return this.closeConnection()}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){b.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await $e.makeDiff(this)).getSqlStatements();if(!o.length){b.info("No new changes detected between database schema and models metadata");return}if(b.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);b.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),b.info(`Synced schema with ${o.length} SQL statements`);}async rawQuery(e,r=[]){if(!this.isConnected)throw new f("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");let o=dt(this,e);return B(o,r,this,"raw")}rawStatement(e){return new oe(e)}async getTableSchema(e){let[r,o,n,s]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e)]);return {columns:r,indexes:o,foreignKeys:n,primaryKey:s}}getModelOpenApiSchema(){return ds(Object.values(this.models))}async getTableInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(a){if(ke(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=be(s,l);return {name:a.name,dataType:d,isNullable:a.notnull===0,defaultValue:a.dflt_value??null,withTimezone:null}}):n.map(a=>{let l=String(a.column_name||a.COLUMN_NAME||a.name||""),d=String(a.data_type||a.DATA_TYPE||a.type||"").toLowerCase(),m=be(s,d),c=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,u=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,g=a.char_length!=null?Number(a.char_length):null,h=a.numeric_precision!=null?Number(a.numeric_precision):null,w=a.numeric_scale!=null?Number(a.numeric_scale):null,_=a.timezone!=null?!!a.timezone:typeof a.datetime_precision=="number"?/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase()):/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase());return {name:l,dataType:m,isNullable:u,defaultValue:p,length:g,precision:h,scale:w,withTimezone:_}})}async getIndexInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wt(e)]).sql,n=this.getDbType(),s=[];try{s=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let m=d.Key_name,c=d.Non_unique===0,u=l.get(m)||{name:m,columns:[],isUnique:c};u.columns.push(d.Column_name),l.set(m,u);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let m=d.index_name,c=!!d.is_unique,u=l.get(m)||{name:m,columns:[],isUnique:c};u.columns.push(d.column_name),l.set(m,u);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,m=!!l.unique,u=(await this.rawQuery(`PRAGMA index_info(${d})`)).map(p=>p.name);a.push({name:d,columns:u,isUnique:m});}return a}async getForeignKeyInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let m=Number(d.id),c=l.get(m)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};c.columns.push(String(d.from)),c.referencedColumns.push(String(d.to)),l.set(m,c);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),m=d||`${l.referenced_table}_${l.column_name}`,c=a.get(m)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(m,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new S({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ke(this.getDbType(),l))return;throw l}if(!n.length)return;let s=n.map(l=>String(l.column_name));return {name:n[0].name||void 0,columns:s}}async testConnectionQuery(e){await B(e,[],this,"raw",{shouldNotLog:true});}sanitizeModelKeys(e){let r=Object.getOwnPropertyNames(this),o=Object.getOwnPropertyNames(this.constructor),n=[...r,...o];if(Object.keys(e).some(s=>n.includes(s)))throw new f("SqlDataSource::sanitizeModelKeys","DUPLICATE_MODEL_KEYS_WHILE_INSTANTIATING_MODELS",new Error(`Duplicate model keys while instantiating models inside the connection: ${Object.keys(e).filter(s=>n.includes(s)).map(s=>`"${s}"`).join(", ")}`));return e}static get isInGlobalTransaction(){return !!this.instance?.globalTransaction}get isInGlobalTransaction(){return !!this.globalTransaction}get registeredModels(){return this.models}};G.instance=null;var fe=G;var ye=class{constructor(t){this.sql=t||fe.getInstance();}async upMigrations(t){for(let e of t){b.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){b.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.query("migrations").insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.query("migrations").where("name",t.migrationName).delete();}};async function Ze(i,t,e,r,o){let n=i.getDbType(),s=null;b.info("Rolling back migrations for database type: "+n);try{let a=await st(n,i.getPool()),l=await it(n,e,r),d=a.map(u=>u.name),m=l.filter(u=>d.includes(u.migrationName));if(m.length===0){b.info("No pending migrations.");return}if(t){let u=m.findIndex(h=>h.migrationName===t);if(u===-1){b.error(`Rollback until migration not found: ${t}`);return}let p=m.slice(u);o&&(s=await i.startTransaction(),i=s.sql),await new ye(i).downMigrations(p),o&&await s?.commit(),b.info("Migrations rolled back successfully");return}let c=new ye(i);o&&(s=await i.startTransaction(),i=s.sql),await c.downMigrations(m),o&&await s?.commit();}catch(a){throw o&&await s?.rollback(),a}b.info("Migrations rolled back successfully");}var er=class{static async generate(t){return `import { Migration } from "hysteria-orm";
184
184
 
185
185
  export default class extends Migration {
186
186
  async up() {
@@ -220,5 +220,5 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
220
220
  password: "root",
221
221
  username: "default",
222
222
  db: 0,
223
- }`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function rr(i,t,e){let r=t.getDbType();b.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(b.info("Sql ran successfully"),e){let n=_e__default.default.dirname(e);z__default.default.existsSync(n)||z__default.default.mkdirSync(n,{recursive:true}),z__default.default.writeFileSync(e,JSON.stringify(o,null,2)),b.info(`Query result saved to ${e}`);return}b.info(JSON.stringify(o,null,2)),await t.disconnect();}var Sl=["sqlite","mysql","postgres","mariadb","cockroachdb"],es=Sl.concat("mongodb","redis"),Se=new commander.Command;Se.command("init").option("-t, --type [type]",`Type of the database to connect to, available types: ${es.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async i=>{i.type||(b.error("Database type is required"),process.exit(1)),es.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${es.join(", ")}`),process.exit(1)),b.info("Initializing hysteria-orm with standard configuration"),b.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let t=tr.initTemplate(i.type);z__default.default.existsSync("database")?b.info("database folder already exists, skipping"):z__default.default.mkdirSync("database",{recursive:true}),z__default.default.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):z__default.default.writeFileSync("database/index.ts",t),Sl.includes(i.type)&&!z__default.default.existsSync("database/migrations")?z__default.default.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.info("Initialization completed successfully");});Se.command("run:sql [sql]").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{b.info("Starting SQL execution"),t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(b.error("SQL query or file path is required"),process.exit(1)),i&&e&&(b.error("Cannot provide both sql query and file path"),process.exit(1));let r=_e__default.default.resolve(process.cwd(),t.datasource),{default:o}=await pe(r,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await rr(i,o,t?.out),b.info("SQL execution completed successfully"),process.exit(0);}catch(s){b.error(`SQL execution failed: ${s}`),process.exit(1);}}e||(b.error("No SQL statement or file provided"),process.exit(1)),b.info(`Reading SQL from file: ${e}`),e=_e__default.default.resolve(process.cwd(),e),z__default.default.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let n=z__default.default.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${n.length} characters)`);try{await rr(n,o,t?.out),b.info("SQL file execution completed successfully"),process.exit(0);}catch(s){b.error(`SQL file execution failed: ${s}`),process.exit(1);}});Se.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{b.info(`Creating migration: ${i}`),b.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(b.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(b.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(b.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";b.info(`Migration mode: ${e}`),ss(i,t.javascript,e,t.table||i);});Se.command("run:migrations [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath);try{await Ke(e,i,t?.migrationPath,t?.tsconfigPath,t?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("rollback:migrations [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath);try{await Ze(e,i,t?.migrationPath,t?.tsconfigPath,t?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("refresh:migrations").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath);try{t?await ir(e,!1,i?.transactional):await Ze(e,void 0,i?.migrationPath,i?.tsconfigPath,i?.transactional),await Ke(e,void 0,i?.migrationPath,i?.tsconfigPath,i?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, not supported for sqlite").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).action(async i=>{i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.migrationPath||(i.migrationPath=_e__default.default.resolve(process.cwd(),"database/migrations")),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let{default:t}=await pe(_e__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath);t.getDbType()==="sqlite"&&(b.error("generate:migrations with sqlite is not supported, it's suggested to use manual migrations instead"),process.exit(1));try{let r=(await Ee.makeDiff(t)).getSqlStatements();if(r.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let s of r)console.log(s);process.exit(0);}z__default.default.existsSync(i?.migrationPath)||z__default.default.mkdirSync(i?.migrationPath,{recursive:!0});let o=await er.generate(r),n=i?.javascript?".js":".ts";z__default.default.writeFileSync(`${i?.migrationPath}/${i?.name}${n}`,o),b.info(`Migration file created successfully: ${i?.name}${n}`),await t.closeConnection(),process.exit(0);}catch(e){console.error(e),await t.closeConnection(),process.exit(1);}});Se.parse(process.argv);//# sourceMappingURL=cli.cjs.map
223
+ }`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function rr(i,t,e){let r=t.getDbType();b.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(b.info("Sql ran successfully"),e){let n=_e__default.default.dirname(e);Z__default.default.existsSync(n)||Z__default.default.mkdirSync(n,{recursive:true}),Z__default.default.writeFileSync(e,JSON.stringify(o,null,2)),b.info(`Query result saved to ${e}`);return}b.info(JSON.stringify(o,null,2)),await t.disconnect();}var Sl=["sqlite","mysql","postgres","mariadb","cockroachdb"],es=Sl.concat("mongodb","redis"),Se=new commander.Command;Se.command("init").option("-t, --type [type]",`Type of the database to connect to, available types: ${es.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async i=>{i.type||(b.error("Database type is required"),process.exit(1)),es.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${es.join(", ")}`),process.exit(1)),b.info("Initializing hysteria-orm with standard configuration"),b.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let t=tr.initTemplate(i.type);Z__default.default.existsSync("database")?b.info("database folder already exists, skipping"):Z__default.default.mkdirSync("database",{recursive:true}),Z__default.default.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):Z__default.default.writeFileSync("database/index.ts",t),Sl.includes(i.type)&&!Z__default.default.existsSync("database/migrations")?Z__default.default.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.info("Initialization completed successfully");});Se.command("run:sql [sql]").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{b.info("Starting SQL execution"),t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(b.error("SQL query or file path is required"),process.exit(1)),i&&e&&(b.error("Cannot provide both sql query and file path"),process.exit(1));let r=_e__default.default.resolve(process.cwd(),t.datasource),{default:o}=await pe(r,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await rr(i,o,t?.out),b.info("SQL execution completed successfully"),process.exit(0);}catch(s){b.error(`SQL execution failed: ${s}`),process.exit(1);}}e||(b.error("No SQL statement or file provided"),process.exit(1)),b.info(`Reading SQL from file: ${e}`),e=_e__default.default.resolve(process.cwd(),e),Z__default.default.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let n=Z__default.default.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${n.length} characters)`);try{await rr(n,o,t?.out),b.info("SQL file execution completed successfully"),process.exit(0);}catch(s){b.error(`SQL file execution failed: ${s}`),process.exit(1);}});Se.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{b.info(`Creating migration: ${i}`),b.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(b.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(b.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(b.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";b.info(`Migration mode: ${e}`),ss(i,t.javascript,e,t.table||i);});Se.command("run:migrations [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath);try{await Ke(e,i,t?.migrationPath,t?.tsconfigPath,t?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("rollback:migrations [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath);try{await Ze(e,i,t?.migrationPath,t?.tsconfigPath,t?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("refresh:migrations").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await pe(_e__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath);try{t?await ir(e,!1,i?.transactional):await Ze(e,void 0,i?.migrationPath,i?.tsconfigPath,i?.transactional),await Ke(e,void 0,i?.migrationPath,i?.tsconfigPath,i?.transactional),await e.closeConnection(),process.exit(0);}catch(r){console.error(r),await e.closeConnection(),process.exit(1);}});Se.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, not supported for sqlite").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).action(async i=>{i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.migrationPath||(i.migrationPath=_e__default.default.resolve(process.cwd(),"database/migrations")),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let{default:t}=await pe(_e__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath);t.getDbType()==="sqlite"&&(b.error("generate:migrations with sqlite is not supported, it's suggested to use manual migrations instead"),process.exit(1));try{let r=(await $e.makeDiff(t)).getSqlStatements();if(r.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let s of r)console.log(s);process.exit(0);}Z__default.default.existsSync(i?.migrationPath)||Z__default.default.mkdirSync(i?.migrationPath,{recursive:!0});let o=await er.generate(r),n=i?.javascript?".js":".ts";Z__default.default.writeFileSync(`${i?.migrationPath}/${i?.name}${n}`,o),b.info(`Migration file created successfully: ${i?.name}${n}`),await t.closeConnection(),process.exit(0);}catch(e){console.error(e),await t.closeConnection(),process.exit(1);}});Se.parse(process.argv);//# sourceMappingURL=cli.cjs.map
224
224
  //# sourceMappingURL=cli.cjs.map