hysteria-orm 10.9.7 → 10.9.9
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 +34 -34
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +27 -27
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +108 -91
- package/lib/index.d.ts +108 -91
- package/lib/index.js +27 -27
- package/lib/index.js.map +1 -1
- package/package.json +25 -26
package/lib/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {Command}from'commander';import oe from'fs';import ze from'path';import
|
|
3
|
-
`).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":O.DB_TYPE||(O.DB_TYPE=s);break;case "DB_HOST":O.DB_HOST||(O.DB_HOST=s);break;case "DB_PORT":O.DB_PORT||(O.DB_PORT=s);break;case "DB_USER":O.DB_USER||(O.DB_USER=s);break;case "DB_PASSWORD":O.DB_PASSWORD||(O.DB_PASSWORD=s);break;case "DB_DATABASE":O.DB_DATABASE||(O.DB_DATABASE=s);break;case "MIGRATION_PATH":O.MIGRATION_PATH||(O.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":O.REDIS_HOST||(O.REDIS_HOST=s);break;case "REDIS_PORT":O.REDIS_PORT||(O.REDIS_PORT=s);break;case "REDIS_USERNAME":O.REDIS_USERNAME||(O.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":O.REDIS_PASSWORD||(O.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":O.REDIS_DATABASE||(O.REDIS_DATABASE=s);break;case "MONGO_URL":O.MONGO_URL||(O.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":O.MSSQL_TRUST_SERVER_CERTIFICATE||(O.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return O}},I=Fp();var jp=async i=>(await
|
|
2
|
+
import {Command}from'commander';import oe from'fs';import ze from'path';import al from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Re from'crypto';import {PassThrough,Readable}from'stream';import {execSync}from'child_process';import gy from'readline';var el=i=>{throw TypeError(i)};var Up=(i,t,e)=>t.has(i)||el("Cannot "+e);var tl=(i,t,e)=>t.has(i)?el("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var rl=(i,t,e)=>(Up(i,t,"access private method"),e);var q=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}};var te=class{constructor(t){this.options=t;}static async createDriver(t){throw new q("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var K=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var ut=class ut extends te{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new ut(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new K("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new K("mongodb");return new ut(this.mongoClient)}};ut.mongoClient=null;var Dt=ut;var mt=class mt extends te{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new mt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new K("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new K("mssql");return new mt(this.mssqlClient)}};mt.mssqlClient=null;var It=mt;var ct=class ct extends te{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new ct(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new K("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new K("mysql2");return new ct(this.mysqlClient)}};ct.mysqlClient=null;var Ot=ct;var pt=class pt extends te{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new pt(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new K("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new K("oracledb");return new pt(this.oracledbClient)}};pt.oracledbClient=null;var Et=pt;var ft=class ft extends te{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new ft(this.pgClient);let e=await import('pg').catch(()=>{throw new K("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new K("pg");return new ft(this.pgClient)}};ft.pgClient=null;var vt=ft;var yt=class yt extends te{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new yt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new K("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new K("sqlite3");return new yt(this.sqlite3Client)}};yt.sqlite3Client=null;var Qt=yt;var ge=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Ot.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await vt.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Qt.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Dt.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await It.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await Et.createDriver(),this.oracledbDriver;default:throw new q(`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}}};ge.mysqlDriver=null,ge.pgDriver=null,ge.sqliteDriver=null,ge.mssqlDriver=null,ge.oracledbDriver=null,ge.mongodbDriver=null;var O={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},Fp=()=>{if(!oe.existsSync(".env"))return O;try{oe.readFileSync(".env","utf8").split(`
|
|
3
|
+
`).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":O.DB_TYPE||(O.DB_TYPE=s);break;case "DB_HOST":O.DB_HOST||(O.DB_HOST=s);break;case "DB_PORT":O.DB_PORT||(O.DB_PORT=s);break;case "DB_USER":O.DB_USER||(O.DB_USER=s);break;case "DB_PASSWORD":O.DB_PASSWORD||(O.DB_PASSWORD=s);break;case "DB_DATABASE":O.DB_DATABASE||(O.DB_DATABASE=s);break;case "MIGRATION_PATH":O.MIGRATION_PATH||(O.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":O.REDIS_HOST||(O.REDIS_HOST=s);break;case "REDIS_PORT":O.REDIS_PORT||(O.REDIS_PORT=s);break;case "REDIS_USERNAME":O.REDIS_USERNAME||(O.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":O.REDIS_PASSWORD||(O.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":O.REDIS_DATABASE||(O.REDIS_DATABASE=s);break;case "MONGO_URL":O.MONGO_URL||(O.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":O.MSSQL_TRUST_SERVER_CERTIFICATE||(O.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return O}},I=Fp();var jp=async i=>(await ge.getDriver(i)).client,Ue=async(i,t)=>{let e=await jp(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,u=t,p=u?.database;return new d.Database(p,u?.driverOptions?.mode??void 0,$=>{if($)throw new q("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let c=e,f=t,{options:y,...b}=f.driverOptions??{},g=new c.ConnectionPool({server:f.host??"localhost",port:f.port,database:f.database,user:f.username,password:f.password,...b,options:{trustServerCertificate:I.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...y,abortTransactionOnError:false,enableImplicitTransactions:false}});return await g.connect(),g;case "oracledb":let C=e,R=t,_=`${R.host}/${R.database}`;return await C.createPool({user:R.username,password:R.password,connectString:_,...R.driverOptions});default:throw new q("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var ht=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)},Fe=(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},je=(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,Ve=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:ht(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var sl={info:0,warn:1,error:2};function Kt(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Hp(i,t="info"){let e=Kt(i);if(!e)return false;let r=e.level??"info";return sl[t]>=sl[r]}function Yp(i){let t=Kt(i);return t?t.logQueries??true:false}var Je={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function zp(){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 Ur(i,t){let e=zp(),r=i.toUpperCase();return i==="error"?`${Je.error}[${r}] ${e}
|
|
4
4
|
${t}${Je.reset}
|
|
5
5
|
`:i==="warn"?`${Je.warn}[${r}] ${e}
|
|
6
6
|
${t}${Je.reset}
|
|
@@ -8,7 +8,7 @@ ${t}${Je.reset}
|
|
|
8
8
|
${t}${Je.reset}
|
|
9
9
|
`:`[${r}] ${e}
|
|
10
10
|
${t}
|
|
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(
|
|
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(Ur("info",t));},error(t){console.error(Ur("error",t));},warn(t){console.warn(Ur("warn",t));}};function Gp(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 re(i,t,e,r,o){if(!Yp(t))return;let n=i;if(r||o)try{n=format(i,{...r,language:r?.language??(o?ht(o):void 0)});}catch{n=i;}let a=`${highlight(n,{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"}})} [${Gp(e||[])}]`;He.loggerInstance.info(a);}function il(i,t,e=false){Hp(e,t)&&He.loggerInstance[t](i);}var T=He;var Fr=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
|
-
)`}},z=new
|
|
125
|
+
)`}},z=new Fr;async function jr(i,t=true,e){let r=i.getDbType(),o=i.database;r||(T.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(T.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),T.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.disconnect(),await al.rm(o,{recursive:!0,force:!0}),T.info("Sqlite database dropped successfully"),await al.writeFile(o,""),T.info("Sqlite database recreated successfully");let p=i.getConnectionDetails();i.sqlPool=await Ue(i.getDbType(),p),T.info("All tables dropped successfully");return}let a=z.getAllTablesTemplate(r,o),l=await i.rawQuery(a),d=z.parseGetAllTables(r,o,l);if(!d.length){T.info("No tables to drop");return}let u=z.dropAllTablesTemplate(r,d);if(s&&(n=await i.transaction(),i=n.sql),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let m=(await i.rawQuery(`
|
|
126
126
|
SELECT
|
|
127
127
|
OBJECT_NAME(parent_object_id) AS table_name,
|
|
128
128
|
name AS constraint_name
|
|
@@ -131,13 +131,13 @@ CREATE TABLE [migrations] (
|
|
|
131
131
|
SELECT constraint_name, table_name
|
|
132
132
|
FROM user_constraints
|
|
133
133
|
WHERE constraint_type = 'R'
|
|
134
|
-
`);for(let m of p.rows||[])await i.rawQuery(`ALTER TABLE "${m.TABLE_NAME}" DROP CONSTRAINT "${m.CONSTRAINT_NAME}"`);for(let m of d)await i.rawQuery(`DROP TABLE "${m}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(u);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),b.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),b.error(a),a}finally{t&&await i.disconnect();}}var Zp=()=>{let i=I.MIGRATION_PATH,t=ze.resolve(process.cwd(),i);return oe.existsSync(t)||oe.mkdirSync(t,{recursive:true}),t},ul=(i,t=false,e="basic",r="table")=>{let o=Zp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=ze.join(o,s),l;switch(e){case "alter":l=z.alterMigrationTemplate(t,r);break;case "create":l=z.createMigrationTemplate(t,r);break;default:l=z.basicMigrationTemplate(t);break}oe.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function tf(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function rf(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await oe.promises.unlink(r).catch(()=>{});}}async function Ye(i,t){let e=ze.isAbsolute(i)?i:ze.resolve(process.cwd(),i);return e.endsWith(".ts")?rf(e):tf(e)}var sf=async(i,t)=>{if(i.endsWith(".ts"))return Ye(i);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 S(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function Wt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(z.migrationTableTemplateMysql()),(await e.query(z.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(z.migrationTableTemplatePg()),(await o.query(z.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await pl(z.migrationTableTemplateSQLite(),[],t),await pl(z.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(z.migrationTableTemplateMssql()),(await s.request().query(z.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(z.migrationTableTemplateOracle());}catch(p){if(p.errorNum!==955)throw p}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(p=>({id:p[0],name:p[1],timestamp:p[2]}))}finally{await d.close();}default:throw new S("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function Ut(i,t,e){let r=lf(t),o=[];for(let{name:n,fullPath:s}of r){let a=await af(s),l=new a(i||I.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function af(i,t){let e=await sf(i);if(!e.default)throw new S("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function lf(i){let t=process.cwd(),e=i||I.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ze.isAbsolute(e)?e:ze.resolve(t,e);if(!oe.existsSync(s))return oe.mkdirSync(s,{recursive:true}),[]}let o=r?e:ze.join(e,"**/*.{ts,js}"),n=ze.isAbsolute(o)?o:ze.resolve(t,o);try{return oe.globSync(n).filter(a=>oe.statSync(a).isFile()).sort().map(a=>({name:ze.basename(a),fullPath:a}))}catch{return []}}async function pl(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function gt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;b.info("Running migrations for database type: "+n);try{let l=await Wt(n,i.getPool()),u=(await Ut(n,e,r)).filter(m=>!l.map(c=>c.name).includes(m.migrationName));if(!u.length){b.info("No pending migrations.");return}if(t){let m=u.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let c=u.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new xe(i).upMigrations(c),s&&await a?.commit(),b.info("Migrations ran successfully");return}let p=new xe(i);s&&(a=await i.transaction(),i=a.sql),await p.upMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}b.info("Migrations ran successfully");}var Ft={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 yl=null;function Oe(i,t){return t.getModelManager(i)}function fl(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(p=>p.columnName===n||p.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",u=Ft[d]||"string";if(u==="string"||u==="textarea"){i.whereLike(n,`%${a}%`);continue}if(u==="boolean"){i.where(n,a==="true"||a===true);continue}if(u==="date"||u==="datetime"){if(typeof a=="object"&&a!==null){let p=a;p.from&&i.where(n,">=",p.from),p.to&&i.where(n,"<=",p.to);continue}i.where(n,a);continue}i.where(n,a);}}function bt(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 df(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=yl;}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=Ft[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(u=>u.columnName===n||u.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=Ft[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let a=Oe(this._model,this._db).query();return fl(a,n,this._model),a.getCount()}async find(n,s={}){let l=Oe(this._model,this._db).query();return fl(l,n,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(u=>new e(bt(u,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let l=await Oe(this._model,this._db).findOneByPrimaryKey(n);return l?new e(bt(l,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await Oe(this._model,this._db).query().whereIn(s,n).many()).map(d=>new e(bt(d,this._model),this)):[]}async create(n){let a=await Oe(this._model,this._db).insert(n,{returning:["*"]});return bt(a,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Oe(this._model,this._db);if(!await l.findOneByPrimaryKey(n))throw new Error("Record not found");let u=await l.updateRecord(n,s,{returning:["*"]});return bt(u,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Oe(this._model,this._db);await a.findOneByPrimaryKey(n)&&await a.deleteRecord(n);}}}async function uf(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function mf(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),t=await df(),e=await uf();i.default.registerAdapter({Database:e,Resource:t});}async function Hr(i,t){yl=i;let e=await import('adminjs').catch(()=>{throw new K("adminjs")});await mf();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 hl(i,t){let{admin:e}=await Hr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new K("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ge=new Map,Ae=new Map,jt=class{async get(t){return Ge.get(t)}async set(t,e,r){let o=Ae.get(t);if(o&&(clearTimeout(o),Ae.delete(t)),Ge.set(t,e),r){let n=setTimeout(()=>{Ge.delete(t),Ae.delete(t);},r);Ae.set(t,n);}}async invalidate(t){let e=Ae.get(t);e&&(clearTimeout(e),Ae.delete(t)),Ge.delete(t);}async invalidateAll(t){let e=Ge.keys();for(let r of e)if(r.startsWith(t)){let o=Ae.get(r);o&&(clearTimeout(o),Ae.delete(r)),Ge.delete(r);}}};var Vt=class{constructor(t){switch(this.type=t?.type||I.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 S(`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}`)}let e=Bt(this.logs);e?.customLogger&&b.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||I.DB_DATABASE||":memory:",this.logs=t?.logs||I.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||I.MONGO_URL,this.logs=t?.logs||I.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1521);}};var cf=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},pf=i=>i.openApi?.required??false,ff=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=cf(r));return e},yf=i=>{let t=i.getColumns(),e=[];for(let r of t)pf(r)&&e.push(r.columnName);return e||[]},hf=i=>{let t=ff(i),e=yf(i);return {type:"object",properties:t,required:e.length?e:[]}};var gl=i=>i.map(t=>({...hf(t),modelName:t.table,$id:t.table}));var Yr=(i,t)=>{let e=Me.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var zr=class{toSql(t){let e=t,r=new T(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:[]}}},bl=new zr;var Gr=class{toSql(t){let e=t,r=new T(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Tl=new Gr;var Zr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},Nl=new Zr;var Xr=class{toSql(t){let e=t,r=new T(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:[]}}},Sl=new Xr;var q=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ze=class extends q{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function bf(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 Tf(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function V(i,t){return t==="preserve"?i:t==="snake"?bf(i):t==="camel"?Tf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}var Nf=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let o of this.modelColumnsMap.values())(o.prepare||o.autoUpdate)&&e.push(o),o.autoUpdate&&r.push(o);this.autoInsertColumns=e,this.autoUpdateColumns=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??V(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??V(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 u=0;u<t.length;u++){let p=t[u],m=e[u];p!=="*"&&(o.push(p),n.push(m));}let s=new Set(o),a=null;for(let u=0;u<o.length;u++){let p=o[u],m=n[u],c=this.modelColumnsMap.get(p);if(c){if(c.prepare){let h=r==="insert"?c.prepare(m):c.prepare(m)??m;h!==null&&typeof h?.then=="function"?(a||(a=[]),a.push({index:u,promise:h})):n[u]=h;}}else Nf(m)&&(n[u]=JSON.stringify(m));}if(a){let u=await Promise.all(a.map(p=>p.promise));for(let p=0;p<a.length;p++)n[a[p].index]=u[p];}let l=this.model.primaryKey,d=r==="insert"?this.autoInsertColumns:this.autoUpdateColumns;for(let u of d){let p=u.columnName;if(s.has(p)||r==="insert"&&p===l&&!u.prepare)continue;o.push(p);let m=u.prepare?await u.prepare(void 0):void 0;n.push(m??void 0);}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new T(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 y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof Ze){let u=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${u.newName}'`,bindings:[]}}let n=new T(this.model,"mssql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},ql=new eo;var to=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},wl=new to;var ro=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Cl=new ro;var oo=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},_l=new oo;var no=class{toSql(t){let e=t;return b.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Ml=new no;var so=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Rl=new so;var io=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},xl=new io;var ao=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Al=new ao;var P=class extends q{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 P?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:[]}}},$l=new lo;var uo=class{toSql(t){let e=t;return b.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 uo;var mo=class{toSql(t){return {sql:"",bindings:[]}}},Dl=new mo;function co(i){return i.replace(/^[`"]|[`"]$/g,"")}function po(i,t,e){if(!i.includes(".")){let n=co(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=co(r),o=co(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function w(i){return typeof i=="function"?i():i}var B=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=B(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=B(o,t);}return e};var fo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mssql",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} decimal(${a}, ${l})`,bindings:[]}}if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}if(n==="datetime"||n==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${o} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${a}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} geometry`,bindings:[]};if(n==="linestring")return {sql:`${o} geometry`,bindings:[]};if(n==="polygon")return {sql:`${o} geometry`,bindings:[]};if(n==="multipoint")return {sql:`${o} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Il=new fo;var yo=class{toSql(t){return {sql:"",bindings:[]}}},Ol=new yo;var ho=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint [${e.constraintName}] `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("mssql",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},El=new ho;var go=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:f,bindings:g}=n.parse([h]);if(h.folder==="constraint"){let N=s.pop()??"",C=f;if(/not null/i.test(C)||/null/i.test(C)||/default/i.test(C)){let R=`${N} ${C}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...g);continue}s.push(N),s.push(C),a.push(...g);continue}s.push(f),a.push(...g);}for(let h of e.namedConstraints){let{sql:f,bindings:g}=n.parse([h]);s.push(f),a.push(...g);}let l=s.join(", "),d=[];e.dataCompression&&d.push(`DATA_COMPRESSION = ${e.dataCompression}`);let u=e.onFilegroup?` ON [${e.onFilegroup}]`:"",p=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=d.length>0?` WITH (${d.join(", ")})`:"";return {sql:`${o} (${l})${m}${u}${p}`,bindings:a}}},vl=new go;var bo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>`deleted.${r.formatStringColumn("mssql",a)}`).join(", ");n+=` output ${s}`;}return {sql:n,bindings:[]}}},Ql=new bo;var To=class{toSql(t){return {sql:"",bindings:[]}}},kl=new To;var No=class{toSql(t){return b.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Kl=new No;var So=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Bl=new So;var qo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Ll=new qo;var wo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("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 T(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Wl=new wo;var Co=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Ul=new Co;var _o=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 q)&&!Array.isArray(e.value)&&(o=`${new y(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 y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Fl=new _o;var Mo=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},jl=new Mo;var Ro=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Vl=new Ro;var xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(m=>n[m]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof P?h.push(f.rawValue):(l.push(f),h.push(`@${u++}`));d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>`inserted.${r.formatStringColumn("mssql",c)}`).join(", ");p=p.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);p=p.replace(") values",`) output ${m} values`);}return {sql:p,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 xo;var Ao=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mssql",o),a=r.formatStringColumn("mssql",n),d=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mssql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Hl=new Ao;var $o=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Yl=new $o;var Po=class{toSql(t){return {sql:"",bindings:[]}}},zl=new Po;var Do=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Gl=new Do;var Io=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(b.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 Io;var Oo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Xl=new Oo;var Eo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ed=new Eo;var vo=class{toSql(t){return {sql:`SELECT
|
|
134
|
+
`);for(let m of p.rows||[])await i.rawQuery(`ALTER TABLE "${m.TABLE_NAME}" DROP CONSTRAINT "${m.CONSTRAINT_NAME}"`);for(let m of d)await i.rawQuery(`DROP TABLE "${m}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(u);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),T.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),T.error(a),a}finally{t&&await i.disconnect();}}var Zp=()=>{let i=I.MIGRATION_PATH,t=ze.resolve(process.cwd(),i);return oe.existsSync(t)||oe.mkdirSync(t,{recursive:true}),t},dl=(i,t=false,e="basic",r="table")=>{let o=Zp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=ze.join(o,s),l;switch(e){case "alter":l=z.alterMigrationTemplate(t,r);break;case "create":l=z.createMigrationTemplate(t,r);break;default:l=z.basicMigrationTemplate(t);break}oe.writeFileSync(a,l),T.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function tf(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function rf(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await oe.promises.unlink(r).catch(()=>{});}}async function Ye(i,t){let e=ze.isAbsolute(i)?i:ze.resolve(process.cwd(),i);return e.endsWith(".ts")?rf(e):tf(e)}var sf=async(i,t)=>{if(i.endsWith(".ts"))return Ye(i);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 q(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function Lt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(z.migrationTableTemplateMysql()),(await e.query(z.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(z.migrationTableTemplatePg()),(await o.query(z.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await cl(z.migrationTableTemplateSQLite(),[],t),await cl(z.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(z.migrationTableTemplateMssql()),(await s.request().query(z.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(z.migrationTableTemplateOracle());}catch(p){if(p.errorNum!==955)throw p}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(p=>({id:p[0],name:p[1],timestamp:p[2]}))}finally{await d.close();}default:throw new q("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function Wt(i,t,e){let r=lf(t),o=[];for(let{name:n,fullPath:s}of r){let a=await af(s),l=new a(i||I.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function af(i,t){let e=await sf(i);if(!e.default)throw new q("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function lf(i){let t=process.cwd(),e=i||I.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ze.isAbsolute(e)?e:ze.resolve(t,e);if(!oe.existsSync(s))return oe.mkdirSync(s,{recursive:true}),[]}let o=r?e:ze.join(e,"**/*.{ts,js}"),n=ze.isAbsolute(o)?o:ze.resolve(t,o);try{return oe.globSync(n).filter(a=>oe.statSync(a).isFile()).sort().map(a=>({name:ze.basename(a),fullPath:a}))}catch{return []}}async function cl(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function gt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;T.info("Running migrations for database type: "+n);try{let l=await Lt(n,i.getPool()),u=(await Wt(n,e,r)).filter(m=>!l.map(c=>c.name).includes(m.migrationName));if(!u.length){T.info("No pending migrations.");return}if(t){let m=u.findIndex(y=>y.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let c=u.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Ae(i).upMigrations(c),s&&await a?.commit(),T.info("Migrations ran successfully");return}let p=new Ae(i);s&&(a=await i.transaction(),i=a.sql),await p.upMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}T.info("Migrations ran successfully");}var Ut={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 fl=null;function Ee(i,t){return t.getModelManager(i)}function pl(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(p=>p.columnName===n||p.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",u=Ut[d]||"string";if(u==="string"||u==="textarea"){i.whereLike(n,`%${a}%`);continue}if(u==="boolean"){i.where(n,a==="true"||a===true);continue}if(u==="date"||u==="datetime"){if(typeof a=="object"&&a!==null){let p=a;p.from&&i.where(n,">=",p.from),p.to&&i.where(n,"<=",p.to);continue}i.where(n,a);continue}i.where(n,a);}}function bt(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 df(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=fl;}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=Ut[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(u=>u.columnName===n||u.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=Ut[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let a=Ee(this._model,this._db).query();return pl(a,n,this._model),a.getCount()}async find(n,s={}){let l=Ee(this._model,this._db).query();return pl(l,n,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(u=>new e(bt(u,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let l=await Ee(this._model,this._db).findOneByPrimaryKey(n);return l?new e(bt(l,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await Ee(this._model,this._db).query().whereIn(s,n).many()).map(d=>new e(bt(d,this._model),this)):[]}async create(n){let a=await Ee(this._model,this._db).insert(n,{returning:["*"]});return bt(a,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Ee(this._model,this._db);if(!await l.findOneByPrimaryKey(n))throw new Error("Record not found");let u=await l.updateRecord(n,s,{returning:["*"]});return bt(u,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Ee(this._model,this._db);await a.findOneByPrimaryKey(n)&&await a.deleteRecord(n);}}}async function uf(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function mf(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),t=await df(),e=await uf();i.default.registerAdapter({Database:e,Resource:t});}async function Jr(i,t){fl=i;let e=await import('adminjs').catch(()=>{throw new K("adminjs")});await mf();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 yl(i,t){let{admin:e}=await Jr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new K("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ge=new Map,$e=new Map,Ft=class{async get(t){return Ge.get(t)}async set(t,e,r){let o=$e.get(t);if(o&&(clearTimeout(o),$e.delete(t)),Ge.set(t,e),r){let n=setTimeout(()=>{Ge.delete(t),$e.delete(t);},r);$e.set(t,n);}}async invalidate(t){let e=$e.get(t);e&&(clearTimeout(e),$e.delete(t)),Ge.delete(t);}async invalidateAll(t){let e=Ge.keys();for(let r of e)if(r.startsWith(t)){let o=$e.get(r);o&&(clearTimeout(o),$e.delete(r)),Ge.delete(r);}}};var jt=class{constructor(t){switch(this.type=t?.type||I.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 q(`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}`)}let e=Kt(this.logs);e?.customLogger&&T.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||I.DB_DATABASE||":memory:",this.logs=t?.logs||I.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||I.MONGO_URL,this.logs=t?.logs||I.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1521);}};var cf=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},pf=i=>i.openApi?.required??false,ff=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=cf(r));return e},yf=i=>{let t=i.getColumns(),e=[];for(let r of t)pf(r)&&e.push(r.columnName);return e||[]},hf=i=>{let t=ff(i),e=yf(i);return {type:"object",properties:t,required:e.length?e:[]}};var hl=i=>i.map(t=>({...hf(t),modelName:t.table,$id:t.table}));var Hr=(i,t)=>{let e=Re.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Yr=class{toSql(t){let e=t,r=new N(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:[]}}},gl=new Yr;var zr=class{toSql(t){let e=t,r=new N(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},bl=new zr;var Gr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},Tl=new Gr;var Zr=class{toSql(t){let e=t,r=new N(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:[]}}},Nl=new Zr;var S=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ze=class extends S{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function bf(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 Tf(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function V(i,t){return t==="preserve"?i:t==="snake"?bf(i):t==="camel"?Tf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}var Nf=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},h=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let o of this.modelColumnsMap.values())(o.prepare||o.autoUpdate)&&e.push(o),o.autoUpdate&&r.push(o);this.autoInsertColumns=e,this.autoUpdateColumns=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??V(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??V(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 u=0;u<t.length;u++){let p=t[u],m=e[u];p!=="*"&&(o.push(p),n.push(m));}let s=new Set(o),a=null;for(let u=0;u<o.length;u++){let p=o[u],m=n[u],c=this.modelColumnsMap.get(p);if(c){if(c.prepare){let f=r==="insert"?c.prepare(m):c.prepare(m)??m;f!==null&&typeof f?.then=="function"?(a||(a=[]),a.push({index:u,promise:f})):n[u]=f;}}else Nf(m)&&(n[u]=JSON.stringify(m));}if(a){let u=await Promise.all(a.map(p=>p.promise));for(let p=0;p<a.length;p++)n[a[p].index]=u[p];}let l=this.model.primaryKey,d=r==="insert"?this.autoInsertColumns:this.autoUpdateColumns;for(let u of d){let p=u.columnName;if(s.has(p)||r==="insert"&&p===l&&!u.prepare)continue;o.push(p);let m=u.prepare?await u.prepare(void 0):void 0;n.push(m??void 0);}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new N(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var Xr=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof Ze){let u=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${u.newName}'`,bindings:[]}}let n=new N(this.model,"mssql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Sl=new Xr;var eo=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},ql=new eo;var to=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},wl=new to;var ro=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Cl=new ro;var oo=class{toSql(t){let e=t;return T.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 oo;var no=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Ml=new no;var so=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Rl=new so;var io=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},xl=new io;var P=class extends S{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 ao=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Al=new ao;var lo=class{toSql(t){let e=t;return T.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},$l=new lo;var uo=class{toSql(t){return {sql:"",bindings:[]}}},Pl=new uo;function mo(i){return i.replace(/^[`"]|[`"]$/g,"")}function co(i,t,e){if(!i.includes(".")){let n=mo(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=mo(r),o=mo(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function w(i){return typeof i=="function"?i():i}var B=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=B(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=B(o,t);}return e};var po=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("mssql",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} decimal(${a}, ${l})`,bindings:[]}}if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}if(n==="datetime"||n==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${o} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${a}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} geometry`,bindings:[]};if(n==="linestring")return {sql:`${o} geometry`,bindings:[]};if(n==="polygon")return {sql:`${o} geometry`,bindings:[]};if(n==="multipoint")return {sql:`${o} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Dl=new po;var fo=class{toSql(t){return {sql:"",bindings:[]}}},Il=new fo;var yo=class{toSql(t){let e=t,r=new h(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",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Ol=new yo;var ho=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"mssql"),s=[],a=[];for(let f of e.children){let{sql:y,bindings:b}=n.parse([f]);if(f.folder==="constraint"){let g=s.pop()??"",C=y;if(/not null/i.test(C)||/null/i.test(C)||/default/i.test(C)){let R=`${g} ${C}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...b);continue}s.push(g),s.push(C),a.push(...b);continue}s.push(y),a.push(...b);}for(let f of e.namedConstraints){let{sql:y,bindings:b}=n.parse([f]);s.push(y),a.push(...b);}let l=s.join(", "),d=[];e.dataCompression&&d.push(`DATA_COMPRESSION = ${e.dataCompression}`);let u=e.onFilegroup?` ON [${e.onFilegroup}]`:"",p=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=d.length>0?` WITH (${d.join(", ")})`:"";return {sql:`${o} (${l})${m}${u}${p}`,bindings:a}}},El=new ho;var go=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>`deleted.${r.formatStringColumn("mssql",a)}`).join(", ");n+=` output ${s}`;}return {sql:n,bindings:[]}}},vl=new go;var bo=class{toSql(t){return {sql:"",bindings:[]}}},Ql=new bo;var To=class{toSql(t){return T.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},kl=new To;var No=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Kl=new No;var So=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Bl=new So;var qo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(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 N(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Ll=new qo;var wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Wl=new wo;var Co=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 S)&&!Array.isArray(e.value)&&(o=`${new h(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 h(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 Co;var _o=class{toSql(t){let e=t,o=new h(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 _o;var Mo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},jl=new Mo;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(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(m=>n[m]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(y=>m[y]),f=[];for(let y of c)y instanceof P?f.push(y.rawValue):(l.push(y),f.push(`@${u++}`));d.push(`(${f.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>`inserted.${r.formatStringColumn("mssql",c)}`).join(", ");p=p.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);p=p.replace(") values",`) output ${m} values`);}return {sql:p,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 Ro;var xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new N(this.model,"mssql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let f=c.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Jl=new xo;var Ao=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Hl=new Ao;var $o=class{toSql(t){return {sql:"",bindings:[]}}},Yl=new $o;var Po=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},zl=new Po;var Do=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(T.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:[]})}},Gl=new Do;var Io=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Zl=new Io;var Oo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xl=new Oo;var Eo=class{toSql(t){return {sql:`SELECT
|
|
136
136
|
cc.name AS name,
|
|
137
137
|
cc.definition AS expression
|
|
138
138
|
FROM sys.check_constraints cc
|
|
139
139
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
140
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
140
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},ed=new Eo;var vo=class{toSql(t){return {sql:`SELECT
|
|
141
141
|
fk.name as name,
|
|
142
142
|
c.name as column_name,
|
|
143
143
|
rt.name as referenced_table,
|
|
@@ -149,7 +149,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
149
149
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
150
150
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
151
151
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
152
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
152
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},td=new vo;var Qo=class{toSql(t){return {sql:`SELECT
|
|
153
153
|
i.name as index_name,
|
|
154
154
|
c.name as column_name,
|
|
155
155
|
i.is_unique as is_unique
|
|
@@ -158,7 +158,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
158
158
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
159
159
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
160
160
|
AND i.is_primary_key = 0
|
|
161
|
-
AND i.type > 0`,bindings:[]}}},
|
|
161
|
+
AND i.type > 0`,bindings:[]}}},rd=new Qo;var ko=class{toSql(t){return {sql:`SELECT
|
|
162
162
|
tc.CONSTRAINT_NAME as name,
|
|
163
163
|
kcu.COLUMN_NAME as column_name
|
|
164
164
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -166,7 +166,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
166
166
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
167
167
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
168
168
|
AND tc.TABLE_NAME = '${t.table}'
|
|
169
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
169
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},od=new ko;var Ko=class{toSql(t){return {sql:`SELECT
|
|
170
170
|
c.COLUMN_NAME as column_name,
|
|
171
171
|
c.DATA_TYPE as data_type,
|
|
172
172
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -176,7 +176,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},nd=new Ko;var Bo=class{toSql(t){re
|
|
|
176
176
|
c.NUMERIC_SCALE as numeric_scale
|
|
177
177
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
178
178
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
179
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Bo;var Lo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mssql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new T(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 T(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 y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},id=new Lo;var ae=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 Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),o=ae.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}},ad=new Wo;var Uo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},ld=new Uo;var Fo=class{toSql(t){let e=t,r=new T(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}}},dd=new Fo;var jo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof P?(n++,`${r.formatStringColumn("mssql",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("mssql",d)} = @${p}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>`inserted.${r.formatStringColumn("mssql",u)}`).join(", ");l+=` output ${d}`;}return {sql:l,bindings:s}}},ud=new jo;var Vo=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 y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let u=`@${o} AND @${o+1}`,p=`${a} between ${u}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}let l=r.map((u,p)=>`@${o+p}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new y(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 y(this.model).formatStringColumn("mssql",t):t}},md=new Vo;var Jo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},cd=new Jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(this.model).formatStringColumn("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}}},pd=new Ho;var Yo=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 T(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 T(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},fd=new Yo;var zo=class{toSql(t){let e=t,r=new T(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&b.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},yd=new zo;var Go=class{toSql(t){let e=t,r=new T(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:[]}}},hd=new Go;var Zo=class{toSql(t){let e=t,r=new T(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},gd=new Zo;var Xo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},bd=new Xo;var en=class{toSql(t){let e=t,r=new T(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){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.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},Td=new en;var tn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.file==="add_column")s.push(c);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",g=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(c);if(g&&!N){let C=c.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${C}`;}else {let C=/^\s*add\b/i.test(c)?c:`add ${c}`;s.push(C);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(c);a.push(...h);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},Nd=new tn;var rn=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Sd=new rn;var on=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},qd=new on;var nn=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},wd=new nn;var sn=class{toSql(t){return {sql:"",bindings:[]}}},Cd=new sn;var an=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},_d=new an;var ln=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Md=new ln;var dn=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Rd=new dn;var un=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},xd=new un;var mn=class{toSql(t){return {sql:"",bindings:[]}}},Ad=new mn;var cn=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},$d=new cn;var pn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",w(e.column)),n=e.dataType.toLowerCase(),s,a=false,l=false;if(n==="char"){let d=e.length??1;s=`${o} char(${d})`;}else if(n==="varchar"){let d=e.length??255;s=`${o} varchar(${d})`;}else if(n==="uuid")s=`${o} varchar(36)`;else if(n==="ulid")s=`${o} varchar(26)`;else if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")s=`${o} ${n}`;else if(n==="integer"||n==="int")a=true,l=!!e.autoIncrement,s=`${o} int`;else if(n==="tinyint")a=true,s=`${o} tinyint`;else if(n==="smallint")a=true,s=`${o} smallint`;else if(n==="mediumint")a=true,s=`${o} mediumint`;else if(n==="bigint")a=true,l=!!e.autoIncrement,s=`${o} bigint`;else if(n==="float")a=true,s=`${o} float`;else if(n==="double")a=true,s=`${o} double`;else if(n==="real")a=true,s=`${o} double`;else if(n==="decimal"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} decimal(${d}, ${u})`;}else if(n==="numeric"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} numeric(${d}, ${u})`;}else if(n==="date")s=`${o} date`;else if(n==="time"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} time${d}`.trimEnd();}else if(n==="datetime"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} datetime${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="timestamp"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} timestamp${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="year")s=`${o} year`;else if(n==="boolean")s=`${o} boolean`;else if(n==="varbinary"){let d=e.length??255;s=`${o} varbinary(${d})`;}else if(n==="binary"){let d=e.length??255;s=`${o} binary(${d})`;}else if(n==="bytea"||n==="blob")s=`${o} blob`;else if(n==="json"||n==="jsonb")s=`${o} json`;else if(n==="enum")if(e.enumValues&&e.enumValues.length>0){let d=e.enumValues.map(u=>`'${u}'`).join(", ");s=`${o} enum(${d})`;}else s=`${o} text`;else if(n==="geometry")s=`${o} geometry`;else if(n==="point")s=`${o} point`;else if(n==="linestring")s=`${o} linestring`;else if(n==="polygon")s=`${o} polygon`;else if(n==="multipoint")s=`${o} multipoint`;else {let d=e.length?`(${e.length})`:"";s=`${o} ${n}${d}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},Pd=new pn;var fn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Dd=new fn;var yn=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",w(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",w(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 P?{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",w(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Id=new yn;var hn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:h,bindings:f}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let C=`${g} ${N}`.trim();C=C.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...f);continue}s.push(g),s.push(N),a.push(...f);continue}s.push(h),a.push(...f);}for(let c of e.namedConstraints){let{sql:h,bindings:f}=n.parse([c]);s.push(h),a.push(...f);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.engine&&u.push(`ENGINE=${e.engine}`),e.charset&&u.push(`CHARSET=${e.charset}`),e.collate&&u.push(`COLLATE=${e.collate}`);let p=u.length>0?` ${u.join(" ")}`:"";return {sql:`${d}${o} (${l})${p}`,bindings:a}}},Od=new hn;var gn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Ed=new gn;var bn=class{toSql(t){return {sql:"distinct",bindings:[]}}},vd=new bn;var Tn=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Qd=new Tn;var Nn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},kd=new Nn;var Sn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Kd=new Sn;var qn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new T(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Bd=new qn;var wn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Ld=new wn;var Cn=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 q)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Wd=new Cn;var _n=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Ud=new _n;var Mn=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:[]}}},Fd=new Mn;var Rn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(p=>r.formatStringColumn("mysql",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof P?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},jd=new Rn;var xn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mysql",o),a=r.formatStringColumn("mysql",n),d=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mysql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Vd=new xn;var An=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Jd=new An;var Sf={for_update:"for update",for_share:"lock in share mode"},$n=class{toSql(t){let e=t,r=Sf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Hd=new $n;var Pn=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Yd=new Pn;var Dn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},zd=new Dn;var In=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Gd=new In;var On=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Zd=new On;var En=class{toSql(t){return {sql:`SELECT
|
|
179
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},nd=new Ko;var Bo=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 h(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 N(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 N(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 h(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},sd=new Bo;var ie=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 Lo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),o=ie.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}},id=new Lo;var Wo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new h(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},ad=new Wo;var Uo=class{toSql(t){let e=t,r=new N(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}}},ld=new Uo;var Fo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof P?(n++,`${r.formatStringColumn("mssql",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("mssql",d)} = @${p}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>`inserted.${r.formatStringColumn("mssql",u)}`).join(", ");l+=` output ${d}`;}return {sql:l,bindings:s}}},dd=new Fo;var jo=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 h(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new h(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let u=`@${o} AND @${o+1}`,p=`${a} between ${u}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}let l=r.map((u,p)=>`@${o+p}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new h(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 h(this.model).formatStringColumn("mssql",t):t}},ud=new jo;var Vo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},md=new Vo;var Jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new h(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}}},cd=new Jo;var Ho=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 N(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 N(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},pd=new Ho;var Yo=class{toSql(t){let e=t,r=new N(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&T.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},fd=new Yo;var zo=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},yd=new zo;var Go=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},hd=new Go;var Zo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},gd=new Zo;var Xo=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?"":" not null";a+=l;}if(!e.options.dropDefault){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.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},bd=new Xo;var en=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:f}=n.parse([m]);if(m.file==="add_column")s.push(c);else if(m.file==="add_constraint"||m.folder==="constraint"){let y=s[s.length-1]??"",b=/^\s*add\s+column\b/i.test(y),g=/^\s*add\s+constraint\b/i.test(c);if(b&&!g){let C=c.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${C}`;}else {let C=/^\s*add\b/i.test(c)?c:`add ${c}`;s.push(C);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(c);a.push(...f);}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}}},Td=new en;var tn=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Nd=new tn;var rn=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Sd=new rn;var on=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},qd=new on;var nn=class{toSql(t){return {sql:"",bindings:[]}}},wd=new nn;var sn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Cd=new sn;var an=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},_d=new an;var ln=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Md=new ln;var dn=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Rd=new dn;var un=class{toSql(t){return {sql:"",bindings:[]}}},xd=new un;var mn=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},Ad=new mn;var cn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("mysql",w(e.column)),n=e.dataType.toLowerCase(),s,a=false,l=false;if(n==="char"){let d=e.length??1;s=`${o} char(${d})`;}else if(n==="varchar"){let d=e.length??255;s=`${o} varchar(${d})`;}else if(n==="uuid")s=`${o} varchar(36)`;else if(n==="ulid")s=`${o} varchar(26)`;else if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")s=`${o} ${n}`;else if(n==="integer"||n==="int")a=true,l=!!e.autoIncrement,s=`${o} int`;else if(n==="tinyint")a=true,s=`${o} tinyint`;else if(n==="smallint")a=true,s=`${o} smallint`;else if(n==="mediumint")a=true,s=`${o} mediumint`;else if(n==="bigint")a=true,l=!!e.autoIncrement,s=`${o} bigint`;else if(n==="float")a=true,s=`${o} float`;else if(n==="double")a=true,s=`${o} double`;else if(n==="real")a=true,s=`${o} double`;else if(n==="decimal"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} decimal(${d}, ${u})`;}else if(n==="numeric"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} numeric(${d}, ${u})`;}else if(n==="date")s=`${o} date`;else if(n==="time"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} time${d}`.trimEnd();}else if(n==="datetime"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} datetime${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="timestamp"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} timestamp${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="year")s=`${o} year`;else if(n==="boolean")s=`${o} boolean`;else if(n==="varbinary"){let d=e.length??255;s=`${o} varbinary(${d})`;}else if(n==="binary"){let d=e.length??255;s=`${o} binary(${d})`;}else if(n==="bytea"||n==="blob")s=`${o} blob`;else if(n==="json"||n==="jsonb")s=`${o} json`;else if(n==="enum")if(e.enumValues&&e.enumValues.length>0){let d=e.enumValues.map(u=>`'${u}'`).join(", ");s=`${o} enum(${d})`;}else s=`${o} text`;else if(n==="geometry")s=`${o} geometry`;else if(n==="point")s=`${o} point`;else if(n==="linestring")s=`${o} linestring`;else if(n==="polygon")s=`${o} polygon`;else if(n==="multipoint")s=`${o} multipoint`;else {let d=e.length?`(${e.length})`:"";s=`${o} ${n}${d}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},$d=new cn;var pn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Pd=new pn;var fn=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",w(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",w(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 P?{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",w(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Dd=new fn;var yn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:f,bindings:y}=n.parse([c]);if(c.folder==="constraint"){let b=s.pop()??"",g=f;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let C=`${b} ${g}`.trim();C=C.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...y);continue}s.push(b),s.push(g),a.push(...y);continue}s.push(f),a.push(...y);}for(let c of e.namedConstraints){let{sql:f,bindings:y}=n.parse([c]);s.push(f),a.push(...y);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.engine&&u.push(`ENGINE=${e.engine}`),e.charset&&u.push(`CHARSET=${e.charset}`),e.collate&&u.push(`COLLATE=${e.collate}`);let p=u.length>0?` ${u.join(" ")}`:"";return {sql:`${d}${o} (${l})${p}`,bindings:a}}},Id=new yn;var hn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Od=new hn;var gn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Ed=new gn;var bn=class{toSql(t){return T.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},vd=new bn;var Tn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Qd=new Tn;var Nn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},kd=new Nn;var Sn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Kd=new Sn;var qn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Bd=new qn;var wn=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 S)&&!Array.isArray(e.value)&&(o=`${new h(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 h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Ld=new wn;var Cn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Wd=new Cn;var _n=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:[]}}},Ud=new _n;var Mn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(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(p=>r.formatStringColumn("mysql",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(f=>p[f]),c=[];for(let f of m)f instanceof P?c.push(f.rawValue):(l.push(f),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Fd=new Mn;var Rn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new N(this.model,"mysql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let f=c.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},jd=new Rn;var xn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Vd=new xn;var Sf={for_update:"for update",for_share:"lock in share mode"},An=class{toSql(t){let e=t,r=Sf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Jd=new An;var $n=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Hd=new $n;var Pn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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:[]}}},Yd=new Pn;var Dn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},zd=new Dn;var In=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Gd=new In;var On=class{toSql(t){return {sql:`SELECT
|
|
180
180
|
cc.CONSTRAINT_NAME AS name,
|
|
181
181
|
cc.CHECK_CLAUSE AS expression
|
|
182
182
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -185,7 +185,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Bo;var Lo=class{toSql(t){let
|
|
|
185
185
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
186
186
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
187
187
|
AND tc.TABLE_NAME = '${t.table}'
|
|
188
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
188
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},Zd=new On;var En=class{toSql(t){return {sql:`SELECT
|
|
189
189
|
k.CONSTRAINT_NAME AS name,
|
|
190
190
|
k.COLUMN_NAME AS column_name,
|
|
191
191
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -196,18 +196,18 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Bo;var Lo=class{toSql(t){let
|
|
|
196
196
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
197
197
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
198
198
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
199
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
199
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Xd=new En;var vn=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},eu=new vn;var Qn=class{toSql(t){return {sql:`SELECT
|
|
200
200
|
CONSTRAINT_NAME AS name,
|
|
201
201
|
COLUMN_NAME AS column_name
|
|
202
202
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
203
203
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
204
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},ru=new kn;var Kn=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_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:[]}}},ou=new Kn;var Bn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new T(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 T(this.model,"mysql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},nu=new Bn;var Ln=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=ae.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}},su=new Ln;var Wn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},iu=new Wn;var Un=class{toSql(t){let e=t,r=new T(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}}},au=new Un;var Fn=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(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 P?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},lu=new Fn;var jn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},du=new jn;var Vn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},uu=new Vn;var Jn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${n} = CAST(? AS JSON)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},mu=new Jn;var Hn=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 T(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 T(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},cu=new Hn;var Yn=class{toSql(t){let e=t,r=new T(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}}},pu=new Yn;var zn=class{toSql(t){let e=t,r=new T(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:[]}}},fu=new zn;var Gn=class{toSql(t){let e=t,r=new T(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},yu=new Gn;var Zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},hu=new Zn;var Xn=class{toSql(t){let e=t,r=new T(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:[]}}},gu=new Xn;var es=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},bu=new es;var ts=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Tu=new ts;var rs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Nu=new rs;var os=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},Su=new os;var ns=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},qu=new ns;var ss=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},wu=new ss;var is=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Cu=new is;var as=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},_u=new as;var ls=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Mu=new ls;var ds=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},Ru=new ds;var us=class{toSql(t){return {sql:"",bindings:[]}}},xu=new us;var ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("oracledb",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar2(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} number(${a}, ${l})`,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 a=e.withTimezone?" with time zone":"",l=typeof e.precision=="number"?`(${e.precision})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${a}))`,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:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Au=new ms;var cs=class{toSql(t){return {sql:"",bindings:[]}}},$u=new cs;var ps=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("oracledb",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Pu=new ps;var fs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.folder==="constraint"){let f=s.pop()??"",g=c;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let N=`${f} ${g}`.trim();N=N.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...h);continue}s.push(f),s.push(g),a.push(...h);continue}s.push(c),a.push(...h);}for(let m of e.namedConstraints){let{sql:c,bindings:h}=n.parse([m]);s.push(c),a.push(...h);}let l=s.join(", "),d=[];if(e.oracleTablespace&&d.push(`TABLESPACE ${e.oracleTablespace}`),e.oracleCompress?d.push("COMPRESS"):e.oracleCompressFor&&d.push(`COMPRESS FOR ${e.oracleCompressFor}`),e.oracleStorage){let m=Object.entries(e.oracleStorage).map(([c,h])=>`${c.toUpperCase()} ${h}`).join(" ");m&&d.push(`STORAGE (${m})`);}e.oracleLogging===false?d.push("NOLOGGING"):e.oracleLogging===true&&d.push("LOGGING"),e.oracleCache===false?d.push("NOCACHE"):e.oracleCache===true&&d.push("CACHE"),e.oracleInMemory&&d.push("INMEMORY");let u=d.length>0?` ${d.join(" ")}`:"";return {sql:`${o} (${l})${u}`,bindings:a}}},Du=new fs;var ys=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Iu=new ys;var hs=class{toSql(t){return {sql:"",bindings:[]}}},Ou=new hs;var gs=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Eu=new gs;var bs=class{toSql(t){let e=t;return {sql:`${new y(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},vu=new bs;var Ts=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Qu=new Ts;var Ns=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("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 T(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},ku=new Ns;var Ss=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},Ku=new Ss;var qs=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 q)&&!Array.isArray(e.value)&&(o=`${new y(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 y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Bu=new qs;var ws=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Lu=new ws;var Cs=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Wu=new Cs;var _s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(m=>r.formatStringColumn("oracledb",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof P?h.push(f.rawValue):(l.push(f),h.push(`:${u++}`));d.push(`(${h.join(", ")})`);}let p;if(e.records.length===1)p=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",u=e.currParamIndex;let m=[];for(let c of e.records){let h=s.map(g=>c[g]),f=[];for(let g of h)g instanceof P?f.push(g.rawValue):f.push(`:${u++}`);m.push(`into ${o} (${a}) values (${f.join(", ")})`);}p=`all ${m.join(" ")} select * from dual`;}return {sql:p,bindings:l}}},Uu=new _s;var Ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("oracledb",o),a=r.formatStringColumn("oracledb",n),d=`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"oracledb");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Fu=new Ms;var Rs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},ju=new Rs;var qf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},xs=class{toSql(t){let e=t,r=qf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Vu=new xs;var As=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Ju=new As;var $s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("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:[]}}},Hu=new $s;var Ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Yu=new Ps;var Ds=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},zu=new Ds;var Is=class{toSql(t){return {sql:`SELECT
|
|
204
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},tu=new Qn;var kn=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_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:[]}}},ru=new kn;var Kn=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 h(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 N(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 N(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 h(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},ou=new Kn;var Bn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),o=ie.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}},nu=new Bn;var Ln=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},su=new Ln;var Wn=class{toSql(t){let e=t,r=new N(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}}},iu=new Wn;var Un=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(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 P?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},au=new Un;var Fn=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 h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new h(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 h(this.model).formatStringColumn("mysql",t):t}},lu=new Fn;var jn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new N(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},du=new jn;var Vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(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}}},uu=new Vn;var Jn=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 N(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 N(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},mu=new Jn;var Hn=class{toSql(t){let e=t,r=new N(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}}},cu=new Hn;var Yn=class{toSql(t){let e=t,r=new N(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:[]}}},pu=new Yn;var zn=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},fu=new zn;var Gn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},yu=new Gn;var Zn=class{toSql(t){let e=t,r=new N(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:[]}}},hu=new Zn;var Xn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"oracledb"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},gu=new Xn;var es=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},bu=new es;var ts=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Tu=new ts;var rs=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},Nu=new rs;var os=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},Su=new os;var ns=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},qu=new ns;var ss=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},wu=new ss;var is=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},Cu=new is;var as=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},_u=new as;var ls=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},Mu=new ls;var ds=class{toSql(t){return {sql:"",bindings:[]}}},Ru=new ds;var us=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("oracledb",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar2(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} number(${a}, ${l})`,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 a=e.withTimezone?" with time zone":"",l=typeof e.precision=="number"?`(${e.precision})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${a}))`,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:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},xu=new us;var ms=class{toSql(t){return {sql:"",bindings:[]}}},Au=new ms;var cs=class{toSql(t){let e=t,r=new h(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",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},$u=new cs;var ps=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:f}=n.parse([m]);if(m.folder==="constraint"){let y=s.pop()??"",b=c;if(/not null/i.test(b)||/null/i.test(b)||/default/i.test(b)){let g=`${y} ${b}`.trim();g=g.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(g),a.push(...f);continue}s.push(y),s.push(b),a.push(...f);continue}s.push(c),a.push(...f);}for(let m of e.namedConstraints){let{sql:c,bindings:f}=n.parse([m]);s.push(c),a.push(...f);}let l=s.join(", "),d=[];if(e.oracleTablespace&&d.push(`TABLESPACE ${e.oracleTablespace}`),e.oracleCompress?d.push("COMPRESS"):e.oracleCompressFor&&d.push(`COMPRESS FOR ${e.oracleCompressFor}`),e.oracleStorage){let m=Object.entries(e.oracleStorage).map(([c,f])=>`${c.toUpperCase()} ${f}`).join(" ");m&&d.push(`STORAGE (${m})`);}e.oracleLogging===false?d.push("NOLOGGING"):e.oracleLogging===true&&d.push("LOGGING"),e.oracleCache===false?d.push("NOCACHE"):e.oracleCache===true&&d.push("CACHE"),e.oracleInMemory&&d.push("INMEMORY");let u=d.length>0?` ${d.join(" ")}`:"";return {sql:`${o} (${l})${u}`,bindings:a}}},Pu=new ps;var fs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Du=new fs;var ys=class{toSql(t){return {sql:"",bindings:[]}}},Iu=new ys;var hs=class{toSql(t){return {sql:`(${t.columns.map(o=>new h(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Ou=new hs;var gs=class{toSql(t){let e=t;return {sql:`${new h(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Eu=new gs;var bs=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vu=new bs;var Ts=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(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 N(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Qu=new Ts;var Ns=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},ku=new Ns;var Ss=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 S)&&!Array.isArray(e.value)&&(o=`${new h(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 h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Ku=new Ss;var qs=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Bu=new qs;var ws=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Lu=new ws;var Cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(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(m=>r.formatStringColumn("oracledb",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(y=>m[y]),f=[];for(let y of c)y instanceof P?f.push(y.rawValue):(l.push(y),f.push(`:${u++}`));d.push(`(${f.join(", ")})`);}let p;if(e.records.length===1)p=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",u=e.currParamIndex;let m=[];for(let c of e.records){let f=s.map(b=>c[b]),y=[];for(let b of f)b instanceof P?y.push(b.rawValue):y.push(`:${u++}`);m.push(`into ${o} (${a}) values (${y.join(", ")})`);}p=`all ${m.join(" ")} select * from dual`;}return {sql:p,bindings:l}}},Wu=new Cs;var _s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new N(this.model,"oracledb");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let f=c.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Uu=new _s;var Ms=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Fu=new Ms;var qf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Rs=class{toSql(t){let e=t,r=qf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},ju=new Rs;var xs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Vu=new xs;var As=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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:[]}}},Ju=new As;var $s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Hu=new $s;var Ps=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Yu=new Ps;var Ds=class{toSql(t){return {sql:`SELECT
|
|
205
205
|
constraint_name AS name,
|
|
206
206
|
search_condition AS expression
|
|
207
207
|
FROM user_constraints
|
|
208
208
|
WHERE table_name = '${t.table.toUpperCase()}'
|
|
209
209
|
AND constraint_type = 'C'
|
|
210
|
-
AND constraint_name NOT LIKE 'SYS_%'`,bindings:[]}}},
|
|
210
|
+
AND constraint_name NOT LIKE 'SYS_%'`,bindings:[]}}},zu=new Ds;var Is=class{toSql(t){return {sql:`SELECT
|
|
211
211
|
c.constraint_name as name,
|
|
212
212
|
cc.column_name as column_name,
|
|
213
213
|
rc.table_name as referenced_table,
|
|
@@ -219,7 +219,7 @@ JOIN user_constraints rc ON c.r_constraint_name = rc.constraint_name
|
|
|
219
219
|
JOIN user_cons_columns rcc ON rc.constraint_name = rcc.constraint_name AND cc.position = rcc.position
|
|
220
220
|
WHERE c.constraint_type = 'R'
|
|
221
221
|
AND c.table_name = '${t.table.toUpperCase()}'
|
|
222
|
-
ORDER BY cc.position`,bindings:[]}}},
|
|
222
|
+
ORDER BY cc.position`,bindings:[]}}},Gu=new Is;var Os=class{toSql(t){return {sql:`SELECT
|
|
223
223
|
i.index_name as index_name,
|
|
224
224
|
ic.column_name as column_name,
|
|
225
225
|
CASE WHEN i.uniqueness = 'UNIQUE' THEN 1 ELSE 0 END as is_unique
|
|
@@ -232,14 +232,14 @@ WHERE i.table_name = '${t.table.toUpperCase()}'
|
|
|
232
232
|
WHERE c.constraint_type = 'P'
|
|
233
233
|
AND c.index_name = i.index_name
|
|
234
234
|
)
|
|
235
|
-
ORDER BY i.index_name, ic.column_position`,bindings:[]}}},
|
|
235
|
+
ORDER BY i.index_name, ic.column_position`,bindings:[]}}},Zu=new Os;var Es=class{toSql(t){return {sql:`SELECT
|
|
236
236
|
c.constraint_name as name,
|
|
237
237
|
cc.column_name as column_name
|
|
238
238
|
FROM user_constraints c
|
|
239
239
|
JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
|
|
240
240
|
WHERE c.constraint_type = 'P'
|
|
241
241
|
AND c.table_name = '${t.table.toUpperCase()}'
|
|
242
|
-
ORDER BY cc.position`,bindings:[]}}},
|
|
242
|
+
ORDER BY cc.position`,bindings:[]}}},Xu=new Es;var vs=class{toSql(t){return {sql:`SELECT
|
|
243
243
|
column_name,
|
|
244
244
|
data_type,
|
|
245
245
|
CASE WHEN nullable = 'Y' THEN 'YES' ELSE 'NO' END as is_nullable,
|
|
@@ -249,7 +249,7 @@ ORDER BY cc.position`,bindings:[]}}},em=new vs;var Qs=class{toSql(t){return {sql
|
|
|
249
249
|
data_scale as numeric_scale
|
|
250
250
|
FROM user_tab_columns
|
|
251
251
|
WHERE table_name = '${t.table.toUpperCase()}'
|
|
252
|
-
ORDER BY column_id`,bindings:[]}}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("oracledb",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new T(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 T(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 y(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},rm=new ks;var Ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("oracledb",e.column),o=ae.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}},om=new Ks;var Bs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},nm=new Bs;var Ls=class{toSql(t){let e=t,r=new T(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}}},sm=new Ls;var Ws=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(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 u=e.values[d];return u instanceof P?`${r.formatStringColumn("oracledb",l)} = ${u.rawValue}`:(s.push(u),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},im=new Ws;var Us=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(this.model).formatStringColumn("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 y(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(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 y(this.model).formatStringColumn("oracledb",t):t}},am=new Us;var Fs=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},lm=new Fs;var js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},dm=new js;var Vs=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 T(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 T(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},um=new Vs;var Js=class{toSql(t){let e=t,r=new T(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}}},mm=new Js;var Hs=class{toSql(t){let e=t,r=new T(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:[]}}},cm=new Hs;var Ys=class{toSql(t){let e=t,r=new T(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},pm=new Ys;var zs=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},fm=new zs;var Gs=class{toSql(t){let e=t,r=new T(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim();let 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:[]}}},ym=new Gs;var Zs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let p of e.children){let{sql:m,bindings:c}=n.parse([p]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},hm=new Zs;var Xs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},gm=new Xs;var ei=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},bm=new ei;var ti=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Tm=new ti;var ri=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Nm=new ri;var oi=class{toSql(t){return {sql:"",bindings:[]}}},Sm=new oi;var ni=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},qm=new ni;var si=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},wm=new si;var ii=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Cm=new ii;var ai=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},_m=new ai;var li=class{toSql(t){return {sql:"",bindings:[]}}},Mm=new li;var di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} text check (${o} in (${a}))`,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:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Rm=new di;var ui=class{toSql(t){return {sql:"",bindings:[]}}},xm=new ui;var mi=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("postgres",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Am=new mi;var ci=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let N of e.children){let{sql:C,bindings:R}=n.parse([N]);if(N.folder==="constraint"){let M=s.pop()??"",x=C;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)){let $=`${M} ${x}`.trim();$=$.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push($),a.push(...R);continue}s.push(M),s.push(x),a.push(...R);continue}s.push(C),a.push(...R);}for(let N of e.namedConstraints){let{sql:C,bindings:R}=n.parse([N]);s.push(C),a.push(...R);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.temporary&&u.push("TEMPORARY"),e.unlogged&&u.push("UNLOGGED");let p=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([C,R])=>`${C}=${R}`).join(", ");N&&p.push(`WITH (${N})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",c=u.length>0?`${u.join(" ")} `:"",h=p.length>0?` ${p.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${d}${c}${o} (${l})${h}${f}`,bindings:a}}},$m=new ci;var pi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>r.formatStringColumn("postgres",a)).join(", ");n+=` returning ${s}`;}return {sql:n,bindings:[]}}},Pm=new pi;var fi=class{toSql(t){return {sql:"",bindings:[]}}},Dm=new fi;var yi=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Im=new yi;var hi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Om=new hi;var gi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Em=new gi;var bi=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("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 T(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},vm=new bi;var Ti=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Qm=new Ti;var Ni=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 q)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},km=new Ni;var Si=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Km=new Si;var qi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Bm=new qi;var wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(m=>r.formatStringColumn("postgres",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f=0;f<s.length;f++){let g=c[f];g instanceof P?h.push(g.rawValue):(l.push(g),h.push(`$${u++}${this.formatTypeCast(g)}`));}d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");p+=` returning ${m}`;}else p+=" returning *";return {sql:p,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}},Lm=new wi;var Ci=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("postgres",o),a=r.formatStringColumn("postgres",n),d=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"postgres");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Wm=new Ci;var _i=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Um=new _i;var wf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Mi=class{toSql(t){let e=t,r=wf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Fm=new Mi;var Ri=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},jm=new Ri;var xi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${o}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");a+=` returning ${l}`;}return {sql:a,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}`;}return {sql:s,bindings:[]}}},Vm=new xi;var Ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Jm=new Ai;var $i=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Hm=new $i;var Pi=class{toSql(t){return {sql:`SELECT
|
|
252
|
+
ORDER BY column_id`,bindings:[]}}},em=new vs;var Qs=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 h(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 N(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 N(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 h(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("oracledb",e.column),o=ie.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}},rm=new ks;var Ks=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},om=new Ks;var Bs=class{toSql(t){let e=t,r=new N(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}}},nm=new Bs;var Ls=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(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 u=e.values[d];return u instanceof P?`${r.formatStringColumn("oracledb",l)} = ${u.rawValue}`:(s.push(u),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},sm=new Ls;var Ws=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 h(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 h(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new h(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 h(this.model).formatStringColumn("oracledb",t):t}},im=new Ws;var Us=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},am=new Us;var Fs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(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}}},lm=new Fs;var js=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 N(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 N(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},dm=new js;var Vs=class{toSql(t){let e=t,r=new N(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}}},um=new Vs;var Js=class{toSql(t){let e=t,r=new N(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:[]}}},mm=new Js;var Hs=class{toSql(t){let e=t,r=new N(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},cm=new Hs;var Ys=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},pm=new Ys;var zs=class{toSql(t){let e=t,r=new N(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim();let 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:[]}}},fm=new zs;var Gs=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"postgres"),s=[],a=[];for(let p of e.children){let{sql:m,bindings:c}=n.parse([p]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},ym=new Gs;var Zs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},hm=new Zs;var Xs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},gm=new Xs;var ei=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},bm=new ei;var ti=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Tm=new ti;var ri=class{toSql(t){return {sql:"",bindings:[]}}},Nm=new ri;var oi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Sm=new oi;var ni=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},qm=new ni;var si=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},wm=new si;var ii=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Cm=new ii;var ai=class{toSql(t){return {sql:"",bindings:[]}}},_m=new ai;var li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("postgres",w(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,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 a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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 a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} text check (${o} in (${a}))`,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:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Mm=new li;var di=class{toSql(t){return {sql:"",bindings:[]}}},Rm=new di;var ui=class{toSql(t){let e=t,r=new h(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",w(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",w(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 P?{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",w(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",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},xm=new ui;var mi=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"postgres"),s=[],a=[];for(let g of e.children){let{sql:C,bindings:R}=n.parse([g]);if(g.folder==="constraint"){let _=s.pop()??"",x=C;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)){let $=`${_} ${x}`.trim();$=$.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push($),a.push(...R);continue}s.push(_),s.push(x),a.push(...R);continue}s.push(C),a.push(...R);}for(let g of e.namedConstraints){let{sql:C,bindings:R}=n.parse([g]);s.push(C),a.push(...R);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.temporary&&u.push("TEMPORARY"),e.unlogged&&u.push("UNLOGGED");let p=[];if(e.postgresWith){let g=Object.entries(e.postgresWith).map(([C,R])=>`${C}=${R}`).join(", ");g&&p.push(`WITH (${g})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",c=u.length>0?`${u.join(" ")} `:"",f=p.length>0?` ${p.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${d}${c}${o} (${l})${f}${y}`,bindings:a}}},Am=new mi;var ci=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>r.formatStringColumn("postgres",a)).join(", ");n+=` returning ${s}`;}return {sql:n,bindings:[]}}},$m=new ci;var pi=class{toSql(t){return {sql:"",bindings:[]}}},Pm=new pi;var fi=class{toSql(t){return {sql:`(${t.columns.map(o=>new h(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Dm=new fi;var yi=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Im=new yi;var hi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Om=new hi;var gi=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(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 N(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Em=new gi;var bi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},vm=new bi;var Ti=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 S)&&!Array.isArray(e.value)&&(o=`${new h(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 h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Qm=new Ti;var Ni=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},km=new Ni;var Si=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Km=new Si;var qi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(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(m=>r.formatStringColumn("postgres",m)).join(", "),l=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(y=>m[y]),f=[];for(let y=0;y<s.length;y++){let b=c[y];b instanceof P?f.push(b.rawValue):(l.push(b),f.push(`$${u++}${this.formatTypeCast(b)}`));}d.push(`(${f.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");p+=` returning ${m}`;}else p+=" returning *";return {sql:p,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}},Bm=new qi;var wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new N(this.model,"postgres");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let f=c.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Lm=new wi;var Ci=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Wm=new Ci;var wf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},_i=class{toSql(t){let e=t,r=wf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Um=new _i;var Mi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Fm=new Mi;var Ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${o}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");a+=` returning ${l}`;}return {sql:a,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}`;}return {sql:s,bindings:[]}}},jm=new Ri;var xi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Vm=new xi;var Ai=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Jm=new Ai;var $i=class{toSql(t){return {sql:`SELECT
|
|
253
253
|
con.conname AS name,
|
|
254
254
|
pg_get_constraintdef(con.oid) AS expression
|
|
255
255
|
FROM pg_constraint con
|
|
@@ -257,7 +257,7 @@ ORDER BY column_id`,bindings:[]}}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.
|
|
|
257
257
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
258
258
|
WHERE con.contype = 'c'
|
|
259
259
|
AND rel.relname = '${t.table}'
|
|
260
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
260
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},Hm=new $i;var Pi=class{toSql(t){return {sql:`SELECT
|
|
261
261
|
tc.constraint_name as name,
|
|
262
262
|
kcu.column_name as column_name,
|
|
263
263
|
ccu.table_name as referenced_table,
|
|
@@ -272,7 +272,7 @@ ORDER BY column_id`,bindings:[]}}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.
|
|
|
272
272
|
JOIN information_schema.referential_constraints rc
|
|
273
273
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
274
274
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
275
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
275
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Ym=new Pi;var Di=class{toSql(t){return {sql:`SELECT
|
|
276
276
|
i.relname as index_name,
|
|
277
277
|
a.attname as column_name,
|
|
278
278
|
ix.indisunique as is_unique
|
|
@@ -291,14 +291,14 @@ ORDER BY column_id`,bindings:[]}}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.
|
|
|
291
291
|
AND t.relname = '${t.table}'
|
|
292
292
|
AND t.relnamespace = n.oid
|
|
293
293
|
AND n.nspname = current_schema()
|
|
294
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
294
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},zm=new Di;var Ii=class{toSql(t){return {sql:`SELECT
|
|
295
295
|
tc.constraint_name as name,
|
|
296
296
|
kcu.column_name as column_name
|
|
297
297
|
FROM information_schema.table_constraints tc
|
|
298
298
|
JOIN information_schema.key_column_usage kcu
|
|
299
299
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
300
300
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
301
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
301
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Gm=new Ii;var Oi=class{toSql(t){return {sql:`SELECT column_name,
|
|
302
302
|
data_type,
|
|
303
303
|
is_nullable,
|
|
304
304
|
column_default,
|
|
@@ -308,13 +308,13 @@ ORDER BY column_id`,bindings:[]}}},tm=new Qs;var ks=class{toSql(t){let e=t;if(e.
|
|
|
308
308
|
FROM information_schema.columns
|
|
309
309
|
WHERE table_schema = current_schema()
|
|
310
310
|
AND table_name = '${t.table}'
|
|
311
|
-
ORDER BY ordinal_position`,bindings:[]}}},Xm=new Ei;var vi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new T(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 T(this.model,"postgres").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},ec=new vi;var Qi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=ae.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}},tc=new Qi;var ki=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},rc=new ki;var Ki=class{toSql(t){let e=t,r=new T(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}}},oc=new Ki;var Bi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof P?(n++,`${r.formatStringColumn("postgres",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("postgres",d)} = $${p}${this.formatTypeCast(m)}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");l+=` returning ${d}`;}return {sql:l,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}},nc=new Bi;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;o=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},sc=new Li;var Wi=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ic=new Wi;var Ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":o=`${s} = $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "not contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},ac=new Ui;var Fi=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 T(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 T(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},lc=new Fi;var ji=class{toSql(t){let e=t,r=new T(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}}},dc=new ji;var Vi=class{toSql(t){let e=t,r=new T(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:[]}}},uc=new Vi;var Ji=class{toSql(t){return {sql:"",bindings:[]}}},mc=new Ji;var Hi=class{toSql(t){return {sql:"",bindings:[]}}},cc=new Hi;var Yi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(!(!c||!c.trim())){if(m.file==="add_column")s.push(c),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",g=c.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${g}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(c),l=false;}a.push(...h);}}let d=s.join(", "),u=e.ifExists?"if exists ":"";return d.trim()?{sql:`${u}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},pc=new Yi;var zi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fc=new zi;var Gi=class{toSql(t){return {sql:"",bindings:[]}}},yc=new Gi;var Zi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},hc=new Zi;var Xi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},gc=new Xi;var ea=class{toSql(t){return {sql:"",bindings:[]}}},bc=new ea;var ta=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tc=new ta;var ra=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Nc=new ra;var oa=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Sc=new oa;var na=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},qc=new na;var sa=class{toSql(t){return {sql:"",bindings:[]}}},wc=new sa;var ia=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",w(e.column)),n=e.dataType.toLowerCase();if(n==="bigincrement")return {sql:`${o} integer primary key autoincrement`,bindings:[]};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 e.autoIncrement?{sql:`${o} integer primary key autoincrement`,bindings:[]}:{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 a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}if(n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"){let a=`${o} text`;return (n==="datetime"||n==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(n==="boolean")return {sql:`${o} integer`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} text`,bindings:[]};if(n==="enum")return {sql:`${o} text`,bindings:[]};if(n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} ${n}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Cc=new ia;var aa=class{toSql(t){return {sql:"",bindings:[]}}},_c=new aa;var la=class{toSql(t){let e=t,r=new y(this.model),o=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let n=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return n&&(s==="integer"||s==="bigint")?{sql:`${o}primary key autoincrement`,bindings:[]}:{sql:`${o}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let n=e.columns.map(s=>r.formatStringColumn("sqlite",w(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 P?{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",w(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${o}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Mc=new la;var da=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:g,bindings:N}=n.parse([f]);if(f.folder==="constraint"){let C=s.pop()??"",R=g;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let M=`${C} ${R}`.trim();M=M.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...N);continue}s.push(C),s.push(R),a.push(...N);continue}s.push(g),a.push(...N);}for(let f of e.namedConstraints){let{sql:g,bindings:N}=n.parse([f]);s.push(g),a.push(...N);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.sqliteTemporary&&u.push("TEMPORARY");let p=u.length>0?`${u.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",c=e.strict?" STRICT":"";return {sql:`${d}${p}${o} (${l})${m}${c}`,bindings:a}}},Rc=new da;var ua=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},xc=new ua;var ma=class{toSql(t){return {sql:"distinct",bindings:[]}}},Ac=new ma;var ca=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},$c=new ca;var pa=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Pc=new pa;var fa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Dc=new fa;var ya=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("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 T(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Ic=new ya;var ha=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Oc=new ha;var ga=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 q)&&!Array.isArray(e.value)&&(o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Ec=new ga;var ba=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},vc=new ba;var Ta=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Qc=new Ta;var Na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(p=>r.formatStringColumn("sqlite",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof P?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},kc=new Na;var Sa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("sqlite",o),a=r.formatStringColumn("sqlite",n),d=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"sqlite");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Kc=new Sa;var qa=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Bc=new qa;var wa=class{toSql(t){return {sql:"",bindings:[]}}},Lc=new wa;var Ca=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Wc=new Ca;var _a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},Uc=new _a;var Ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Fc=new Ma;var Ra=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},jc=new Ra;var xa=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Vc=new xa;var Aa=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Jc=new Aa;var $a=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Hc=new $a;var Pa=class{toSql(t){return {sql:`SELECT
|
|
311
|
+
ORDER BY ordinal_position`,bindings:[]}}},Zm=new Oi;var Ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(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 h(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 N(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 N(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 h(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},Xm=new Ei;var vi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),o=ie.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}},ec=new vi;var Qi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},tc=new Qi;var ki=class{toSql(t){let e=t,r=new N(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}}},rc=new ki;var Ki=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof P?(n++,`${r.formatStringColumn("postgres",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("postgres",d)} = $${p}${this.formatTypeCast(m)}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");l+=` returning ${d}`;}return {sql:l,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}},oc=new Ki;var Bi=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 h(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 h(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new h(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 h(this.model).formatStringColumn("postgres",t):t}},nc=new Bi;var Li=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},sc=new Li;var Wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new h(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}}},ic=new Wi;var Ui=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 N(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 N(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ac=new Ui;var Fi=class{toSql(t){let e=t,r=new N(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}}},lc=new Fi;var ji=class{toSql(t){let e=t,r=new N(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:[]}}},dc=new ji;var Vi=class{toSql(t){return {sql:"",bindings:[]}}},uc=new Vi;var Ji=class{toSql(t){return {sql:"",bindings:[]}}},mc=new Ji;var Hi=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:c,bindings:f}=n.parse([m]);if(!(!c||!c.trim())){if(m.file==="add_column")s.push(c),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",b=c.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${b}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(c),l=false;}a.push(...f);}}let d=s.join(", "),u=e.ifExists?"if exists ":"";return d.trim()?{sql:`${u}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},cc=new Hi;var Yi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},pc=new Yi;var zi=class{toSql(t){return {sql:"",bindings:[]}}},fc=new zi;var Gi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},yc=new Gi;var Zi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},hc=new Zi;var Xi=class{toSql(t){return {sql:"",bindings:[]}}},gc=new Xi;var ea=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},bc=new ea;var ta=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Tc=new ta;var ra=class{toSql(t){let e=t,r;return e.defaultValue instanceof P?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:[]}}},Nc=new ra;var oa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Sc=new oa;var na=class{toSql(t){return {sql:"",bindings:[]}}},qc=new na;var sa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("sqlite",w(e.column)),n=e.dataType.toLowerCase();if(n==="bigincrement")return {sql:`${o} integer primary key autoincrement`,bindings:[]};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 e.autoIncrement?{sql:`${o} integer primary key autoincrement`,bindings:[]}:{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 a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}if(n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"){let a=`${o} text`;return (n==="datetime"||n==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(n==="boolean")return {sql:`${o} integer`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} text`,bindings:[]};if(n==="enum")return {sql:`${o} text`,bindings:[]};if(n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} ${n}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},wc=new sa;var ia=class{toSql(t){return {sql:"",bindings:[]}}},Cc=new ia;var aa=class{toSql(t){let e=t,r=new h(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",w(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 P?{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",w(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",w(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 e.constraintType==="check"?e.checkExpression?{sql:`${o}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},_c=new aa;var la=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:b,bindings:g}=n.parse([y]);if(y.folder==="constraint"){let C=s.pop()??"",R=b;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let _=`${C} ${R}`.trim();_=_.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(_),a.push(...g);continue}s.push(C),s.push(R),a.push(...g);continue}s.push(b),a.push(...g);}for(let y of e.namedConstraints){let{sql:b,bindings:g}=n.parse([y]);s.push(b),a.push(...g);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.sqliteTemporary&&u.push("TEMPORARY");let p=u.length>0?`${u.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",c=e.strict?" STRICT":"";return {sql:`${d}${p}${o} (${l})${m}${c}`,bindings:a}}},Mc=new la;var da=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},Rc=new da;var ua=class{toSql(t){return {sql:"distinct",bindings:[]}}},xc=new ua;var ma=class{toSql(t){return T.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Ac=new ma;var ca=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},$c=new ca;var pa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Pc=new pa;var fa=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(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 N(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Dc=new fa;var ya=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Ic=new ya;var ha=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 S)&&!Array.isArray(e.value)&&(o=`${new h(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 h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Oc=new ha;var ga=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Ec=new ga;var ba=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},vc=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(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(p=>r.formatStringColumn("sqlite",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(f=>p[f]),c=[];for(let f of m)f instanceof P?c.push(f.rawValue):(l.push(f),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Qc=new Ta;var Na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new N(this.model,"sqlite");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let f=c.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},kc=new Na;var Sa=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Kc=new Sa;var qa=class{toSql(t){return {sql:"",bindings:[]}}},Bc=new qa;var wa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Lc=new wa;var Ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(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:[]}}},Wc=new Ca;var _a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Uc=new _a;var Ma=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Fc=new Ma;var Ra=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},jc=new Ra;var xa=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Vc=new xa;var Aa=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Jc=new Aa;var $a=class{toSql(t){return {sql:`SELECT
|
|
312
312
|
'PRIMARY' as name,
|
|
313
313
|
name as column_name
|
|
314
314
|
FROM pragma_table_info('${t.table}')
|
|
315
315
|
WHERE pk > 0
|
|
316
|
-
ORDER BY pk`,bindings:[]}}},Yc=new Pa;var Da=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},zc=new Da;var Ia=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new T(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 T(this.model,"sqlite").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},Gc=new Ia;var Oa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=ae.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}},Zc=new Oa;var Ea=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Xc=new Ea;var va=class{toSql(t){let e=t,r=new T(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}}},ep=new va;var Qa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(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 P?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},tp=new Qa;var ka=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},rp=new ka;var Ka=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},op=new Ka;var Ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},np=new Ba;var La=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 T(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 T(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},sp=new La;var Wa=class{toSql(t){let e=t,r=new T(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}}},ip=new Wa;var ap={mssql:{alter_table:{add_column:bl,add_constraint:Tl,add_primary_key:Nl,alter_column_type:Sl,alter_table:ql,drop_column:wl,drop_constraint:Cl,drop_default:_l,drop_not_null:Ml,drop_primary_key:Rl,rename_column:xl,rename_table:Al,set_default:$l,set_not_null:Pl,set_table_options:Dl},column:{column_type:Il},constraint:{after:Ol,constraint:El},create_table:{create_table:vl},delete:{delete:Ql},distinct:{distinct:kl,distinct_on:Kl},drop_table:{drop_table:Bl},extension:{create_extension:Ll},from:{from:Wl},group_by:{group_by:Ul},having:{having:Fl},index_op:{create_index:jl,drop_index:Vl},insert:{insert:Jl},join:{join:Hl},limit:{limit:Yl},lock:{lock:zl},offset:{offset:Gl},on_duplicate:{on_duplicate:Zl},order_by:{order_by:Xl},raw:{raw:ed},schema:{check_constraint_info:td,foreign_key_info:rd,index_info:od,primary_key_info:nd,table_info:sd},select:{select:id,select_json:ad},truncate:{truncate:ld},union:{union:dd},update:{update:ud},where:{where:md,where_group:cd,where_json:pd,where_subquery:fd},with:{with:yd}},mysql:{alter_table:{add_column:hd,add_constraint:gd,add_primary_key:bd,alter_column_type:Td,alter_table:Nd,drop_column:Sd,drop_constraint:qd,drop_default:wd,drop_not_null:Cd,drop_primary_key:_d,rename_column:Md,rename_table:Rd,set_default:xd,set_not_null:Ad,set_table_options:$d},column:{column_type:Pd},constraint:{after:Dd,constraint:Id},create_table:{create_table:Od},delete:{delete:Ed},distinct:{distinct:vd,distinct_on:Qd},drop_table:{drop_table:kd},extension:{create_extension:Kd},from:{from:Bd},group_by:{group_by:Ld},having:{having:Wd},index_op:{create_index:Ud,drop_index:Fd},insert:{insert:jd},join:{join:Vd},limit:{limit:Jd},lock:{lock:Hd},offset:{offset:Yd},on_duplicate:{on_duplicate:zd},order_by:{order_by:Gd},raw:{raw:Zd},schema:{check_constraint_info:Xd,foreign_key_info:eu,index_info:tu,primary_key_info:ru,table_info:ou},select:{select:nu,select_json:su},truncate:{truncate:iu},union:{union:au},update:{update:lu},where:{where:du,where_group:uu,where_json:mu,where_subquery:cu},with:{with:pu}},oracledb:{alter_table:{add_column:fu,add_constraint:yu,add_primary_key:hu,alter_column_type:gu,alter_table:bu,drop_column:Tu,drop_constraint:Nu,drop_default:Su,drop_not_null:qu,drop_primary_key:wu,rename_column:Cu,rename_table:_u,set_default:Mu,set_not_null:Ru,set_table_options:xu},column:{column_type:Au},constraint:{after:$u,constraint:Pu},create_table:{create_table:Du},delete:{delete:Iu},distinct:{distinct:Ou,distinct_on:Eu},drop_table:{drop_table:vu},extension:{create_extension:Qu},from:{from:ku},group_by:{group_by:Ku},having:{having:Bu},index_op:{create_index:Lu,drop_index:Wu},insert:{insert:Uu},join:{join:Fu},limit:{limit:ju},lock:{lock:Vu},offset:{offset:Ju},on_duplicate:{on_duplicate:Hu},order_by:{order_by:Yu},raw:{raw:zu},schema:{check_constraint_info:Gu,foreign_key_info:Zu,index_info:Xu,primary_key_info:em,table_info:tm},select:{select:rm,select_json:om},truncate:{truncate:nm},union:{union:sm},update:{update:im},where:{where:am,where_group:lm,where_json:dm,where_subquery:um},with:{with:mm}},postgres:{alter_table:{add_column:cm,add_constraint:pm,add_primary_key:fm,alter_column_type:ym,alter_table:hm,drop_column:gm,drop_constraint:bm,drop_default:Tm,drop_not_null:Nm,drop_primary_key:Sm,rename_column:qm,rename_table:wm,set_default:Cm,set_not_null:_m,set_table_options:Mm},column:{column_type:Rm},constraint:{after:xm,constraint:Am},create_table:{create_table:$m},delete:{delete:Pm},distinct:{distinct:Dm,distinct_on:Im},drop_table:{drop_table:Om},extension:{create_extension:Em},from:{from:vm},group_by:{group_by:Qm},having:{having:km},index_op:{create_index:Km,drop_index:Bm},insert:{insert:Lm},join:{join:Wm},limit:{limit:Um},lock:{lock:Fm},offset:{offset:jm},on_duplicate:{on_duplicate:Vm},order_by:{order_by:Jm},raw:{raw:Hm},schema:{check_constraint_info:Ym,foreign_key_info:zm,index_info:Gm,primary_key_info:Zm,table_info:Xm},select:{select:ec,select_json:tc},transaction:{},truncate:{truncate:rc},union:{union:oc},update:{update:nc},where:{where:sc,where_group:ic,where_json:ac,where_subquery:lc},with:{with:dc}},sqlite:{alter_table:{add_column:uc,add_constraint:mc,alter_column_type:cc,alter_table:pc,drop_column:fc,drop_constraint:yc,drop_default:hc,drop_not_null:gc,drop_primary_key:bc,rename_column:Tc,rename_table:Nc,set_default:Sc,set_not_null:qc,set_table_options:wc},column:{column_type:Cc},constraint:{after:_c,constraint:Mc},create_table:{create_table:Rc},delete:{delete:xc},distinct:{distinct:Ac,distinct_on:$c},drop_table:{drop_table:Pc},extension:{create_extension:Dc},from:{from:Ic},group_by:{group_by:Oc},having:{having:Ec},index_op:{create_index:vc,drop_index:Qc},insert:{insert:kc},join:{join:Kc},limit:{limit:Bc},lock:{lock:Lc},offset:{offset:Wc},on_duplicate:{on_duplicate:Uc},order_by:{order_by:Fc},raw:{raw:jc},schema:{check_constraint_info:Vc,foreign_key_info:Jc,index_info:Hc,primary_key_info:Yc,table_info:zc},select:{select:Gc,select_json:Zc},transaction:{},truncate:{truncate:Xc},union:{union:ep},update:{update:tp},where:{where:rp,where_group:op,where_json:np,where_subquery:sp},with:{with:ip}}};var T=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(M=>!!M&&M.folder==="distinctOn"),n=!o&&t.find(M=>!!M&&M.folder==="distinct"),s=this.dbType==="mssql"?t.find(M=>!!M&&M.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(M=>M!==null&&M.folder!=="distinct"&&M.folder!=="distinctOn"),d=l.some(M=>M.folder==="offset"),u=l.some(M=>M.folder==="order_by"),p=l.find(M=>M.folder==="limit"),m=l.find(M=>M.folder==="offset"),c=this.dbType==="mssql"&&p&&!d&&!u,h=this.dbType==="mssql"&&!c&&(p||m),f=this.dbType==="oracledb"&&(p||m),g=[],N=[],C=null;c&&p&&N.push(p.limit);for(let M=0;M<l.length;M++){let x=l[M];if(c&&x.folder==="limit"||h&&(x.folder==="limit"||x.folder==="offset")||f&&(x.folder==="limit"||x.folder==="offset"))continue;x.currParamIndex=e+N.length;let $=ap[this.mapCommonDbType(this.dbType)][x.folder][x.file];if(!$)throw new Error(`Interpreter not found for ${this.dbType} ${x.keyword}`);$.model=this.model;let _=$.toSql(x);if(!_.sql||!_.sql.trim().length)continue;let E=l[M+1],D=!E||E.keyword!==x.keyword?"":E.chainsWith;if(x.folder==="lock"||x.folder==="on_duplicate"||x.folder==="schema"){g.push(`${_.sql}${D}`),N.push(..._.bindings),C=x.keyword;continue}if(C!==x.keyword||x.canKeywordBeSeenMultipleTimes){if(r)g.push(`${_.sql}${D}`);else {let J=x.keyword;if(x.folder==="with"&&this.dbType!=="mssql"){let Z=M,we=false;for(;Z<l.length&&l[Z].keyword===x.keyword;){let Re=l[Z];if(Re.folder==="with"&&Re.clause==="recursive"){we=true;break}Z++;}we&&(J=`${J} recursive`);}if(J==="select"){let Z=c?`top (@${e}) `:"";if(o){let we=Array.isArray(o.columns)?o.columns.join(", "):"";g.push(`select ${Z}distinct on (${we}) ${_.sql}${D}`);}else n?g.push(`select ${Z}distinct ${_.sql}${D}`):g.push(`select ${Z}${_.sql}${D}`);}else J==="from"&&a?g.push(`${J} ${_.sql}${a}${D}`):g.push(`${J} ${_.sql}${D}`);}C=x.keyword;}else g.push(`${_.sql}${D}`);N.push(..._.bindings);}if(h){u||g.push("order by (select null)");let M=m?.offset??0;N.push(M);let $=`offset @${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;$+=` fetch next @${_} rows only`;}g.push($);}if(f){u||g.push("order by null");let M=m?.offset??0;N.push(M);let $=`offset :${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;$+=` fetch next :${_} rows only`;}g.push($);}return {sql:g.join(" "),bindings:N}}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 Jt=class extends q{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Ht=class extends q{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Yt=class extends q{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var zt=class extends q{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Gt=class extends q{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Zt=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var ue=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Xe=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Xt=class extends q{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 q{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 q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ce=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Tt=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var tr=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var et=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var rr=class extends q{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 q{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 q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var Ee=class extends q{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var U=class extends q{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 q{constructor(e,r=[],o=[],n=false,s){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,s&&Object.assign(this,s);}};var ir=class extends q{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 q{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 q{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 q{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 tt=class extends q{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Cf(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var ur=Symbol("columns"),rt=Symbol("primaryKey"),Ua=Symbol("relations"),lp=Symbol("indexes"),dp=Symbol("uniques"),up=Symbol("checks"),Fa=i=>`${Cf(i)}_id`,ja=(i,t)=>`idx_${i}_${t}`,pe=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,fe=(i,t)=>`pk_${i}_${t}`;var Q=class extends q{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.autoCreate=o.autoCreate,this.autoUpdate=o.autoUpdate,this.collate=o.collate,this.isRawValue=o.isRawValue??false,this.unsigned=o.unsigned,this.zerofill=o.zerofill;}};var Nt=class extends q{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 ve=class extends q{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 ot=class extends q{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 mr=class extends q{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=fe(this.tableName,w(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new U("primary_key",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new U("primary_key",{columns:[w(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??"",w(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[w(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new U("foreign_key",{columns:[w(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new U("not_null",{columns:[w(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new U("null",{columns:[w(this.columnNode.column)]})),this}default(t){let e;return t instanceof P?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new U("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new U("unique",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName??pe(this.tableName??"",w(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName||pe(this.tableName??"",w(this.columnNode.column))})),this)}check(t,e){let r=w(this.columnNode.column),o=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new mr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new U("primary_key",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Qe=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;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new cr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new P(e)}char(e,r=1){let o=new Q(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new Q(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let o=new Q(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new Q(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new Q(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new Q(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new Q(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new Q(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new Q(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new Q(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new Q(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new Q(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 Q(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new Q(e,"time",{precision:r});return this.build(o)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let o=new Q(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}timestamp(e,r){let o=new Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new Q(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let o=new Q(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new Q(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(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 P(t)}addColumn(t){let e=[],r=new Qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(p=>p.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(p=>{let m=p;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),d=new Zt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(p=>{let m=p;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(p=>{this.nodes.push(new ue(p));});}alterColumn(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new Qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(c=>c.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=w(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),u=o.getNodes().find(c=>c.constraintType==="not_null")||l,p=o.getNodes().find(c=>c.constraintType==="default"),m={};u&&(m.nullable=u.constraintType==="null"),p&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?m.dropDefault=true:m.default=p.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new Xt(w(a),s,m)),u&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(u.constraintType==="not_null"?this.nodes.push(new nr(w(a))):u.constraintType==="null"&&this.nodes.push(new tr(w(a)))),p&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?this.nodes.push(new Tt(w(a))):this.nodes.push(new or(w(a),p.defaultValue))),o.getNodes().forEach(c=>{let h=c;switch(h.constraintType){case "primary_key":this.addPrimaryKey(w(a));break;case "unique":this.unique(w(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(w(a),h.references?.table??"",w(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.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 S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Tt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Xe([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ue(new U(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ue(new U("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 S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ue(new U("unique",{columns:[t],constraintName:e?.constraintName??pe(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new S("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 ce(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new S("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??pe(this.table,t);this.nodes.push(new ce(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ce(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new S("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new et(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",o=this.sqlType==="mssql",n=this.sqlType==="oracledb";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new Ee(t)):r?this.nodes.push(new Ee(t)):o?this.nodes.push(new Ee(t)):n&&this.nodes.push(new Ee(t)),this)}};var Te=class{constructor(t){if(this.sqlType=t||I.DB_TYPE,!this.sqlType)throw new S("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new P(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!oe.existsSync(t))throw new S("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ze.basename(t),r=ze.extname(e);if(r!==".sql"&&r!==".txt")throw new S("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=oe.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of n)this.rawQuery(s);}createTable(t,e,r){let o=new Qe(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new T({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?o.getMysqlOptions()||{}:{}},l=new sr(t,n,o.getNamedConstraints(),r?.ifNotExists,a),d=s.parse([l]).sql,u=d.startsWith("create table")?d:`create table ${d}`;this.rawQuery(u),this.generateAutoUpdateTriggers(t,n);}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 d=new me(t,s),u=n.parse([d]).sql;if(!u||!u.trim())return;let p=u.startsWith("alter table")?u:`alter table ${u}`;this.rawQuery(p),s=[];};for(let d of r)d.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(d);a();let l=r.filter(d=>d.file==="add_column").map(d=>d.column);this.generateAutoUpdateTriggers(t,l);}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 Ze(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new tt(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||ja(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 Xe(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??pe(t,o.join("_")),s=new U("unique",{columns:o,constraintName:n}),a=new me(t,[new ue(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 ce(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)?pe(t,e.join("_")):pe(t,e),n=r?.constraintName??o,s=new ce(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 et,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),o=new me(t,[new ue(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ce(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addCheck(t,e,r){let o=r?.constraintName??`chk_${t}_custom`.substring(0,63),n=new U("check",{checkExpression:e,constraintName:o}),s=new me(t,[new ue(n)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new ce(e),o=new me(t,[r]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).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);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(o=>o.folder==="column"&&o.autoUpdate===true).map(o=>w(o.column));for(let o of r){let n=this.getAutoUpdateTriggerSql(t,o);for(let s of n)this.rawQuery(s);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];case "oracledb":return [`CREATE OR REPLACE TRIGGER "${r}" BEFORE UPDATE ON "${t}" FOR EACH ROW BEGIN :NEW."${e}" := CURRENT_TIMESTAMP; END;`];default:return []}}generateAstInstance(t){return new T(t,this.sqlType)}};var yr,pp,fr=class{constructor(t,e){rl(this,yr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new Te(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=ol(this,yr,pp).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
317
|
-
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}};yr=new WeakSet,pp=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var Ne=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var hr=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 u of d)u.type==="belongsTo"&&u.model().table===n.table&&a.push(`fk.${l.table}.${u.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(u=>u.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let u=l.getRelations();for(let p of u)p.columnName===d.columnName&&a.push(`fk.${n.table}.${p.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(u=>u.table===a&&u.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){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,o=>{o.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var gr=class gr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new hr(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.schema().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);}}).toQuery();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.schema().alterTable(o.table,s=>{s.dropConstraint(o.name);}).toQueries();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 Te(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||fe(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,d=>{let u=a||fe(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:u});}).toQueries();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(u=>u.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});}).toQueries();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]});}for(let o of t.checksToDrop||[]){let n=new Te(this.sql.getDbType());n.dropCheck(o.table,o.name);let s=n.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}for(let o of t.checksToAdd||[]){let n=new Te(this.sql.getDbType());n.addCheck(o.table,o.expression,{constraintName:o.name});let s=n.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=w(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=w(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=w(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;if(Array.isArray(r.type))s=e.enum(o[0],r.type);else if(typeof r.type=="string"&&gr.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...o);else if(typeof r.type=="string")s=e.custom(o[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||fe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),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.schema().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});}).toQueries()}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.schema().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.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&s.default(null),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.nullable(),s});}).toQueries()}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 Te(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=w(t.relation.manyToManyOptions.throughModel),r=w(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=w(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),c=m.primaryKey,f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let c=m.getColumns(),h=c.find(f=>f.columnName===n);if(h)n=h.databaseName;else {let f=m.primaryKey||"id",g=c.find(N=>N.columnName===f);if(g)n=g.databaseName;else {let N=m?.databaseCaseConvention||"preserve";n=V(n||f,N);}}}else {let c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(m=>m.columnName===l);if(d)l=d.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=V(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(c=>c.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,c);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,c=w(m),h=a.find(f=>f.columnName===c);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=V(c,f);}}let u=t.relation.onDelete?.toLowerCase(),p=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let c=o||H(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:c,onDelete:u,onUpdate:p});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};gr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var St=gr;var Tr=class Tr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],o=null,n={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==o&&(o=s.phase,e.length>0&&e.push(""),e.push(`// ${n[o]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let n of e.columns){let s=this.generateColumnCode(e.table,n,true);r.push(` ${s}`);}r.push("});");let o=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:o}}generateAddColumnCode(t){let{table:e,column:r}=t.data,o=this.generateColumnCode(e,r,false),n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:n,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:o}=t.data,n=this.generateColumnCodeForModify(e,r,o),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(o.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],n=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:o,down:n}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(d=>d.table===e.table),n=(r?.getIndexes().find(d=>d.name===e.index)?.columns||[]).map(d=>r?.getColumns().find(p=>p.columnName===d)?.databaseName||d),s=n.length===1?this.quote(n[0]):`[${n.map(d=>this.quote(d)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],o=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:o}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:o,referencedColumn:n,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),d=[];s&&d.push(`constraintName: ${this.quote(s)}`),a&&d.push(`onDelete: ${this.quote(a)}`),l&&d.push(`onUpdate: ${this.quote(l)}`);let u=d.length>0?`, { ${d.join(", ")} }`:"",p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(o)}, ${this.quote(n)}${u});`,"});"],m=s||H(e.table,r,o),c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:p,down:c}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],n=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:o,down:n}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(d=>d.table===e.table),n=`[${(e.columns||[]).map(d=>r?.getColumns().find(p=>p.columnName===d)?.databaseName||d).map(d=>this.quote(d)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,o=t.constraint||e.name;if(!o||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],d=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:d}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(o)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:a,down:l}}let n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:n,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],o=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:o}}generateAddPrimaryKeyCode(t){let e=t.data,n=this.models.find(d=>d.table===e.table)?.getColumns().find(d=>d.columnName===e.columns[0])?.primaryKeyConstraintName||fe(e.table,e.columns[0]),s=`[${e.columns.map(d=>this.quote(d)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(n)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],o=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:o}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],n=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:o,down:n}}generateColumnCode(t,e,r){let o=this.generateColumnTypeCode(e);if(!r)return o;if(e.isPrimary){let n=e.primaryKeyConstraintName||fe(t,e.columnName);o+=`.primaryKey({ constraintName: ${this.quote(n)} })`;}return e.unsigned&&(o+=".unsigned()"),e.zerofill&&(o+=".zerofill()"),e.constraints?.default!==void 0&&(o+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o+";"}generateColumnCodeForModify(t,e,r){let o=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?o+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(o+=".default(null)"),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Tr.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let d=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===d)?.databaseName||d;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=w(t.relation.manyToManyOptions.throughModel);let l=w(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let n=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=n.find(d=>d.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=w(t.relation.manyToManyOptions.leftForeignKey);s=n.find(u=>u.columnName===l)?.databaseName||l;}else s=n.find(d=>d.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:w(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Tr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var br=Tr;function Mf(i){return i.replace(/\s+/g," ").trim()}function Rf(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Pe(i,t){let e=Mf(t.toLowerCase()),r=Rf(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==="string",normalized:"varchar"},{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 "boolean";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 "string":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 "string":case "varchar":case "character varying":return "varchar";case "char":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 "string":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 "string":case "varchar":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 ke=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],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(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let N of n.indexes)o.indexes.map(C=>C.name).includes(N.name)||e.data.indexesToAdd.push({table:r.table,index:N.name});let f=r.getUniques?.()||[];for(let N of f)e.data.uniquesToAdd.push({table:r.table,name:N.name||"mandatory",columns:N.columns});let g=r.getChecks?.()||[];for(let N of g)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of n.relations){if(N.type!=="belongsTo")continue;let C=w(N.constraintName);o.foreignKeys.find(M=>M.name===C)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of n.columns)o.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of o.columns)s.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of n.indexes)o.indexes.map(g=>g.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)o.indexes.some(N=>N.name===f.name&&N.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=o.foreignKeys.map(f=>f.name);for(let f of o.indexes)f.isUnique||l.includes(f.name)||n.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of o.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(N=>N.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let d=r.getChecks?.()||[];for(let f of d)o.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let u=new Set(d.map(f=>f.name)),p=n.columns.filter(f=>Array.isArray(f.type)),m=new Set(p.map(f=>f.databaseName||f.columnName));for(let f of o.checkConstraints)if(!u.has(f.name)){let g=[...m].find(N=>new RegExp(`[\\["\\[]?${N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i").test(f.expression));if(g){let N=p.find(R=>(R.databaseName||R.columnName)===g),C=o.columns.find(R=>R.name===g);if(N&&C?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),M=[...C.enumValues].sort();if(!(R.length===M.length&&R.every(($,_)=>$===M[_]))){e.data.checksToDrop.push({table:r.table,name:f.name});let $=e.sql.getDbType(),_=$==="mssql"?"[":'"',E=$==="mssql"?"]":'"',X=N.type.map(D=>`'${D.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${_}${g}${E} IN (${X})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of n.columns){let g=o.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!g)continue;let N=!e.areColumnsEqual(g,f,o.indexes),C=e.getDefaultChange({table:r.table,dbColumns:g,modelColumn:f});(N||C)&&e.data.columnsToModify.push({table:r.table,dbColumns:g,modelColumn:f});}for(let f of n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let C=w(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:C,relation:{type:"belongsTo",model:()=>r,columnName:w(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?w(f.constraintName):H(C,w(f.manyToManyOptions.leftForeignKey||Fa(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let g=w(f.constraintName);if(g&&o.foreignKeys.some(C=>C.name===g))continue;o.foreignKeys.find(C=>e.relationMatchesDbRelation(r,f,C))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let c=new Set(n.relations.filter(f=>f.type==="belongsTo").map(f=>{let g=w(f.foreignKey)||f.columnName,C=r.getColumns().find(R=>R.columnName===g)?.databaseName||g;return w(f.constraintName)||H(r.table,C,f.model().table)}));for(let f of o.foreignKeys){if(f.name&&c.has(f.name))continue;n.relations.find(N=>N.type!=="belongsTo"&&N.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,N,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let g=o.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));g&&!e.areRelationsEqual(g,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:g,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),o.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),h&&o.primaryKey){let f=r.getColumns().find(g=>g.columnName===h);f&&!e.arePrimaryKeysEqual(o.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let o=r.trim();return o?!this.emptyStatements.some(n=>n.test(o)):false})}getCodeStatements(){let e=new St(this.sql).generateOperations(this.data);return new br(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new St(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=Pe(n,t.dataType),a=typeof e.type=="string"?Pe(n,e.type):void 0;if(a&&o&&(o=s===a),Array.isArray(e.type)&&(n==="mysql"||n==="mariadb")){let d=[...e.type].sort(),u=t.enumValues?[...t.enumValues].sort():null;u&&o&&(o=d.length===u.length&&d.every((p,m)=>p===u[m]));}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")&&(n==="postgres"||n==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,u=t.isNullable;o=o&&d===u;}if(n==="mysql"||n==="mariadb"){if(e.unsigned!==void 0||t.unsigned!==void 0){let d=e.unsigned??false,u=t.unsigned??false;o&&(o=d===u);}if(e.zerofill!==void 0||t.zerofill!==void 0){let d=e.zerofill??false,u=t.zerofill??false;o&&(o=d===u);}}return o}areRelationsEqual(t,e){let r=w(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),u=d.primaryKey||"id",p=d.getColumns().find(h=>h.columnName===u),m=d.table,c=p?.databaseName||u;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===c;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=w(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 f=n.model();f&&f.table&&(o=f);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?w(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=w(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),u=(n.type||"belongsTo")==="belongsTo"?w(n.foreignKey):n.columnName,p=l.find(f=>f.columnName===u);p&&(u=p.databaseName);let m=o.primaryKey||"id",h=o.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===u&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=this.sql.getDbType();if(["mysql","mariadb"].includes(n))return o;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Pe(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?Pe(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||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&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 s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",d=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&d?false:"drop";if(s&&a){let u=String(t.dbColumns.defaultValue),p=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,u),c=this.normalizeDefaultValue(e,o||r,p);return m!==c?"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);if(n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(o))return "true";if(/^0$/.test(o))return "false"}return 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=w(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(D=>D.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",u=s.getColumns().find(D=>D.columnName===l),p=a.getColumns().find(D=>D.columnName===d);if(!u||!p)continue;let m=w(o.manyToManyOptions.leftForeignKey)||l,c=w(o.manyToManyOptions.rightForeignKey)||d,h=await this.sql.getTableSchema(n);if(!h.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(u,m),this.clonePkAsColumn(p,c)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:c,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(u,m),g=this.clonePkAsColumn(p,c),N=h.columns.find(D=>D.name===m),C=h.columns.find(D=>D.name===c),R=N?this.areColumnsEqual(N,f,h.indexes):false,M=C?this.areColumnsEqual(C,g,h.indexes):false;for(let D of h.foreignKeys){let J=D.referencedTable===s.table,Z=D.referencedTable===a.table;if(!J&&!Z)continue;let we=J?m:c,Re=D.columns[0];Re&&Re!==we&&(this.data.relationsToDrop.push({table:n,relation:D}),Re!==m&&Re!==c&&this.data.columnsToDrop.push({table:n,column:Re}));}let x={};R||(x[f.databaseName]=f),M||(x[g.databaseName]=x[g.databaseName]||g);for(let D of Object.keys(x))this.data.columnsToAdd.push({table:n,column:x[D]});let $=this.buildBelongsToRelation(n,()=>s,m,l,void 0,o.onDelete,o.onUpdate),_=this.buildBelongsToRelation(n,o.model,c,d,void 0,o.onDelete,o.onUpdate),E=h.foreignKeys.find(D=>D.referencedTable===s.table&&D.columns.length===1&&D.columns[0]===m),X=h.foreignKeys.find(D=>D.referencedTable===a.table&&D.columns.length===1&&D.columns[0]===c);if(!E){let D=h.foreignKeys.find(J=>J.referencedTable===s.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push($);}if(!X){let D=h.foreignKeys.find(J=>J.referencedTable===a.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push(_);}}}}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,u=o.getColumns().find(m=>m.columnName===l)?.databaseName||l,p=w(a.constraintName)||H(o.table,u,a.model().table);s.add(p);}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(f=>f.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(g=>g.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(g=>g.columnName===l)?.databaseName||l;let d=o.table,u=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let f=o.relation.model();d=f.table;let g=f.primaryKey||"id";u=f.getColumns().find(C=>C.columnName===g)?.databaseName||g;}let p=new Set([l,o.relation.columnName].filter(Boolean)),m=n.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let g=p.has(f.columns[0]),N=f.referencedTable===d,C=f.referencedColumns[0]===u;return g&&N&&C}),c=w(o.relation.constraintName)||H(o.table,l,d),h=e.get(o.table)||new Set;if(m||c&&h.has(c))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let f=w(o.relation.manyToManyOptions.throughModel),g=w(o.relation.manyToManyOptions.leftForeignKey),N=w(o.relation.manyToManyOptions.rightForeignKey),C=o.table===f&&o.relation.columnName===g&&o.relation.model().table===s?.table,R=o.table===f&&o.relation.columnName===N&&o.relation.model().table!==s?.table,M=await this.sql.getTableSchema(f),x=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===g&&_.referencedTable===(s?.table||"")),$=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===N&&_.referencedTable===o.relation.model().table);if(C&&x||R&&$)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 p=a.find(g=>g.columnName===d.foreignKey)?.databaseName||d.foreignKey,m=d.model(),c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c)?.databaseName||c;return o.relation.columns.length===1&&o.relation.columns[0]===p&&o.relation.referencedTable===m.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===f})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,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?w(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 nt=class extends q{constructor(e,r=false,o){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e,this.returning=o;}};var W=class extends q{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var j=class extends q{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 ye=class extends q{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 Ce=class extends q{constructor(e,r=[],o=[],n=false,s){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o,this.returning=s;}};var A=class extends q{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 qe=class extends q{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var ne=class extends A{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 he=class extends q{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 yp;yp=Symbol.toStringTag;var Y=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[yp]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var xf=async(i,t,e,r,o,n=false)=>{let s=Object.create(t.prototype),a=null;for(let l of Object.keys(i)){let d=i[l],u=r.get(l)?.columnName??l,p=e.has(u),m=n?true:o?o.has(u):true;if(p){if(!m)continue;if(d===null){s[u]=null;continue}let c=e.get(u);if(c?.serialize){let h=c.serialize(d);h!==null&&typeof h?.then=="function"?(a||(a=[]),a.push({key:u,promise:h})):s[u]=h;continue}s[u]=d;continue}(!n||o&&o.has(u))&&(s[u]=d);}if(a){let l=await Promise.all(a.map(d=>d.promise));for(let d=0;d<a.length;d++)s[a[d].key]=l[d];}if(o)for(let l of o)l in s||(s[l]=null);return s},_e=async(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),n=e.some(d=>d.includes("*")),s=[];for(let d of e){if(d.toLowerCase().includes(" as ")){let c=d.match(/\s+as\s+(.+)$/i);c&&s.push(c[1].trim());continue}let p=d;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let m=r.get(p)?.columnName??p;s.push(m);}let a=s.length?new Set(s):null,l=await Promise.all(i.map(d=>xf(d,t,r,o,a,n)));return l.length===1?l[0]:l};var Af=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,$f=/^\d{4}-\d{2}-\d{2}$/,Ja=i=>typeof i!="string"?i:Af.test(i)?new Date(i.replace(" ","T")+"Z"):$f.test(i)?new Date(i+"T00:00:00Z"):i,Pf=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);}}),hp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await Pf(r):t[e]=r;}return t};var Nr=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);});}},gp=(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,u)=>{n.run(i,t,function(p){p&&u(p),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,u)=>{n.all(i,t,(p,m)=>{p&&u(p),(!m||!m.length)&&d([]),d(m);});});let s=r?.typeofModel;if(!s)return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.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((p,m)=>{n.run(i,t,function(c){if(c)return m(c);let h=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){p([h]);return}let f=h?.[a]||this.lastID;if(!f)return m(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let g=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(g,[f],(N,C)=>{if(N)return m(N);p([C]);});});});if(!Array.isArray(r.models))throw new S("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);p(d);});});let u=[];return new Promise(async(p,m)=>{try{let c=d.map(async h=>{let f=new y(s),{columns:g,values:N}=await f.prepareColumns(Object.keys(h),Object.values(h),"insert"),C=Object.fromEntries(g.map(($,_)=>[$,N[_]])),R=new T(s,e.getDbType()),{sql:M,bindings:x}=R.parse([new j(new W(s.table),[C])]);return new Promise(($,_)=>{n.run(M,x,function(E){if(E)return _(E);let X=h[a]||this.lastID;if(!X)return _(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let D=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(D,[X],(J,Z)=>{if(J)return _(J);$(Z);});});})});u=await Promise.all(c),p(u);}catch(c){m(c);}})}return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});})};var F=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||te(i,e.logs,t,e.inputDetails.queryFormatOptions,r),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await qt(()=>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=0,u=i.replace(/\?/g,()=>`$${++d}`),p=await qt(()=>l.query(u,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?p.rows:o==="raw"?p:p.rowCount;case "sqlite":let m=await qt(()=>gp(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 c=e.getPool(),h=e.sqlConnection?e.sqlConnection.request():c.request();t.forEach((x,$)=>{h.input(`p${$}`,x);});let f=0,g=i.replace(/\?|@(\d+)/g,()=>`@p${f++}`),N=await qt(()=>h.query(g),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?N.rowsAffected[0]:o==="raw"?N:N.recordset;case "oracledb":let C=4002,R=null,M=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(Ja),$=0,_=i.replace(/\?/g,()=>`:${++$}`),E=await qt(()=>R.execute(_,x,{outFormat:C,autoCommit:!M}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?E.rowsAffected:o==="raw"?E:await Promise.all(E.rows?.map(async D=>{let J=await hp(D),Z={};for(let we in J)Z[we.toLowerCase()]=J[we];return Z})??[])}finally{R&&!M&&await R.close();}default:throw new S("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},qr=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}),u=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),p=0,m=false,c=false,h=()=>{try{a.release();}catch{}};return u.on("data",f=>{if(o.onData){p++,Promise.resolve(o.onData(l,f)).then(()=>{p--,m&&p===0&&!c&&(h(),l.end());}).catch(g=>{c=true,h(),l.destroy(g);});return}l.write(f);}),u.on("end",()=>{m=true,p===0&&!c&&(h(),l.end());}),u.on("error",f=>{c=true,h(),l.destroy(f);}),l.on("close",()=>{h();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new K("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),u=0,p=i.replace(/\?/g,()=>`$${++u}`),m=new l.default(p,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),c=a.query(m),h=0,f=false,g=false,N=C=>{try{a.release(C);}catch{}};return c.on("data",C=>{if(o.onData){h++,Promise.resolve(o.onData(d,C)).then(()=>{h--,f&&h===0&&!g&&(N(),d.end());}).catch(R=>{g=true,N(R),d.destroy(R);});return}d.write(C);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),d.end());}),c.on("error",C=>{g=true,N(C),d.destroy(C);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new Nr(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((h,f)=>{l.input(`p${f}`,h);});let d=0,u=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),p=0,m=false,c=false;return l.on("row",h=>{if(!c){if(o.onData){p++,Promise.resolve(o.onData(a,h)).then(()=>{p--,m&&p===0&&!c&&a.end();}).catch(f=>{c=true,a.destroy(f);});return}a.write(h);}}),l.on("error",h=>{c=true,a.destroy(h);}),l.on("done",()=>{m=true,p===0&&!c&&a.end();}),l.query(u),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,u=0,p=i.replace(/\?/g,()=>`:${++u}`),m=t.map(Ja),c=a.queryStream(p,m,{outFormat:d}),h=0,f=false,g=false,N=async()=>{try{await a.close();}catch{}};return c.on("data",C=>{if(g)return;let R={};for(let M in C)R[M.toLowerCase()]=C[M];if(o.onData){h++,Promise.resolve(o.onData(l,R)).then(()=>{h--,f&&h===0&&!g&&(N(),l.end());}).catch(M=>{g=true,N(),l.destroy(M);});return}l.write(R);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),l.end());}),c.on("error",C=>{g=true,N(),l.destroy(C);}),l}default:throw new S("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function qt(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++,al(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var L=(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 st=class{};st.modelCaseConvention="camel",st.databaseCaseConvention="snake";Ke.extend(Ef);Ke.extend(Of);Ke.extend(If);var it=(i=new Date)=>Ke(i).utc().format("YYYY-MM-DD HH:mm:ss");var G=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);}}};G.store=new WeakMap;var wr=class extends Ne{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Cr=class extends Ne{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var _r=class extends Ne{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Mr=class extends Ne{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;}};function wp(i){try{return G.getMetadata(ur,i.prototype)||[]}catch{return []}}function Cp(i){return G.getMetadata(Ua,i.prototype)||[]}function _p(i){return (G.getMetadata(Ua,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=w(s),l=o();switch(r){case "belongsTo":return new wr(l,n,a);case "hasOne":return new _r(l,n,a);case "hasMany":return new Cr(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new S("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Mr(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:w(e.manyToManyOptions.throughModel),leftForeignKey:w(e.manyToManyOptions.leftForeignKey),rightForeignKey:w(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Mp(i){return G.getMetadata(rt,i)||G.getMetadata(rt,i.prototype)}function Rp(i){return G.getMetadata(lp,i.prototype)||[]}function xp(i){return G.getMetadata(dp,i.prototype)||[]}function Ap(i){return G.getMetadata(up,i.prototype)||[]}var le=class{};le.columns=new WeakMap,le.byName=new WeakMap,le.byDatabaseName=new WeakMap;var at=class extends st{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Mp(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=le.columns.get(this);return t||(t=wp(this),le.columns.set(this,t)),t}static getColumnsByName(){let t=le.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),le.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=le.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),le.byDatabaseName.set(this,t)),t}static getRelations(){return Cp(this)}static getIndexes(){return Rp(this)}static getUniques(){return xp(this)}static getChecks(){return Ap(this)}};at.softDeleteColumn="deletedAt",at.softDeleteValue=it();var Ct=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=_p(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 S("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Rr(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 $p(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var lt=i=>typeof i=="number"?i:parseFloat(i);var de=class extends q{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 Be=class extends q{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 xr=class extends q{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Ar=class extends q{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var De=class extends q{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 ie=class extends q{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 _t=class extends q{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 $r=class extends q{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Pr=class extends q{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Mt=class extends q{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 Ir=class Ir{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=Ir.EMPTY_MAP);}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 _t(e));}),this}groupByRaw(t){return this.groupByNodes.push(new _t(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Mt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Mt(t,"asc",true)),this}limit(t){return typeof t!="number"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new $r(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Pr(t),this}};Ir.EMPTY_MAP=new Map;var Dr=Ir;var Le=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 A(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 A(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 A(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 A(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 A(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 A(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",false,"in",e)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",false,"in",e)),this):(this.whereNodes.push(new A("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"and",true,"in",e)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",true,"in",e)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new A(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new A(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new A(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new A(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 A(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 A(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 A(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 A(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 qe(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 qe(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new A(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new A(t,"or",true,"=",e??[],true)),this}};var Or=class extends Dr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ie(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ie(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ie(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ie(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ie(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new ie(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 S("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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new ie(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new ie(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new ie(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new ie(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,d)),this}};var Er=class extends Or{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new W(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[s,a]=r;this.modelSelectedColumns.push(a);let l=V(s,this.model.databaseCaseConvention);this.selectNodes.push(new de(l,a));return}let o=r;this.modelSelectedColumns.push(o);let n=V(o,this.model.databaseCaseConvention);this.selectNodes.push(new de(n));}),this}selectRaw(e){return this.selectNodes.push(new de(e,void 0,void 0,true)),this}selectFunc(e,r,o){let n=r==="*"?"*":V(r,this.model.databaseCaseConvention);return this.selectNodes.push(new de(`${e.toLowerCase()}(${n}) as ${o}`,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new W(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new W(e),this}distinct(){return this.distinctNode=new xr,this}distinctOn(...e){return this.distinctOnNode=new Ar(e),this}selectJson(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract")),this}selectJsonText(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract_text")),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new De(e,r,o,"array_length")),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new De(e,r,o,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new De(e,"",r,"raw",true)),this}};var vr=class extends Er{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 k&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||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 k&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(e,"or",false,n,s)),this}whereColumn(e,r,o){return this.andWhereColumn(e,r,o)}andWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new A(e,"and",false,n,new P(s))),this}orWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new A(e,"or",false,n,new P(s))),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",false,"in",r)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",false,"in",r)),this):(this.whereNodes.push(new A("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 A(e,"and",true,"in",r)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",true,"in",r)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new A(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new A(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new A(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new A(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 A(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 A(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new he("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new he("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new he("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new he("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new A(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new A(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 Be(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 Be(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Be(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Be(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(this.model,this.sqlDataSource),o=e(r);return o!=null&&"extractQueryNodes"in o?o:r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new he(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new he(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new qe(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new qe(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Qr=class extends vr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"or",false,"raw",e)),this}};var k=class i extends Qr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;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),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 T(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,o]=e;if(typeof r=="function"){let n=new i(this.model,this.sqlDataSource),s=r(n),a=s!=null&&"extractQueryNodes"in s?s:n;return this.selectNodes.push(new de(a.extractQueryNodes(),o)),this}return this.selectNodes.push(new de(r.extractQueryNodes(),o)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),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}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>F(e,r,o,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}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 oneOrFail(){let e=await this.one();if(!e)throw new S("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await qr(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,a]=await this.executePaginateQueries(()=>this.many(),()=>n.getCount()),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:$p(e,a),data:s},{key:r.discriminator,value:d}]}lockForUpdate(e={}){return this.lockQueryNodes.push(new Nt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Nt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new ve(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new ve(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&b.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let o=this.clone(),n=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>n.many(),()=>o.getCount("*"));return {paginationMetadata:Rr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new S("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource),n=e(o),a=(n!=null&&"extractQueryNodes"in n?n:o).extractQueryNodes();return this.fromNode=new W(a,r),this}return this.fromNode=new W(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("normal",e,s.extractQueryNodes())),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new S("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("materialized",e,s.extractQueryNodes())),this}insert(e,r){let o=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,[o],r,n),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),l=Object.fromEntries(s.map((c,h)=>[c,a[h]]));this.insertNode=new j(this.fromNode,[l],r,n);let{sql:d,bindings:u}=this.astParser.parse([this.insertNode]),p=await this.getSqlDataSource("write"),m=await F(d,u,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!n)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let o=e.map(s=>Object.fromEntries(Object.keys(s).map(a=>[a,s[a]]))),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,o,r,n),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return n?void 0:[];let s=await Promise.all(e.map(async p=>{let{columns:m,values:c}=await this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert");return Object.fromEntries(m.map((h,f)=>[h,c[f]]))}));this.insertNode=new j(this.fromNode,s,r,n);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),u=await F(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!n)return u})}upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),a=Object.fromEntries(Object.keys(e).map(l=>[l,e[l]]));return this.insertNode=new j(new W(this.model.table),[a],void 0,true),this.onDuplicateNode=new ye(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:d}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),u=Object.fromEntries(l.map((f,g)=>[f,d[g]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([u],s,n,o,[e]);let{sql:p,bindings:m}=this.astParser.parse([new j(new W(this.model.table),[u],void 0,true),new ye(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),h=await F(p,m,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,o,n={updateOnConflict:true}){let s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new j(new W(this.model.table),s,void 0,true),this.onDuplicateNode=new ye(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let a=[];if(await Promise.all(o.map(async m=>{let{columns:c,values:h}=await this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert"),f=Object.fromEntries(c.map((g,N)=>[g,h[N]]));a.push(f);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(a,e,r,n,o);let{sql:l,bindings:d}=this.astParser.parse([new j(new W(this.model.table),a,void 0,true),new ye(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),u=await this.getSqlDataSource("write"),p=await F(l,d,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(p)?p:[p]})}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),u=[],p=e.map(E=>`select ${a.map(D=>(u.push(E[D]),`@${u.length}`)).join(", ")}`),m=a.map(d).join(", "),c=p.join(" union all "),h=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),f=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),g=a.map(d).join(", "),N=a.map(E=>`source.${d(E)}`).join(", "),C=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),M=(n.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",x=`merge into ${l} as target using (${c}) as source (${m}) on ${h} ${M} when not matched then insert (${g}) values (${N}) output ${C};`,$=await this.getSqlDataSource("write"),_=await F(x,u,$,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(_)?_:[_]}update(e,r){let o=Object.keys(e),n=Object.values(e);this.updateNode=new Ce(this.fromNode,o,n,false,r);let s=r&&r.length>0;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:a,values:l}=await this.interpreterUtils.prepareColumns(o,n,"update");this.updateNode=new Ce(this.fromNode,a,l,false,r);let{sql:d,bindings:u}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),p=await this.getSqlDataSource("write");return F(d,u,p,this.dbType,s?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:s?"fetch":"affectedRows"}})})}truncate(){return this.truncateNode=new tt(this.fromNode),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await F(e,r,o,this.dbType,"rows");})}delete(e){this.deleteNode=new nt(this.fromNode,false,e);let r=e&&e.length>0;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:o,bindings:n}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),s=await this.getSqlDataSource("write");return F(o,n,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:o=it()}=e||{};return this.updateNode=new Ce(this.fromNode,[r],[o]),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new Ce(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return F(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Fe(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),o=Ve(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new de("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=B(this.modelSelectedColumns),e.distinctNode=B(this.distinctNode),e.distinctOnNode=B(this.distinctOnNode),e.selectNodes=B(this.selectNodes),e.withQuery=B(this.withQuery),e.joinNodes=B(this.joinNodes),e.whereNodes=B(this.whereNodes),e.groupByNodes=B(this.groupByNodes),e.havingNodes=B(this.havingNodes),e.orderByNodes=B(this.orderByNodes),e.lockQueryNodes=B(this.lockQueryNodes),e.unionNodes=B(this.unionNodes),e.withNodes=B(this.withNodes),e.fromNode=B(this.fromNode),e.limitNode=B(this.limitNode),e.offsetNode=B(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(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 de("*")]),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 L(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await L(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await L(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await L(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await L(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await L(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await L(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await L(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await L(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await L(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await L(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await L(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await L(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}}};function Pp(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:my(i)}function my(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var dt=class i extends k{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.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),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this)};this.sqlModelManagerUtils=new Ct(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[o,n]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(o,n.columnName);}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async oneOrFail(e){let r=await this.one(e);if(!r)throw new S(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a));if(!o.length)return [];let n=await _e(o,this.model,this.modelSelectedColumns);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.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}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 qr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l),u=await _e([d],this.model,this.modelSelectedColumns);u&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([u]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new S(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}upsert(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return n.upsertMany(s,a,[l],{updateOnConflict:o.updateOnConflict??true,returning:o.returning}).then(d=>Array.isArray(d)?d[0]:d)}upsertMany(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=r.length>0?Object.keys(r[0]):[];return n.upsertMany(e,s,r,{updateOnConflict:o.updateOnConflict??true,returning:o.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource;return new Ie(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,o){return this.getModelManager(o?.trx).updateRecord(e,r,o)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let o=this.model.primaryKey;if(!o)throw new S(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[o]:n}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,o){let{column:n=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[n]:s};return this.getModelManager(o?.trx).updateRecord(e,a,{returning:o?.returning})}async firstOrInsert(e,r,o){let n=this.getModelManager(o?.trx),s=await n.findOne({where:e,ignoreHooks:["afterFetch","beforeFetch"]});if(s)return s;let a={...e,...r};return n.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,o,n,s={}){if(Array.isArray(o)||(o=[o]),!o.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new S(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=o.map((c,h)=>({[l]:r[this.model.primaryKey],[d]:c[a.model.primaryKey],...n?n(c,h):{}}));class p extends at{static get table(){return a.throughModel}}p.databaseCaseConvention="preserve",p.modelCaseConvention="preserve",await new Ie(p,s.trx?s.trx.sql:this.sqlDataSource).insertMany(u);}truncate(){return super.truncate()}update(e,r={}){let o=r.returning,n=super.update(e,o);return new Y(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>(r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),n))}softDelete(e={}){let r=super.softDelete(e),{ignoreBeforeUpdateHook:o=false}=e||{};return new Y(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>(o||await this.model.beforeUpdate?.(this),r))}delete(e={}){let r=e.returning,o=super.delete(r);return new Y(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>(e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),o))}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.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:Rr(e,r,d),data:l}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&typeof e[1]=="string"){let[r,o]=e;return super.select(r,o),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],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}load(e,r,o){let n,s={strategy:"auto"};typeof r=="function"?(n=r,o&&(s=o)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,n?.(l),this.relationQueryBuilders.push(l),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereNotExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereNotExists(u),this}clone(){let e=super.clone();return e.relationQueryBuilders=B(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);}));}async processRelationsWithStrategy(e){let r=e.length,o=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),n=async s=>{let a=Pp({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of o)await n(s);return}await Promise.all(o.map(n));}async loadRelationViaJoin(e,r){let o=e.relation,n=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,o,n).many({ignoreHooks:["beforeFetch","afterFetch"]});this.mapJoinedResultsToModels(a,r,o,n);}buildJoinQuery(e,r,o){let n=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)n.selectNodes.push(B(s));else for(let[s]of this.model.getColumnsByDatabaseName())n.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=B(s);this.qualifyWhereNodeColumns(a,this.model.table),n.whereNodes.push(a);}for(let s of this.groupByNodes)n.groupByNodes.push(B(s));for(let s of this.orderByNodes)n.orderByNodes.push(B(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(n.limitNode=B(this.limitNode)),this.offsetNode&&(n.offsetNode=B(this.offsetNode))),r.type){case "hasOne":case "hasMany":n.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":n.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;n.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),n.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(n,r,e,o);for(let s of e.whereNodes)n.whereNodes.push(B(s));for(let s of e.orderByNodes)n.orderByNodes.push(B(s));return n}selectRelationColumnsWithAlias(e,r,o,n){let s=r.columnName,a=r.model,l=a.getColumnsByName(),d=a.getColumnsByDatabaseName(),u=o.selectNodes.filter(m=>typeof m.column=="string"),p=u.some(m=>m.column==="*"||m.column.endsWith(".*"));if(u.length===0||p)for(let[m,c]of d)e.selectRaw(`${a.table}.${m} as ${s}${n}${c.columnName}`);else for(let m of u){let c=m.column,h=c.includes(".")?c.split(".").pop():c,f=d.get(h)||l.get(h),g=f?.databaseName??h,N=m.alias??f?.columnName??h;e.selectRaw(`${a.table}.${g} as ${s}${n}${N}`);}}mapJoinedResultsToModels(e,r,o,n){let{columnName:s,type:a}=o,l=o.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];d.has(p)||d.set(p,[]);let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.get(p).push(m));}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||[];});}else {let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];if(!d.has(p)){let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.set(p,m));}}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||null;});}}extractRelationDataFromRow(e,r,o){let n=`${r}${o}`,s={},a=false,l=false;for(let d of Object.keys(e))if(d.startsWith(n)){let u=d.substring(n.length);s[u]=e[d],a=true,e[d]!==null&&e[d]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof A)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof he)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof qe)for(let o of e.nodes)this.qualifyWhereNodeColumns(o,r);}serializeRelationData(e,r){for(let o of Object.keys(e)){let n=r.get(o);n?.serialize&&e[o]!==null&&e[o]!==void 0&&(e[o]=n.serialize(e[o]));}}async loadRelationViaBatch(e,r){let o=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,o);}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(m=>{let c=m[e.foreignKey];c&&n.set(String(c),m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=null;return}let h=n.get(String(c));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;o.forEach(m=>{if(!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let c=m[e.model.primaryKey];c&&s.set(String(c),m);}),r.forEach(m=>{let c=m[e.foreignKey];if(!c){m[e.columnName]=null;return}let h=s.get(String(c));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(m=>{let c=m[e.foreignKey];if(!c)return;let h=String(c);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=a.get(String(c))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,u=l.leftForeignKey,p=this.modelColumnsMap.get(u)||this.modelColumnsDatabaseNames.get(u)||V(u,this.model.modelCaseConvention);o.forEach(m=>{let c=m[p];if(c==null)return;let h=String(c);d.has(h)||d.set(h,[]),delete m[p],d.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=d.get(String(c))||[];m[e.columnName]=h;});break;default:throw new S(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=Me.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,u=e.orderByNodes.map(_=>_.isRawValue?_.column:`${this.interpreterUtils.formatStringColumn(this.dbType,_.column)} ${_.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let p=e.with(d,_=>_.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${u}) as rn_${l}`).whereIn(r.foreignKey,n));s&&p.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&p.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(_=>po(_,d,e.model.table));return p.select(...m).table(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let c=r;if(!o.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,g=e.modelSelectedColumns.length?e.modelSelectedColumns.map(_=>_.includes(".")?_:`${r.model.table}.${_}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,c.leftForeignKey]).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n);let N=Me.randomBytes(6).toString("hex"),C=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(_=>{if(_.isRawValue)return _.column;let E=_.column.includes(".")?_.column:`${r.model.table}.${_.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${_.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let M=`${Me.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(C,_=>_.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,M]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${c.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,c.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n));h&&x.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&x.whereRaw(`rn_${N} > ${f}`);let $=g.map(_=>po(_,C,e.model.table));return x.select(...$).select([`${C}.${M}`,c.leftForeignKey]).table(C);default:throw new S(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new S(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 S(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new S(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}`),u=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${u}`),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 S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(c=>!c.isRawValue&&c.table===d.throughModel&&c.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let p=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${p} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(p).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new S(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e){let r={};return Object.entries(e).forEach(([o,n])=>{if(this.modelColumnsDatabaseNames.get(o)){r[o]=n;return}r[o]=n;}),r}async manyWithPerformance(e={},r="millis"){let[o,n]=await L(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await L(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await L(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await L(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 L(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await L(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await L(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await L(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await L(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await L(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await L(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}async insertWithPerformance(e,r="millis"){let[o,n]=await L(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await L(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}};function Dp(){return {}}var Ie=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Dp(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new T(this.model,this.sqlType),this.interpreterUtils=new y(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&&this.handleWhereCondition(e,t.where),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 S(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new S(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}insert(t,e={}){let r=Object.fromEntries(Object.keys(t).map(d=>[d,t[d]])),o=!e.returning||e.returning.length===0,n=new j(new W(this.model.table),[r],e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new Y(s,a,l,async()=>{e.ignoreHooks||await this.model.beforeInsert?.(t);let{columns:d,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),p={};d.forEach((C,R)=>{let M=u[R];p[C]=M,t[C]??(t[C]=M);});let m=!e.returning||e.returning.length===0,{sql:c,bindings:h}=this.astParser.parse([new j(new W(this.model.table),[p],e.returning,m)]),f=await F(c,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(f,[t],"one",e.returning);let g=f[0];return g?(await this.model.afterFetch?.([g]),await _e([g],this.model,e.returning)):t})}insertMany(t,e={}){let r=t.map(d=>Object.fromEntries(Object.keys(d).map(u=>[u,d[u]]))),o=!e.returning||e.returning.length===0,n=new j(new W(this.model.table),r,e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new Y(s,a,l,async()=>{if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let g=this.model.primaryKey,N=Object.keys(t[0]||{});if(g&&!N.includes(g))return this.handleOracleIdentityInsert(t,e)}let d=new Array(t.length);await Promise.all(t.map(async(g,N)=>{let{columns:C,values:R}=await this.interpreterUtils.prepareColumns(Object.keys(g),Object.values(g),"insert"),M={};C.forEach((x,$)=>{let _=R[$];M[x]=_,g[x]??(g[x]=_);}),d[N]=M;}));let u=!e.returning||e.returning.length===0,{sql:p,bindings:m}=this.astParser.parse([new j(new W(this.model.table),d,e.returning,u)]),c=await F(p,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(u)return [];if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(c,t,"many",e.returning)||[];let h=c;return h.length?(await this.model.afterFetch?.(h),await _e(h,this.model,e.returning)||[]):[]})}upsertMany(t,e,r,o={updateOnConflict:true}){let n=r.map(m=>Object.fromEntries(Object.keys(m).map(c=>[c,m[c]]))),s=new j(new W(this.model.table),n,void 0,true),a=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new ye(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",a);let d=()=>{let m=this.astParser.parse([s]);return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse([s]);return {sql:Ve(this.sqlDataSource,m.sql),bindings:m.bindings}},p=()=>{let{sql:m,bindings:c}=u();return Fe(m,c)};return new Y(d,u,p,async()=>{let m=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async x=>{let{columns:$,values:_}=await this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert"),E=Object.fromEntries($.map((X,D)=>[X,_[D]]));m.push(E);})),this.sqlType==="mssql")return this.executeMssqlMerge(m,t,e,o,r);let c=!o.returning||o.returning.length===0,h=!c&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0,{sql:f,bindings:g}=this.astParser.parse([new j(new W(this.model.table),m,void 0,true),new ye(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",h)]),N=await F(f,g,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(c)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(N.length<r.length&&!(o.updateOnConflict??true)){let _=t[0],E=r.map(D=>D[_]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(_,E).many()}let x=N;return await this.model.afterFetch?.(x),await _e(x,this.model,o.returning)||[]}let C=t[0],R=r.map(x=>x[C]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(C,R).many()})}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=$=>this.interpreterUtils.formatStringColumn("mssql",$),d=[],u=t.map($=>`select ${s.map(E=>(d.push($[E]),`@${d.length}`)).join(", ")}`),p=s.map(l).join(", "),m=u.join(" union all "),c=e.map($=>`target.${l($)} = source.${l($)}`).join(" and "),h=r.filter($=>!e.includes($)).map($=>`target.${l($)} = source.${l($)}`).join(", "),f=s.map(l).join(", "),g=s.map($=>`source.${l($)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map($=>`inserted.${l($)}`).join(", "):s.map($=>`inserted.${l($)}`).join(", "),R=(o.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",M=`merge into ${a} as target using (${m}) as source (${p}) on ${c} ${R} when not matched then insert (${f}) values (${g}) output ${N};`,x=await F(M,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});if(x.length===0&&!(o.updateOnConflict??true)){let $=e[0],_=n.map(X=>X[$]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn($,_).many()}return x}async updateRecord(t,e,r){let o=new Set(this.model.getColumns().map(h=>h.columnName)),n=Object.keys(e).filter(h=>o.has(h)),s=n.map(h=>e[h]),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(n,s,"update"),{primaryKey:d}=this.model;if(!d)throw new S(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let u=a.indexOf(d);u!==-1&&(a.splice(u,1),l.splice(u,1));let{sql:p,bindings:m}=this.astParser.parse([new Ce(new W(this.model.table),a,l),new A(d,"and",false,"=",t)]);if(await F(p,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let c=await this.findOneByPrimaryKey(t,r.returning);if(!c)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return c}async deleteRecord(t){if(!this.model.primaryKey)throw new S(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new A(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:o}=this.astParser.parse([new nt(new W(this.model.table)),e]);await F(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new dt(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await _e([a],this.model):null}return await _e(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(u=>u[this.model.primaryKey]),l=a.map(u=>`'${u}'`).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((c,h)=>{let f=a[h];l[c]=f,n[c]??(n[c]=f);});let{sql:d,bindings:u}=this.astParser.parse([new j(new W(this.model.table),[l],e.returning)]);await F(d,u,this.sqlDataSource,this.sqlType,"rows");let p=this.query().select(...e.returning||["*"]);for(let[c,h]of Object.entries(l))h!=null&&c!==o&&p.where(c,"=",h);o&&p.orderBy(o,"desc");let m=await p.one({ignoreHooks:["beforeFetch"]});if(m){let c=m;o&&c[o]&&(n[o]=c[o]),r.push(m);}else r.push(n);}return await this.model.afterFetch?.(r),r}handleWhereCondition(t,e,r=false){if(e)for(let[o,n]of Object.entries(e))o==="$and"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{for(let l of n)this.handleWhereCondition(a,l,false);}):o==="$or"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{let l=true;for(let d of n)this.handleWhereCondition(a,d,!l),l=false;}):this.applyFieldCondition(t,o,n,r);}applyFieldCondition(t,e,r,o=false){if(r==null||typeof r!="object"){r===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",r):t.where(e,"=",r);return}let n=r,s=n.op,a=n.value;switch(s){case "$eq":a===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?o?t.orWhereNotNull(e):t.whereNotNull(e):o?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":o?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":o?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":o?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":o?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,d]=a;o?t.orWhereBetween(e,l,d):t.whereBetween(e,l,d);break}case "$not between":{let[l,d]=a;o?t.orWhereNotBetween(e,l,d):t.whereNotBetween(e,l,d);break}case "$regexp":o?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":o?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":o?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":o?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":o?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":o?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":o?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":o?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":o?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":o?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:o?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Ip=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??it()});var Rt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Me.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.transaction(),t)try{let r=await t(e);return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){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),te("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;te("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 S("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "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":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new S("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "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 S("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mssql":te("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new S("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "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 S("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){b.error(t);}await this.sql.disconnect(),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 S("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 S("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 b.error(e),new K("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 S("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var Ga=Symbol.for("hysteria.orm.SqlDataSource"),Op,Ep,xt=class i extends(Ep=Vt,Op=Ga,Ep){constructor(e){super(e);this[Op]=true;this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new jt;this.migrationConfig={path:I.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:ht(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 i(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&Ga in e&&e[Ga]===true}getOnSlaveServerFailure(){return this.onSlaveServerFailure}static async useConnection(e,r){let o=new i(e);await o.connect();try{await r(o),o.isConnected&&await o.disconnect();}catch(n){throw o.isConnected&&await o.disconnect(),n}}async connect(){if(this.isConnected)throw new S("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.sqlPool=await Ue(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Ue(e.sqlType,e.inputDetails),e.ownsPool=true;}));}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,o){if(typeof o=="string"&&o in r)return e.from(r[o])}})}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 S("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new S("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 u=Yr(JSON.stringify(d)),p=u?`${e}:${u}`:e,m=await this.cacheAdapter.get(p);if(m!==void 0)return m;let c=await n(...d);return await this.cacheAdapter.set(p,c,l),c}async invalidCache(e,...r){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new S("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=Yr(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Ue(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let o=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;if(typeof e=="string"){let n=new k(Ip(e,r),o);return r?.alias&&n.table(e,r.alias),n}return new dt(e,o)}schema(){if(!this.isConnected)throw new S("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new fr(this,this.getDbType())}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new Rt(r,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new S("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){b.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async transaction(e,r){let o=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let n=await this.clone();n.sqlConnection=await n.getConnection();let s=new Rt(n,o?.isolationLevel);if(await s.transaction(),typeof e=="function")try{let a=await e(s);return await s.commit({throwErrorOnInactiveTransaction:!1}),a}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}getModelManager(e){if(!this.isConnected)throw new S("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new Ie(e,this.globalTransaction.sql):new Ie(e,this)}getPool(){if(!this.sqlPool)throw new S("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new S("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 S("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async disconnect(){if(!this.isConnected){te("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{b.warn("SqlDataSource::disconnect - 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.disconnect();}catch(r){b.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),te("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 S("SqlDataSource::disconnect",`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 syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){b.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await ke.makeDiff(this)).getSqlStatements();if(!o.length){b.info("No new changes detected between database schema and models metadata");return}if(b.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);b.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),b.info(`Synced schema with ${o.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let o=e[0];if(Array.isArray(o))return o;if(typeof o=="object"&&o!==null&&("insertId"in o||"affectedRows"in o))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],o){if(!this.isConnected)throw new S("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async s=>F(e,r,s,this.getDbType(),"raw")):F(e,r,this,this.getDbType(),"raw")}rawStatement(e){return new P(e)}async getTableSchema(e){let[r,o,n,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]),l=this.getDbType();if(l==="postgres"||l==="mssql")for(let d of r){let u=a.find(p=>{let m=p.expression;return new RegExp(`[\\["\\[]?${d.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(([^)]+)\\)`,"i").test(m)});if(u){let p=new RegExp("IN\\s*\\(([^)]+)\\)","i"),m=u.expression.match(p);m&&(d.enumValues=m[1].split(",").map(c=>c.trim().replace(/^'|'$/g,"")));}}return {columns:r,indexes:o,foreignKeys:n,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return gl(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Hr(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await hl(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gt(e)]).sql,n=[];try{let a=await this.rawQuery(o);n=this.extractRowsFromRawResult(a);}catch(a){if(je(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=Pe(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(),u=Pe(s,d),p=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,m=typeof p=="string"?p.toLowerCase()!=="no":typeof p=="boolean"?p:a.notnull!==void 0?a.notnull===0:true,c=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,h=a.char_length!=null?Number(a.char_length):null,f=a.numeric_precision!=null?Number(a.numeric_precision):null,g=a.numeric_scale!=null?Number(a.numeric_scale):null,N=a.timezone!=null?!!a.timezone:/with time zone/.test(String(a.column_type||a.udt_name||d||"").toLowerCase()),C=null,R=String(a.column_type||a.COLUMN_TYPE||""),M=R.match(/^enum\((.+)\)$/i);M&&(C=M[1].split(",").map(E=>E.trim().replace(/^'|'$/g,"")));let x=R.toLowerCase(),$=x.includes(" unsigned"),_=x.includes(" zerofill");return {name:l,dataType:u,isNullable:m,defaultValue:c,length:h,precision:f,scale:g,withTimezone:N,enumValues:C,unsigned:$,zerofill:_}})}async getIndexInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yt(e)]).sql,n=this.getDbType(),s=[];try{let l=await this.rawQuery(o);s=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let u=d.Key_name,p=d.Non_unique===0,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.Column_name),l.set(u,m);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let u=d.index_name,p=!!d.is_unique,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.column_name),l.set(u,m);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,u=!!l.unique,p=await this.rawQuery(`PRAGMA index_info(${d})`),c=this.extractRowsFromRawResult(p).map(h=>h.name);a.push({name:d,columns:c,isUnique:u});}return a}async getForeignKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ht(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let u=Number(d.id),p=l.get(u)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};p.columns.push(String(d.from)),p.referencedColumns.push(String(d.to)),l.set(u,p);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),u=d||`${l.referenced_table}_${l.column_name}`,p=a.get(u)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};p.columns.push(String(l.column_name)),p.referencedColumns.push(String(l.referenced_column)),a.set(u,p);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(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 getCheckConstraintInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jt(e)]).sql,n=[];try{let s=await this.rawQuery(o);n=this.extractRowsFromRawResult(s);}catch(s){if(je(this.getDbType(),s))return [];throw s}return n.map(s=>({name:String(s.name),expression:String(s.expression)}))}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
|
|
316
|
+
ORDER BY pk`,bindings:[]}}},Hc=new $a;var Pa=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Yc=new Pa;var Da=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(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 h(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 N(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 N(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 h(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},zc=new Da;var Ia=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),o=ie.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}},Gc=new Ia;var Oa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new h(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Zc=new Oa;var Ea=class{toSql(t){let e=t,r=new N(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}}},Xc=new Ea;var va=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(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 P?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},ep=new va;var Qa=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 h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new h(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 h(this.model).formatStringColumn("sqlite",t):t}},tp=new Qa;var ka=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new N(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},rp=new ka;var Ka=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(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}}},op=new Ka;var Ba=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 N(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 N(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},np=new Ba;var La=class{toSql(t){let e=t,r=new N(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}}},sp=new La;var ip={mssql:{alter_table:{add_column:gl,add_constraint:bl,add_primary_key:Tl,alter_column_type:Nl,alter_table:Sl,drop_column:ql,drop_constraint:wl,drop_default:Cl,drop_not_null:_l,drop_primary_key:Ml,rename_column:Rl,rename_table:xl,set_default:Al,set_not_null:$l,set_table_options:Pl},column:{column_type:Dl},constraint:{after:Il,constraint:Ol},create_table:{create_table:El},delete:{delete:vl},distinct:{distinct:Ql,distinct_on:kl},drop_table:{drop_table:Kl},extension:{create_extension:Bl},from:{from:Ll},group_by:{group_by:Wl},having:{having:Ul},index_op:{create_index:Fl,drop_index:jl},insert:{insert:Vl},join:{join:Jl},limit:{limit:Hl},lock:{lock:Yl},offset:{offset:zl},on_duplicate:{on_duplicate:Gl},order_by:{order_by:Zl},raw:{raw:Xl},schema:{check_constraint_info:ed,foreign_key_info:td,index_info:rd,primary_key_info:od,table_info:nd},select:{select:sd,select_json:id},truncate:{truncate:ad},union:{union:ld},update:{update:dd},where:{where:ud,where_group:md,where_json:cd,where_subquery:pd},with:{with:fd}},mysql:{alter_table:{add_column:yd,add_constraint:hd,add_primary_key:gd,alter_column_type:bd,alter_table:Td,drop_column:Nd,drop_constraint:Sd,drop_default:qd,drop_not_null:wd,drop_primary_key:Cd,rename_column:_d,rename_table:Md,set_default:Rd,set_not_null:xd,set_table_options:Ad},column:{column_type:$d},constraint:{after:Pd,constraint:Dd},create_table:{create_table:Id},delete:{delete:Od},distinct:{distinct:Ed,distinct_on:vd},drop_table:{drop_table:Qd},extension:{create_extension:kd},from:{from:Kd},group_by:{group_by:Bd},having:{having:Ld},index_op:{create_index:Wd,drop_index:Ud},insert:{insert:Fd},join:{join:jd},limit:{limit:Vd},lock:{lock:Jd},offset:{offset:Hd},on_duplicate:{on_duplicate:Yd},order_by:{order_by:zd},raw:{raw:Gd},schema:{check_constraint_info:Zd,foreign_key_info:Xd,index_info:eu,primary_key_info:tu,table_info:ru},select:{select:ou,select_json:nu},truncate:{truncate:su},union:{union:iu},update:{update:au},where:{where:lu,where_group:du,where_json:uu,where_subquery:mu},with:{with:cu}},oracledb:{alter_table:{add_column:pu,add_constraint:fu,add_primary_key:yu,alter_column_type:hu,alter_table:gu,drop_column:bu,drop_constraint:Tu,drop_default:Nu,drop_not_null:Su,drop_primary_key:qu,rename_column:wu,rename_table:Cu,set_default:_u,set_not_null:Mu,set_table_options:Ru},column:{column_type:xu},constraint:{after:Au,constraint:$u},create_table:{create_table:Pu},delete:{delete:Du},distinct:{distinct:Iu,distinct_on:Ou},drop_table:{drop_table:Eu},extension:{create_extension:vu},from:{from:Qu},group_by:{group_by:ku},having:{having:Ku},index_op:{create_index:Bu,drop_index:Lu},insert:{insert:Wu},join:{join:Uu},limit:{limit:Fu},lock:{lock:ju},offset:{offset:Vu},on_duplicate:{on_duplicate:Ju},order_by:{order_by:Hu},raw:{raw:Yu},schema:{check_constraint_info:zu,foreign_key_info:Gu,index_info:Zu,primary_key_info:Xu,table_info:em},select:{select:tm,select_json:rm},truncate:{truncate:om},union:{union:nm},update:{update:sm},where:{where:im,where_group:am,where_json:lm,where_subquery:dm},with:{with:um}},postgres:{alter_table:{add_column:mm,add_constraint:cm,add_primary_key:pm,alter_column_type:fm,alter_table:ym,drop_column:hm,drop_constraint:gm,drop_default:bm,drop_not_null:Tm,drop_primary_key:Nm,rename_column:Sm,rename_table:qm,set_default:wm,set_not_null:Cm,set_table_options:_m},column:{column_type:Mm},constraint:{after:Rm,constraint:xm},create_table:{create_table:Am},delete:{delete:$m},distinct:{distinct:Pm,distinct_on:Dm},drop_table:{drop_table:Im},extension:{create_extension:Om},from:{from:Em},group_by:{group_by:vm},having:{having:Qm},index_op:{create_index:km,drop_index:Km},insert:{insert:Bm},join:{join:Lm},limit:{limit:Wm},lock:{lock:Um},offset:{offset:Fm},on_duplicate:{on_duplicate:jm},order_by:{order_by:Vm},raw:{raw:Jm},schema:{check_constraint_info:Hm,foreign_key_info:Ym,index_info:zm,primary_key_info:Gm,table_info:Zm},select:{select:Xm,select_json:ec},transaction:{},truncate:{truncate:tc},union:{union:rc},update:{update:oc},where:{where:nc,where_group:sc,where_json:ic,where_subquery:ac},with:{with:lc}},sqlite:{alter_table:{add_column:dc,add_constraint:uc,alter_column_type:mc,alter_table:cc,drop_column:pc,drop_constraint:fc,drop_default:yc,drop_not_null:hc,drop_primary_key:gc,rename_column:bc,rename_table:Tc,set_default:Nc,set_not_null:Sc,set_table_options:qc},column:{column_type:wc},constraint:{after:Cc,constraint:_c},create_table:{create_table:Mc},delete:{delete:Rc},distinct:{distinct:xc,distinct_on:Ac},drop_table:{drop_table:$c},extension:{create_extension:Pc},from:{from:Dc},group_by:{group_by:Ic},having:{having:Oc},index_op:{create_index:Ec,drop_index:vc},insert:{insert:Qc},join:{join:kc},limit:{limit:Kc},lock:{lock:Bc},offset:{offset:Lc},on_duplicate:{on_duplicate:Wc},order_by:{order_by:Uc},raw:{raw:Fc},schema:{check_constraint_info:jc,foreign_key_info:Vc,index_info:Jc,primary_key_info:Hc,table_info:Yc},select:{select:zc,select_json:Gc},transaction:{},truncate:{truncate:Zc},union:{union:Xc},update:{update:ep},where:{where:tp,where_group:rp,where_json:op,where_subquery:np},with:{with:sp}}};var N=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(_=>!!_&&_.folder==="distinctOn"),n=!o&&t.find(_=>!!_&&_.folder==="distinct"),s=this.dbType==="mssql"?t.find(_=>!!_&&_.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(_=>_!==null&&_.folder!=="distinct"&&_.folder!=="distinctOn"),d=l.some(_=>_.folder==="offset"),u=l.some(_=>_.folder==="order_by"),p=l.find(_=>_.folder==="limit"),m=l.find(_=>_.folder==="offset"),c=this.dbType==="mssql"&&p&&!d&&!u,f=this.dbType==="mssql"&&!c&&(p||m),y=this.dbType==="oracledb"&&(p||m),b=[],g=[],C=null;c&&p&&g.push(p.limit);for(let _=0;_<l.length;_++){let x=l[_];if(c&&x.folder==="limit"||f&&(x.folder==="limit"||x.folder==="offset")||y&&(x.folder==="limit"||x.folder==="offset"))continue;x.currParamIndex=e+g.length;let $=ip[this.mapCommonDbType(this.dbType)][x.folder][x.file];if(!$)throw new Error(`Interpreter not found for ${this.dbType} ${x.keyword}`);$.model=this.model;let M=$.toSql(x);if(!M.sql||!M.sql.trim().length)continue;let E=l[_+1],D=!E||E.keyword!==x.keyword?"":E.chainsWith;if(x.folder==="lock"||x.folder==="on_duplicate"||x.folder==="schema"){b.push(`${M.sql}${D}`),g.push(...M.bindings),C=x.keyword;continue}if(C!==x.keyword||x.canKeywordBeSeenMultipleTimes){if(r)b.push(`${M.sql}${D}`);else {let J=x.keyword;if(x.folder==="with"&&this.dbType!=="mssql"){let X=_,we=false;for(;X<l.length&&l[X].keyword===x.keyword;){let xe=l[X];if(xe.folder==="with"&&xe.clause==="recursive"){we=true;break}X++;}we&&(J=`${J} recursive`);}if(J==="select"){let X=c?`top (@${e}) `:"";if(o){let we=Array.isArray(o.columns)?o.columns.join(", "):"";b.push(`select ${X}distinct on (${we}) ${M.sql}${D}`);}else n?b.push(`select ${X}distinct ${M.sql}${D}`):b.push(`select ${X}${M.sql}${D}`);}else J==="from"&&a?b.push(`${J} ${M.sql}${a}${D}`):b.push(`${J} ${M.sql}${D}`);}C=x.keyword;}else b.push(`${M.sql}${D}`);g.push(...M.bindings);}if(f){u||b.push("order by (select null)");let _=m?.offset??0;g.push(_);let $=`offset @${e+g.length-1} rows`;if(p){g.push(p.limit);let M=e+g.length-1;$+=` fetch next @${M} rows only`;}b.push($);}if(y){u||b.push("order by null");let _=m?.offset??0;g.push(_);let $=`offset :${e+g.length-1} rows`;if(p){g.push(p.limit);let M=e+g.length-1;$+=` fetch next :${M} rows only`;}b.push($);}return {sql:b.join(" "),bindings:g}}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 Vt=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Jt=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Ht=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Yt=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var zt=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Gt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var de=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Xe=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Zt=class extends S{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 ue=class extends S{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 Xt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var me=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Tt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var er=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var et=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var tr=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var rr=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var or=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var ve=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var U=class extends S{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 nr=class extends S{constructor(e,r=[],o=[],n=false,s){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,s&&Object.assign(this,s);}};var sr=class extends S{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 ir=class extends S{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 ar=class extends S{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 lr=class extends S{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 tt=class extends S{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Cf(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var dr=Symbol("columns"),rt=Symbol("primaryKey"),Wa=Symbol("relations"),ap=Symbol("indexes"),lp=Symbol("uniques"),dp=Symbol("checks"),Ua=i=>`${Cf(i)}_id`,Fa=(i,t)=>`idx_${i}_${t}`,ce=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,pe=(i,t)=>`pk_${i}_${t}`;var Q=class extends S{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.autoCreate=o.autoCreate,this.autoUpdate=o.autoUpdate,this.collate=o.collate,this.isRawValue=o.isRawValue??false,this.unsigned=o.unsigned,this.zerofill=o.zerofill;}};var Nt=class extends S{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 Qe=class extends S{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 ot=class extends S{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 Pe=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var ur=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var mr=class extends Pe{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=pe(this.tableName,w(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new U("primary_key",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new U("primary_key",{columns:[w(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??"",w(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[w(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new U("foreign_key",{columns:[w(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new U("not_null",{columns:[w(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new U("null",{columns:[w(this.columnNode.column)]})),this}default(t){let e;return t instanceof P?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new U("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new U("unique",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName??ce(this.tableName??"",w(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName||ce(this.tableName??"",w(this.columnNode.column))})),this)}check(t,e){let r=w(this.columnNode.column),o=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new ur(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new U("primary_key",{columns:[w(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var ke=class extends Pe{constructor(e,r,o,n){super(r);this.context="create_table";this.tableName=o,this.namedConstraints=[],this.context=n??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new mr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new P(e)}char(e,r=1){let o=new Q(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new Q(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let o=new Q(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new Q(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new Q(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new Q(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new Q(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new Q(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new Q(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new Q(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new Q(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new Q(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 Q(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new Q(e,"time",{precision:r});return this.build(o)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let o=new Q(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}timestamp(e,r){let o=new Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new Q(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let o=new Q(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new Q(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var cr=class extends Pe{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new P(t)}addColumn(t){let e=[],r=new ke(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(p=>p.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(p=>{let m=p;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),d=new Gt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(p=>{let m=p;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(p=>{this.nodes.push(new de(p));});}alterColumn(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new ke(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=w(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),u=o.getNodes().find(c=>c.constraintType==="not_null")||l,p=o.getNodes().find(c=>c.constraintType==="default"),m={};u&&(m.nullable=u.constraintType==="null"),p&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?m.dropDefault=true:m.default=p.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new Zt(w(a),s,m)),u&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(u.constraintType==="not_null"?this.nodes.push(new or(w(a))):u.constraintType==="null"&&this.nodes.push(new er(w(a)))),p&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?this.nodes.push(new Tt(w(a))):this.nodes.push(new rr(w(a),p.defaultValue))),o.getNodes().forEach(c=>{let f=c;switch(f.constraintType){case "primary_key":this.addPrimaryKey(w(a));break;case "unique":this.unique(w(a),{constraintName:f.constraintName});break;case "foreign_key":this.foreignKey(w(a),f.references?.table??"",w(f.references?.columns?.[0]??""),{constraintName:f.constraintName,onDelete:f.onDelete,onUpdate:f.onUpdate});break}});}dropColumn(t){this.nodes.push(new Xt(t));}renameColumn(t,e){this.nodes.push(new tr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Tt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Xe([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new de(new U(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new de(new U("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 q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new de(new U("unique",{columns:[t],constraintName:e?.constraintName??ce(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new q("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 me(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new q("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??ce(this.table,t);this.nodes.push(new me(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new me(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new q("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new et(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",o=this.sqlType==="mssql",n=this.sqlType==="oracledb";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new ve(t)):r?this.nodes.push(new ve(t)):o?this.nodes.push(new ve(t)):n&&this.nodes.push(new ve(t)),this)}};var be=class{constructor(t){if(this.sqlType=t||I.DB_TYPE,!this.sqlType)throw new q("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new P(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!oe.existsSync(t))throw new q("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ze.basename(t),r=ze.extname(e);if(r!==".sql"&&r!==".txt")throw new q("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=oe.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 ke(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new N({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?o.getMysqlOptions()||{}:{}},l=new nr(t,n,o.getNamedConstraints(),r?.ifNotExists,a),d=s.parse([l]).sql,u=d.startsWith("create table")?d:`create table ${d}`;this.rawQuery(u),this.generateAutoUpdateTriggers(t,n);}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 d=new ue(t,s),u=n.parse([d]).sql;if(!u||!u.trim())return;let p=u.startsWith("alter table")?u:`alter table ${u}`;this.rawQuery(p),s=[];};for(let d of r)d.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(d);a();let l=r.filter(d=>d.file==="add_column").map(d=>d.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new sr(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new ue(t,[new Ze(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new tt(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||Fa(t,e.join("_")),n=new ar(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new lr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new Xe(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??ce(t,o.join("_")),s=new U("unique",{columns:o,constraintName:n}),a=new ue(t,[new de(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 me(o),s=new ue(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)?ce(t,e.join("_")):ce(t,e),n=r?.constraintName??o,s=new me(n),a=new ue(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new et,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),o=new ue(t,[new de(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new me(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addCheck(t,e,r){let o=r?.constraintName??`chk_${t}_custom`.substring(0,63),n=new U("check",{checkExpression:e,constraintName:o}),s=new ue(t,[new de(n)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new me(e),o=new ue(t,[r]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}createExtension(t,e=true){let r=new ir(t,e),o=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(o=>o.folder==="column"&&o.autoUpdate===true).map(o=>w(o.column));for(let o of r){let n=this.getAutoUpdateTriggerSql(t,o);for(let s of n)this.rawQuery(s);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];case "oracledb":return [`CREATE OR REPLACE TRIGGER "${r}" BEFORE UPDATE ON "${t}" FOR EACH ROW BEGIN :NEW."${e}" := CURRENT_TIMESTAMP; END;`];default:return []}}generateAstInstance(t){return new N(t,this.sqlType)}};var fr,cp,pr=class{constructor(t,e){tl(this,fr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new be(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=rl(this,fr,cp).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
317
|
+
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}};fr=new WeakSet,cp=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var Te=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var yr=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 u of d)u.type==="belongsTo"&&u.model().table===n.table&&a.push(`fk.${l.table}.${u.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(u=>u.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let u=l.getRelations();for(let p of u)p.columnName===d.columnName&&a.push(`fk.${n.table}.${p.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(u=>u.table===a&&u.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){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,o=>{o.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var hr=class hr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new yr(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.schema().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);}}).toQuery();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.schema().alterTable(o.table,s=>{s.dropConstraint(o.name);}).toQueries();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 be(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||pe(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,d=>{let u=a||pe(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:u});}).toQueries();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(u=>u.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});}).toQueries();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]});}for(let o of t.checksToDrop||[]){let n=new be(this.sql.getDbType());n.dropCheck(o.table,o.name);let s=n.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}for(let o of t.checksToAdd||[]){let n=new be(this.sql.getDbType());n.addCheck(o.table,o.expression,{constraintName:o.name});let s=n.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=w(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=w(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=w(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;if(Array.isArray(r.type))s=e.enum(o[0],r.type);else if(typeof r.type=="string"&&hr.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...o);else if(typeof r.type=="string")s=e.custom(o[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||pe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),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.schema().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});}).toQueries()}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.schema().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.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&s.default(null),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.nullable(),s});}).toQueries()}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 be(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=w(t.relation.manyToManyOptions.throughModel),r=w(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=w(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),c=m.primaryKey,y=m.getColumns().find(b=>b.columnName===c);if(y)n=y.databaseName;else {let b=m?.databaseCaseConvention||"preserve";n=V(c,b);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let c=m.getColumns(),f=c.find(y=>y.columnName===n);if(f)n=f.databaseName;else {let y=m.primaryKey||"id",b=c.find(g=>g.columnName===y);if(b)n=b.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(n||y,g);}}}else {let c=m.primaryKey||"id",y=m.getColumns().find(b=>b.columnName===c);if(y)n=y.databaseName;else {let b=m?.databaseCaseConvention||"preserve";n=V(c,b);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(m=>m.columnName===l);if(d)l=d.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=V(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(c=>c.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,c);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,c=w(m),f=a.find(y=>y.columnName===c);if(f)l=f.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=V(c,y);}}let u=t.relation.onDelete?.toLowerCase(),p=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let c=o||H(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:c,onDelete:u,onUpdate:p});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};hr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var St=hr;var br=class br{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],o=null,n={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==o&&(o=s.phase,e.length>0&&e.push(""),e.push(`// ${n[o]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let n of e.columns){let s=this.generateColumnCode(e.table,n,true);r.push(` ${s}`);}r.push("});");let o=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:o}}generateAddColumnCode(t){let{table:e,column:r}=t.data,o=this.generateColumnCode(e,r,false),n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:n,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:o}=t.data,n=this.generateColumnCodeForModify(e,r,o),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(o.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],n=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:o,down:n}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(d=>d.table===e.table),n=(r?.getIndexes().find(d=>d.name===e.index)?.columns||[]).map(d=>r?.getColumns().find(p=>p.columnName===d)?.databaseName||d),s=n.length===1?this.quote(n[0]):`[${n.map(d=>this.quote(d)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],o=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:o}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:o,referencedColumn:n,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),d=[];s&&d.push(`constraintName: ${this.quote(s)}`),a&&d.push(`onDelete: ${this.quote(a)}`),l&&d.push(`onUpdate: ${this.quote(l)}`);let u=d.length>0?`, { ${d.join(", ")} }`:"",p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(o)}, ${this.quote(n)}${u});`,"});"],m=s||H(e.table,r,o),c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:p,down:c}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],n=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:o,down:n}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(d=>d.table===e.table),n=`[${(e.columns||[]).map(d=>r?.getColumns().find(p=>p.columnName===d)?.databaseName||d).map(d=>this.quote(d)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,o=t.constraint||e.name;if(!o||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],d=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:d}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(o)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:a,down:l}}let n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:n,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],o=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:o}}generateAddPrimaryKeyCode(t){let e=t.data,n=this.models.find(d=>d.table===e.table)?.getColumns().find(d=>d.columnName===e.columns[0])?.primaryKeyConstraintName||pe(e.table,e.columns[0]),s=`[${e.columns.map(d=>this.quote(d)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(n)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],o=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:o}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],n=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:o,down:n}}generateColumnCode(t,e,r){let o=this.generateColumnTypeCode(e);if(!r)return o;if(e.isPrimary){let n=e.primaryKeyConstraintName||pe(t,e.columnName);o+=`.primaryKey({ constraintName: ${this.quote(n)} })`;}return e.unsigned&&(o+=".unsigned()"),e.zerofill&&(o+=".zerofill()"),e.constraints?.default!==void 0&&(o+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o+";"}generateColumnCodeForModify(t,e,r){let o=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?o+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(o+=".default(null)"),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:br.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let d=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===d)?.databaseName||d;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=w(t.relation.manyToManyOptions.throughModel);let l=w(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let n=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=n.find(d=>d.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=w(t.relation.manyToManyOptions.leftForeignKey);s=n.find(u=>u.columnName===l)?.databaseName||l;}else s=n.find(d=>d.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:w(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};br.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var gr=br;function Mf(i){return i.replace(/\s+/g," ").trim()}function Rf(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function De(i,t){let e=Mf(t.toLowerCase()),r=Rf(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==="string",normalized:"varchar"},{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 "boolean";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 "string":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 "string":case "varchar":case "character varying":return "varchar";case "char":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 "string":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 "string":case "varchar":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 Ke=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],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(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let g of n.indexes)o.indexes.map(C=>C.name).includes(g.name)||e.data.indexesToAdd.push({table:r.table,index:g.name});let y=r.getUniques?.()||[];for(let g of y)e.data.uniquesToAdd.push({table:r.table,name:g.name||"mandatory",columns:g.columns});let b=r.getChecks?.()||[];for(let g of b)e.data.checksToAdd.push({table:r.table,name:g.name,expression:g.expression});for(let g of n.relations){if(g.type!=="belongsTo")continue;let C=w(g.constraintName);o.foreignKeys.find(_=>_.name===C)||e.data.relationsToAdd.push({table:r.table,relation:g,onDelete:g.onDelete,onUpdate:g.onUpdate});}return}for(let y of n.columns)o.columns.some(g=>g.name===y.databaseName||g.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of o.columns)s.some(g=>g.databaseName===y.name||g.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of n.indexes)o.indexes.map(b=>b.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)o.indexes.some(g=>g.name===y.name&&g.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=o.foreignKeys.map(y=>y.name);for(let y of o.indexes)y.isUnique||l.includes(y.name)||n.indexes.map(g=>g.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of o.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(g=>g.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let d=r.getChecks?.()||[];for(let y of d)o.checkConstraints.some(g=>g.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let u=new Set(d.map(y=>y.name)),p=n.columns.filter(y=>Array.isArray(y.type)),m=new Set(p.map(y=>y.databaseName||y.columnName));for(let y of o.checkConstraints)if(!u.has(y.name)){let b=[...m].find(g=>{let C=g.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=new RegExp(`[\\["\\[]?${C}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),_=new RegExp(`[\\("\\[]?${C}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return R.test(y.expression)||_.test(y.expression)});if(b){let g=p.find(R=>(R.databaseName||R.columnName)===b),C=o.columns.find(R=>R.name===b);if(g&&C?.enumValues&&Array.isArray(g.type)){let R=[...g.type].sort(),_=[...C.enumValues].sort();if(!(R.length===_.length&&R.every(($,M)=>$===_[M]))){e.data.checksToDrop.push({table:r.table,name:y.name});let $=e.sql.getDbType(),M=$==="mssql"?"[":'"',E=$==="mssql"?"]":'"',Z=g.type.map(D=>`'${D.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${M}${b}${E} IN (${Z})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of n.columns){let b=o.columns.find(R=>R.name===y.databaseName||R.name===y.columnName);if(!b)continue;let g=!e.areColumnsEqual(b,y,o.indexes),C=e.getDefaultChange({table:r.table,dbColumns:b,modelColumn:y});(g||C)&&e.data.columnsToModify.push({table:r.table,dbColumns:b,modelColumn:y});}for(let y of n.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let C=w(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:C,relation:{type:"belongsTo",model:()=>r,columnName:w(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?w(y.constraintName):H(C,w(y.manyToManyOptions.leftForeignKey||Ua(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let b=w(y.constraintName);if(b&&o.foreignKeys.some(C=>C.name===b))continue;o.foreignKeys.find(C=>e.relationMatchesDbRelation(r,y,C))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let c=new Set(n.relations.filter(y=>y.type==="belongsTo").map(y=>{let b=w(y.foreignKey)||y.columnName,C=r.getColumns().find(R=>R.columnName===b)?.databaseName||b;return w(y.constraintName)||H(r.table,C,y.model().table)}));for(let y of o.foreignKeys){if(y.name&&c.has(y.name))continue;n.relations.find(g=>g.type!=="belongsTo"&&g.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,g,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of n.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let b=o.foreignKeys.find(g=>e.relationMatchesDbRelation(r,y,g));b&&!e.areRelationsEqual(b,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:b,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let f=r.primaryKey;if(f&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[f]}),o.primaryKey&&!f&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),f&&o.primaryKey){let y=r.getColumns().find(b=>b.columnName===f);y&&!e.arePrimaryKeysEqual(o.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:f});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let o=r.trim();return o?!this.emptyStatements.some(n=>n.test(o)):false})}getCodeStatements(){let e=new St(this.sql).generateOperations(this.data);return new gr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new St(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=De(n,t.dataType),a=typeof e.type=="string"?De(n,e.type):void 0;if(a&&o&&(o=s===a),Array.isArray(e.type)&&(n==="mysql"||n==="mariadb")){let d=[...e.type].sort(),u=t.enumValues?[...t.enumValues].sort():null;u&&o&&(o=d.length===u.length&&d.every((p,m)=>p===u[m]));}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")&&(n==="postgres"||n==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,u=t.isNullable;o=o&&d===u;}if(n==="mysql"||n==="mariadb"){if(e.unsigned!==void 0||t.unsigned!==void 0){let d=e.unsigned??false,u=t.unsigned??false;o&&(o=d===u);}if(e.zerofill!==void 0||t.zerofill!==void 0){let d=e.zerofill??false,u=t.zerofill??false;o&&(o=d===u);}}return o}areRelationsEqual(t,e){let r=w(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),u=d.primaryKey||"id",p=d.getColumns().find(f=>f.columnName===u),m=d.table,c=p?.databaseName||u;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===c;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=w(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 y=n.model();y&&y.table&&(o=y);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?w(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=w(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),u=(n.type||"belongsTo")==="belongsTo"?w(n.foreignKey):n.columnName,p=l.find(y=>y.columnName===u);p&&(u=p.databaseName);let m=o.primaryKey||"id",f=o.getColumns().find(y=>y.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===u&&r.referencedColumns.length===1&&r.referencedColumns[0]===f}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=this.sql.getDbType();if(["mysql","mariadb"].includes(n))return o;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=De(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?De(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||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&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 s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",d=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&d?false:"drop";if(s&&a){let u=String(t.dbColumns.defaultValue),p=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,u),c=this.normalizeDefaultValue(e,o||r,p);return m!==c?"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);if(n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(o))return "true";if(/^0$/.test(o))return "false"}return 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=w(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(D=>D.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",u=s.getColumns().find(D=>D.columnName===l),p=a.getColumns().find(D=>D.columnName===d);if(!u||!p)continue;let m=w(o.manyToManyOptions.leftForeignKey)||l,c=w(o.manyToManyOptions.rightForeignKey)||d,f=await this.sql.getTableSchema(n);if(!f.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(u,m),this.clonePkAsColumn(p,c)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:c,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(u,m),b=this.clonePkAsColumn(p,c),g=f.columns.find(D=>D.name===m),C=f.columns.find(D=>D.name===c),R=g?this.areColumnsEqual(g,y,f.indexes):false,_=C?this.areColumnsEqual(C,b,f.indexes):false;for(let D of f.foreignKeys){let J=D.referencedTable===s.table,X=D.referencedTable===a.table;if(!J&&!X)continue;let we=J?m:c,xe=D.columns[0];xe&&xe!==we&&(this.data.relationsToDrop.push({table:n,relation:D}),xe!==m&&xe!==c&&this.data.columnsToDrop.push({table:n,column:xe}));}let x={};R||(x[y.databaseName]=y),_||(x[b.databaseName]=x[b.databaseName]||b);for(let D of Object.keys(x))this.data.columnsToAdd.push({table:n,column:x[D]});let $=this.buildBelongsToRelation(n,()=>s,m,l,void 0,o.onDelete,o.onUpdate),M=this.buildBelongsToRelation(n,o.model,c,d,void 0,o.onDelete,o.onUpdate),E=f.foreignKeys.find(D=>D.referencedTable===s.table&&D.columns.length===1&&D.columns[0]===m),Z=f.foreignKeys.find(D=>D.referencedTable===a.table&&D.columns.length===1&&D.columns[0]===c);if(!E){let D=f.foreignKeys.find(J=>J.referencedTable===s.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push($);}if(!Z){let D=f.foreignKeys.find(J=>J.referencedTable===a.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push(M);}}}}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,u=o.getColumns().find(m=>m.columnName===l)?.databaseName||l,p=w(a.constraintName)||H(o.table,u,a.model().table);s.add(p);}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(y=>y.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(b=>b.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(b=>b.columnName===l)?.databaseName||l;let d=o.table,u=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let y=o.relation.model();d=y.table;let b=y.primaryKey||"id";u=y.getColumns().find(C=>C.columnName===b)?.databaseName||b;}let p=new Set([l,o.relation.columnName].filter(Boolean)),m=n.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let b=p.has(y.columns[0]),g=y.referencedTable===d,C=y.referencedColumns[0]===u;return b&&g&&C}),c=w(o.relation.constraintName)||H(o.table,l,d),f=e.get(o.table)||new Set;if(m||c&&f.has(c))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let y=w(o.relation.manyToManyOptions.throughModel),b=w(o.relation.manyToManyOptions.leftForeignKey),g=w(o.relation.manyToManyOptions.rightForeignKey),C=o.table===y&&o.relation.columnName===b&&o.relation.model().table===s?.table,R=o.table===y&&o.relation.columnName===g&&o.relation.model().table!==s?.table,_=await this.sql.getTableSchema(y),x=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===b&&M.referencedTable===(s?.table||"")),$=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===g&&M.referencedTable===o.relation.model().table);if(C&&x||R&&$)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 p=a.find(b=>b.columnName===d.foreignKey)?.databaseName||d.foreignKey,m=d.model(),c=m.primaryKey||"id",y=m.getColumns().find(b=>b.columnName===c)?.databaseName||c;return o.relation.columns.length===1&&o.relation.columns[0]===p&&o.relation.referencedTable===m.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===y})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,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?w(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 nt=class extends S{constructor(e,r=false,o){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e,this.returning=o;}};var W=class extends S{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var j=class extends S{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 fe=class extends S{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 Ce=class extends S{constructor(e,r=[],o=[],n=false,s){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o,this.returning=s;}};var A=class extends S{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 Se=class extends S{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var ne=class extends A{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 ye=class extends S{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 fp;fp=Symbol.toStringTag;var Y=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[fp]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var xf=async(i,t,e,r,o,n=false)=>{let s=Object.create(t.prototype),a=null;for(let l of Object.keys(i)){let d=i[l],u=r.get(l)?.columnName??l,p=e.has(u),m=n?true:o?o.has(u):true;if(p){if(!m)continue;if(d===null){s[u]=null;continue}let c=e.get(u);if(c?.serialize){let f=c.serialize(d);f!==null&&typeof f?.then=="function"?(a||(a=[]),a.push({key:u,promise:f})):s[u]=f;continue}s[u]=d;continue}(!n||o&&o.has(u))&&(s[u]=d);}if(a){let l=await Promise.all(a.map(d=>d.promise));for(let d=0;d<a.length;d++)s[a[d].key]=l[d];}if(o)for(let l of o)l in s||(s[l]=null);return s},_e=async(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),n=e.some(d=>d.includes("*")),s=[];for(let d of e){if(d.toLowerCase().includes(" as ")){let c=d.match(/\s+as\s+(.+)$/i);c&&s.push(c[1].trim());continue}let p=d;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let m=r.get(p)?.columnName??p;s.push(m);}let a=s.length?new Set(s):null,l=await Promise.all(i.map(d=>xf(d,t,r,o,a,n)));return l.length===1?l[0]:l};var Af=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,$f=/^\d{4}-\d{2}-\d{2}$/,Va=i=>typeof i!="string"?i:Af.test(i)?new Date(i.replace(" ","T")+"Z"):$f.test(i)?new Date(i+"T00:00:00Z"):i,Pf=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);}}),yp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await Pf(r):t[e]=r;}return t};var Tr=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);});}},hp=(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,u)=>{n.run(i,t,function(p){p&&u(p),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,u)=>{n.all(i,t,(p,m)=>{p&&u(p),(!m||!m.length)&&d([]),d(m);});});let s=r?.typeofModel;if(!s)return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.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((p,m)=>{n.run(i,t,function(c){if(c)return m(c);let f=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){p([f]);return}let y=f?.[a]||this.lastID;if(!y)return m(new q("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let b=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(b,[y],(g,C)=>{if(g)return m(g);p([C]);});});});if(!Array.isArray(r.models))throw new q("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);p(d);});});let u=[];return new Promise(async(p,m)=>{try{let c=d.map(async f=>{let y=new h(s),{columns:b,values:g}=await y.prepareColumns(Object.keys(f),Object.values(f),"insert"),C=Object.fromEntries(b.map(($,M)=>[$,g[M]])),R=new N(s,e.getDbType()),{sql:_,bindings:x}=R.parse([new j(new W(s.table),[C])]);return new Promise(($,M)=>{n.run(_,x,function(E){if(E)return M(E);let Z=f[a]||this.lastID;if(!Z)return M(new q("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let D=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(D,[Z],(J,X)=>{if(J)return M(J);$(X);});});})});u=await Promise.all(c),p(u);}catch(c){m(c);}})}return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});})};var F=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||re(i,e.logs,t,e.inputDetails.queryFormatOptions,r),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await qt(()=>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=0,u=i.replace(/\?/g,()=>`$${++d}`),p=await qt(()=>l.query(u,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?p.rows:o==="raw"?p:p.rowCount;case "sqlite":let m=await qt(()=>hp(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 c=e.getPool(),f=e.sqlConnection?e.sqlConnection.request():c.request();t.forEach((x,$)=>{f.input(`p${$}`,x);});let y=0,b=i.replace(/\?|@(\d+)/g,()=>`@p${y++}`),g=await qt(()=>f.query(b),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?g.rowsAffected[0]:o==="raw"?g:g.recordset;case "oracledb":let C=4002,R=null,_=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(Va),$=0,M=i.replace(/\?/g,()=>`:${++$}`),E=await qt(()=>R.execute(M,x,{outFormat:C,autoCommit:!_}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?E.rowsAffected:o==="raw"?E:await Promise.all(E.rows?.map(async D=>{let J=await yp(D),X={};for(let we in J)X[we.toLowerCase()]=J[we];return X})??[])}finally{R&&!_&&await R.close();}default:throw new q("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},Sr=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}),u=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),p=0,m=false,c=false,f=()=>{try{a.release();}catch{}};return u.on("data",y=>{if(o.onData){p++,Promise.resolve(o.onData(l,y)).then(()=>{p--,m&&p===0&&!c&&(f(),l.end());}).catch(b=>{c=true,f(),l.destroy(b);});return}l.write(y);}),u.on("end",()=>{m=true,p===0&&!c&&(f(),l.end());}),u.on("error",y=>{c=true,f(),l.destroy(y);}),l.on("close",()=>{f();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new K("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),u=0,p=i.replace(/\?/g,()=>`$${++u}`),m=new l.default(p,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),c=a.query(m),f=0,y=false,b=false,g=C=>{try{a.release(C);}catch{}};return c.on("data",C=>{if(o.onData){f++,Promise.resolve(o.onData(d,C)).then(()=>{f--,y&&f===0&&!b&&(g(),d.end());}).catch(R=>{b=true,g(R),d.destroy(R);});return}d.write(C);}),c.on("end",()=>{y=true,f===0&&!b&&(g(),d.end());}),c.on("error",C=>{b=true,g(C),d.destroy(C);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new Tr(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((f,y)=>{l.input(`p${y}`,f);});let d=0,u=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),p=0,m=false,c=false;return l.on("row",f=>{if(!c){if(o.onData){p++,Promise.resolve(o.onData(a,f)).then(()=>{p--,m&&p===0&&!c&&a.end();}).catch(y=>{c=true,a.destroy(y);});return}a.write(f);}}),l.on("error",f=>{c=true,a.destroy(f);}),l.on("done",()=>{m=true,p===0&&!c&&a.end();}),l.query(u),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,u=0,p=i.replace(/\?/g,()=>`:${++u}`),m=t.map(Va),c=a.queryStream(p,m,{outFormat:d}),f=0,y=false,b=false,g=async()=>{try{await a.close();}catch{}};return c.on("data",C=>{if(b)return;let R={};for(let _ in C)R[_.toLowerCase()]=C[_];if(o.onData){f++,Promise.resolve(o.onData(l,R)).then(()=>{f--,y&&f===0&&!b&&(g(),l.end());}).catch(_=>{b=true,g(),l.destroy(_);});return}l.write(R);}),c.on("end",()=>{y=true,f===0&&!b&&(g(),l.end());}),c.on("error",C=>{b=true,g(),l.destroy(C);}),l}default:throw new q("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function qt(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++,il(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var L=(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 st=class{};st.modelCaseConvention="camel",st.databaseCaseConvention="snake";function qe(i){return String(i).padStart(2,"0")}function gp(i,t){let e=i.getUTCFullYear(),r=qe(i.getUTCMonth()+1),o=qe(i.getUTCDate()),n=qe(i.getUTCHours()),s=qe(i.getUTCMinutes()),a=qe(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${o} ${n}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${o}`;case "TIME_ONLY":return `${n}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var it=(i=new Date)=>gp(i,"ISO");var G=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);}}};G.store=new WeakMap;var qr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var wr=class extends Te{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var Cr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var _r=class extends Te{constructor(e,r,o){super(e,r);this.type="manyToMany";this.primaryModel=o.primaryModel,this.relatedModel=e.table,this.throughModel=o.throughModel,this.leftForeignKey=o.leftForeignKey,this.rightForeignKey=o.rightForeignKey;}};function wp(i){try{return G.getMetadata(dr,i.prototype)||[]}catch{return []}}function Cp(i){return G.getMetadata(Wa,i.prototype)||[]}function _p(i){return (G.getMetadata(Wa,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=w(s),l=o();switch(r){case "belongsTo":return new qr(l,n,a);case "hasOne":return new Cr(l,n,a);case "hasMany":return new wr(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new q("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new _r(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:w(e.manyToManyOptions.throughModel),leftForeignKey:w(e.manyToManyOptions.leftForeignKey),rightForeignKey:w(e.manyToManyOptions.rightForeignKey)});default:throw new q("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Mp(i){return G.getMetadata(rt,i)||G.getMetadata(rt,i.prototype)}function Rp(i){return G.getMetadata(ap,i.prototype)||[]}function xp(i){return G.getMetadata(lp,i.prototype)||[]}function Ap(i){return G.getMetadata(dp,i.prototype)||[]}var ae=class{};ae.columns=new WeakMap,ae.byName=new WeakMap,ae.byDatabaseName=new WeakMap;var at=class extends st{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Mp(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ae.columns.get(this);return t||(t=wp(this),ae.columns.set(this,t)),t}static getColumnsByName(){let t=ae.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ae.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ae.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ae.byDatabaseName.set(this,t)),t}static getRelations(){return Cp(this)}static getIndexes(){return Rp(this)}static getUniques(){return xp(this)}static getChecks(){return Ap(this)}};at.softDeleteColumn="deletedAt",at.softDeleteValue=it();var wt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=_p(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 q("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Mr(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 $p(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var lt=i=>typeof i=="number"?i:parseFloat(i);var le=class extends S{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 Be=class extends S{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 Rr=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var xr=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Ie=class extends S{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 se=class extends S{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 Ct=class extends S{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 Ar=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var $r=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var _t=class extends S{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 Dr=class Dr{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=Dr.EMPTY_MAP);}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 Ct(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ct(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new _t(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new _t(t,"asc",true)),this}limit(t){return typeof t!="number"&&T.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Ar(t),this}offset(t){return typeof t!="number"&&T.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new $r(t),this}};Dr.EMPTY_MAP=new Map;var Pr=Dr;var Le=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 A(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 A(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 A(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 A(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 A(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 A(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",false,"in",e)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",false,"in",e)),this):(this.whereNodes.push(new A("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"and",true,"in",e)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",true,"in",e)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new A(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new A(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new A(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new A(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 A(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 A(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 A(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 A(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 Se(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 Se(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new A(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new A(t,"or",true,"=",e??[],true)),this}};var Ir=class extends Pr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new se(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new se(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new se(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new se(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new se(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new se(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 q("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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,d)),this}};var Or=class extends Ir{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new W(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[s,a]=r;this.modelSelectedColumns.push(a);let l=V(s,this.model.databaseCaseConvention);this.selectNodes.push(new le(l,a));return}let o=r;this.modelSelectedColumns.push(o);let n=V(o,this.model.databaseCaseConvention);this.selectNodes.push(new le(n));}),this}selectRaw(e){return this.selectNodes.push(new le(e,void 0,void 0,true)),this}selectFunc(e,r,o){let n=r==="*"?"*":V(r,this.model.databaseCaseConvention);return this.selectNodes.push(new le(`${e.toLowerCase()}(${n}) as ${o}`,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new W(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new W(e),this}distinct(){return this.distinctNode=new Rr,this}distinctOn(...e){return this.distinctOnNode=new xr(e),this}selectJson(e,r,o){return this.selectNodes.push(new Ie(e,r,o,"extract")),this}selectJsonText(e,r,o){return this.selectNodes.push(new Ie(e,r,o,"extract_text")),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new Ie(e,r,o,"array_length")),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new Ie(e,r,o,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Ie(e,"",r,"raw",true)),this}};var Er=class extends Or{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 k&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||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 k&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(e,"or",false,n,s)),this}whereColumn(e,r,o){return this.andWhereColumn(e,r,o)}andWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new A(e,"and",false,n,new P(s))),this}orWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new A(e,"or",false,n,new P(s))),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",false,"in",r)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",false,"in",r)),this):(this.whereNodes.push(new A("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 A(e,"and",true,"in",r)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",true,"in",r)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new A(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new A(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new A(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new A(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 A(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 A(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ye("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ye("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ye("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ye("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new A(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new A(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 Be(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 Be(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Be(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Be(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(this.model,this.sqlDataSource),o=e(r);return o!=null&&"extractQueryNodes"in o?o:r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ye(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new ye(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Se(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Se(r.whereNodes,"or");return this.whereNodes.push(o),this}};var vr=class extends Er{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"or",false,"raw",e)),this}};var k=class i extends vr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;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),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 N(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new h(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,o]=e;if(typeof r=="function"){let n=new i(this.model,this.sqlDataSource),s=r(n),a=s!=null&&"extractQueryNodes"in s?s:n;return this.selectNodes.push(new le(a.extractQueryNodes(),o)),this}return this.selectNodes.push(new le(r.extractQueryNodes(),o)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),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}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>F(e,r,o,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}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 oneOrFail(){let e=await this.one();if(!e)throw new q("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await Sr(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,a]=await this.executePaginateQueries(()=>this.many(),()=>n.getCount()),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:$p(e,a),data:s},{key:r.discriminator,value:d}]}lockForUpdate(e={}){return this.lockQueryNodes.push(new Nt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Nt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Qe(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Qe(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Qe(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Qe(o,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&T.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:Mr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new q("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource),n=e(o),a=(n!=null&&"extractQueryNodes"in n?n:o).extractQueryNodes();return this.fromNode=new W(a,r),this}return this.fromNode=new W(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("normal",e,s.extractQueryNodes())),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new q("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new ot("materialized",e,s.extractQueryNodes())),this}insert(e,r){let o=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,[o],r,n),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),l=Object.fromEntries(s.map((c,f)=>[c,a[f]]));this.insertNode=new j(this.fromNode,[l],r,n);let{sql:d,bindings:u}=this.astParser.parse([this.insertNode]),p=await this.getSqlDataSource("write"),m=await F(d,u,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!n)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let o=e.map(s=>Object.fromEntries(Object.keys(s).map(a=>[a,s[a]]))),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,o,r,n),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return n?void 0:[];let s=await Promise.all(e.map(async p=>{let{columns:m,values:c}=await this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert");return Object.fromEntries(m.map((f,y)=>[f,c[y]]))}));this.insertNode=new j(this.fromNode,s,r,n);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),u=await F(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!n)return u})}upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),a=Object.fromEntries(Object.keys(e).map(l=>[l,e[l]]));return this.insertNode=new j(new W(this.model.table),[a],void 0,true),this.onDuplicateNode=new fe(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:d}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),u=Object.fromEntries(l.map((y,b)=>[y,d[b]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([u],s,n,o,[e]);let{sql:p,bindings:m}=this.astParser.parse([new j(new W(this.model.table),[u],void 0,true),new fe(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),f=await F(p,m,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(f)?f:[f]})}upsertMany(e,r,o,n={updateOnConflict:true}){let s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new j(new W(this.model.table),s,void 0,true),this.onDuplicateNode=new fe(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let a=[];if(await Promise.all(o.map(async m=>{let{columns:c,values:f}=await this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert"),y=Object.fromEntries(c.map((b,g)=>[b,f[g]]));a.push(y);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(a,e,r,n,o);let{sql:l,bindings:d}=this.astParser.parse([new j(new W(this.model.table),a,void 0,true),new fe(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),u=await this.getSqlDataSource("write"),p=await F(l,d,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(p)?p:[p]})}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),u=[],p=e.map(E=>`select ${a.map(D=>(u.push(E[D]),`@${u.length}`)).join(", ")}`),m=a.map(d).join(", "),c=p.join(" union all "),f=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),y=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),b=a.map(d).join(", "),g=a.map(E=>`source.${d(E)}`).join(", "),C=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),_=(n.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",x=`merge into ${l} as target using (${c}) as source (${m}) on ${f} ${_} when not matched then insert (${b}) values (${g}) output ${C};`,$=await this.getSqlDataSource("write"),M=await F(x,u,$,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(M)?M:[M]}update(e,r){let o=Object.keys(e),n=Object.values(e);this.updateNode=new Ce(this.fromNode,o,n,false,r);let s=r&&r.length>0;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:a,values:l}=await this.interpreterUtils.prepareColumns(o,n,"update");this.updateNode=new Ce(this.fromNode,a,l,false,r);let{sql:d,bindings:u}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),p=await this.getSqlDataSource("write");return F(d,u,p,this.dbType,s?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:s?"fetch":"affectedRows"}})})}truncate(){return this.truncateNode=new tt(this.fromNode),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await F(e,r,o,this.dbType,"rows");})}delete(e){this.deleteNode=new nt(this.fromNode,false,e);let r=e&&e.length>0;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:o,bindings:n}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),s=await this.getSqlDataSource("write");return F(o,n,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:o=it()}=e||{};return this.updateNode=new Ce(this.fromNode,[r],[o]),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new Ce(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return F(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Fe(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),o=Ve(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new le("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=B(this.modelSelectedColumns),e.distinctNode=B(this.distinctNode),e.distinctOnNode=B(this.distinctOnNode),e.selectNodes=B(this.selectNodes),e.withQuery=B(this.withQuery),e.joinNodes=B(this.joinNodes),e.whereNodes=B(this.whereNodes),e.groupByNodes=B(this.groupByNodes),e.havingNodes=B(this.havingNodes),e.orderByNodes=B(this.orderByNodes),e.lockQueryNodes=B(this.lockQueryNodes),e.unionNodes=B(this.unionNodes),e.withNodes=B(this.withNodes),e.fromNode=B(this.fromNode),e.limitNode=B(this.limitNode),e.offsetNode=B(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(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 le("*")]),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 L(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await L(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await L(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await L(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await L(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await L(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await L(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await L(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await L(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await L(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await L(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await L(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await L(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}}};function Pp(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:dy(i)}function dy(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var dt=class i extends k{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.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),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this)};this.sqlModelManagerUtils=new wt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[o,n]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(o,n.columnName);}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async oneOrFail(e){let r=await this.one(e);if(!r)throw new q(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a));if(!o.length)return [];let n=await _e(o,this.model,this.modelSelectedColumns);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.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}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 Sr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l),u=await _e([d],this.model,this.modelSelectedColumns);u&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([u]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new q(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}upsert(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return n.upsertMany(s,a,[l],{updateOnConflict:o.updateOnConflict??true,returning:o.returning}).then(d=>Array.isArray(d)?d[0]:d)}upsertMany(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=r.length>0?Object.keys(r[0]):[];return n.upsertMany(e,s,r,{updateOnConflict:o.updateOnConflict??true,returning:o.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource;return new Oe(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,o){return this.getModelManager(o?.trx).updateRecord(e,r,o)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let o=this.model.primaryKey;if(!o)throw new q(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[o]:n}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,o){let{column:n=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[n]:s};return this.getModelManager(o?.trx).updateRecord(e,a,{returning:o?.returning})}async firstOrInsert(e,r,o){let n=this.getModelManager(o?.trx),s=await n.findOne({where:e,ignoreHooks:["afterFetch","beforeFetch"]});if(s)return s;let a={...e,...r};return n.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,o,n,s={}){if(Array.isArray(o)||(o=[o]),!o.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new q(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=o.map((c,f)=>({[l]:r[this.model.primaryKey],[d]:c[a.model.primaryKey],...n?n(c,f):{}}));class p extends at{static get table(){return a.throughModel}}p.databaseCaseConvention="preserve",p.modelCaseConvention="preserve",await new Oe(p,s.trx?s.trx.sql:this.sqlDataSource).insertMany(u);}truncate(){return super.truncate()}update(e,r={}){let o=r.returning,n=super.update(e,o);return new Y(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>(r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),n))}softDelete(e={}){let r=super.softDelete(e),{ignoreBeforeUpdateHook:o=false}=e||{};return new Y(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>(o||await this.model.beforeUpdate?.(this),r))}delete(e={}){let r=e.returning,o=super.delete(r);return new Y(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>(e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),o))}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.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:Mr(e,r,d),data:l}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&typeof e[1]=="string"){let[r,o]=e;return super.select(r,o),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],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}load(e,r,o){let n,s={strategy:"auto"};typeof r=="function"?(n=r,o&&(s=o)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,n?.(l),this.relationQueryBuilders.push(l),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereNotExists(u),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 u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereNotExists(u),this}clone(){let e=super.clone();return e.relationQueryBuilders=B(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);}));}async processRelationsWithStrategy(e){let r=e.length,o=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),n=async s=>{let a=Pp({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of o)await n(s);return}await Promise.all(o.map(n));}async loadRelationViaJoin(e,r){let o=e.relation,n=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,o,n).many({ignoreHooks:["beforeFetch","afterFetch"]});this.mapJoinedResultsToModels(a,r,o,n);}buildJoinQuery(e,r,o){let n=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)n.selectNodes.push(B(s));else for(let[s]of this.model.getColumnsByDatabaseName())n.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=B(s);this.qualifyWhereNodeColumns(a,this.model.table),n.whereNodes.push(a);}for(let s of this.groupByNodes)n.groupByNodes.push(B(s));for(let s of this.orderByNodes)n.orderByNodes.push(B(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(n.limitNode=B(this.limitNode)),this.offsetNode&&(n.offsetNode=B(this.offsetNode))),r.type){case "hasOne":case "hasMany":n.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":n.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;n.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),n.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(n,r,e,o);for(let s of e.whereNodes)n.whereNodes.push(B(s));for(let s of e.orderByNodes)n.orderByNodes.push(B(s));return n}selectRelationColumnsWithAlias(e,r,o,n){let s=r.columnName,a=r.model,l=a.getColumnsByName(),d=a.getColumnsByDatabaseName(),u=o.selectNodes.filter(m=>typeof m.column=="string"),p=u.some(m=>m.column==="*"||m.column.endsWith(".*"));if(u.length===0||p)for(let[m,c]of d)e.selectRaw(`${a.table}.${m} as ${s}${n}${c.columnName}`);else for(let m of u){let c=m.column,f=c.includes(".")?c.split(".").pop():c,y=d.get(f)||l.get(f),b=y?.databaseName??f,g=m.alias??y?.columnName??f;e.selectRaw(`${a.table}.${b} as ${s}${n}${g}`);}}mapJoinedResultsToModels(e,r,o,n){let{columnName:s,type:a}=o,l=o.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];d.has(p)||d.set(p,[]);let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.get(p).push(m));}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||[];});}else {let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];if(!d.has(p)){let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.set(p,m));}}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||null;});}}extractRelationDataFromRow(e,r,o){let n=`${r}${o}`,s={},a=false,l=false;for(let d of Object.keys(e))if(d.startsWith(n)){let u=d.substring(n.length);s[u]=e[d],a=true,e[d]!==null&&e[d]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof A)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof ye)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Se)for(let o of e.nodes)this.qualifyWhereNodeColumns(o,r);}serializeRelationData(e,r){for(let o of Object.keys(e)){let n=r.get(o);n?.serialize&&e[o]!==null&&e[o]!==void 0&&(e[o]=n.serialize(e[o]));}}async loadRelationViaBatch(e,r){let o=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,o);}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(m=>{let c=m[e.foreignKey];c&&n.set(String(c),m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=null;return}let f=n.get(String(c));m[e.columnName]=f||null;});break;case "belongsTo":let s=new Map;o.forEach(m=>{if(!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let c=m[e.model.primaryKey];c&&s.set(String(c),m);}),r.forEach(m=>{let c=m[e.foreignKey];if(!c){m[e.columnName]=null;return}let f=s.get(String(c));m[e.columnName]=f||null;});break;case "hasMany":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(m=>{let c=m[e.foreignKey];if(!c)return;let f=String(c);a.has(f)||a.set(f,[]),a.get(f).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let f=a.get(String(c))||[];m[e.columnName]=f;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,u=l.leftForeignKey,p=this.modelColumnsMap.get(u)||this.modelColumnsDatabaseNames.get(u)||V(u,this.model.modelCaseConvention);o.forEach(m=>{let c=m[p];if(c==null)return;let f=String(c);d.has(f)||d.set(f,[]),delete m[p],d.get(f).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let f=d.get(String(c))||[];m[e.columnName]=f;});break;default:throw new q(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=Re.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,u=e.orderByNodes.map(M=>M.isRawValue?M.column:`${this.interpreterUtils.formatStringColumn(this.dbType,M.column)} ${M.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let p=e.with(d,M=>M.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${u}) as rn_${l}`).whereIn(r.foreignKey,n));s&&p.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&p.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(M=>co(M,d,e.model.table));return p.select(...m).table(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let c=r;if(!o.length)return e;let f=e.limitNode?.limit,y=e.offsetNode?.offset,b=e.modelSelectedColumns.length?e.modelSelectedColumns.map(M=>M.includes(".")?M:`${r.model.table}.${M}`):[`${r.model.table}.*`];if(!f&&!y)return e.select(...b).select([`${c.throughModel}.${c.leftForeignKey}`,c.leftForeignKey]).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n);let g=Re.randomBytes(6).toString("hex"),C=`${r.model.table}_cte_${g}`,R=e.orderByNodes.map(M=>{if(M.isRawValue)return M.column;let E=M.column.includes(".")?M.column:`${r.model.table}.${M.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${M.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let _=`${Re.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(C,M=>M.select(...b).select([`${c.throughModel}.${c.leftForeignKey}`,_]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${c.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,c.leftForeignKey)} ORDER BY ${R}) as rn_${g}`).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n));f&&x.whereRaw(`rn_${g} <= ${f+(y||0)}`),y&&x.whereRaw(`rn_${g} > ${y}`);let $=b.map(M=>co(M,C,e.model.table));return x.select(...$).select([`${C}.${_}`,c.leftForeignKey]).table(C);default:throw new q(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new q(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 q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new h(r.model),a=new h(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new q(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}`),u=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${u}`),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 q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(c=>!c.isRawValue&&c.table===d.throughModel&&c.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let p=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${p} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(p).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new q(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e){let r={};return Object.entries(e).forEach(([o,n])=>{if(this.modelColumnsDatabaseNames.get(o)){r[o]=n;return}r[o]=n;}),r}async manyWithPerformance(e={},r="millis"){let[o,n]=await L(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await L(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await L(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await L(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 L(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await L(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await L(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await L(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await L(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await L(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await L(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}async insertWithPerformance(e,r="millis"){let[o,n]=await L(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await L(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}};function Dp(){return {}}var Oe=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Dp(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new N(this.model,this.sqlType),this.interpreterUtils=new h(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&&this.handleWhereCondition(e,t.where),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 q(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new q(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}insert(t,e={}){let r=Object.fromEntries(Object.keys(t).map(d=>[d,t[d]])),o=!e.returning||e.returning.length===0,n=new j(new W(this.model.table),[r],e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new Y(s,a,l,async()=>{e.ignoreHooks||await this.model.beforeInsert?.(t);let{columns:d,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),p={};d.forEach((C,R)=>{let _=u[R];p[C]=_,t[C]??(t[C]=_);});let m=!e.returning||e.returning.length===0,{sql:c,bindings:f}=this.astParser.parse([new j(new W(this.model.table),[p],e.returning,m)]),y=await F(c,f,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(y,[t],"one",e.returning);let b=y[0];return b?(await this.model.afterFetch?.([b]),await _e([b],this.model,e.returning)):t})}insertMany(t,e={}){let r=t.map(d=>Object.fromEntries(Object.keys(d).map(u=>[u,d[u]]))),o=!e.returning||e.returning.length===0,n=new j(new W(this.model.table),r,e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new Y(s,a,l,async()=>{if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let b=this.model.primaryKey,g=Object.keys(t[0]||{});if(b&&!g.includes(b))return this.handleOracleIdentityInsert(t,e)}let d=new Array(t.length);await Promise.all(t.map(async(b,g)=>{let{columns:C,values:R}=await this.interpreterUtils.prepareColumns(Object.keys(b),Object.values(b),"insert"),_={};C.forEach((x,$)=>{let M=R[$];_[x]=M,b[x]??(b[x]=M);}),d[g]=_;}));let u=!e.returning||e.returning.length===0,{sql:p,bindings:m}=this.astParser.parse([new j(new W(this.model.table),d,e.returning,u)]),c=await F(p,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(u)return [];if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(c,t,"many",e.returning)||[];let f=c;return f.length?(await this.model.afterFetch?.(f),await _e(f,this.model,e.returning)||[]):[]})}upsertMany(t,e,r,o={updateOnConflict:true}){let n=r.map(m=>Object.fromEntries(Object.keys(m).map(c=>[c,m[c]]))),s=new j(new W(this.model.table),n,void 0,true),a=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new fe(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",a);let d=()=>{let m=this.astParser.parse([s]);return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse([s]);return {sql:Ve(this.sqlDataSource,m.sql),bindings:m.bindings}},p=()=>{let{sql:m,bindings:c}=u();return Fe(m,c)};return new Y(d,u,p,async()=>{let m=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async x=>{let{columns:$,values:M}=await this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert"),E=Object.fromEntries($.map((Z,D)=>[Z,M[D]]));m.push(E);})),this.sqlType==="mssql")return this.executeMssqlMerge(m,t,e,o,r);let c=!o.returning||o.returning.length===0,f=!c&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0,{sql:y,bindings:b}=this.astParser.parse([new j(new W(this.model.table),m,void 0,true),new fe(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",f)]),g=await F(y,b,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(c)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(g.length<r.length&&!(o.updateOnConflict??true)){let M=t[0],E=r.map(D=>D[M]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(M,E).many()}let x=g;return await this.model.afterFetch?.(x),await _e(x,this.model,o.returning)||[]}let C=t[0],R=r.map(x=>x[C]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(C,R).many()})}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=$=>this.interpreterUtils.formatStringColumn("mssql",$),d=[],u=t.map($=>`select ${s.map(E=>(d.push($[E]),`@${d.length}`)).join(", ")}`),p=s.map(l).join(", "),m=u.join(" union all "),c=e.map($=>`target.${l($)} = source.${l($)}`).join(" and "),f=r.filter($=>!e.includes($)).map($=>`target.${l($)} = source.${l($)}`).join(", "),y=s.map(l).join(", "),b=s.map($=>`source.${l($)}`).join(", "),g=o.returning&&o.returning.length?o.returning.map($=>`inserted.${l($)}`).join(", "):s.map($=>`inserted.${l($)}`).join(", "),R=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",_=`merge into ${a} as target using (${m}) as source (${p}) on ${c} ${R} when not matched then insert (${y}) values (${b}) output ${g};`,x=await F(_,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});if(x.length===0&&!(o.updateOnConflict??true)){let $=e[0],M=n.map(Z=>Z[$]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn($,M).many()}return x}async updateRecord(t,e,r){let o=new Set(this.model.getColumns().map(f=>f.columnName)),n=Object.keys(e).filter(f=>o.has(f)),s=n.map(f=>e[f]),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(n,s,"update"),{primaryKey:d}=this.model;if(!d)throw new q(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let u=a.indexOf(d);u!==-1&&(a.splice(u,1),l.splice(u,1));let{sql:p,bindings:m}=this.astParser.parse([new Ce(new W(this.model.table),a,l),new A(d,"and",false,"=",t)]);if(await F(p,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let c=await this.findOneByPrimaryKey(t,r.returning);if(!c)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return c}async deleteRecord(t){if(!this.model.primaryKey)throw new q(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new A(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:o}=this.astParser.parse([new nt(new W(this.model.table)),e]);await F(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new dt(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await _e([a],this.model):null}return await _e(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(u=>u[this.model.primaryKey]),l=a.map(u=>`'${u}'`).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((c,f)=>{let y=a[f];l[c]=y,n[c]??(n[c]=y);});let{sql:d,bindings:u}=this.astParser.parse([new j(new W(this.model.table),[l],e.returning)]);await F(d,u,this.sqlDataSource,this.sqlType,"rows");let p=this.query().select(...e.returning||["*"]);for(let[c,f]of Object.entries(l))f!=null&&c!==o&&p.where(c,"=",f);o&&p.orderBy(o,"desc");let m=await p.one({ignoreHooks:["beforeFetch"]});if(m){let c=m;o&&c[o]&&(n[o]=c[o]),r.push(m);}else r.push(n);}return await this.model.afterFetch?.(r),r}handleWhereCondition(t,e,r=false){if(e)for(let[o,n]of Object.entries(e))o==="$and"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{for(let l of n)this.handleWhereCondition(a,l,false);}):o==="$or"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{let l=true;for(let d of n)this.handleWhereCondition(a,d,!l),l=false;}):this.applyFieldCondition(t,o,n,r);}applyFieldCondition(t,e,r,o=false){if(r==null||typeof r!="object"){r===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",r):t.where(e,"=",r);return}let n=r,s=n.op,a=n.value;switch(s){case "$eq":a===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?o?t.orWhereNotNull(e):t.whereNotNull(e):o?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":o?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":o?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":o?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":o?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,d]=a;o?t.orWhereBetween(e,l,d):t.whereBetween(e,l,d);break}case "$not between":{let[l,d]=a;o?t.orWhereNotBetween(e,l,d):t.whereNotBetween(e,l,d);break}case "$regexp":o?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":o?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":o?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":o?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":o?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":o?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":o?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":o?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":o?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":o?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:o?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Ip=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??it()});var Mt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Re.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.transaction(),t)try{let r=await t(e);return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){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),re("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;re("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 q("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");T.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":re("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;re("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":re("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw T.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");T.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 q("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mssql":re("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;re("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":re("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new q("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw T.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 q("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){T.error(t);}await this.sql.disconnect(),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 q("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 q("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 T.error(e),new K("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 q("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var za=Symbol.for("hysteria.orm.SqlDataSource"),Op,Ep,Rt=class i extends(Ep=jt,Op=za,Ep){constructor(e){super(e);this[Op]=true;this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Ft;this.migrationConfig={path:I.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:ht(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 i(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&za in e&&e[za]===true}getOnSlaveServerFailure(){return this.onSlaveServerFailure}static async useConnection(e,r){let o=new i(e);await o.connect();try{await r(o),o.isConnected&&await o.disconnect();}catch(n){throw o.isConnected&&await o.disconnect(),n}}async connect(){if(this.isConnected)throw new q("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.sqlPool=await Ue(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Ue(e.sqlType,e.inputDetails),e.ownsPool=true;}));}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,o){if(typeof o=="string"&&o in r)return e.from(r[o])}})}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 q("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new q("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 u=Hr(JSON.stringify(d)),p=u?`${e}:${u}`:e,m=await this.cacheAdapter.get(p);if(m!==void 0)return m;let c=await n(...d);return await this.cacheAdapter.set(p,c,l),c}async invalidCache(e,...r){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new q("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=Hr(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Ue(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let o=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;if(typeof e=="string"){let n=new k(Ip(e,r),o);return r?.alias&&n.table(e,r.alias),n}return new dt(e,o)}schema(){if(!this.isConnected)throw new q("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new pr(this,this.getDbType())}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new Mt(r,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new q("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){T.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async transaction(e,r){let o=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let n=await this.clone();n.sqlConnection=await n.getConnection();let s=new Mt(n,o?.isolationLevel);if(await s.transaction(),typeof e=="function")try{let a=await e(s);return await s.commit({throwErrorOnInactiveTransaction:!1}),a}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}getModelManager(e){if(!this.isConnected)throw new q("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new Oe(e,this.globalTransaction.sql):new Oe(e,this)}getPool(){if(!this.sqlPool)throw new q("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new q("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 q("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async disconnect(){if(!this.isConnected){re("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{T.warn("SqlDataSource::disconnect - 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.disconnect();}catch(r){T.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),re("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 q("SqlDataSource::disconnect",`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 syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){T.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Ke.makeDiff(this)).getSqlStatements();if(!o.length){T.info("No new changes detected between database schema and models metadata");return}if(T.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);T.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),T.info(`Synced schema with ${o.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let o=e[0];if(Array.isArray(o))return o;if(typeof o=="object"&&o!==null&&("insertId"in o||"affectedRows"in o))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],o){if(!this.isConnected)throw new q("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async s=>F(e,r,s,this.getDbType(),"raw")):F(e,r,this,this.getDbType(),"raw")}rawStatement(e){return new P(e)}async getTableSchema(e){let[r,o,n,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:o,foreignKeys:n,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return hl(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Jr(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await yl(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return n.map(l=>{let d=String(l.type||"").toLowerCase(),u=De(s,d);return {name:l.name,dataType:u,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null}});let a=n.map(l=>{let d=String(l.column_name||l.COLUMN_NAME||l.name||""),u=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),p=De(s,u),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,c=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,f=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=l.char_length!=null?Number(l.char_length):null,b=l.numeric_precision!=null?Number(l.numeric_precision):null,g=l.numeric_scale!=null?Number(l.numeric_scale):null,C=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||u||"").toLowerCase()),R=null,_=String(l.column_type||l.COLUMN_TYPE||""),x=_.match(/^enum\((.+)\)$/i);x&&(R=x[1].split(",").map(Z=>Z.trim().replace(/^'|'$/g,"")));let $=_.toLowerCase(),M=$.includes(" unsigned"),E=$.includes(" zerofill");return {name:d,dataType:p,isNullable:c,defaultValue:f,length:y,precision:b,scale:g,withTimezone:C,enumValues:R,unsigned:M,zerofill:E}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let d of a){let u=d.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),p=l.find(m=>{let c=m.expression,f=new RegExp(`[\\["\\[]?${u}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${u}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return f.test(c)||y.test(c)});if(p){let m=p.expression,c=m.match(/IN\s*\(([^)]+)\)/i);if(c)d.enumValues=c[1].split(",").map(f=>f.trim().replace(/^'|'$/g,""));else {let f=m.match(/ARRAY\[([^\]]+)\]/i);f&&(d.enumValues=f[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async getIndexInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ht(e)]).sql,n=this.getDbType(),s=[];try{let l=await this.rawQuery(o);s=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let u=d.Key_name,p=d.Non_unique===0,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.Column_name),l.set(u,m);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let u=d.index_name,p=!!d.is_unique,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.column_name),l.set(u,m);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,u=!!l.unique,p=await this.rawQuery(`PRAGMA index_info(${d})`),c=this.extractRowsFromRawResult(p).map(f=>f.name);a.push({name:d,columns:c,isUnique:u});}return a}async getForeignKeyInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let u=Number(d.id),p=l.get(u)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};p.columns.push(String(d.from)),p.referencedColumns.push(String(d.to)),l.set(u,p);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),u=d||`${l.referenced_table}_${l.column_name}`,p=a.get(u)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};p.columns.push(String(l.column_name)),p.referencedColumns.push(String(l.referenced_column)),a.set(u,p);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(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 getCheckConstraintInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Vt(e)]).sql,n=[];try{let s=await this.rawQuery(o);n=this.extractRowsFromRawResult(s);}catch(s){if(je(this.getDbType(),s))return [];throw s}return n.map(s=>({name:String(s.name),expression:String(s.expression)}))}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
|
|
318
318
|
v_result NUMBER;
|
|
319
319
|
BEGIN
|
|
320
320
|
v_result := DBMS_LOCK.REQUEST(
|
|
@@ -328,7 +328,7 @@ ORDER BY ordinal_position`,bindings:[]}}},Xm=new Ei;var vi=class{toSql(t){let e=
|
|
|
328
328
|
ELSE
|
|
329
329
|
:result := 0;
|
|
330
330
|
END IF;
|
|
331
|
-
END;`))?.outBinds?.result===1}catch(n){let s=n instanceof Error?n:new Error(String(n));return
|
|
331
|
+
END;`))?.outBinds?.result===1}catch(n){let s=n instanceof Error?n:new Error(String(n));return T.warn(`Oracle lock allocation may have failed: ${s.message}`),!1}case "sqlite":return T.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return T.warn(`Advisory locks not implemented for database type: ${o}`),!0}}catch(n){let s=n instanceof Error?n:new Error(String(n));return T.error(`Failed to acquire lock: ${s.message||JSON.stringify(n)} (dbType: ${o}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[o])).rows?.[0]?.pg_advisory_unlock;return s===!0||s==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "oracledb":try{let o=this.hashStringToLockId(e);return (await this.rawQuery(`DECLARE
|
|
332
332
|
v_result NUMBER;
|
|
333
333
|
BEGIN
|
|
334
334
|
v_result := DBMS_LOCK.RELEASE(${o});
|
|
@@ -337,7 +337,7 @@ ORDER BY ordinal_position`,bindings:[]}}},Xm=new Ei;var vi=class{toSql(t){let e=
|
|
|
337
337
|
ELSE
|
|
338
338
|
:result := 0;
|
|
339
339
|
END IF;
|
|
340
|
-
END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return
|
|
340
|
+
END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return T.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return T.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return T.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}}};var Ae=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){T.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){T.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.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function xt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;T.info("Rolling back migrations for database type: "+n);try{let l=await Lt(n,i.getPool()),d=await Wt(n,e,r),u=l.map(c=>c.name),p=d.filter(c=>u.includes(c.migrationName));if(p.length===0){T.info("No pending migrations.");return}if(t){let c=p.findIndex(b=>b.migrationName===t);if(c===-1){T.error(`Rollback until migration not found: ${t}`);return}let f=p.slice(c);s&&(a=await i.transaction(),i=a.sql),await new Ae(i).downMigrations(f),s&&await a?.commit(),T.info("Migrations rolled back successfully");return}let m=new Ae(i);s&&(a=await i.transaction(),i=a.sql),await m.downMigrations(p),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}T.info("Migrations rolled back successfully");}var At=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:n,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
341
341
|
|
|
342
342
|
export default class extends Migration {
|
|
343
343
|
async up() {
|
|
@@ -358,7 +358,7 @@ ${t.map(n=>` this.schema.rawQuery('${n.replace(/\\/g,"\\\\").replace(/'/g,"\\
|
|
|
358
358
|
}
|
|
359
359
|
|
|
360
360
|
async down() {}
|
|
361
|
-
}`}};var
|
|
361
|
+
}`}};var Qr=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):`
|
|
362
362
|
import { ${o} } from "hysteria-orm";
|
|
363
363
|
|
|
364
364
|
const db = new ${o}({
|
|
@@ -398,7 +398,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
398
398
|
password: "root",
|
|
399
399
|
username: "default",
|
|
400
400
|
db: 0,
|
|
401
|
-
}`;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
|
|
401
|
+
}`;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 kr(i,t,e){let r=t.getDbType();T.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(T.info("Sql ran successfully"),e){let n=ze.dirname(e);oe.existsSync(n)||oe.mkdirSync(n,{recursive:true}),oe.writeFileSync(e,JSON.stringify(o,null,2)),T.info(`Query result saved to ${e}`);return}T.info(JSON.stringify(o,null,2)),await t.disconnect();}var Kr=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
402
402
|
|
|
403
403
|
export default class extends BaseSeeder {
|
|
404
404
|
/**
|
|
@@ -408,9 +408,9 @@ export default class extends BaseSeeder {
|
|
|
408
408
|
console.log('Seeder completed');
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
|
-
`}};var
|
|
411
|
+
`}};var py=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;oe.existsSync(r)||(oe.mkdirSync(r,{recursive:true}),T.info(`Created seeders directory: ${r}`));let a=ze.join(r,s),l=Kr.seederTemplate();oe.writeFileSync(a,l),T.info(`Seeder created successfully: ${a}`);},vp=py;var fy=async(i,t,e)=>{let r=[];for(let o of t){let n=ze.resolve(process.cwd(),o);oe.existsSync(n)||(T.error(`Path not found: ${n}`),process.exit(1));let s=oe.statSync(n);if(s.isDirectory()){let a=oe.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=ze.basename(n),l=ze.dirname(n);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(T.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){T.info("No seeders found");return}T.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:o,folder:n}of r)try{T.info(`Running seeder: ${o}`);let s=ze.resolve(n,o),a=await Ye(s,e);if(!a.default){T.error(`Seeder ${o} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){T.error(`Seeder ${o} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),T.info(`\u2713 Completed seeder: ${o}`);}catch(s){throw T.error(`Failed to run seeder ${o}: ${s}`),s}T.info("All seeders completed successfully");},Qp=fy;var kp={devDependencies:{"@types/ioredis":"^5.0.0","@types/mongodb":"^4.0.7","@types/mssql":"^9.1.11","@types/oracledb":"^6.10.2","@types/pg":"^8.20.0","@types/sqlite3":"^5.1.0",esbuild:"^0.28.0",ioredis:"^5.10.1",mongodb:"^7.1.1",mssql:"^12.2.1",mysql2:"^3.20.0",oracledb:"^6.10.0",pg:"^8.20.0",sqlite3:"^6.0.1",typescript:"^6.0.2"}};var Bp=()=>oe.existsSync(ze.join(process.cwd(),"yarn.lock"))?["yarn","add"]:oe.existsSync(ze.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:oe.existsSync(ze.join(process.cwd(),"package-lock.json"))?["npm","install"]:oe.existsSync(ze.join(process.cwd(),"bun.lockb"))?["bun","add"]:oe.existsSync(ze.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Kp=async(i,t,e,r)=>{let o=gy.createInterface({input:process.stdin,output:process.stdout}),n=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
|
|
412
412
|
${n}
|
|
413
|
-
(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);});})},re=kp.devDependencies,Lp=async(i,t,e)=>{let r=Wr.includes(e)?[`typescript@${re.typescript}`,`esbuild@${re.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":break;case "cockroachdb":case "postgres":o=`pg@${re.pg}`,r.push(`@types/pg@${re["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${re.sqlite3}`,r.push(`@types/sqlite3@${re["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${re.mongodb}`,r.push(`@types/mongodb@${re["@types/mongodb"]}`);break;case "redis":o=`ioredis@${re.ioredis}`,r.push(`@types/ioredis@${re["@types/ioredis"]}`);break;case "mssql":o=`mssql@${re.mssql}`,r.push(`@types/mssql@${re["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${re.oracledb}`,r.push(`@types/oracledb@${re["@types/oracledb"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await Kp(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&b.info("Driver dependency installed successfully"),s||b.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await Kp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&b.info("Dev dependencies installed successfully"),s||b.info("Dev dependencies installation skipped");}};var Wr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Ur=Wr.concat("mongodb","redis");async function We(i,t){let{default:e}=await Ye(ze.resolve(process.cwd(),i));return e||(b.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),xt.isSqlDataSource(e)||(b.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}var ge=new Command;ge.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Ur.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=Ur.join(", ");i.type||(b.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Ur.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${Ur.join(", ")}`),process.exit(1)),b.info("Initializing hysteria-orm with standard configuration"),b.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Bp();b.info(`Package manager: ${e}`),b.info("Installing base dependencies"),await Lp(e,r,i.type);let o=kr.initTemplate(i.type);oe.existsSync("database")?b.info("database folder already exists, skipping"):oe.mkdirSync("database",{recursive:true}),oe.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):oe.writeFileSync("database/index.ts",o),Wr.includes(i.type)&&!oe.existsSync("database/migrations")?oe.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.info("Initialization completed successfully");});ge.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)=>{b.info("Starting SQL execution"),t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(b.error("SQL query or file path is required"),process.exit(1)),i&&e&&(b.error("Cannot provide both sql query and file path"),process.exit(1));let r=await We(t.datasource,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await Kr(i,r,t?.out),b.info("SQL execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL execution failed: ${n}`),process.exit(1);}}e||(b.error("No SQL statement or file provided"),process.exit(1)),b.info(`Reading SQL from file: ${e}`),e=ze.resolve(process.cwd(),e),oe.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let o=oe.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${o.length} characters)`);try{await Kr(o,r,t?.out),b.info("SQL file execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL file execution failed: ${n}`),process.exit(1);}});ge.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{b.info(`Creating migration: ${i}`),b.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(b.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(b.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(b.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";b.info(`Migration mode: ${e}`),ul(i,t.javascript,e,t.table||i);});ge.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await gt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});ge.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await At(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});ge.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(b.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}t?await Vr(e,!1,a):await At(e,void 0,r,o,a),await gt(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});ge.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").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).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(b.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 t=await We(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(b.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let o=await ke.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=o.getCodeStatements();if(s.up.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let d of s.up)console.log(d);console.log(`
|
|
414
|
-
// down()`);for(let d of s.down)console.log(d);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await
|
|
415
|
-
export{
|
|
413
|
+
(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);});})},ee=kp.devDependencies,Lp=async(i,t,e)=>{let r=Lr.includes(e)?[`typescript@${ee.typescript}`,`esbuild@${ee.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":o=`mysql2@${ee.mysql2}`;break;case "cockroachdb":case "postgres":o=`pg@${ee.pg}`,r.push(`@types/pg@${ee["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${ee.sqlite3}`,r.push(`@types/sqlite3@${ee["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${ee.mongodb}`,r.push(`@types/mongodb@${ee["@types/mongodb"]}`);break;case "redis":o=`ioredis@${ee.ioredis}`,r.push(`@types/ioredis@${ee["@types/ioredis"]}`);break;case "mssql":o=`mssql@${ee.mssql}`,r.push(`@types/mssql@${ee["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${ee.oracledb}`,r.push(`@types/oracledb@${ee["@types/oracledb"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await Kp(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&T.info("Driver dependency installed successfully"),s||T.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await Kp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&T.info("Dev dependencies installed successfully"),s||T.info("Dev dependencies installation skipped");}};var Lr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Wr=Lr.concat("mongodb","redis");async function We(i,t){let{default:e}=await Ye(ze.resolve(process.cwd(),i));return e||(T.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),Rt.isSqlDataSource(e)||(T.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}var he=new Command;he.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Wr.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=Wr.join(", ");i.type||(T.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Wr.includes(i.type)||(T.error(`Invalid database type: ${i.type}, available types: ${Wr.join(", ")}`),process.exit(1)),T.info("Initializing hysteria-orm with standard configuration"),T.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Bp();T.info(`Package manager: ${e}`),T.info("Installing base dependencies"),await Lp(e,r,i.type);let o=Qr.initTemplate(i.type);oe.existsSync("database")?T.info("database folder already exists, skipping"):oe.mkdirSync("database",{recursive:true}),oe.existsSync("database/index.ts")?T.info("database/index.ts file already exists, skipping"):oe.writeFileSync("database/index.ts",o),Lr.includes(i.type)&&!oe.existsSync("database/migrations")?oe.mkdirSync("database/migrations",{recursive:true}):T.info("database/migrations folder already exists or is not a sql database, skipping"),T.info("Initialization completed successfully");});he.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)=>{T.info("Starting SQL execution"),t?.datasource||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(T.error("SQL query or file path is required"),process.exit(1)),i&&e&&(T.error("Cannot provide both sql query and file path"),process.exit(1));let r=await We(t.datasource,t?.tsconfigPath);if(i){T.info("Executing SQL query directly from command line");try{await kr(i,r,t?.out),T.info("SQL execution completed successfully"),process.exit(0);}catch(n){T.error(`SQL execution failed: ${n}`),process.exit(1);}}e||(T.error("No SQL statement or file provided"),process.exit(1)),T.info(`Reading SQL from file: ${e}`),e=ze.resolve(process.cwd(),e),oe.existsSync(e)||(T.error(`File not found: ${e}`),process.exit(1));let o=oe.readFileSync(e,"utf-8");T.info(`SQL file loaded successfully (${o.length} characters)`);try{await kr(o,r,t?.out),T.info("SQL file execution completed successfully"),process.exit(0);}catch(n){T.error(`SQL file execution failed: ${n}`),process.exit(1);}});he.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)=>{T.info(`Creating migration: ${i}`),T.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(T.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(T.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(T.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";T.info(`Migration mode: ${e}`),dl(i,t.javascript,e,t.table||i);});he.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||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(T.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw T.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");T.info("Migration lock acquired successfully");}await gt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(T.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||T.warn("Failed to release migration lock")),await e.disconnect();}});he.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||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(T.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw T.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");T.info("Migration lock acquired successfully");}await xt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(T.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||T.warn("Failed to release migration lock")),await e.disconnect();}});he.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||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(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(T.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw T.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");T.info("Migration lock acquired successfully");}t?await jr(e,!1,a):await xt(e,void 0,r,o,a),await gt(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(T.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||T.warn("Failed to release migration lock")),await e.disconnect();}});he.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").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).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(T.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 t=await We(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(T.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let o=await Ke.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=o.getCodeStatements();if(s.up.length||(T.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let d of s.up)console.log(d);console.log(`
|
|
414
|
+
// down()`);for(let d of s.down)console.log(d);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await At.generate(s,"code"),l=i?.javascript?".js":".ts";oe.writeFileSync(`${e}/${i?.name}${l}`,a),T.info(`Migration file created successfully: ${i?.name}${l}`);}else {let s=o.getSqlStatements();if(s.length||(T.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let d of s)console.log(d);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await At.generate(s,"raw"),l=i?.javascript?".js":".ts";oe.writeFileSync(`${e}/${i?.name}${l}`,a),T.info(`Migration file created successfully: ${i?.name}${l}`);}await t.disconnect(),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});he.command("sync").description("Sync the database schema with the models metadata by computing a diff and applying the SQL statements directly, supported only for postgres, mysql, mariadb and cockroachdb").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 apply changes but only outputs the SQL statements that would be executed",false).option("-t, --transactional","Runs all the sync statements in a single transaction",false).action(async i=>{i?.datasource||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await We(i.datasource,i?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(T.error(`sync is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),await t.disconnect(),process.exit(1));try{let o=(await Ke.makeDiff(t)).getSqlStatements();if(o.length||(T.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),i.dry){T.info(`${o.length} SQL statement(s) would be executed:`);for(let n of o)console.log(n);await t.disconnect(),process.exit(0);}await t.syncSchema({transactional:i?.transactional??!1}),T.info("Schema sync completed successfully"),await t.disconnect(),process.exit(0);}catch(r){console.error(r),await t.disconnect(),process.exit(1);}});he.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)=>{T.info(`Creating seeder: ${i}`),T.info(`Seeder options: javascript=${t.javascript}`),i||(T.error("Seeder name is required"),process.exit(1)),vp(i,t.javascript,t.seederPath);});he.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=>{T.info("Starting seeder execution"),i?.datasource||(T.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await We(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 Qp(t,e,r),await t.disconnect(),T.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});he.parse(process.argv);
|
|
415
|
+
export{Lr as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
416
416
|
//# sourceMappingURL=cli.js.map
|