hysteria-orm 10.1.1 → 10.1.2

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
@@ -108,7 +108,7 @@ export default class extends Migration {
108
108
  timestamp TEXT NOT NULL DEFAULT '${new Date().toISOString()}'
109
109
  );`}},W=new pr;async function yr(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 ds__default.default.rm(o,{recursive:true,force:true}),b.info("Sqlite database dropped successfully"),await ds__default.default.writeFile(o,""),b.info("Sqlite database recreated successfully");let u=i.getConnectionDetails();i.sqlPool=await Ce(i.getDbType(),u),t&&(await i.closeConnection(),b.info("All tables dropped successfully"),t&&process.exit(0));return}let n=W.getAllTablesTemplate(r,o),s=await i.rawQuery(n),a=W.parseGetAllTables(r,o,s),l=W.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(u){e&&await d?.rollback(),b.error(u),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"},El=()=>{try{te__default.default.readFileSync(".env","utf8").split(`
110
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=El();var $l=()=>{let i=A.MIGRATION_PATH,t=Pe__default.default.resolve(process.cwd(),i);return te__default.default.existsSync(t)||te__default.default.mkdirSync(t,{recursive:true}),t},us=(i,t=false,e="basic",r="table")=>{let o=$l(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=Pe__default.default.join(o,s),l;switch(e){case "alter":l=W.alterMigrationTemplate(t,r);break;case "create":l=W.createMigrationTemplate(t,r);break;default:l=W.basicMigrationTemplate(t);break}te__default.default.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function Te(i,t){let e=Pe__default.default.isAbsolute(i)?i:Pe__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 Ll=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")}),Te(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 yt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(W.migrationTableTemplateMysql()),(await e.query(W.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(W.migrationTableTemplatePg()),(await o.query(W.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ys(W.migrationTableTemplateSQLite(),[],t),await ys(W.selectAllFromMigrationsTemplate(),[],t)||[];default:throw new f("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function ft(i,t,e){let r=jl(t),o=[];for(let n of r){let s=await Wl(n,t,e),a=new s(i||A.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function Fl(i,t){let e=await Ll(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 Wl(i,t=A.MIGRATION_PATH||"database/migrations",e){t=Pe.join(t,i);let r=Pe__default.default.resolve(process.cwd(),t),o=await Fl(r,e);if(!o)throw new f("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function jl(i){let t=process.cwd(),e=Pe__default.default.resolve(i||A.MIGRATION_PATH||"database/migrations"),r=Pe__default.default.resolve(t,e);try{let o=te__default.default.readdirSync(r).filter(n=>{let s=Pe__default.default.extname(n),a=Pe__default.default.join(r,n);return te__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 ys(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function je(i,t,e,r,o){let n=i.getDbType(),s=null;b.info("Running migrations for database type: "+n);try{let a=await yt(n,i.getPool()),d=(await ft(n,e,r)).filter(c=>!a.map(m=>m.name).includes(c.migrationName));if(!d.length){b.info("No pending migrations.");return}if(t){let c=d.findIndex(h=>h.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let m=d.slice(0,c+1);o&&(s=await i.startTransaction(),i=s.sql),await new be(i).upMigrations(m),o&&await s?.commit(),b.info("Migrations ran successfully");return}let u=new be(i);o&&(s=await i.startTransaction(),i=s.sql),await u.upMigrations(d),o&&await s?.commit();}catch(a){throw o&&await s?.rollback(),a}b.info("Migrations ran successfully");}var ht=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 Vl=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},Hl=i=>i.openApi?.required??false,Yl=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=Vl(r));return e},Jl=i=>{let t=i.getColumns(),e=[];for(let r of t)Hl(r)&&e.push(r.columnName);return e||[]},zl=i=>{let t=Yl(i),e=Jl(i);return {type:"object",properties:t,required:e.length?e:[]}};var fs=i=>i.map(t=>({...zl(t),modelName:t.name}));var gt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";default:return "sql"}},gs=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)},Ts=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,gs(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,gs(t[r]));}return e},Ve=(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,Tt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:gt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var hr=class{toSql(t){let e=t,r=new N(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:[]}}},bs=new hr;var gr=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Ns=new gr;var Tr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},Ss=new Tr;var br=class{toSql(t){let e=t,r=new N(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:[]}}},ws=new br;function Gl(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 Zl(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"?Gl(i):t==="camel"?Zl(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}Re__default.default.extend(td__default.default);Re__default.default.extend(ed__default.default);Re__default.default.extend(Xl__default.default);var bt=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=Re__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()}},Ms=(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?Re__default.default(i,t):Re__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")}},ne=(i=new Date)=>Re__default.default(i).utc().format("YYYY-MM-DD HH:mm:ss");var qs=(i,t)=>{try{let e=pe__default.default.createHash("sha256").update(i).digest(),r=pe__default.default.randomBytes(16),o=pe__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)}},_s=(i,t)=>{try{let e=pe__default.default.createHash("sha256").update(i).digest(),[r,o]=t.split(":"),n=pe__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)}},Cs=(i,t)=>{try{let e=pe__default.default.randomBytes(32),r=pe__default.default.randomBytes(16),o=pe__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=pe.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)}},Rs=(i,t)=>{try{let[e,r,o]=t.split(":"),n=pe.privateDecrypt(i,Buffer.from(r,"hex")),s=pe__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 Sr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Nr=Sr.length,sd=10,id=16,ad=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%Nr;e=Sr.charAt(o)+e,i=(i-o)/Nr;}return e},ld=i=>{let t=pe.randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=Sr.charAt(o%Nr);}return e},xs=()=>{let i=Math.floor(Date.now()/1e3),t=ad(i,sd),e=ld(id);return t+e};function wr(i){return i.replace(/^[`"]|[`"]$/g,"")}function Mr(i,t,e){if(!i.includes(".")){let n=wr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=wr(r),o=wr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function S(i){return typeof i=="function"?i():i}var B=(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]=B(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]=B(o,t);}return e};var Be=class{};Be.modelCaseConvention="camel",Be.databaseCaseConvention="snake";var dd=async(i,t,e,r,o=[],n=[],s=false)=>{let a=new t,l=new Set(e.filter(c=>c.hidden).map(c=>c.columnName)),d=new Map(e.map(c=>[c.databaseName,c])),u=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async c=>{let m=i[c],p=d.get(c)?.columnName??O(c,t.modelCaseConvention);if(p==="$annotations"&&!s){md(i,c,a,t,n);return}if(!r.has(p)||l.has(p)||u&&!u.has(p))return;if(m===null){a[p]=null;return}let h=r.get(p);if(h&&h.serialize){a[p]=await h.serialize(m);return}a[p]=m;})),u)for(let c of u)c in a||(a[c]=null);return a},md=(i,t,e,r,o=[])=>{let n=i[t];if(!n||!Object.keys(n).length)return;let s=o.length>0?new Set(o):null;if(!s)return;let a={};for(let l of Object.keys(n))s.has(l)&&(a[O(l,r.modelCaseConvention)]=n[l]);Object.keys(a).length>0&&(e[t]=a);},se=async(i,t,e=[],r=[],o=false)=>{if(!i.length)return null;let n=t.getColumns(),s=new Map(n.map(d=>[d.columnName,d])),a=[];for(let d of e){if(d.toLowerCase().includes("as"))continue;let u=d;if(u.includes(".")&&(u=u.split(".").pop()),u==="*")continue;let c=s.get(u)?.columnName??O(u,t.modelCaseConvention);a.push(c);}e=a;let l=await Promise.all(i.map(async d=>await dd(d,t,n,s,e,r,o)));return l.length===1?l[0]:l};var As=["postgres","cockroachdb"];function Ds(i){let t=i.name,e=O(t,"snake");return ud__default.default(e)}function Ps(){return {}}var He=class He extends Be{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:Ds(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return $s(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 dryQuery(t){return this.dispatchModelManager(t).dryQuery()}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=wt(s).find(h=>h.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),u=O(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),c=r.map((h,g)=>({[d]:e[s.primaryKey],[u]:h[l.model.primaryKey],...o?o(h,g):{}}));class m extends He{static get table(){return l.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await m.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 m=new Set(Object.keys(c));return t.every(p=>m.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(As.includes(l))return await se(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let u=new Map;return t.forEach(c=>{e.forEach(m=>{u.set(c,[...u.get(c)||[],m[c]]);});}),d.where(c=>{t.forEach(m=>{c.orWhereIn(m,u.get(m)||[]);});}),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 St(this)}static getRelations(){return Es(this)}static getIndexes(){return Qs(this)}static getUniques(){return Ks(this)}static column(t,...e){$(...e)(this.prototype,t);}static hasOne(t,...e){Is(...e)(this.prototype,t);}static hasMany(t,...e){vs(...e)(this.prototype,t);}static belongsTo(t,...e){Os(...e)(this.prototype,t);}static manyToMany(t,...e){Bs(...e)(this.prototype,t);}static establishConnection(){let t=Ne.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)}async save(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s={[o]:n},{[o]:a,...l}=e,d=await r.upsert(s,l,{updateOnConflict:true,...t});return r.combineProps(this,d),this}async update(t,e={}){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new f(o.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new f(o.name+"::update","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.updateRecord(r,t,e);}async softDelete(t,e){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new f(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new f(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.softDelete(r,t,e);}async delete(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new f(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await r.deleteRecord(this,t);}async refresh(t){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new f(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY_VALUE");let s=await r.refresh(this,t);return r.combineProps(this,s),this}};He.softDeleteColumn="deletedAt",He.softDeleteValue=ne();var Nt=He;var ie=class{constructor(t,e){this.model=Nt;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Mt=class extends ie{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var qt=class extends ie{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var _t=class extends ie{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Ct=class extends ie{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 Rt=Symbol("columns"),xt=Symbol("primaryKey"),G=Symbol("relations"),ks=Symbol("indexes"),Us=Symbol("uniques"),Se=i=>`${ud__default.default.singular(i)}_id`,qr=(i,t)=>`idx_${i}_${t}`,Z=(i,t)=>`uq_${i}_${t}`,k=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,we=(i,t)=>`pk_${i}_${t}`;var E=class{static defineMetadata(t,e,r,o){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let n=this.store.get(r);n||(n=new Map,this.store.set(r,n));let s=n.get(o);s||(s=new Map,n.set(o,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let o=e;for(;o;){let n=this.store.get(o);if(n){let s=n.get(r);if(s&&s.has(t))return s.get(t)}o=Object.getPrototypeOf(o);}}};E.store=new WeakMap;function $(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(E.getMetadata(xt,e))throw new f("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");E.defineMetadata(xt,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??we(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=E.getMetadata(Rt,e)||[];a.push(s),E.defineMetadata(Rt,a,e);}}$.primary=yd;$.date=wd;$.boolean=Sd;$.json=Md;$.uuid=gd;$.ulid=Td;$.integer=hd;$.float=fd;$.encryption={symmetric:bd,asymmetric:Nd};function yd(i={}){return $({...i,primaryKey:true})}function fd(i={}){return $({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 hd(i={}){return $({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 gd(i={}){return $({type:"uuid",...i,prepare:t=>t||pe__default.default.randomUUID()})}function Td(i={}){return $({type:"ulid",...i,prepare:t=>t||xs()})}function bd(i){return $({...i,prepare:t=>t&&qs(i.key,t),serialize:t=>t&&_s(i.key,t)})}function Nd(i){return $({...i,prepare:t=>t&&Cs(i.publicKey,t),serialize:t=>t&&Rs(i.privateKey,t)})}function Sd(i={}){return $({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function wd(i={}){let{format:t="ISO",timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i;return $({type:"datetime",...n,autoUpdate:r,prepare:s=>s?r?bt(new Date,t,e):typeof s=="string"?s:bt(s,t,e):o?bt(new Date,t,e):null,serialize:s=>{if(s!==void 0)return s===null?null:Ms(s,t,e)}})}function Md(i={}){return $({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function St(i){try{return E.getMetadata(Rt,i.prototype)||[]}catch{return []}}function Os(i,t,e){return (r,o)=>{let n=()=>Se(i().table),s=()=>{let d=r.constructor.table,u=t||n();return k(d,u,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=E.getMetadata(G,r)||[];l.push(a),E.defineMetadata(G,l,r);}}function Is(i,t){return (e,r)=>{let o=()=>Se(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=E.getMetadata(G,e)||[];s.push(n),E.defineMetadata(G,s,e);}}function vs(i,t){return (e,r)=>{let o=()=>Se(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=E.getMetadata(G,e)||[];s.push(n),E.defineMetadata(G,s,e);}}function Bs(i,t,e,r){return (o,n)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",d=typeof t=="string"?t:()=>t().table,u=o.constructor.table,c=()=>Se(u),m=()=>Se(i().table),p=()=>k(S(d),s?String(s):c()),h={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:u,throughModel:d,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):m,wasModelProvided:l}},g=E.getMetadata(G,o)||[];g.push(h),E.defineMetadata(G,g,o);}}function Es(i){return E.getMetadata(G,i.prototype)||[]}function wt(i){return (E.getMetadata(G,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=S(s),l=o();switch(r){case "belongsTo":return new Mt(l,n,a);case "hasOne":return new _t(l,n,a);case "hasMany":return new qt(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 Ct(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:S(e.manyToManyOptions.throughModel),leftForeignKey:S(e.manyToManyOptions.leftForeignKey),rightForeignKey:S(e.manyToManyOptions.rightForeignKey)});default:throw new f("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function $s(i){return E.getMetadata(xt,i.prototype)}function Qs(i){return E.getMetadata(ks,i.prototype)||[]}function Ks(i){return E.getMetadata(Us,i.prototype)||[]}var y=class{constructor(t){this.model=t;let e=St(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){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;default:return `${e}${r?` as ${r}`:""}`}}async 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));}await Promise.all(o.map(async(s,a)=>{let l=o[a],d=n[a],u=this.modelColumnsMap.get(l),c=d;u&&(r==="insert"&&u.prepare?c=await u.prepare(d):r==="update"&&(c=await u.prepare?.(d)??d)),n[a]=c;}));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}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new N(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var _r=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 N(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:h}=n.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let g=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(g),C=/^\s*add\s+constraint\b/i.test(p);if(w&&!C){let P=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${g} ${P}`;}else {let P=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(P);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}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}}},Ls=new _r;var Cr=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Fs=new Cr;var Rr=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Ws=new Rr;var xr=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},js=new xr;var Ar=class{toSql(t){return {sql:"",bindings:[]}}},Vs=new Ar;var Dr=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Hs=new Dr;var Pr=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Ys=new Pr;var Or=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Js=new Or;var Ir=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:[]}}},zs=new Ir;var vr=class{toSql(t){return {sql:"",bindings:[]}}},Gs=new vr;var Br=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",S(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:[]}}},Zs=new Br;var Er=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Xs=new Er;var $r=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",S(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",S(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",S(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",S(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:[]}}},ei=new $r;var Qr=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 N(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let h=s.pop()??"",g=m;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let w=`${h} ${g}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(h),s.push(g),a.push(...p);continue}s.push(m),a.push(...p);}for(let c of e.namedConstraints){let{sql:m,bindings:p}=n.parse([c]);s.push(m),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},ti=new Qr;var Kr=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},ri=new Kr;var kr=class{toSql(t){return {sql:"distinct",bindings:[]}}},oi=new kr;var Ur=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},ni=new Ur;var Lr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},si=new Lr;var Fr=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},ii=new Fr;var Wr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},ai=new Wr;var T=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var jr=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}}},li=new jr;var Vr=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:[]}}},di=new Vr;var Hr=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:[]}}},mi=new Hr;var Yr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);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 m=s.map(h=>c[h]);l.push(...m);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},ui=new Yr;var Jr=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:[]}}},ci=new Jr;var zr=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},pi=new zr;var qd={for_update:"for update",for_share:"lock in share mode"},Gr=class{toSql(t){let e=t,r=qd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},yi=new Gr;var Zr=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},fi=new Zr;var Xr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},hi=new Xr;var eo=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:[]}}},gi=new eo;var to=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ti=new to;var ro=class{toSql(t){return {sql:`SELECT
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 Vl=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},Hl=i=>i.openApi?.required??false,Yl=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=Vl(r));return e},Jl=i=>{let t=i.getColumns(),e=[];for(let r of t)Hl(r)&&e.push(r.columnName);return e||[]},zl=i=>{let t=Yl(i),e=Jl(i);return {type:"object",properties:t,required:e.length?e:[]}};var fs=i=>i.map(t=>({...zl(t),modelName:t.name}));var gt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";default:return "sql"}},gs=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)},Ts=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,gs(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,gs(t[r]));}return e},Ve=(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,Tt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:gt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var hr=class{toSql(t){let e=t,r=new N(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:[]}}},bs=new hr;var gr=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Ns=new gr;var Tr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},Ss=new Tr;var br=class{toSql(t){let e=t,r=new N(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:[]}}},ws=new br;function Gl(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 Zl(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"?Gl(i):t==="camel"?Zl(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}Re__default.default.extend(td__default.default);Re__default.default.extend(ed__default.default);Re__default.default.extend(Xl__default.default);var bt=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=Re__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()}},Ms=(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?Re__default.default(i,t):Re__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")}},ne=(i=new Date)=>Re__default.default(i).utc().format("YYYY-MM-DD HH:mm:ss");var qs=(i,t)=>{try{let e=pe__default.default.createHash("sha256").update(i).digest(),r=pe__default.default.randomBytes(16),o=pe__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)}},_s=(i,t)=>{try{let e=pe__default.default.createHash("sha256").update(i).digest(),[r,o]=t.split(":"),n=pe__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)}},Cs=(i,t)=>{try{let e=pe__default.default.randomBytes(32),r=pe__default.default.randomBytes(16),o=pe__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=pe.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)}},Rs=(i,t)=>{try{let[e,r,o]=t.split(":"),n=pe.privateDecrypt(i,Buffer.from(r,"hex")),s=pe__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 Sr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Nr=Sr.length,sd=10,id=16,ad=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%Nr;e=Sr.charAt(o)+e,i=(i-o)/Nr;}return e},ld=i=>{let t=pe.randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=Sr.charAt(o%Nr);}return e},xs=()=>{let i=Math.floor(Date.now()/1e3),t=ad(i,sd),e=ld(id);return t+e};function wr(i){return i.replace(/^[`"]|[`"]$/g,"")}function Mr(i,t,e){if(!i.includes(".")){let n=wr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=wr(r),o=wr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function S(i){return typeof i=="function"?i():i}var B=(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]=B(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]=B(o,t);}return e};var Be=class{};Be.modelCaseConvention="camel",Be.databaseCaseConvention="snake";var dd=async(i,t,e,r,o=[],n=[],s=false)=>{let a=new t,l=new Set(e.filter(c=>c.hidden).map(c=>c.columnName)),d=new Map(e.map(c=>[c.databaseName,c])),u=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async c=>{let m=i[c],p=d.get(c)?.columnName??O(c,t.modelCaseConvention);if(p==="$annotations"&&!s){md(i,c,a,t,n);return}if(!r.has(p)||l.has(p)||u&&!u.has(p))return;if(m===null){a[p]=null;return}let h=r.get(p);if(h&&h.serialize){a[p]=await h.serialize(m);return}a[p]=m;})),u)for(let c of u)c in a||(a[c]=null);return a},md=(i,t,e,r,o=[])=>{let n=i[t];if(!n||!Object.keys(n).length)return;let s=o.length>0?new Set(o):null;if(!s)return;let a={};for(let l of Object.keys(n))s.has(l)&&(a[O(l,r.modelCaseConvention)]=n[l]);Object.keys(a).length>0&&(e[t]=a);},se=async(i,t,e=[],r=[],o=false)=>{if(!i.length)return null;let n=t.getColumns(),s=new Map(n.map(d=>[d.columnName,d])),a=[];for(let d of e){if(d.toLowerCase().includes("as"))continue;let u=d;if(u.includes(".")&&(u=u.split(".").pop()),u==="*")continue;let c=s.get(u)?.columnName??O(u,t.modelCaseConvention);a.push(c);}e=a;let l=await Promise.all(i.map(async d=>await dd(d,t,n,s,e,r,o)));return l.length===1?l[0]:l};var As=["postgres","cockroachdb"];function Ds(i){let t=i.name,e=O(t,"snake");return ud__default.default(e)}function Ps(){return {}}var He=class He extends Be{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:Ds(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return $s(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 dryQuery(t){return this.dispatchModelManager(t).dryQuery()}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=wt(s).find(h=>h.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),u=O(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),c=r.map((h,g)=>({[d]:e[s.primaryKey],[u]:h[l.model.primaryKey],...o?o(h,g):{}}));class m extends He{static get table(){return l.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await m.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),a=Object.keys(t).length>0?await n.findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:t}):null;return a?(e[o.primaryKey]=a[o.primaryKey],r.updateOnConflict?await n.updateRecord(e,{returning:r.returning}):a):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 m=new Set(Object.keys(c));return t.every(p=>m.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(As.includes(l))return await se(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let u=new Map;return t.forEach(c=>{e.forEach(m=>{u.set(c,[...u.get(c)||[],m[c]]);});}),d.where(c=>{t.forEach(m=>{c.orWhereIn(m,u.get(m)||[]);});}),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 St(this)}static getRelations(){return Es(this)}static getIndexes(){return Qs(this)}static getUniques(){return Ks(this)}static column(t,...e){$(...e)(this.prototype,t);}static hasOne(t,...e){Is(...e)(this.prototype,t);}static hasMany(t,...e){vs(...e)(this.prototype,t);}static belongsTo(t,...e){Os(...e)(this.prototype,t);}static manyToMany(t,...e){Bs(...e)(this.prototype,t);}static establishConnection(){let t=Ne.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)}async save(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s={[o]:n},a=e,l=await r.upsert(s,a,{updateOnConflict:true,...t});return r.combineProps(this,l),this}async update(t,e={}){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new f(o.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new f(o.name+"::update","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.updateRecord(r,t,e);}async softDelete(t,e){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new f(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new f(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.softDelete(r,t,e);}async delete(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new f(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await r.deleteRecord(this,t);}async refresh(t){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new f(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new f(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY_VALUE");let s=await r.refresh(this,t);return r.combineProps(this,s),this}};He.softDeleteColumn="deletedAt",He.softDeleteValue=ne();var Nt=He;var ie=class{constructor(t,e){this.model=Nt;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Mt=class extends ie{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var qt=class extends ie{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var _t=class extends ie{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Ct=class extends ie{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 Rt=Symbol("columns"),xt=Symbol("primaryKey"),G=Symbol("relations"),ks=Symbol("indexes"),Us=Symbol("uniques"),Se=i=>`${ud__default.default.singular(i)}_id`,qr=(i,t)=>`idx_${i}_${t}`,Z=(i,t)=>`uq_${i}_${t}`,k=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,we=(i,t)=>`pk_${i}_${t}`;var E=class{static defineMetadata(t,e,r,o){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let n=this.store.get(r);n||(n=new Map,this.store.set(r,n));let s=n.get(o);s||(s=new Map,n.set(o,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let o=e;for(;o;){let n=this.store.get(o);if(n){let s=n.get(r);if(s&&s.has(t))return s.get(t)}o=Object.getPrototypeOf(o);}}};E.store=new WeakMap;function $(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(E.getMetadata(xt,e))throw new f("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");E.defineMetadata(xt,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??we(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=E.getMetadata(Rt,e)||[];a.push(s),E.defineMetadata(Rt,a,e);}}$.primary=yd;$.date=wd;$.boolean=Sd;$.json=Md;$.uuid=gd;$.ulid=Td;$.integer=hd;$.float=fd;$.encryption={symmetric:bd,asymmetric:Nd};function yd(i={}){return $({...i,primaryKey:true})}function fd(i={}){return $({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 hd(i={}){return $({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 gd(i={}){return $({type:"uuid",...i,prepare:t=>t||pe__default.default.randomUUID()})}function Td(i={}){return $({type:"ulid",...i,prepare:t=>t||xs()})}function bd(i){return $({...i,prepare:t=>t&&qs(i.key,t),serialize:t=>t&&_s(i.key,t)})}function Nd(i){return $({...i,prepare:t=>t&&Cs(i.publicKey,t),serialize:t=>t&&Rs(i.privateKey,t)})}function Sd(i={}){return $({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function wd(i={}){let{format:t="ISO",timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i;return $({type:"datetime",...n,autoUpdate:r,prepare:s=>s?r?bt(new Date,t,e):typeof s=="string"?s:bt(s,t,e):o?bt(new Date,t,e):null,serialize:s=>{if(s!==void 0)return s===null?null:Ms(s,t,e)}})}function Md(i={}){return $({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function St(i){try{return E.getMetadata(Rt,i.prototype)||[]}catch{return []}}function Os(i,t,e){return (r,o)=>{let n=()=>Se(i().table),s=()=>{let d=r.constructor.table,u=t||n();return k(d,u,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=E.getMetadata(G,r)||[];l.push(a),E.defineMetadata(G,l,r);}}function Is(i,t){return (e,r)=>{let o=()=>Se(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=E.getMetadata(G,e)||[];s.push(n),E.defineMetadata(G,s,e);}}function vs(i,t){return (e,r)=>{let o=()=>Se(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=E.getMetadata(G,e)||[];s.push(n),E.defineMetadata(G,s,e);}}function Bs(i,t,e,r){return (o,n)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",d=typeof t=="string"?t:()=>t().table,u=o.constructor.table,c=()=>Se(u),m=()=>Se(i().table),p=()=>k(S(d),s?String(s):c()),h={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:u,throughModel:d,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):m,wasModelProvided:l}},g=E.getMetadata(G,o)||[];g.push(h),E.defineMetadata(G,g,o);}}function Es(i){return E.getMetadata(G,i.prototype)||[]}function wt(i){return (E.getMetadata(G,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=S(s),l=o();switch(r){case "belongsTo":return new Mt(l,n,a);case "hasOne":return new _t(l,n,a);case "hasMany":return new qt(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 Ct(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:S(e.manyToManyOptions.throughModel),leftForeignKey:S(e.manyToManyOptions.leftForeignKey),rightForeignKey:S(e.manyToManyOptions.rightForeignKey)});default:throw new f("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function $s(i){return E.getMetadata(xt,i.prototype)}function Qs(i){return E.getMetadata(ks,i.prototype)||[]}function Ks(i){return E.getMetadata(Us,i.prototype)||[]}var y=class{constructor(t){this.model=t;let e=St(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){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;default:return `${e}${r?` as ${r}`:""}`}}async 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));}await Promise.all(o.map(async(s,a)=>{let l=o[a],d=n[a],u=this.modelColumnsMap.get(l),c=d;u&&(r==="insert"&&u.prepare?c=await u.prepare(d):r==="update"&&(c=await u.prepare?.(d)??d)),n[a]=c;}));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}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new N(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var _r=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 N(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:h}=n.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let g=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(g),C=/^\s*add\s+constraint\b/i.test(p);if(w&&!C){let P=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${g} ${P}`;}else {let P=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(P);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}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}}},Ls=new _r;var Cr=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Fs=new Cr;var Rr=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Ws=new Rr;var xr=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},js=new xr;var Ar=class{toSql(t){return {sql:"",bindings:[]}}},Vs=new Ar;var Dr=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Hs=new Dr;var Pr=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Ys=new Pr;var Or=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Js=new Or;var Ir=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:[]}}},zs=new Ir;var vr=class{toSql(t){return {sql:"",bindings:[]}}},Gs=new vr;var Br=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",S(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:[]}}},Zs=new Br;var Er=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Xs=new Er;var $r=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",S(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",S(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",S(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",S(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:[]}}},ei=new $r;var Qr=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 N(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=n.parse([c]);if(c.folder==="constraint"){let h=s.pop()??"",g=m;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let w=`${h} ${g}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(h),s.push(g),a.push(...p);continue}s.push(m),a.push(...p);}for(let c of e.namedConstraints){let{sql:m,bindings:p}=n.parse([c]);s.push(m),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},ti=new Qr;var Kr=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},ri=new Kr;var kr=class{toSql(t){return {sql:"distinct",bindings:[]}}},oi=new kr;var Ur=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},ni=new Ur;var Lr=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},si=new Lr;var Fr=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},ii=new Fr;var Wr=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},ai=new Wr;var T=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var jr=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}}},li=new jr;var Vr=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:[]}}},di=new Vr;var Hr=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:[]}}},mi=new Hr;var Yr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);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 m=s.map(h=>c[h]);l.push(...m);let p=Array(s.length).fill("?").join(", ");d.push(`(${p})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},ui=new Yr;var Jr=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:[]}}},ci=new Jr;var zr=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},pi=new zr;var qd={for_update:"for update",for_share:"lock in share mode"},Gr=class{toSql(t){let e=t,r=qd[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},yi=new Gr;var Zr=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},fi=new Zr;var Xr=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},hi=new Xr;var eo=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:[]}}},gi=new eo;var to=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ti=new to;var ro=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,