hysteria-orm 10.9.6 → 10.9.8
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 +48 -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
|
|
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=
|
|
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,c=u?.database;return new d.Database(c,u?.driverOptions?.mode??void 0,$=>{if($)throw new q("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let p=e,f=t,{options:y,...b}=f.driverOptions??{},g=new p.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,M=`${R.host}/${R.database}`;return await C.createPool({user:R.username,password:R.password,connectString:M,...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,22 +122,22 @@ 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
|
-
)`}},
|
|
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 c=i.getConnectionDetails();i.sqlPool=await Ue(i.getDbType(),c),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
|
|
129
129
|
FROM sys.foreign_keys;
|
|
130
|
-
`)).recordset;for(let
|
|
130
|
+
`)).recordset;for(let p of m)await i.rawQuery(`ALTER TABLE [${p.table_name}] DROP CONSTRAINT [${p.constraint_name}];`);}if(r==="oracledb"){let c=await i.rawQuery(`
|
|
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 Yp=()=>{let i=I.MIGRATION_PATH,t=ze.resolve(process.cwd(),i);return ye.existsSync(t)||ye.mkdirSync(t,{recursive:true}),t},al=(i,t=false,e="basic",r="table")=>{let o=Yp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=ze.join(o,s),l;switch(e){case "alter":l=Y.alterMigrationTemplate(t,r);break;case "create":l=Y.createMigrationTemplate(t,r);break;default:l=Y.basicMigrationTemplate(t);break}ye.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function Zp(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Xp(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 ye.promises.unlink(r).catch(()=>{});}}async function Ye(i,t){let e=ze.isAbsolute(i)?i:ze.resolve(process.cwd(),i);return e.endsWith(".ts")?Xp(e):Zp(e)}var rf=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 Kt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(Y.migrationTableTemplateMysql()),(await e.query(Y.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(Y.migrationTableTemplatePg()),(await o.query(Y.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ul(Y.migrationTableTemplateSQLite(),[],t),await ul(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(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 Wt(i,t,e){let r=nf(t),o=[];for(let{name:n,fullPath:s}of r){let a=await of(s),l=new a(i||I.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function of(i,t){let e=await rf(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 nf(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(!ye.existsSync(s))return ye.mkdirSync(s,{recursive:true}),[]}let o=r?e:ze.join(e,"**/*.{ts,js}"),n=ze.isAbsolute(o)?o:ze.resolve(t,o);try{return ye.globSync(n).filter(a=>ye.statSync(a).isFile()).sort().map(a=>({name:ze.basename(a),fullPath:a}))}catch{return []}}async function ul(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 Kt(n,i.getPool()),u=(await Wt(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 Re(i).upMigrations(c),s&&await a?.commit(),b.info("Migrations ran successfully");return}let p=new Re(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 Lt={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 cl=null;function Oe(i,t){return t.getModelManager(i)}function ml(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=Lt[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 sf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=cl;}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=Lt[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=Lt[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 ml(a,n,this._model),a.getCount()}async find(n,s={}){let l=Oe(this._model,this._db).query();return ml(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 af(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function lf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),t=await sf(),e=await af();i.default.registerAdapter({Database:e,Resource:t});}async function Vr(i,t){cl=i;let e=await import('adminjs').catch(()=>{throw new B("adminjs")});await lf();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 pl(i,t){let{admin:e}=await Vr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new B("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ge=new Map,xe=new Map,Ut=class{async get(t){return Ge.get(t)}async set(t,e,r){let o=xe.get(t);if(o&&(clearTimeout(o),xe.delete(t)),Ge.set(t,e),r){let n=setTimeout(()=>{Ge.delete(t),xe.delete(t);},r);xe.set(t,n);}}async invalidate(t){let e=xe.get(t);e&&(clearTimeout(e),xe.delete(t)),Ge.delete(t);}async invalidateAll(t){let e=Ge.keys();for(let r of e)if(r.startsWith(t)){let o=xe.get(r);o&&(clearTimeout(o),xe.delete(r)),Ge.delete(r);}}};var Ft=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=kt(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 df=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},uf=i=>i.openApi?.required??false,mf=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=df(r));return e},cf=i=>{let t=i.getColumns(),e=[];for(let r of t)uf(r)&&e.push(r.columnName);return e||[]},pf=i=>{let t=mf(i),e=cf(i);return {type:"object",properties:t,required:e.length?e:[]}};var fl=i=>i.map(t=>({...pf(t),modelName:t.table,$id:t.table}));var Jr=(i,t)=>{let e=_e.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Hr=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:[]}}},yl=new Hr;var Yr=class{toSql(t){let e=t,r=new T(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},hl=new Yr;var zr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},gl=new zr;var Gr=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:[]}}},bl=new Gr;var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ze=class extends w{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function yf(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 hf(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"?yf(i):t==="camel"?hf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}var gf=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 gf(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 Zr=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}}},Tl=new Zr;var Xr=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Nl=new Xr;var eo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Sl=new eo;var to=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},wl=new to;var ro=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:[]}}},ql=new ro;var oo=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Cl=new oo;var no=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},_l=new no;var so=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Ml=new so;var $=class extends w{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 io=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Rl=new io;var ao=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:[]}}},xl=new ao;var lo=class{toSql(t){return {sql:"",bindings:[]}}},Al=new lo;function uo(i){return i.replace(/^[`"]|[`"]$/g,"")}function mo(i,t,e){if(!i.includes(".")){let n=uo(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=uo(r),o=uo(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function C(i){return typeof i=="function"?i():i}var K=(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]=K(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]=K(o,t);}return e};var co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mssql",C(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:[]}}},Pl=new co;var po=class{toSql(t){return {sql:"",bindings:[]}}},$l=new po;var fo=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",C(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",C(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("mssql",C(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",C(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:[]}}},Dl=new fo;var yo=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()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let R=`${N} ${q}`.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(q),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}}},Il=new yo;var ho=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:[]}}},Ol=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},El=new go;var bo=class{toSql(t){return b.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},vl=new bo;var To=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ql=new To;var No=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},kl=new No;var So=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}}},Bl=new So;var wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Kl=new wo;var qo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!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}}},Wl=new qo;var Co=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:[]}}},Ll=new Co;var _o=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Ul=new _o;var Mo=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 $?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(", ")}},Fl=new Mo;var Ro=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}}},jl=new Ro;var xo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Vl=new xo;var Ao=class{toSql(t){return {sql:"",bindings:[]}}},Jl=new Ao;var Po=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Hl=new Po;var $o=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:[]})}},Yl=new $o;var Do=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:[]}}},zl=new Do;var Io=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Gl=new Io;var Oo=class{toSql(t){return {sql:`SELECT
|
|
134
|
+
`);for(let m of c.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(c){if(c.errorNum!==955)throw c}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(c=>({id:c[0],name:c[1],timestamp:c[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(p=>p.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 p=u.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Ae(i).upMigrations(p),s&&await a?.commit(),T.info("Migrations ran successfully");return}let c=new Ae(i);s&&(a=await i.transaction(),i=a.sql),await c.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(c=>c.columnName===n||c.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 c=a;c.from&&i.where(n,">=",c.from),c.to&&i.where(n,"<=",c.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 c=t[u],m=e[u];c!=="*"&&(o.push(c),n.push(m));}let s=new Set(o),a=null;for(let u=0;u<o.length;u++){let c=o[u],m=n[u],p=this.modelColumnsMap.get(c);if(p){if(p.prepare){let f=r==="insert"?p.prepare(m):p.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(c=>c.promise));for(let c=0;c<a.length;c++)n[a[c].index]=u[c];}let l=this.model.primaryKey,d=r==="insert"?this.autoInsertColumns:this.autoUpdateColumns;for(let u of d){let c=u.columnName;if(s.has(c)||r==="insert"&&c===l&&!u.prepare)continue;o.push(c);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:c,bindings:m}=n.parse([u]);s.push(c.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}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=d.length>0?` WITH (${d.join(", ")})`:"";return {sql:`${o} (${l})${m}${u}${c}`,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 p=s.map(y=>m[y]),f=[];for(let y of p)y instanceof P?f.push(y.rawValue):(l.push(y),f.push(`@${u++}`));d.push(`(${f.join(", ")})`);}let c=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}`).join(", ");c=c.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);c=c.replace(") values",`) output ${m} values`);}return {sql:c,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 c=new N(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...p.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:[]}}},td=new Qo;var ko=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:[]}}},rd=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 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}]`:""}},od=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 Ko=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=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}},nd=new Ko;var Wo=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:[]}}},sd=new Wo;var Lo=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}}},id=new Lo;var Uo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new 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 $?(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}}},ad=new Uo;var Fo=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}},ld=new Fo;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}}},dd=new jo;var Vo=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}}},ud=new Vo;var Jo=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new 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}}},md=new Jo;var Ho=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}}},cd=new Ho;var Yo=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:[]}}},pd=new Yo;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:[]}}},fd=new zo;var Go=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},yd=new Go;var Zo=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:[]}}},hd=new Zo;var Xo=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 q=c.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(c)?c:`add ${c}`;s.push(q);}}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}}},gd=new Xo;var en=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},bd=new en;var tn=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Td=new tn;var rn=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Nd=new rn;var on=class{toSql(t){return {sql:"",bindings:[]}}},Sd=new on;var nn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},wd=new nn;var sn=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},qd=new sn;var an=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Cd=new an;var ln=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},_d=new ln;var dn=class{toSql(t){return {sql:"",bindings:[]}}},Md=new dn;var un=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:[]}}},Rd=new un;var mn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",C(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:[]}}},xd=new mn;var cn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Ad=new cn;var pn=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",C(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",C(s))).join(", "),n=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(d=>r.formatStringColumn("mysql",C(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",C(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:[]}}},Pd=new pn;var fn=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 q=`${g} ${N}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),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}}},$d=new fn;var yn=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:[]}}},Dd=new yn;var hn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Id=new hn;var gn=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Od=new gn;var bn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ed=new bn;var Tn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vd=new Tn;var Nn=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}}},Qd=new Nn;var Sn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},kd=new Sn;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 w)&&!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}}},Bd=new wn;var qn=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:[]}}},Kd=new qn;var Cn=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:[]}}},Wd=new Cn;var _n=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 $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ld=new _n;var Mn=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}}},Ud=new Mn;var Rn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fd=new Rn;var bf={for_update:"for update",for_share:"lock in share mode"},xn=class{toSql(t){let e=t,r=bf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},jd=new xn;var An=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Vd=new An;var Pn=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:[]}}},Jd=new Pn;var $n=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:[]}}},Hd=new $n;var Dn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Yd=new Dn;var In=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 c=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)} = @${c}`)}).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}`,c=`${a} between ${u}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((u,c)=>`@${o+c}`).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:p,bindings:f}=n.parse([m]);if(m.file==="add_column")s.push(p);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(p);if(b&&!g){let C=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${C}`;}else {let C=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(C);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);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 p of e.children){let{sql:f,bindings:y}=n.parse([p]);if(p.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 p of e.namedConstraints){let{sql:f,bindings:y}=n.parse([p]);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 c=u.length>0?` ${u.join(" ")}`:"";return {sql:`${d}${o} (${l})${c}`,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(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],d=[];for(let c of e.records){let m=s.map(f=>c[f]),p=[];for(let f of m)f instanceof P?p.push(f.rawValue):(l.push(f),p.push("?"));d.push(`(${p.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 c=new N(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...p.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:[]}}},rd=new ko;var Bo=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:[]}}},rd=new ko;var Bo=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:[]}}},Xd=new vn;var Qn=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:[]}}},eu=new Qn;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 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}\``:""}},tu=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 y(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}},ru=new Bn;var Kn=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:[]}}},ou=new Kn;var Wn=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}}},nu=new Wn;var Ln=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 $?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},su=new Ln;var Un=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}},iu=new Un;var Fn=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}}},au=new Fn;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}}},lu=new jn;var Vn=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}}},du=new Vn;var Jn=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}}},uu=new Jn;var Hn=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:[]}}},mu=new Hn;var Yn=class{toSql(t){let e=t,r=new T(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},cu=new Yn;var zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},pu=new zn;var Gn=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:[]}}},fu=new Gn;var Zn=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}}},yu=new Zn;var Xn=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},hu=new Xn;var es=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},gu=new es;var ts=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},bu=new ts;var rs=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},Tu=new rs;var os=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Nu=new os;var ns=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Su=new ns;var ss=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},wu=new ss;var is=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`modify "${e.column}" default ${r}`,bindings:[]}}},qu=new is;var as=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},Cu=new as;var ls=class{toSql(t){return {sql:"",bindings:[]}}},_u=new ls;var ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("oracledb",C(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:[]}}},Mu=new ds;var us=class{toSql(t){return {sql:"",bindings:[]}}},Ru=new us;var ms=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",C(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",C(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("oracledb",C(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",C(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:[]}}},xu=new ms;var cs=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}}},Au=new cs;var ps=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:[]}}},Pu=new ps;var fs=class{toSql(t){return {sql:"",bindings:[]}}},$u=new fs;var ys=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Du=new ys;var hs=class{toSql(t){let e=t;return {sql:`${new y(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Iu=new hs;var gs=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Ou=new gs;var bs=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}}},Eu=new bs;var Ts=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},vu=new Ts;var Ns=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 w)&&!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}}},Qu=new Ns;var Ss=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:[]}}},ku=new Ss;var ws=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Bu=new ws;var qs=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 $?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 $?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}}},Ku=new qs;var Cs=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}}},Wu=new Cs;var _s=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Lu=new _s;var Tf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Ms=class{toSql(t){let e=t,r=Tf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Uu=new Ms;var Rs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Fu=new Rs;var xs=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:[]}}},ju=new xs;var As=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:[]}}},Vu=new As;var Ps=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ju=new Ps;var $s=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:c,bindings:m}=n.parse([u]);s.push(c.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:p,bindings:f}=n.parse([m]);if(m.folder==="constraint"){let y=s.pop()??"",b=p;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(p),a.push(...f);}for(let m of e.namedConstraints){let{sql:p,bindings:f}=n.parse([m]);s.push(p),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(([p,f])=>`${p.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 p=s.map(y=>m[y]),f=[];for(let y of p)y instanceof P?f.push(y.rawValue):(l.push(y),f.push(`:${u++}`));d.push(`(${f.join(", ")})`);}let c;if(e.records.length===1)c=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",u=e.currParamIndex;let m=[];for(let p of e.records){let f=s.map(b=>p[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(", ")})`);}c=`all ${m.join(" ")} select * from dual`;}return {sql:c,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 c=new N(this.model,"oracledb");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...p.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:[]}}},Gu=new Os;var Es=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:[]}}},Zu=new Es;var vs=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}"`:""}},Xu=new vs;var Qs=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=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}},em=new Qs;var ks=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:[]}}},tm=new ks;var Bs=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}}},rm=new Bs;var Ks=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 $?`${r.formatStringColumn("oracledb",l)} = ${u.rawValue}`:(s.push(u),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},om=new Ks;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 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}},nm=new Ws;var Ls=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}}},sm=new Ls;var Us=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}}},im=new Us;var Fs=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}}},am=new Fs;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}}},lm=new js;var Vs=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:[]}}},dm=new Vs;var Js=class{toSql(t){let e=t,r=new T(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},um=new Js;var Hs=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},mm=new Hs;var Ys=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:[]}}},cm=new Ys;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}}},pm=new zs;var Gs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fm=new Gs;var Zs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ym=new Zs;var Xs=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},hm=new Xs;var ei=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},gm=new ei;var ti=class{toSql(t){return {sql:"",bindings:[]}}},bm=new ti;var ri=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tm=new ri;var oi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Nm=new oi;var ni=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Sm=new ni;var si=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},wm=new si;var ii=class{toSql(t){return {sql:"",bindings:[]}}},qm=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",C(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:[]}}},Cm=new ai;var li=class{toSql(t){return {sql:"",bindings:[]}}},_m=new li;var di=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",C(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",C(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("postgres",C(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",C(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:[]}}},Mm=new di;var ui=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:q,bindings:R}=n.parse([N]);if(N.folder==="constraint"){let M=s.pop()??"",x=q;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)){let P=`${M} ${x}`.trim();P=P.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(P),a.push(...R);continue}s.push(M),s.push(x),a.push(...R);continue}s.push(q),a.push(...R);}for(let N of e.namedConstraints){let{sql:q,bindings:R}=n.parse([N]);s.push(q),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(([q,R])=>`${q}=${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}}},Rm=new ui;var mi=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:[]}}},xm=new mi;var ci=class{toSql(t){return {sql:"",bindings:[]}}},Am=new ci;var pi=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Pm=new pi;var fi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},$m=new fi;var yi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Dm=new yi;var hi=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}}},Im=new hi;var gi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Om=new gi;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(!(e.value instanceof w)&&!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}}},Em=new bi;var Ti=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:[]}}},vm=new Ti;var Ni=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Qm=new Ni;var Si=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 $?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}},km=new Si;var wi=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}}},Bm=new wi;var qi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Km=new qi;var Nf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Ci=class{toSql(t){let e=t,r=Nf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Wm=new Ci;var _i=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Lm=new _i;var Mi=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:[]}}},Um=new Mi;var Ri=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:[]}}},Fm=new Ri;var xi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},jm=new xi;var Ai=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 c of e.children){let{sql:m,bindings:p}=n.parse([c]);s.push(m.trim()),a.push(...p);}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 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 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 c=[];if(e.postgresWith){let g=Object.entries(e.postgresWith).map(([C,R])=>`${C}=${R}`).join(", ");g&&c.push(`WITH (${g})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=u.length>0?`${u.join(" ")} `:"",f=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${d}${p}${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 p=s.map(y=>m[y]),f=[];for(let y=0;y<s.length;y++){let b=p[y];b instanceof P?f.push(b.rawValue):(l.push(b),f.push(`$${u++}${this.formatTypeCast(b)}`));}d.push(`(${f.join(", ")})`);}let c=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");c+=` returning ${m}`;}else c+=" returning *";return {sql:c,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},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 c=new N(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...p.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:[]}}},Zu=new Es;var vs=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:[]}}},Zu=new Es;var vs=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:[]}}},Zu=new Es;var vs=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:[]}}},Zu=new Es;var vs=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:[]}}},zm=new Ii;var Oi=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}"`})}},Gm=new Oi;var Ei=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=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}},Zm=new Ei;var vi=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:[]}}},Xm=new vi;var Qi=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}}},ec=new Qi;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 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 $?(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}},tc=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 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}},rc=new Bi;var Ki=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}}},oc=new Ki;var Wi=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}}},nc=new Wi;var Li=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}}},sc=new Li;var Ui=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}}},ic=new Ui;var Fi=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:[]}}},ac=new Fi;var ji=class{toSql(t){return {sql:"",bindings:[]}}},lc=new ji;var Vi=class{toSql(t){return {sql:"",bindings:[]}}},dc=new Vi;var Ji=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:[]}}},uc=new Ji;var Hi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},mc=new Hi;var Yi=class{toSql(t){return {sql:"",bindings:[]}}},cc=new Yi;var zi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},pc=new zi;var Gi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},fc=new Gi;var Zi=class{toSql(t){return {sql:"",bindings:[]}}},yc=new Zi;var Xi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},hc=new Xi;var ea=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},gc=new ea;var ta=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},bc=new ta;var ra=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Tc=new ra;var oa=class{toSql(t){return {sql:"",bindings:[]}}},Nc=new oa;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",C(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:[]}}},Sc=new na;var sa=class{toSql(t){return {sql:"",bindings:[]}}},wc=new sa;var ia=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",C(s))).join(", ");return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof $?{sql:`default ${n.rawValue}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",C(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",C(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:[]}}},qc=new ia;var aa=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 q=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=`${q} ${R}`.trim();M=M.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...N);continue}s.push(q),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}}},Cc=new aa;var la=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:[]}}},_c=new la;var da=class{toSql(t){return {sql:"distinct",bindings:[]}}},Mc=new da;var ua=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Rc=new ua;var ma=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},xc=new ma;var ca=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Ac=new ca;var pa=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}}},Pc=new pa;var fa=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},$c=new fa;var ya=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 w)&&!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}}},Dc=new ya;var ha=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:[]}}},Ic=new ha;var ga=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Oc=new ga;var ba=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 $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ec=new ba;var Ta=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}}},vc=new Ta;var Na=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Qc=new Na;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},kc=new Sa;var wa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Bc=new wa;var qa=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:[]}}},Kc=new qa;var Ca=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:[]}}},Wc=new Ca;var _a=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Lc=new _a;var Ma=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Uc=new Ma;var Ra=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Fc=new Ra;var xa=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},jc=new xa;var Aa=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 c=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)} = $${c}${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:p,bindings:f}=n.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",b=p.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(p),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 M=`${C} ${R}`.trim();M=M.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),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 c=u.length>0?`${u.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${d}${c}${o} (${l})${m}${p}`,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(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],d=[];for(let c of e.records){let m=s.map(f=>c[f]),p=[];for(let f of m)f instanceof P?p.push(f.rawValue):(l.push(f),p.push("?"));d.push(`(${p.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 c=new N(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");d+=` and ${f}`,u.push(...p.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:[]}}},Vc=new Aa;var Pa=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Jc=new Pa;var $a=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}"`})}},Hc=new $a;var Da=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=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}},Yc=new Da;var Ia=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:[]}}},zc=new Ia;var Oa=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}}},Gc=new Oa;var Ea=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 $?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Zc=new Ea;var va=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}},Xc=new va;var Qa=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}}},ep=new Qa;var ka=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}}},tp=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 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}}},rp=new Ba;var Ka=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}}},op=new Ka;var np={mssql:{alter_table:{add_column:yl,add_constraint:hl,add_primary_key:gl,alter_column_type:bl,alter_table:Tl,drop_column:Nl,drop_constraint:Sl,drop_default:wl,drop_not_null:ql,drop_primary_key:Cl,rename_column:_l,rename_table:Ml,set_default:Rl,set_not_null:xl,set_table_options:Al},column:{column_type:Pl},constraint:{after:$l,constraint:Dl},create_table:{create_table:Il},delete:{delete:Ol},distinct:{distinct:El,distinct_on:vl},drop_table:{drop_table:Ql},extension:{create_extension:kl},from:{from:Bl},group_by:{group_by:Kl},having:{having:Wl},index_op:{create_index:Ll,drop_index:Ul},insert:{insert:Fl},join:{join:jl},limit:{limit:Vl},lock:{lock:Jl},offset:{offset:Hl},on_duplicate:{on_duplicate:Yl},order_by:{order_by:zl},raw:{raw:Gl},schema:{check_constraint_info:Zl,foreign_key_info:Xl,index_info:ed,primary_key_info:td,table_info:rd},select:{select:od,select_json:nd},truncate:{truncate:sd},union:{union:id},update:{update:ad},where:{where:ld,where_group:dd,where_json:ud,where_subquery:md},with:{with:cd}},mysql:{alter_table:{add_column:pd,add_constraint:fd,add_primary_key:yd,alter_column_type:hd,alter_table:gd,drop_column:bd,drop_constraint:Td,drop_default:Nd,drop_not_null:Sd,drop_primary_key:wd,rename_column:qd,rename_table:Cd,set_default:_d,set_not_null:Md,set_table_options:Rd},column:{column_type:xd},constraint:{after:Ad,constraint:Pd},create_table:{create_table:$d},delete:{delete:Dd},distinct:{distinct:Id,distinct_on:Od},drop_table:{drop_table:Ed},extension:{create_extension:vd},from:{from:Qd},group_by:{group_by:kd},having:{having:Bd},index_op:{create_index:Kd,drop_index:Wd},insert:{insert:Ld},join:{join:Ud},limit:{limit:Fd},lock:{lock:jd},offset:{offset:Vd},on_duplicate:{on_duplicate:Jd},order_by:{order_by:Hd},raw:{raw:Yd},schema:{check_constraint_info:zd,foreign_key_info:Gd,index_info:Zd,primary_key_info:Xd,table_info:eu},select:{select:tu,select_json:ru},truncate:{truncate:ou},union:{union:nu},update:{update:su},where:{where:iu,where_group:au,where_json:lu,where_subquery:du},with:{with:uu}},oracledb:{alter_table:{add_column:mu,add_constraint:cu,add_primary_key:pu,alter_column_type:fu,alter_table:yu,drop_column:hu,drop_constraint:gu,drop_default:bu,drop_not_null:Tu,drop_primary_key:Nu,rename_column:Su,rename_table:wu,set_default:qu,set_not_null:Cu,set_table_options:_u},column:{column_type:Mu},constraint:{after:Ru,constraint:xu},create_table:{create_table:Au},delete:{delete:Pu},distinct:{distinct:$u,distinct_on:Du},drop_table:{drop_table:Iu},extension:{create_extension:Ou},from:{from:Eu},group_by:{group_by:vu},having:{having:Qu},index_op:{create_index:ku,drop_index:Bu},insert:{insert:Ku},join:{join:Wu},limit:{limit:Lu},lock:{lock:Uu},offset:{offset:Fu},on_duplicate:{on_duplicate:ju},order_by:{order_by:Vu},raw:{raw:Ju},schema:{check_constraint_info:Hu,foreign_key_info:Yu,index_info:zu,primary_key_info:Gu,table_info:Zu},select:{select:Xu,select_json:em},truncate:{truncate:tm},union:{union:rm},update:{update:om},where:{where:nm,where_group:sm,where_json:im,where_subquery:am},with:{with:lm}},postgres:{alter_table:{add_column:dm,add_constraint:um,add_primary_key:mm,alter_column_type:cm,alter_table:pm,drop_column:fm,drop_constraint:ym,drop_default:hm,drop_not_null:gm,drop_primary_key:bm,rename_column:Tm,rename_table:Nm,set_default:Sm,set_not_null:wm,set_table_options:qm},column:{column_type:Cm},constraint:{after:_m,constraint:Mm},create_table:{create_table:Rm},delete:{delete:xm},distinct:{distinct:Am,distinct_on:Pm},drop_table:{drop_table:$m},extension:{create_extension:Dm},from:{from:Im},group_by:{group_by:Om},having:{having:Em},index_op:{create_index:vm,drop_index:Qm},insert:{insert:km},join:{join:Bm},limit:{limit:Km},lock:{lock:Wm},offset:{offset:Lm},on_duplicate:{on_duplicate:Um},order_by:{order_by:Fm},raw:{raw:jm},schema:{check_constraint_info:Vm,foreign_key_info:Jm,index_info:Hm,primary_key_info:Ym,table_info:zm},select:{select:Gm,select_json:Zm},transaction:{},truncate:{truncate:Xm},union:{union:ec},update:{update:tc},where:{where:rc,where_group:oc,where_json:nc,where_subquery:sc},with:{with:ic}},sqlite:{alter_table:{add_column:ac,add_constraint:lc,alter_column_type:dc,alter_table:uc,drop_column:mc,drop_constraint:cc,drop_default:pc,drop_not_null:fc,drop_primary_key:yc,rename_column:hc,rename_table:gc,set_default:bc,set_not_null:Tc,set_table_options:Nc},column:{column_type:Sc},constraint:{after:wc,constraint:qc},create_table:{create_table:Cc},delete:{delete:_c},distinct:{distinct:Mc,distinct_on:Rc},drop_table:{drop_table:xc},extension:{create_extension:Ac},from:{from:Pc},group_by:{group_by:$c},having:{having:Dc},index_op:{create_index:Ic,drop_index:Oc},insert:{insert:Ec},join:{join:vc},limit:{limit:Qc},lock:{lock:kc},offset:{offset:Bc},on_duplicate:{on_duplicate:Kc},order_by:{order_by:Wc},raw:{raw:Lc},schema:{check_constraint_info:Uc,foreign_key_info:Fc,index_info:jc,primary_key_info:Vc,table_info:Jc},select:{select:Hc,select_json:Yc},transaction:{},truncate:{truncate:zc},union:{union:Gc},update:{update:Zc},where:{where:Xc,where_group:ep,where_json:tp,where_subquery:rp},with:{with:op}}};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=[],q=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 P=np[this.mapCommonDbType(this.dbType)][x.folder][x.file];if(!P)throw new Error(`Interpreter not found for ${this.dbType} ${x.keyword}`);P.model=this.model;let _=P.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),q=x.keyword;continue}if(q!==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,Se=false;for(;Z<l.length&&l[Z].keyword===x.keyword;){let Me=l[Z];if(Me.folder==="with"&&Me.clause==="recursive"){Se=true;break}Z++;}Se&&(J=`${J} recursive`);}if(J==="select"){let Z=c?`top (@${e}) `:"";if(o){let Se=Array.isArray(o.columns)?o.columns.join(", "):"";g.push(`select ${Z}distinct on (${Se}) ${_.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}`);}q=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 P=`offset @${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;P+=` fetch next @${_} rows only`;}g.push(P);}if(f){u||g.push("order by null");let M=m?.offset??0;N.push(M);let P=`offset :${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;P+=` fetch next :${_} rows only`;}g.push(P);}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 w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Vt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Jt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Ht=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Yt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var zt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var de=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Xe=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Gt=class extends w{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 w{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 Zt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var me=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Tt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Xt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var et=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var er=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var tr=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var rr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var Ee=class extends w{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 w{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 or=class extends w{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 nr=class extends w{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 sr=class extends w{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 ir=class extends w{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 ar=class extends w{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 w{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Sf(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 lr=Symbol("columns"),rt=Symbol("primaryKey"),Wa=Symbol("relations"),sp=Symbol("indexes"),ip=Symbol("uniques"),ap=Symbol("checks"),La=i=>`${Sf(i)}_id`,Ua=(i,t)=>`idx_${i}_${t}`,ce=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ae=(i,t)=>`pk_${i}_${t}`;var Q=class extends w{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 w{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 w{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 w{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 dr=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var ur=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=Ae(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??z(this.tableName??"",C(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[C(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:[C(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:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new U("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof $?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new U("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??ce(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||ce(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(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 dr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Qe=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 ur(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new $(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 mr=class extends Pe{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new $(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 de(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=C(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 Gt(C(a),s,m)),u&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(u.constraintType==="not_null"?this.nodes.push(new rr(C(a))):u.constraintType==="null"&&this.nodes.push(new Xt(C(a)))),p&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?this.nodes.push(new Tt(C(a))):this.nodes.push(new tr(C(a),p.defaultValue))),o.getNodes().forEach(c=>{let h=c;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new Zt(t));}renameColumn(t,e){this.nodes.push(new er(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 de(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 de(new U("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??z(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 de(new U("unique",{columns:[t],constraintName:e?.constraintName??ce(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=z(this.table,t,e);this.nodes.push(new me(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??ce(this.table,t);this.nodes.push(new me(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 me(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 be=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 $(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ye.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=ye.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 or(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 mr(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 nr(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||Ua(t,e.join("_")),n=new ir(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new ar(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=z(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 sr(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=>C(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 pr,up,cr=class{constructor(t,e){Xa(this,pr);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=el(this,pr,up).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"}};pr=new WeakSet,up=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 fr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,o=new Map;for(let n of t.relationsToDrop||[]){let s=`${n.table}.${n.relation.name}`,a=[];if(n.relation.referencedTable&&a.push(`table.${n.relation.referencedTable}`),n.relation.referencedColumns)for(let l of n.relation.referencedColumns)a.push(`column.${n.relation.referencedTable}.${l}`);e.set(s,a);}for(let n of t.tablesToDrop||[]){let s=`table.${n.table}`,a=[];for(let l of this.models){let d=l.getRelations();for(let 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 fr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,o=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),n=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...o].filter(l=>n.has(l)));return e.filter(l=>{let d=r(l);return d?!(s.has(d)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let o=this.sql.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||Ae(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,d=>{let u=a||Ae(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=C(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=C(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,z(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=C(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||Ae(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=C(t.relation.manyToManyOptions.throughModel),r=C(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=C(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=C(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||z(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 yr=hr;function Cf(i){return i.replace(/\s+/g," ").trim()}function _f(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function $e(i,t){let e=Cf(t.toLowerCase()),r=_f(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(q=>q.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 q=C(N.constraintName);o.foreignKeys.find(M=>M.name===q)||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),q=o.columns.find(R=>R.name===g);if(N&&q?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),M=[...q.enumValues].sort();if(!(R.length===M.length&&R.every((P,_)=>P===M[_]))){e.data.checksToDrop.push({table:r.table,name:f.name});let P=e.sql.getDbType(),_=P==="mssql"?"[":'"',E=P==="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),q=e.getDefaultChange({table:r.table,dbColumns:g,modelColumn:f});(N||q)&&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 q=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):z(q,C(f.manyToManyOptions.leftForeignKey||La(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let g=C(f.constraintName);if(g&&o.foreignKeys.some(q=>q.name===g))continue;o.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||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=C(f.foreignKey)||f.columnName,q=r.getColumns().find(R=>R.columnName===g)?.databaseName||g;return C(f.constraintName)||z(r.table,q,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})}getSqlStatementsByPhase(){let t=new yr(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),o={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let n of r)o[n.phase].push(...n.sqlStatements);return o}areColumnsEqual(t,e,r=[]){let o=t.name===e.databaseName,n=this.sql.getDbType(),s=$e(n,t.dataType),a=typeof e.type=="string"?$e(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=C(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=C(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?C(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),u=(n.type||"belongsTo")==="belongsTo"?C(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=$e(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?$e(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=C(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=C(o.manyToManyOptions.leftForeignKey)||l,c=C(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),q=h.columns.find(D=>D.name===c),R=N?this.areColumnsEqual(N,f,h.indexes):false,M=q?this.areColumnsEqual(q,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 Se=J?m:c,Me=D.columns[0];Me&&Me!==Se&&(this.data.relationsToDrop.push({table:n,relation:D}),Me!==m&&Me!==c&&this.data.columnsToDrop.push({table:n,column:Me}));}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 P=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(P);}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=C(a.constraintName)||z(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(q=>q.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,q=f.referencedColumns[0]===u;return g&&N&&q}),c=C(o.relation.constraintName)||z(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=C(o.relation.manyToManyOptions.throughModel),g=C(o.relation.manyToManyOptions.leftForeignKey),N=C(o.relation.manyToManyOptions.rightForeignKey),q=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||"")),P=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===N&&_.referencedTable===o.relation.model().table);if(q&&x||R&&P)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?C(n):z(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 w{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 L=class extends w{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 w{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 pe=class extends w{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 qe=class extends w{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 w{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 Ne=class extends w{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var oe=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 fe=class extends w{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 cp;cp=Symbol.toStringTag;var H=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[cp]="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 Mf=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},Ce=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=>Mf(d,t,r,o,a,n)));return l.length===1?l[0]:l};var Rf=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,xf=/^\d{4}-\d{2}-\d{2}$/,Fa=i=>typeof i!="string"?i:Rf.test(i)?new Date(i.replace(" ","T")+"Z"):xf.test(i)?new Date(i+"T00:00:00Z"):i,Af=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);}}),pp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await Af(r):t[e]=r;}return t};var gr=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);});}},fp=(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,q)=>{if(N)return m(N);p([q]);});});});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"),q=Object.fromEntries(g.map((P,_)=>[P,N[_]])),R=new T(s,e.getDbType()),{sql:M,bindings:x}=R.parse([new j(new L(s.table),[q])]);return new Promise((P,_)=>{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);P(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 St(()=>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 St(()=>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 St(()=>fp(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,P)=>{h.input(`p${P}`,x);});let f=0,g=i.replace(/\?|@(\d+)/g,()=>`@p${f++}`),N=await St(()=>h.query(g),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?N.rowsAffected[0]:o==="raw"?N:N.recordset;case "oracledb":let q=4002,R=null,M=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(Fa),P=0,_=i.replace(/\?/g,()=>`:${++P}`),E=await St(()=>R.execute(_,x,{outFormat:q,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 pp(D),Z={};for(let Se in J)Z[Se.toLowerCase()]=J[Se];return Z})??[])}finally{R&&!M&&await R.close();}default:throw new S("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},Tr=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 B("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=q=>{try{a.release(q);}catch{}};return c.on("data",q=>{if(o.onData){h++,Promise.resolve(o.onData(d,q)).then(()=>{h--,f&&h===0&&!g&&(N(),d.end());}).catch(R=>{g=true,N(R),d.destroy(R);});return}d.write(q);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),d.end());}),c.on("error",q=>{g=true,N(q),d.destroy(q);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new gr(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(Fa),c=a.queryStream(p,m,{outFormat:d}),h=0,f=false,g=false,N=async()=>{try{await a.close();}catch{}};return c.on("data",q=>{if(g)return;let R={};for(let M in q)R[M.toLowerCase()]=q[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",q=>{g=true,N(),l.destroy(q);}),l}default:throw new S("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function St(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++,nl(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var W=(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";Be.extend(If);Be.extend(Df);Be.extend($f);var it=(i=new Date)=>Be(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 Nr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Sr=class extends Te{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var wr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var qr=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 Np(i){try{return G.getMetadata(lr,i.prototype)||[]}catch{return []}}function Sp(i){return G.getMetadata(Wa,i.prototype)||[]}function wp(i){return (G.getMetadata(Wa,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=C(s),l=o();switch(r){case "belongsTo":return new Nr(l,n,a);case "hasOne":return new wr(l,n,a);case "hasMany":return new Sr(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 qr(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function qp(i){return G.getMetadata(rt,i)||G.getMetadata(rt,i.prototype)}function Cp(i){return G.getMetadata(sp,i.prototype)||[]}function _p(i){return G.getMetadata(ip,i.prototype)||[]}function Mp(i){return G.getMetadata(ap,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 qp(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=Np(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 Sp(this)}static getIndexes(){return Cp(this)}static getUniques(){return _p(this)}static getChecks(){return Mp(this)}};at.softDeleteColumn="deletedAt",at.softDeleteValue=it();var qt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=wp(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 Cr(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}function Rp(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var lt=i=>typeof i=="number"?i:parseFloat(i);var le=class extends w{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 Ke=class extends w{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 _r=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Mr=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var De=class extends w{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 w{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 w{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 Rr=class extends w{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var xr=class extends w{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var _t=class extends w{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 Pr=class Pr{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=Pr.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"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Rr(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new xr(t),this}};Pr.EMPTY_MAP=new Map;var Ar=Pr;var We=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 Ne(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 Ne(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 $r=class extends Ar{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 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 We(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new We(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new We(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let d;if(l){let u=new We(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 Dr=class extends $r{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(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 L(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new _r,this}distinctOn(...e){return this.distinctOnNode=new Mr(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 Ir=class extends Dr{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 $(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 $(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 fe("","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 fe("","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 fe("","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 fe("","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 Ke(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 Ke(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ke(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ke(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 fe(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new fe(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Ne(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 Ne(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Or=class extends Ir{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new oe(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new oe(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new oe(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new oe(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new oe(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new oe(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new oe(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new oe(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new oe(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new oe(t,"or",false,"raw",e)),this}};var k=class i extends Or{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 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 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 Tr(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:Rp(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:Cr(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 L(a,r),this}return this.fromNode=new L(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 H(()=>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 H(()=>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 L(this.model.table),[a],void 0,true),this.onDuplicateNode=new pe(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new H(()=>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 L(this.model.table),[u],void 0,true),new pe(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 L(this.model.table),s,void 0,true),this.onDuplicateNode=new pe(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning),new H(()=>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 L(this.model.table),a,void 0,true),new pe(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(", "),q=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 ${q};`,P=await this.getSqlDataSource("write"),_=await F(x,u,P,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 qe(this.fromNode,o,n,false,r);let s=r&&r.length>0;return new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:a,values:l}=await this.interpreterUtils.prepareColumns(o,n,"update");this.updateNode=new qe(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 H(()=>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 H(()=>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 qe(this.fromNode,[r],[o]),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new qe(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=K(this.modelSelectedColumns),e.distinctNode=K(this.distinctNode),e.distinctOnNode=K(this.distinctOnNode),e.selectNodes=K(this.selectNodes),e.withQuery=K(this.withQuery),e.joinNodes=K(this.joinNodes),e.whereNodes=K(this.whereNodes),e.groupByNodes=K(this.groupByNodes),e.havingNodes=K(this.havingNodes),e.orderByNodes=K(this.orderByNodes),e.lockQueryNodes=K(this.lockQueryNodes),e.unionNodes=K(this.unionNodes),e.withNodes=K(this.withNodes),e.fromNode=K(this.fromNode),e.limitNode=K(this.limitNode),e.offsetNode=K(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 W(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await W(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await W(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await W(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await W(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await W(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await W(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await W(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await W(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await W(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await W(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await W(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 xp(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 qt(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 Ce(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 Tr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l),u=await Ce([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 H(()=>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 H(()=>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 H(()=>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:Cr(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=K(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=xp({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(K(s));else for(let[s]of this.model.getColumnsByDatabaseName())n.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=K(s);this.qualifyWhereNodeColumns(a,this.model.table),n.whereNodes.push(a);}for(let s of this.groupByNodes)n.groupByNodes.push(K(s));for(let s of this.orderByNodes)n.orderByNodes.push(K(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(n.limitNode=K(this.limitNode)),this.offsetNode&&(n.offsetNode=K(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(K(s));for(let s of e.orderByNodes)n.orderByNodes.push(K(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 fe)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ne)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=_e.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(_=>mo(_,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=_e.randomBytes(6).toString("hex"),q=`${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=`${_e.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(q,_=>_.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 P=g.map(_=>mo(_,q,e.model.table));return x.select(...P).select([`${q}.${M}`,c.leftForeignKey]).table(q);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 W(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await W(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await W(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await W(this.paginate.bind(this,e,r,{ignoreHooks:s}),n)();return {data:{paginationMetadata:l.paginationMetadata,data:l.data},time:Number(a)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await W(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await W(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await W(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await W(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await W(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await W(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}async insertWithPerformance(e,r="millis"){let[o,n]=await W(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await W(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}};function Ap(){return {}}var Ie=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Ap(),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 L(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 H(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((q,R)=>{let M=u[R];p[q]=M,t[q]??(t[q]=M);});let m=!e.returning||e.returning.length===0,{sql:c,bindings:h}=this.astParser.parse([new j(new L(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 Ce([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 L(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 H(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:q,values:R}=await this.interpreterUtils.prepareColumns(Object.keys(g),Object.values(g),"insert"),M={};q.forEach((x,P)=>{let _=R[P];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 L(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 Ce(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 L(this.model.table),n,void 0,true),a=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new pe(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 H(d,u,p,async()=>{let m=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async x=>{let{columns:P,values:_}=await this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert"),E=Object.fromEntries(P.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 L(this.model.table),m,void 0,true),new pe(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 Ce(x,this.model,o.returning)||[]}let q=t[0],R=r.map(x=>x[q]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(q,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=P=>this.interpreterUtils.formatStringColumn("mssql",P),d=[],u=t.map(P=>`select ${s.map(E=>(d.push(P[E]),`@${d.length}`)).join(", ")}`),p=s.map(l).join(", "),m=u.join(" union all "),c=e.map(P=>`target.${l(P)} = source.${l(P)}`).join(" and "),h=r.filter(P=>!e.includes(P)).map(P=>`target.${l(P)} = source.${l(P)}`).join(", "),f=s.map(l).join(", "),g=s.map(P=>`source.${l(P)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(P=>`inserted.${l(P)}`).join(", "):s.map(P=>`inserted.${l(P)}`).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 P=e[0],_=n.map(X=>X[P]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(P,_).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 qe(new L(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 L(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 Ce([a],this.model):null}return await Ce(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 L(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 Pp=(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=_e.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 B("mssql")});switch(this.isolationLevel){case "READ UNCOMMITTED":return t.READ_UNCOMMITTED;case "READ COMMITTED":return t.READ_COMMITTED;case "REPEATABLE READ":return t.REPEATABLE_READ;case "SERIALIZABLE":return t.SERIALIZABLE;default:throw new S("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var Ha=Symbol.for("hysteria.orm.SqlDataSource"),$p,Dp,Rt=class i extends(Dp=Ft,$p=Ha,Dp){constructor(e){super(e);this[$p]=true;this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Ut;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&&Ha in e&&e[Ha]===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=Jr(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=Jr(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(Pp(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 cr(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 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 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 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 $(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 fl(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 Vr(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 pl(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 Yt(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=$e(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=$e(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()),q=null,R=String(a.column_type||a.COLUMN_TYPE||""),M=R.match(/^enum\((.+)\)$/i);M&&(q=M[1].split(",").map(E=>E.trim().replace(/^'|'$/g,"")));let x=R.toLowerCase(),P=x.includes(" unsigned"),_=x.includes(" zerofill");return {name:l,dataType:u,isNullable:m,defaultValue:c,length:h,precision:f,scale:g,withTimezone:N,enumValues:q,unsigned:P,zerofill:_}})}async getIndexInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jt(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 Vt(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 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(!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(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"),c=l.find(M=>M.folder==="limit"),m=l.find(M=>M.folder==="offset"),p=this.dbType==="mssql"&&c&&!d&&!u,f=this.dbType==="mssql"&&!p&&(c||m),y=this.dbType==="oracledb"&&(c||m),b=[],g=[],C=null;p&&c&&g.push(c.limit);for(let M=0;M<l.length;M++){let x=l[M];if(p&&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 _=$.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"){b.push(`${_.sql}${D}`),g.push(..._.bindings),C=x.keyword;continue}if(C!==x.keyword||x.canKeywordBeSeenMultipleTimes){if(r)b.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 xe=l[Z];if(xe.folder==="with"&&xe.clause==="recursive"){we=true;break}Z++;}we&&(J=`${J} recursive`);}if(J==="select"){let Z=p?`top (@${e}) `:"";if(o){let we=Array.isArray(o.columns)?o.columns.join(", "):"";b.push(`select ${Z}distinct on (${we}) ${_.sql}${D}`);}else n?b.push(`select ${Z}distinct ${_.sql}${D}`):b.push(`select ${Z}${_.sql}${D}`);}else J==="from"&&a?b.push(`${J} ${_.sql}${a}${D}`):b.push(`${J} ${_.sql}${D}`);}C=x.keyword;}else b.push(`${_.sql}${D}`);g.push(..._.bindings);}if(f){u||b.push("order by (select null)");let M=m?.offset??0;g.push(M);let $=`offset @${e+g.length-1} rows`;if(c){g.push(c.limit);let _=e+g.length-1;$+=` fetch next @${_} rows only`;}b.push($);}if(y){u||b.push("order by null");let M=m?.offset??0;g.push(M);let $=`offset :${e+g.length-1} rows`;if(c){g.push(c.limit);let _=e+g.length-1;$+=` fetch next :${_} 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(c=>c.folder==="column");if(e=e.concat(n),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=o.getNodes().filter(c=>{let m=c;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(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new de(c));});}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(p=>p.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(p=>p.constraintType==="null"),u=o.getNodes().find(p=>p.constraintType==="not_null")||l,c=o.getNodes().find(p=>p.constraintType==="default"),m={};u&&(m.nullable=u.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.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)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Tt(w(a))):this.nodes.push(new rr(w(a),c.defaultValue))),o.getNodes().forEach(p=>{let f=p;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 c=u.startsWith("alter table")?u:`alter table ${u}`;this.rawQuery(c),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 c of u)c.columnName===d.columnName&&a.push(`fk.${n.table}.${c.constraintName}`);}}o.set(s,a);}return {foreignKeys:e,tables:r,constraints:o}}topologicalSortReverse(t,e){let r=new Set,o=new Set,n=[],s=a=>{if(o.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;o.add(a);let l=e(a);for(let d of l)s(d);o.delete(a),r.add(a),n.push(a);};for(let a of t.keys())r.has(a)||s(a);return n}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],o=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of o){let[a,l]=s.split("."),d=t.relationsToDrop?.find(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(),p=m.primaryKey,y=m.getColumns().find(b=>b.columnName===p);if(y)n=y.databaseName;else {let b=m?.databaseCaseConvention||"preserve";n=V(p,b);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let p=m.getColumns(),f=p.find(y=>y.columnName===n);if(f)n=f.databaseName;else {let y=m.primaryKey||"id",b=p.find(g=>g.columnName===y);if(b)n=b.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(n||y,g);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(b=>b.columnName===p);if(y)n=y.databaseName;else {let b=m?.databaseCaseConvention||"preserve";n=V(p,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(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=w(m),f=a.find(y=>y.columnName===p);if(f)l=f.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=V(p,y);}}let u=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=o||H(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:u,onUpdate:c});}).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(c=>c.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(", ")} }`:"",c=[`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),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}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(c=>c.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(M=>M.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)),c=n.columns.filter(y=>Array.isArray(y.type)),m=new Set(c.map(y=>y.databaseName||y.columnName));for(let y of o.checkConstraints)if(!u.has(y.name)){let b=[...m].find(g=>new RegExp(`[\\["\\[]?${g.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i").test(y.expression));if(b){let g=c.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(),M=[...C.enumValues].sort();if(!(R.length===M.length&&R.every(($,_)=>$===M[_]))){e.data.checksToDrop.push({table:r.table,name:y.name});let $=e.sql.getDbType(),_=$==="mssql"?"[":'"',E=$==="mssql"?"]":'"',ee=g.type.map(D=>`'${D.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${_}${b}${E} IN (${ee})`});}}}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 p=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&&p.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((c,m)=>c===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",c=d.getColumns().find(f=>f.columnName===u),m=d.table,p=c?.databaseName||u;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}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,c=l.find(y=>y.columnName===u);c&&(u=c.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),c=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,u),p=this.normalizeDefaultValue(e,o||r,c);return m!==p?"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),c=a.getColumns().find(D=>D.columnName===d);if(!u||!c)continue;let m=w(o.manyToManyOptions.leftForeignKey)||l,p=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(c,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(u,m),b=this.clonePkAsColumn(c,p),g=f.columns.find(D=>D.name===m),C=f.columns.find(D=>D.name===p),R=g?this.areColumnsEqual(g,y,f.indexes):false,M=C?this.areColumnsEqual(C,b,f.indexes):false;for(let D of f.foreignKeys){let J=D.referencedTable===s.table,Z=D.referencedTable===a.table;if(!J&&!Z)continue;let we=J?m:p,xe=D.columns[0];xe&&xe!==we&&(this.data.relationsToDrop.push({table:n,relation:D}),xe!==m&&xe!==p&&this.data.columnsToDrop.push({table:n,column:xe}));}let x={};R||(x[y.databaseName]=y),M||(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),_=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),E=f.foreignKeys.find(D=>D.referencedTable===s.table&&D.columns.length===1&&D.columns[0]===m),ee=f.foreignKeys.find(D=>D.referencedTable===a.table&&D.columns.length===1&&D.columns[0]===p);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(!ee){let D=f.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,c=w(a.constraintName)||H(o.table,u,a.model().table);s.add(c);}r.set(o.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async o=>{let n=await this.sql.getTableSchema(o.table),s=this.models.find(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 c=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=c.has(y.columns[0]),g=y.referencedTable===d,C=y.referencedColumns[0]===u;return b&&g&&C}),p=w(o.relation.constraintName)||H(o.table,l,d),f=e.get(o.table)||new Set;if(m||p&&f.has(p))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,M=await this.sql.getTableSchema(y),x=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===b&&_.referencedTable===(s?.table||"")),$=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===g&&_.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 c=a.find(b=>b.columnName===d.foreignKey)?.databaseName||d.foreignKey,m=d.model(),p=m.primaryKey||"id",y=m.getColumns().find(b=>b.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===c&&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,c=e.has(u),m=n?true:o?o.has(u):true;if(c){if(!m)continue;if(d===null){s[u]=null;continue}let p=e.get(u);if(p?.serialize){let f=p.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 p=d.match(/\s+as\s+(.+)$/i);p&&s.push(p[1].trim());continue}let c=d;if(c.includes(".")&&(c=c.split(".").pop()),c==="*")continue;let m=r.get(c)?.columnName??c;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(c){c&&u(c),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,u)=>{n.all(i,t,(c,m)=>{c&&u(c),(!m||!m.length)&&d([]),d(m);});});let s=r?.typeofModel;if(!s)return new Promise((d,u)=>{n.run(i,t,function(c){c?u(new Error(c.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((c,m)=>{n.run(i,t,function(p){if(p)return m(p);let f=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){c([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);c([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((c,m)=>{n.run(i,t,function(p){if(p)return m(p);c(d);});});let u=[];return new Promise(async(c,m)=>{try{let p=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(($,_)=>[$,g[_]])),R=new N(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 ee=f[a]||this.lastID;if(!ee)return _(new q("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let D=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(D,[ee],(J,Z)=>{if(J)return _(J);$(Z);});});})});u=await Promise.all(p),c(u);}catch(p){m(p);}})}return new Promise((d,u)=>{n.run(i,t,function(c){c?u(new Error(c.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}`),c=await qt(()=>l.query(u,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?c.rows:o==="raw"?c:c.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 p=e.getPool(),f=e.sqlConnection?e.sqlConnection.request():p.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,M=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(Va),$=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 yp(D),Z={};for(let we in J)Z[we.toLowerCase()]=J[we];return Z})??[])}finally{R&&!M&&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}),c=0,m=false,p=false,f=()=>{try{a.release();}catch{}};return u.on("data",y=>{if(o.onData){c++,Promise.resolve(o.onData(l,y)).then(()=>{c--,m&&c===0&&!p&&(f(),l.end());}).catch(b=>{p=true,f(),l.destroy(b);});return}l.write(y);}),u.on("end",()=>{m=true,c===0&&!p&&(f(),l.end());}),u.on("error",y=>{p=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,c=i.replace(/\?/g,()=>`$${++u}`),m=new l.default(c,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),f=0,y=false,b=false,g=C=>{try{a.release(C);}catch{}};return p.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);}),p.on("end",()=>{y=true,f===0&&!b&&(g(),d.end());}),p.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++}`),c=0,m=false,p=false;return l.on("row",f=>{if(!p){if(o.onData){c++,Promise.resolve(o.onData(a,f)).then(()=>{c--,m&&c===0&&!p&&a.end();}).catch(y=>{p=true,a.destroy(y);});return}a.write(f);}}),l.on("error",f=>{p=true,a.destroy(f);}),l.on("done",()=>{m=true,c===0&&!p&&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,c=i.replace(/\?/g,()=>`:${++u}`),m=t.map(Va),p=a.queryStream(c,m,{outFormat:d}),f=0,y=false,b=false,g=async()=>{try{await a.close();}catch{}};return p.on("data",C=>{if(b)return;let R={};for(let M in C)R[M.toLowerCase()]=C[M];if(o.onData){f++,Promise.resolve(o.onData(l,R)).then(()=>{f--,y&&f===0&&!b&&(g(),l.end());}).catch(M=>{b=true,g(),l.destroy(M);});return}l.write(R);}),p.on("end",()=>{y=true,f===0&&!b&&(g(),l.end());}),p.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((p,f)=>[p,a[f]]));this.insertNode=new j(this.fromNode,[l],r,n);let{sql:d,bindings:u}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await F(d,u,c,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 c=>{let{columns:m,values:p}=await this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert");return Object.fromEntries(m.map((f,y)=>[f,p[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:c,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)]),p=await this.getSqlDataSource("write"),f=await F(c,m,p,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:p,values:f}=await this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert"),y=Object.fromEntries(p.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"),c=await F(l,d,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(c)?c:[c]})}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=[],c=e.map(E=>`select ${a.map(D=>(u.push(E[D]),`@${u.length}`)).join(", ")}`),m=a.map(d).join(", "),p=c.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(", "),M=(n.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",x=`merge into ${l} as target using (${p}) as source (${m}) on ${f} ${M} when not matched then insert (${b}) values (${g}) 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]),c=await this.getSqlDataSource("write");return F(d,u,c,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((p,f)=>({[l]:r[this.model.primaryKey],[d]:p[a.model.primaryKey],...n?n(p,f):{}}));class c extends at{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new Oe(c,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"),c=u.some(m=>m.column==="*"||m.column.endsWith(".*"));if(u.length===0||c)for(let[m,p]of d)e.selectRaw(`${a.table}.${m} as ${s}${n}${p.columnName}`);else for(let m of u){let p=m.column,f=p.includes(".")?p.split(".").pop():p,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 c=u[this.model.primaryKey];d.has(c)||d.set(c,[]);let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.get(c).push(m));}),r.forEach(u=>{let c=u[this.model.primaryKey];u[s]=d.get(c)||[];});}else {let d=new Map;e.forEach(u=>{let c=u[this.model.primaryKey];if(!d.has(c)){let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.set(c,m));}}),r.forEach(u=>{let c=u[this.model.primaryKey];u[s]=d.get(c)||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 p=m[e.foreignKey];p&&n.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let f=n.get(String(p));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 p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let f=s.get(String(p));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 p=m[e.foreignKey];if(!p)return;let f=String(p);a.has(f)||a.set(f,[]),a.get(f).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let f=a.get(String(p))||[];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,c=this.modelColumnsMap.get(u)||this.modelColumnsDatabaseNames.get(u)||V(u,this.model.modelCaseConvention);o.forEach(m=>{let p=m[c];if(p==null)return;let f=String(p);d.has(f)||d.set(f,[]),delete m[c],d.get(f).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let f=d.get(String(p))||[];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(_=>_.isRawValue?_.column:`${this.interpreterUtils.formatStringColumn(this.dbType,_.column)} ${_.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=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&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(_=>co(_,d,e.model.table));return c.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 p=r;if(!o.length)return e;let f=e.limitNode?.limit,y=e.offsetNode?.offset,b=e.modelSelectedColumns.length?e.modelSelectedColumns.map(_=>_.includes(".")?_:`${r.model.table}.${_}`):[`${r.model.table}.*`];if(!f&&!y)return e.select(...b).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n);let g=Re.randomBytes(6).toString("hex"),C=`${r.model.table}_cte_${g}`,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=`${Re.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(C,_=>_.select(...b).select([`${p.throughModel}.${p.leftForeignKey}`,M]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${R}) as rn_${g}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));f&&x.whereRaw(`rn_${g} <= ${f+(y||0)}`),y&&x.whereRaw(`rn_${g} > ${y}`);let $=b.map(_=>co(_,C,e.model.table));return x.select(...$).select([`${C}.${M}`,p.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(p=>!p.isRawValue&&p.table===d.throughModel&&p.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let c=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(c).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"),c={};d.forEach((C,R)=>{let M=u[R];c[C]=M,t[C]??(t[C]=M);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:f}=this.astParser.parse([new j(new W(this.model.table),[c],e.returning,m)]),y=await F(p,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"),M={};C.forEach((x,$)=>{let _=R[$];M[x]=_,b[x]??(b[x]=_);}),d[g]=M;}));let u=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new j(new W(this.model.table),d,e.returning,u)]),p=await F(c,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(p,t,"many",e.returning)||[];let f=p;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(p=>[p,m[p]]))),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}},c=()=>{let{sql:m,bindings:p}=u();return Fe(m,p)};return new Y(d,u,c,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((ee,D)=>[ee,_[D]]));m.push(E);})),this.sqlType==="mssql")return this.executeMssqlMerge(m,t,e,o,r);let p=!o.returning||o.returning.length===0,f=!p&&(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(p)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(g.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=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(", ")}`),c=s.map(l).join(", "),m=u.join(" union all "),p=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}`:"",M=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${R} when not matched then insert (${y}) values (${b}) output ${g};`,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(ee=>ee[$]);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(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:c,bindings:m}=this.astParser.parse([new Ce(new W(this.model.table),a,l),new A(d,"and",false,"=",t)]);if(await F(c,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let p=await this.findOneByPrimaryKey(t,r.returning);if(!p)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return p}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((p,f)=>{let y=a[f];l[p]=y,n[p]??(n[p]=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 c=this.query().select(...e.returning||["*"]);for(let[p,f]of Object.entries(l))f!=null&&p!==o&&c.where(p,"=",f);o&&c.orderBy(o,"desc");let m=await c.one({ignoreHooks:["beforeFetch"]});if(m){let p=m;o&&p[o]&&(n[o]=p[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)),c=u?`${e}:${u}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await n(...d);return await this.cacheAdapter.set(c,p,l),p}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)]),l=this.getDbType();if(l==="postgres"||l==="mssql")for(let d of r){let u=a.find(c=>{let m=c.expression;return new RegExp(`[\\["\\[]?${d.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(([^)]+)\\)`,"i").test(m)});if(u){let c=new RegExp("IN\\s*\\(([^)]+)\\)","i"),m=u.expression.match(c);m&&(d.enumValues=m[1].split(",").map(p=>p.trim().replace(/^'|'$/g,"")));}}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 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=De(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=De(s,d),c=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,m=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,f=a.char_length!=null?Number(a.char_length):null,y=a.numeric_precision!=null?Number(a.numeric_precision):null,b=a.numeric_scale!=null?Number(a.numeric_scale):null,g=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:p,length:f,precision:y,scale:b,withTimezone:g,enumValues:C,unsigned:$,zerofill:_}})}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,c=d.Non_unique===0,m=l.get(u)||{name:u,columns:[],isUnique:c};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,c=!!d.is_unique,m=l.get(u)||{name:u,columns:[],isUnique:c};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,c=await this.rawQuery(`PRAGMA index_info(${d})`),p=this.extractRowsFromRawResult(c).map(f=>f.name);a.push({name:d,columns:p,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),c=l.get(u)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};c.columns.push(String(d.from)),c.referencedColumns.push(String(d.to)),l.set(u,c);}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}`,c=a.get(u)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(u,c);}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:[]}}},zm=new Ii;var Oi=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,16 +337,28 @@ ORDER BY ordinal_position`,bindings:[]}}},zm=new Ii;var Oi=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(p=>p.name),c=d.filter(p=>u.includes(p.migrationName));if(c.length===0){T.info("No pending migrations.");return}if(t){let p=c.findIndex(b=>b.migrationName===t);if(p===-1){T.error(`Rollback until migration not found: ${t}`);return}let f=c.slice(p);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(c),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() {
|
|
344
|
-
${
|
|
344
|
+
${n.map(l=>` ${l}`).join(`
|
|
345
|
+
`)}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
async down() {
|
|
349
|
+
${s.map(l=>` ${l}`).join(`
|
|
350
|
+
`)}
|
|
351
|
+
}
|
|
352
|
+
}`}return `import { Migration } from "hysteria-orm";
|
|
353
|
+
|
|
354
|
+
export default class extends Migration {
|
|
355
|
+
async up() {
|
|
356
|
+
${t.map(n=>` this.schema.rawQuery('${n.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}');`).join(`
|
|
345
357
|
`)}
|
|
346
358
|
}
|
|
347
359
|
|
|
348
360
|
async down() {}
|
|
349
|
-
}`}};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):`
|
|
350
362
|
import { ${o} } from "hysteria-orm";
|
|
351
363
|
|
|
352
364
|
const db = new ${o}({
|
|
@@ -386,7 +398,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
386
398
|
password: "root",
|
|
387
399
|
username: "default",
|
|
388
400
|
db: 0,
|
|
389
|
-
}`;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";
|
|
390
402
|
|
|
391
403
|
export default class extends BaseSeeder {
|
|
392
404
|
/**
|
|
@@ -396,7 +408,9 @@ export default class extends BaseSeeder {
|
|
|
396
408
|
console.log('Seeder completed');
|
|
397
409
|
}
|
|
398
410
|
}
|
|
399
|
-
`}};var py=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;
|
|
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}?
|
|
400
412
|
${n}
|
|
401
|
-
(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=Ep.devDependencies,kp=async(i,t,e)=>{let r=Kr.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 vp(`${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 vp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&b.info("Dev dependencies installed successfully"),s||b.info("Dev dependencies installation skipped");}};var Kr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Wr=Kr.concat("mongodb","redis");async function Le(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)),Rt.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 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||(b.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Wr.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${Wr.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]=Qp();b.info(`Package manager: ${e}`),b.info("Installing base dependencies"),await kp(e,r,i.type);let o=vr.initTemplate(i.type);ye.existsSync("database")?b.info("database folder already exists, skipping"):ye.mkdirSync("database",{recursive:true}),ye.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):ye.writeFileSync("database/index.ts",o),Kr.includes(i.type)&&!ye.existsSync("database/migrations")?ye.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.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)=>{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 Le(t.datasource,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await Qr(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),ye.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let o=ye.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${o.length} characters)`);try{await Qr(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);}});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)=>{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}`),al(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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(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();}});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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(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 xt(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();}});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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(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 Fr(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&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.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).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 Le(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 n=(await ke.makeDiff(t)).getSqlStatements();if(n.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}ye.existsSync(e)||ye.mkdirSync(e,{recursive:!0});let s=await Er.generate(n),a=i?.javascript?".js":".ts";ye.writeFileSync(`${e}/${i?.name}${a}`,s),b.info(`Migration file created successfully: ${i?.name}${a}`),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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Le(i.datasource,i?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(b.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||(b.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),i.dry){b.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}),b.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)=>{b.info(`Creating seeder: ${i}`),b.info(`Seeder options: javascript=${t.javascript}`),i||(b.error("Seeder name is required"),process.exit(1)),Ip(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=>{b.info("Starting seeder execution"),i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Le(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 Op(t,e,r),await t.disconnect(),b.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});he.parse(process.argv);export{Kr as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
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);});})},X=kp.devDependencies,Lp=async(i,t,e)=>{let r=Lr.includes(e)?[`typescript@${X.typescript}`,`esbuild@${X.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":o=`mysql2@${X.mysql2}`;break;case "cockroachdb":case "postgres":o=`pg@${X.pg}`,r.push(`@types/pg@${X["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${X.sqlite3}`,r.push(`@types/sqlite3@${X["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${X.mongodb}`,r.push(`@types/mongodb@${X["@types/mongodb"]}`);break;case "redis":o=`ioredis@${X.ioredis}`,r.push(`@types/ioredis@${X["@types/ioredis"]}`);break;case "mssql":o=`mssql@${X.mssql}`,r.push(`@types/mssql@${X["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${X.oracledb}`,r.push(`@types/oracledb@${X["@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
|
|
402
416
|
//# sourceMappingURL=cli.js.map
|