hysteria-orm 10.4.5 → 10.4.6
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.js +31 -31
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +26 -26
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +236 -1
- package/lib/index.d.ts +236 -1
- package/lib/index.js +26 -26
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {Command}from'commander';import ue from'fs';import
|
|
3
|
-
`).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":
|
|
4
|
-
${t}${
|
|
5
|
-
`:i==="warn"?`${
|
|
6
|
-
${t}${
|
|
7
|
-
`:i==="info"?`${
|
|
8
|
-
${t}${
|
|
2
|
+
import {Command}from'commander';import ue from'fs';import je,{join}from'path';import Ua from'fs/promises';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Se,{publicEncrypt,privateDecrypt,randomBytes}from'crypto';import {format}from'sql-formatter';import Ke from'dayjs';import $p from'dayjs/plugin/customParseFormat.js';import vp from'dayjs/plugin/timezone.js';import Ep from'dayjs/plugin/utc.js';import Vp from'pluralize';import {PassThrough,Readable}from'stream';import {execSync}from'child_process';import Af from'readline';var ka=i=>{throw TypeError(i)};var Qa=(i,t,e)=>t.has(i)||ka("Cannot "+e);var ke=(i,t,e)=>(Qa(i,t,"read from private field"),e?e.call(i):t.get(i)),Ka=(i,t,e)=>t.has(i)?ka("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),kr=(i,t,e,r)=>(Qa(i,t,"write to private field"),t.set(i,e),e);var T=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}};var z=class{constructor(t){this.options=t;}static async createDriver(t){throw new T("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var B=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var nt=class nt extends z{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new nt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new B("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new B("mongodb");return new nt(this.mongoClient)}};nt.mongoClient=null;var Rt=nt;var st=class st extends z{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new st(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new B("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new B("mssql");return new st(this.mssqlClient)}};st.mssqlClient=null;var At=st;var it=class it extends z{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new it(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new B("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new B("mysql2");return new it(this.mysqlClient)}};it.mysqlClient=null;var xt=it;var at=class at extends z{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new at(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new B("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new B("oracledb");return new at(this.oracledbClient)}};at.oracledbClient=null;var Pt=at;var lt=class lt extends z{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new lt(this.pgClient);let e=await import('pg').catch(()=>{throw new B("pg")});if(this.pgClient=e.default??e,!this.pgClient)throw new B("pg");return new lt(this.pgClient)}};lt.pgClient=null;var Dt=lt;var dt=class dt extends z{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new dt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new B("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new B("sqlite3");return new dt(this.sqlite3Client)}};dt.sqlite3Client=null;var Ot=dt;var ce=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await xt.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Dt.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Ot.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Rt.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await At.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await Pt.createDriver(),this.oracledbDriver;default:throw new T(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;case "oracledb":return this.oracledbDriver;default:return null}}};ce.mysqlDriver=null,ce.pgDriver=null,ce.sqliteDriver=null,ce.mssqlDriver=null,ce.oracledbDriver=null,ce.mongodbDriver=null;var D={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",MSSQL_TRUST_SERVER_CERTIFICATE:process.env.MSSQL_TRUST_SERVER_CERTIFICATE==="true"||false},mp=()=>{try{ue.readFileSync(".env","utf8").split(`
|
|
3
|
+
`).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":D.DB_TYPE||(D.DB_TYPE=s);break;case "DB_HOST":D.DB_HOST||(D.DB_HOST=s);break;case "DB_PORT":D.DB_PORT||(D.DB_PORT=s);break;case "DB_USER":D.DB_USER||(D.DB_USER=s);break;case "DB_PASSWORD":D.DB_PASSWORD||(D.DB_PASSWORD=s);break;case "DB_DATABASE":D.DB_DATABASE||(D.DB_DATABASE=s);break;case "MIGRATION_PATH":D.MIGRATION_PATH||(D.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":D.REDIS_HOST||(D.REDIS_HOST=s);break;case "REDIS_PORT":D.REDIS_PORT||(D.REDIS_PORT=s);break;case "REDIS_USERNAME":D.REDIS_USERNAME||(D.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":D.REDIS_PASSWORD||(D.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":D.REDIS_DATABASE||(D.REDIS_DATABASE=s);break;case "MONGO_URL":D.MONGO_URL||(D.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":D.MSSQL_TRUST_SERVER_CERTIFICATE||(D.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return D}},A=mp();var up=async i=>(await ce.getDriver(i)).client,Qe=async(i,t)=>{let e=await up(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,u=m?.database;return new d.Database(u,m?.driverOptions?.mode??void 0,x=>{if(x)throw new T("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let p=e,y=t,{options:h,...w}=y.driverOptions??{};return await p.connect({server:y.host??"localhost",port:y.port,database:y.database,user:y.username,password:y.password,...w,options:{trustServerCertificate:A.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...h,abortTransactionOnError:false,enableImplicitTransactions:false}});case "oracledb":let $=e,V=t,R=`${V.host}/${V.database}`;return await $.createPool({user:V.username,password:V.password,connectString:R,...V.driverOptions});default:throw new T("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var Je={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function pp(){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 Qr(i,t){let e=pp(),r=i.toUpperCase();return i==="error"?`${Je.error}[${r}] ${e}
|
|
4
|
+
${t}${Je.reset}
|
|
5
|
+
`:i==="warn"?`${Je.warn}[${r}] ${e}
|
|
6
|
+
${t}${Je.reset}
|
|
7
|
+
`:i==="info"?`${Je.info}[${r}] ${e}
|
|
8
|
+
${t}${Je.reset}
|
|
9
9
|
`:`[${r}] ${e}
|
|
10
10
|
${t}
|
|
11
|
-
`}var
|
|
11
|
+
`}var He=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){if(t instanceof Error){this.loggerInstance.error(String(t));return}this.loggerInstance.error(t);}static warn(t){this.loggerInstance.warn(t);}};He.loggerInstance={info(t){console.log(Qr("info",t));},error(t){console.error(Qr("error",t));},warn(t){console.warn(Qr("warn",t));}};function fp(i){return i.map(t=>typeof t=="object"?JSON.stringify(t):typeof t=="string"?`'${t}'`:typeof t=="number"?t:typeof t=="boolean"?t?"true":"false":t).join(", ")}function Z(i,t,e){if(!t)return;i=highlight(i,{colors:{keyword:"\x1B[34m",string:"\x1B[32m",number:"\x1B[33m",bracket:"\x1B[36m",clear:"\x1B[0m",comment:"\x1B[90m",function:"\x1B[35m",identifier:"\x1B[37m",special:"\x1B[31m"}});let r=`${i} [${fp(e||[])}]`;He.loggerInstance.info(r);}function La(i,t,e=false){e&&He.loggerInstance[t](i);}var g=He;var Kr=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(n=>n[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(n=>n.table_name);case "mssql":return r.recordset.map(n=>n.TABLE_NAME);case "oracledb":return (r.rows||[]).map(n=>Array.isArray(n)?n[0]:n?.TABLE_NAME).filter(n=>typeof n=="string"&&n.length>0);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
|
|
12
12
|
FROM information_schema.tables
|
|
13
13
|
WHERE table_catalog = '${e}'
|
|
14
14
|
AND table_schema = 'public'
|
|
@@ -122,7 +122,7 @@ CREATE TABLE [migrations] (
|
|
|
122
122
|
"id" NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
123
123
|
"name" VARCHAR2(255) NOT NULL,
|
|
124
124
|
"timestamp" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
125
|
-
)`}},Y=new
|
|
125
|
+
)`}},Y=new Kr;async function Lr(i,t=true,e){let r=i.getDbType(),o=i.database;r||(g.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(g.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),g.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.closeConnection(),await Ua.rm(o,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Ua.writeFile(o,""),g.info("Sqlite database recreated successfully");let u=i.getConnectionDetails();i.sqlPool=await Qe(i.getDbType(),u),g.info("All tables dropped successfully");return}let a=Y.getAllTablesTemplate(r,o),l=await i.rawQuery(a),d=Y.parseGetAllTables(r,o,l);if(!d.length){g.info("No tables to drop");return}let m=Y.dropAllTablesTemplate(r,d);if(s&&(n=await i.startTransaction(),i=n.sql),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let c=(await i.rawQuery(`
|
|
126
126
|
SELECT
|
|
127
127
|
OBJECT_NAME(parent_object_id) AS table_name,
|
|
128
128
|
name AS constraint_name
|
|
@@ -131,8 +131,8 @@ CREATE TABLE [migrations] (
|
|
|
131
131
|
SELECT constraint_name, table_name
|
|
132
132
|
FROM user_constraints
|
|
133
133
|
WHERE constraint_type = 'R'
|
|
134
|
-
`);for(let c of u.rows||[])await i.rawQuery(`ALTER TABLE "${c.TABLE_NAME}" DROP CONSTRAINT "${c.CONSTRAINT_NAME}"`);for(let c of d)await i.rawQuery(`DROP TABLE "${c}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(m);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),g.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),g.error(a),a}finally{t&&await i.closeConnection();}}var fp=()=>{let i=R.MIGRATION_PATH,t=Fe.resolve(process.cwd(),i);return ue.existsSync(t)||ue.mkdirSync(t,{recursive:true}),t},Fa=(i,t=false,e="basic",r="table")=>{let o=fp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=Fe.join(o,s),l;switch(e){case "alter":l=Y.alterMigrationTemplate(t,r);break;case "create":l=Y.createMigrationTemplate(t,r);break;default:l=Y.basicMigrationTemplate(t);break}ue.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function ie(i,t){let{bundleRequire:e}=await import('bundle-require').catch(()=>{throw new Q("bundle-require")}),r=Fe.isAbsolute(i)?i:Fe.resolve(process.cwd(),i),{mod:o}=await e({filepath:r,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","dayjs","commander"]});return o}var bp=async(i,t)=>{if(i.endsWith(".ts"))return await import('typescript').catch(()=>{throw new T("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 T("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 T("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")}),ie(i,t);try{return import(pathToFileURL(i).href)}catch{let o=createRequire(import.meta.url);try{let n=o(i);return {default:n.default||n,...n}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function It(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(Y.migrationTableTemplateMysql()),(await e.query(Y.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(Y.migrationTableTemplatePg()),(await o.query(Y.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await Va(Y.migrationTableTemplateSQLite(),[],t),await Va(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(u){if(u.errorNum!==955)throw u}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(u=>({id:u[0],name:u[1],timestamp:u[2]}))}finally{await d.close();}default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function $t(i,t,e){let r=Sp(t),o=[];for(let n of r){let s=await Np(n,t,e),a=new s(i||R.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function Tp(i,t){let e=await bp(i,t);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}async function Np(i,t=R.MIGRATION_PATH||"database/migrations",e){t=join(t,i);let r=Fe.resolve(process.cwd(),t),o=await Tp(r,e);if(!o)throw new T("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function Sp(i){let t=process.cwd(),e=Fe.resolve(i||R.MIGRATION_PATH||"database/migrations"),r=Fe.resolve(t,e);try{let o=ue.readdirSync(r).filter(n=>{let s=Fe.extname(n),a=Fe.join(r,n);return ue.statSync(a).isFile()&&(s===".ts"||s===".js")});if(o.length)return o;throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}catch{throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}}async function Va(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function dt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Running migrations for database type: "+n);try{let l=await It(n,i.getPool()),m=(await $t(n,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!m.length){g.info("No pending migrations.");return}if(t){let c=m.findIndex(h=>h.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=m.slice(0,c+1);s&&(a=await i.startTransaction(),i=a.sql),await new xe(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}let u=new xe(i);s&&(a=await i.startTransaction(),i=a.sql),await u.upMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}var Ot={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var Ha=null;function Ja(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let o=e.getColumns();for(let[n,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=o.find(u=>u.columnName===n||u.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",m=Ot[d]||"string";if(m==="string"||m==="textarea"){i.whereLike(n,`%${a}%`);continue}if(m==="boolean"){i.where(n,a==="true"||a===true);continue}if(m==="date"||m==="datetime"){if(typeof a=="object"&&a!==null){let u=a;u.from&&i.where(n,">=",u.from),u.to&&i.where(n,"<=",u.to);continue}i.where(n,a);continue}i.where(n,a);}}function mt(i,t){let e={},r=t.getColumns();for(let o of r){let n=i[o.columnName];e[o.columnName]=n;}return e}async function qp(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=Ha;}static isAdapterFor(n){if(typeof n!="function")return false;let s=n;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=Ot[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(m=>m.columnName===n||m.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=Ot[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let s=this._model.query({connection:this._db});return Ja(s,n,this._model),s.getCount()}async find(n,s={}){let a=this._model.query({connection:this._db});return Ja(a,n,this._model),s.limit&&a.limit(s.limit),s.offset&&a.offset(s.offset),s.sort?.sortBy&&a.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await a.many()).map(d=>new e(mt(d,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});return a?new e(mt(a,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await this._model.query({connection:this._db}).whereIn(s,n).many()).map(l=>new e(mt(l,this._model),this)):[]}async create(n){let s=await this._model.insert(n,{connection:this._db});return mt(s,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=await this._model.findOneByPrimaryKey(n,{connection:this._db});if(!l)throw new Error("Record not found");let d=await this._model.updateRecord(l,s,{connection:this._db});return mt(d,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});a&&await this._model.deleteRecord(a,{connection:this._db});}}}async function wp(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Mp(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),t=await qp(),e=await wp();i.default.registerAdapter({Database:e,Resource:t});}async function Ur(i,t){Ha=i;let e=await import('adminjs').catch(()=>{throw new Q("adminjs")});await Mp();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let o=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),n={rootPath:t.rootPath||"/admin",resources:o};if(t.branding&&(n.branding=t.branding),t.locale?.language&&(n.locale=t.locale),t.assets&&(n.assets=t.assets),t.settings&&(n.settings=t.settings),t.pages){let a={};for(let[l,d]of Object.entries(t.pages))d.component&&(a[l]=d);Object.keys(a).length>0&&(n.pages=a);}return {admin:new e.default(n)}}async function Ya(i,t){let{admin:e}=await Ur(i,t),r;try{r=await import('@adminjs/express');}catch{throw new Q("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Je=new Map,Pe=new Map,vt=class{async get(t){return Je.get(t)}async set(t,e,r){let o=Pe.get(t);if(o&&(clearTimeout(o),Pe.delete(t)),Je.set(t,e),r){let n=setTimeout(()=>{Je.delete(t),Pe.delete(t);},r);Pe.set(t,n);}}async invalidate(t){let e=Pe.get(t);e&&(clearTimeout(e),Pe.delete(t)),Je.delete(t);}async invalidateAll(t){let e=Je.keys();for(let r of e)if(r.startsWith(t)){let o=Pe.get(r);o&&(clearTimeout(o),Pe.delete(r)),Je.delete(r);}}};var Et=class{constructor(t){switch(this.type=t?.type||R.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;case "mssql":this.handleMssqlSource(t);break;case "oracledb":this.handleOracleDBSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
135
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}}handleCockroachdbSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||R.DB_DATABASE||":memory:",this.logs=t?.logs||R.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||R.MONGO_URL,this.logs=t?.logs||R.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=1521);}};var _p=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},Cp=i=>i.openApi?.required??false,Rp=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=_p(r));return e},Ap=i=>{let t=i.getColumns(),e=[];for(let r of t)Cp(r)&&e.push(r.columnName);return e||[]},xp=i=>{let t=Rp(i),e=Ap(i);return {type:"object",properties:t,required:e.length?e:[]}};var za=i=>i.map(t=>({...xp(t),modelName:t.name,$id:t.name}));var Fr=(i,t)=>{let e=qe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Wr=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";case "oracledb":return "plsql";default:return "sql"}},Qt=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)},Za=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Qt(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}return e},ut=(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||"")):i==="mssql"?t.number===208:i==="oracledb"?t.errorNum===942:false:false,kt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:Wr(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var jr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{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 ${o}`,bindings:[]}}},Xa=new jr;var Vr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},el=new Vr;var Jr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},tl=new Jr;var Hr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let d=e.options.default;d===null?d="null":typeof d=="string"&&(d==="NULL"?d="null":d==="TRUE"||d==="FALSE"?d=d==="TRUE"?"1":"0":d=`'${d}'`),l+=`, add constraint DF_${e.column} default ${d} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},rl=new Hr;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var He=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function Dp(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 Ip(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function B(i,t){return t==="preserve"?i:t==="snake"?Dp(i):t==="camel"?Ip(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}Be.extend(vp);Be.extend(Op);Be.extend($p);var ee=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=Be(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()}},ct=(i,t,e="UTC")=>{if(i===null)return null;if(i instanceof Date){if(isNaN(i.getTime()))throw new T("DateUtils::parseDate","INVALID_DATE_OBJECT");return i}try{let r=t?Be(i,t):Be(i);if(!r.isValid())throw new T("DateUtils::parseDate","INVALID_DATE_STRING");return e==="UTC"?r.utc().toDate():r.local().toDate()}catch(r){throw new T("DateUtils::parseDate","FAILED_TO_PARSE_DATE",r)}},pe=(i=new Date)=>Be(i).utc().format("YYYY-MM-DD HH:mm:ss");var ol=(i,t)=>{try{let e=qe.createHash("sha256").update(i).digest(),r=qe.randomBytes(16),o=qe.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 T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},nl=(i,t)=>{try{let e=qe.createHash("sha256").update(i).digest(),r=String(t).trim(),[o,n]=r.split(":");if(!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=o.toLowerCase(),a=n.toLowerCase(),l=qe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),d=l.update(a,"hex","utf8");return d+=l.final("utf8"),d}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},sl=(i,t)=>{try{let e=qe.randomBytes(32),r=qe.randomBytes(16),o=qe.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},il=(i,t)=>{try{let e=String(t).trim(),[r,o,n]=e.split(":");if(!r||!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(o,"hex")),a=qe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(n,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var U=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);}}};U.store=new WeakMap;var zr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Yr=zr.length,Bp=10,Kp=16,Lp=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%Yr;e=zr.charAt(o)+e,i=(i-o)/Yr;}return e},Up=i=>{let t=randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=zr.charAt(o%Yr);}return e},al=()=>{let i=Math.floor(Date.now()/1e3),t=Lp(i,Bp),e=Up(Kp);return t+e};function Gr(i){return i.replace(/^[`"]|[`"]$/g,"")}function Zr(i,t,e){if(!i.includes(".")){let n=Gr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=Gr(r),o=Gr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function q(i){return typeof i=="function"?i():i}var F=(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]=F(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]=F(o,t);}return e};var Ye=class{};Ye.modelCaseConvention="camel",Ye.databaseCaseConvention="snake";var Fp=async(i,t,e,r,o=[],n=[],s=false)=>{let a=new t,l=new Set(e.filter(u=>u.hidden).map(u=>u.columnName)),d=new Map(e.map(u=>[u.databaseName,u])),m=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async u=>{let c=i[u],p=d.get(u)?.columnName??B(u,t.modelCaseConvention);if(p==="$annotations"&&!s){Wp(i,u,a,t,n);return}if(!r.has(p)||l.has(p)||m&&!m.has(p))return;if(c===null){a[p]=null;return}let y=r.get(p);if(y&&y.serialize){a[p]=await y.serialize(c);return}a[p]=c;})),m)for(let u of m)u in a||(a[u]=null);return a},Wp=(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[B(l,r.modelCaseConvention)]=n[l]);Object.keys(a).length>0&&(e[t]=a);},fe=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 m=d;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let u=s.get(m)?.columnName??B(m,t.modelCaseConvention);a.push(u);}e=a;let l=await Promise.all(i.map(async d=>await Fp(d,t,n,s,e,r,o)));return l.length===1?l[0]:l};var ll=["postgres","cockroachdb"];function dl(i){let t=i.name,e=B(t,"snake");return jp(e)}function ml(){return {}}var pt=class pt extends Ye{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:dl(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return hl(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=Lt(s).find(y=>y.columnName===t);if(!l)throw new T(`${s.name}::sync`,"RELATION_NOT_FOUND");if(l.type!=="manyToMany")throw new T(`${s.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let d=B(l.leftForeignKey,n.caseConvention||s.databaseCaseConvention),m=B(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),u=r.map((y,h)=>({[d]:e[s.primaryKey],[m]:y[l.model.primaryKey],...o?o(y,h):{}}));class c extends pt{static get table(){return l.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await c.dispatchModelManager(n).insertMany(u);}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 T&&o.message==="MODEL_HAS_NO_PRIMARY_KEY"?new T(`${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(u=>{let c=new Set(Object.keys(u));return t.every(p=>c.has(p))}))throw new T("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(ll.includes(l))return await fe(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let m=new Map;return t.forEach(u=>{e.forEach(c=>{m.set(u,[...m.get(u)||[],c[u]]);});}),d.where(u=>{t.forEach(c=>{u.orWhereIn(c,m.get(c)||[]);});}),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 Kt(this)}static getRelations(){return yl(this)}static getIndexes(){return gl(this)}static getUniques(){return bl(this)}static column(t,...e){k(...e)(this.prototype,t);}static hasOne(t,...e){cl(...e)(this.prototype,t);}static hasMany(t,...e){pl(...e)(this.prototype,t);}static belongsTo(t,...e){ul(...e)(this.prototype,t);}static manyToMany(t,...e){fl(...e)(this.prototype,t);}static establishConnection(){let t=De.instance;if(!t)throw new T("sqlInstance not initialized, did you defined it in SqlDataSource.connect static method?","CONNECTION_NOT_ESTABLISHED");this.sqlInstance=t;}static dispatchModelManager(t){let e;if(t?.connection)e=t.connection.getModelManager(this);else if(t?.trx)e=t.trx.sql.getModelManager(this);else {let r=this;r.establishConnection(),e=r.sqlInstance.getModelManager(r);}return t?.replicationMode&&e.setReplicationMode(t.replicationMode),e}mergeProps(t){this.constructor.combineProps(this,t);}async save(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new T(r.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[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 T(o.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(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 T(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(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 T(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(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 T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY_VALUE");let s=await r.refresh(this,t);return r.combineProps(this,s),this}toJSON(){let t={};for(let r in this)if(Object.prototype.hasOwnProperty.call(this,r)){let o=this[r];if(r==="$annotations")continue;o&&typeof o=="object"?Array.isArray(o)?t[r]=o.map(n=>n&&typeof n=="object"&&"toJSON"in n?n.toJSON():n):"toJSON"in o&&typeof o.toJSON=="function"?t[r]=o.toJSON():t[r]=o:t[r]=o;}let e=this.$annotations;if(e&&typeof e=="object")for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}};pt.softDeleteColumn="deletedAt",pt.softDeleteValue=pe();var Bt=pt;var ye=class{constructor(t,e){this.model=Bt;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Ut=class extends ye{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Ft=class extends ye{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var Wt=class extends ye{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var jt=class extends ye{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 Vt=Symbol("columns"),Jt=Symbol("primaryKey"),ae=Symbol("relations"),Tl=Symbol("indexes"),Nl=Symbol("uniques"),Ie=i=>`${jp.singular(i)}_id`,Xr=(i,t)=>`idx_${i}_${t}`,le=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,$e=(i,t)=>`pk_${i}_${t}`;function k(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(U.getMetadata(Jt,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");U.defineMetadata(Jt,r,e);}let n=i.databaseName??B(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,hidden:i.hidden,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??$e(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=U.getMetadata(Vt,e)||[];a.push(s),U.defineMetadata(Vt,a,e);}}k.primary=Hp;k.date=nf;k.datetime=sf;k.timestamp=af;k.time=lf;k.boolean=of;k.json=df;k.uuid=Xp;k.ulid=ef;k.integer=zp;k.float=Yp;k.increment=Gp;k.bigIncrement=Zp;k.encryption={symmetric:tf,asymmetric:rf};function Hp(i={}){return k({...i,primaryKey:true})}function Yp(i={}){return k({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 zp(i={}){return k({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 Gp(i={}){return k({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function Zp(i={}){return k({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function Xp(i={}){return k({type:"uuid",...i,prepare:t=>t||qe.randomUUID()})}function ef(i={}){return k({type:"ulid",...i,prepare:t=>t||al()})}function tf(i){return k({...i,prepare:t=>t&&ol(i.key,t),serialize:t=>t&&nl(i.key,t)})}function rf(i){return k({...i,prepare:t=>t&&sl(i.publicKey,t),serialize:t=>t&&il(i.privateKey,t)})}function of(i={}){return k({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function nf(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"DATE_ONLY",t):typeof d=="string"?d:ee(d,"DATE_ONLY",t):r?ee(new Date,"DATE_ONLY",t):null,l=d=>{if(d!==void 0)return d===null?null:ct(d,void 0,t)};return k({type:"date",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function sf(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"ISO",t):typeof d=="string"?d:ee(d,"ISO",t):r?ee(new Date,"ISO",t):null,l=d=>{if(d!==void 0)return d===null?null:ct(d,void 0,t)};return k({type:"datetime",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function af(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"TIMESTAMP",t):typeof d=="string"?d:ee(d,"TIMESTAMP",t):r?ee(new Date,"TIMESTAMP",t):null,l=d=>{if(d!==void 0)return d===null?null:ct(d,void 0,t)};return k({type:"timestamp",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function lf(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"TIME_ONLY",t):typeof d=="string"?d:ee(d,"TIME_ONLY",t):r?ee(new Date,"TIME_ONLY",t):null,l=d=>{if(d!==void 0)return d===null?null:ct(d,void 0,t)};return k({type:"time",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function df(i={}){return k({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function Kt(i){try{return U.getMetadata(Vt,i.prototype)||[]}catch{return []}}function ul(i,t,e){return (r,o)=>{let n=()=>Ie(i().table),s=()=>{let d=r.constructor.table,m=t||n();return H(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=U.getMetadata(ae,r)||[];l.push(a),U.defineMetadata(ae,l,r);}}function cl(i,t){return (e,r)=>{let o=()=>Ie(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(ae,e)||[];s.push(n),U.defineMetadata(ae,s,e);}}function pl(i,t){return (e,r)=>{let o=()=>Ie(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(ae,e)||[];s.push(n),U.defineMetadata(ae,s,e);}}function fl(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,u=()=>Ie(m),c=()=>Ie(i().table),p=()=>H(q(d),s?String(s):u()),y={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):u,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:m,throughModel:d,leftForeignKey:s?String(s):u,rightForeignKey:a?String(a):c,wasModelProvided:l}},h=U.getMetadata(ae,o)||[];h.push(y),U.defineMetadata(ae,h,o);}}function yl(i){return U.getMetadata(ae,i.prototype)||[]}function Lt(i){return (U.getMetadata(ae,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=q(s),l=o();switch(r){case "belongsTo":return new Ut(l,n,a);case "hasOne":return new Wt(l,n,a);case "hasMany":return new Ft(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new jt(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function hl(i){return U.getMetadata(Jt,i.prototype)}function gl(i){return U.getMetadata(Tl,i.prototype)||[]}function bl(i){return U.getMetadata(Nl,i.prototype)||[]}var f=class{constructor(t){this.model=t;let e=Kt(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":case "oracledb":return `"${n}".*`;case "mssql":return `[${n}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let a=this.modelColumnsMap.get(s)?.databaseName??B(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}"."${a}"`;case "mssql":return `[${n}].[${a}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??B(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${o}"`;case "mssql":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":case "oracledb":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":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],m=this.modelColumnsMap.get(l),u=d;m&&(r==="insert"&&m.prepare?u=await m.prepare(d):r==="update"&&(u=await m.prepare?.(d)??d)),n[a]=u;}));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;if(r==="insert"||a.autoUpdate){o.push(s);let l=a.prepare?await a.prepare(void 0):void 0;n.push(l??void 0);}}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var eo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof He){let m=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${m.newName}'`,bindings:[]}}let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Sl=new eo;var to=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},ql=new to;var ro=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},wl=new ro;var oo=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ml=new oo;var no=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},_l=new no;var so=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Cl=new so;var io=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Rl=new io;var ao=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Al=new ao;var _=class extends N{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 lo=class{toSql(t){let e=t,r;return e.defaultValue instanceof _?r=e.defaultValue.rawValue:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},xl=new lo;var mo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Pl=new mo;var uo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("mssql",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} varchar(max)`,bindings:[]};if(n==="uuid")return {sql:`${o} uniqueidentifier`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigint identity(1,1)`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} int`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} float`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}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:[]}}if(n==="datetime"||n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime2${s}`,bindings:[]}}if(n==="boolean"||n==="bool")return {sql:`${o} bit`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} varbinary(max)`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} nvarchar(max)`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}return n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]}:n==="geometry"?{sql:`${o} geometry`,bindings:[]}:n==="point"?{sql:`${o} geometry`,bindings:[]}:n==="linestring"?{sql:`${o} geometry`,bindings:[]}:n==="polygon"?{sql:`${o} geometry`,bindings:[]}:n==="multipoint"?{sql:`${o} geometry`,bindings:[]}:{sql:`${o} ${n}${e.length?`(${e.length})`:""}`,bindings:[]}}},Dl=new uo;var co=class{toSql(t){return {sql:"",bindings:[]}}},Il=new co;var po=class{toSql(t){let e=t,r=new f(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("mssql",q(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("mssql",q(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 instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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("mssql",q(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mssql",q(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:[]}}},$l=new po;var fo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},Ol=new fo;var yo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},vl=new yo;var ho=class{toSql(t){return {sql:"",bindings:[]}}},El=new ho;var go=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Ql=new go;var bo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},kl=new bo;var To=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Bl=new To;var No=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Kl=new No;var So=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Ll=new So;var qo=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 N)&&!Array.isArray(e.value)&&(o=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Ul=new qo;var wo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},Fl=new wo;var Mo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Wl=new Mo;var _o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n).filter(c=>n[c]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof _?y.push(h.rawValue):(l.push(h),y.push(`@${m++}`));d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}`).join(", ");u=u.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(s,r);u=u.replace(") values",`) output ${c} values`);}return {sql:u,bindings:l}}getOutputColumns(t,e){let r=[...t],o=this.model.primaryKey;return o&&!t.includes(o)&&r.push(o),r.map(n=>`inserted.${e.formatStringColumn("mssql",n)}`).join(", ")}},jl=new _o;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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("mssql",o),a=r.formatStringColumn("mssql",n);return {sql:`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},Vl=new Co;var Ro=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Jl=new Ro;var Ao=class{toSql(t){return {sql:"",bindings:[]}}},Hl=new Ao;var xo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Yl=new xo;var Po=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},zl=new Po;var Do=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Gl=new Do;var Io=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Zl=new Io;var $o=class{toSql(t){return {sql:`SELECT
|
|
134
|
+
`);for(let c of u.rows||[])await i.rawQuery(`ALTER TABLE "${c.TABLE_NAME}" DROP CONSTRAINT "${c.CONSTRAINT_NAME}"`);for(let c of d)await i.rawQuery(`DROP TABLE "${c}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(m);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),g.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),g.error(a),a}finally{t&&await i.closeConnection();}}var yp=()=>{let i=A.MIGRATION_PATH,t=je.resolve(process.cwd(),i);return ue.existsSync(t)||ue.mkdirSync(t,{recursive:true}),t},Fa=(i,t=false,e="basic",r="table")=>{let o=yp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=je.join(o,s),l;switch(e){case "alter":l=Y.alterMigrationTemplate(t,r);break;case "create":l=Y.createMigrationTemplate(t,r);break;default:l=Y.basicMigrationTemplate(t);break}ue.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function ie(i,t){let{bundleRequire:e}=await import('bundle-require').catch(()=>{throw new B("bundle-require")}),r=je.isAbsolute(i)?i:je.resolve(process.cwd(),i),{mod:o}=await e({filepath:r,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","dayjs","commander"]});return o}var Tp=async(i,t)=>{if(i.endsWith(".ts"))return await import('typescript').catch(()=>{throw new T("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 T("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 T("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")}),ie(i,t);try{return import(pathToFileURL(i).href)}catch{let o=createRequire(import.meta.url);try{let n=o(i);return {default:n.default||n,...n}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function It(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(Y.migrationTableTemplateMysql()),(await e.query(Y.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(Y.migrationTableTemplatePg()),(await o.query(Y.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await Ja(Y.migrationTableTemplateSQLite(),[],t),await Ja(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(u){if(u.errorNum!==955)throw u}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(u=>({id:u[0],name:u[1],timestamp:u[2]}))}finally{await d.close();}default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function $t(i,t,e){let r=Sp(t),o=[];for(let n of r){let s=await wp(n,t,e),a=new s(i||A.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function Np(i,t){let e=await Tp(i,t);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}async function wp(i,t=A.MIGRATION_PATH||"database/migrations",e){t=join(t,i);let r=je.resolve(process.cwd(),t),o=await Np(r,e);if(!o)throw new T("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function Sp(i){let t=process.cwd(),e=je.resolve(i||A.MIGRATION_PATH||"database/migrations"),r=je.resolve(t,e);try{let o=ue.readdirSync(r).filter(n=>{let s=je.extname(n),a=je.join(r,n);return ue.statSync(a).isFile()&&(s===".ts"||s===".js")});if(o.length)return o;throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}catch{throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}}async function Ja(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function ut(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Running migrations for database type: "+n);try{let l=await It(n,i.getPool()),m=(await $t(n,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!m.length){g.info("No pending migrations.");return}if(t){let c=m.findIndex(h=>h.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=m.slice(0,c+1);s&&(a=await i.startTransaction(),i=a.sql),await new xe(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}let u=new xe(i);s&&(a=await i.startTransaction(),i=a.sql),await u.upMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}var vt={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var Ya=null;function Ha(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let o=e.getColumns();for(let[n,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=o.find(u=>u.columnName===n||u.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",m=vt[d]||"string";if(m==="string"||m==="textarea"){i.whereLike(n,`%${a}%`);continue}if(m==="boolean"){i.where(n,a==="true"||a===true);continue}if(m==="date"||m==="datetime"){if(typeof a=="object"&&a!==null){let u=a;u.from&&i.where(n,">=",u.from),u.to&&i.where(n,"<=",u.to);continue}i.where(n,a);continue}i.where(n,a);}}function ct(i,t){let e={},r=t.getColumns();for(let o of r){let n=i[o.columnName];e[o.columnName]=n;}return e}async function qp(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=Ya;}static isAdapterFor(n){if(typeof n!="function")return false;let s=n;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=vt[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(m=>m.columnName===n||m.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=vt[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let s=this._model.query({connection:this._db});return Ha(s,n,this._model),s.getCount()}async find(n,s={}){let a=this._model.query({connection:this._db});return Ha(a,n,this._model),s.limit&&a.limit(s.limit),s.offset&&a.offset(s.offset),s.sort?.sortBy&&a.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await a.many()).map(d=>new e(ct(d,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});return a?new e(ct(a,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await this._model.query({connection:this._db}).whereIn(s,n).many()).map(l=>new e(ct(l,this._model),this)):[]}async create(n){let s=await this._model.insert(n,{connection:this._db});return ct(s,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=await this._model.findOneByPrimaryKey(n,{connection:this._db});if(!l)throw new Error("Record not found");let d=await this._model.updateRecord(l,s,{connection:this._db});return ct(d,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});a&&await this._model.deleteRecord(a,{connection:this._db});}}}async function Mp(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function _p(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),t=await qp(),e=await Mp();i.default.registerAdapter({Database:e,Resource:t});}async function Wr(i,t){Ya=i;let e=await import('adminjs').catch(()=>{throw new B("adminjs")});await _p();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let o=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),n={rootPath:t.rootPath||"/admin",resources:o};if(t.branding&&(n.branding=t.branding),t.locale?.language&&(n.locale=t.locale),t.assets&&(n.assets=t.assets),t.settings&&(n.settings=t.settings),t.pages){let a={};for(let[l,d]of Object.entries(t.pages))d.component&&(a[l]=d);Object.keys(a).length>0&&(n.pages=a);}return {admin:new e.default(n)}}async function Ga(i,t){let{admin:e}=await Wr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new B("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ye=new Map,Pe=new Map,Et=class{async get(t){return Ye.get(t)}async set(t,e,r){let o=Pe.get(t);if(o&&(clearTimeout(o),Pe.delete(t)),Ye.set(t,e),r){let n=setTimeout(()=>{Ye.delete(t),Pe.delete(t);},r);Pe.set(t,n);}}async invalidate(t){let e=Pe.get(t);e&&(clearTimeout(e),Pe.delete(t)),Ye.delete(t);}async invalidateAll(t){let e=Ye.keys();for(let r of e)if(r.startsWith(t)){let o=Pe.get(r);o&&(clearTimeout(o),Pe.delete(r)),Ye.delete(r);}}};var Bt=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;case "mssql":this.handleMssqlSource(t);break;case "oracledb":this.handleOracleDBSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
135
|
+
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||":memory:",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;}handleMssqlSource(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=1433);}handleOracleDBSource(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=1521);}};var Cp=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},Rp=i=>i.openApi?.required??false,Ap=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=Cp(r));return e},xp=i=>{let t=i.getColumns(),e=[];for(let r of t)Rp(r)&&e.push(r.columnName);return e||[]},Pp=i=>{let t=Ap(i),e=xp(i);return {type:"object",properties:t,required:e.length?e:[]}};var za=i=>i.map(t=>({...Pp(t),modelName:t.name,$id:t.name}));var Fr=(i,t)=>{let e=Se.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var jr=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";case "oracledb":return "plsql";default:return "sql"}},kt=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)},Xa=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,kt(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,kt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,kt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,kt(t[r]));}return e},pt=(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||"")):i==="mssql"?t.number===208:i==="oracledb"?t.errorNum===942:false:false,Qt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:jr(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Vr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{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 ${o}`,bindings:[]}}},el=new Vr;var Jr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},tl=new Jr;var Hr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},rl=new Hr;var Yr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let d=e.options.default;d===null?d="null":typeof d=="string"&&(d==="NULL"?d="null":d==="TRUE"||d==="FALSE"?d=d==="TRUE"?"1":"0":d=`'${d}'`),l+=`, add constraint DF_${e.column} default ${d} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},ol=new Yr;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ge=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function Op(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 Ip(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Q(i,t){return t==="preserve"?i:t==="snake"?Op(i):t==="camel"?Ip(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}Ke.extend(Ep);Ke.extend(vp);Ke.extend($p);var ee=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=Ke(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()}},ft=(i,t,e="UTC")=>{if(i===null)return null;if(i instanceof Date){if(isNaN(i.getTime()))throw new T("DateUtils::parseDate","INVALID_DATE_OBJECT");return i}try{let r=t?Ke(i,t):Ke(i);if(!r.isValid())throw new T("DateUtils::parseDate","INVALID_DATE_STRING");return e==="UTC"?r.utc().toDate():r.local().toDate()}catch(r){throw new T("DateUtils::parseDate","FAILED_TO_PARSE_DATE",r)}},pe=(i=new Date)=>Ke(i).utc().format("YYYY-MM-DD HH:mm:ss");var nl=(i,t)=>{try{let e=Se.createHash("sha256").update(i).digest(),r=Se.randomBytes(16),o=Se.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 T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},sl=(i,t)=>{try{let e=Se.createHash("sha256").update(i).digest(),r=String(t).trim(),[o,n]=r.split(":");if(!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=o.toLowerCase(),a=n.toLowerCase(),l=Se.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),d=l.update(a,"hex","utf8");return d+=l.final("utf8"),d}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},il=(i,t)=>{try{let e=Se.randomBytes(32),r=Se.randomBytes(16),o=Se.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},al=(i,t)=>{try{let e=String(t).trim(),[r,o,n]=e.split(":");if(!r||!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(o,"hex")),a=Se.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(n,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var U=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);}}};U.store=new WeakMap;var zr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Gr=zr.length,Kp=10,Lp=16,Up=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%Gr;e=zr.charAt(o)+e,i=(i-o)/Gr;}return e},Wp=i=>{let t=randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=zr.charAt(o%Gr);}return e},ll=()=>{let i=Math.floor(Date.now()/1e3),t=Up(i,Kp),e=Wp(Lp);return t+e};function Zr(i){return i.replace(/^[`"]|[`"]$/g,"")}function Xr(i,t,e){if(!i.includes(".")){let n=Zr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=Zr(r),o=Zr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function S(i){return typeof i=="function"?i():i}var W=(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]=W(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]=W(o,t);}return e};var ze=class{};ze.modelCaseConvention="camel",ze.databaseCaseConvention="snake";var Fp=async(i,t,e,r,o=[],n=[],s=false)=>{let a=new t,l=new Set(e.filter(u=>u.hidden).map(u=>u.columnName)),d=new Map(e.map(u=>[u.databaseName,u])),m=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async u=>{let c=i[u],p=d.get(u)?.columnName??Q(u,t.modelCaseConvention);if(p==="$annotations"&&!s){jp(i,u,a,t,n);return}if(!r.has(p)||l.has(p)||m&&!m.has(p))return;if(c===null){a[p]=null;return}let y=r.get(p);if(y&&y.serialize){a[p]=await y.serialize(c);return}a[p]=c;})),m)for(let u of m)u in a||(a[u]=null);return a},jp=(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[Q(l,r.modelCaseConvention)]=n[l]);Object.keys(a).length>0&&(e[t]=a);},fe=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 m=d;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let u=s.get(m)?.columnName??Q(m,t.modelCaseConvention);a.push(u);}e=a;let l=await Promise.all(i.map(async d=>await Fp(d,t,n,s,e,r,o)));return l.length===1?l[0]:l};var dl=["postgres","cockroachdb"];function ml(i){let t=i.name,e=Q(t,"snake");return Vp(e)}function ul(){return {}}var yt=class yt extends ze{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:ml(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return gl(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=Ut(s).find(y=>y.columnName===t);if(!l)throw new T(`${s.name}::sync`,"RELATION_NOT_FOUND");if(l.type!=="manyToMany")throw new T(`${s.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let d=Q(l.leftForeignKey,n.caseConvention||s.databaseCaseConvention),m=Q(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),u=r.map((y,h)=>({[d]:e[s.primaryKey],[m]:y[l.model.primaryKey],...o?o(y,h):{}}));class c extends yt{static get table(){return l.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await c.dispatchModelManager(n).insertMany(u);}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 T&&o.message==="MODEL_HAS_NO_PRIMARY_KEY"?new T(`${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(u=>{let c=new Set(Object.keys(u));return t.every(p=>c.has(p))}))throw new T("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(dl.includes(l))return await fe(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let m=new Map;return t.forEach(u=>{e.forEach(c=>{m.set(u,[...m.get(u)||[],c[u]]);});}),d.where(u=>{t.forEach(c=>{u.orWhereIn(c,m.get(c)||[]);});}),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 Lt(this)}static getRelations(){return hl(this)}static getIndexes(){return bl(this)}static getUniques(){return Tl(this)}static column(t,...e){k(...e)(this.prototype,t);}static hasOne(t,...e){pl(...e)(this.prototype,t);}static hasMany(t,...e){fl(...e)(this.prototype,t);}static belongsTo(t,...e){cl(...e)(this.prototype,t);}static manyToMany(t,...e){yl(...e)(this.prototype,t);}static establishConnection(){let t=De.instance;if(!t)throw new T("sqlInstance not initialized, did you defined it in SqlDataSource.connect static method?","CONNECTION_NOT_ESTABLISHED");this.sqlInstance=t;}static dispatchModelManager(t){let e;if(t?.connection)e=t.connection.getModelManager(this);else if(t?.trx)e=t.trx.sql.getModelManager(this);else {let r=this;r.establishConnection(),e=r.sqlInstance.getModelManager(r);}return t?.replicationMode&&e.setReplicationMode(t.replicationMode),e}mergeProps(t){this.constructor.combineProps(this,t);}async save(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new T(r.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[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 T(o.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(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 T(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(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 T(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(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 T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY_VALUE");let s=await r.refresh(this,t);return r.combineProps(this,s),this}toJSON(){let t={};for(let r in this)if(Object.prototype.hasOwnProperty.call(this,r)){let o=this[r];if(r==="$annotations")continue;o&&typeof o=="object"?Array.isArray(o)?t[r]=o.map(n=>n&&typeof n=="object"&&"toJSON"in n?n.toJSON():n):"toJSON"in o&&typeof o.toJSON=="function"?t[r]=o.toJSON():t[r]=o:t[r]=o;}let e=this.$annotations;if(e&&typeof e=="object")for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}};yt.softDeleteColumn="deletedAt",yt.softDeleteValue=pe();var Kt=yt;var ye=class{constructor(t,e){this.model=Kt;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Wt=class extends ye{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Ft=class extends ye{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var jt=class extends ye{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Vt=class extends ye{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 Jt=Symbol("columns"),Ht=Symbol("primaryKey"),ae=Symbol("relations"),Nl=Symbol("indexes"),wl=Symbol("uniques"),Oe=i=>`${Vp.singular(i)}_id`,eo=(i,t)=>`idx_${i}_${t}`,le=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ie=(i,t)=>`pk_${i}_${t}`;function k(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(U.getMetadata(Ht,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");U.defineMetadata(Ht,r,e);}let n=i.databaseName??Q(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,hidden:i.hidden,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Ie(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=U.getMetadata(Jt,e)||[];a.push(s),U.defineMetadata(Jt,a,e);}}k.primary=Yp;k.date=sf;k.datetime=af;k.timestamp=lf;k.time=df;k.boolean=nf;k.json=mf;k.uuid=ef;k.ulid=tf;k.integer=zp;k.float=Gp;k.increment=Zp;k.bigIncrement=Xp;k.encryption={symmetric:rf,asymmetric:of};function Yp(i={}){return k({...i,primaryKey:true})}function Gp(i={}){return k({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 zp(i={}){return k({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 Zp(i={}){return k({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function Xp(i={}){return k({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function ef(i={}){return k({type:"uuid",...i,prepare:t=>t||Se.randomUUID()})}function tf(i={}){return k({type:"ulid",...i,prepare:t=>t||ll()})}function rf(i){return k({...i,prepare:t=>t&&nl(i.key,t),serialize:t=>t&&sl(i.key,t)})}function of(i){return k({...i,prepare:t=>t&&il(i.publicKey,t),serialize:t=>t&&al(i.privateKey,t)})}function nf(i={}){return k({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function sf(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"DATE_ONLY",t):typeof d=="string"?d:ee(d,"DATE_ONLY",t):r?ee(new Date,"DATE_ONLY",t):null,l=d=>{if(d!==void 0)return d===null?null:ft(d,void 0,t)};return k({type:"date",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function af(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"ISO",t):typeof d=="string"?d:ee(d,"ISO",t):r?ee(new Date,"ISO",t):null,l=d=>{if(d!==void 0)return d===null?null:ft(d,void 0,t)};return k({type:"datetime",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function lf(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"TIMESTAMP",t):typeof d=="string"?d:ee(d,"TIMESTAMP",t):r?ee(new Date,"TIMESTAMP",t):null,l=d=>{if(d!==void 0)return d===null?null:ft(d,void 0,t)};return k({type:"timestamp",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function df(i={}){let{timezone:t="UTC",autoUpdate:e=false,autoCreate:r=false,prepare:o,serialize:n,...s}=i,a=d=>d?e?ee(new Date,"TIME_ONLY",t):typeof d=="string"?d:ee(d,"TIME_ONLY",t):r?ee(new Date,"TIME_ONLY",t):null,l=d=>{if(d!==void 0)return d===null?null:ft(d,void 0,t)};return k({type:"time",...s,autoUpdate:e,prepare:d=>{let m=a(d);return o?o(m):m},serialize:d=>{let m=l(d);return n?n(m):m}})}function mf(i={}){return k({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function Lt(i){try{return U.getMetadata(Jt,i.prototype)||[]}catch{return []}}function cl(i,t,e){return (r,o)=>{let n=()=>Oe(i().table),s=()=>{let d=r.constructor.table,m=t||n();return H(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=U.getMetadata(ae,r)||[];l.push(a),U.defineMetadata(ae,l,r);}}function pl(i,t){return (e,r)=>{let o=()=>Oe(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(ae,e)||[];s.push(n),U.defineMetadata(ae,s,e);}}function fl(i,t){return (e,r)=>{let o=()=>Oe(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(ae,e)||[];s.push(n),U.defineMetadata(ae,s,e);}}function yl(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,u=()=>Oe(m),c=()=>Oe(i().table),p=()=>H(S(d),s?String(s):u()),y={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):u,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:m,throughModel:d,leftForeignKey:s?String(s):u,rightForeignKey:a?String(a):c,wasModelProvided:l}},h=U.getMetadata(ae,o)||[];h.push(y),U.defineMetadata(ae,h,o);}}function hl(i){return U.getMetadata(ae,i.prototype)||[]}function Ut(i){return (U.getMetadata(ae,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 Wt(l,n,a);case "hasOne":return new jt(l,n,a);case "hasMany":return new Ft(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Vt(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:S(e.manyToManyOptions.throughModel),leftForeignKey:S(e.manyToManyOptions.leftForeignKey),rightForeignKey:S(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function gl(i){return U.getMetadata(Ht,i.prototype)}function bl(i){return U.getMetadata(Nl,i.prototype)||[]}function Tl(i){return U.getMetadata(wl,i.prototype)||[]}var f=class{constructor(t){this.model=t;let e=Lt(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":case "oracledb":return `"${n}".*`;case "mssql":return `[${n}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let a=this.modelColumnsMap.get(s)?.databaseName??Q(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}"."${a}"`;case "mssql":return `[${n}].[${a}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??Q(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${o}"`;case "mssql":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":case "oracledb":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":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],m=this.modelColumnsMap.get(l),u=d;m&&(r==="insert"&&m.prepare?u=await m.prepare(d):r==="update"&&(u=await m.prepare?.(d)??d)),n[a]=u;}));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;if(r==="insert"||a.autoUpdate){o.push(s);let l=a.prepare?await a.prepare(void 0):void 0;n.push(l??void 0);}}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var to=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof Ge){let m=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${m.newName}'`,bindings:[]}}let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Sl=new to;var ro=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},ql=new ro;var oo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Ml=new oo;var no=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},_l=new no;var so=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Cl=new so;var io=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Rl=new io;var ao=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Al=new ao;var lo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},xl=new lo;var C=class extends N{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 mo=class{toSql(t){let e=t,r;return e.defaultValue instanceof C?r=e.defaultValue.rawValue:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Pl=new mo;var uo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Dl=new uo;var co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("mssql",S(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} varchar(max)`,bindings:[]};if(n==="uuid")return {sql:`${o} uniqueidentifier`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigint identity(1,1)`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} int`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} float`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}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:[]}}if(n==="datetime"||n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime2${s}`,bindings:[]}}if(n==="boolean"||n==="bool")return {sql:`${o} bit`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} varbinary(max)`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} nvarchar(max)`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}return n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]}:n==="geometry"?{sql:`${o} geometry`,bindings:[]}:n==="point"?{sql:`${o} geometry`,bindings:[]}:n==="linestring"?{sql:`${o} geometry`,bindings:[]}:n==="polygon"?{sql:`${o} geometry`,bindings:[]}:n==="multipoint"?{sql:`${o} geometry`,bindings:[]}:{sql:`${o} ${n}${e.length?`(${e.length})`:""}`,bindings:[]}}},Ol=new co;var po=class{toSql(t){return {sql:"",bindings:[]}}},Il=new po;var fo=class{toSql(t){let e=t,r=new f(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("mssql",S(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("mssql",S(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 instanceof C?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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("mssql",S(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mssql",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:[]}}},$l=new fo;var yo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},vl=new yo;var ho=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},El=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},Bl=new go;var bo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},kl=new bo;var To=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ql=new To;var No=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Kl=new No;var wo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Ll=new wo;var So=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Ul=new So;var qo=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 N)&&!Array.isArray(e.value)&&(o=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Wl=new qo;var Mo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},Fl=new Mo;var _o=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},jl=new _o;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n).filter(c=>n[c]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof C?y.push(h.rawValue):(l.push(h),y.push(`@${m++}`));d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}`).join(", ");u=u.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(s,r);u=u.replace(") values",`) output ${c} values`);}return {sql:u,bindings:l}}getOutputColumns(t,e){let r=[...t],o=this.model.primaryKey;return o&&!t.includes(o)&&r.push(o),r.map(n=>`inserted.${e.formatStringColumn("mssql",n)}`).join(", ")}},Vl=new Co;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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("mssql",o),a=r.formatStringColumn("mssql",n),d=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,m=[];if(e.additionalConditions&&e.additionalConditions.length>0){let u=new b(this.model,"mssql");for(let c of e.additionalConditions){let p=u.parse([c]);if(p.sql){let y=p.sql.replace(/^where\s+/i,"");d+=` and ${y}`,m.push(...p.bindings);}}}return {sql:d,bindings:m}}},Jl=new Ro;var Ao=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Hl=new Ao;var xo=class{toSql(t){return {sql:"",bindings:[]}}},Yl=new xo;var Po=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Gl=new Po;var Do=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},zl=new Do;var Oo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Zl=new Oo;var Io=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xl=new Io;var $o=class{toSql(t){return {sql:`SELECT
|
|
136
136
|
fk.name as name,
|
|
137
137
|
c.name as column_name,
|
|
138
138
|
rt.name as referenced_table,
|
|
@@ -144,7 +144,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
144
144
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
145
145
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
146
146
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
147
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
147
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},ed=new $o;var vo=class{toSql(t){return {sql:`SELECT
|
|
148
148
|
i.name as index_name,
|
|
149
149
|
c.name as column_name,
|
|
150
150
|
i.is_unique as is_unique
|
|
@@ -153,7 +153,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
153
153
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
154
154
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
155
155
|
AND i.is_primary_key = 0
|
|
156
|
-
AND i.type > 0`,bindings:[]}}},
|
|
156
|
+
AND i.type > 0`,bindings:[]}}},td=new vo;var Eo=class{toSql(t){return {sql:`SELECT
|
|
157
157
|
tc.CONSTRAINT_NAME as name,
|
|
158
158
|
kcu.COLUMN_NAME as column_name
|
|
159
159
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -161,7 +161,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
161
161
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
162
162
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
163
163
|
AND tc.TABLE_NAME = '${t.table}'
|
|
164
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
164
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},rd=new Eo;var Bo=class{toSql(t){return {sql:`SELECT
|
|
165
165
|
c.COLUMN_NAME as column_name,
|
|
166
166
|
c.DATA_TYPE as data_type,
|
|
167
167
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -171,7 +171,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},td=new vo;var Eo=class{toSql(t){re
|
|
|
171
171
|
c.NUMERIC_SCALE as numeric_scale
|
|
172
172
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
173
173
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
174
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},rd=new Eo;var Qo=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 f(this.model).formatStringColumn("mssql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"mssql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"mssql").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 f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},od=new Qo;var se=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let o=Number(r);return isNaN(o)?r:o}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let o=this.segments[r],n=r===this.segments.length-1,s=typeof o=="number";n&&t?e.push(s?`->>${o}`:`->>'${o}'`):e.push(s?`->${o}`:`->'${o}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toOracle(){return this.toStandardJsonPath()}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();case "oracledb":return this.toOracle();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},nd=new ko;var Bo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},sd=new Bo;var Ko=class{toSql(t){let e=t,r=new b(this.model,"mssql"),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}}},id=new Ko;var Lo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);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,u=e.values[d];return u instanceof _?(n++,`${r.formatStringColumn("mssql",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("mssql",l)} = @${m}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},ad=new Lo;var Uo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.value,o=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let m=`@${o} AND @${o+1}`,u=`${a} between ${m}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let l=r.map((m,u)=>`@${o+u}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${n} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${n} ${e.operator} @${o}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,o=t.isRawValue===true;return r&&o}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mssql",t):t}},ld=new Uo;var Fo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},dd=new Fo;var Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":o=`${s} = @${r}`,n=[JSON.stringify(e.value)];break;case "contains":case "not contains":o=`CHARINDEX(@${r}, ${s}) > 0`,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}}},md=new Wo;var jo=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 b(this.model,"mssql"),{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 b(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ud=new jo;var Vo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},cd=new Vo;var Jo=class{toSql(t){let e=t,r=new b(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:[]}}},pd=new Jo;var Ho=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},fd=new Ho;var Yo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},yd=new Yo;var zo=class{toSql(t){let e=t,r=new b(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:[]}}},hd=new zo;var Go=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(c.file==="add_column")s.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let h=s[s.length-1]??"",S=/^\s*add\s+column\b/i.test(h),M=/^\s*add\s+constraint\b/i.test(p);if(S&&!M){let $=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${h} ${$}`;}else {let $=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push($);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,s.push(p);a.push(...y);}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}}},gd=new Go;var Zo=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},bd=new Zo;var Xo=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Td=new Xo;var en=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Nd=new en;var tn=class{toSql(t){return {sql:"",bindings:[]}}},Sd=new tn;var rn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},qd=new rn;var on=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},wd=new on;var nn=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Md=new nn;var sn=class{toSql(t){let e=t,r;return e.defaultValue instanceof _?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},_d=new sn;var an=class{toSql(t){return {sql:"",bindings:[]}}},Cd=new an;var ln=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("mysql",q(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:[]}}else {if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Rd=new ln;var dn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Ad=new dn;var mn=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(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",q(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 instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(d=>r.formatStringColumn("mysql",q(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",q(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:[]}}},xd=new mn;var un=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let S=`${y} ${h}`.trim();S=S.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(S),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Pd=new un;var cn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Dd=new cn;var pn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Id=new pn;var fn=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},$d=new fn;var yn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Od=new yn;var hn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vd=new hn;var gn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(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 b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Ed=new gn;var bn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Qd=new bn;var Tn=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},kd=new Tn;var Nn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Bd=new Nn;var Sn=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:[]}}},Kd=new Sn;var qn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(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(u=>r.formatStringColumn("mysql",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof _?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ld=new qn;var wn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},Ud=new wn;var Mn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fd=new Mn;var mf={for_update:"for update",for_share:"lock in share mode"},_n=class{toSql(t){let e=t,r=mf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Wd=new _n;var Cn=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},jd=new Cn;var Rn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},Vd=new Rn;var An=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Jd=new An;var xn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Hd=new xn;var Pn=class{toSql(t){return {sql:`SELECT
|
|
174
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},od=new Bo;var ko=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 f(this.model).formatStringColumn("mssql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"mssql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"mssql").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 f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},nd=new ko;var se=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let o=Number(r);return isNaN(o)?r:o}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let o=this.segments[r],n=r===this.segments.length-1,s=typeof o=="number";n&&t?e.push(s?`->>${o}`:`->>'${o}'`):e.push(s?`->${o}`:`->'${o}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toOracle(){return this.toStandardJsonPath()}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();case "oracledb":return this.toOracle();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var Qo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},sd=new Qo;var Ko=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},id=new Ko;var Lo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),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}}},ad=new Lo;var Uo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);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,u=e.values[d];return u instanceof C?(n++,`${r.formatStringColumn("mssql",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("mssql",l)} = @${m}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},ld=new Uo;var Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.value,o=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let m=`@${o} AND @${o+1}`,u=`${a} between ${m}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let l=r.map((m,u)=>`@${o+u}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${n} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${n} ${e.operator} @${o}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,o=t.isRawValue===true;return r&&o}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mssql",t):t}},dd=new Wo;var Fo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},md=new Fo;var jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":o=`${s} = @${r}`,n=[JSON.stringify(e.value)];break;case "contains":case "not contains":o=`CHARINDEX(@${r}, ${s}) > 0`,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}}},ud=new jo;var Vo=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 b(this.model,"mssql"),{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 b(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},cd=new Vo;var Jo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},pd=new Jo;var Ho=class{toSql(t){let e=t,r=new b(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:[]}}},fd=new Ho;var Yo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},yd=new Yo;var Go=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},hd=new Go;var zo=class{toSql(t){let e=t,r=new b(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:[]}}},gd=new zo;var Zo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(c.file==="add_column")s.push(p);else if(c.file==="add_constraint"||c.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 $=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${h} ${$}`;}else {let $=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push($);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,s.push(p);a.push(...y);}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}}},bd=new Zo;var Xo=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Td=new Xo;var en=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Nd=new en;var tn=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},wd=new tn;var rn=class{toSql(t){return {sql:"",bindings:[]}}},Sd=new rn;var on=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},qd=new on;var nn=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Md=new nn;var sn=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},_d=new sn;var an=class{toSql(t){let e=t,r;return e.defaultValue instanceof C?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Cd=new an;var ln=class{toSql(t){return {sql:"",bindings:[]}}},Rd=new ln;var dn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(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:[]}}else {if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Ad=new dn;var mn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},xd=new mn;var un=class{toSql(t){let e=t,r=new f(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 instanceof C?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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:[]}}},Pd=new un;var cn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${y} ${h}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},Dd=new cn;var pn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Od=new pn;var fn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Id=new fn;var yn=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},$d=new yn;var hn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},vd=new hn;var gn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Ed=new gn;var bn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(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 b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Bd=new bn;var Tn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},kd=new Tn;var Nn=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Qd=new Nn;var wn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Kd=new wn;var Sn=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:[]}}},Ld=new Sn;var qn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(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(u=>r.formatStringColumn("mysql",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof C?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ud=new qn;var Mn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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),d=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,m=[];if(e.additionalConditions&&e.additionalConditions.length>0){let u=new b(this.model,"mysql");for(let c of e.additionalConditions){let p=u.parse([c]);if(p.sql){let y=p.sql.replace(/^where\s+/i,"");d+=` and ${y}`,m.push(...p.bindings);}}}return {sql:d,bindings:m}}},Wd=new Mn;var _n=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fd=new _n;var uf={for_update:"for update",for_share:"lock in share mode"},Cn=class{toSql(t){let e=t,r=uf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},jd=new Cn;var Rn=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Vd=new Rn;var An=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},Jd=new An;var xn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Hd=new xn;var Pn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Yd=new Pn;var Dn=class{toSql(t){return {sql:`SELECT
|
|
175
175
|
k.CONSTRAINT_NAME AS name,
|
|
176
176
|
k.COLUMN_NAME AS column_name,
|
|
177
177
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -182,12 +182,12 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},rd=new Eo;var Qo=class{toSql(t){let
|
|
|
182
182
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
183
183
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
184
184
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
185
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
185
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Gd=new Dn;var On=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},zd=new On;var In=class{toSql(t){return {sql:`SELECT
|
|
186
186
|
CONSTRAINT_NAME AS name,
|
|
187
187
|
COLUMN_NAME AS column_name
|
|
188
188
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
189
189
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
190
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Gd=new In;var $n=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:[]}}},Zd=new $n;var On=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 f(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 b(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 b(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 f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Xd=new On;var vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},em=new vn;var En=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},tm=new En;var Qn=class{toSql(t){let e=t,r=new b(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}}},rm=new Qn;var kn=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);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 _?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},om=new kn;var Bn=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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("mysql",t):t}},nm=new Bn;var Kn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},sm=new Kn;var Ln=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(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}}},im=new Ln;var Un=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 b(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 b(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},am=new Un;var Fn=class{toSql(t){let e=t,r=new b(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}}},lm=new Fn;var Wn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{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 ${o}`,bindings:[]}}},dm=new Wn;var jn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},mm=new jn;var Vn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},um=new Vn;var Jn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify "${e.column}" ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`modify "${e.column}" null`:`modify "${e.column}" not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, modify "${e.column}" default null`;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="1":l==="FALSE"?l="0":l=`'${l}'`),a+=`, modify "${e.column}" 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:[]}}},cm=new Jn;var Hn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},pm=new Hn;var Yn=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fm=new Yn;var zn=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ym=new zn;var Gn=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},hm=new Gn;var Zn=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},gm=new Zn;var Xn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},bm=new Xn;var es=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tm=new es;var ts=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},Nm=new ts;var rs=class{toSql(t){let e=t,r;return e.defaultValue instanceof _?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`modify "${e.column}" default ${r}`,bindings:[]}}},Sm=new rs;var os=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},qm=new os;var ns=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("oracledb",q(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} varchar2(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} clob`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar2(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar2(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} number(19) generated by default as identity`,bindings:[]}:{sql:`${o} number(19)`,bindings:[]};if(n==="tinyint")return {sql:`${o} number(3)`,bindings:[]};if(n==="smallint")return {sql:`${o} number(5)`,bindings:[]};if(n==="mediumint")return {sql:`${o} number(7)`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} binary_float`,bindings:[]};if(n==="double")return {sql:`${o} binary_double`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} number(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} number(4)`,bindings:[]};if(n==="time")return {sql:`${o} varchar2(8)`,bindings:[]};if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with 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} number(1)`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} clob`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar2(255)`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} number(10) generated by default as identity`,bindings:[]}:{sql:`${o} number(10)`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} sdo_geometry`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},wm=new ns;var ss=class{toSql(t){return {sql:"",bindings:[]}}},Mm=new ss;var is=class{toSql(t){let e=t,r=new f(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("oracledb",q(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("oracledb",q(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 instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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("oracledb",q(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("oracledb",q(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},_m=new is;var as=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),h=h.replace(/(check\s*\([^)]+\))\s+(default\s+(?:'[^']*'|\S+))/i,"$2 $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},Cm=new as;var ls=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Rm=new ls;var ds=class{toSql(t){return {sql:"",bindings:[]}}},Am=new ds;var ms=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},xm=new ms;var us=class{toSql(t){let e=t;return {sql:`${new f(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Pm=new us;var cs=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Dm=new cs;var ps=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("oracledb",e.table)} "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("oracledb",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Im=new ps;var fs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},$m=new fs;var ys=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 N)&&!Array.isArray(e.value)&&(o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Om=new ys;var hs=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},vm=new hs;var gs=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Em=new gs;var bs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",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("oracledb",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof _?y.push(h.rawValue):(l.push(h),y.push(`:${m++}`));d.push(`(${y.join(", ")})`);}let u;if(e.records.length===1)u=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",m=e.currParamIndex;let c=[];for(let p of e.records){let y=s.map(S=>p[S]),h=[];for(let S of y)S instanceof _?h.push(S.rawValue):h.push(`:${m++}`);c.push(`into ${o} (${a}) values (${h.join(", ")})`);}u=`all ${c.join(" ")} select * from dual`;}return {sql:u,bindings:l}}},Qm=new bs;var Ts=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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("oracledb",o),a=r.formatStringColumn("oracledb",n);return {sql:`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},km=new Ts;var Ns=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Bm=new Ns;var uf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Ss=class{toSql(t){let e=t,r=uf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Km=new Ss;var qs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Lm=new qs;var ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("oracledb",a)).join(" AND ");if(e.mode==="ignore")return {sql:`on (${o})`,bindings:[]};let n=e.columnsToUpdate.map(a=>`target.${r.formatStringColumn("oracledb",a)} = source.${r.formatStringColumn("oracledb",a)}`).join(", ");return {sql:`on (${o}) when matched then update set ${n}`,bindings:[]}}},Um=new ws;var Ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Fm=new Ms;var _s=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Wm=new _s;var Cs=class{toSql(t){return {sql:`SELECT
|
|
190
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Zd=new In;var $n=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:[]}}},Xd=new $n;var vn=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 f(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 b(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 b(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 f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},em=new vn;var En=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},tm=new En;var Bn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},rm=new Bn;var kn=class{toSql(t){let e=t,r=new b(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}}},om=new kn;var Qn=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);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 C?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},nm=new Qn;var Kn=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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("mysql",t):t}},sm=new Kn;var Ln=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},im=new Ln;var Un=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(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}}},am=new Un;var Wn=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 b(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 b(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},lm=new Wn;var Fn=class{toSql(t){let e=t,r=new b(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}}},dm=new Fn;var jn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{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 ${o}`,bindings:[]}}},mm=new jn;var Vn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},um=new Vn;var Jn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},cm=new Jn;var Hn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify "${e.column}" ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`modify "${e.column}" null`:`modify "${e.column}" not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, modify "${e.column}" default null`;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="1":l==="FALSE"?l="0":l=`'${l}'`),a+=`, modify "${e.column}" 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:[]}}},pm=new Hn;var Yn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},fm=new Yn;var Gn=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},ym=new Gn;var zn=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},hm=new zn;var Zn=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},gm=new Zn;var Xn=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},bm=new Xn;var es=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Tm=new es;var ts=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Nm=new ts;var rs=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},wm=new rs;var os=class{toSql(t){let e=t,r;return e.defaultValue instanceof C?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`modify "${e.column}" default ${r}`,bindings:[]}}},Sm=new os;var ns=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},qm=new ns;var ss=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("oracledb",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} varchar2(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} clob`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar2(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar2(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} number(19) generated by default as identity`,bindings:[]}:{sql:`${o} number(19)`,bindings:[]};if(n==="tinyint")return {sql:`${o} number(3)`,bindings:[]};if(n==="smallint")return {sql:`${o} number(5)`,bindings:[]};if(n==="mediumint")return {sql:`${o} number(7)`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} binary_float`,bindings:[]};if(n==="double")return {sql:`${o} binary_double`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} number(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} number(4)`,bindings:[]};if(n==="time")return {sql:`${o} varchar2(8)`,bindings:[]};if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with 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} number(1)`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} clob`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar2(255)`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} number(10) generated by default as identity`,bindings:[]}:{sql:`${o} number(10)`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} sdo_geometry`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Mm=new ss;var is=class{toSql(t){return {sql:"",bindings:[]}}},_m=new is;var as=class{toSql(t){let e=t,r=new f(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("oracledb",S(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("oracledb",S(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 instanceof C?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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("oracledb",S(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("oracledb",S(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Cm=new as;var ls=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),h=h.replace(/(check\s*\([^)]+\))\s+(default\s+(?:'[^']*'|\S+))/i,"$2 $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},Rm=new ls;var ds=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Am=new ds;var ms=class{toSql(t){return {sql:"",bindings:[]}}},xm=new ms;var us=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Pm=new us;var cs=class{toSql(t){let e=t;return {sql:`${new f(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Dm=new cs;var ps=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Om=new ps;var fs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("oracledb",e.table)} "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("oracledb",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Im=new fs;var ys=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},$m=new ys;var hs=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 N)&&!Array.isArray(e.value)&&(o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},vm=new hs;var gs=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Em=new gs;var bs=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Bm=new bs;var Ts=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",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("oracledb",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof C?y.push(h.rawValue):(l.push(h),y.push(`:${m++}`));d.push(`(${y.join(", ")})`);}let u;if(e.records.length===1)u=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",m=e.currParamIndex;let c=[];for(let p of e.records){let y=s.map(w=>p[w]),h=[];for(let w of y)w instanceof C?h.push(w.rawValue):h.push(`:${m++}`);c.push(`into ${o} (${a}) values (${h.join(", ")})`);}u=`all ${c.join(" ")} select * from dual`;}return {sql:u,bindings:l}}},km=new Ts;var Ns=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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("oracledb",o),a=r.formatStringColumn("oracledb",n),d=`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,m=[];if(e.additionalConditions&&e.additionalConditions.length>0){let u=new b(this.model,"oracledb");for(let c of e.additionalConditions){let p=u.parse([c]);if(p.sql){let y=p.sql.replace(/^where\s+/i,"");d+=` and ${y}`,m.push(...p.bindings);}}}return {sql:d,bindings:m}}},Qm=new Ns;var ws=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Km=new ws;var cf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Ss=class{toSql(t){let e=t,r=cf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Lm=new Ss;var qs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Um=new qs;var Ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("oracledb",a)).join(" AND ");if(e.mode==="ignore")return {sql:`on (${o})`,bindings:[]};let n=e.columnsToUpdate.map(a=>`target.${r.formatStringColumn("oracledb",a)} = source.${r.formatStringColumn("oracledb",a)}`).join(", ");return {sql:`on (${o}) when matched then update set ${n}`,bindings:[]}}},Wm=new Ms;var _s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Fm=new _s;var Cs=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},jm=new Cs;var Rs=class{toSql(t){return {sql:`SELECT
|
|
191
191
|
c.constraint_name as name,
|
|
192
192
|
cc.column_name as column_name,
|
|
193
193
|
rc.table_name as referenced_table,
|
|
@@ -199,7 +199,7 @@ JOIN user_constraints rc ON c.r_constraint_name = rc.constraint_name
|
|
|
199
199
|
JOIN user_cons_columns rcc ON rc.constraint_name = rcc.constraint_name AND cc.position = rcc.position
|
|
200
200
|
WHERE c.constraint_type = 'R'
|
|
201
201
|
AND c.table_name = '${t.table.toUpperCase()}'
|
|
202
|
-
ORDER BY cc.position`,bindings:[]}}},
|
|
202
|
+
ORDER BY cc.position`,bindings:[]}}},Vm=new Rs;var As=class{toSql(t){return {sql:`SELECT
|
|
203
203
|
i.index_name as index_name,
|
|
204
204
|
ic.column_name as column_name,
|
|
205
205
|
CASE WHEN i.uniqueness = 'UNIQUE' THEN 1 ELSE 0 END as is_unique
|
|
@@ -212,14 +212,14 @@ WHERE i.table_name = '${t.table.toUpperCase()}'
|
|
|
212
212
|
WHERE c.constraint_type = 'P'
|
|
213
213
|
AND c.index_name = i.index_name
|
|
214
214
|
)
|
|
215
|
-
ORDER BY i.index_name, ic.column_position`,bindings:[]}}},
|
|
215
|
+
ORDER BY i.index_name, ic.column_position`,bindings:[]}}},Jm=new As;var xs=class{toSql(t){return {sql:`SELECT
|
|
216
216
|
c.constraint_name as name,
|
|
217
217
|
cc.column_name as column_name
|
|
218
218
|
FROM user_constraints c
|
|
219
219
|
JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
|
|
220
220
|
WHERE c.constraint_type = 'P'
|
|
221
221
|
AND c.table_name = '${t.table.toUpperCase()}'
|
|
222
|
-
ORDER BY cc.position`,bindings:[]}}},
|
|
222
|
+
ORDER BY cc.position`,bindings:[]}}},Hm=new xs;var Ps=class{toSql(t){return {sql:`SELECT
|
|
223
223
|
column_name,
|
|
224
224
|
data_type,
|
|
225
225
|
CASE WHEN nullable = 'Y' THEN 'YES' ELSE 'NO' END as is_nullable,
|
|
@@ -229,7 +229,7 @@ ORDER BY cc.position`,bindings:[]}}},Jm=new As;var xs=class{toSql(t){return {sql
|
|
|
229
229
|
data_scale as numeric_scale
|
|
230
230
|
FROM user_tab_columns
|
|
231
231
|
WHERE table_name = '${t.table.toUpperCase()}'
|
|
232
|
-
ORDER BY column_id`,bindings:[]}}},Hm=new xs;var Ps=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 f(this.model).formatStringColumn("oracledb",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"oracledb").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"oracledb").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 f(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Ym=new Ps;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("oracledb",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toOracle();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.size()')`:`JSON_QUERY(${t}, '${r}.size()')`}buildObjectKeysSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.keyNames()')`:`JSON_QUERY(${t}, '${r}.keyNames()')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},zm=new Ds;var Is=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Gm=new Is;var $s=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),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}}},Zm=new $s;var Os=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=e.currParamIndex,s=[],a=e.columns.map((l,d)=>{let m=e.values[d];return m instanceof _?`${r.formatStringColumn("oracledb",l)} = ${m.rawValue}`:(s.push(m),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},Xm=new Os;var vs=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 f(this.model).formatStringColumn("oracledb",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 f(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(this.model).formatStringColumn("oracledb",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 f(this.model).formatStringColumn("oracledb",t):t}},eu=new vs;var Es=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},tu=new Es;var Qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(this.model).formatStringColumn("oracledb",e.column);switch(e.jsonOperator){case "=":r=`JSON_EQUAL(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "not contains":r=`NOT JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,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}}},ru=new Qs;var ks=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 b(this.model,"oracledb"),{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 b(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ou=new ks;var Bs=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" /*+ MATERIALIZE */":"";return {sql:`${e.alias} as (${s}${n.sql})`,bindings:n.bindings}}},nu=new Bs;var Ks=class{toSql(t){let e=t,r=new b(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:[]}}},su=new Ks;var Ls=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},iu=new Ls;var Us=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},au=new Us;var Fs=class{toSql(t){let e=t,r=new b(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:[]}}},lu=new Fs;var Ws=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);s.push(c.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},du=new Ws;var js=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},mu=new js;var Vs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},uu=new Vs;var Js=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},cu=new Js;var Hs=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},pu=new Hs;var Ys=class{toSql(t){return {sql:"",bindings:[]}}},fu=new Ys;var zs=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},yu=new zs;var Gs=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},hu=new Gs;var Zs=class{toSql(t){let e=t,r;return e.defaultValue instanceof _?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},gu=new Zs;var Xs=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},bu=new Xs;var ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("postgres",q(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:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Tu=new ei;var ti=class{toSql(t){return {sql:"",bindings:[]}}},Nu=new ti;var ri=class{toSql(t){let e=t,r=new f(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",q(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",q(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 instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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",q(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",q(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:[]}}},Su=new ri;var oi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let S=`${y} ${h}`.trim();S=S.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(S),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},qu=new oi;var ni=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},wu=new ni;var si=class{toSql(t){return {sql:"",bindings:[]}}},Mu=new si;var ii=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},_u=new ii;var ai=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Cu=new ai;var li=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Ru=new li;var di=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Au=new di;var mi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},xu=new mi;var ui=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Pu=new ui;var ci=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Du=new ci;var pi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Iu=new pi;var fi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",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("postgres",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h=0;h<s.length;h++){let S=p[h];S instanceof _?y.push(S.rawValue):(l.push(S),y.push(`$${m++}${this.formatTypeCast(S)}`));}d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");u+=` returning ${c}`;}else u+=" returning *";return {sql:u,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}},$u=new fi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},Ou=new yi;var hi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},vu=new hi;var cf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},gi=class{toSql(t){let e=t,r=cf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Eu=new gi;var bi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Qu=new bi;var Ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},ku=new Ti;var Ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Bu=new Ni;var Si=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ku=new Si;var qi=class{toSql(t){return {sql:`SELECT
|
|
232
|
+
ORDER BY column_id`,bindings:[]}}},Ym=new Ps;var Ds=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 f(this.model).formatStringColumn("oracledb",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"oracledb").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"oracledb").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 f(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Gm=new Ds;var Os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("oracledb",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toOracle();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.size()')`:`JSON_QUERY(${t}, '${r}.size()')`}buildObjectKeysSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.keyNames()')`:`JSON_QUERY(${t}, '${r}.keyNames()')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},zm=new Os;var Is=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Zm=new Is;var $s=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),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}}},Xm=new $s;var vs=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=e.currParamIndex,s=[],a=e.columns.map((l,d)=>{let m=e.values[d];return m instanceof C?`${r.formatStringColumn("oracledb",l)} = ${m.rawValue}`:(s.push(m),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},eu=new vs;var Es=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 f(this.model).formatStringColumn("oracledb",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 f(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(this.model).formatStringColumn("oracledb",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 f(this.model).formatStringColumn("oracledb",t):t}},tu=new Es;var Bs=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ru=new Bs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(this.model).formatStringColumn("oracledb",e.column);switch(e.jsonOperator){case "=":r=`JSON_EQUAL(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "not contains":r=`NOT JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,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}}},ou=new ks;var Qs=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 b(this.model,"oracledb"),{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 b(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},nu=new Qs;var Ks=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" /*+ MATERIALIZE */":"";return {sql:`${e.alias} as (${s}${n.sql})`,bindings:n.bindings}}},su=new Ks;var Ls=class{toSql(t){let e=t,r=new b(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:[]}}},iu=new Ls;var Us=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},au=new Us;var Ws=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},lu=new Ws;var Fs=class{toSql(t){let e=t,r=new b(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:[]}}},du=new Fs;var js=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);s.push(c.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},mu=new js;var Vs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},uu=new Vs;var Js=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},cu=new Js;var Hs=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},pu=new Hs;var Ys=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},fu=new Ys;var Gs=class{toSql(t){return {sql:"",bindings:[]}}},yu=new Gs;var zs=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},hu=new zs;var Zs=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},gu=new Zs;var Xs=class{toSql(t){let e=t,r;return e.defaultValue instanceof C?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},bu=new Xs;var ei=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Tu=new ei;var ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("postgres",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==="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:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},Nu=new ti;var ri=class{toSql(t){return {sql:"",bindings:[]}}},wu=new ri;var oi=class{toSql(t){let e=t,r=new f(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",S(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",S(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 instanceof C?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{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",S(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",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:[]}}},Su=new oi;var ni=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let w=`${y} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},qu=new ni;var si=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Mu=new si;var ii=class{toSql(t){return {sql:"",bindings:[]}}},_u=new ii;var ai=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Cu=new ai;var li=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ru=new li;var di=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Au=new di;var mi=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},xu=new mi;var ui=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Pu=new ui;var ci=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Du=new ci;var pi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Ou=new pi;var fi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Iu=new fi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",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("postgres",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h=0;h<s.length;h++){let w=p[h];w instanceof C?y.push(w.rawValue):(l.push(w),y.push(`$${m++}${this.formatTypeCast(w)}`));}d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");u+=` returning ${c}`;}else u+=" returning *";return {sql:u,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}},$u=new yi;var hi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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),d=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,m=[];if(e.additionalConditions&&e.additionalConditions.length>0){let u=new b(this.model,"postgres");for(let c of e.additionalConditions){let p=u.parse([c]);if(p.sql){let y=p.sql.replace(/^where\s+/i,"");d+=` and ${y}`,m.push(...p.bindings);}}}return {sql:d,bindings:m}}},vu=new hi;var gi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Eu=new gi;var pf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},bi=class{toSql(t){let e=t,r=pf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Bu=new bi;var Ti=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},ku=new Ti;var Ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},Qu=new Ni;var wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Ku=new wi;var Si=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Lu=new Si;var qi=class{toSql(t){return {sql:`SELECT
|
|
233
233
|
tc.constraint_name as name,
|
|
234
234
|
kcu.column_name as column_name,
|
|
235
235
|
ccu.table_name as referenced_table,
|
|
@@ -244,7 +244,7 @@ ORDER BY column_id`,bindings:[]}}},Hm=new xs;var Ps=class{toSql(t){let e=t;if(e.
|
|
|
244
244
|
JOIN information_schema.referential_constraints rc
|
|
245
245
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
246
246
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
247
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
247
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Uu=new qi;var Mi=class{toSql(t){return {sql:`SELECT
|
|
248
248
|
i.relname as index_name,
|
|
249
249
|
a.attname as column_name,
|
|
250
250
|
ix.indisunique as is_unique
|
|
@@ -263,14 +263,14 @@ ORDER BY column_id`,bindings:[]}}},Hm=new xs;var Ps=class{toSql(t){let e=t;if(e.
|
|
|
263
263
|
AND t.relname = '${t.table}'
|
|
264
264
|
AND t.relnamespace = n.oid
|
|
265
265
|
AND n.nspname = current_schema()
|
|
266
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
266
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},Wu=new Mi;var _i=class{toSql(t){return {sql:`SELECT
|
|
267
267
|
tc.constraint_name as name,
|
|
268
268
|
kcu.column_name as column_name
|
|
269
269
|
FROM information_schema.table_constraints tc
|
|
270
270
|
JOIN information_schema.key_column_usage kcu
|
|
271
271
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
272
272
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
273
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},Fu=new
|
|
273
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Fu=new _i;var Ci=class{toSql(t){return {sql:`SELECT column_name,
|
|
274
274
|
data_type,
|
|
275
275
|
is_nullable,
|
|
276
276
|
column_default,
|
|
@@ -280,12 +280,12 @@ ORDER BY column_id`,bindings:[]}}},Hm=new xs;var Ps=class{toSql(t){let e=t;if(e.
|
|
|
280
280
|
FROM information_schema.columns
|
|
281
281
|
WHERE table_schema = current_schema()
|
|
282
282
|
AND table_name = '${t.table}'
|
|
283
|
-
ORDER BY ordinal_position`,bindings:[]}}},Wu=new _i;var Ci=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 f(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 b(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 b(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 f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},ju=new Ci;var Ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Vu=new Ri;var Ai=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Ju=new Ai;var xi=class{toSql(t){let e=t,r=new b(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}}},Hu=new xi;var Pi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);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,u=e.values[d];return u instanceof _?(n++,`${r.formatStringColumn("postgres",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("postgres",l)} = $${m}${this.formatTypeCast(u)}`)}).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}},Yu=new Pi;var Di=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 f(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 f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(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 f(this.model).formatStringColumn("postgres",t):t}},zu=new Di;var Ii=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Gu=new Ii;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(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}}},Zu=new $i;var Oi=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 b(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 b(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Xu=new Oi;var vi=class{toSql(t){let e=t,r=new b(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}}},ec=new vi;var Ei=class{toSql(t){let e=t,r=new b(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:[]}}},tc=new Ei;var Qi=class{toSql(t){return {sql:"",bindings:[]}}},rc=new Qi;var ki=class{toSql(t){return {sql:"",bindings:[]}}},oc=new ki;var Bi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")s.push(p),l=true;else if(c.file==="add_constraint"&&l){let h=s.pop()??"",S=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${h} ${S}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;s.push(p),l=false;}a.push(...y);}}let d=s.join(", "),m=e.ifExists?"if exists ":"";return d.trim()?{sql:`${m}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},nc=new Bi;var Ki=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},sc=new Ki;var Li=class{toSql(t){return {sql:"",bindings:[]}}},ic=new Li;var Ui=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},ac=new Ui;var Fi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},lc=new Fi;var Wi=class{toSql(t){return {sql:"",bindings:[]}}},dc=new Wi;var ji=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},mc=new ji;var Vi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},uc=new Vi;var Ji=class{toSql(t){let e=t,r;return e.defaultValue instanceof _?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},cc=new Ji;var Hi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},pc=new Hi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("sqlite",q(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:[]}:n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint"?{sql:`${o} ${n}`,bindings:[]}:{sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},fc=new Yi;var zi=class{toSql(t){return {sql:"",bindings:[]}}},yc=new zi;var Gi=class{toSql(t){let e=t,r=new f(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",q(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 instanceof _?{sql:`default ${n.rawValue}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",q(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",q(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:[]}}},hc=new Gi;var Zi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)||/primary key/i.test(h)){let S=`${y} ${h}`.trim();S=S.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(S),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},gc=new Zi;var Xi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},bc=new Xi;var ea=class{toSql(t){return {sql:"distinct",bindings:[]}}},Tc=new ea;var ta=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Nc=new ta;var ra=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Sc=new ra;var oa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},qc=new oa;var na=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},wc=new na;var sa=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Mc=new sa;var ia=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},_c=new ia;var aa=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Cc=new aa;var la=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Rc=new la;var da=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",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(u=>r.formatStringColumn("sqlite",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof _?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ac=new da;var ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},xc=new ma;var ua=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Pc=new ua;var ca=class{toSql(t){return {sql:"",bindings:[]}}},Dc=new ca;var pa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Ic=new pa;var fa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},$c=new fa;var ya=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Oc=new ya;var ha=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},vc=new ha;var ga=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Ec=new ga;var ba=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Qc=new ba;var Ta=class{toSql(t){return {sql:`SELECT
|
|
283
|
+
ORDER BY ordinal_position`,bindings:[]}}},ju=new Ci;var Ri=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 f(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 b(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 b(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 f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Vu=new Ri;var Ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Ju=new Ai;var xi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Hu=new xi;var Pi=class{toSql(t){let e=t,r=new b(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}}},Yu=new Pi;var Di=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);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,u=e.values[d];return u instanceof C?(n++,`${r.formatStringColumn("postgres",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("postgres",l)} = $${m}${this.formatTypeCast(u)}`)}).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}},Gu=new Di;var Oi=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 f(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 f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(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 f(this.model).formatStringColumn("postgres",t):t}},zu=new Oi;var Ii=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Zu=new Ii;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(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}}},Xu=new $i;var vi=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 b(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 b(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ec=new vi;var Ei=class{toSql(t){let e=t,r=new b(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}}},tc=new Ei;var Bi=class{toSql(t){let e=t,r=new b(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:[]}}},rc=new Bi;var ki=class{toSql(t){return {sql:"",bindings:[]}}},oc=new ki;var Qi=class{toSql(t){return {sql:"",bindings:[]}}},nc=new Qi;var Ki=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")s.push(p),l=true;else if(c.file==="add_constraint"&&l){let h=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${h} ${w}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;s.push(p),l=false;}a.push(...y);}}let d=s.join(", "),m=e.ifExists?"if exists ":"";return d.trim()?{sql:`${m}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},sc=new Ki;var Li=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},ic=new Li;var Ui=class{toSql(t){return {sql:"",bindings:[]}}},ac=new Ui;var Wi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},lc=new Wi;var Fi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},dc=new Fi;var ji=class{toSql(t){return {sql:"",bindings:[]}}},mc=new ji;var Vi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},uc=new Vi;var Ji=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},cc=new Ji;var Hi=class{toSql(t){let e=t,r;return e.defaultValue instanceof C?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},pc=new Hi;var Yi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},fc=new Yi;var Gi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("sqlite",S(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:[]}:n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint"?{sql:`${o} ${n}`,bindings:[]}:{sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},yc=new Gi;var zi=class{toSql(t){return {sql:"",bindings:[]}}},hc=new zi;var Zi=class{toSql(t){let e=t,r=new f(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",S(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 instanceof C?{sql:`default ${n.rawValue}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",S(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",S(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:[]}}},gc=new Zi;var Xi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)||/primary key/i.test(h)){let w=`${y} ${h}`.trim();w=w.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},bc=new Xi;var ea=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},Tc=new ea;var ta=class{toSql(t){return {sql:"distinct",bindings:[]}}},Nc=new ta;var ra=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},wc=new ra;var oa=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Sc=new oa;var na=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},qc=new na;var sa=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Mc=new sa;var ia=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},_c=new ia;var aa=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 N)&&!Array.isArray(e.value)&&(o=`${new f(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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Cc=new aa;var la=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Rc=new la;var da=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Ac=new da;var ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",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(u=>r.formatStringColumn("sqlite",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof C?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},xc=new ma;var ua=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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),d=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,m=[];if(e.additionalConditions&&e.additionalConditions.length>0){let u=new b(this.model,"sqlite");for(let c of e.additionalConditions){let p=u.parse([c]);if(p.sql){let y=p.sql.replace(/^where\s+/i,"");d+=` and ${y}`,m.push(...p.bindings);}}}return {sql:d,bindings:m}}},Pc=new ua;var ca=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Dc=new ca;var pa=class{toSql(t){return {sql:"",bindings:[]}}},Oc=new pa;var fa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Ic=new fa;var ya=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},$c=new ya;var ha=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},vc=new ha;var ga=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ec=new ga;var ba=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Bc=new ba;var Ta=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},kc=new Ta;var Na=class{toSql(t){return {sql:`SELECT
|
|
284
284
|
'PRIMARY' as name,
|
|
285
285
|
name as column_name
|
|
286
286
|
FROM pragma_table_info('${t.table}')
|
|
287
287
|
WHERE pk > 0
|
|
288
|
-
ORDER BY pk`,bindings:[]}}},kc=new Ta;var Na=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Bc=new Na;var Sa=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 f(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 b(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 b(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 f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Kc=new Sa;var qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Lc=new qa;var wa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Uc=new wa;var Ma=class{toSql(t){let e=t,r=new b(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}}},Fc=new Ma;var _a=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);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 _?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Wc=new _a;var Ca=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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("sqlite",t):t}},jc=new Ca;var Ra=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Vc=new Ra;var Aa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(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}}},Jc=new Aa;var xa=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 b(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 b(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Hc=new xa;var Pa=class{toSql(t){let e=t,r=new b(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}}},Yc=new Pa;var zc={mssql:{alter_table:{add_column:Xa,add_constraint:el,add_primary_key:tl,alter_column_type:rl,alter_table:Sl,drop_column:ql,drop_constraint:wl,drop_default:Ml,drop_not_null:_l,drop_primary_key:Cl,rename_column:Rl,rename_table:Al,set_default:xl,set_not_null:Pl},column:{column_type:Dl},constraint:{after:Il,constraint:$l},create_table:{create_table:Ol},delete:{delete:vl},distinct:{distinct:El,distinct_on:Ql},drop_table:{drop_table:kl},extension:{create_extension:Bl},from:{from:Kl},group_by:{group_by:Ll},having:{having:Ul},index_op:{create_index:Fl,drop_index:Wl},insert:{insert:jl},join:{join:Vl},limit:{limit:Jl},lock:{lock:Hl},offset:{offset:Yl},on_duplicate:{on_duplicate:zl},order_by:{order_by:Gl},raw:{raw:Zl},schema:{foreign_key_info:Xl,index_info:ed,primary_key_info:td,table_info:rd},select:{select:od,select_json:nd},truncate:{truncate:sd},union:{union:id},update:{update:ad},where:{where:ld,where_group:dd,where_json:md,where_subquery:ud},with:{with:cd}},mysql:{alter_table:{add_column:pd,add_constraint:fd,add_primary_key:yd,alter_column_type:hd,alter_table:gd,drop_column:bd,drop_constraint:Td,drop_default:Nd,drop_not_null:Sd,drop_primary_key:qd,rename_column:wd,rename_table:Md,set_default:_d,set_not_null:Cd},column:{column_type:Rd},constraint:{after:Ad,constraint:xd},create_table:{create_table:Pd},delete:{delete:Dd},distinct:{distinct:Id,distinct_on:$d},drop_table:{drop_table:Od},extension:{create_extension:vd},from:{from:Ed},group_by:{group_by:Qd},having:{having:kd},index_op:{create_index:Bd,drop_index:Kd},insert:{insert:Ld},join:{join:Ud},limit:{limit:Fd},lock:{lock:Wd},offset:{offset:jd},on_duplicate:{on_duplicate:Vd},order_by:{order_by:Jd},raw:{raw:Hd},schema:{foreign_key_info:Yd,index_info:zd,primary_key_info:Gd,table_info:Zd},select:{select:Xd,select_json:em},truncate:{truncate:tm},union:{union:rm},update:{update:om},where:{where:nm,where_group:sm,where_json:im,where_subquery:am},with:{with:lm}},oracledb:{alter_table:{add_column:dm,add_constraint:mm,add_primary_key:um,alter_column_type:cm,alter_table:pm,drop_column:fm,drop_constraint:ym,drop_default:hm,drop_not_null:gm,drop_primary_key:bm,rename_column:Tm,rename_table:Nm,set_default:Sm,set_not_null:qm},column:{column_type:wm},constraint:{after:Mm,constraint:_m},create_table:{create_table:Cm},delete:{delete:Rm},distinct:{distinct:Am,distinct_on:xm},drop_table:{drop_table:Pm},extension:{create_extension:Dm},from:{from:Im},group_by:{group_by:$m},having:{having:Om},index_op:{create_index:vm,drop_index:Em},insert:{insert:Qm},join:{join:km},limit:{limit:Bm},lock:{lock:Km},offset:{offset:Lm},on_duplicate:{on_duplicate:Um},order_by:{order_by:Fm},raw:{raw:Wm},schema:{foreign_key_info:jm,index_info:Vm,primary_key_info:Jm,table_info:Hm},select:{select:Ym,select_json:zm},truncate:{truncate:Gm},union:{union:Zm},update:{update:Xm},where:{where:eu,where_group:tu,where_json:ru,where_subquery:ou},with:{with:nu}},postgres:{alter_table:{add_column:su,add_constraint:iu,add_primary_key:au,alter_column_type:lu,alter_table:du,drop_column:mu,drop_constraint:uu,drop_default:cu,drop_not_null:pu,drop_primary_key:fu,rename_column:yu,rename_table:hu,set_default:gu,set_not_null:bu},column:{column_type:Tu},constraint:{after:Nu,constraint:Su},create_table:{create_table:qu},delete:{delete:wu},distinct:{distinct:Mu,distinct_on:_u},drop_table:{drop_table:Cu},extension:{create_extension:Ru},from:{from:Au},group_by:{group_by:xu},having:{having:Pu},index_op:{create_index:Du,drop_index:Iu},insert:{insert:$u},join:{join:Ou},limit:{limit:vu},lock:{lock:Eu},offset:{offset:Qu},on_duplicate:{on_duplicate:ku},order_by:{order_by:Bu},raw:{raw:Ku},schema:{foreign_key_info:Lu,index_info:Uu,primary_key_info:Fu,table_info:Wu},select:{select:ju,select_json:Vu},truncate:{truncate:Ju},union:{union:Hu},update:{update:Yu},where:{where:zu,where_group:Gu,where_json:Zu,where_subquery:Xu},with:{with:ec}},sqlite:{alter_table:{add_column:tc,add_constraint:rc,alter_column_type:oc,alter_table:nc,drop_column:sc,drop_constraint:ic,drop_default:ac,drop_not_null:lc,drop_primary_key:dc,rename_column:mc,rename_table:uc,set_default:cc,set_not_null:pc},column:{column_type:fc},constraint:{after:yc,constraint:hc},create_table:{create_table:gc},delete:{delete:bc},distinct:{distinct:Tc,distinct_on:Nc},drop_table:{drop_table:Sc},extension:{create_extension:qc},from:{from:wc},group_by:{group_by:Mc},having:{having:_c},index_op:{create_index:Cc,drop_index:Rc},insert:{insert:Ac},join:{join:xc},limit:{limit:Pc},lock:{lock:Dc},offset:{offset:Ic},on_duplicate:{on_duplicate:$c},order_by:{order_by:Oc},raw:{raw:vc},schema:{foreign_key_info:Ec,index_info:Qc,primary_key_info:kc,table_info:Bc},select:{select:Kc,select_json:Lc},truncate:{truncate:Uc},union:{union:Fc},update:{update:Wc},where:{where:jc,where_group:Vc,where_json:Jc,where_subquery:Hc},with:{with:Yc}}};var b=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=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"),d=l.some(C=>C.folder==="offset"),m=l.some(C=>C.folder==="order_by"),u=l.find(C=>C.folder==="limit"),c=l.find(C=>C.folder==="offset"),p=this.dbType==="mssql"&&u&&!d&&!m,y=this.dbType==="mssql"&&!p&&(u||c),h=this.dbType==="oracledb"&&(u||c),S=[],M=[],$=null;p&&u&&M.push(u.limit);for(let C=0;C<l.length;C++){let D=l[C];if(p&&D.folder==="limit"||y&&(D.folder==="limit"||D.folder==="offset")||h&&(D.folder==="limit"||D.folder==="offset"))continue;D.currParamIndex=e+M.length;let A=zc[this.mapCommonDbType(this.dbType)][D.folder][D.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${D.keyword}`);A.model=this.model;let w=A.toSql(D);if(!w.sql||!w.sql.trim().length)continue;let E=l[C+1],x=!E||E.keyword!==D.keyword?"":E.chainsWith;if(D.folder==="lock"||D.folder==="on_duplicate"||D.folder==="schema"){S.push(`${w.sql}${x}`),M.push(...w.bindings),$=D.keyword;continue}if($!==D.keyword||D.canKeywordBeSeenMultipleTimes){if(r)S.push(`${w.sql}${x}`);else {let z=D.keyword;if(D.folder==="with"&&this.dbType!=="mssql"){let ne=C,We=false;for(;ne<l.length&&l[ne].keyword===D.keyword;){let Ae=l[ne];if(Ae.folder==="with"&&Ae.clause==="recursive"){We=true;break}ne++;}We&&(z=`${z} recursive`);}if(z==="select"){let ne=p?`top (@${e}) `:"";if(o){let We=Array.isArray(o.columns)?o.columns.join(", "):"";S.push(`select ${ne}distinct on (${We}) ${w.sql}${x}`);}else n?S.push(`select ${ne}distinct ${w.sql}${x}`):S.push(`select ${ne}${w.sql}${x}`);}else z==="from"&&a?S.push(`${z} ${w.sql}${a}${x}`):S.push(`${z} ${w.sql}${x}`);}$=D.keyword;}else S.push(`${w.sql}${x}`);M.push(...w.bindings);}if(y){m||S.push("order by (select null)");let C=c?.offset??0;M.push(C);let A=`offset @${e+M.length-1} rows`;if(u){M.push(u.limit);let w=e+M.length-1;A+=` fetch next @${w} rows only`;}S.push(A);}if(h){m||S.push("order by null");let C=c?.offset??0;M.push(C);let A=`offset :${e+M.length-1} rows`;if(u){M.push(u.limit);let w=e+M.length-1;A+=` fetch next :${w} rows only`;}S.push(A);}return {sql:S.join(" "),bindings:M}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Ht=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Yt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var zt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Gt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Zt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var he=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var ze=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Xt=class extends N{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 Me=class extends N{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 er=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ge=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var ft=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var tr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Ge=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var rr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var or=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var nr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var J=class extends N{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 sr=class extends N{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 ir=class extends N{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 ar=class extends N{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var lr=class extends N{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 dr=class extends N{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 be=class extends N{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var I=class extends N{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 yt=class extends N{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 Ke=class extends N{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 Ze=class extends N{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 Oe=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var mr=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var ur=class extends Oe{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=$e(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??H(this.tableName??"",q(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new J("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new J("foreign_key",{columns:[q(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 J("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new J("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof _?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new J("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??le(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||le(this.tableName??"",q(this.columnNode.column))})),this)}after(t){return this.nodes.push(new mr(t)),this}handleSqliteAutoIncrement(t){return this.nodes.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Le=class extends Oe{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 ur(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new _(e)}char(e,r=1){let o=new I(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new I(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new I(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 I(e,"uuid");return this.build(r)}ulid(e){let r=new I(e,"ulid");return this.build(r)}integer(e,r=255){let o=new I(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new I(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new I(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new I(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new I(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new I(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new I(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new I(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new I(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new I(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 I(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new I(e,"time",{precision:r});return this.build(o)}year(e){let r=new I(e,"year");return this.build(r)}datetime(e,r){let o=new I(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}timestamp(e,r){let o=new I(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}boolean(e){let r=new I(e,"boolean");return this.build(r)}binary(e){let r=new I(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new I(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new I(e,"blob");return this.build(r)}tinyblob(e){let r=new I(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new I(e,"mediumblob");return this.build(r)}longblob(e){let r=new I(e,"longblob");return this.build(r)}json(e){let r=new I(e,"json");return this.build(r)}jsonb(e){let r=new I(e,"jsonb");return this.build(r)}enum(e,r){let o=new I(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new I(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new I(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new I(e,"geometry");return this.build(r)}point(e){let r=new I(e,"point");return this.build(r)}linestring(e){let r=new I(e,"linestring");return this.build(r)}polygon(e){let r=new I(e,"polygon");return this.build(r)}multiPoint(e){let r=new I(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var cr=class extends Oe{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new _(t)}addColumn(t){let e=[],r=new Le(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(u=>u.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(u=>{let c=u;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),d=new Zt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(u=>{let c=u;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(u=>{this.nodes.push(new he(u));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new Le(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(c=>c.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=q(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),m=o.getNodes().find(c=>c.constraintType==="not_null")||l,u=o.getNodes().find(c=>c.constraintType==="default");this.nodes.push(new Xt(q(a),s,{})),m&&(m.constraintType==="not_null"?this.nodes.push(new nr(q(a))):m.constraintType==="null"&&this.nodes.push(new tr(q(a)))),u&&(u.defaultValue===void 0||u.defaultValue===null?this.nodes.push(new ft(q(a))):this.nodes.push(new or(q(a),u.defaultValue))),o.getNodes().forEach(c=>{let p=c;switch(p.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:p.constraintName});break;case "foreign_key":this.foreignKey(q(a),p.references?.table??"",q(p.references?.columns?.[0]??""),{constraintName:p.constraintName,onDelete:p.onDelete,onUpdate:p.onUpdate});break}});}dropColumn(t){this.nodes.push(new er(t));}renameColumn(t,e){this.nodes.push(new rr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ft(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ze([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??H(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J("unique",{columns:[t],constraintName:e?.constraintName??le(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=H(this.table,t,e);this.nodes.push(new ge(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??le(this.table,t);this.nodes.push(new ge(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Ge(t));}};var _e=class{constructor(t){if(this.sqlType=t||R.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new _(t)}rawQuery(t){this.queryStatements.push(t);}runFile(t){if(!ue.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=Fe.basename(t),r=Fe.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=ue.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 Le(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a=new sr(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 cr(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 Me(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 ir(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new Me(t,[new He(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new be(t,true),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||Xr(t,e.join("_")),n=new lr(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new dr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new ze(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??le(t,o.join("_")),s=new J("unique",{columns:o,constraintName:n}),a=new Me(t,[new he(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=H(t,e,r),n=new ge(o),s=new Me(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)?le(t,e.join("_")):le(t,e),n=r?.constraintName??o,s=new ge(n),a=new Me(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Ge,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new J(...e),o=new Me(t,[new he(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ge(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}createExtension(t,e=true){let r=new ar(t,e),o=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAstInstance(t){return new b(t,this.sqlType)}};var pr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models);}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 u of m)u.columnName===d.columnName&&a.push(`fk.${n.table}.${u.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 fr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models),this.dropResolver=new pr(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 _e(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||$e(o.table,o.columns[0]),l=this.sql.alterTable(o.table,d=>{let m=a||$e(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=q(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=q(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,H(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=q(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||$e(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 _e(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=q(t.relation.manyToManyOptions.throughModel),r=q(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=q(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,h=c.getColumns().find(S=>S.columnName===p);if(h)n=h.databaseName;else {let S=c?.databaseCaseConvention||"preserve";n=B(p,S);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof n=="string"&&n){let p=c.getColumns(),y=p.find(h=>h.columnName===n);if(y)n=y.databaseName;else {let h=c.primaryKey||"id",S=p.find(M=>M.columnName===h);if(S)n=S.databaseName;else {let M=c?.databaseCaseConvention||"preserve";n=B(n||h,M);}}}else {let p=c.primaryKey||"id",h=c.getColumns().find(S=>S.columnName===p);if(h)n=h.databaseName;else {let S=c?.databaseCaseConvention||"preserve";n=B(p,S);}}}let s=this.models.find(c=>c.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(c=>c.columnName===l);if(d)l=d.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=B(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=B(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=q(c),y=a.find(h=>h.columnName===p);if(y)l=y.databaseName;else {let h=s?.databaseCaseConvention||"preserve";l=B(p,h);}}let m=t.relation.onDelete?.toLowerCase(),u=t.relation.onUpdate?.toLowerCase();return this.sql.alterTable(t.table,c=>{let p=o||H(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:m,onUpdate:u});})}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};function yf(i){return i.replace(/\s+/g," ").trim()}function hf(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function ve(i,t){let e=yf(t.toLowerCase()),r=hf(e);switch(i){case "sqlite":{let o=[{test:n=>n==="increment",normalized:"integer"},{test:n=>n==="bigincrement",normalized:"integer"},{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":case "increment":return "integer";case "tinyint":return "tinyint";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":case "bigincrement":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":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":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}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}case "oracledb":{if(r.endsWith("clob")||r==="clob"||r==="nclob")return "clob";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("interval"))return "interval";switch(r){case "varchar2":case "nvarchar2":case "character varying":return "varchar2";case "char":case "nchar":case "character":return "char";case "number":case "numeric":case "decimal":case "integer":case "int":case "smallint":case "tinyint":case "mediumint":case "bigint":return "number";case "binary_float":case "float":case "real":return "binary_float";case "binary_double":case "double":case "double precision":return "binary_double";case "date":return "date";case "blob":case "raw":case "long raw":case "bytea":case "binary":case "varbinary":return "blob";case "json":case "jsonb":return "clob";case "boolean":case "bool":return "number";case "uuid":case "ulid":return "varchar2";default:return r}}default:return r}}var Xe=class i{constructor(t){this.emptyStatements=[/alter table ".*"$/];this.sql=t,this.models=Object.values(this.sql.models),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(u=>u.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 u=q(m.constraintName);o.foreignKeys.find(p=>p.name===u)||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(u=>u.name===d.databaseName||u.name===d.columnName)||e.data.columnsToAdd.push({table:r.table,column:d});for(let d of o.columns)n.columns.some(u=>u.databaseName===d.name||u.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(u=>u.name===d.name&&u.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(u=>u.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(u=>u.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 u=!e.areColumnsEqual(m,d,o.indexes),c=e.getDefaultChange({table:r.table,dbColumns:m,modelColumn:d});(u||c)&&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 c=q(d.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:c,relation:{type:"belongsTo",model:()=>r,columnName:q(d.manyToManyOptions.leftForeignKey),foreignKey:d.manyToManyOptions.leftForeignKey,constraintName:d.constraintName?q(d.constraintName):H(c,q(d.manyToManyOptions.leftForeignKey||Ie(r.table)),r.table),onDelete:d.onDelete,onUpdate:d.onUpdate},onDelete:d.onDelete,onUpdate:d.onUpdate});continue}let m=q(d.constraintName);if(m&&o.foreignKeys.some(c=>c.name===m))continue;o.foreignKeys.find(c=>e.relationMatchesDbRelation(r,d,c))||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=q(d.foreignKey)||d.columnName,c=r.getColumns().find(p=>p.columnName===m)?.databaseName||m;return q(d.constraintName)||H(r.table,c,d.model().table)}));for(let d of o.foreignKeys){if(d.name&&a.has(d.name))continue;n.relations.find(u=>u.type!=="belongsTo"&&u.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,u,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(u=>e.relationMatchesDbRelation(r,d,u));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 fr(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=ve(n,t.dataType),a=typeof e.type=="string"?ve(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=q(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),m=d.primaryKey||"id",u=d.getColumns().find(y=>y.columnName===m),c=d.table,p=u?.databaseName||m;o=o&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=q(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?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),m=(n.type||"belongsTo")==="belongsTo"?q(n.foreignKey):n.columnName,u=l.find(h=>h.columnName===m);u&&(m=u.databaseName);let c=o.primaryKey||"id",y=o.getColumns().find(h=>h.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===m&&r.referencedColumns.length===1&&r.referencedColumns[0]===y}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=ve(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?ve(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=q(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(x=>x.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",m=s.getColumns().find(x=>x.columnName===l),u=a.getColumns().find(x=>x.columnName===d);if(!m||!u)continue;let c=q(o.manyToManyOptions.leftForeignKey)||l,p=q(o.manyToManyOptions.rightForeignKey)||d,y=await this.sql.getTableSchema(n);if(!y.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(m,c),this.clonePkAsColumn(u,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:c,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let h=this.clonePkAsColumn(m,c),S=this.clonePkAsColumn(u,p),M=y.columns.find(x=>x.name===c),$=y.columns.find(x=>x.name===p),V=M?this.areColumnsEqual(M,h,y.indexes):false,C=$?this.areColumnsEqual($,S,y.indexes):false;for(let x of y.foreignKeys){let z=x.referencedTable===s.table,ne=x.referencedTable===a.table;if(!z&&!ne)continue;let We=z?c:p,Ae=x.columns[0];Ae&&Ae!==We&&(this.data.relationsToDrop.push({table:n,relation:x}),Ae!==c&&Ae!==p&&this.data.columnsToDrop.push({table:n,column:Ae}));}let D={};V||(D[h.databaseName]=h),C||(D[S.databaseName]=D[S.databaseName]||S);for(let x of Object.keys(D))this.data.columnsToAdd.push({table:n,column:D[x]});let A=this.buildBelongsToRelation(n,()=>s,c,l,void 0,o.onDelete,o.onUpdate),w=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),E=y.foreignKeys.find(x=>x.referencedTable===s.table&&x.columns.length===1&&x.columns[0]===c),Se=y.foreignKeys.find(x=>x.referencedTable===a.table&&x.columns.length===1&&x.columns[0]===p);if(!E){let x=y.foreignKeys.find(z=>z.referencedTable===s.table);x&&this.data.relationsToDrop.push({table:n,relation:x}),this.data.relationsToAdd.push(A);}if(!Se){let x=y.foreignKeys.find(z=>z.referencedTable===a.table);x&&this.data.relationsToDrop.push({table:n,relation:x}),this.data.relationsToAdd.push(w);}}}}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(c=>c.columnName===l)?.databaseName||l,u=q(a.constraintName)||H(o.table,m,a.model().table);s.add(u);}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(S=>S.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(S=>S.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 S=h.primaryKey||"id";m=h.getColumns().find($=>$.columnName===S)?.databaseName||S;}let u=new Set([l,o.relation.columnName].filter(Boolean)),c=n.foreignKeys.some(h=>{if(h.columns.length!==1||h.referencedColumns.length!==1)return false;let S=u.has(h.columns[0]),M=h.referencedTable===d,$=h.referencedColumns[0]===m;return S&&M&&$}),p=q(o.relation.constraintName)||H(o.table,l,d),y=e.get(o.table)||new Set;if(c||p&&y.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let h=q(o.relation.manyToManyOptions.throughModel),S=q(o.relation.manyToManyOptions.leftForeignKey),M=q(o.relation.manyToManyOptions.rightForeignKey),$=o.table===h&&o.relation.columnName===S&&o.relation.model().table===s?.table,V=o.table===h&&o.relation.columnName===M&&o.relation.model().table!==s?.table,C=await this.sql.getTableSchema(h),D=C.foreignKeys.some(w=>w.columns.length===1&&w.columns[0]===S&&w.referencedTable===(s?.table||"")),A=C.foreignKeys.some(w=>w.columns.length===1&&w.columns[0]===M&&w.referencedTable===o.relation.model().table);if($&&D||V&&A)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 u=a.find(S=>S.columnName===d.foreignKey)?.databaseName||d.foreignKey,c=d.model(),p=c.primaryKey||"id",h=c.getColumns().find(S=>S.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===u&&o.relation.referencedTable===c.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?q(n):H(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 Te=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var L=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var W=class extends N{constructor(e,r=[],o,n=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=o,this.disableReturning=n;}};var de=class extends N{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 te=class extends N{constructor(e,r=[],o=[],n=false){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o;}};var v=class extends N{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 ht=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var re=class extends v{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 N{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 yr=class extends 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);});}},ep=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool();if(o)return new Promise((d,m)=>{n.run(i,t,function(u){u&&m(u),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,m)=>{n.all(i,t,(u,c)=>{u&&m(u),(!c||!c.length)&&d([]),d(c);});});let s=r?.typeofModel;if(!s)return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.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((u,c)=>{n.run(i,t,function(p){if(p)return c(p);let y=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){u([y]);return}let h=y?.[a]||this.lastID;if(!h)return c(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let S=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(S,[h],(M,$)=>{if(M)return c(M);u([$]);});});});if(!Array.isArray(r.models))throw new T("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((u,c)=>{n.run(i,t,function(p){if(p)return c(p);u(d);});});let m=[];return new Promise(async(u,c)=>{try{let p=d.map(async y=>{let h=new f(s),{columns:S,values:M}=await h.prepareColumns(Object.keys(y),Object.values(y),"insert"),$=Object.fromEntries(S.map((A,w)=>[A,M[w]])),V=new b(s,e.getDbType()),{sql:C,bindings:D}=V.parse([new W(new L(s.table),[$])]);return new Promise((A,w)=>{n.run(C,D,function(E){if(E)return w(E);let Se=y[a]||this.lastID;if(!Se)return w(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let x=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(x,[Se],(z,ne)=>{if(z)return w(z);A(ne);});});})});m=await Promise.all(p),u(m);}catch(p){c(p);}})}return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.message)):d(this.changes);});})};var bf=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,Tf=/^\d{4}-\d{2}-\d{2}$/,Da=i=>typeof i!="string"?i:bf.test(i)?new Date(i.replace(" ","T")+"Z"):Tf.test(i)?new Date(i+"T00:00:00Z"):i,Nf=async i=>new Promise((t,e)=>{if(i.type===2017){let o="";i.setEncoding("utf8"),i.on("data",n=>{o+=n;}),i.on("end",()=>t(o)),i.on("error",e);}else {let o=[];i.on("data",n=>{o.push(n);}),i.on("end",()=>t(Buffer.concat(o))),i.on("error",e);}}),tp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await Nf(r):t[e]=r;}return t};var j=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||Z(i,e.logs,t),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await gt(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?a[0].affectedRows:o==="raw"?a:a[0];case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool(),d=await gt(()=>l.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?d.rows:o==="raw"?d:d.rowCount;case "sqlite":let m=await gt(()=>ep(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="raw"?Array.isArray(m)?m:[m]:m;case "mssql":let u=e.getPool(),c=e.sqlConnection?e.sqlConnection.request():u.request();t.forEach((V,C)=>{c.input(`p${C}`,V);});let p=0,y=i.replace(/\?|@(\d+)/g,()=>`@p${p++}`),h=await gt(()=>c.query(y),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?h.rowsAffected[0]:o==="raw"?h:h.recordset;case "oracledb":let S=4002,M=null,$=!!e.sqlConnection;try{M=e.sqlConnection?e.sqlConnection:await e.getConnection();let V=t.map(Da),C=await gt(()=>M.execute(i,V,{outFormat:S,autoCommit:!$}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?C.rowsAffected:o==="raw"?C:await Promise.all(C.rows?.map(async A=>{let w=await tp(A),E={};for(let Se in w)E[Se.toLowerCase()]=w[Se];return E})??[])}finally{M&&!$&&await M.close();}default:throw new T("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},gr=async(i,t,e,r={},o)=>{let n=e.type;switch(n){case "mariadb":case "mysql":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),m=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),u=0,c=false,p=false,y=()=>{try{a.release();}catch{}};return m.on("data",h=>{if(o.onData){u++,Promise.resolve(o.onData(l,h)).then(()=>{u--,c&&u===0&&!p&&(y(),l.end());}).catch(S=>{p=true,y(),l.destroy(S);});return}l.write(h);}),m.on("end",()=>{c=true,u===0&&!p&&(y(),l.end());}),m.on("error",h=>{p=true,y(),l.destroy(h);}),l.on("close",()=>{y();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new Q("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),m=new l.default(i,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),u=a.query(m),c=0,p=false,y=false,h=S=>{try{a.release(S);}catch{}};return u.on("data",S=>{if(o.onData){c++,Promise.resolve(o.onData(d,S)).then(()=>{c--,p&&c===0&&!y&&(h(),d.end());}).catch(M=>{y=true,h(M),d.destroy(M);});return}d.write(S);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),d.end());}),u.on("error",S=>{y=true,h(S),d.destroy(S);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new yr(s,i,t,{onData:o.onData})}case "mssql":{let s=e.sqlConnection??e.getPool(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),l=s.request();l.stream=true,t.forEach((y,h)=>{l.input(`p${h}`,y);});let d=0,m=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),u=0,c=false,p=false;return l.on("row",y=>{if(!p){if(o.onData){u++,Promise.resolve(o.onData(a,y)).then(()=>{u--,c&&u===0&&!p&&a.end();}).catch(h=>{p=true,a.destroy(h);});return}a.write(y);}}),l.on("error",y=>{p=true,a.destroy(y);}),l.on("done",()=>{c=true,u===0&&!p&&a.end();}),l.query(m),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=4002,m=t.map(Da),u=a.queryStream(i,m,{outFormat:d}),c=0,p=false,y=false,h=async()=>{try{await a.close();}catch{}};return u.on("data",S=>{if(y)return;let M={};for(let $ in S)M[$.toLowerCase()]=S[$];if(o.onData){c++,Promise.resolve(o.onData(l,M)).then(()=>{c--,p&&c===0&&!y&&(h(),l.end());}).catch($=>{y=true,h(),l.destroy($);});return}l.write(M);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),l.end());}),u.on("error",S=>{y=true,h(),l.destroy(S);}),l}default:throw new T("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function gt(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++,Ka(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var K=(i,t="millis",e=3)=>async(...r)=>{let o=performance.now(),n=await i(...r),s=performance.now()-o;return [(t==="millis"?s:s/1e3).toFixed(e),n]};var X=class extends N{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 bt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Lt(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 T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function br(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 rp(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var et=i=>typeof i=="number"?i:parseFloat(i);var Ue=class extends N{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 Tr=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Nr=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Ee=class extends N{constructor(e,r,o,n="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=o,this.jsonOperator=n,this.isRawValue=s;}};var oe=class extends N{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 Tt=class extends N{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 Sr=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var qr=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Nt=class extends N{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 wr=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 Tt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Tt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Nt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Nt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Sr(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new qr(t),this}};var Mr=class extends wr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new oe(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new oe(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new oe(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new oe(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new oe(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new oe(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("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 T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new oe(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 T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new oe(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 T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new oe(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 T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,n,"full",{operator:s||"="})),this}};var _r=class extends Mr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.modelAnnotatedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],e.map(o=>B(o,this.model.databaseCaseConvention)).forEach(o=>{this.selectNodes.push(new X(o));}),this}selectRaw(e){return this.selectNodes.push(new X(e,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new L(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 X(s,a,n)),this.modelAnnotatedColumns.push(a),this}from(e){return this.fromNode=new L(e),this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new Tr,this}distinctOn(...e){return this.distinctOnNode=new Nr(e),this}selectJson(e,r,o){return this.selectNodes.push(new Ee(e,r,o,"extract")),this.modelAnnotatedColumns.push(o),this}selectJsonText(e,r,o){return this.selectNodes.push(new Ee(e,r,o,"extract_text")),this.modelAnnotatedColumns.push(o),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new Ee(e,r,o,"array_length")),this.modelAnnotatedColumns.push(o),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new Ee(e,r,o,"object_keys")),this.modelAnnotatedColumns.push(o),this}selectJsonRaw(e,r){return this.selectNodes.push(new Ee(e,"",r,"raw",true)),this.modelAnnotatedColumns.push(r),this}};var Cr=class extends _r{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 O&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||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 O&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(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 O&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(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 O&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(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 O&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(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 O&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(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 v(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new v(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 v(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new v(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 v(e,"and",false,"in",r)),this):(this.whereNodes.push(new v("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"or",false,"in",r)),this):(this.whereNodes.push(new v("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 v(e,"and",true,"in",r)),this):(this.whereNodes.push(new v("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"or",true,"in",r)),this):(this.whereNodes.push(new v("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new v(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new v(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new v(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new v(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 v(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 v(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof O?e:new O(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 O?e:new O(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 O?e:new O(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 O?e:new O(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 v(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new v(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 Ue(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 Ue(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ue(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ue(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof O)return e;let r=new O(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 O(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new ht(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new O(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new ht(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Rr=class extends Cr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new re(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new re(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new re(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new re(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new re(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new re(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new re(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new re(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new re(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new re(t,"or",false,"raw",e)),this}};var O=class i extends Rr{constructor(e,r=De.instance){super(e,r);this.isNestedCondition=false;this.mustRemoveAnnotations=false;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.truncateNode=null;this.replicationMode=null;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),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType),this.interpreterUtils=new f(this.model);}setReplicationMode(e){return this.replicationMode=e,this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>j(e,r,o,this.dbType,"rows",{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 T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async firstOrFail(){return this.oneOrFail()}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await gr(r,o,n,e,{onData:(a,l)=>{a.write(l);}}))}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:rp(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 X(o.extractQueryNodes(),r)),this}return this.selectNodes.push(new X(e.extractQueryNodes(),r)),this}lockForUpdate(e={}){return this.lockQueryNodes.push(new yt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new yt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Ke(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ke(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ke(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ke(o,true)),this}async increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}async decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.clearForFunctions(),this.annotate("count",e,"total");let r=await this.one();return r?et(r.total):0}async getMax(e){this.clearForFunctions(),this.annotate("max",e,"total");let r=await this.one();return r?et(r.total):0}async getMin(e){this.clearForFunctions(),this.annotate("min",e,"total");let r=await this.one();return r?et(r.total):0}async getAvg(e){this.clearForFunctions(),this.annotate("avg",e,"total");let r=await this.one();return r?et(r.total):0}async getSum(e){this.clearForFunctions(),this.annotate("sum",e,"total");let r=await this.one();return r?et(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let o=this.clone(),n=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>n.many(),()=>o.getCount("*"));return {paginationMetadata:br(e,r,a),data:s}}from(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::from","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource);e(o);let n=o.extractQueryNodes();return this.fromNode=new L(n,r),this}return this.fromNode=new L(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 Ze("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 Ze("recursive",e,n)),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("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 Ze("materialized",e,n)),this}async insert(e,r){let{columns:o,values:n}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),s=Object.fromEntries(o.map((u,c)=>[u,n[c]]));this.insertNode=new W(this.fromNode,[s],r);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});return Array.isArray(m)&&m.length?m[0]:m}async insertMany(e,r){if(!e.length)return [];let o=await Promise.all(e.map(async l=>{let{columns:d,values:m}=await this.interpreterUtils.prepareColumns(Object.keys(l),Object.values(l),"insert");return Object.fromEntries(d.map((u,c)=>[u,m[c]]))}));this.insertNode=new W(this.fromNode,o,r);let{sql:n,bindings:s}=this.astParser.parse([this.insertNode]),a=await this.getSqlDataSource("write");return j(n,s,a,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:o}})}async upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),d=Object.fromEntries(a.map((y,h)=>[y,l[h]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,n,o,[e]);let{sql:m,bindings:u}=this.astParser.parse([new W(new L(this.model.table),[d],void 0,true),new de(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),p=await j(m,u,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(p)?p:[p]}async upsertMany(e,r,o,n={updateOnConflict:true}){let s=[];if(await Promise.all(o.map(async u=>{let{columns:c,values:p}=await this.interpreterUtils.prepareColumns(Object.keys(u),Object.values(u),"insert"),y=Object.fromEntries(c.map((h,S)=>[h,p[S]]));s.push(y);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(s,e,r,n,o);let{sql:a,bindings:l}=this.astParser.parse([new W(new L(this.model.table),s,void 0,true),new de(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(m)?m:[m]}async executeMssqlMergeRaw(e,r,o,n,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),d=E=>this.interpreterUtils.formatStringColumn("mssql",E),m=[],u=e.map(E=>`select ${a.map(x=>(m.push(E[x]),`@${m.length}`)).join(", ")}`),c=a.map(d).join(", "),p=u.join(" union all "),y=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),h=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),S=a.map(d).join(", "),M=a.map(E=>`source.${d(E)}`).join(", "),$=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),C=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",D=`merge into ${l} as target using (${p}) as source (${c}) on ${y} ${C} when not matched then insert (${S}) values (${M}) output ${$};`,A=await this.getSqlDataSource("write"),w=await j(D,m,A,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(w)?w:[w]}async update(e){let r=Object.keys(e),o=Object.values(e),{columns:n,values:s}=await this.interpreterUtils.prepareColumns(r,o,"update");this.updateNode=new te(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async truncate(){this.truncateNode=new be(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await j(e,r,o,this.dbType,"rows");}async delete(){this.deleteNode=new Te(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),o=await this.getSqlDataSource("write");return j(e,r,o,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async softDelete(e={}){let{column:r="deletedAt",value:o=pe()}=e||{},{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new te(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}toQuery(){let{sql:e,bindings:r}=this.unWrap();return Za(e,r)}unWrap(){this.selectNodes.length||(this.selectNodes=[new X("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes()),o=kt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.modelAnnotatedColumns=F(this.modelAnnotatedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e.mustRemoveAnnotations=this.mustRemoveAnnotations,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.from(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new X("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?[this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.deleteNode?[this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.truncateNode?[this.truncateNode]:[...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 K(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await K(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 K(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await K(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await K(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await K(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await K(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let o=await e(),n=await r();return [o,n]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let o=await this.getSqlDataSource(e);if(!(o!==this.sqlDataSource))return r(o);try{return await r(o)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,type:o.getDbType()}),await r(this.sqlDataSource);throw a}}};var tt=class i extends O{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),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.sqlModelManagerUtils=new bt(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 T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async firstOrFail(e){return this.oneOrFail(e)}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a,this.model));if(!o.length)return [];let n=await fe(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={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let{sql:r,bindings:o}=this.unWrap(),n=await this.getSqlDataSource("read");return await gr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l,this.model),m=await fe([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));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new T(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}async insert(...e){return this.model.insert(...e)}async insertMany(...e){return this.model.insertMany(...e)}async update(e,r={}){return r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),super.update(e)}async softDelete(e={}){let{ignoreBeforeUpdateHook:r=false}=e||{};return !r&&await this.model.beforeUpdate?.(this),super.softDelete(e)}async delete(e={}){return e.ignoreBeforeDeleteHook||await 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.clone(),s=this.limit(r).offset((e-1)*r),a=o.ignoreHooks?["beforeFetch","afterFetch"]:[],[l,d]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:br(e,r,d),data:l}}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],this.selectNodes=this.selectNodes.concat(e.map(r=>new X(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 X(s,a,n)),this.modelAnnotatedColumns.push(a),this}selectJson(e,r,o){return super.selectJson(e,r,o),this}selectJsonText(e,r,o){return super.selectJsonText(e,r,o),this}selectJsonArrayLength(e,r,o){return super.selectJsonArrayLength(e,r,o),this}selectJsonKeys(e,r,o){return super.selectJsonKeys(e,r,o),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),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=F(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 T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(c=>{let p=c[e.foreignKey];p&&n.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let y=n.get(String(p));c[e.columnName]=y||null;});break;case "belongsTo":let s=new Map;o.forEach(c=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&s.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let y=s.get(String(p));c[e.columnName]=y||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let y=String(p);a.has(y)||a.set(y,[]),a.get(y).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=a.get(String(p))||[];c[e.columnName]=y;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,m=l.leftForeignKey,u=this.modelColumnsMap.get(m)||this.modelColumnsDatabaseNames.get(m)||B(m,this.model.modelCaseConvention);o.forEach(c=>{let p=c.$annotations||{},y=p[u];if(y==null)return;let h=String(y);d.has(h)||d.set(h,[]),this.modelAnnotatedColumns.includes(u)||(delete p[u],Object.keys(p).length||delete c.$annotations),d.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=d.get(String(p))||[];c[e.columnName]=y;});break;default:throw new T(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=qe.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,m=e.orderByNodes.map(w=>w.isRawValue?w.column:`${this.interpreterUtils.formatStringColumn(this.dbType,w.column)} ${w.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let u=e.with(d,w=>w.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&&u.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&u.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(w=>Zr(w,d,e.model.table));return u.select(...c).from(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let y=e.limitNode?.limit,h=e.offsetNode?.offset,S=e.modelSelectedColumns.length?e.modelSelectedColumns.map(w=>w.includes(".")?w:`${r.model.table}.${w}`):[`${r.model.table}.*`];if(!y&&!h)return e.select(...S).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 M=qe.randomBytes(6).toString("hex"),$=`${r.model.table}_cte_${M}`,V=e.orderByNodes.map(w=>{if(w.isRawValue)return w.column;let E=w.column.includes(".")?w.column:`${r.model.table}.${w.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${w.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let C=`${qe.randomBytes(6).toString("hex")}_left_foreign_key`,D=e.with($,w=>w.select(...S).annotate(`${p.throughModel}.${p.leftForeignKey}`,C).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${V}) as rn_${M}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));y&&D.whereRaw(`rn_${M} <= ${y+(h||0)}`),h&&D.whereRaw(`rn_${M} > ${h}`);let A=S.map(w=>Zr(w,$,e.model.table));return D.select(...A).annotate(`${$}.${C}`,p.leftForeignKey).from($);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(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 T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new T(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 T(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 T(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 u=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${c}`),o&&typeof n=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e,r){let o={},n={},s=new Set(this.modelAnnotatedColumns);return Object.entries(e).forEach(([a,l])=>{let d=B(a,r.modelCaseConvention),m=s.has(d)||s.has(a),u=a==="$annotations"||this.modelColumnsDatabaseNames.get(a);if(m&&(n[d]=l),u){o[a]=l;return}m||(n[d]=l);}),o.$annotations=n,o}async manyWithPerformance(e={},r="millis"){let[o,n]=await K(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await K(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await K(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 K(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 K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await K(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}};var Ar=class extends tt{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new W(this.fromNode,[o],r?.returning),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new W(this.fromNode,o,r?.returning),this}update(...t){let[e]=t;return this.updateNode=new te(this.fromNode,Object.keys(e),Object.values(e)),this}delete(...t){let[e]=t;return e?.ignoreBeforeDeleteHook||this.model.beforeDelete?.(this),this.deleteNode=new Te(this.fromNode),this}truncate(){return this.truncateNode=new be(this.fromNode),this}softDelete(...t){let[e]=t,{column:r="deletedAt",value:o=pe()}=e||{};return this.updateNode=new te(this.fromNode,[r],[o]),this}};var St=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ml(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}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 T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(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}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),n={};r.forEach((u,c)=>{let p=o[c];n[u]=p,t[u]??(t[u]=p);});let{sql:s,bindings:a}=this.astParser.parse([new W(new L(this.model.table),[n],e.returning)]),l=await j(s,a,this.sqlDataSource,this.sqlType,"rows",{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?(await this.model.afterFetch?.([d]),await fe([d],this.model)):t}async insertMany(t,e={}){if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let d=this.model.primaryKey,m=Object.keys(t[0]||{});if(d&&!m.includes(d))return this.handleOracleIdentityInsert(t,e)}let r=[];for(let d of t){let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c={};m.forEach((p,y)=>{let h=u[y];c[p]=h,d[p]??(d[p]=h);}),r.push(c);}let{sql:o,bindings:n}=this.astParser.parse([new W(new L(this.model.table),r,e.returning)]),s=await j(o,n,this.sqlDataSource,this.sqlType,"rows",{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?(await this.model.afterFetch?.(a),await fe(a,this.model)||[]):[]}async upsertMany(t,e,r,o={updateOnConflict:true}){let n=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async d=>{let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c=Object.fromEntries(m.map((p,y)=>[p,u[y]]));n.push(c);})),this.sqlType==="mssql")return this.executeMssqlMerge(n,t,e,o,r);let{sql:s,bindings:a}=this.astParser.parse([new W(new L(this.model.table),n,void 0,true),new de(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",o.returning)]);return await j(s,a,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}})}async executeMssqlMerge(t,e,r,o,n){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),d=[],m=t.map(A=>`select ${s.map(E=>(d.push(A[E]),`@${d.length}`)).join(", ")}`),u=s.map(l).join(", "),c=m.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),y=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),h=s.map(l).join(", "),S=s.map(A=>`source.${l(A)}`).join(", "),M=o.returning&&o.returning.length?o.returning.map(A=>`inserted.${l(A)}`).join(", "):s.map(A=>`inserted.${l(A)}`).join(", "),V=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",C=`merge into ${a} as target using (${c}) as source (${u}) on ${p} ${V} when not matched then insert (${h}) values (${S}) output ${M};`;return await j(C,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}})}async updateRecord(t,e){let{columns:r,values:o}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"update"),{primaryKey:n}=this.model;if(!n)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let s=r.indexOf(n);s!==-1&&(r.splice(s,1),o.splice(s,1));let{sql:a,bindings:l}=this.astParser.parse([new te(new L(this.model.table),r,o),new v(n,"and",false,"=",t[n])]);await j(a,l,this.sqlDataSource,this.sqlType,"affectedRows");let d=await this.findOneByPrimaryKey(t[this.model.primaryKey],e?.returning??void 0);if(!d)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return d}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new v(this.model.primaryKey,"and",false,"=",t[this.model.primaryKey]),{sql:r,bindings:o}=this.astParser.parse([new Te(new L(this.model.table)),e]);await j(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new tt(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}dryQuery(){return new Ar(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 fe([a],this.model):null}return await fe(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}async handleOracleIdentityInsert(t,e){let r=[],o=this.model.primaryKey;for(let n of t){let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(n),Object.values(n),"insert"),l={};s.forEach((p,y)=>{let h=a[y];l[p]=h,n[p]??(n[p]=h);});let{sql:d,bindings:m}=this.astParser.parse([new W(new L(this.model.table),[l],e.returning)]);await j(d,m,this.sqlDataSource,this.sqlType,"rows");let u=this.query().select(...e.returning||["*"]);for(let[p,y]of Object.entries(l))y!=null&&p!==o&&u.where(p,"=",y);o&&u.orderBy(o,"desc");let c=await u.one({ignoreHooks:["beforeFetch"]});c?(o&&c[o]&&(n[o]=c[o]),r.push(c)):r.push(n);}return await this.model.afterFetch?.(r),r}};var xr=class extends O{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new W(this.fromNode,[o],r),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new W(this.fromNode,o,r),this}upsert(...t){let[e,r,o]=t,n=Object.keys(e),s=Object.keys(r);return this.insertNode=new W(new L(this.model.table),[e],void 0,true),this.onDuplicateNode=new de(this.model.table,s,n,o?.updateOnConflict??true?"update":"ignore",o?.returning),this}upsertMany(...t){let[e,r,o,n]=t,s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new W(new L(this.model.table),s,void 0,true),this.onDuplicateNode=new de(this.model.table,e,r,n?.updateOnConflict??true?"update":"ignore",n?.returning),this}update(t){return this.updateNode=new te(this.fromNode,Object.keys(t),Object.values(t)),this}delete(){return this.deleteNode=new Te(this.fromNode),this}truncate(){return this.truncateNode=new be(this.fromNode),this}softDelete(t={}){let{column:e="deletedAt",value:r=pe()}=t||{};return this.updateNode=new te(this.fromNode,[e],[r]),this}};var $a=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??pe()});var qt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=qe.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 "mssql":await this.sql.rawQuery(`SAVE TRANSACTION ${e}`),this.isActive=true;return;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":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 "mssql":t&&await this.sql.rawQuery(t),Z("BEGIN TRANSACTION",this.sql.logs);let e=await this.getMssqlTransactionLevel();await this.sql.sqlConnection.begin(e),this.isActive=true;break;case "mysql":case "mariadb":t&&await this.sql.rawQuery(t);let r=this.sql.sqlConnection;Z("BEGIN TRANSACTION",this.sql.logs),await r.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;case "oracledb":t&&await this.sql.rawQuery(t),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":case "oracledb":break;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 "mssql":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("COMMIT",this.sql.logs),await e.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break;case "oracledb":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mssql":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("ROLLBACK",this.sql.logs),await e.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;case "oracledb":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;case "oracledb":await this.sql.sqlConnection.close();break;default:throw new T("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){g.error(t);}await this.sql.closeConnection(),this.sql.sqlConnection=null,this.connectionReleased=true;}}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("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==="oracledb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}async getMssqlTransactionLevel(){if(!this.isolationLevel)return;let t=await import('mssql').then(e=>e.default.ISOLATION_LEVEL).catch(e=>{throw g.error(e),new Q("mssql")});switch(this.isolationLevel){case "READ UNCOMMITTED":return t.READ_UNCOMMITTED;case "READ COMMITTED":return t.READ_COMMITTED;case "REPEATABLE READ":return t.REPEATABLE_READ;case "SERIALIZABLE":return t.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var me,Re=class Re extends Et{constructor(e){super(e);this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new vt;this.migrationConfig={path:R.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:Wr(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(o=>new Re(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure;}getOnSlaveServerFailure(){return this.onSlaveServerFailure}static get instance(){if(!Qe(this,me))throw new T("SqlDataSource::instance","CONNECTION_NOT_ESTABLISHED");return Qe(this,me)}static async connectToSecondarySource(e,r){let o=new Re(e);await o.connectWithoutSettingPrimary();let n=o;return await r?.(n),n}static async useConnection(e,r){let o=new Re(e);await o.connectWithoutSettingPrimary();let n=o;try{await r(n),o.isConnected&&await o.closeConnection();}catch(s){throw o.isConnected&&await o.closeConnection(),s}}static async closeConnection(){if(!Qe(this,me)){g.warn("Connection already closed");return}await Qe(this,me).closeConnection(),Qr(this,me,null);}static async disconnect(){return this.closeConnection()}static async startGlobalTransaction(e){return this.instance.startGlobalTransaction(e)}static async commitGlobalTransaction(){await this.instance.commitGlobalTransaction();}static async rollbackGlobalTransaction(){await this.instance.rollbackGlobalTransaction();}static get isInGlobalTransaction(){return !!Qe(this,me)?.globalTransaction}async connect(){if(Qe(Re,me))throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.sqlPool=await ke(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await ke(e.sqlType,e.inputDetails),e.ownsPool=true;})),Qr(Re,me,this);}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){return this._models}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}async useCache(e,r,...o){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=n.length,a=typeof r=="number"&&s===o.length,l,d=[];a?(l=r,d=o):(l=void 0,d=r!==void 0?[r,...o]:o);let m=Fr(JSON.stringify(d)),u=m?`${e}:${m}`:e,c=await this.cacheAdapter.get(u);if(c!==void 0)return c;let p=await n(...d);return await this.cacheAdapter.set(u,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(o.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=Fr(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new Re(this.inputDetails);return r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await ke(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}query(e,r){let o=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this,n=new O($a(e,r),o);return r?.alias&&n.from(e,r.alias),n}dryQuery(e,r){return new xr($a(e,r),this)}alterTable(...e){let r=new _e(this.getDbType());return r.alterTable(...e),r.queryStatements}createTable(...e){let r=new _e(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 qt(r,e?.isolationLevel),await this.globalTransaction.startTransaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.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;if(this.globalTransaction?.isActive){if(typeof e=="function")try{await this.globalTransaction.nestedTransaction(e);return}catch(l){throw l}return await this.globalTransaction.nestedTransaction()}let n=await this.clone();n.sqlConnection=await n.getConnection();let s=new qt(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 T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new St(e,this.globalTransaction.sql):new St(e,this)}getPool(){if(!this.sqlPool)throw new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new T("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;case "mssql":return this.sqlPool.transaction();case "oracledb":return await this.sqlPool.getConnection();default:throw new T("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async closeConnection(){if(!this.isConnected){Z("Connection already closed or not established",this.logs);return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::closeConnection - Error while rolling back global transaction");}switch(await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.closeConnection();}catch(r){g.warn(`SqlDataSource::closeConnection - Error while closing slave connection: ${r.message}`);}})),Z("Closing connection",this.logs),this.sqlType){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;case "mssql":await this.sqlPool.close();break;case "oracledb":await this.sqlPool.close();break;default:throw new T("SqlDataSource::closeConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}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"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Xe.makeDiff(this)).getSqlStatements();if(!o.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);g.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),g.info(`Synced schema with ${o.length} SQL statements`);}async rawQuery(e,r=[],o){if(!this.isConnected)throw new T("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");let n=kt(this,e);return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async a=>j(n,r,a,this.getDbType(),"raw")):j(n,r,this,this.getDbType(),"raw")}rawStatement(e){return new _(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 za(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Ur(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Ya(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(a){if(ut(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=ve(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=ve(s,d),u=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,c=typeof u=="string"?u.toLowerCase()!=="no":typeof u=="boolean"?u:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,y=a.char_length!=null?Number(a.char_length):null,h=a.numeric_precision!=null?Number(a.numeric_precision):null,S=a.numeric_scale!=null?Number(a.numeric_scale):null,M=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:c,defaultValue:p,length:y,precision:h,scale:S,withTimezone:M}})}async getIndexInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yt(e)]).sql,n=this.getDbType(),s=[];try{s=await this.rawQuery(o);}catch(l){if(ut(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,u=d.Non_unique===0,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.Column_name),l.set(m,c);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let m=d.index_name,u=!!d.is_unique,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.column_name),l.set(m,c);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,m=!!l.unique,c=(await this.rawQuery(`PRAGMA index_info(${d})`)).map(p=>p.name);a.push({name:d,columns:c,isUnique:m});}return a}async getForeignKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ht(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ut(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let m=Number(d.id),u=l.get(m)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};u.columns.push(String(d.from)),u.referencedColumns.push(String(d.to)),l.set(m,u);}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}`,u=a.get(m)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};u.columns.push(String(l.column_name)),u.referencedColumns.push(String(l.referenced_column)),a.set(m,u);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(ut(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 acquireLock(e="hysteria_lock",r=3e4){let o=this.getDbType();try{switch(o){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[n])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let n=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,n]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "oracledb":try{let n=this.hashStringToLockId(e);return await this.rawQuery(`BEGIN DBMS_LOCK.ALLOCATE_UNIQUE('${e}', '${n}'); END;`),(await this.rawQuery(`DECLARE
|
|
288
|
+
ORDER BY pk`,bindings:[]}}},Qc=new Na;var wa=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Kc=new wa;var Sa=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 f(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 b(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 b(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 f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Lc=new Sa;var qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),o=se.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Uc=new qa;var Ma=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Wc=new Ma;var _a=class{toSql(t){let e=t,r=new b(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}}},Fc=new _a;var Ca=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);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 C?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},jc=new Ca;var Ra=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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("sqlite",t):t}},Vc=new Ra;var Aa=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Jc=new Aa;var xa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(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}}},Hc=new xa;var Pa=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 b(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 b(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Yc=new Pa;var Da=class{toSql(t){let e=t,r=new b(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}}},Gc=new Da;var zc={mssql:{alter_table:{add_column:el,add_constraint:tl,add_primary_key:rl,alter_column_type:ol,alter_table:Sl,drop_column:ql,drop_constraint:Ml,drop_default:_l,drop_not_null:Cl,drop_primary_key:Rl,rename_column:Al,rename_table:xl,set_default:Pl,set_not_null:Dl},column:{column_type:Ol},constraint:{after:Il,constraint:$l},create_table:{create_table:vl},delete:{delete:El},distinct:{distinct:Bl,distinct_on:kl},drop_table:{drop_table:Ql},extension:{create_extension:Kl},from:{from:Ll},group_by:{group_by:Ul},having:{having:Wl},index_op:{create_index:Fl,drop_index:jl},insert:{insert:Vl},join:{join:Jl},limit:{limit:Hl},lock:{lock:Yl},offset:{offset:Gl},on_duplicate:{on_duplicate:zl},order_by:{order_by:Zl},raw:{raw:Xl},schema:{foreign_key_info:ed,index_info:td,primary_key_info:rd,table_info:od},select:{select:nd,select_json:sd},truncate:{truncate:id},union:{union:ad},update:{update:ld},where:{where:dd,where_group:md,where_json:ud,where_subquery:cd},with:{with:pd}},mysql:{alter_table:{add_column:fd,add_constraint:yd,add_primary_key:hd,alter_column_type:gd,alter_table:bd,drop_column:Td,drop_constraint:Nd,drop_default:wd,drop_not_null:Sd,drop_primary_key:qd,rename_column:Md,rename_table:_d,set_default:Cd,set_not_null:Rd},column:{column_type:Ad},constraint:{after:xd,constraint:Pd},create_table:{create_table:Dd},delete:{delete:Od},distinct:{distinct:Id,distinct_on:$d},drop_table:{drop_table:vd},extension:{create_extension:Ed},from:{from:Bd},group_by:{group_by:kd},having:{having:Qd},index_op:{create_index:Kd,drop_index:Ld},insert:{insert:Ud},join:{join:Wd},limit:{limit:Fd},lock:{lock:jd},offset:{offset:Vd},on_duplicate:{on_duplicate:Jd},order_by:{order_by:Hd},raw:{raw:Yd},schema:{foreign_key_info:Gd,index_info:zd,primary_key_info:Zd,table_info:Xd},select:{select:em,select_json:tm},truncate:{truncate:rm},union:{union:om},update:{update:nm},where:{where:sm,where_group:im,where_json:am,where_subquery:lm},with:{with:dm}},oracledb:{alter_table:{add_column:mm,add_constraint:um,add_primary_key:cm,alter_column_type:pm,alter_table:fm,drop_column:ym,drop_constraint:hm,drop_default:gm,drop_not_null:bm,drop_primary_key:Tm,rename_column:Nm,rename_table:wm,set_default:Sm,set_not_null:qm},column:{column_type:Mm},constraint:{after:_m,constraint:Cm},create_table:{create_table:Rm},delete:{delete:Am},distinct:{distinct:xm,distinct_on:Pm},drop_table:{drop_table:Dm},extension:{create_extension:Om},from:{from:Im},group_by:{group_by:$m},having:{having:vm},index_op:{create_index:Em,drop_index:Bm},insert:{insert:km},join:{join:Qm},limit:{limit:Km},lock:{lock:Lm},offset:{offset:Um},on_duplicate:{on_duplicate:Wm},order_by:{order_by:Fm},raw:{raw:jm},schema:{foreign_key_info:Vm,index_info:Jm,primary_key_info:Hm,table_info:Ym},select:{select:Gm,select_json:zm},truncate:{truncate:Zm},union:{union:Xm},update:{update:eu},where:{where:tu,where_group:ru,where_json:ou,where_subquery:nu},with:{with:su}},postgres:{alter_table:{add_column:iu,add_constraint:au,add_primary_key:lu,alter_column_type:du,alter_table:mu,drop_column:uu,drop_constraint:cu,drop_default:pu,drop_not_null:fu,drop_primary_key:yu,rename_column:hu,rename_table:gu,set_default:bu,set_not_null:Tu},column:{column_type:Nu},constraint:{after:wu,constraint:Su},create_table:{create_table:qu},delete:{delete:Mu},distinct:{distinct:_u,distinct_on:Cu},drop_table:{drop_table:Ru},extension:{create_extension:Au},from:{from:xu},group_by:{group_by:Pu},having:{having:Du},index_op:{create_index:Ou,drop_index:Iu},insert:{insert:$u},join:{join:vu},limit:{limit:Eu},lock:{lock:Bu},offset:{offset:ku},on_duplicate:{on_duplicate:Qu},order_by:{order_by:Ku},raw:{raw:Lu},schema:{foreign_key_info:Uu,index_info:Wu,primary_key_info:Fu,table_info:ju},select:{select:Vu,select_json:Ju},truncate:{truncate:Hu},union:{union:Yu},update:{update:Gu},where:{where:zu,where_group:Zu,where_json:Xu,where_subquery:ec},with:{with:tc}},sqlite:{alter_table:{add_column:rc,add_constraint:oc,alter_column_type:nc,alter_table:sc,drop_column:ic,drop_constraint:ac,drop_default:lc,drop_not_null:dc,drop_primary_key:mc,rename_column:uc,rename_table:cc,set_default:pc,set_not_null:fc},column:{column_type:yc},constraint:{after:hc,constraint:gc},create_table:{create_table:bc},delete:{delete:Tc},distinct:{distinct:Nc,distinct_on:wc},drop_table:{drop_table:Sc},extension:{create_extension:qc},from:{from:Mc},group_by:{group_by:_c},having:{having:Cc},index_op:{create_index:Rc,drop_index:Ac},insert:{insert:xc},join:{join:Pc},limit:{limit:Dc},lock:{lock:Oc},offset:{offset:Ic},on_duplicate:{on_duplicate:$c},order_by:{order_by:vc},raw:{raw:Ec},schema:{foreign_key_info:Bc,index_info:kc,primary_key_info:Qc,table_info:Kc},select:{select:Lc,select_json:Uc},truncate:{truncate:Wc},union:{union:Fc},update:{update:jc},where:{where:Vc,where_group:Jc,where_json:Hc,where_subquery:Yc},with:{with:Gc}}};var b=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(R=>!!R&&R.folder==="distinctOn"),n=!o&&t.find(R=>!!R&&R.folder==="distinct"),s=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"),d=l.some(R=>R.folder==="offset"),m=l.some(R=>R.folder==="order_by"),u=l.find(R=>R.folder==="limit"),c=l.find(R=>R.folder==="offset"),p=this.dbType==="mssql"&&u&&!d&&!m,y=this.dbType==="mssql"&&!p&&(u||c),h=this.dbType==="oracledb"&&(u||c),w=[],_=[],$=null;p&&u&&_.push(u.limit);for(let R=0;R<l.length;R++){let O=l[R];if(p&&O.folder==="limit"||y&&(O.folder==="limit"||O.folder==="offset")||h&&(O.folder==="limit"||O.folder==="offset"))continue;O.currParamIndex=e+_.length;let x=zc[this.mapCommonDbType(this.dbType)][O.folder][O.file];if(!x)throw new Error(`Interpreter not found for ${this.dbType} ${O.keyword}`);x.model=this.model;let q=x.toSql(O);if(!q.sql||!q.sql.trim().length)continue;let E=l[R+1],P=!E||E.keyword!==O.keyword?"":E.chainsWith;if(O.folder==="lock"||O.folder==="on_duplicate"||O.folder==="schema"){w.push(`${q.sql}${P}`),_.push(...q.bindings),$=O.keyword;continue}if($!==O.keyword||O.canKeywordBeSeenMultipleTimes){if(r)w.push(`${q.sql}${P}`);else {let G=O.keyword;if(O.folder==="with"&&this.dbType!=="mssql"){let ne=R,Ve=false;for(;ne<l.length&&l[ne].keyword===O.keyword;){let Ae=l[ne];if(Ae.folder==="with"&&Ae.clause==="recursive"){Ve=true;break}ne++;}Ve&&(G=`${G} recursive`);}if(G==="select"){let ne=p?`top (@${e}) `:"";if(o){let Ve=Array.isArray(o.columns)?o.columns.join(", "):"";w.push(`select ${ne}distinct on (${Ve}) ${q.sql}${P}`);}else n?w.push(`select ${ne}distinct ${q.sql}${P}`):w.push(`select ${ne}${q.sql}${P}`);}else G==="from"&&a?w.push(`${G} ${q.sql}${a}${P}`):w.push(`${G} ${q.sql}${P}`);}$=O.keyword;}else w.push(`${q.sql}${P}`);_.push(...q.bindings);}if(y){m||w.push("order by (select null)");let R=c?.offset??0;_.push(R);let x=`offset @${e+_.length-1} rows`;if(u){_.push(u.limit);let q=e+_.length-1;x+=` fetch next @${q} rows only`;}w.push(x);}if(h){m||w.push("order by null");let R=c?.offset??0;_.push(R);let x=`offset :${e+_.length-1} rows`;if(u){_.push(u.limit);let q=e+_.length-1;x+=` fetch next :${q} rows only`;}w.push(x);}return {sql:w.join(" "),bindings:_}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Yt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Gt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var zt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Zt=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Xt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var he=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Ze=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var er=class extends N{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 Me=class extends N{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 tr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ge=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var ht=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var rr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Xe=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var or=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var nr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var sr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var J=class extends N{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 ir=class extends N{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 ar=class extends N{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 lr=class extends N{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var dr=class extends N{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 mr=class extends N{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 be=class extends N{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var I=class extends N{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 gt=class extends N{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 Le=class extends N{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 et=class extends N{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 $e=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var ur=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var cr=class extends $e{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=Ie(this.tableName,S(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new J("primary_key",{columns:[S(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new J("primary_key",{columns:[S(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??H(this.tableName??"",S(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new J("foreign_key",{columns:[S(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new J("foreign_key",{columns:[S(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 J("not_null",{columns:[S(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new J("null",{columns:[S(this.columnNode.column)]})),this}default(t){let e;return t instanceof C?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new J("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new J("unique",{columns:[S(this.columnNode.column)],constraintName:t?.constraintName??le(this.tableName??"",S(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[S(this.columnNode.column)],constraintName:t?.constraintName||le(this.tableName??"",S(this.columnNode.column))})),this)}after(t){return this.nodes.push(new ur(t)),this}handleSqliteAutoIncrement(t){return this.nodes.push(new J("primary_key",{columns:[S(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Ue=class extends $e{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 cr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new C(e)}char(e,r=1){let o=new I(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new I(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new I(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 I(e,"uuid");return this.build(r)}ulid(e){let r=new I(e,"ulid");return this.build(r)}integer(e,r=255){let o=new I(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new I(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new I(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new I(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new I(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new I(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new I(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new I(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new I(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new I(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 I(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new I(e,"time",{precision:r});return this.build(o)}year(e){let r=new I(e,"year");return this.build(r)}datetime(e,r){let o=new I(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}timestamp(e,r){let o=new I(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}boolean(e){let r=new I(e,"boolean");return this.build(r)}binary(e){let r=new I(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new I(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new I(e,"blob");return this.build(r)}tinyblob(e){let r=new I(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new I(e,"mediumblob");return this.build(r)}longblob(e){let r=new I(e,"longblob");return this.build(r)}json(e){let r=new I(e,"json");return this.build(r)}jsonb(e){let r=new I(e,"jsonb");return this.build(r)}enum(e,r){let o=new I(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new I(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new I(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new I(e,"geometry");return this.build(r)}point(e){let r=new I(e,"point");return this.build(r)}linestring(e){let r=new I(e,"linestring");return this.build(r)}polygon(e){let r=new I(e,"polygon");return this.build(r)}multiPoint(e){let r=new I(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var pr=class extends $e{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new C(t)}addColumn(t){let e=[],r=new Ue(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(u=>u.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(u=>{let c=u;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),d=new Xt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(u=>{let c=u;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(u=>{this.nodes.push(new he(u));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new Ue(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(c=>c.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=S(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),m=o.getNodes().find(c=>c.constraintType==="not_null")||l,u=o.getNodes().find(c=>c.constraintType==="default");this.nodes.push(new er(S(a),s,{})),m&&(m.constraintType==="not_null"?this.nodes.push(new sr(S(a))):m.constraintType==="null"&&this.nodes.push(new rr(S(a)))),u&&(u.defaultValue===void 0||u.defaultValue===null?this.nodes.push(new ht(S(a))):this.nodes.push(new nr(S(a),u.defaultValue))),o.getNodes().forEach(c=>{let p=c;switch(p.constraintType){case "primary_key":this.addPrimaryKey(S(a));break;case "unique":this.unique(S(a),{constraintName:p.constraintName});break;case "foreign_key":this.foreignKey(S(a),p.references?.table??"",S(p.references?.columns?.[0]??""),{constraintName:p.constraintName,onDelete:p.onDelete,onUpdate:p.onUpdate});break}});}dropColumn(t){this.nodes.push(new tr(t));}renameColumn(t,e){this.nodes.push(new or(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ht(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ze([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??H(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new J("unique",{columns:[t],constraintName:e?.constraintName??le(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=H(this.table,t,e);this.nodes.push(new ge(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??le(this.table,t);this.nodes.push(new ge(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Xe(t));}};var _e=class{constructor(t){if(this.sqlType=t||A.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new C(t)}rawQuery(t){this.queryStatements.push(t);}runFile(t){if(!ue.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=je.basename(t),r=je.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=ue.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 Ue(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a=new ir(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 pr(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 Me(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 ar(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new Me(t,[new Ge(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new be(t,true),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||eo(t,e.join("_")),n=new dr(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new mr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new Ze(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??le(t,o.join("_")),s=new J("unique",{columns:o,constraintName:n}),a=new Me(t,[new he(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=H(t,e,r),n=new ge(o),s=new Me(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)?le(t,e.join("_")):le(t,e),n=r?.constraintName??o,s=new ge(n),a=new Me(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Xe,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new J(...e),o=new Me(t,[new he(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ge(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}createExtension(t,e=true){let r=new lr(t,e),o=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAstInstance(t){return new b(t,this.sqlType)}};var fr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models);}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 u of m)u.columnName===d.columnName&&a.push(`fk.${n.table}.${u.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 yr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models),this.dropResolver=new fr(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 _e(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||Ie(o.table,o.columns[0]),l=this.sql.alterTable(o.table,d=>{let m=a||Ie(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=S(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=S(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,H(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=S(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||Ie(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 _e(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=S(t.relation.manyToManyOptions.throughModel),r=S(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=S(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,h=c.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=c?.databaseCaseConvention||"preserve";n=Q(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof n=="string"&&n){let p=c.getColumns(),y=p.find(h=>h.columnName===n);if(y)n=y.databaseName;else {let h=c.primaryKey||"id",w=p.find(_=>_.columnName===h);if(w)n=w.databaseName;else {let _=c?.databaseCaseConvention||"preserve";n=Q(n||h,_);}}}else {let p=c.primaryKey||"id",h=c.getColumns().find(w=>w.columnName===p);if(h)n=h.databaseName;else {let w=c?.databaseCaseConvention||"preserve";n=Q(p,w);}}}let s=this.models.find(c=>c.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(c=>c.columnName===l);if(d)l=d.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=Q(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=Q(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=S(c),y=a.find(h=>h.columnName===p);if(y)l=y.databaseName;else {let h=s?.databaseCaseConvention||"preserve";l=Q(p,h);}}let m=t.relation.onDelete?.toLowerCase(),u=t.relation.onUpdate?.toLowerCase();return this.sql.alterTable(t.table,c=>{let p=o||H(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:m,onUpdate:u});})}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};function hf(i){return i.replace(/\s+/g," ").trim()}function gf(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function ve(i,t){let e=hf(t.toLowerCase()),r=gf(e);switch(i){case "sqlite":{let o=[{test:n=>n==="increment",normalized:"integer"},{test:n=>n==="bigincrement",normalized:"integer"},{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":case "increment":return "integer";case "tinyint":return "tinyint";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":case "bigincrement":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":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":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}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}case "oracledb":{if(r.endsWith("clob")||r==="clob"||r==="nclob")return "clob";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("interval"))return "interval";switch(r){case "varchar2":case "nvarchar2":case "character varying":return "varchar2";case "char":case "nchar":case "character":return "char";case "number":case "numeric":case "decimal":case "integer":case "int":case "smallint":case "tinyint":case "mediumint":case "bigint":return "number";case "binary_float":case "float":case "real":return "binary_float";case "binary_double":case "double":case "double precision":return "binary_double";case "date":return "date";case "blob":case "raw":case "long raw":case "bytea":case "binary":case "varbinary":return "blob";case "json":case "jsonb":return "clob";case "boolean":case "bool":return "number";case "uuid":case "ulid":return "varchar2";default:return r}}default:return r}}var tt=class i{constructor(t){this.emptyStatements=[/alter table ".*"$/];this.sql=t,this.models=Object.values(this.sql.models),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(u=>u.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 u=S(m.constraintName);o.foreignKeys.find(p=>p.name===u)||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(u=>u.name===d.databaseName||u.name===d.columnName)||e.data.columnsToAdd.push({table:r.table,column:d});for(let d of o.columns)n.columns.some(u=>u.databaseName===d.name||u.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(u=>u.name===d.name&&u.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(u=>u.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(u=>u.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 u=!e.areColumnsEqual(m,d,o.indexes),c=e.getDefaultChange({table:r.table,dbColumns:m,modelColumn:d});(u||c)&&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 c=S(d.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:c,relation:{type:"belongsTo",model:()=>r,columnName:S(d.manyToManyOptions.leftForeignKey),foreignKey:d.manyToManyOptions.leftForeignKey,constraintName:d.constraintName?S(d.constraintName):H(c,S(d.manyToManyOptions.leftForeignKey||Oe(r.table)),r.table),onDelete:d.onDelete,onUpdate:d.onUpdate},onDelete:d.onDelete,onUpdate:d.onUpdate});continue}let m=S(d.constraintName);if(m&&o.foreignKeys.some(c=>c.name===m))continue;o.foreignKeys.find(c=>e.relationMatchesDbRelation(r,d,c))||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=S(d.foreignKey)||d.columnName,c=r.getColumns().find(p=>p.columnName===m)?.databaseName||m;return S(d.constraintName)||H(r.table,c,d.model().table)}));for(let d of o.foreignKeys){if(d.name&&a.has(d.name))continue;n.relations.find(u=>u.type!=="belongsTo"&&u.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,u,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(u=>e.relationMatchesDbRelation(r,d,u));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 yr(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=ve(n,t.dataType),a=typeof e.type=="string"?ve(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=S(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),m=d.primaryKey||"id",u=d.getColumns().find(y=>y.columnName===m),c=d.table,p=u?.databaseName||m;o=o&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=S(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?S(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=S(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),m=(n.type||"belongsTo")==="belongsTo"?S(n.foreignKey):n.columnName,u=l.find(h=>h.columnName===m);u&&(m=u.databaseName);let c=o.primaryKey||"id",y=o.getColumns().find(h=>h.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===m&&r.referencedColumns.length===1&&r.referencedColumns[0]===y}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=ve(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?ve(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=S(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),u=a.getColumns().find(P=>P.columnName===d);if(!m||!u)continue;let c=S(o.manyToManyOptions.leftForeignKey)||l,p=S(o.manyToManyOptions.rightForeignKey)||d,y=await this.sql.getTableSchema(n);if(!y.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(m,c),this.clonePkAsColumn(u,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:c,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let h=this.clonePkAsColumn(m,c),w=this.clonePkAsColumn(u,p),_=y.columns.find(P=>P.name===c),$=y.columns.find(P=>P.name===p),V=_?this.areColumnsEqual(_,h,y.indexes):false,R=$?this.areColumnsEqual($,w,y.indexes):false;for(let P of y.foreignKeys){let G=P.referencedTable===s.table,ne=P.referencedTable===a.table;if(!G&&!ne)continue;let Ve=G?c:p,Ae=P.columns[0];Ae&&Ae!==Ve&&(this.data.relationsToDrop.push({table:n,relation:P}),Ae!==c&&Ae!==p&&this.data.columnsToDrop.push({table:n,column:Ae}));}let O={};V||(O[h.databaseName]=h),R||(O[w.databaseName]=O[w.databaseName]||w);for(let P of Object.keys(O))this.data.columnsToAdd.push({table:n,column:O[P]});let x=this.buildBelongsToRelation(n,()=>s,c,l,void 0,o.onDelete,o.onUpdate),q=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),E=y.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===c),we=y.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!E){let P=y.foreignKeys.find(G=>G.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:n,relation:P}),this.data.relationsToAdd.push(x);}if(!we){let P=y.foreignKeys.find(G=>G.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(c=>c.columnName===l)?.databaseName||l,u=S(a.constraintName)||H(o.table,m,a.model().table);s.add(u);}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($=>$.columnName===w)?.databaseName||w;}let u=new Set([l,o.relation.columnName].filter(Boolean)),c=n.foreignKeys.some(h=>{if(h.columns.length!==1||h.referencedColumns.length!==1)return false;let w=u.has(h.columns[0]),_=h.referencedTable===d,$=h.referencedColumns[0]===m;return w&&_&&$}),p=S(o.relation.constraintName)||H(o.table,l,d),y=e.get(o.table)||new Set;if(c||p&&y.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let h=S(o.relation.manyToManyOptions.throughModel),w=S(o.relation.manyToManyOptions.leftForeignKey),_=S(o.relation.manyToManyOptions.rightForeignKey),$=o.table===h&&o.relation.columnName===w&&o.relation.model().table===s?.table,V=o.table===h&&o.relation.columnName===_&&o.relation.model().table!==s?.table,R=await this.sql.getTableSchema(h),O=R.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===w&&q.referencedTable===(s?.table||"")),x=R.foreignKeys.some(q=>q.columns.length===1&&q.columns[0]===_&&q.referencedTable===o.relation.model().table);if($&&O||V&&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 u=a.find(w=>w.columnName===d.foreignKey)?.databaseName||d.foreignKey,c=d.model(),p=c.primaryKey||"id",h=c.getColumns().find(w=>w.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===u&&o.relation.referencedTable===c.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?S(n):H(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 Te=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var L=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var F=class extends N{constructor(e,r=[],o,n=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=o,this.disableReturning=n;}};var de=class extends N{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 te=class extends N{constructor(e,r=[],o=[],n=false){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o;}};var M=class extends N{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 Ee=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var re=class extends M{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 N{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 hr=class extends 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);});}},tp=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool();if(o)return new Promise((d,m)=>{n.run(i,t,function(u){u&&m(u),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,m)=>{n.all(i,t,(u,c)=>{u&&m(u),(!c||!c.length)&&d([]),d(c);});});let s=r?.typeofModel;if(!s)return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.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((u,c)=>{n.run(i,t,function(p){if(p)return c(p);let y=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){u([y]);return}let h=y?.[a]||this.lastID;if(!h)return c(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let w=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(w,[h],(_,$)=>{if(_)return c(_);u([$]);});});});if(!Array.isArray(r.models))throw new T("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((u,c)=>{n.run(i,t,function(p){if(p)return c(p);u(d);});});let m=[];return new Promise(async(u,c)=>{try{let p=d.map(async y=>{let h=new f(s),{columns:w,values:_}=await h.prepareColumns(Object.keys(y),Object.values(y),"insert"),$=Object.fromEntries(w.map((x,q)=>[x,_[q]])),V=new b(s,e.getDbType()),{sql:R,bindings:O}=V.parse([new F(new L(s.table),[$])]);return new Promise((x,q)=>{n.run(R,O,function(E){if(E)return q(E);let we=y[a]||this.lastID;if(!we)return q(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let P=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(P,[we],(G,ne)=>{if(G)return q(G);x(ne);});});})});m=await Promise.all(p),u(m);}catch(p){c(p);}})}return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.message)):d(this.changes);});})};var Tf=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,Nf=/^\d{4}-\d{2}-\d{2}$/,Oa=i=>typeof i!="string"?i:Tf.test(i)?new Date(i.replace(" ","T")+"Z"):Nf.test(i)?new Date(i+"T00:00:00Z"):i,wf=async i=>new Promise((t,e)=>{if(i.type===2017){let o="";i.setEncoding("utf8"),i.on("data",n=>{o+=n;}),i.on("end",()=>t(o)),i.on("error",e);}else {let o=[];i.on("data",n=>{o.push(n);}),i.on("end",()=>t(Buffer.concat(o))),i.on("error",e);}}),rp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await wf(r):t[e]=r;}return t};var j=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||Z(i,e.logs,t),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await bt(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?a[0].affectedRows:o==="raw"?a:a[0];case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool(),d=await bt(()=>l.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?d.rows:o==="raw"?d:d.rowCount;case "sqlite":let m=await bt(()=>tp(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="raw"?Array.isArray(m)?m:[m]:m;case "mssql":let u=e.getPool(),c=e.sqlConnection?e.sqlConnection.request():u.request();t.forEach((V,R)=>{c.input(`p${R}`,V);});let p=0,y=i.replace(/\?|@(\d+)/g,()=>`@p${p++}`),h=await bt(()=>c.query(y),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?h.rowsAffected[0]:o==="raw"?h:h.recordset;case "oracledb":let w=4002,_=null,$=!!e.sqlConnection;try{_=e.sqlConnection?e.sqlConnection:await e.getConnection();let V=t.map(Oa),R=await bt(()=>_.execute(i,V,{outFormat:w,autoCommit:!$}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?R.rowsAffected:o==="raw"?R:await Promise.all(R.rows?.map(async x=>{let q=await rp(x),E={};for(let we in q)E[we.toLowerCase()]=q[we];return E})??[])}finally{_&&!$&&await _.close();}default:throw new T("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},br=async(i,t,e,r={},o)=>{let n=e.type;switch(n){case "mariadb":case "mysql":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),m=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),u=0,c=false,p=false,y=()=>{try{a.release();}catch{}};return m.on("data",h=>{if(o.onData){u++,Promise.resolve(o.onData(l,h)).then(()=>{u--,c&&u===0&&!p&&(y(),l.end());}).catch(w=>{p=true,y(),l.destroy(w);});return}l.write(h);}),m.on("end",()=>{c=true,u===0&&!p&&(y(),l.end());}),m.on("error",h=>{p=true,y(),l.destroy(h);}),l.on("close",()=>{y();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new B("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),m=new l.default(i,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),u=a.query(m),c=0,p=false,y=false,h=w=>{try{a.release(w);}catch{}};return u.on("data",w=>{if(o.onData){c++,Promise.resolve(o.onData(d,w)).then(()=>{c--,p&&c===0&&!y&&(h(),d.end());}).catch(_=>{y=true,h(_),d.destroy(_);});return}d.write(w);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),d.end());}),u.on("error",w=>{y=true,h(w),d.destroy(w);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new hr(s,i,t,{onData:o.onData})}case "mssql":{let s=e.sqlConnection??e.getPool(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),l=s.request();l.stream=true,t.forEach((y,h)=>{l.input(`p${h}`,y);});let d=0,m=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),u=0,c=false,p=false;return l.on("row",y=>{if(!p){if(o.onData){u++,Promise.resolve(o.onData(a,y)).then(()=>{u--,c&&u===0&&!p&&a.end();}).catch(h=>{p=true,a.destroy(h);});return}a.write(y);}}),l.on("error",y=>{p=true,a.destroy(y);}),l.on("done",()=>{c=true,u===0&&!p&&a.end();}),l.query(m),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=4002,m=t.map(Oa),u=a.queryStream(i,m,{outFormat:d}),c=0,p=false,y=false,h=async()=>{try{await a.close();}catch{}};return u.on("data",w=>{if(y)return;let _={};for(let $ in w)_[$.toLowerCase()]=w[$];if(o.onData){c++,Promise.resolve(o.onData(l,_)).then(()=>{c--,p&&c===0&&!y&&(h(),l.end());}).catch($=>{y=true,h(),l.destroy($);});return}l.write(_);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),l.end());}),u.on("error",w=>{y=true,h(),l.destroy(w);}),l}default:throw new T("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function bt(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++,La(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var K=(i,t="millis",e=3)=>async(...r)=>{let o=performance.now(),n=await i(...r),s=performance.now()-o;return [(t==="millis"?s:s/1e3).toFixed(e),n]};var X=class extends N{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 Tt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Ut(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 T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Tr(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 op(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var rt=i=>typeof i=="number"?i:parseFloat(i);var We=class extends N{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 Nr=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var wr=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Be=class extends N{constructor(e,r,o,n="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=o,this.jsonOperator=n,this.isRawValue=s;}};var oe=class extends N{constructor(e,r,o,n="inner",s,a=false,l){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,this.additionalConditions=l;}};var Nt=class extends N{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 Sr=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var qr=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var wt=class extends N{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 Mr=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 Nt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Nt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new wt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new wt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Sr(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new qr(t),this}};var Fe=class i{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new M(t,"and",false,o,n)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new M(t,"or",false,o,n)),this}whereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new M(t,"and",true,o,n)),this}andWhereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new M(t,"and",true,o,n)),this}orWhereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new M(t,"or",true,o,n)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new M(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new M(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new M(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new M(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new M(t,"and",false,"in",e)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",false,"in",e)),this):(this.whereNodes.push(new M("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"and",true,"in",e)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",true,"in",e)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new M(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new M(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new M(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new M(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ee(r,"and")),this}orWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ee(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new M(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new M(t,"or",true,"=",e??[],true)),this}};var _r=class extends Mr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new oe(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new oe(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new oe(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new oe(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new oe(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new oe(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o,n){let s=r,a=o,l=typeof o=="function"?o:n;if(!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let m=new Fe(this.sqlDataSource);l(m),d=m.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,d)),this}leftJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let m=new Fe(this.sqlDataSource);l(m),d=m.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,d)),this}rightJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let m=new Fe(this.sqlDataSource);l(m),d=m.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,d)),this}fullJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let m=new Fe(this.sqlDataSource);l(m),d=m.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,d)),this}};var Cr=class extends _r{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.modelAnnotatedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],e.map(o=>Q(o,this.model.databaseCaseConvention)).forEach(o=>{this.selectNodes.push(new X(o));}),this}selectRaw(e){return this.selectNodes.push(new X(e,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new L(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 X(s,a,n)),this.modelAnnotatedColumns.push(a),this}from(e){return this.fromNode=new L(e),this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new Nr,this}distinctOn(...e){return this.distinctOnNode=new wr(e),this}selectJson(e,r,o){return this.selectNodes.push(new Be(e,r,o,"extract")),this.modelAnnotatedColumns.push(o),this}selectJsonText(e,r,o){return this.selectNodes.push(new Be(e,r,o,"extract_text")),this.modelAnnotatedColumns.push(o),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new Be(e,r,o,"array_length")),this.modelAnnotatedColumns.push(o),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new Be(e,r,o,"object_keys")),this.modelAnnotatedColumns.push(o),this}selectJsonRaw(e,r){return this.selectNodes.push(new Be(e,"",r,"raw",true)),this.modelAnnotatedColumns.push(r),this}};var Rr=class extends Cr{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 v&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof v||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 v&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof v||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof v)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new M(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 v&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof v||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof v)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new M(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 v&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof v||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof v)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new M(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 v&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof v||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof v)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new M(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 v&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof v||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof v)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new M(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 M(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new M(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 M(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new M(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 M(e,"and",false,"in",r)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",false,"in",r)),this):(this.whereNodes.push(new M("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 M(e,"and",true,"in",r)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",true,"in",r)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new M(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new M(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new M(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new M(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 M(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 M(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof v?e:new v(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 v?e:new v(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 v?e:new v(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 v?e:new v(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 M(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new M(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 We(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 We(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new We(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new We(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof v)return e;let r=new v(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 v(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Ee(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new v(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Ee(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Ar=class extends Rr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new re(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new re(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new re(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new re(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new re(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new re(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new re(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new re(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new re(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new re(t,"or",false,"raw",e)),this}};var v=class i extends Ar{constructor(e,r=De.instance){super(e,r);this.isNestedCondition=false;this.mustRemoveAnnotations=false;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.truncateNode=null;this.replicationMode=null;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),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType),this.interpreterUtils=new f(this.model);}setReplicationMode(e){return this.replicationMode=e,this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>j(e,r,o,this.dbType,"rows",{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 T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async firstOrFail(){return this.oneOrFail()}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await br(r,o,n,e,{onData:(a,l)=>{a.write(l);}}))}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:op(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 X(o.extractQueryNodes(),r)),this}return this.selectNodes.push(new X(e.extractQueryNodes(),r)),this}lockForUpdate(e={}){return this.lockQueryNodes.push(new gt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new gt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Le(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Le(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Le(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Le(o,true)),this}async increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}async decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.clearForFunctions(),this.annotate("count",e,"total");let r=await this.one();return r?rt(r.total):0}async getMax(e){this.clearForFunctions(),this.annotate("max",e,"total");let r=await this.one();return r?rt(r.total):0}async getMin(e){this.clearForFunctions(),this.annotate("min",e,"total");let r=await this.one();return r?rt(r.total):0}async getAvg(e){this.clearForFunctions(),this.annotate("avg",e,"total");let r=await this.one();return r?rt(r.total):0}async getSum(e){this.clearForFunctions(),this.annotate("sum",e,"total");let r=await this.one();return r?rt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let o=this.clone(),n=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>n.many(),()=>o.getCount("*"));return {paginationMetadata:Tr(e,r,a),data:s}}from(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::from","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource);e(o);let n=o.extractQueryNodes();return this.fromNode=new L(n,r),this}return this.fromNode=new L(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 et("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 et("recursive",e,n)),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("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 et("materialized",e,n)),this}async insert(e,r){let{columns:o,values:n}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),s=Object.fromEntries(o.map((u,c)=>[u,n[c]]));this.insertNode=new F(this.fromNode,[s],r);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});return Array.isArray(m)&&m.length?m[0]:m}async insertMany(e,r){if(!e.length)return [];let o=await Promise.all(e.map(async l=>{let{columns:d,values:m}=await this.interpreterUtils.prepareColumns(Object.keys(l),Object.values(l),"insert");return Object.fromEntries(d.map((u,c)=>[u,m[c]]))}));this.insertNode=new F(this.fromNode,o,r);let{sql:n,bindings:s}=this.astParser.parse([this.insertNode]),a=await this.getSqlDataSource("write");return j(n,s,a,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:o}})}async upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),d=Object.fromEntries(a.map((y,h)=>[y,l[h]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,n,o,[e]);let{sql:m,bindings:u}=this.astParser.parse([new F(new L(this.model.table),[d],void 0,true),new de(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),p=await j(m,u,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(p)?p:[p]}async upsertMany(e,r,o,n={updateOnConflict:true}){let s=[];if(await Promise.all(o.map(async u=>{let{columns:c,values:p}=await this.interpreterUtils.prepareColumns(Object.keys(u),Object.values(u),"insert"),y=Object.fromEntries(c.map((h,w)=>[h,p[w]]));s.push(y);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(s,e,r,n,o);let{sql:a,bindings:l}=this.astParser.parse([new F(new L(this.model.table),s,void 0,true),new de(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(m)?m:[m]}async executeMssqlMergeRaw(e,r,o,n,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),d=E=>this.interpreterUtils.formatStringColumn("mssql",E),m=[],u=e.map(E=>`select ${a.map(P=>(m.push(E[P]),`@${m.length}`)).join(", ")}`),c=a.map(d).join(", "),p=u.join(" union all "),y=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),h=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),w=a.map(d).join(", "),_=a.map(E=>`source.${d(E)}`).join(", "),$=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),R=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",O=`merge into ${l} as target using (${p}) as source (${c}) on ${y} ${R} when not matched then insert (${w}) values (${_}) output ${$};`,x=await this.getSqlDataSource("write"),q=await j(O,m,x,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(q)?q:[q]}async update(e){let r=Object.keys(e),o=Object.values(e),{columns:n,values:s}=await this.interpreterUtils.prepareColumns(r,o,"update");this.updateNode=new te(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async truncate(){this.truncateNode=new be(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await j(e,r,o,this.dbType,"rows");}async delete(){this.deleteNode=new Te(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),o=await this.getSqlDataSource("write");return j(e,r,o,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async softDelete(e={}){let{column:r="deletedAt",value:o=pe()}=e||{},{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new te(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}toQuery(){let{sql:e,bindings:r}=this.unWrap();return Xa(e,r)}unWrap(){this.selectNodes.length||(this.selectNodes=[new X("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes()),o=Qt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=W(this.modelSelectedColumns),e.modelAnnotatedColumns=W(this.modelAnnotatedColumns),e.distinctNode=W(this.distinctNode),e.distinctOnNode=W(this.distinctOnNode),e.selectNodes=W(this.selectNodes),e.withQuery=W(this.withQuery),e.joinNodes=W(this.joinNodes),e.whereNodes=W(this.whereNodes),e.groupByNodes=W(this.groupByNodes),e.havingNodes=W(this.havingNodes),e.orderByNodes=W(this.orderByNodes),e.lockQueryNodes=W(this.lockQueryNodes),e.unionNodes=W(this.unionNodes),e.withNodes=W(this.withNodes),e.fromNode=W(this.fromNode),e.limitNode=W(this.limitNode),e.offsetNode=W(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e.mustRemoveAnnotations=this.mustRemoveAnnotations,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.from(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new X("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?[this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.deleteNode?[this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.truncateNode?[this.truncateNode]:[...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 K(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await K(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 K(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await K(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await K(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await K(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await K(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let o=await e(),n=await r();return [o,n]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let o=await this.getSqlDataSource(e);if(!(o!==this.sqlDataSource))return r(o);try{return await r(o)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,type:o.getDbType()}),await r(this.sqlDataSource);throw a}}};var ot=class i extends v{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),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.sqlModelManagerUtils=new Tt(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 T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async firstOrFail(e){return this.oneOrFail(e)}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a,this.model));if(!o.length)return [];let n=await fe(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={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let{sql:r,bindings:o}=this.unWrap(),n=await this.getSqlDataSource("read");return await br(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l,this.model),m=await fe([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));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new T(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}async insert(...e){return this.model.insert(...e)}async insertMany(...e){return this.model.insertMany(...e)}async update(e,r={}){return r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),super.update(e)}async softDelete(e={}){let{ignoreBeforeUpdateHook:r=false}=e||{};return !r&&await this.model.beforeUpdate?.(this),super.softDelete(e)}async delete(e={}){return e.ignoreBeforeDeleteHook||await 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.clone(),s=this.limit(r).offset((e-1)*r),a=o.ignoreHooks?["beforeFetch","afterFetch"]:[],[l,d]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:Tr(e,r,d),data:l}}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],this.selectNodes=this.selectNodes.concat(e.map(r=>new X(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 X(s,a,n)),this.modelAnnotatedColumns.push(a),this}selectJson(e,r,o){return super.selectJson(e,r,o),this}selectJsonText(e,r,o){return super.selectJsonText(e,r,o),this}selectJsonArrayLength(e,r,o){return super.selectJsonArrayLength(e,r,o),this}selectJsonKeys(e,r,o){return super.selectJsonKeys(e,r,o),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),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=W(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 T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(c=>{let p=c[e.foreignKey];p&&n.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let y=n.get(String(p));c[e.columnName]=y||null;});break;case "belongsTo":let s=new Map;o.forEach(c=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&s.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let y=s.get(String(p));c[e.columnName]=y||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let y=String(p);a.has(y)||a.set(y,[]),a.get(y).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=a.get(String(p))||[];c[e.columnName]=y;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,m=l.leftForeignKey,u=this.modelColumnsMap.get(m)||this.modelColumnsDatabaseNames.get(m)||Q(m,this.model.modelCaseConvention);o.forEach(c=>{let p=c.$annotations||{},y=p[u];if(y==null)return;let h=String(y);d.has(h)||d.set(h,[]),this.modelAnnotatedColumns.includes(u)||(delete p[u],Object.keys(p).length||delete c.$annotations),d.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=d.get(String(p))||[];c[e.columnName]=y;});break;default:throw new T(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=Se.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 u=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&&u.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&u.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(q=>Xr(q,d,e.model.table));return u.select(...c).from(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let y=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(!y&&!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 _=Se.randomBytes(6).toString("hex"),$=`${r.model.table}_cte_${_}`,V=e.orderByNodes.map(q=>{if(q.isRawValue)return q.column;let E=q.column.includes(".")?q.column:`${r.model.table}.${q.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${q.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Se.randomBytes(6).toString("hex")}_left_foreign_key`,O=e.with($,q=>q.select(...w).annotate(`${p.throughModel}.${p.leftForeignKey}`,R).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${V}) as rn_${_}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));y&&O.whereRaw(`rn_${_} <= ${y+(h||0)}`),h&&O.whereRaw(`rn_${_} > ${h}`);let x=w.map(q=>Xr(q,$,e.model.table));return O.select(...x).annotate(`${$}.${R}`,p.leftForeignKey).from($);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(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 T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new T(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 T(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 T(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 u=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${c}`),o&&typeof n=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e,r){let o={},n={},s=new Set(this.modelAnnotatedColumns);return Object.entries(e).forEach(([a,l])=>{let d=Q(a,r.modelCaseConvention),m=s.has(d)||s.has(a),u=a==="$annotations"||this.modelColumnsDatabaseNames.get(a);if(m&&(n[d]=l),u){o[a]=l;return}m||(n[d]=l);}),o.$annotations=n,o}async manyWithPerformance(e={},r="millis"){let[o,n]=await K(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await K(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await K(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 K(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 K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await K(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}};var xr=class extends ot{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new F(this.fromNode,[o],r?.returning),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new F(this.fromNode,o,r?.returning),this}update(...t){let[e]=t;return this.updateNode=new te(this.fromNode,Object.keys(e),Object.values(e)),this}delete(...t){let[e]=t;return e?.ignoreBeforeDeleteHook||this.model.beforeDelete?.(this),this.deleteNode=new Te(this.fromNode),this}truncate(){return this.truncateNode=new be(this.fromNode),this}softDelete(...t){let[e]=t,{column:r="deletedAt",value:o=pe()}=e||{};return this.updateNode=new te(this.fromNode,[r],[o]),this}};var St=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ul(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}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 T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(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}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),n={};r.forEach((u,c)=>{let p=o[c];n[u]=p,t[u]??(t[u]=p);});let{sql:s,bindings:a}=this.astParser.parse([new F(new L(this.model.table),[n],e.returning)]),l=await j(s,a,this.sqlDataSource,this.sqlType,"rows",{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?(await this.model.afterFetch?.([d]),await fe([d],this.model)):t}async insertMany(t,e={}){if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let d=this.model.primaryKey,m=Object.keys(t[0]||{});if(d&&!m.includes(d))return this.handleOracleIdentityInsert(t,e)}let r=[];for(let d of t){let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c={};m.forEach((p,y)=>{let h=u[y];c[p]=h,d[p]??(d[p]=h);}),r.push(c);}let{sql:o,bindings:n}=this.astParser.parse([new F(new L(this.model.table),r,e.returning)]),s=await j(o,n,this.sqlDataSource,this.sqlType,"rows",{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?(await this.model.afterFetch?.(a),await fe(a,this.model)||[]):[]}async upsertMany(t,e,r,o={updateOnConflict:true}){let n=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async d=>{let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c=Object.fromEntries(m.map((p,y)=>[p,u[y]]));n.push(c);})),this.sqlType==="mssql")return this.executeMssqlMerge(n,t,e,o,r);let{sql:s,bindings:a}=this.astParser.parse([new F(new L(this.model.table),n,void 0,true),new de(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",o.returning)]);return await j(s,a,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}})}async executeMssqlMerge(t,e,r,o,n){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=x=>this.interpreterUtils.formatStringColumn("mssql",x),d=[],m=t.map(x=>`select ${s.map(E=>(d.push(x[E]),`@${d.length}`)).join(", ")}`),u=s.map(l).join(", "),c=m.join(" union all "),p=e.map(x=>`target.${l(x)} = source.${l(x)}`).join(" and "),y=r.filter(x=>!e.includes(x)).map(x=>`target.${l(x)} = source.${l(x)}`).join(", "),h=s.map(l).join(", "),w=s.map(x=>`source.${l(x)}`).join(", "),_=o.returning&&o.returning.length?o.returning.map(x=>`inserted.${l(x)}`).join(", "):s.map(x=>`inserted.${l(x)}`).join(", "),V=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",R=`merge into ${a} as target using (${c}) as source (${u}) on ${p} ${V} when not matched then insert (${h}) values (${w}) output ${_};`;return await j(R,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}})}async updateRecord(t,e){let{columns:r,values:o}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"update"),{primaryKey:n}=this.model;if(!n)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let s=r.indexOf(n);s!==-1&&(r.splice(s,1),o.splice(s,1));let{sql:a,bindings:l}=this.astParser.parse([new te(new L(this.model.table),r,o),new M(n,"and",false,"=",t[n])]);await j(a,l,this.sqlDataSource,this.sqlType,"affectedRows");let d=await this.findOneByPrimaryKey(t[this.model.primaryKey],e?.returning??void 0);if(!d)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return d}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new M(this.model.primaryKey,"and",false,"=",t[this.model.primaryKey]),{sql:r,bindings:o}=this.astParser.parse([new Te(new L(this.model.table)),e]);await j(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new ot(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}dryQuery(){return new xr(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 fe([a],this.model):null}return await fe(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}async handleOracleIdentityInsert(t,e){let r=[],o=this.model.primaryKey;for(let n of t){let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(n),Object.values(n),"insert"),l={};s.forEach((p,y)=>{let h=a[y];l[p]=h,n[p]??(n[p]=h);});let{sql:d,bindings:m}=this.astParser.parse([new F(new L(this.model.table),[l],e.returning)]);await j(d,m,this.sqlDataSource,this.sqlType,"rows");let u=this.query().select(...e.returning||["*"]);for(let[p,y]of Object.entries(l))y!=null&&p!==o&&u.where(p,"=",y);o&&u.orderBy(o,"desc");let c=await u.one({ignoreHooks:["beforeFetch"]});c?(o&&c[o]&&(n[o]=c[o]),r.push(c)):r.push(n);}return await this.model.afterFetch?.(r),r}};var Pr=class extends v{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new F(this.fromNode,[o],r),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new F(this.fromNode,o,r),this}upsert(...t){let[e,r,o]=t,n=Object.keys(e),s=Object.keys(r);return this.insertNode=new F(new L(this.model.table),[e],void 0,true),this.onDuplicateNode=new de(this.model.table,s,n,o?.updateOnConflict??true?"update":"ignore",o?.returning),this}upsertMany(...t){let[e,r,o,n]=t,s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new F(new L(this.model.table),s,void 0,true),this.onDuplicateNode=new de(this.model.table,e,r,n?.updateOnConflict??true?"update":"ignore",n?.returning),this}update(t){return this.updateNode=new te(this.fromNode,Object.keys(t),Object.values(t)),this}delete(){return this.deleteNode=new Te(this.fromNode),this}truncate(){return this.truncateNode=new be(this.fromNode),this}softDelete(t={}){let{column:e="deletedAt",value:r=pe()}=t||{};return this.updateNode=new te(this.fromNode,[e],[r]),this}};var $a=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??pe()});var qt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Se.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 "mssql":await this.sql.rawQuery(`SAVE TRANSACTION ${e}`),this.isActive=true;return;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":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 "mssql":t&&await this.sql.rawQuery(t),Z("BEGIN TRANSACTION",this.sql.logs);let e=await this.getMssqlTransactionLevel();await this.sql.sqlConnection.begin(e),this.isActive=true;break;case "mysql":case "mariadb":t&&await this.sql.rawQuery(t);let r=this.sql.sqlConnection;Z("BEGIN TRANSACTION",this.sql.logs),await r.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;case "oracledb":t&&await this.sql.rawQuery(t),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":case "oracledb":break;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 "mssql":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("COMMIT",this.sql.logs),await e.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break;case "oracledb":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mssql":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("ROLLBACK",this.sql.logs),await e.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;case "oracledb":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;case "oracledb":await this.sql.sqlConnection.close();break;default:throw new T("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){g.error(t);}await this.sql.closeConnection(),this.sql.sqlConnection=null,this.connectionReleased=true;}}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("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==="oracledb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}async getMssqlTransactionLevel(){if(!this.isolationLevel)return;let t=await import('mssql').then(e=>e.default.ISOLATION_LEVEL).catch(e=>{throw g.error(e),new B("mssql")});switch(this.isolationLevel){case "READ UNCOMMITTED":return t.READ_UNCOMMITTED;case "READ COMMITTED":return t.READ_COMMITTED;case "REPEATABLE READ":return t.REPEATABLE_READ;case "SERIALIZABLE":return t.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var me,Re=class Re extends Bt{constructor(e){super(e);this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Et;this.migrationConfig={path:A.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:jr(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(o=>new Re(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure;}getOnSlaveServerFailure(){return this.onSlaveServerFailure}static get instance(){if(!ke(this,me))throw new T("SqlDataSource::instance","CONNECTION_NOT_ESTABLISHED");return ke(this,me)}static async connectToSecondarySource(e,r){let o=new Re(e);await o.connectWithoutSettingPrimary();let n=o;return await r?.(n),n}static async useConnection(e,r){let o=new Re(e);await o.connectWithoutSettingPrimary();let n=o;try{await r(n),o.isConnected&&await o.closeConnection();}catch(s){throw o.isConnected&&await o.closeConnection(),s}}static async closeConnection(){if(!ke(this,me)){g.warn("Connection already closed");return}await ke(this,me).closeConnection(),kr(this,me,null);}static async disconnect(){return this.closeConnection()}static async startGlobalTransaction(e){return this.instance.startGlobalTransaction(e)}static async commitGlobalTransaction(){await this.instance.commitGlobalTransaction();}static async rollbackGlobalTransaction(){await this.instance.rollbackGlobalTransaction();}static get isInGlobalTransaction(){return !!ke(this,me)?.globalTransaction}async connect(){if(ke(Re,me))throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.sqlPool=await Qe(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Qe(e.sqlType,e.inputDetails),e.ownsPool=true;})),kr(Re,me,this);}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){return this._models}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}async useCache(e,r,...o){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=n.length,a=typeof r=="number"&&s===o.length,l,d=[];a?(l=r,d=o):(l=void 0,d=r!==void 0?[r,...o]:o);let m=Fr(JSON.stringify(d)),u=m?`${e}:${m}`:e,c=await this.cacheAdapter.get(u);if(c!==void 0)return c;let p=await n(...d);return await this.cacheAdapter.set(u,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(o.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=Fr(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new Re(this.inputDetails);return r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Qe(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}query(e,r){let o=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this,n=new v($a(e,r),o);return r?.alias&&n.from(e,r.alias),n}dryQuery(e,r){return new Pr($a(e,r),this)}alterTable(...e){let r=new _e(this.getDbType());return r.alterTable(...e),r.queryStatements}createTable(...e){let r=new _e(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 qt(r,e?.isolationLevel),await this.globalTransaction.startTransaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.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;if(this.globalTransaction?.isActive){if(typeof e=="function")try{await this.globalTransaction.nestedTransaction(e);return}catch(l){throw l}return await this.globalTransaction.nestedTransaction()}let n=await this.clone();n.sqlConnection=await n.getConnection();let s=new qt(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 T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new St(e,this.globalTransaction.sql):new St(e,this)}getPool(){if(!this.sqlPool)throw new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new T("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;case "mssql":return this.sqlPool.transaction();case "oracledb":return await this.sqlPool.getConnection();default:throw new T("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async closeConnection(){if(!this.isConnected){Z("Connection already closed or not established",this.logs);return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::closeConnection - Error while rolling back global transaction");}switch(await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.closeConnection();}catch(r){g.warn(`SqlDataSource::closeConnection - Error while closing slave connection: ${r.message}`);}})),Z("Closing connection",this.logs),this.sqlType){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;case "mssql":await this.sqlPool.close();break;case "oracledb":await this.sqlPool.close();break;default:throw new T("SqlDataSource::closeConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}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"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await tt.makeDiff(this)).getSqlStatements();if(!o.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);g.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),g.info(`Synced schema with ${o.length} SQL statements`);}async rawQuery(e,r=[],o){if(!this.isConnected)throw new T("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");let n=Qt(this,e);return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async a=>j(n,r,a,this.getDbType(),"raw")):j(n,r,this,this.getDbType(),"raw")}rawStatement(e){return new C(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 za(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Wr(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Ga(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Zt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(a){if(pt(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=ve(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=ve(s,d),u=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,c=typeof u=="string"?u.toLowerCase()!=="no":typeof u=="boolean"?u:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,y=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:c,defaultValue:p,length:y,precision:h,scale:w,withTimezone:_}})}async getIndexInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gt(e)]).sql,n=this.getDbType(),s=[];try{s=await this.rawQuery(o);}catch(l){if(pt(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,u=d.Non_unique===0,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.Column_name),l.set(m,c);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let m=d.index_name,u=!!d.is_unique,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.column_name),l.set(m,c);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,m=!!l.unique,c=(await this.rawQuery(`PRAGMA index_info(${d})`)).map(p=>p.name);a.push({name:d,columns:c,isUnique:m});}return a}async getForeignKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(pt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let m=Number(d.id),u=l.get(m)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};u.columns.push(String(d.from)),u.referencedColumns.push(String(d.to)),l.set(m,u);}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}`,u=a.get(m)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};u.columns.push(String(l.column_name)),u.referencedColumns.push(String(l.referenced_column)),a.set(m,u);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(pt(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 acquireLock(e="hysteria_lock",r=3e4){let o=this.getDbType();try{switch(o){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[n])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let n=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,n]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "oracledb":try{let n=this.hashStringToLockId(e);return await this.rawQuery(`BEGIN DBMS_LOCK.ALLOCATE_UNIQUE('${e}', '${n}'); END;`),(await this.rawQuery(`DECLARE
|
|
289
289
|
v_result NUMBER;
|
|
290
290
|
BEGIN
|
|
291
291
|
v_result := DBMS_LOCK.REQUEST(
|
|
@@ -308,7 +308,7 @@ ORDER BY ordinal_position`,bindings:[]}}},Wu=new _i;var Ci=class{toSql(t){let e=
|
|
|
308
308
|
ELSE
|
|
309
309
|
:result := 0;
|
|
310
310
|
END IF;
|
|
311
|
-
END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.error(`Failed to release lock: ${n.message||JSON.stringify(o)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}hashStringToLockId(e){let r=0;for(let o=0;o<e.length;o++){let n=e.charCodeAt(o);r=(r<<5)-r+n,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(o){let n=o instanceof Error?o:new Error(String(o));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(n,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw n}}async connectWithoutSettingPrimary(){this.sqlPool=await
|
|
311
|
+
END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.error(`Failed to release lock: ${n.message||JSON.stringify(o)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}hashStringToLockId(e){let r=0;for(let o=0;o<e.length;o++){let n=e.charCodeAt(o);r=(r<<5)-r+n,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(o){let n=o instanceof Error?o:new Error(String(o));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(n,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw n}}async connectWithoutSettingPrimary(){this.sqlPool=await Qe(this.sqlType,this.inputDetails),this.ownsPool=true;}};me=new WeakMap,Ka(Re,me,null);var De=Re;var xe=class{constructor(t){this.migrationTable="migrations";this.sql=t||De.instance;}async upMigrations(t){for(let e of t){g.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){g.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 e=new Date,r=this.sql.getDbType()==="oracledb"?e:e.toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.query(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.query(this.migrationTable).where("name",t.migrationName).delete();}};async function Mt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Rolling back migrations for database type: "+n);try{let l=await It(n,i.getPool()),d=await $t(n,e,r),m=l.map(p=>p.name),u=d.filter(p=>m.includes(p.migrationName));if(u.length===0){g.info("No pending migrations.");return}if(t){let p=u.findIndex(w=>w.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let y=u.slice(p);s&&(a=await i.startTransaction(),i=a.sql),await new xe(i).downMigrations(y),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}let c=new xe(i);s&&(a=await i.startTransaction(),i=a.sql),await c.downMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Dr=class{static async generate(t){return `import { Migration } from "hysteria-orm";
|
|
312
312
|
|
|
313
313
|
export default class extends Migration {
|
|
314
314
|
async up() {
|
|
@@ -317,7 +317,7 @@ ${t.map(r=>` this.schema.rawQuery('${r.replace(/\\/g,"\\\\").replace(/'/g,"\\
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
async down() {}
|
|
320
|
-
}`}};var
|
|
320
|
+
}`}};var Or=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",o=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,o==="SqlDataSource"?"sql":o):`
|
|
321
321
|
import { ${o} } from "hysteria-orm";
|
|
322
322
|
|
|
323
323
|
const db = new ${o}({
|
|
@@ -357,7 +357,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
357
357
|
password: "root",
|
|
358
358
|
username: "default",
|
|
359
359
|
db: 0,
|
|
360
|
-
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;case "oracledb":return 1521;default:return 3306}}};async function Ir(i,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(g.info("Sql ran successfully"),e){let n=
|
|
360
|
+
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;case "oracledb":return 1521;default:return 3306}}};async function Ir(i,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(g.info("Sql ran successfully"),e){let n=je.dirname(e);ue.existsSync(n)||ue.mkdirSync(n,{recursive:true}),ue.writeFileSync(e,JSON.stringify(o,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(o,null,2)),await t.disconnect();}var $r=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
361
361
|
|
|
362
362
|
export default class extends BaseSeeder {
|
|
363
363
|
/**
|
|
@@ -367,7 +367,7 @@ export default class extends BaseSeeder {
|
|
|
367
367
|
console.log('Seeder completed');
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
|
-
`}};var
|
|
370
|
+
`}};var _f=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;ue.existsSync(r)||(ue.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=je.join(r,s),l=$r.seederTemplate();ue.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},np=_f;var Cf=async(i,t,e)=>{let r=[];for(let o of t){let n=je.resolve(process.cwd(),o);ue.existsSync(n)||(g.error(`Path not found: ${n}`),process.exit(1));let s=ue.statSync(n);if(s.isDirectory()){let a=ue.readdirSync(n).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:n});}else if(s.isFile()){let a=je.basename(n),l=je.dirname(n);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(g.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){g.info("No seeders found");return}g.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:o,folder:n}of r)try{g.info(`Running seeder: ${o}`);let s=je.resolve(n,o),a=await ie(s,e);if(!a.default){g.error(`Seeder ${o} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){g.error(`Seeder ${o} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),g.info(`\u2713 Completed seeder: ${o}`);}catch(s){throw g.error(`Failed to run seeder ${o}: ${s}`),s}g.info("All seeders completed successfully");},sp=Cf;var ap=()=>ue.existsSync(je.join(process.cwd(),"yarn.lock"))?["yarn","add"]:ue.existsSync(je.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:ue.existsSync(je.join(process.cwd(),"package-lock.json"))?["npm","install"]:ue.existsSync(je.join(process.cwd(),"bun.lockb"))?["bun","add"]:ue.existsSync(je.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],ip=async(i,t,e,r)=>{let o=Af.createInterface({input:process.stdin,output:process.stdout}),n=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
|
|
371
371
|
${n}
|
|
372
|
-
(y/n): `;return new Promise(a=>{o.question(s,l=>{if(o.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},ap=async(i,t,e)=>{let r=vr.includes(e)?["bundle-require@^5.1.0","typescript@^5.9.3","esbuild@^0.27.0"]:[],o="";switch(e){case "mariadb":case "mysql":o="mysql2@^3.15.3",r.push("@types/mysql2@github:types/mysql2");break;case "cockroachdb":case "postgres":o="pg@^8.16.3",r.push("@types/pg@^8.16.0");break;case "sqlite":o="sqlite3@^5.1.7",r.push("@types/sqlite3@^5.1.0");break;case "mongo":o="mongodb@^7.0.0",r.push("@types/mongodb@^4.0.7");break;case "redis":o="ioredis@^5.8.2",r.push("@types/ioredis@^5.0.0");break;case "mssql":o="mssql@^12.2.0",r.push("@types/mssql@^9.1.8");break;case "oracledb":o="oracledb@^6.10.0",r.push("@types/oracledb@^6.10.0");break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await sp(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await sp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var vr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Er=vr.concat("mongodb","redis"),Ne=new Command;Ne.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Er.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=>{let t=Er.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Er.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Er.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=ip();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await ap(e,r,i.type);let o=Dr.initTemplate(i.type);ue.existsSync("database")?g.info("database folder already exists, skipping"):ue.mkdirSync("database",{recursive:true}),ue.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ue.writeFileSync("database/index.ts",o),vr.includes(i.type)&&!ue.existsSync("database/migrations")?ue.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});Ne.command("sql [sql]").alias("run: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)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=Fe.resolve(process.cwd(),t.datasource),{default:o}=await ie(r,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await Ir(i,o,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL execution failed: ${s}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=Fe.resolve(process.cwd(),e),ue.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ue.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Ir(n,o,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL file execution failed: ${s}`),process.exit(1);}});Ne.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)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Fa(i,t.javascript,e,t.table||i);});Ne.command("migrate [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, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(Fe.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await dt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.command("rollback [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).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(Fe.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await wt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.command("refresh").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("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(Fe.resolve(process.cwd(),i.datasource),i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,o=i?.tsconfigPath||e.migrationConfig.tsconfig,n=i?.lock??e.migrationConfig.lock,s=i?.lockTimeout?parseInt(i.lockTimeout,10):e.migrationConfig.lockTimeout,a=i?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Kr(e,!1,a):await wt(e,void 0,r,o,a),await dt(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let{default:t}=await ie(Fe.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=(await Xe.makeDiff(t)).getSqlStatements();if(n.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}ue.existsSync(e)||ue.mkdirSync(e,{recursive:!0});let s=await Pr.generate(n),a=i?.javascript?".js":".ts";ue.writeFileSync(`${e}/${i?.name}${a}`,s),g.info(`Migration file created successfully: ${i?.name}${a}`),await t.closeConnection(),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});Ne.command("create:seeder <name>").description("Create a new seeder file").option("-j, --javascript","Generate a javascript seeder file instead of a default typescript one",false).option("-s, --seeder-path [path]","Path to the seeders",void 0).action((i,t)=>{g.info(`Creating seeder: ${i}`),g.info(`Seeder options: javascript=${t.javascript}`),i||(g.error("Seeder name is required"),process.exit(1)),op(i,t.javascript,t.seederPath);});Ne.command("seed").description("Run database seeders from folder or specific files").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("-s, --seeder-path [path]","Path to seeder folder or file (can be specified multiple times or comma-separated)",(i,t=[])=>[...t,i]).action(async i=>{g.info("Starting seeder execution"),i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:t}=await ie(Fe.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(o=>o.split(",").map(n=>n.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await np(t,e,r),await t.closeConnection(),g.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});Ne.parse(process.argv);export{vr as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
372
|
+
(y/n): `;return new Promise(a=>{o.question(s,l=>{if(o.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},lp=async(i,t,e)=>{let r=Er.includes(e)?["bundle-require@^5.1.0","typescript@^5.9.3","esbuild@^0.27.0"]:[],o="";switch(e){case "mariadb":case "mysql":o="mysql2@^3.15.3",r.push("@types/mysql2@github:types/mysql2");break;case "cockroachdb":case "postgres":o="pg@^8.16.3",r.push("@types/pg@^8.16.0");break;case "sqlite":o="sqlite3@^5.1.7",r.push("@types/sqlite3@^5.1.0");break;case "mongo":o="mongodb@^7.0.0",r.push("@types/mongodb@^4.0.7");break;case "redis":o="ioredis@^5.8.2",r.push("@types/ioredis@^5.0.0");break;case "mssql":o="mssql@^12.2.0",r.push("@types/mssql@^9.1.8");break;case "oracledb":o="oracledb@^6.10.0",r.push("@types/oracledb@^6.10.0");break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await ip(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await ip(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var Er=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Br=Er.concat("mongodb","redis"),Ne=new Command;Ne.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Br.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=>{let t=Br.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Br.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Br.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=ap();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await lp(e,r,i.type);let o=Or.initTemplate(i.type);ue.existsSync("database")?g.info("database folder already exists, skipping"):ue.mkdirSync("database",{recursive:true}),ue.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ue.writeFileSync("database/index.ts",o),Er.includes(i.type)&&!ue.existsSync("database/migrations")?ue.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});Ne.command("sql [sql]").alias("run: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)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=je.resolve(process.cwd(),t.datasource),{default:o}=await ie(r,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await Ir(i,o,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL execution failed: ${s}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=je.resolve(process.cwd(),e),ue.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ue.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Ir(n,o,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL file execution failed: ${s}`),process.exit(1);}});Ne.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)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Fa(i,t.javascript,e,t.table||i);});Ne.command("migrate [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, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(je.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await ut(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.command("rollback [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).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(je.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Mt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.command("refresh").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("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ie(je.resolve(process.cwd(),i.datasource),i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,o=i?.tsconfigPath||e.migrationConfig.tsconfig,n=i?.lock??e.migrationConfig.lock,s=i?.lockTimeout?parseInt(i.lockTimeout,10):e.migrationConfig.lockTimeout,a=i?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Lr(e,!1,a):await Mt(e,void 0,r,o,a),await ut(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});Ne.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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let{default:t}=await ie(je.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=(await tt.makeDiff(t)).getSqlStatements();if(n.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}ue.existsSync(e)||ue.mkdirSync(e,{recursive:!0});let s=await Dr.generate(n),a=i?.javascript?".js":".ts";ue.writeFileSync(`${e}/${i?.name}${a}`,s),g.info(`Migration file created successfully: ${i?.name}${a}`),await t.closeConnection(),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});Ne.command("create:seeder <name>").description("Create a new seeder file").option("-j, --javascript","Generate a javascript seeder file instead of a default typescript one",false).option("-s, --seeder-path [path]","Path to the seeders",void 0).action((i,t)=>{g.info(`Creating seeder: ${i}`),g.info(`Seeder options: javascript=${t.javascript}`),i||(g.error("Seeder name is required"),process.exit(1)),np(i,t.javascript,t.seederPath);});Ne.command("seed").description("Run database seeders from folder or specific files").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("-s, --seeder-path [path]","Path to seeder folder or file (can be specified multiple times or comma-separated)",(i,t=[])=>[...t,i]).action(async i=>{g.info("Starting seeder execution"),i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:t}=await ie(je.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(o=>o.split(",").map(n=>n.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await sp(t,e,r),await t.closeConnection(),g.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});Ne.parse(process.argv);export{Er as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
373
373
|
//# sourceMappingURL=cli.js.map
|